标签:
linux内核的组成
一、linux内核源代码目录结构
1.1Linux 内核的组成部分
Linux 内核主要由进程调度(SCHED) 、内存管理(MMU) 、虚拟文件系统(VFS) 、网络接口(NET)和进程间通信(IPC)等 5 个子系统组成。
1.1.1进程调度
精度调度控制系统中的多个进程对 CPU 的访问使得多个进程能在 CPU 中微观串行,宏观并行地执行。进程调度处于系统的中心位置,内核中其他的子系统都依赖它,因为每个子系统都需要挂起或恢复进程。
Linux 的进程在几个状态间进行切换。在设备驱动编程中,当请求的资源不能得到满足时,驱动一般会调度其他进程执行,并使驱动对应的进程进入睡眠状态,直到它请求的资源被释放,才会被唤醒而进入就绪状态。睡眠分为可被打断的睡眠和不可被打断的睡眠,两者的区别在于可被打断的睡眠在收到信号的时候会醒来。
设备驱动中,如果需要几个并发执行的任务,可以启动内核线程,启动内核线程的函数为:
int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags);
1.1.2内存管理
内存管理的主要作用是控制多个进程安全地共享主内存区域。 当 CPU 提供内存管理单元 (MMU)时, Linux 内存管理完成为每个进程进行虚拟内存到物理内存的转换。
一般而言, Linux 的每个进程享有 4GB 的内存空间, 0~3GB 属于用户空间, 3~4GB 属于内核空间, 内核空间对常规内存、 I/O 设备内存以及高端内存存在不同的处理方式。
1.1.3虚拟文件系统
Linux 虚拟文件系统(VFS)隐藏各种了硬件的具体细节,为所有的设备提供了统一的接口。而且,它独立于各个具体的文件系统,是对各种文件系统的一个抽象,它使用超级块 super block 存放文件系统相关信息,使用索引节点 inode存放文件的物理信息,使用目录项 dentry 存放文件的逻辑信息。
1.1.4网络接口
网络接口提供了对各种网络的标准的存取和各种网络硬件的支持。网络接口可分为网络协议和网络驱动程序,网络协议部分负责实现每一种可能的网络传输协议,网络设备驱动程序负责与硬件设备进行通信, 每一种可能的硬件设备都有相应的设备驱动程序。
1.1.5进程通信
Linux 支持进程间的多种通信机制,包含信号量、共享内存、管道等,这些机制可协助多个进程、多资源的互斥访问、进程间的同步和消息传递。
Linux 内核的 5 个组成部分之间的依赖关系如下:
除了这些依赖关系外,内核中的所有子系统还要依赖于一些共同的资源。这些资源包括所有子系统都用到的例程,如分配和释放内存空间的函数、打印警告或错误信息的函数及系统提供的调试例程等。
二、linux内核空间与用户空间
CPU 内部往往实现了不同的操作模式(级别)
如:ARM 处理器有以下 7 种工作模式:
如:X86 处理器包含 4 个不同的特权级,称为 Ring0~Ring3。Ring0 下,可以执行特权级指令,对任何 I/O 设备都有访问权等,而 Ring3 则有很多操作限制。
Linux 系统充分利用 CPU 的这一硬件特性, 但它只使用了两级。在 Linux 系统中,内核可进行任何操作,而应用程序则被禁止对硬件的直接访问和对内存的未授权访问。例如,若使用 X86 处理器,则用户代码运行在特权级 3,而系统内核代码则运行在特权级 0。
内核空间和用户空间这两个名词被用来区分程序执行的这两种不同状态,它们使用不同的地址空间。Linux 系统只能通过系统调用和硬件中断完成从用户空间到内核空间的控制转移
标签:
原文地址:http://www.cnblogs.com/wmx-learn/p/5296201.html