硬件设备驱动(hardware device drivers)、文件系统模块(logical filesystem modules)、网络设备驱动(network device drivers)和网络协议模块(network protocol modules)这四个模块的可扩展性最高。 五、系统中的数据结构Task List Process Scheduler 针对每个进程维护一个数据结构task_struct;所有的进程用链表管理,形成task list;process scheduler还维护一个current指针指向当前正在占用CPU的进程。 Memory Map Memory Manager存储每个进程的虚拟地址到物理地址的映射;并且也提供了如何换出特定的页,或者是如何进行缺页处理。这些信息存放在数据结构mm_struct中。每个进程都有一个mm_struct结构,在进程的task_struct结构中有一个指针mm指向次进程的mm_struct结构。 在mm_struct中有一个指针pgd,指向该进程的页目录表(即存放页目录首地址)——>当该进程被调度时,此指针被换成物理地址,写入控制寄存器CR3(x86体系结构下的页基址寄存器) I-nodes VFS通过inodes节点表示磁盘上的文件镜像,inodes用于记录文件的物理属性。每个进程都有一个files_struct结构,用于表示该进程打开的文件,在task_struct中有个files指针。使用inodes节点可以实现文件共享。文件共享有两种方式:(1)通过同一个系统打开文件file指向同一个inodes节点,这种情况发生于父子进程间;(2)通过不同系统打开文件指向同一个inode节点,举例有硬链接;或者是两个不相关的指针打开同一个文件。 Data Connection 内核中所有的数据结构的根都在Process Scheduler维护的task list链表中。系统中每个进程的的数据结构task_struct中有一个指针mm指向它的内存映射信息;也有一个指针files指向它打开的文件(用户打开文件表);还有一个指针指向该进程打开的网络套接字。
六、子系统架构1. PROCESS SCHEDULER 架构(1)目标process scheduler是Linux kernel中最重要的子系统。系统通过它来控制对CPU的访问——不仅仅是用户进程对CPU的访问,也包括其余子系统对CPU的访问。 (2)模块进程调度器 调度策略模块(scheduling policy module):决定哪个进程获得对CPU的访问权;调度策略应该让所有进程尽可能公平得共享CPU。 |