之前一直困惑,ext4 作为一个存储系统,如何处理来自用户的write过程调用,ext4是什么进程模型。查看文件系统的源代码发现,作为一个文件系统,他只需要完成相应的文件系统的接口就可以,并不像应用软件一样需要有自己的进程。
当执行普通的写的时候,只是让用户态的进程陷入到了内核态而已,如下图所示:
当我打开一个vim进程读写文件的时候,显示着,我从sys_write进入,直到调用zfs处理写请求的核心函数zfs_write。其中并没有ZFS的线程来完成请求。
文件系统将数据缓存到page cache当中,文件系统并没有自己的线程。但是我如果写用户态文件系统这么做却不可以,因为总要把数据存放到用户空间的一个区域,能这样做的只有共享内存。
守护进程在后台运行,当有用户读写时,向守护进程发消息,守护进程做预取或者做一些对共享内存的一些维护的工作。
分享一个编程的经验:printf的时候如果不加\n,那么这个语句不会刷新到屏幕上,除非遇到下一个\n。
阅读(1769) | 评论(0) | 转发(0) |