Kay*_*Kay 13 system-programming system-calls
慢系统调用和快系统调用有什么区别?我了解到如果进程捕捉到一些信号,慢系统调用会阻塞,因为捕捉到的信号可能会唤醒被阻塞的系统调用,但我不能完全理解这种机制。任何例子将不胜感激。
Gil*_*il' 20
事实上,系统调用分为三个等级。
getpid
,gettimeofday
,getuid
或setuid
。某些系统调用根据情况可以是阻塞的或非阻塞的;例如,read
如果文件是管道或其他支持非阻塞读取的类型并且设置了O_NONBLOCK
标志,则从不阻塞。sleep
。read
在阻塞文件描述符上调用是阻塞的,wait
.“快”和“慢”系统调用之间的区别接近于非阻塞与阻塞,但这一次是从内核实现者的角度来看的。众所周知,快速系统调用能够在不阻塞或等待的情况下完成。当内核遇到快速系统调用时,它知道它可以立即执行系统调用并保持相同进程的调度。(在一些具有非抢占式多任务处理的操作系统中,快速系统调用可能是非抢占式的;这在普通的 unix 系统中不是这种情况。)另一方面,慢速系统调用可能需要等待另一个任务完成,因此内核必须准备暂停调用进程并运行另一个任务。
有些案例有点灰色地带。例如,磁盘读取(read
从常规文件)通常被认为是非阻塞的,因为它不等待另一个进程;它只是在等待磁盘,这通常只需要一点时间来回答,但不会永远(所以这是上面的情况 2)。但是从内核的角度来看,该进程必须等待磁盘驱动程序完成,所以这绝对是一个缓慢的系统调用。
归档时间: |
|
查看次数: |
17367 次 |
最近记录: |