引言
在之前的内容中便已经提到过,多进程视图有四个部分,如下图所示,而此篇主要就是叙述进程间内存如何管理
内存使用
概念
相对地址以及重定位
由于使用绝对地址会有问题,故引出相对地址,而实现相对地址需要进行重定位,针对于重定位有三种方式,操作系统使用的是其中的运行时重定位,另外两种重定位方式理解其由来即可
-
问题引出
问题的原因在于使用物理地址,内存是可以使用了,但是无法正确访问地址
-
解决问题(重定位)
为了解决无法正确访问地址的问题,故引出三种重定位的方式来进行地址修改,分别是以下三种重定位方式
- 编译时重定位(编译时确定对应位置)
- 载入时重定位(载入时确定对应位置)
- 运行时重定位(最好的方式,可以随机应变)
编译或载入时重定位
为何不采用编译或载入时重定位
原因:因为现代操作系统,在程序载入后,进程是需要在内存和磁盘进行交换的,而编译或载入时重定位,放入内存之后,如果和磁盘进行交换了之后,再度放入内存进行运行,对应的进程访问地址会出错
运行时重定位
- 将基地址存入pcb中,从而实现运行时重定位,可以完美解决内存和磁盘交换之后访问出错的问题,故现代操作系统采用的都是运行时重定位
- 在进程切换时,根据pcb切换基地址,即可正常运行下一个进程
分段载入内存(载入方式)
- 由于程序整段放入内存,不符合程序员平常编写程序逻辑,并且之后在内存之中处理也不方便,故采用分段处理,这样在一个段移动时,其余段还可以正常执行,不会出现全部都不能执行的情况,这是相比整段放入内存的优势
- 由于进行了分段,故要从单个程序地址转变成,为每个段都给定一个短基址,并且将基址存入pcb中,当进程需要切换段时,根据基址进行切换即可
内存分割
固定分区
可变分区
释放内存
申请内存
- 首先适配较为随机
- 最佳适配,分配下去容易造成细碎的内存
- 最差内存,分配之后,最后会较为均匀
可变分区造成的问题
分页
概念(从连续到离散)
如何索引物理地址
用页表索引对应物理地址即可,但是页表特别大,内存的使用率低,故需要改进
改进的第一种尝试
改进的第二种尝试(多级目录)
- 概念
- 缺陷以及改进 由于多级页表在时间上会耗费较多时间,于是使用快表TLB对其优化,对经常使用的地址进行存储,从而快速找到对应的内存
- TCB(快表)得以发挥作用的原因
评论