1:存储器
存储器的功能:
- 内存分配,回收
- 存储保护:每道用户进程都在自己的内存空间中运行,互不干扰,冲突,破坏
- 地址变换:逻辑地址转化为物理地址
- 存储共享:多进程共同使用同一系统软件
- 存储扩充:逻辑上扩充内存,虚拟存储技术
2:程序的装入和链接
-
编译:由编译程序将用户源程序编译成若干个目标模块
-
链接:由链接程序将目标模块和相应的库函数链接成装入模块
-
装入:由装入程序将装入模块装入内存
逻辑地址:源程序经过编译后形成目标模块或装配链接程序的地址编码
物理地址:程序在主存储器中的地址编码
地址重定位: 由于一个作业装入到与其地址空间不一致的存储空间所引起的,对有关地址部分的调整过程称为地址的重定位。这个调整过程就是把作业地址空间中使用的逻辑地址变换成主存中物理地址的过程。这种地址变换也称为地址映射。
装入:
绝对装入 | 可重定位装入 | 动态运行时装入 |
---|---|---|
物理地址=逻辑地址 | 物理地址=逻辑地址+程序在内存中的起始地址 | 程序装入时保持原来的逻辑地址,程序运行时根据逻辑地址转换为物理地址 |
装入程序根据装入模块的地址进行装入 | 静态重定位(程序装入内存时,一次性完成指令中地址的修改),无需硬件支持,由装入模块负责,缺点是装入内存后,不允许移动在内存中的位置。 | 动态重定位必须要有硬件支持(重定位寄存器或加法器) 程序装入内存时可进行移动。 |
链接:
静态链接 | 装入时动态链接 | 运行时动态链接 |
---|---|---|
修改地址,变换外部调用符号 | 便于修改和更新,便于实现对目标模块的共享 | 某些模块的链接直到运行时才执行。加快程序装入过程,节省大量的内存空间。 |
3:连续分配存储管理方式
连续分配:为一个用户进程分配一个连续的内存空间
-
单一连续分配: 适用于单用户,单任务的操作系统。内存分为系统区和用户区。
-
分区式分配方式1—固定分区: 系统初始化时,将存储空间分为若干固定大小的分区,每个分区存入一道作业,分区数量和大小不可变。
分区大小相等:缺乏灵活性,无论大小的程序都占据一个分区,造成内存空间浪费。程序太大,无法放入分区。
分区大小不等:克服大小相等分区的不灵活性,可以根据程序大小分配分区。还是有内部碎片,大程序还可能装不下。
-
分区式分配方式2—动态分区: 根据作业的大小动态的划分内存分区,使分区大小更好适应作业需求。区域边界可移动,分区个数不定,大小不定。
分区分配数据结构:空闲分区表,空闲分区链
分区分配算法:
最佳适应算法 | 最坏适应算法 | 首次适应算法 | 循环首次适应算法 | 动态重定位分区分配算法 | |
---|---|---|---|---|---|
原理 | 为作业寻找最接近的空白分区 | 为作业寻找最大的空白分区 | 从低址开始查找第一个可满足的空白分区 | 从上次的空白分区的下一个空白分区开始查找 | 紧凑技术 |
数据结构 | 空白分区从小到大链接的空白分区链 | 空白分区由大到小链接的空白分区链 | 空白分区由地址递增链接的空白分区链 | 空白分区由地址递增链接的空白分区链 | |
优点 | 后到的大作业容易满足 | 被划分的空白分区剩余多,利用率高 | 算法简单,查找快,保留高址的较大的空白分区 | 减少查找开销,空闲分区均匀分布 | |
缺点 | 划分后的剩余空闲区小 | 后到的大作业不容易满足 | 低址不断划分,留下很多难以利用的空白分区,每次查找开销大 | 缺乏大的空白分区 |
4:离散分配存储管理方式
连续分配管理,固定分区,不灵活,且产生内部碎片,动态分区,产生外部碎片,且紧凑技术代价大。
离散分配:将进程直接分散到不相邻的分区中(不必紧凑)
- 分页存储管理方式
- 分段存储管理方式
- 段页式存储管理方式
名字 | 分页存储管理方式 | 分段存储管理方式 | 段页存储管理方式 |
---|---|---|---|
优点 | 便于多道程序设计,提高内存利用率,而不必像动态分区使用紧凑技术。 | 方便编程,信息共享,信息保护,动态增长,动态链接。 | 分页和分段的组合。 |
缺点 | 1:动态的地址映射会增加计算机成本,降低计算机处理速度。2:各种表需要占据一定容量的内存空间,花部分处理机时间用来管理这些表。3:虽然消除大量碎片,每个作业最后一页也会产生不能利用的空白分区。4:存储扩充问题未能解决,如果没有足够的空间装下整个作业,该作业还是无法运行。 | 由于段的大小不同,在回收分配时,会产生外部碎片。 | CPU存取数据需要进行三次内存访问。 |
分页/分段区别:
分页存储管理方式 | 分段存储管理方式 |
---|---|
页是信息的物理单位,分页提高内存利用率。 | 段是信息的逻辑单位,分段更好满足用户需要。 |
页大小固定由系统硬件决定。 | 段大小不固定。 |
分页是一维,各模块链接时组成同一地址空间。 | 分段是二维的,各模块链接时可以每段组成一个地址空间。 |