当内核访问磁盘块时,它会搜索具有适当设备块编号组合的缓冲区。
这句话出自《Unix操作系统的设计》一书。所以我的问题是内核如何决定使用哪个缓冲区进行操作,以及从哪里获取该缓冲区的设备块号?
答案1
您的问题是指数据已存在于缓冲区中的情况,还是需要分配新缓冲区的情况?
设备块号来自用于挂载文件系统的设备文件(如 Linux 中的 /dev/sda1 或 BSD 中的 /dev/hd0a)。无论是否使用缓冲区,都需要设备号。缓冲区只是一个高速缓存,用于节省再次读取相同数据的时间。设备内的块号由文件系统的布局决定,请阅读本书的该部分以获取有关文件系统格式的更多信息。有关于目录、索引节点、直接和间接块等的解释。
因此,一旦内核确定需要哪个块,它将查看内存中的缓冲区以找到所需的块。如果存在,则不需要读取操作并立即返回数据。
如果该块的内容不在内存中,内核将选择一个缓冲区,希望该块的内容在不久的将来不会被使用。这通常是最近最少使用的缓冲区。