原标题:操作系统内存管理这几大知识点,你知道吗?
操作系统内存管理这几大知识点,你知道吗?
一、什么是物理内存?
我们常说的物理内存大小就是指内存条的大小,一般买电脑时都会看下内存条是多大容量的,话说如果内存条大小是100G,那这100G就都能够被使用吗?不一定的,更多的还是要看CPU地址总线的位数,如果地址总线只有20位,那么它的寻址空间就是1MB,即使可以安装100G的内存条也没有意义,也只能视物理内存大小为1MB。
二、使用物理内存有什么缺点?
这种方式下每个程序都可以直接访问物理内存,有两种情况:
1.系统中只有一个进程在运行:如果用户程序可以操作物理地址空间的任意地址,它们就很容易在不经意间破坏了操作系统,使系统出现各种奇奇怪怪的问题;
2.系统有多个进程同时在运行:如图,理想情况下可以使进程A和进程B各占物理内存的一边,两者互不干扰,但这只是理想情况下,谁能确保程序没有bug呢,进程B在后台正常运行着,程序员在调试进程A时有可能就会误操作到进程B正在使用的物理内存,导致进程B运行出现异常,两个程序操作了同一地址空间,第一个程序在某一地址空间写入某个值,第二个程序在同一地址又写入了不同值,这就会导致程序运行出现问题,所以直接使用物理内存会使所有进程的安全性得不到保证。
三、什么是虚拟内存?
虚拟内存,那就是虚拟出来的内存,它的基本思想就是确保每个程序拥有自己的地址空间,地址空间被分成多个块,每一块都有连续的地址空间,同时物理空间也分成多个块,块大小和虚拟地址空间的块大小一致,操作系统会自动将虚拟地址空间映射到物理地址空间,程序所关注的只是虚拟内存,请求的也是虚拟内存,其实真正使用的是物理内存。
四、虚拟内存如何映射到物理内存?
如图,CPU里有一个内存管理单元(Memory Management Unit),简称MMU,虚拟内存不是直接送到内存总线,而是先给到MMU,由MMU来把虚拟地址映射到物理地址,程序只需要管理虚拟内存就好,映射的逻辑自然有其它模块自动处理。
五、什么是缺页中断?
缺页中断就是要访问的页不在主存中,需要操作系统将页调入主存后再进行访问,此时会暂时停止指令的执行,产生一个页不存在的异常,对应的异常处理程序就会从选择一页调入到内存,调入内存后之前的异常指令就可以继续执行。
缺页中断的处理过程如下:
1、如果内存中有空闲的物理页面,则分配一物理页帧r,然后转第4步,否则转第2步;
2、选择某种页面置换算法,选择一个将被替换的物理页帧r,它所对应的逻辑页为q,如果该页在内存期间被修改过,则需把它写回到外存;
3、将q所对应的页表项进行修改,把驻留位置0;
4、将需要访问的页p装入到物理页面r中;
5、修改p所对应的页表项的内容,把驻留位置1,把物理页帧号置为x;
6、重新运行被中断的指令。
六、什么是分段内存管理
关于分段内存管理我们平时见的最多的应该就是Linux可执行程序的代码段数据段之类的啦,要了解分段最好的方式就是了解它的历史。分段起源于8086CPU,那时候程序访问内存还是直接给出相应单元的物理地址,为了方便多道程序并发执行,需要支持对各个程序进行重定位,如果不支持重定位,涉及到内存访问的地方都需要将地址写死,进而把某个程序加载到物理内存的固定区间。通过分段机制,程序中只需要使用段的相对地址,然后更改段的基址,就方便对程序进行重定位。而且8086CPU的地址线宽度是20位,可寻址范围可以达到1MB,但是它们的寄存器都是16位,直接使用1个16位寄存器不可能访存达到1MB,因此引入了段,引入了段寄存器,段寄存器左移4位+偏移量就可以生成20位的地址,从而达到1MB的寻址范围。
分段更多的是一种历史包袱,没有多大实际作用,而且我们经常见到的可执行程序中代码段数据段这些更多是为了在逻辑上能够更清晰有序的构造程序的组织结构。Linux实际上没有使用分段而只使用了分页管理,这样会更加简单,现在的分段其实更多是为了使逻辑更加清晰。就像一个公司为了方便管理都会划分为好多个部门,这其实就跟分段逻辑是一个道理。
以上关于操作系统的内存知识点就说到这里了,看到上面几点知识,同学们大概了解到了多少呢?最后欢迎不懂的同学们来软帝官网咨询我们的老师哦!