Linux进程睡眠误差有时特别大?

在PC上,Redhat操作系统,我的进程通过 sched__setscheduler 设置为FIFO调度,优先级指定为1。用nanosleep睡眠,为什么睡眠时间有时误差还是很大(有时误差竟然上毫秒)?如果与调度有关,按理说优先级最高的FIFO进程唤醒后(而且我看Linux内核有进程唤醒时会触发调度)能立即抢占其他进程,不应该存在调度等待啊。
另外一个问题,Linux如果所有进程都采用实时调度策略,这和实时操作系统有何本质区别?

FIFO调度,优先级为最高,当nanosleep时还是会让出cpu,发生任务调度。调度器一般有主调度器和周期调度器,周期调度器使用的timer是以HZ为单位的,也就是1/HZ才会发生进程调度,一般情况下HZ为100或更高。因此当nanosleep设定的睡眠时间过后进程重新获得CPU,有1/HZ的误差都是正常的。