文件系统读写--文件预读 和 文件锁

来源:互联网 发布:学安卓软件开发教程 编辑:程序博客网 时间:2024/06/03 23:46


10.2 文件预读

        对于文件请求,Linux内核提供了预读策略,比要求长度多读一些,存储在page cache里,后续读顺序的,马上可以利用page cache的数据返回,不必再次读硬盘。对于硬盘这种慢速设备而言,利用缓存数据大大提升I/O效率

struct backing_dev_info default_backing_dev_info = {.ra_pages= (VM_MAX_READAHEAD * 1024) / PAGE_CACHE_SIZE,.state= 0,.capabilities= BDI_CAP_MAP_COPY,.unplug_io_fn= default_unplug_io_fn,};EXPORT_SYMBOL_GPL(default_backing_dev_info);

        a


10.3 文件锁

        读写调用之间没有同步,可能导致 读进程 读取到 被破坏或者不完整的数据。

--建议锁:

应用层实现,内核只提供程序接口,不参与锁的控制和协调,也不对读写操作做内部检查和强制。

如果有进程不检查文件是否有建议锁 就写入数据,内核不加以阻拦。建议锁要求进程遵守规则;建议锁可以对整个文件进行加锁,也可以对文件的一部分进行加锁。

--强制锁:

由内核强制实施。只要进程调用读写操作,内核都会检查与存在的锁是否冲突,如果冲突,内核会加以阻拦。


根据访问方式的不同,文件锁又分为 读锁 、 写锁

--读锁    :

允许多个进程同时进行操作,称为共享锁。文件加了读锁就不能再设置写锁,但允许其他进程再同一区域在设置读锁。

--写锁    :

主要目的是隔离文件,是所写的内容不被其他进程的 读写 干扰,以保证数据的完整性。 写锁一旦加上,只有上锁的人可以操作,其他进程无论读还是写都只能等待写锁释放后才能执行,故写锁又称 互斥锁


        如果一个文件已经被加上了读锁,其他进程再对这个文件进行写 操作就会被内核阻止

        如果一个文件已经被加上了写锁,其他进程再对这个文件进行 读取 或者 写操作 就会被内核阻止

原创粉丝点击