内存管理
一.首先先说明内存的基础知识,就是内存是按照什么分址的,两类,字节和字分址,从而得到内存地址,然后说明进程的运行的基本原理,从我们的程序文件,编译成了几个拥有逻辑地址的块,内部都装有指令,然后将这些块链接起来,成为整体的逻辑地址,分三种方式进行链接,而逻辑地址转成物理地址,需要装入步骤,也是三种方式装入,装入后就霸占一个内存地址(物理地址),我们就可以通过地址访问具体的指令的数据。
二.紧接着说明内存管理的四大功能,分
1)内存空间的分配与回收
2)内存空间的扩充
3)地址转换
4)存储保护
这边重点讲了地址转换和内存保护,地址转换就是根据整体逻辑块,根据三种方式装入内存从而变成物理地址,而内存保护作用是保证各进程能只在自己的内存空间内运行,不会越界访问,有两种方式进行存储保护
第三步就开始讲内存空间的扩充,这边只讲覆盖和交换技术,虚拟存储后面具体讲解,主要是用请求分页存储方法进行扩充。
覆盖是单个进程技术,将程序分为多个段,常用的段常驻内存,不常用的按照需要调入内存。并且把内存分为固定区和覆盖区,固定区是用来存储经常访问的程序段,就不覆盖,而覆盖区的程序段根据需要进行覆盖,一个覆盖区可以被不能同时被访问的程序段共用。但是覆盖结构需要程序员自己声明,所以对用户不透明,增加了编程负担。
而交换技术将磁盘分为文件区(离散)和对换区(连续),当内存吃紧时,将某些优先级低的进程或者阻塞的进程换出到磁盘,变成挂起状态,然后从磁盘调入需要用的进程,如果某些调出进程之后还需调入则放入对换区,便于再次调入。所以交换技术就是进程在内存和磁盘的动态调度,用于多进程。
五.紧接着说明连续分配方式,为啥会说是连续分配,是因为将内存分为一个个分区,每个分区只装入一个进程,且是该进程的全部(不能的话用覆盖)。连续分配管理方式有三种,单一就是说一个内存只能有一个分区,固定就是固定大小的分区,可平均大小也可不是平均大小,这两种都不会产生外部碎片,而动态分区是根据需要分配分区大小,会产生外部碎片,可以有不同的分区方法。首次适应,最佳适应,最坏适应,邻近适应。
数据结构
算法
六.非连续分配管理方式就是说一个分区可以不装人一个进程的全部,且进程的各个部分可以放在非连续的各个分区中。
加入了快表之后的变化
基于基本分页管理的多级分页(以2级为例)
基本分段内存管理
原理:将程序段根据逻辑分段,内存不需要分页,既不需要有页框,使用其全部。逻辑地址变为,段号+段内地址,段表的数据结构变成 段号(隐含)+段长+基址,与基本分页的最有特点不同就是需要两次比较是否越界,第一次是段号与段表长度比较,第二次是段内地址和段长比较。
段页式管理
原理:段页式管理其实就是先将程序分段,然后把各段又分成页面,而内存分为和页面相同大小的页框。段页式的逻辑地址变成段号,页号,页内地址,段号是为了获取页表,页号是为了获取内存块号。
请求分页管理
原理:在基本分页的基础上,其页表加多了几个项,分别为状态位,访问字段,修改位,外存地址。