操作系统计算机组成原理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访问操作系统内核的过程的主要内容,如果未能解决你的问题,请参考以下文章