第十三章,块设备驱动
块设备的file_ops中没有read(), write(),但是有media_changed(), getgeo()用来获取磁盘的状态和信息。使用struct gendisk来表示一个磁盘,操作函数包括alloc_disk(), add_disk(), del_gendisk()等, get_disk()/put_disk()用于计数。对块的操作通过bio,request和request_queue来。结构struct bio中bi_rw表示读写,bi_flags表示命令和状态,bi_iter指明地址和长度(单位为sector)。I/O调度器将bio调整合并后,成为一个request,每个块设备有自己的request_queue。操作函数包括blk_init_queue(), blk_alloc_queue(),blk_peek_queue(), blk_start_request(), bio遍历(bio_for_each_segment), blk_end_request_all(),blk_endio()等。调度器包括Noop, DEADLINE和CFQ。块设备的file_ops中没有read(), write(),但是有