当前位置:文档之家› 操作系统 第13次课

操作系统 第13次课

0 L-1 0 Module A call "function1" Module B "function1" L-1 L 0 Module A call L+F Module B "function1"
F function1(){ ... } M-1
L+F function1(){ ... } L+M-1
( )空闲
作业4( 作业 (96k) )
后 向 指 针 空闲区( 空闲区(252k) ) N+2 0 512k:
(c)内存分配图 )
0
N
可用
0
260k: :
1.1.3 动态分区分配
二.分区分配算法 Algorithm) (Partitioning Placement Algorithm)
首次适应算法( Fit) 1. 首次适应算法(First Fit) 空闲分区表的第一个表目起查找该表 的第一个表目起查找该表, 从空闲分区表的第一个表目起查找该表,把最先能够满 足要求的空闲区分配给作业, 足要求的空闲区分配给作业,这种方法目的在于减少查找 时间。为适应这种算法,空闲分区表(空闲区链) 时间。为适应这种算法,空闲分区表(空闲区链)中的空 闲分区要按地址由低到高进行排序。 闲分区要按地址由低到高进行排序。
第13次课 13次课
3. 程序的链接 链接的实质是将用到的各模块联系在一起, 链接的实质是将用到的各模块联系在一起,能 够找到被调用模块。 够找到被调用模块。
链接
1.静态链接 1.静态链接
动态连接
2.装入时动态链接 装入时动态链接
3.运行时动态链接 运行时动态链接
1. 静态链接方式 静态链接方式(Static Linking) 事先进行链接,形成一个完整的装入模块,即可执行模块, 事先进行链接,形成一个完整的装入模块,即可执行模块,以 后不再拆开,要运行时可直接调入内存。 后不再拆开,要运行时可直接调入内存。 1)对相对地址进行修改 1)对相对地址进行修改 2)变换外部调用符号 2)变换外部调用符号
1.1.3 动态分区分配
Operating System
128 K
Operating System Process 1 320 K
Operating System Process 1 Process 2 320 K
224 K
896 K 576 K 352 K
1.1.3 动态分区分配
Operating System Process 1 Process 2 320 K 224 K Operating System Process 1 320 K 224 K Operating System Process 1 Process 4 320 K 128 K 96 K 288 K 64 K Process 3 288 K 64 K Process 3 288 K 64 K
1.1.2 固定分区分配
大小相等 大小不等
Operating System 8M 2M 4M 6M 8M
Operating System
8M 8M
8M
8M
8M 8M
12 M
1.1.2 固定分区分配
二.内存分配
为了便于内存分配, 为了便于内存分配,通常将这些分区根据它们的大小进行 排队,并为之建立一张分区分配(使用) 排队,并为之建立一张分区分配(使用)表。 各表项包括该分区的起始地址、大小及状态(是否已分配) 各表项包括该分区的起始地址、大小及状态(是否已分配) 当有一用户程序要装入时,由内存分配程序检索该表, 当有一用户程序要装入时,由内存分配程序检索该表,从 中找出一个能满足要求的、尚未分配的分区, 中找出一个能满足要求的、尚未分配的分区,将它分配给该程 序,然后修改分区使用表中的状态;若找不到大小足够的分区 然后修改分区使用表中的状态; 则拒绝为该程序分配内存。 ,则拒绝为该程序分配内存。
图 4-3 程序链接示意图
Load2. Load-time Dynamic Linking
这种用法的前提是在编译之前已经明确知道要调用DLL 这种用法的前提是在编译之前已经明确知道要调用DLL 中的哪几个函数, 中的哪几个函数,编译时在目标文件中只保留必要的 链接信息,而不含DLL函数的代码;当程序执行时, DLL函数的代码 链接信息,而不含DLL函数的代码;当程序执行时,利 用链接信息加载DLL DLL函数代码并在内存中将其链接入调 用链接信息加载DLL函数代码并在内存中将其链接入调 用程序的执行空间中,其主要目的是便于代码共享。 用程序的执行空间中,其主要目的是便于代码共享。
1.1.3 动态分区分配
可变式分区是指在作业装入内存时, 可变式分区是指在作业装入内存时,从可用的内存中划出 一块连续的区域分配给它, 一块连续的区域分配给它,且分区大小正好等于该作业的大小 可变式分区中分区的大小和分区的个数都是可变的, 可变式分区中分区的大小和分区的个数都是可变的,而且 是根据作业的大小和多少动态地划分, 是根据作业的大小和多少动态地划分,因此又称为动态式分区 这种存储管理技术是固定式分区的改进, 这种存储管理技术是固定式分区的改进,既可以获得较大 的灵活性,又能提高内存的利用率。 的灵活性,又能提高内存的利用率。
2. 分区大小不等
将内存的用户区域划分成大小不等的分区, 将内存的用户区域划分成大小不等的分区,以适应不同大小的 作业的需要。 作业的需要。 多个小分区、适量的中等分区、少量的大分区。 多个小分区、适量的中等分区、少量的大分区。根据程序的大 分配当前空闲的、适当大小的分区。 小,分配当前空闲的、适当大小的分区。
36k: :
124KB 132K 未分配 (a) 分区说明表
作业B( 作业 (26k) )
68k: :
内碎片 内碎片
作业C( 作业 (56k) )
分区( 第3分区(64kb) 分区 ) 已分配) (已分配)
132k: : 第4分区 (124kb ) 分区 未分配) (未分配)
内碎片: 内碎片:占用分区之内未被利用的空间
256k: : (b)内存分配图 )
1.1.2 固定分区分配
三பைடு நூலகம்分区分配操作
1.1.2 固定分区分配
固定分区分配是最简单的多道程序的存储管理方式。 固定分区分配是最简单的多道程序的存储管理方式。实现 技术简单。但由于每个分区的大小固定, 技术简单。但由于每个分区的大小固定,必然会造成存储空间 的浪费;而且,程序大小受分区空间大小的限制。 的浪费;而且,程序大小受分区空间大小的限制。 适用于作业的大小和多少事先都比较清楚的系统中。 适用于作业的大小和多少事先都比较清楚的系统中。它 用于60年代的IBM 360的MFT操作系统中 60年代的IBM操作系统中。 用于60年代的IBM-360的MFT操作系统中。 目前多用于控制系统。 目前多用于控制系统。
1.1.2 固定分区分配
区号 大小 1 16KB 2 32KB 3 64KB 4 起址 20K 36K 68K 标志 已分配 已分配 已分配
0k: : 20k: :
操作系统
分区( 第1分区(16kb) 分区 ) (已分配) 已分配) 分区( 第2分区(32kb) 分区 ) 已分配) (已分配)
作业A( 作业 (16k) )
3.Run3.Run-time Dynamic Linking
这种方式是指在编译之前并不知道将会调用哪 DLL函数 函数, 些DLL函数,完全是在运行过程中根据需要决 定应调用哪个函数,并用LoadLibrary LoadLibrary和 定应调用哪个函数,并用LoadLibrary和 GetProcAddress动态获得DLL函数的入口地址 动态获得DLL GetProcAddress动态获得DLL函数的入口地址 。
单一连 续分配
分区分 动态重 配 定向分区
固定分区 动态分区
1.1.1 单一连续分配
这是一种最简单的存储管理方式,但只能用于单用户、 这是一种最简单的存储管理方式,但只能用于单用户、单 任务的操作系统,如在8位和 位微机上CP/M和MS-DOS操作 位和16位微机上 任务的操作系统,如在 位和 位微机上 和 操作 系统。它将内存分为两个区: 系统。它将内存分为两个区: 系统区:仅供操作系统使用,通常设置在内存的低段; 系统区:仅供操作系统使用,通常设置在内存的低段; 用户区:指除系统区以外的全部内存空间, 用户区:指除系统区以外的全部内存空间,提供给用户使 用。 地址重定位时, 地址重定位时,只要将指令或数据的逻辑地址加上用户区 基地址,就可以形成物理地址。 基地址,就可以形成物理地址。 为了防止操作系统程序受到用户程序有意或无意的破坏, 为了防止操作系统程序受到用户程序有意或无意的破坏, 需要设置内存保护机构,如采用基址寄存器和界限寄存器机制。 需要设置内存保护机构,如采用基址寄存器和界限寄存器机制。
问题1 内存空间是如何使用的? 问题1:内存空间是如何使用的?
使用方式
连续分配方式
离散分配方式
1.1 连续分配存储管理方式
连续分配是指为一个用 户程序分配一个连续的 内存空间 1.1.1 单一连续分配 1.1.2 固定分区分配 1.1.3 动态分区分配 1.1.4 动态重定向分区分配
连续分 配方式
Process 3
1.1.3 动态分区分配
Operating System 320 K Process 4 128 K 96 K 288 K 64 K Operating System Process 2 Process 4
外碎片
224 k 96 K 128 K 96 K
外碎片
Process 3
Process 3
1.1.1 单一连续分配
重定位寄存器 (基址 基址) 基址
界限寄存器
逻辑地址 CPU
<
相关主题