linux内核剖析

来源:互联网 发布:linux网卡优先级 编辑:程序博客网 时间:2024/06/05 16:42

总结一下最近对linux内核的浅在了解,主要从两个方面:Linux操作系统的体系架构和子系统

Linux操作系统的体系架构主要分为用户空间和内核空间

用户空间包括:包含glibc,提供了连接内核的系统调用接口,还提供了用户空间应用程序和内核之间进行转换的机制。(提供转换机制的原因:因为内核和用户应用程序之间使用的是不同的保护地址空间。每个用户空间的进程都是使用自己的 虚拟地址空间,而内核占用单独的地址空间。

内核空间包括三部分:sci:系统调用接口实现了一些基本功能,如read,write。内核代码:独立于体系结构的内核代码,这些代码是linux所支持的所有处理器体系结构所通用的,bsp:依赖于体系结构代码,这些代码用作给定体系结构的处理器和特定于平台的代码。


子系统:

系统调用接口:sci层提供了某些机制执行从用户空间到内核的函数调用。依赖于体系结构。

进程管理:

进程管理的重点是进程的执行。在内核中,这些进程称为线程,代表了单独的处理器虚拟化(线程代码、数据、堆栈和 CPU 寄存器)。在用户空间,通常使用进程 这个术语,不过 Linux 实现并没有区分这两个概念(进程和线程)。内核通过 SCI 提供了一个应用程序编程接口(API)来创建一个新进程(fork、exec 或 Portable Operating System Interface [POSIX] 函数),停止进程(kill、exit),并在它们之间进行通信和同步(signal 或者 POSIX 机制)。

进程管理还包括处理活动进程之间共享 CPU 的需求。内核实现了一种新型的调度算法,不管有多少个线程在竞争 CPU,这种算法都可以在固定时间内进行操作。这种算法就称为 O(1) 调度程序,这个名字就表示它调度多个线程所使用的时间和调度一个线程所使用的时间是相同的。 O(1) 调度程序也可以支持多处理器(称为对称多处理器或 SMP)。

内存管理:为了提高效率,由硬件管理虚拟内存,内存是按照所谓的内存页方式进行管理的(4k)Linux包括了管理可用内存的方式,以及物理和虚拟映射所使用的硬件机制。内存管理要管理的不止4kb缓冲区,linux提供了对4kb缓冲区的抽象,例如slab分配器。这种内存管理模式使用4kb缓冲区为基数,然后从中分配结构,并跟踪内存页使用情况,比如哪些内存页是满的,哪些页面没有完全使用,哪些是空的。这就允许该模式根据系统需要来动态调整内存使用。为了支持多个用户使用内存,有时会出现可能内存被销毁光的情况。由于这个原因,页面可以移除内存并放入磁盘中。这个过程称为交换,因为页面会被从内存交换到硬盘上。

网络堆栈:网络堆栈在设计上遵循模拟协议本身的分层体系结构TCP 上面是 socket 层,它是通过 SCI 进行调用的。socket 层是网络子系统的标准 API,它为各种网络协议提供了一个用户接口。从原始帧访问到 IP 协议数据单元(PDU),再到 TCP 和 User Datagram Protocol (UDP),socket 层提供了一种标准化的方法来管理连接,并在各个终点之间移动数据。

虚拟文件系统:vfs为文件系统提供了一个通用的接口抽象。Vfssci和内核所支持的文件系统之间提供了一个交换层。在vfs上面是对诸如open,close,read,write之类的函数的一个通用api抽象。在vfs下面是文件系统抽象,定义了上层函数的实现方式。文件系统层下面是缓冲区缓存,它为文件系统层提供了一个通用函数集(与具体文件系统无关)。这个缓存层通过将数据保留一段时间优化了对物理设备的访问。缓冲区缓存之下是设备驱动程序,它实现了特定物理设备的接口。

0 0