操作系统-存储器管理
本文最后更新于567天前,其中的信息可能已经有所发展或是发生改变。

2020年3月30日

16:24

4.1 存储器的层次结构

计算机生成了可选文字:
CPU内
主存
寄存器
高速缓存
主存储器
磁盘缓存
固定磁盘
可移动存储器

    1. 主存储器(简称内存)
      1. 作用:保存进程运行时的程序和数据。
    2. 寄存器和高速缓存
      1. 作用:缓和内存的访问速度与CPU指令执行速度不匹配的矛盾。
    3. 磁盘缓存
      1. 作用:缓和磁盘I/O速度与内存的访问速度不匹配的矛盾。

对用户程序的处理步骤:

4.2 程序的装入和链接

    1. 对用户程序的处理步骤:

计算机生成了可选文字:
Compile
源程序-一-一一
Compiler
目标模块
Link
Linker
装入模块
Load
Loader

计算机生成了可选文字:
流接
程序
编译程序
生的目标
装入叩堅
装入
程0

    1. 物理地址(绝对地址):计算机内存单元 的真实地址。
    2. 内存空间:物理内存是各程序共享的物 质基础,由0~(m-1)个物理地址组成。
    3. 逻辑地址(相对地址):用户的程序地址。
    4. 逻辑空间:程序地址均从“0”开始。
    5. 程序的装入
装入方式 缺点 优点
绝对装入方式 (Absolute Loading Mode) 装入模块被装入内存后,程序中的逻辑地址与实际物理地址完全相同。 缺点:只适用于单道系统;要求程序员熟悉内存的使用情况等。 是CPU执行目标代码快
可重定位装入方式 (Relocation Loading Mode) 计算机生成了可选文字:
1m0
2500
5m0
2500
365
作业地址空同
]00
11000
12500
15000
12500
365
内存空间 1)程序重定位之后就不能在内存中搬动了;

2)要求程序的存储空间是连续的,不能把程序放在若干个不连续的区域中。

无需硬件支持
动态运行时装入方式(Denamle Run-time Loading) 计算机生成了可选文字:
重定位寄存器
0
处理机一侧存储器一侧
相对地址
2500
10000
1m00
1m00
LOADI,25閃
LOAD1,
25
2500
365
5m0
作业J
12500
巧000
365
主存 需要硬件支持。 1)目标模块装入内存时无需任何修改,因而装入之后再搬迁也不会影响其正确执行,这对于存储器紧缩、解决碎片问题是极其有利的;

2)一个程序由若干个相对独立的目标模块组成时,每个目标模块各装入一个存储区域,这些存储区域可以不是顺序相邻的,只要各个模块有自己对应的定位寄存器就行。

绝对装入方式 (Absolute Loading Mode)问题:

多道程序环境下,逻辑空间中的逻辑地址和 内存空间中的物理地址不一致,如何解决?

解决方案: 借助于地址映射功能进行转换。 对地址部分的调整过程,称为重定位。

重定位的类型

类型 映射时间 特点
静态重定位 装入内存时,地址映射一次完成
      1. 运行过程中不可移动位置
      2. 内存利用率低
动态重定位 执行期间,地址映 射由“硬件地址变 换机构”动态完成
      1. 运行过程中可移动位置
      2. 需附加硬件支持
    1. 程序的链接
    2. 静态链接方式(Static Linking)

解决两个问题:

    1. 修改相对地址
    2. 变换外部调用符号

计算机生成了可选文字:
0
0
0
模块A
Call8;
Return
模块8
CallC;
Return
模块C
Return
目标模块
静态链接
0
L
L+M-I
L+M
L+M+N-I
模块A
JSR"L"
Retum
模块B
JSR"L+M
Retum,
模块C
Return;
装入模块
相对地址+L
相对地址+L+M

    1. 装入时动态链接(Load time Dynamic Linking)

将几个目标模块装入内存时边装入边链接。

优点:

    1. 便于修改和更新。
    2. 便于实现对目标模块的共享
    3. 运行时动态链接(Run-time Dynamic Linking)

将某些目标模块的链接,推迟到执行时才进行。

优点:

    1. 加快程序的装入过程。
    2. 节省内存空间。

4.3 连续分配方式

4.3.1 单一连续分配

    1. 基本思想:
      1. 内存划分为:系统区和用户区
      2. 只能用于单用户、单任务的操作系统中
    2. 特点:
      1. 方法简单,易于实现
      2. 单道程序: 内存和CPU利用率低,难于实现共享

4.3.2 固定分区分配

    1. 基本思想:
      1. 把内存用户空间划分为若干个固定大小的分区; 每个分区中只装入一道作业。
    2. 划分分区的方法:
      1. 分区大小相等
      2. 分区大小不等
    3. 具体实现:
      1. 将分区按大小排队
      2. 建立分区使用表 表项包括:
        1. 分区号
        2. 分区起始地址
        3. 分区大小
        4. 分区状态
      3. 当程序装入时,由内存分配程序检索分区使用表
      4. 若找到符合要求的分区,则完成内存分配,并进行标记;
      5. 若未找到,则拒绝内存分配。
    4. 缺点:

内碎片问题;限制了并发执行的程序数目

4.3.3 动态分区分配

    1. 基本思想:
      1. 作业装入时,根据实际需要和内存空间的使用 情况进行动态分配。
    2. 特点:
      1. 分区个数、分区大小不固定。
    3. 分区分配中的数据结构
      1. 空闲分区表、已分配分区表
      2. 空闲分区链

计算机生成了可选文字:
《0《0〗0《0《0的
N个字节可用
空闲链结构
N

    1. 分区分配算法:
算法思想: 优点 缺点

首次适应算法

空闲分区表或空闲分区链按照分区起址递增的次序排序。顺序查找,若找到第一 个大小满足要求的空闲分区,则从中划出一块 内存空间分配给作业;若未能找到,则此次内存分配失败。 高址部分的大的空闲分区得到保留,为大作业的内存分配创造了条件;
      1. 每次都是优先利用低址部分的空闲分区,造成低址部分产生大量的外碎片。
      2. 每次都是从低址部分查找,使得查找空闲分区的开销增大
循环首次适应算法 从上次分配的空闲区位置之后开始查找。若找到一个满足要求的空闲分区,则从中划出一块内存空间分配给作业。若最后一个 空闲分区大小仍不能满足要求,则返回到第一 个空闲分区继续查找。
      1. 使得空闲分区分布更加均匀;
      2. 空闲分区的查找开销小;
高址部分的大空闲分区被分小,使得大作业进入无法分配内存;
最佳适应算法 从满足要求的、最小的空闲分区中划出一块空间分配给作业。要求空闲分区表或 空闲分区链按照分区容量递增的次序排序,顺 序查找第一个满足要求的空闲分区。 第一次找到的空闲分区是大小最接近待分配内存作业大小的; 产生大量难以利用的外部碎片。
最坏适应算法 从满足要求的、最大的空闲分区中划 出一块空间分配给作业。要求空闲分区表或空闲 分区链按照分区容量递减的次序排序。 查找速度快,分配后剩下的可用空间较大 一段时间后会缺乏较大空闲区。
快速适应算法 将空闲分区按照进程常用的空间大小 进行分类。分配时,根据进程长度,寻找到能容 纳它的最小空闲区链表,并取下第一块进行分配。 查找效率高 分区归还主存时算法复杂
    • 分区分配操作:
      1. 分配内存
      2. 回收内存

内 存 分 配 流 程

计算机生成了可选文字:
m.size:空闲分区大小;
u.size
返回
继续检索下一个表项
将该分区从链中移出
:请求分区大小
从头开始查表
检索完否?
将该分区分配给请求者
改有关数据结构
返回
N

4.3.4 可重定位分区分配

    • 动态重定位的引入:
      1. 由于经过紧凑后的用户程序在内存中的位置发生 了变化,所以必须对发生移动的程序和数据进行重定位。
    • 动态重定位的实现:

计算机生成了可选文字:
重定位寄存器
0
处理机一侧存储器一侧
相对地址
2500
10000
1佣00
1m00
LOADI,25開
LOAD1,
2500
2500
365
5m0
作业J
12500
巧000
365
主存

    • 动态重定位分区分配算法:

计算机生成了可选文字:
否
返叵
空阑分区
总和巧?
进厅紧凑形
成连续空闲区
修改有关的
数构
否
请求分配
让5厩分区
检索空苤分区链(表)
到大十巧ize
的可用区否?
按动态分区方式
进行分配
修改有关的
数据结构
返叵分区号
及首批

4.3.5 对换(Swapping)

    1. 对换(Swapping)的引入:
      1. 整体对换:以进程为单位的对换,用于分时 系统
      2. 部分对换:以“页”或“段”为单位的对换, 支持虚拟存储系统
    2. 对换空间的管理:
      1. 外存划分:
        1. 文件区:存放文件,采用离散分配方式,管理目标是提高文件存储空间的利用率。
        2. 对换区:存放从内存换出的进程,采用连续 分配方式,目标是提高进程换入和换出的速度。
    3. 进程的换出与换入:
      1. 进程的换出:

选择处于阻塞状态且优先级最低的进程;启动磁盘,将该进程的程序和数据传送到磁盘的对换区;回收 进程内存空间,修改PCB。

    1. 进程的换入:

系统定时查看所有进程的状态;找出“就绪”状态 但已换出的进程;

将其中换出时间最久的进程换入内存。

点击数:122

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇