操作系统计算机组成原理CPUMMUcache的概念及实现,CPU访问操作系统内核的过程

Posted The Gao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了操作系统计算机组成原理CPUMMUcache的概念及实现,CPU访问操作系统内核的过程相关的知识,希望对你有一定的参考价值。

计算机存储介质

位于CPU内部的存储介质只有寄存器(CPU内有个寄存器堆,寄存器数量不多,也就20来个),寄存器是容量最小的存储介质,但是是最快的。

其他的存储介质都位于CPU外部,容量由小到大分别是cache->内存->硬盘->网络(可视为无限容量)。

CPU执行过程

在我们运行.out文件中的一条指令时,该指令会在CPU中经历如下步骤:

1.由于.out文件保存在磁盘内,由磁盘写入内存,再由内存进入cache区。

2.CPU中的预取器,执行预取指令的工作,把这条二进制形式的指令读入CPU;

3.预取器把取到的指令交给译码器,译码器对指令进行分析,获知指令要做的工作,以及完成指令需要使用什么寄存器。如该指令是完成加法操作,就事先取出eax和ebx寄存器,把加数和被加数放在里面备好;

4.译码器了解具体的运算类型并且准备好寄存器后,有ALU算术逻辑单元完成具体的运算。ALU只能完成+和<<运算,所有运算都可以通过这两个基本运算完成);

5.ALU把计算好的结果写到相应的寄存器,随后再由cache把哪个记录计算结果的寄存器中的内容取走。

MMU内存管理单元

CPU中还有一块十分重要的单元,那就是MMU内存管理单元。它的主要作用是:

1.虚拟内存与物理内存的映射;

2.设置和修改内存访问级别。

通过执行一个文件或者系统调用fork()函数产生一个进程时,都会产生一片虚拟内存【32位系统上虚拟内存是4G大小(其中0到3G是用户空间可使用的地址,3G到4G是内核空间可以使用的地址)】。

这片内存是虚拟的,并非实际存在的,切实存在的是我们的物理内存,只是我们通过这4G的虚拟内存能够更方便地管理内存空间。由于这块内存是虚拟的,看起来我们的程序相关内容都是存放在这片空间(程序中我们用户所有可以操控的内存地址都是虚拟内存的地址),但是实际还是存放在物理内存上,所以我们就要使用一个方法去把虚拟内存和物理内存之间相互映射,MMU就帮我们完成了这样的映射。

在MMU把虚拟内存映射为物理内存的过程中,映射的最小单位是4K大小(一个Page)。(即便虚拟内存有一段区域只有1K大小,在把这块区域映射进物理内存,在物理内存上为它划分空间时,也会划分出4K大小的区域。)

MMU在完成映射的同时,还为CPU设置了对物理内存的访问级别。简单地说,访问级别最高是Ring0(即DPL=0),是内核空间Kernel Space;最低是Ring3(即DPL=3),是用户空间User Space。只有当CPL<=DPL时,CPU才可以访问内核。

MMU的工作在程序运行起来的时候就开始了,因为从cache上面取来的指令中使用的变量,数值等对应的存储位置就是虚拟内存,MMU需要把它映射到物理内存上,才能真正取出变量中的值。同样的CPU计算完把结果返回给cache也需要MMU协助把物理内存映射回虚拟内存。

CPU访问操作系统内核并实现功能的过程

下面以执行print()函数为例,介绍CPU访问操作系统内核并实现功能的过程:

1.调用printf()阶段,CPU运行在用户空间,CPL=3。但是printf()还需要向下作系统调用write();

2.触发0x80中断,修改CPU的CPL=0,对内存的访问级别发生了改变。这种级别的调整,就是MMU帮助CPU完成的。修改之后此时满足CPL<=DPL,CPU访问内核空间;

3.中断处理程序system_call查表sys_call_table,确定__NR_wirte=4,获得系统调用号后,调用相应的API函数wirte()实现功能。

参考文章:计算机组成原理之CPU和MMU

以上是关于操作系统计算机组成原理CPUMMUcache的概念及实现,CPU访问操作系统内核的过程的主要内容,如果未能解决你的问题,请参考以下文章

组成原理-总线总线的概念和计算

组成原理-总线总线的概念和计算

计算机组成原理基础的一些概念

(计算机组成原理)第六章总线-第一节:总线概述1(概念,分类和系统总线的结构)

计算机组成原理4.3CISC和RISC的基本概念

向题看齐408之计算机组成原理概念记忆总结