南邮操作系统教程CH-04-存储管理PPT课件
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
0 demo: 1 int a = 0 2 loop: 3 temp = a – 2 4 if (temp>0) goto do7ne 5 a++ 6 goto lo2op
7 done: 8 return 0
ch4.3
存储地址及地址转换
存储器使用的地址叫物理地址(绝对地址),其空间 是由存储器地址总线扫描出来的空间,其大小取决 于实际安装的主存容量。
Operating System
进程
0xFFFFFFFF Limit=0x10000 Base=0x20000
0x00000000
Base
+ 逻辑地址
CPU
DRAM
Limit
<?
出错!
ch4.8
看管好用户进程
策略: 将用户进程关在一个内存区域
它不能自己切换到内核模式 它不可以直接改变基址和限长寄存器的值 它不可以随意更改中断控制 它不可以访问其它进程的内存空间数据
第四章 存储管理 4.1 概述 4.2 连续存储管理 4.3 分页式存储管理 4.4 分段式存储管理 4.5 虚拟存储
ch4.1
学习目标
虚拟设备
多个进程和线程可以共享一个CPU 多个进程和线程应该可以共享一个存储器 多个进程和线程还可以共享一个IO设备(第5章)
如何共享一个存储器?
各进程/线程自己的数据有自己的执行区域,程序变 成进程时是如何映射到那个区域去的?
下限寄存器
B
操作系统区 用户分区1
越界!!
用户分区2
CPU
+
逻辑地址 绝对地址
< B+L2
用户分区3 用户分区4
上限寄存器 B + L2
用户分区5 用户分区6
ch4.Байду номын сангаас2
可变分区存储管理
存储分配:
系统维护两张表,一张记录尚未分配的内存状态,另 一张记录已分配的情况。
初始状态已分配表为空,未分配表仅有一条记录,整 个用户区就是空闲区。系统总是从空闲中选择一个足 够容纳进程的分区分配,并将分配情况记在已分配表 中,剩余的分区空间记录进未分配表。
目标程序地址叫逻辑地址(相对地址),被限制从0开 始编址,一个用户程序的逻辑地址集合称为该程序 的逻辑地址空间。
地址转换(重定位、地址映射):将程序的逻辑地址 转成物理地址的过程。
静态转换 动态转换
ch4.4
程序执行步骤(地址转换时机)
执行步骤:
源代码
编译 链接/装载
编译器
执行
中间代码 0… 1… 2… 3… …
最坏适应
查找整个分区表,分配最大的足够大的分区 总是产生最大剩余分区,它可能比最优适应产生的剩
两个问题
内存中的进程如何交互? 内核模式和用户模式如何切换?
ch4.9
连续存储管理
所谓连续,是指进程在主存里占用一块连续的空间。 如果系统事先把内存用户区划分为若干分区,分区
大小可以相等,也可以不等,一个进程占据一个分 区。我们称其为固定分区存储管理。 若内存不预先划分好,而是等进程装入时,根据进 程的需求和内存空间的使用情况来决定是否分配。 我们称其为可变分区存储管理。
占用标志 0 P1 0 0 P2 0
0k
OS (8K)
8k
分区1 (8K)
16k 分区2 (16K)
32k 分区3 (16K) 48k 分区4 (16K) 64k 分区5 (32K) 96k 分区6 (32K)
ch4.11
固定分区的地址转换和存储保护
静态转换:装入时检查绝对地址是否落在分区内 动态转换:执行时检查,如下图所示。
回收:将已分配表的标志改为“空”,再将其加入 未分配表中。
ch4.13
某一时刻的分配状态
0K
P1
15K
38K
P2
48K
68K
P3
80K
110K
P4
120K
始址 1155KK 48K 80K
空闲区表
长度 5233KK 20K 30K
标志 未未分分配配 未分配 未分配
始址 0K 38K 68K 110K
对各进程/线程在内存中的数据要加以保护,如何实 施?
为了更好地利用CPU,就应该让更多的进程/线程并 发执行,如果内存不够用了怎么办?
虚拟存储器
ch4.2
源代码的伪中间代码
int demo(){ int a = 0;
while(a<2){ a++;
} return 0; }
代码执行时,这些行 号需要改变吗?
ch4.10
固定分区存储管理
存储分配:系统维护一张主存分配表,里面记载了 内存的分区划分和使用状态。分配主存时总选择那 些分区占用标志为0且长度小于等于进程所需空间的 分区块。回收只要相应分区占用位置0即可。
分区号 1 2 3 4 5 6
起始地址 8K 16K 32K 48K 64K 96K
长度 8K 16K 16K 16K 32K 32K
已分配区表
长度 15K 10K 12K 10K
标志 P1 P2 P3 P4
ch4.14
可变分区分配算法
首次适应
分配第一个足够大的分区,可以从头开始查找,也可 以从上次分配结束的地点开始查找
最优适应
查找整个分区表,分配最小的足够大的分区 总是产生最小剩余分区,不浪费一个更大的空间,但
会导致剩余分区太小难被再利用
50K
内存
1 2
0 50K 100K 180K 230K …
其它 目标模块
目标模块 链接器
装载模块 装载器
内存可执行二进制
ch4.5
静态地址转换
静态转换:当用户程序被装入内存时,一次性实现 逻辑地址到物理地址的转换,以后不再转换。一般 在装入内存时由软件完成。若编译时完成则需要程 序员事先知道要装载的地址。
100 goto 200
200
a++
1100 goto 200
BR
+
1000
1200 a++
300
1300
ch4.7
存储保护
使在内存中的各道进程,只能访问它自己的区域, 避免进程内存空间重叠,特别是不能访问OS的内存 空间。
通常需要两个硬件支持(不需要转换地址):
基址寄存器(Base Register):存放装载的起始地址 限长寄存器(Limit Register):存放的最大逻辑地址
逻辑地址空间 0
物理地址空间 1000
100 goto 200
1100 goto 1200
200
a++
1200 a++
300
1300
ch4.6
动态地址转换
动态转换:在程序执行过程中要访问数据时再进行 地址变换,需要额外的硬件来记录程序装载的内存 基址。
逻辑地址空间 0
物理地址空间 1000
CPU goto 200