首页 > 代码库 > 存储管理
存储管理
存储管理
在操作系统中,负责管理存储器层次结构的程序称为存储管理器。
4.1 基本的存储管理
4.1.1 单道程序存储管理
对于A图,操作系统位于主存最底部的RAM,即随机存取存储器中,用户程序位于主存的上部。
对于B图,操作系统位于主存最高端的只读存储器里(ROM),(其实本身属于一种映像区域,映像了主板上的基本的输入输出系统)。
对于C图,设备的驱动程序位于内存最高端的ROM中,操作系统的其余部分位于低端的RAM中,中间是用户的应用程序。如MS-DOS系统。
对于IBM操作系统,系统位于ROM中的部分即为BIOS。
4.1.2 固定分区的多道程序系统
对于常见的系统,我们希望能够支持更多的程序,当某个程序处于等待I/O的时候,可以让CPU为别的程序服务,来提高系统整体的性能。
因此可以用划分分区的方法来同时加载多个程序,可以把主存分为几个大小不同的分区,根据程序的不同,来把他们加载到不同的分区中。而同时,程序也可按照单个输入队列的方式进行输入,也可以按照多个输入队列的方式进行输入。
对于左图,由于作业的大小类似的时候,而且众多的作业大小都类似,而此时分区的大小固定,我们该选择合适大小的分区来运行这个作业,这样的话,类似的作业就被分到了一起,而那些与作业的大小不一致的分区,就必然会出现空闲状态,那些分到一起的进程却不得不等待,等待要分到内存空间。忙得忙,闲的闲。
对于右图,所有的作业都被放入一个队列,每次当有分区被释放的时候,就从等待队列中寻找,最适合这个分区大小的进程,这样做是为了避免把大的分区分给那小的作业,免得资源被浪费,但这样却常常把小的作业推到了后面;但对于操作系统,我们做普通的要求就是简单的操作能被最快的反馈给我们,即小的作业能够被最快的处理,因此,为了总能够满足用户的这个要求,一般要专门保证总有一个小的分区,专门来处理那些小的事件、作业,免得被大的作业抢去分区。
或者通过加权来判断作业被推后的次数,到了一定的程度,就不再跳过而是立即执行。
4.1.3 重定位和存储保护
多道程序导致了分区的产生,而分区也导致了新的问题,即程序的重新定位和保护。
原因: 当程序装入内存时, 操作系统要为该程序分配一个合适的内存空间,由于程序的逻辑地址与分配到内存物理地址不一致, 而CPU执行指令时,是按物理地址进行的,所以要进行地址转换。
如果多个作业都是为某一个程序服务,当主程序调用这些作业的时候,就需要定位到这些作业,保证程序的运行(主函数和分别编译好的子函数)。这时,链接的时候,链接器按照我们的分区机制来定位程序。
定位的常见方法:
静态重定位
当用户程序被装入内存时,一次性实现逻辑地址到物理地址的转换,以后不再转换(一般在装入内存时由软件完成)。
动态重定位
在程序运行过程中要访问数据时再进行地址变换(即在逐条指令执行时完成地址映射。一般为了提高效率,此工作由硬件地址映射机制来完成。硬件支持,软硬件结合完成)。硬件上需要一对寄存器的支持。
存储保护
保护系统程序区不被用户侵犯(有意或无意的)
不允许用户程序读写不属于自己地址空间的数据(系统区地址空间,其他用户程序的地址空间)
保护过程——防止地址越界
每个进程都有自己独立的进程空间,如果一个进程在运行时所产生的地址在其地址空间之外,则发生地址越界。即当程序要访问某个内存单元时,由硬件检查是否允许,如果允许则执行,否则产生地址越界中断,由操作系统进行相应处理。
一般由硬件提供一对寄存器:
基址寄存器:存放起始地址
限长寄存器:存放长度
(上界寄存器/下界寄存器)
保护过程----防止操作越权
对于允许多个进程共享的存储区域,每个进程都有自己的访问权限。如果一个进程对共享区域的访问违反了权限规定,则发生操作越权。即读写保护。
存储管理