LinuxKernel内核百炼成神壹
Posted 鸿渐之翼
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LinuxKernel内核百炼成神壹相关的知识,希望对你有一定的参考价值。
深圳狩猎者网络安全旗下团队-知柯™️信息安全
精选文章:
一、内核的作用及抽象结构
1、Linux内核在整个操作系统中的地位:
Linux操作系统由四大组成部分组成(四层依赖关系–>上层依赖下层)
用户进程:用户应用程序是运行在Linux操作系统最高层的软件集合。
系统调用接口:系统调用时运行在内核态,或者叫系统态,一般情况运行在用户态。系统调用时内核代码的一部分。
Linux内核:内核是整个操作系统的灵魂。它负责管理磁盘文件、内存、负责启动运行程序,负责在网络上接受和发送数据包等。
硬件设备:Linux安装时需要所有可能的物理设备,例如:CPU、硬盘、网络硬件。
2.Linux内核的作用
我们从软件工程师的角度看,操作系统的内核提供一个与计算机硬件等价的扩展或虚拟计算机平台。普通用户把操作系统看作资源管理者。Linux系统以统一的方式支持多个任务。而这种方式对用户进程是透明的,每个进程运行起来好像只有它一个进程在计算机上运行一样。独占内存和其他硬件资源。
3.Linux内核抽象结构
由5个主要子系统组成,具体架构如下:
a、进程调度控制着进程对CPU的访问
b、内存管理允许多个进程安全地共享主内存区域
c、虚拟文件系统VFS隐藏不同硬件设备的具体细节,为所有设备提供统一的接口。
d、网络接口提供对各种网络协议的存取和各种网络硬件的支持。
e、进程通信IPC支持进程间各种通信机制
4、Linux内核源码目录结构分析
include/–>包含建立内核代码时所需要的大部分包含文件、这个模块利用其他模块重建内核。
init/–>包含了所有硬件结构特定的内核代码
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、分页机制
分页机制在段机制之后进行,以完成线性一物理地址的转换过程。段机制把逻辑地址线性,分页机制进一步把该线性地址再转换为物理地址。如果下图所示(分页机制把线性地址转换成物理地址)
分页机制由CR0中的PG位启用。如果PG=1,启用分页机制,把线性地址转换为物理地址。如果PG=0,禁用分页机制,直接把段机制产生的线性地址 当作物理地址进行使用。分页机制管理的对象是固定大小的存储块,称为页(page)。
80386使用4K字节大小的页。第一页都有4K字节长,并在4k字节的边界上对齐,即每一页的起始地址都能被4K整除。分页机制通过把线性地址空间中的页,重新定位到物理地址空间来进行管理,因为每个页面的整个4K字节作为一个单位进行映射,并且每个页面都对齐4K字节的边界。
分页是将程序分成若干相同大小的页,每页4K字节。两级页表结构如下图所示:
页目录表最多可包含1024个页目录项,每个页目录项为4个字节,第31-12位是20位页表地址,由于页表地址的低12位总为0,所以用高20位指出32位页表地址就OK(因此,一个页目录最多包含1024个页表地址)。第0位是存在位,如果p=1,表示页表地址指向的该页在内存中,如果p=0,表示不在内存中。第1位是读/写位。第2位是用户/管理位,这两位为页目录项提供硬件保护。
页目录中的页目录项结构如下图所示:
PWT(Page Write-Through)–>表示是否采用写透方式,写透方式就是既写内存(RAM)也写高速缓存,该位为1表示采用写透方式。
PCD(Page Cache Disable)–>表示是否启用高速缓存,该位为1表示启用高速缓存。
2、扩展分页
从奔腾处理器起,Intel微处理器引进扩展分页,允许页的大小为4MB。在扩展分页的情况下,分页机制把32位线性地址分成两域:最高10位的目录域和其余22位的偏移量。具体结构图如下(32位线性地址到物理地址的转换):
关注我们:
知柯信息安全
以上是关于LinuxKernel内核百炼成神壹的主要内容,如果未能解决你的问题,请参考以下文章