1 Linux体系结构
由上图得知,Linux由用户空间和内核空间两部分组成。
为什么Linux系统会被划分称为用户空间与内核空间?
现代CPU通常实现两不同的工作模式,以ARM为例,实现了7中工作模式:
用户模式(usr),快速中断(fiq),外部中断(irq),系统模式(svc),数据访问终止(abt),系统模式(sys),未定义指针异常(und)。
X86也实现了4个不同的级别:Ring0-Ring3。Ring0下,可以执行特权指令,可以访问IO设备等,在Ring3则有很多限制。
Linux系统利用了CPU的这一特性,使用了其中的两级来分别运行Linux内核于应用程序,这样使得操作系统本身得到充分的保护。例如:如果使用X86,用户代码运行在Ring3,内核代码运行在Ring0。内核空间与用户空间是程序执行的两种不同状态,通过系统调用和硬件中断能够完成从用户空间到内核空间的转移。
Linux内核如何构成的?
2 Linux内核源代码
目录结构
Linux内核源代码采用树形结构进行组织,非常合理地把更能相关的文件都放在同一个子目录下,使得程序更具可读性。
内核源代码下载地址:www.kernel.org
*arch 目录
arch是architeture的缩写。内核所支持的每种CPU体系,在该目录下都有对应的子目录。每个CPU的子目录,有进一步分解为boot, mm ,kernel等子目录,分别包含控制系统引导,内存管理,系统调用等。
*block目录
部分块设备驱动程序
*crypto目录
加密、压缩、CRC校验算法
*documentation
内核的文档
*drivers目录
设备驱动程序
*fs目录
存放各种文件系统的实现代码。每个子目录对应一种文件系统的实现,公用的源程序用于实现虚拟文件系统vfs。
|| --devpts /*/dev/pts虚拟文件系统*/
|| --ext2 /*第二扩展文件系统*/
|| --fat /*MS的fat32文件系统*/
|| --isofs /*ISO9660光盘cd-rom上的文件系统*/
*include目录
内核所需要的头文件。与平台无关的头文件在include/linux子目录下,与平台相关的头文件则存放在相应的子目录中。
*init目录
内核初始化代码
*ipc目录
进程间通信的实现代码
*kernel目录
Linux大多数的关键的核心功能都是在这个目录实现(调度程序,进程控制,模块化)
*lib目录
库文件代码
*mm目录
Mm目录中的文件用于实现内存管理中于体系结构无关的部分
*net目录
网路协议的实现代码
*smaples
一些内核编程的范例
*scripts
配置内核的脚本
*security
Selinux的模块
*sound
音频设备的驱动程序
*usr
Cpio命令实现
*virt
内核虚拟机