Linux内核源代码目录结构:

  • arch:包含和硬件体系结构相关的代码,每种平台占一个相应的目录,如i386、ARM、PowerPC、MIPS等;
  • block:块设备驱动程序I/O调度;
  • crypto:常用加密和散列算法(如AES、SHA等),还有一些压缩和CRC校验算法;
  • Documentation:内核各部分的通用解释和注释;
  • drivers:设备驱动程序,每个不同的驱动占用一个子目录,如char、block、net、mtd、i2c等;
  • fs:支持的各种文件系统,如EXT、FAT、NTFS、JFFS2等;
  • include:头文件,与系统相关的头文件被放置在include/linux子目录下;
  • init:内核初始化代码;
  • ipc:进程间通信的代码;
  • kernel:内核的最核心部分,包括进程调度、定时器等,而和平台相关的一部分代码放在arch/*/kernel目录下;
  • lib:库文件代码;
  • mm:内存管理代码,和平台相关的一部分代码放在arch/*/mm目录下;
  • net:网络相关代码,实现了各种常见的网络协议;
  • scripts:包含用于配置内核的脚本文件;
  • security:主要包含SELinux模块;
  • sound:ALSA、OSS音频设备的驱动核心代码和常用设备驱动。
  • usr:实现了用于打包和压缩的cpio等。

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

 

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

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

一般而言,Linux的每个进程享有4GB的内存空间,0~3GB属于用户空间,3~4GB 属于内核空间,内核空间对常规内存、I/O设备内存以及高端内存存在不同的处理方式。

Linux虚拟文件系统(VFS)隐藏了各种硬件的具体细节,为所有的设备提供了统一的接口。而且,它独立于各个具体的文件系统,是对各种文件系统的一个抽象,它使用超级块super block存放文件系统相关信息,使用索引节点inode存放文件的物理信息,使用目录项dentry存放文件的逻辑信息。

X86处理器包含4个不同的特权级,称为Ring0~Ring3。Ring0下,可以执行特权级指令,对任何I/O设备都有访问权等,而Ring3则有很多操作限制。

Linux系统充分利用CPU的这一硬件特性,但它只使用了两级。在Linux系统中,内核可进行任何操作,而应用程序则被禁止对硬件的直接访问和对内存的未授权访问。例如,使用X86处理器,则用户代码运行在特权级3,而系统内核代码则运行在特权级0。

内核空间和用户空间使用不同的地址空间。Linux系统只能通过系统调用和硬件中断完成从用户空间到内核空间的控制转移。

 

 

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐