单道和多道编程的内存管理

「这是我参与11月更文挑战的第18天,活动详情查看:2021最后一次更文挑战

前言

 大家好,我是程序猿小白 GW_gw,很高兴能和大家一起学习进步。
复制代码

以下内容部分来自于网络,如有侵权,请联系我删除,本文仅用于学习交流,不用作任何商业用途。

摘要

 本文主要介绍单道编程和多道编程下内存管理的一些基本概念,以及地址翻译的一些介绍。
复制代码

1. 单道编程的内存管理

单道编程的内存管理是最简单的内存管理,因为内存中就只有两个程序,一个是操作系统,一个是用户程序。由于操作系统的大小是恒定的并且只有一个用户程序,那我们就可以每次都把用户的程序加载到同一个内存地址,并且不需要改变。这种在程序运行前就可以计算出所有的物理地址的方式叫做静态地址翻译。

固定内存管理的是很简单,并且程序的运行速度很快,但是缺点也很明显。程序运行时要把整个程序放到内存空间中,虽然我们对内存做了"扩充",但当程序比实际物理内存还要大时仍然无法运行。另外由于是固定分区,那么在不同的操作系统上可能无法运行。

2. 多道编程的内存管理

在多道编程的环境下,就无法确定把程序加载到固定的内存地址上,因此我们无法事先计算程序的物理地址,只有在程序加载完毕后才能计算物理地址,也就是在程序运行时进行地址翻译,我们把这种地址翻译叫做动态地址翻译。

image-20211119113021771

对于多道编程的内存管理方式有两种:固定分区管理,非固定分区管理。

3. 地址翻译

由程序的虚地址再加上其所占区域的起始地址即可获得物理地址。

物理地址=虚拟地址+程序所在区域的起始地址。

我们把程序所在区域的起始地址叫做基址,而把程序所能加载的最大长度叫做极限,分别存放在基址寄存器和极限寄存器中。一个程序的有效地址范围就是[基址,极限]。

小结

以上就是关于在单道编程和多道编程环境下内存管理的一些介绍,希望能对读者有所帮助,如有不正之处,欢迎留言指正。

Guess you like

Origin juejin.im/post/7032630721550221320