xv6中阻塞式IO系统调用(bread)实现的疑问咨询
xv6中bread的阻塞IO逻辑说明
- 你找错了位置:原版32位x86 xv6的
bread阻塞逻辑不在陷阱处理程序里,而是在磁盘驱动的等待代码中,属于内核已实现的内容,不需要学生自行补充。 - 具体调用链:
bread(bio.c)获取缓存块,若块未加载则调用rwsect发起磁盘IO;rwsect调用diskwait,后者会调用proc.c中的sleep函数;sleep函数会将当前进程状态设置为SLEEPING,随后调用yield()让出CPU,完成阻塞逻辑。
- 陷阱处理程序的作用是完成用户态到内核态的切换、分发系统调用请求,不会直接处理具体系统调用的阻塞逻辑,这部分逻辑是在系统调用的实现代码内部完成的。
内容的提问来源于stack exchange,提问作者RSStepheni
相关产品推荐
相关产品推荐

