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

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位线性地址到物理地址的转换):

[Linux源码分析]Linux内核架构相关推荐

  1. linux源码分析之cpu初始化 kernel/head.s,linux源码分析之cpu初始化

    linux源码分析之cpu初始化 kernel/head.s 收藏 来自:http://blog.csdn.net/BoySKung/archive/2008/12/09/3486026.aspx l ...

  2. v06.03 鸿蒙内核源码分析(调度队列) | 内核调度也需要排队 | 百篇博客分析HarmonyOS源码

    子曰:"君子食无求饱,居无求安,敏于事而慎于言,就有道而正焉,可谓好学也已."<论语>:学而篇 百篇博客系列篇.本篇为: v06.xx 鸿蒙内核源码分析(调度队列篇) ...

  3. linux源码文件名,Linux中文件名解析处理源码分析

    Linux中文件名解析处理源码分析 前言 Linux中对一个文件进行操作的时候,一件很重要的事情是对文件名进行解析处理,并且找到对应文件的inode对象,然后创建表示文件的file对象.在此,对文件名 ...

  4. Android wpa_supplicant源码分析---nl80211内核通信Generic Netlink

    代码位置: kernel/net/netlink/genetlink.c kernel/include/net/genetlink.h GENL简介 netlink仅支持32种协议类型,这在实际应用中 ...

  5. ECharts 3.0底层zrender 3.x源码分析1-总体架构

    zrender是一个轻量级的Canvas类库,作为百度Echarts 3.0的底层基础.截至目前查看的zrender源码和文档,包括官网文档都还停留在2.x时代,我打算用一个系列介绍下zrender ...

  6. linux ptrace 内核源码分析,linux 3.5.4 ptrace源码分析分析(系列一)

    ptrace是linux系统中为了调试专门设立的一种系统调用.要想调试调试一个进程,有两种方式: PTRACE_TRACEME和PTRACE_ATTACH.这两种方式的主要区别可以概括为: PTRAC ...

  7. linux ptrace 内核源码分析,Linux ptrace详细分析系列(一)

    原标题:Linux ptrace详细分析系列(一) 本文为看雪论坛优秀文章 看雪论坛作者ID:有毒 备注:文章中使用的Linux内核源码版本为Linux 5.9,使用的Linux版本为Linux ub ...

  8. tcp/ip 协议栈Linux源码分析一 IPv4分片报文重组分析一

    内核版本:3.4.39 之前因工作原因接触到了IPv4 报文重组这个话题,一直以来对这个重组流程不是很清楚,所以很多功能的实现都避开了分片报文的处理,一方面是因为重组比较复杂,另一方面是经验不多无从下 ...

  9. linux nat源码分析,Linux下NAT/NAPT规则源码分析

    前面有一篇文章分析了为什么在PREROUTING做DNAT对本地连接不起作用?本文再紧接着上文,深入分析一下NAT/NAPT的规则. 事情的起因要从上的那篇的文章说起,因为我的本科生毕业设计也是做P2 ...

  10. tcp/ip 协议栈Linux源码分析四 IPv4分片 ip_fragment函数分析

    内核版本:3.4.39 很多项目涉及到IP分片的时候都是绕过去了,感觉分片挺难的.但是老这么做也不行啊,抽空分析了内核的分片处理函数ip_fragment,也不是特别复杂,感觉挺简单的,看来事情只有实 ...

最新文章

  1. 不存在_MySQL数据存在就更新,不存在就添加
  2. 在Kubernetes上运行SAP UI5应用(下): 一个例子体会Kubernetes内容器的高可用性和弹性伸缩
  3. 主线程等待一个 无阻塞函数 死循环子线程的安全退出
  4. linux proc io,在/proc/[pid]/io 中,理解计数器_linux-kernel_开发99编程知识库
  5. 什么是事务ACID原则?(建议收藏)
  6. 使用C语言编程求解: 1 - 1/2 + 1/3 - 1/4 + 1/5 - ... + 1/99 - 1/100 的值。
  7. Glide修改本地图片缓存路径
  8. 虚拟机VMware安装学习过程中遇到的几个问题
  9. 影响计算机启动硬件,电脑开机速度跟哪些硬件有关。
  10. 运用PS做图片快捷键
  11. 全文检索技术Lucene
  12. Allegro-PCB导入DXF文件
  13. 如何关闭台式计算机,台式机如何关闭显示器
  14. Building Huuuuuge Apps with AngularJS
  15. [拿来就用不经意识流] 谷歌多汁小萝莉的使用问题
  16. 去哪儿2017校园招聘笔试题——统计字符串中最先出现三次的字符
  17. 疫情下的口罩生活,演绎出了哪些心理剧场?
  18. Centos 7.9 xfs 文件系统测试
  19. springboot在线教育学习系统在线视频点播系统毕业设计毕设作品开题报告开题答辩PPT
  20. 数据结构与算法基础(青岛大学-王卓)(3)

热门文章

  1. 文本转语音(TTS)工具Balabolka
  2. windows10提权
  3. 超级简单C语言进制转换代码
  4. 银行测试(2)-专有名词
  5. Modelsim软件的使用教程
  6. 仿京东商城html网页源码
  7. java从0单排之java就业培训教程复习与面试题回顾——03
  8. GB18030字符编码格式和点阵字库
  9. 成功解决不能完成“视频帧到图层”的命令,因为需要QuickTime7.1或者更高版本
  10. 人力资源HR管理系统源码