取指令——译码——执行——返存
计组课我们学过cpu真正读指令并非是从内存中读入,而是从cache读和存,再由cache进行取指或返存,因为cpu指令周期比内存周期速度快很多,cpu若要取指或返存都需要等待内存完成他的动作才可以进行下一步动作。
我们上一章看过用户进程的地址、虚地址(逻辑地址)和物理地址的地址码
我们回顾一下
用户进程
虚地址
内核模式代码混合使用虚拟,逻辑和物理寻址。每种设备使用多少取决于底层硬件和操作系统。
保护操作系统和用户进程
内存管理的目的
地址转化解决的问题
我们发现虚拟地址可能会是重复的,比如两三个进程的地址都是从0开始,但我们都知道物理地址等于基址加逻辑地址
一个所有进程的逻辑地址集合叫做逻辑地址空间
地址转换的时机
我们分析一下一个程序的的执行周期
源代码编译(汇编)成目标代码
目标代码需要将其他的目标代码等链接起来形成可加载的模块(可执行代码)
加载一些系统库变成二进制文件\镜像
那么逻辑地址是何时转化物理地址呢?
汇编语句中有一条在内存中取指令,那么我们要取址就需要访问地址,操作系统先访问虚拟地址(变址寄存器),加上基址寄存器中的基址得到物理地址,从而取得想要的数据。
但这个前提是加载程序前我们必须要知道基址
缺点:我们的进程空间是无法被移动的(只可以是连续的)
当然只要当我们程序运行时逻辑地址才会被替换成物理地址进行寻址
比如说我们执行call调用的时候
所以当我们运行之前就需要得到进程运行的准确的基址
上面我们提到的换算所需要的单元叫做MMU
曾经的电脑时直接访问物理内存的,现在考虑到安全性和物理内存空间太大才换成这个方式
连续的内存分配机制
这里提到的内存连续性,我们需要关注的是对进程内存的定位、回收、保护。
固定大小分区
内存的分区的大小是固定的,需要系统进行调度