操作系统-存储器管理部分

存储器历来都是计算机系统中重要的组成部分。仍然是一种宝贵而又稀缺的资源。

如何对它加以有效的管理,不仅直接影响到存储器的利用效率,而且会影响系统的性能。

存储器的管理的主要对象是内存。在计算机执行时,几乎每一条指令都会涉及到对存储器的访问。

存储器的三个理想条件(这三个条件从现在技术来讲是不可能同时达到的

1.对存储器的访问速度要跟得上处理机的运行速度。

2.要求存储器要有很大的容量。

3.而且存储器的造价应该很低。

在现代计算机系统当中无一例外的采用了多层结构的存储器系统

存储器的多层结构

对于通用计算机而言,存储层次至少应具有三级:CPU寄存器,主存,辅存

扫描二维码关注公众号,回复: 7988556 查看本文章

在存储层次当中,层次越高,存储介质的访问速度越快,价格越高,其存储容量越小。

寄存器,高速缓存,主存储器,磁盘缓存均属于操作系统中存储管理的管辖范畴。断电后它们所保存的信息将会消失。

固定磁盘,可移动存储介质的管理属于设备管理的范畴,它们存储的信息将被长期保存。

可执行存储器

在计算机系统的存储层次当中,寄存器和主存储器又被称为可执行存储器。

进程可以在很少的时钟时期内使用一条load或store指令对可执行存储器进行访问。而对辅存的访问则需要通过I/O设备来实现,所消耗的时间远大于访问可执行存储器所消耗的时间,一般相差3个数量级或者更多。

操作系统的存储管理负责对可执行存储器的分配,回收以及各存储层次之间的数据交换进行管理。

 

主存储器

主存储器简称内存或者主存,是计算机的主要部件,用于保存进程运行过程中的程序与数据,也称为可执行存储器。通常,处理机都是从主存储器中获取指令和数据的。

由于主存储器访问速度远低于CPU执行指令的速度,为缓解此矛盾,在计算机系统当中引入了寄存器和高速缓存。

寄存器

寄存器具有和处理机相同的速度,故对寄存器的访问速度最快,完全能与CPU协调工作,但价格十分昂贵,于是存储容量不能很大。

在当前的微机系统与大中型机当中,寄存器的位数通常为32与64位,而在小型的嵌入式计算机中,寄存器的位数通常为8位。

高速缓存

高速缓存是现代计算机结构中的一个重要部件,它是介于寄存器与存储器之间的存储器,主要用于备份主存中较常用的数据,以减少处理机对主存储器的访问次数,这样可以大幅度提高程序的运行速度。

高数缓存的容量大于寄存器的容量,访问速度比主存储器快。

在计算机系统中,为了缓解内存与处理机速度之间的矛盾,许多地方都设置了高速缓存。

通常,进程的数据和程序存放在主存储器当中,仅当要被访问时,才被临时复制到高速缓存当中。当CPU访问一组特定信息的时候,首先会检查该信息是否在高速缓存当中,如果在,则直接从高速缓存中取出,不需要去访问主存。否则,需要访问主存来获取信息。

紧靠内存的一级高速缓存的速度最高,容量最小。越远,速度越低,容量越大。

磁盘缓存

由于目前磁盘的I/O速度远低于对主存的访问速度,为了缓解两者速度的矛盾,设置了磁盘缓存,主要用于暂时存放频繁使用的一部分磁盘数据和信息,以减少访问磁盘的次数。

数据必须先存在主存当中,才能输出到辅存当中。

程序的装入和链接

用户程序变成一个可以执行的程序通常要经过以下几个步骤:

1.编译,由编译程序对源程序进行编译,形成若干个目标模块。

2.链接,由链接程序将编译程序形成后的一组目标模块以及它们所需要的库函数链接在一起,形成一个完整的装入模块。

3.装入,由装入程序将装入模块装入内存。

在将一个装入模块装入内存时,可以有如下三种装入方式:

1.绝对装入方式

当计算机系统很小,且仅能运行单道程序的时候,完全有可能知道程序将驻留在内存的什么位置。此时可以采用绝对装入方式。

用户程序经过编译后,将产生绝对地址的目标代码。装入模块被装入内存之后,由于程序和数据的逻辑地址与物理地址是相同的,所以不需要改变程序和数据的地址。

可重定位装入方式(在装入内存时完成的,装入完成后全部的地址都是物理地址)

它可以根据内存的具体情况将装入模块装入到内存的合适位置。

在多道程序环境下,编译程序不可能知道经过编译后的目标模块应存放在内存的什么位置。因此,对于用户程序编译所形成的若干个目标模块,它们的起始地址通常都是从0开始,程序中的其他地址都是相对于起始地址计算的。

通常,把装入进程时对目标进程的指令和数据的地址的修改过程叫做重定位。又因地址变换通常是在进程装入时一次完成的,此后不再发生变化,因此叫做静态重定位。

可重定位装入方式可以将装入模块加载到内存的任何允许的位置,可用于多道程序环境。

动态运行时的装入方式

动态运行时的装入程序在把装入模块装入内存后,并不立即把模块的逻辑地址变为物理地址,而是当该程序真正要执行时才进行地址转换,因此装入内存后的所有地址均为逻辑地址。

程序的链接

在对目标模块进行链接时,根据进行链接的时间不同,可把链接分为三种:

1.静态链接方式

在程序运行前,先将目标模块和所需的库函数链接成为一个装入模块,以后不再拆开。我们把这种事先进行链接的方式叫做静态链接方式。

猜你喜欢

转载自www.cnblogs.com/Virus-Faker/p/11939325.html
今日推荐