分类: 系统运维
2011-03-31 22:35:41
14.2
...磁盘I/O虽然会暂时性的堵塞,但并不被认为是slow系统调用,所谓的slow系统调用指的是那些可能会永久堵塞的调用.
14.3
...记录锁是对于访问同一个文件的多个进程来说的,而对于单进程,随后出现的锁总会覆盖前一个对同一文件位置所加的锁,不论是写还是读.
...先F_GETLK然后再F_SETLK或者F_SETLKW不是原子操作,所以先判断锁状态再获取锁的操作是没有必要也是不安全的.
...如果一个进程用读锁锁住了一段文件,这时候第二个进程意图获取对这段文件的写锁,而第三个进程又试图获取对这同一段文件的读锁,对于这种情况,标准是没有指明如何处理的.
...内核会检测死锁,如果发生了死锁,那么内核就会选择其中的一个进程接收错误返回从而终止这个进程.
...如果一个文件描述符关闭了,那么与这个文件描述符关联的文件的所有锁都会清掉.注意是文件本身的锁而不仅仅只是针对这个文件描述符所加的锁,因为这个操作是对i-node进行的,内核不知道也不关心是哪一文件描述符做了关闭操作.当然这里是对某一个进程而言.
...锁不会被fork产生的子进程继承,但是会由exec调用的新程序继承,除非一个文件描述符被设置成了close-on-exec标志.
...对于大多数平台,会根据l_start和文件的当前位置把l_whence的SEEK_CUR转换成一个绝对文件偏移,或者,把SEEK_END转换成文件长度.
...把文件偏移转换成绝对值,核心就可以记住锁的位置而不依赖于文件的当前位置或者文件的结尾.
14.6
...在一个进程里如果对超过一个的文件描述符设置了异步I/O,如果某个描述符引发了SIGPOLL或者SIGIO,我们怎么知道这个信号对应的是哪个描述符呢?实际上这是无从知晓的.另一方面,在调用ioctl设置异步I/O前必须要建立相应的信号句柄,因为SIGPOLL和SIGIO的缺省处理是终止进程,而信号句柄无法得知信号是由哪个描述符引发的.