【操作系统基础】OS管理内存的前置知识

初识内存(main memory)

在这里插入图片描述


内存也是叫主存;内存是由一大段的字节序组成的,最关键的一点是这里每一个字节都有一个自己的地址;

在计算机中,CPU是从内存的PC寄存器中获取指令地址来执行程序的;

我们对内存的操作无非就是写入和读取,都是对内存的操作,如何操作内存呢?那就是操作它的地址,比如写入数据到内存,只需要找到你要写入内存的地址就可以达成目标;

对于典型的指令执行周期来说:就是三部曲:CPU取指令form memory,CPU译码指令并且需要一些内存而外数据帮助译码;CPU执行执行,结果返回给内存;


高速缓存的作用(cache)

我们先不谈:高速缓冲是什么东西;
我们先理解CPU执行一条执行必须从内存获取数据对吧,当CPU译码这条指令时候,可能又再次需要从CPU获取数据辅助它译码,但是我们知道CPU的执行速度比内存快的不是那么一点,而是快的离谱;
在内存返回数据给CPU时候,CPU此时只能等待该数据返回,此时CPU就浪费了自己的资源时间,由于CPU过快,内存过慢,就导致CPU要等待内存返回数据给CPU;


为了解决上面的问题,我们在CPU和内存的中间,加入了一个缓冲层,也就是高速缓存,它解决的问题就是,CPU从内存获取数据过于慢,所以CPU不从内存获取数据了,而是从高速缓存获取数据;


假如了高速缓存之后,CPU需要从内存获取数据,就会先去缓存检查是否有自己需要的数据,假如没有再去内存获取,同时把该数据复制一份给告诉缓存;这样等下一次CPU再次从内存获取同样的数据,就不需要去内存获取了,只需要去高速缓存获取即可;


在这里插入图片描述

扫描二维码关注公众号,回复: 14139914 查看本文章

管理内存为了保护OS和user process

在这里插入图片描述


我们知道操作系统是一款软件,它也是要被加载到内存中的;由于操作系统是不相信任何人(也就是任何进程),用户是不可以访问操作系统的数据的,这个就需要内存管理来保护操作系统的数据不被别人访问;同时用户与用户之间的空间也需要隔离开来,不可以相互随机访问;


怎么做到保护操作系统和用户进程呢?
这个就需要硬件的干涉了,我们硬件有两个寄存器base register 和 limit register寄存器来保护,当我们要访问内存时候,我们会先计算该内存的长度是否在你可以访问内存的合理访范围内,假如在你就可以访问内存数据,不再就出错!


操作系统管理内存的目标

在这里插入图片描述


逻辑地址,物理地址初始

在这里插入图片描述


把逻辑地址理解为偏移量更好理解,因为逻辑地址都是从0开始的,当我们某一条指令假设地址为20,那么我们可以理解为该地址,相对第一条指令地址偏移了20字节;


地址转换时机–程序运行时

在这里插入图片描述


对于一个可执行程序来说:当它开始运行时期,加载到内存的地址,依旧是逻辑地址,当我们跳转到物理地址执行指令时候,就需要一个硬件设备MMU做转化,它功能就是把逻辑地址变成物理地址,逻辑地址+基地址 = 物理地址;
我们这个基地址在哪呢?就在base register 的值;

这样做的好处就是:当我们程序的基地址变换时候,我们可以加载到内存的逻辑地址依旧可以正确找到真实的物理地址;因为基地址变化,无非就是 base resgister寄存器的变化而已;我们物理地址还是 = 基地址+逻辑地址
在这里插入图片描述


有了MMU,我们程序在内存中的位置就不用固定不变了,可以移动;


地址保护策略

在这里插入图片描述
当我们程序加载到内存时候,访问内存数据时候,首先CPU去判断逻辑地址是否小于limit register 的值,小于就可以去找到物理地址;没找到就出错;


猜你喜欢

转载自blog.csdn.net/m0_46606290/article/details/124396694