「这是我参与11月更文挑战的第19天,活动详情查看:2021最后一次更文挑战」
前言
大家好,我是程序猿小白 GW_gw,很高兴能和大家一起学习进步。
以下内容部分来自于网络,如有侵权,请联系我删除,本文仅用于学习交流,不用作任何商业用途。
摘要
本文主要介绍固定分区和非固定分区,以及交换和覆盖技术的一些基本概念。
1. 固定分区管理
固定分区,顾名思义就是把内存分为固定大小的几个分区,各个分区的大小可以相同也可以不同。
对于固定分区管理的方式有两种,分别是:共享队列的分区管理和分开队列的分区管理
1.1 共享队列的分区管理
共享队列模式就是把所有想要运行的程序放到一个队列中等待,如果有空的分区才能对程序进行加载。
这样对大作业极为不利,因为可能会出现前面的小程序把大的空闲分区给占用,剩下的分区都是小分区,导致大作业无法运行。
于是就有了多个队列的情况。
1.2 分开队列的分区管理
分开队列模式给每个分区分配一个队列,把对应大小的程序放入对应的分区队列进行等待,这样就很大程度上解决了上述问题。但这样的分区同样也有缺点。如果有空闲的分区,而可以使用该分区的程序却不在该队列上,那就会出现,即使有空闲分区也不能运行程序的状况。
2. 非固定分区管理
非固定分区的思想就是除了划分给操作系统的空间外,其余的内存空间作为一个整体而存在。当一个程序需要进入内存时,就为这个程序分配内存空间,下一个程序仍要进入内存时,继续为下一个程序分配内存空间。但是这样会遇到问题,如果在程序的执行过程中产生了数据,而需要更多的空间该怎么办呢?所以我们需要在开始时,就要分配给程序较大的空间。但是操作系统怎么知道应该分配多少空间给程序呢?分配过大会造成空间浪费,分配小了会造成程序无法正常运行。为了解决这个问题就引入了交换和覆盖技术。
3. 交换技术
所谓交换技术其实就是把因内存大小限制而无法完全执行的程序先从内存中加载到磁盘上,等待大内存块的出现,再把程序加载到内存中去的过程。需要注意的是一旦一个程序发生了交换,其基址和极限均有可能发生变化,因此在每次加载程序的时候需要将基址寄存器和极限寄存器的内容进行重载。
4. 覆盖技术
交换技术可以给程序一个更大的内存空间,但当这个程序比实际物理内存还要大时交换技术也解决不了这个问题了。这时我们就采用覆盖技术。我们把程序分为一个一个的功能较为完整的小单元,当前面的单元执行完之后,再把后面的单元覆盖掉前面已执行的单元,这样就可以执行一个比物理内存还要大的程序。
小结
以上就是我对固定分区和非固定分区,以及交换技术和覆盖技术的一些理解。希望能对读者有所帮助,如有不正之处,欢迎留言讨论。