Linux内核的组成部分

Linux内核主要有 5个子系统组成:进程调度 (SCHED) ,内存管理 (MM) ,虚拟文件系统 (VFS) ,网络接口 (NET)和进程间通信 ( IPC )。

1、进程调度
进程在进程调度子系统中微观串行,宏观并行。其余 4 个子系统都依赖于进程调度系统,因为每个子系统也需要挂起或恢复进程,

当它们需要做这些工作时,都得和进程调度子系统打交道。

进程的睡眠有两种情况,一种是因为得不到请求的资源而进入“深度睡眠” (TASK_UNINTERRUPTIBLE),深度睡眠直到得到请

求的资源后才会醒来,其间不可被打断;另外一种是由于时间片用完,而进入的“浅度睡眠”(TASK_INTERRUPTIBLE),在浅度

睡眠时,如果给进程发一个信号,它就会醒过来。

在设备驱动编程中,当请求的资源不能得到满足时,驱动一般会调度其他进程执行,其对应的进程进入睡眠状态,直到它请求的资源

被释放,才会被唤醒而进入到就绪状态。

设备驱动中,如果需要几个并发执行的任务,可以启动内核线程,启动内核线程的函数为:

int kernel_thread(int(*fn)(void *),void *arg,unsigned long flags);

2、内存管理
内存管理的主要作用是控制多个进程安全地共享主内存区域。当 CPU 带有内存管理单元 (MMU)时,Linux 内存管理完成为每个进程

进行虚拟内存到物理内存的转换。Linux 2.6 内核可以支持无 MMU 的 CPU .

一般而言,Linux 的每个进程享有 4GB 的内存空间,0~3GB 属于用户空间,3~4GB 属于内核空间,内核空间对常规内存,I/O

设备内存以及高端内存有着不同的处理方式。

3、虚拟文件系统
Linux 虚拟文件系统 (VFS) 隐藏了各种硬件的具体细节,为所有的设备提供了统一的接口。而且,它独立于各个具体的文件系统,

是对各种文件系统的一个抽象,它使用超级块 super block 存放文件系统相关信息,使用索引结点 inode 存放文件的物理信息,

使用目录项项 dentry 存放文件的逻辑信息。

4、网络接口
网络接口提供了对各种网络的标准存取和各种网络硬件的支持。网络接口可分为网络协议和网络驱动程序,网络协议部分负责实

现每一种可能的网络传输协议,网络设备驱动程序负责硬件设备进行通信,每一种可能的网络硬件设备都有相应的设备驱动程序。

5、进程间的通信
Linux 支持多种通信机制,如信号量,共享内存,管道,信号等,这些机制可以协助多个进程、多资源的互斥访问、进程间的同

步和消息传递。

 

这 5 个子系统之间的依赖关系为

进程调度和内存管理之间的关系:
这两个子系统互相依赖。在多道程序环境下,必须为程序创建进程,而创建进程的第一件事情就是将程序和数据装入内存。

进程间通信与内存管理的关系:
进程间通信子系统要依赖内存管理支持共享内存通信机制,这种机制允许两个进程除了拥有自己的私有空间,还可以存取共同的内存区域。

虚拟文件系统与网络接口之间的关系:
虚拟文件系统利用网络接口支持网络文件系统(NFS),也利用内存管理支持 RAMDISK 设备。

内存管理与虚拟文件系统之间的关系:
内存管理利用虚拟文件系统支持交换,交换进程 (swapd) 定期由调度程序调度,这也就是内存管理依赖于进程调度的唯一原因。当一

个进程存取的内存映射被换出时,内存管理向文件系统发出请求,同时,挂起当前正在运行的进程。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。