(57a)接着介绍另一个读盘块的函数 bread,以及释放 bh 的函数 brelse( ):
(57b) 接着探讨下 bread 的调用链,看看这个函数的具体执行过程。可见虽然是一个简单的读块函数,也非常的复杂:
(57c) 接着探讨下硬盘中断发生时候的调用链,如此数据传输链就完整了:
(57d) 3-22d bh.b_dirt,b_uptodate,b_lock的赋值与数据同步 :
(58)因为 函数 get_blk()大量调用了其它函数,一版面列举不完,故对其调用的函数先行注释:get_hash_table()与 find_buffer():
(59) 再来学习一个全局变量 : buffer_wait 。当进程要读硬盘,但内存的缓存块没有空闲的,进程会 sleep_on,形参传入此变量:
(60)
谢谢