操作系统v0.5(进程间内存如何管理)

引言

在之前的内容中便已经提到过,多进程视图有四个部分,如下图所示,而此篇主要就是叙述进程间内存如何管理

多进程视图

内存使用

概念

概念

相对地址以及重定位

由于使用绝对地址会有问题,故引出相对地址,而实现相对地址需要进行重定位,针对于重定位有三种方式,操作系统使用的是其中的运行时重定位,另外两种重定位方式理解其由来即可

  1. 问题引出

    问题的原因在于使用物理地址,内存是可以使用了,但是无法正确访问地址

问题

  1. 解决问题(重定位)

    为了解决无法正确访问地址的问题,故引出三种重定位的方式来进行地址修改,分别是以下三种重定位方式

  • 编译时重定位(编译时确定对应位置)
  • 载入时重定位(载入时确定对应位置)
  • 运行时重定位(最好的方式,可以随机应变)

编译或载入时重定位

问题

为何不采用编译或载入时重定位

原因:因为现代操作系统,在程序载入后,进程是需要在内存和磁盘进行交换的,而编译或载入时重定位,放入内存之后,如果和磁盘进行交换了之后,再度放入内存进行运行,对应的进程访问地址会出错

原因

运行时重定位

  • 将基地址存入pcb中,从而实现运行时重定位,可以完美解决内存和磁盘交换之后访问出错的问题,故现代操作系统采用的都是运行时重定位
  • 在进程切换时,根据pcb切换基地址,即可正常运行下一个进程

运行时重定位 切换

分段载入内存(载入方式)

  • 由于程序整段放入内存,不符合程序员平常编写程序逻辑,并且之后在内存之中处理也不方便,故采用分段处理,这样在一个段移动时,其余段还可以正常执行,不会出现全部都不能执行的情况,这是相比整段放入内存的优势
  • 由于进行了分段,故要从单个程序地址转变成,为每个段都给定一个短基址,并且将基址存入pcb中,当进程需要切换段时,根据基址进行切换即可

分段 分段

内存分割

固定分区

固定分区

可变分区

可变分区

释放内存

释放内存

申请内存

  • 首先适配较为随机
  • 最佳适配,分配下去容易造成细碎的内存
  • 最差内存,分配之后,最后会较为均匀

申请内存

可变分区造成的问题

问题

分页

概念(从连续到离散)

如何索引物理地址

用页表索引对应物理地址即可,但是页表特别大,内存的使用率低,故需要改进

改进的第一种尝试

改进的第二种尝试(多级目录)

  • 概念

  • 缺陷以及改进 由于多级页表在时间上会耗费较多时间,于是使用快表TLB对其优化,对经常使用的地址进行存储,从而快速找到对应的内存

  • TCB(快表)得以发挥作用的原因

end

评论