剖析Linux内核源码分析《入门技术栈》

一、内核的作用及抽象结构

1、Linux内核在整个操作系统中位置,Linux内核在整个操作系统当中位置,具体如下图所示:

剖析Linux内核源码分析《入门技术栈》_第1张图片

  • Linux操作系统由四部分组成(四层依赖关系-->上层依赖下层):

  1. 用户进程:用户应用程序是运行在Linux操作系统最高层的软件集合。

  2. 系统调用接口:系统调用是运行在内核态,或者叫系统态,一般的情况下运行在用户态。系统调用是内核代码的一部分。

  3. Linux内核:内核是整个操作系统的灵魂。它负责管理磁盘文件、内存、负责启动并运行程序,负责从网络上接收和发送数据包等等。

  4. 硬件设备:Linux安装时需要所有可能的物理设备,例如:CPU、硬盘、网络硬件等。

 资料直通车:Linux内核源码技术学习路线+视频教程内核源码

学习直通车:Linux内核源码内存调优文件系统进程管理设备驱动/网络协议栈

2、Linux内核的作用

  • 我们从软件工程师角度讲,操作系统的内核提供一个与计算机硬件等价的扩展或虚拟的计算平台。普通用户把操作系统看成是一个资源管理者。Linux以统一的方式支持多任务,而这种方式对用户进程是透明,每个进程运行起来就好像只有它一个进程在计算机上运行一样,独占内存和其他的硬件资源。

3、Linux内核抽象结构。由5个主要子系统组成,具体架构如下图所示:

剖析Linux内核源码分析《入门技术栈》_第2张图片

a、进程调度控制着进程对CPU的访问 b、内存管理允许多个进程安全地共享主内存区域。 c、虚拟文件系统VFS隐藏不同硬件设备的具体细节,为所有设备提供统一的接口。 d、网络接口提供对各种网络标准协议的存取和各种网络硬件的支持。 e、进程间通信IPC支持进程间各种通信机制。

4、Linux内核源码目录结构分析

剖析Linux内核源码分析《入门技术栈》_第3张图片

include/----->包含建立内核代码时所需要的大部分包含文件、这个模块利用其他模块重建内核; 

init/----->包含内核的初始化代码,这也是内核开始工作的起点; 

arch/----->包含所有硬件结构特定的内核代码; 

drivers/----->包含内核中所有的设备驱动程序,如:块设备、字符设备、scsi设备驱动程序等; 

fs/----->包含所有文件系统的代码,ext2,vfat ext3模块的代码等; 

ipc/----->包含进程间通信的代码; 

mm/----->包含所有内核管理代码; 

net/----->包含内核的网络代码; 

kernel/----->包含主内核代码。

二、I386寄存器与内存地址

1、在X86系列中,8086/8088是16位的处理器,从80386为32位处理器。在808中,所有寄存器都是16位。80386中寄存器:

  • 把16位通用寄存器、标志寄存器以及指令指针寄存器扩充为32位寄存器;段寄存器仍然为16位,增加4个32位控制寄存器;增加4个系统地址寄存器;增加8个调试寄存器;增加2个测试寄存器。

2、通用寄存器(8个通用寄存器是8086寄存器的超集):

EAX: 累加器 EBX:基址寄存器 ECX:计数 EDX:存放数据 EBP:基址指针 ESI:源变址 EDI:目标变址

3、段寄存器

CS: 代码段寄存器 DS: 数据段寄存器 SS: 堆栈段寄存器 ES FS FS:附加数据段寄存器

三、分页机制与页面高速缓存

1、分页机制

  • 分页机制在段机制之后进行,以完成线性一物理地址的转换过程。段机制把逻辑地址线性,分页机制进一步把该线性地址再转换为物理地址。如果下图所示(分页机制把线性地址转换成物理地址)

剖析Linux内核源码分析《入门技术栈》_第4张图片

  • 分页机制由CR0中的PG位启用。如果PG=1,启用分页机制,把线性地址转换为物理地址。如果PG=0,禁用分页机制,直接把段机制产生的线性地址 当作物理地址进行使用。分页机制管理的对象是固定大小的存储块,称为页(page)。

  • 80386使用4K字节大小的页。第一页都有4K字节长,并在4k字节的边界上对齐,即每一页的起始地址都能被4K整除。分页机制通过把线性地址空间中的页,重新定位到物理地址空间来进行管理,因为每个页面的整个4K字节作为一个单位进行映射,并且每个页面都对齐4K字节的边界。

  • 分页是将程序分成若干相同大小的页,每页4K字节。两级页表结构如下图所示:

剖析Linux内核源码分析《入门技术栈》_第5张图片

  • 页目录表最多可包含1024个页目录项,每个页目录项为4个字节,第31-12位是20位页表地址,由于页表地址的低12位总为0,所以用高20位指出32位页表地址就OK(因此,一个页目录最多包含1024个页表地址)。第0位是存在位,如果p=1,表示页表地址指向的该页在内存中,如果p=0,表示不在内存中。第1位是读/写位。第2位是用户/管理位,这两位为页目录项提供硬件保护。

  • 页目录中的页目录项结构如下图所示:

剖析Linux内核源码分析《入门技术栈》_第6张图片

  • PWT(Page Write-Through)-->表示是否采用写透方式,写透方式就是既写内存(RAM)也写高速缓存,该位为1表示采用写透方式。

  • PCD(Page Cache Disable)-->表示是否启用高速缓存,该位为1表示启用高速缓存。

2、扩展分页

  • 从奔腾处理器起,Intel微处理器引进扩展分页,允许页的大小为4MB。在扩展分页的情况下,分页机制把32位线性地址分成两域:最高10位的目录域和其余22位的偏移量。具体结构图如下(32位线性地址到物理地址的转换):

剖析Linux内核源码分析《入门技术栈》_第7张图片

你可能感兴趣的:(linux,运维,服务器,网络协议,数据结构)