JPEG标准中文文档PDF
15.5 进程、描述符和插口
在描述插口系统调用之前,我们需要介绍将进程、描述符和插口联系在一起的数据结构。图15-13给出了这些结构以及与我们的讨论有关的结构成员。关于文件结构的更复杂的解释请参考 Leffler 等人(1989)。
图15-13进程、文件和插口结构
实现系统调用的函数的第一个参数总为p,即指向调用进程的proc结构的指针。内核利用proc结构记录进程的有关信息。在proc结构中,p_fd指向filedesc结构,该结构的主要功能是管理fd_ofiles指向的描述符表。描述符表的大小是动态变化的,由一个指向file结构的指针数组组成。每一个file结构描述一个打开的文件,该结构可被多个进程共享。图15-13仅显示了一个file结构。通过p->p_fd->fd_ofiles[fd]访问到该结构。
在file结构中,有两个结构成员是我们感兴趣的:f_ops和f_data。I/O系统调用(如read和write)的实现因描述符中的I/O对象类型的不同而不同。f_ops指向fileops结构,该结构包含一张实现read、write、ioctl、select和close系统调用的函数指针表。图15-13显示f_ops指向一个全局的fileops结构,即socketops,该结构包含指向插口用的函数的指针。f_data指向相关I/O对象的专用数据。对于插口而言,f_data指向与描述符相关的socket结构。socket结构中的so_proto指向产生插口时选中的协议的protosw结构。回想一下,每一个protosw结构是由与该协议关联的所有插口共享的。
如果你对Linux系统文件I/O编程感兴趣,可以参考这篇文章:Linux系统文件I/O编程。而对于Java I/O系统的详细解释,这篇文章不容错过:Java I/O系统。想要了解进程管理和调度?这本教材会是一个很好的选择:操作系统概论教材成人自考进程管理进程调度内存管理文件系统I/O设备管理。Linux文件系统的异步I/O扩展也值得一读:Linux文件系统的异步I/O扩展。
现在,我们开始讨论系统调用。