4-3 基本分页存储管理方式
说明基本分页存储管理方式
说明基本分页存储管理方式在计算机系统中,存储管理是一个重要的部分,其功能是对计算机系统中的数据进行合理的管理与分配。
分页存储管理方式是其中的一种常用方式。
分页存储管理方式指的是将物理存储空间划分为大小相等的页框,将逻辑存储空间按照页的大小来划分,将逻辑地址空间中的每个页面映射到物理地址空间中的一个页框上。
这样就可以实现逻辑地址与物理地址的映射。
在分页存储管理方式中,每个进程都有自己的页表,用于记录该进程的逻辑地址空间与物理地址空间之间的映射关系。
当进程需要访问某个逻辑地址时,通过查找页表,找到对应的物理地址。
如果该页不在内存中,则需要从磁盘中读取该页,并将其放置到空闲的页框中。
分页存储管理方式的优点在于可以充分利用内存空间,提高内存利用率。
同时,由于每个进程有自己的页表,各个进程之间的地址空间是独立的,可以有效地防止进程间的地址冲突。
此外,由于采用了分页的方式,可以实现对内存中的数据进行快速查找和访问。
然而,分页存储管理方式也存在一些缺点。
首先,由于需要维护每个进程的页表,对于系统的管理与维护带来了一定的复杂度。
其次,由于每个页都需要记录页表信息,因此会占用一定的空间。
此外,由于每次访问都需要进行地址映射,会带来一定的时间开销。
为了克服分页存储管理方式的缺点,还可以采用其他的存储管理方式,如分段存储管理方式、虚拟存储管理方式等。
分段存储管理方式将逻辑地址空间划分为若干个段,每个段可以有不同的长度,不同的段可以放置在不同的物理地址空间中。
虚拟存储管理方式则将整个逻辑地址空间划分为若干个页面,每个页面可以在内存中或者磁盘中进行存储,当进程需要访问某个页面时,会先判断该页面是否在内存中,如果在则直接访问,否则从磁盘中调入并放置在内存中。
分页存储管理方式是一种常用的存储管理方式,可以充分利用内存空间,提高内存利用率。
但是,由于需要维护每个进程的页表,会带来一定的管理与维护复杂度。
因此,在实际应用中,需要根据具体情况选择合适的存储管理方式。
基本分页存储管理方式和虚拟存储方式
基本分页存储管理方式和虚拟存储方式
基本分页存储管理方式是一种将主存储器划分为固定大小的页框和相同大小的页的方法。
程序在执行时被划分为固定大小的页,而主存储器划分为相同大小的页框。
当程序执行需要的某个页时,该页从辅助存储器加载到一个空闲的页框中,程序就可以继续执行。
虚拟存储方式是一种将程序按逻辑地址划分为多个大小固定的逻辑块,而主存储器被划分为固定大小的块。
逻辑块的大小可以不同于物理块的大小。
当程序执行需要的某个逻辑块时,该块可以从辅助存储器加载到主存储器中的任意一个空闲块中。
区别:
1.分页方式划分的是主存储器中的页框和程序的页,而虚拟存储方式划分的是主存储器中的块和程序的逻辑块。
2.分页方式中,页的大小是固定的,而虚拟存储方式中,逻辑块的大小可以不同于物理块的大小。
3.分页方式中,程序执行时需要的页会被加载到主存储器中的任意一个空闲页框中,而虚拟存储方式中,逻辑块会被加载到主存储器中的任意一个空闲块中。
综上所述,基本分页存储管理方式和虚拟存储方式都是一种将程序按组块管理的方法,但在具体的实现细节和块的大小上有所不同。
ch4-4.3分页式存储管理
小结
页式存储管理缺点
程序全部装入内存 各种表格要占用一定的内存空间,而且要花 费一定的时间来建立和管理这些表格 碎片问题,虽然大部分的问题都解决了,但 是每一个作业或者进程的最后一页都有不能 充分利用的毛病 不易实现共享 不便于动态链接
页表
0 1 · · p b · · ·
主存
分页存储管理的地址转换
4.3.2 快表
页表放在内存当中,所以,CPU每存取一个 数据时需两次访问内存: 访问页表 访问存储单元 为了提高速度,增加一个硬件关联的存储器, 存放经常使用的页表表项。这个存储器称为 快表(转换后援缓冲TLB、联想寄存器)。
4.3.3分页式存储空间的分配和去配
去配算法
当一个进程执行完成并退出内存时要撤销进 程页表,同时修改主存物理块表。 它的过程是:查找该进程的进程页表,将其 中的每一行取出,得到物理内存的块号,然 后到主存物理块表中去搜索,把所对应的表 项的值修改为空闲,以便后面可以继续使用。
小结
页式存储管理优点
A P INT L d [ A]MODL
4.3.1 分页式存储管理基本原理
页表
将页号和页内地址转换 成内存地址,必须要有 一个数据结构,用来登 记页号和块的对应关系 和有关信息,这样的数 据结构称为页表。
0
页号 块号 0 2
1 2
…
4 7
…
0 1 2 3 4 5 6 7 8 9 内存空间
4.3.1 分页式存储管理基本原理
分页存储管理
1
第 3 部分 分段存储管理方式
为每个分段分配一个连续的分区,而进 程中的各个段可以离散地移入内存不同 的分区中。 动态分 配方式 分段存储管 理系统
系统为整个进程分配一个 为了能从物理内存中找出每个逻辑段所对应的位置,引 连续的内存空间 入段表 段表:实现逻辑段到物理内存区的映射。
第 3 部分 分段存储管理方式
块
(物理)块或页框。
块号
对分号的若干个物理块分配的编号,每个块号在内存都有对 应物理地址。
31
页表的作用:实现从页号到物理块号的 地址结构 地址映射
12 11
0
第 1 部分-分页存储管理方式
31
12 11 0
就是页内地 址
地址结构
如果逻辑地址空间是2^m,页面大 小是2^n(字节),那么逻辑地址的高 m-n位是页号,低n位是页内地址(即位 移量W),最多允许拥有的页面数是 2^m-n(页) 两部分的地址长度为32位,其中0~11 位(计12位)为位移量,12~31位(计
与分页存
√
相似之处
两者都采用离散分配方式, 且都要通过地址映射机构来 实现地址变换。
储管理方
×
式的比较
段的作业地址空间则是二维的。
第 3 部分 分段存储管理方式
每段分配一个连续的分区,进程 中的各个段可以离散地分配到内存 中不同的分区中。
3
每个段从0开始编址,采用一 段连续的地址空间。
2
程序地址空间按其内在逻辑关系划分 成若干个相对独立的段,如主程序段、 子程序段、数据段及堆栈段等。
(1)块大小=64/16=4KB,因为块的大小=页的大小,所以页面大小=4KB,所以总长=4*4=16(KB) (2)在内存中的起始地址=块号*块的大小 页号为0的页面被装入主存的第2块,所以地址为4*2=8K 页号为1的页面被装入主存的第4块,所以地址为4*4=16K 页号为2的页面被装入主存的第1块,所以地址为4*1=4K 页号为3的页面被装入主存的第6块,所以地址为4*6=24K (3)内存地址=块号*起始地址+页内地址(位移量、页内偏移量、页偏移) 所以对应的内存地址是: 需要注意: 4K*2+100=8292 内存地址用到的是块号,而不是页号 4K*4+50=16434 KB和数字之间的转换 4K*1+0=4096 块大小和页面大小、块内地址和页内 4K*3+10=24636 地址的等值关系
操作系统-基本分页存储管理(内有代码)
基本分页存储管理实验目的连续内存分配方式会形成许多“碎片”,虽然可以通过“紧凑”方法将许多碎片拼接成可用的大块空间,但须为之付出很大开销。
如果允许将一个进程直接分散地装入到许多不相邻接的分区中,则无需再进行“紧凑”。
基于这一思想而产生了离散分配方式。
如果离散分配的基本单位是页,则称为分页存储管理方式;如果离散分配的基本单位是段,则称为分段存储管理方式。
在分页存储管理方式中,如果不具备页面兑换功能,则称为基本的分页存储管理方式,或称为纯分页存储管理方式,它不具备支持虚拟存储器的功能,它要求把每个作业全部装入内存后方能运行。
本实验通过程序模拟操作系统的基本分页存储管理方式,进一步理解这一内存分配方式的原理和特点,加深对理论知识的掌握。
实验要求1、用C语言或Java语言编写程序模拟操作系统对内存的基本分页存储管理方式2、程序要能正确对“内存”进行“分配”和“回收”,能接受用户的输入,显示内存的分配情况,并有一定的容错能力。
3、每个人独立按时完成实验内容。
实验内容本实验假定内存空间已经按块划分,目标程序无需关心内存块大小等底层细节,只需按算法对内存块进行分配即可。
程序应该实现以下功能:1、内存初始化。
假定内存块共有N个,初始化后的内存空间应该有一部分已经被使用,这可以用随机数或程序内部的其他算法完成。
2、程序应该能接受用户输入的进程信息,并为之分配内存,返回分配结果(成功或失败),注意,此处应该考虑到不合法的输入并进行相应处理。
3、程序能回收用户指定的进程所占用的内存空间,因此,程序可能需要为每个进程分配一个唯一的进程号并给出详细的提示信息。
4、能直观合理地显示内存分配情况。
5、程序界面友好,便于操作和查看运行结果。
#include <stdio.h>#include <windows.h>#define N 100 // 共有100个内存块int process[N][N+1]; // 存放每个进程的页表int block[N]; // 内存块状态标志数组,0:空闲,1:使用int blockCount; // 记录当前内存剩余空间int processCount; // 记录当前进程数bool flag = true;void init();void output();bool createProcess();bool endProcess();void init(){int i, j;// 初始化内存状态标志数组for (i=0; i<N; i++)block[i] = 0;for (i=0; i<20; i++)block[rand()%(N-1)] = 1;blockCount = 0;for (i=0; i<N; i++)if (block[i] == 0)blockCount++;// 初始化存放进程的数组for (i=0; i<N; i++){process[i][0] = 0;for (j=1; j<N; j++)process[i][j] = -1;}processCount = 0;printf("初始化结果如下:");output();flag = false;}void output(){printf("\n内存总量:%d 块, 已用空间:%d 块, 剩余空间:%d 块, 进程总数:%d 个\n", N, N-blockCount, blockCount, processCount);if (flag && blockCount < N){printf("已使用的内存块(%d):\n", N-blockCount);for (int k=0,count=0; k<N; k++){if (block[k] == 1)printf("%2d ", k, ++count);if (count == 15){putchar('\n');count = 0;}}putchar('\n');}// 输出各进程占用内存详细情况if (processCount > 0){printf("内存详细使用情况如下:\n");for (int i=0; i<N; i++){if (process[i][0] > 0){printf("进程号:%d \n占用内存块(%2d):", i, process[i][0]);for (int j=1,count=0; j<=process[i][0]; j++){printf("%2d ", process[i][j], count++);if (count == 15){putchar('\n');printf(" ");count = 0;}}putchar('\n');}}}elseprintf("当前内存无进程!\n");/*// 输出空闲内存块if (blockCount > 0){printf("空闲内存块(%d):\n", blockCount);for (int k=0,count=0; k<N; k++){if (block[k] == 0)printf("%2d ", k, ++count);if (count == 15){putchar('\n');count = 0;}}putchar('\n');}*/putchar('\n');}bool createProcess(){int pid, pages, k = 0;loop:printf("请输入进程号(小于%d)和所需页面数:", N);scanf("%d%d", &pid, &pages);if (pid > 99){printf("错误!进程号过大!\n");goto loop;}if (pages > blockCount)return false;blockCount -= pages;process[pid][0] = pages;for (int i=1; i<=pages; i++){while (block[k]==1 && k<100)k++;process[pid][i] = k;block[k] = 1;k++;}processCount++;return true;}bool endProcess(){int pid, pages;if (processCount < 1){printf("当前内存没有进程!\n\n");return false;}printf("当前内存中的进程有%d 个,进程号为:", processCount);for (int i=0; i<N; i++)if (process[i][0] > 0)printf("%2d ", i);putchar('\n');printf("请输入您要结束的进程号(小于%d):", N);scanf("%d", &pid);pages = process[pid][0];if (pages == 0){printf("对不起!该进程不存在!\n");return false;}for (int j=1; j<pages; j++){block[process[pid][j]] = 0;process[pid][j] = -1;}process[pid][0] = 0;processCount--;blockCount += pages;return true;}void menu(){int choice;while (true){printf("操作菜单:\n");printf(" 1 --> 创建进程\n 2 --> 结束进程\n 3 --> 查看内存\n 0 --> 退出程序\n");printf("请输入您要进行的操作:");scanf("%d", &choice);switch (choice){case 1:if (createProcess())printf("创建新进程成功!\n\n");elseprintf("抱歉!内存空间不足,创建新进程失败!\n\n");break;case 2:if (endProcess())printf("进程已结束!\n\n");elseprintf("进程结束失败!\n\n");break;case 3:output();break;case 0:return ;default:printf("对不起!您的选择有误!请重新选择!\n\n");}}}void main(){init();menu();}实验总结基本分页的思想是比较简单的,而且实验前老师已经给出了一种可行的数据结构来存储程序中需要用到的数据,因此这个实验在构思上是没有多少难度的。
存储管理的基本模式
存储管理的基本模式存储管理是操作系统中重要的组成部分,负责管理计算机系统中的内存和外部存储器。
存储管理的基本模式主要有以下几种:1. 固定分区固定分区是一种简单的存储管理方式,它将内存分为若干个固定大小的区域,每个区域对应一个进程或任务。
每个进程只能在自己的区域中运行,不能访问其他区域的内存。
这种方式在一定程度上限制了进程的自由度,但由于实现简单,在一些简单系统中仍然被采用。
优点:实现简单,安全可靠。
缺点:分区数量固定,造成内存浪费,且不利于大内存程序的运行。
适用场景:适用于内存较小、任务数量固定的系统。
2. 动态分区动态分区是一种更为灵活的存储管理方式,它根据进程或任务的实际需要,动态地分配内存空间。
这种方式能够更好地利用内存资源,提高内存利用率。
优点:内存利用率高,适用于大内存程序。
缺点:实现相对复杂,需要操作系统进行更多的管理操作。
适用场景:适用于内存较大、任务数量不确定的系统。
3. 页式管理页式管理是一种将内存分为若干个页(page)的存储管理方式。
每个页的大小固定,可以存放一个进程或任务的一部分。
页式管理通过将程序分割成多个页面,实现了内存的离散分配。
优点:内存利用率高,可以实现多道程序运行。
缺点:实现相对复杂,需要处理页面置换和缺页等问题。
适用场景:适用于内存较大、任务数量不确定的系统。
4. 段式管理段式管理将内存分为若干个段(segment),每个段的大小不固定,可以存放一个进程或任务的一部分。
段式管理通过将程序分割成多个段,实现了内存的逻辑分段。
优点:便于多道程序运行,可以实现分段保护和分段共享。
缺点:实现相对复杂,需要处理段之间的地址映射和保护等问题。
适用场景:适用于内存较大、任务数量不确定的系统。
5. 段页式管理段页式管理结合了页式管理和段式管理的优点,将内存分为若干个段,每个段又包含若干个页。
这种方式可以实现内存的逻辑分段和离散分配,同时提高了内存的利用率和多道程序运行能力。
基本分段存储管理方式
基本分段存储管理方式基本分段存储管理方式是计算机操作系统用来管理内存的一种方法。
通常将内存分成固定大小的若干段,每个段都有一个起始地址和一个长度,随着程序的运行,可以动态地将不同大小的进程加载到这些段中,从而优化内存使用,提高系统性能。
基本分段存储管理方式的实现过程大致分为三个步骤:操作系统将物理内存划分成若干固定大小的段,这些段称为物理段或实际段。
接着,操作系统为每个进程分配虚拟地址空间,并用一组相同的大小将其划分为若干虚拟段。
每个虚拟段的起始地址和长度都与实际段相对应,但它们不一定在物理空间上是连续的。
操作系统将进程的虚拟地址映射到实际的物理地址,以便进程能够访问内存。
基本分段存储管理方式有以下几个优点:1. 灵活性:基本分段存储管理方式可以用相对较少的内存空间来持久存储多个进程,这增加了系统的灵活性,使得操作系统能够同时运行多个进程,而不会导致内存溢出。
2. 内存利用率:基本分段存储管理方式允许操作系统根据每个进程的需求动态分配内存,从而提高内存利用率。
如果一个进程只需要几百KB的内存,而系统中的物理内存大大小于这个需求,那么只需要分配给它一个相应的虚拟段就可以了,这样就避免了浪费内存的情况。
3. 保护:基本分段存储管理方式可以通过在每个虚拟段中设置访问权限进行内存保护。
只允许进程访问它被授权访问的虚拟地址范围,而禁止它访问其他虚拟地址空间,从而增强系统的安全性。
基本分段存储管理方式也有以下几个缺点:1. 内部碎片:由于每个分段的大小是固定的,使得当进程只需要使用部分段时,其中未使用的部分会变成内部碎片。
这会浪费一些内存,降低内存利用率。
2. 外部碎片:当系统中有大量的小进程时,这些小进程可能会被分配到不同的分段中。
当一些分段中的进程被撤销时,这些空闲的小空间难以合并在一起,从而导致外部碎片的产生。
3. 上下文切换:由于每个进程的虚拟空间不一定是连续的,因此在进程切换时需要进行频繁的虚拟地址到物理地址的映射操作,这会增加系统的开销。
存储器内存管理--分段存储管理方式
存储器内存管理--分段存储管理⽅式
本⽂以32位操作系统为例来介绍存储器/内存管理--分页存储管理⽅式。
在此⽅式下,操作系统会将⽤户程序的地址(逻辑地址)空间分为若⼲个段,每个段定义⼀组逻辑信息。
例如程序段、⼦程序段、数据段、及堆段等,每个段也有⾃⼰的段号,每个段内都从0开始编制,并采⽤⼀段连续的地址空间,各段的长度并不⼀定相同。
虽然每个段内都分配了⼀段连续的地址空间,各个段之间则可以离散的分配,不需要连续。
分段管理⽅式中逻辑地址的地址结构
从该地址结构可以得知,程序允许有64K个段,每个段的最⼤长度位64KB。
段表
系统为每个进程都建⽴了⼀张段映射表,简称段表。
每个段表中有多个表项,每个表项记录了该段在内存中的起始地址(基址)和段的长度。
段表的作⽤同样是实现从逻辑地址到物理地址的转换。
地址变换机制
系统同样也设置了段表控制寄存器⽤于地址变换,其中存放着段表始址和段表长度,在进⾏地址映射前,操作系统⾸先会将段号与控制寄存器中的段表长度进⾏⽐较,判断时候越界,然后根据控制寄存器中的段表始址找到段表所在的位置,再根据段号找到基址,再加上位移量W便得到了实际的物理地址。
分页与分段存储管理
分页与分段存储管理
4.4 基本分段存储管理方式
4.4.1 分段存储管理方式的引入
分页与分段存储管理
引入分段存储管理方式, 主要是为了满足用户和程序员
1)
2) 信息共享
3) 信息保护
4)
5) 动态链接
分页与分段存储管理
4.4.2 分段系统的基本原理
1. 分段
分页与分段存储管理
0
作业空间 (MAIN)=0 段表
内存空间
0
3 0K 0 2 0K 0 1 5K 0
段号 段长 基址 (X)=1 0 1 2 (S)=3 3 3 0K 2 0K 4 0K 8 0K
(MAIN)=0 3 0K (X)=1 2 0K (D)=2 1 5K (S)=3 1 0K
4 0K
8 0K
(D)=2
1 5K 1 20 K 1 0K 1 50 K
分页与分段存储管理
第四章 存储器管理
4.1 程序的装入和链接
4.2 连续分配方式
4.3 基本分页存储管理方式
4.4 基本分段存储管理方式
上节回顾
1. 四种内存连续分配方式: 单一连续分配:
分页与分段存储管理
固定分区分配:
动态分区分配:FF、CF、BF分配算法 动态重定位分区分配:重定位寄存器 2. 基本分页 页与物理块 地址结构
分页与分段存储管理
4.3 基本分页存储管理方式
分页存储管理,是将一个进程的逻辑地址空间分成若干个大小 相等的片,称为页面或页,并为各页加以编号,从0开始,如 第0页、第1页等。 相应地,也把内存空间分成与页面相同大小的若干个存储块, 称为(物理)块或页框(frame), 也同样为它们加以编号,如0#块、 1 # 块等等。在为进程分配内存时,以块为单位将进程中的若 干个页分别装入到多个可以不相邻接的物理块中。
操作系统-分页存储管理方式
操作系统-分页存储管理方式操作系统分页存储管理方式在计算机操作系统中,分页存储管理方式是一种重要的内存管理技术。
它的出现和应用,极大地提高了计算机系统的内存使用效率和性能。
我们先来想象一下,如果没有分页存储管理方式,计算机在处理程序和数据时会面临怎样的情况。
假设我们的计算机内存就像一个大的房间,而程序和数据就像各种大小不一的家具。
如果没有一种有效的规划和安排方式,这些家具可能会随意摆放,导致空间浪费,甚至可能出现有些家具无法放进房间的情况。
这就是没有良好内存管理时可能出现的混乱局面。
那么,分页存储管理方式是如何解决这个问题的呢?简单来说,它就像是把这个大房间划分成了一个个大小相同的小格子。
在分页存储管理中,将内存空间划分为若干个固定大小的页框,同时将进程的逻辑地址空间也划分为同样大小的页。
页框和页的大小通常是相等的,比如常见的 4KB 大小。
这样一来,当程序要运行时,操作系统会将程序的页加载到内存的页框中。
比如说,一个程序有 100KB 的大小,按照 4KB 一页来划分,就可以分成 25 页。
当程序运行时,可能并不是所有的 25 页都需要同时加载到内存中,而是根据程序运行的实际情况,逐步加载需要的页。
这就大大提高了内存的利用率,因为不需要一次性为整个程序分配大量的连续内存空间。
分页存储管理方式还有一个重要的优点,那就是实现了虚拟内存。
虚拟内存使得计算机能够运行比实际物理内存更大的程序。
这是怎么做到的呢?当程序需要访问的页不在内存中时,操作系统会通过一定的机制,将需要的页从外存(如硬盘)加载到内存中,同时将暂时不用的页换出到外存。
这种页的换入换出是由操作系统自动完成的,对于用户程序来说是透明的。
用户感觉好像自己的程序拥有了无限大的内存空间,但实际上只是操作系统在背后巧妙地进行着内存的调度和管理。
为了有效地管理页的换入换出,操作系统通常会使用页表。
页表记录了每个页在内存中的位置信息。
当程序访问某个逻辑地址时,操作系统通过查询页表,将逻辑地址转换为物理地址,从而找到实际的数据所在的内存位置。
分页与分段存储管理
➢若采用二级页表,系统能支持的逻辑空间最多为多少?
➢在二级页表中,现有逻辑地址为542783,求该地址对应的 外层页号,外层页内地址和页内地址?
4.4 基本分段存储管理方式
4.4.1 分段存储管理方式的引入
引入分段存储管理方式, 主要是为了满足用户和程序员
由于进程的最后一页经常装不满一块而形成了不可利用的碎片, 称之为“页内碎片”。
2. 地址结构 分页地址中的地址结构如下:
31
12 11
0
页号P
位移量W
对某特定机器,其地址结构是一定的。若给定一个逻
辑地址空间中的地址为A,页面的大小为L,则页号P和页
内地址d可按下式求得:
P
INT
A L
d [ A]MODL
上节回顾
1. 四种内存连续分配方式: 单一连续分配: 固定分区分配: 动态分区分配:FF、CF、BF分配算法 动态重定位分区分配:重定位寄存器
2. 基本分页 页与物理块 地址结构
4.3 基本分页存储管理方式
分页存储管理,是将一个进程的逻辑地址空间分成若干个大小 相等的片,称为页面或页,并为各页加以编号,从0开始,如 第0页、第1页等。 相应地,也把内存空间分成与页面相同大小的若干个存储块, 称为(物理)块或页框(frame), 也同样为它们加以编号,如0#块、 1#块等等。在为进程分配内存时,以块为单位将进程中的若 干个页分别装入到多个可以不相邻接的物理块中。
4K
4K
8K
8K
10 K
12 K
(a)
段 号 (S) 段 内 页 号 (P ) 段 内 地 址 (W)
(b)
图 4-20 作业地址空间和地址结构
操作系统的基本分页存储管理方式
操作系统的基本分页存储管理方式操作系统中的分页存储管理是一种常见的内存管理方式,它将进程的地址空间划分为固定大小的页面,并将页面映射到物理内存的不同位置。
这种方式能够有效地管理内存资源,并提高系统的性能。
下面将详细介绍操作系统中的基本分页存储管理方式。
分页存储管理是将进程的内存划分为大小相等的固定大小的页面,与物理内存的页面大小相同。
通常,每个页面的大小为4KB或者8KB。
在分页存储管理中,每个进程的地址空间被划分为多个页面,每个页面都有一个唯一的页面号或索引。
这样,进程的地址空间可以通过页面号来访问。
在分页存储管理中,操作系统维护了一个页表,用于记录每个页面在物理内存中的位置。
页表中的每一项被称为页表项,它包含了页面号和物理内存地址之间的映射关系。
当一个进程访问或修改某个页面时,操作系统将根据页表查找页面在物理内存中的位置,并将该页面加载到内存中进行访问。
如果页面不在内存中,就会发生缺页中断,操作系统会将缺失的页面从硬盘上加载到内存,并更新页表。
分页存储管理方式的核心概念是页面的概念。
页面是一个连续的地址空间块,大小固定。
进程的地址空间被划分为多个页面,每个页面都有一个唯一的页面号。
页面的大小相同,这样能够简化内存管理和页面调度的工作。
页面之间是相互独立的,可以独立地加载和替换。
这种方式提供了更高的内存利用率和灵活性。
分页存储管理方式具有以下优点:1.内存利用率高:由于页面的大小固定,可以更好地利用内存空间。
如果一个进程的部分页面不用,可以将这些页面换出到磁盘上,从而腾出更多的内存空间给其他进程使用。
2.地址空间连续性:分页存储管理方式使得进程的地址空间在逻辑上是连续的。
每个页面的大小相同,页面之间没有空隙。
这样使得进程的地址空间更加规整和易于管理。
3.页面替换灵活:当物理内存不足时,操作系统可以通过页面替换算法将一些页面从内存中换出,从而为其他页面腾出空间。
由于页面的大小相同,可以更加灵活地选择被替换的页面。
(存储管理)01.分页式存储管理
(存储管理)01.分页式存储管理
将内存划分为若⼲个⼤⼩相等的分区,叫做块;将逻辑空间划分出与块⼤⼩⼀致的分区,叫做页。
作业运⾏时,通过地址重定位技术,实现页与块的对应。
这样就以页的⽅式来管理存储块,就叫分页式存储管理。
在分配存储块时,会根据作业的逻辑地址的⼤⼩计算所需要多少个存储块,然后查找空闲块并更新空闲块的状态为占⽤;回收存储块时,会将作业关联的所有空闲块的状态设置为空闲。
记录空闲块状态的⽅法有两种:位图法和链表法。
在分配存储块之后,就在页表中,增加页和块对应关系的记录;同理,回收存储块时,就会删除对应记录。
访问存储块时,就会根据逻辑地址的页号,在页表找到对应的块号,然后再通过块号计算出物理地址,找到对应的存储块。
如下图:
补充
页表:记录页号与块号对应关系的表,包含页号和块号两个字段。
逻辑地址:由 “页号” 和 “页内地址” 组成。
其中页内地址是通过页⼤⼩来决定。
例如:逻辑地址长度为 16 位,页⼤⼩是 1kb (⼆的⼗次幂),那么页内地址占低⼗位,⾼六位是页号。
如下:
在重定位存储块时,需要访问页表。
为了加快重定位,就会通过快表(联想存储器,记录常⽤的页号和块号的对应关系)来快速通过页号找到对应的块号。
但是如果不能通过快表找到对应的块号,那么就会按照查找页表的⽅式来完成重定位。
第四章 存储器管理(1-2)
物理地址空间
Load A data1
100
Load A 200
1100
Load A 1200
编译 连接
data1 3456 200 3456
地址映射
1200 3456 。 。
第四章 存 储 器 管 理
地址映射的方式
静态地址映射: 1)程序被装入内存时由操作系统的连接装入程序完成 程序的逻辑地址到内存地址的转换; 2)地址转换工作是在程序执行前由装入程序集中一次 完成。 假定程序装入内存的首地址为BR,程序地址为VR,内存 地址为MR,则地址映射按下式进行:MR=BR+VR
② 便于实现对目标模块的共享:将内存中的一个模块可 以连接到多个程序中。 ③ 要运行的程序都必须在装入时,全部连接调入内存。
第四章 存 储 器 管 理
3. 运行时动态链接(Run-time Dynamic Linking) 动态链接方式:将对某些模块的链接推迟到执行时才实施, 亦即,在执行过程中,当发现一个被调用模块尚未装 入内存时,立即由OS去找到该模块并将之装入内存, 把它链接到调用者模块上。特点如下: 特点:凡在执行过程中未被用到的目标模块,都不会被调 入内存和被链接到装入模块上,这样不仅可加快程序 的装入过程,而且可节省大量的内存空间。
硬件支持:在动态地址重定位机构中,有一个基地址寄存器BR和一 个程序地址寄存器VR,一个内存地址寄存器MR。
转换过程:MR=BR+VR
第四章 存 储 器 管 理
把程序装入起始地址为100的内存区
0 100
重定位寄存器 1000
…
MOV r1,[50]
0 1000 1100
… …
MOV r1பைடு நூலகம்[50]
计算机操作系统(第四版)第四章分页与分段存储管理
图中地址长度为32位,其中0~11位为页内地址, 12 ~ 31位为页号,那么块(页)的大小为212=4KB;逻 辑地址有220=1M页。Fra bibliotek思考题?
若给定一个逻辑地址空间中的地址为A,页面 大小为L,则页号P和页内地址W如何计算? P=INT[A/L] W=[A]MOD L
3.信息保护 信息保护是对相对完整意义的逻辑单位(段)进行保护。 4.动态链接 通常一个源程序经过编译后所形成的若干个目标程序, 还需再经过链接,形成可执行代码后才能运行,这种在装入 时进行的链接称为静态链接。动态链接是指在作业运行之前, 并不把几个目标程序段都链接起来,而是先将主程序对应的 目标程序装入内存并启动运行,当运行过程中又需要调用某 段时,再将该段(目标程序)调入内存并链接起来。所以, 动态链接是以段为基础的。 5.动态增长 在实际系统中,往往有些数据段会不断地增长,而事先 却无法知道数据段会增长到多大,分段存储管理方式可以较 好地解决这个问题。
3.地址变换机构
段表寄存器
段表始址 段表长度 TL
越界中断 ﹥
逻辑地址
段号S 1 位移量w 100
段号 0 1 2 3
段长SL 基址 15K 7K 8K 10K 40K 80K 120K 150K
物理地址 80k+100
物理地址:段的基址+段内地址(位移量)
为了实现从逻辑地址到物理地址的变换功能,系统 中设置了段表寄存器,用于存放段表始址和段表长 度。在进行地址变换时,系统将逻辑地址中的段号S 与段表长度TL进行比较。若 S≥TL,表示段号太大, 访问越界,于是产生越界中断信号;若未越界,则 根据段表的始址和该段的段号,计算出该段对应段 表项的位置,从中读出该段在内存中的起始地址, 然后再检查段内地址d是否超过该段的段长SL。若超 过,即 d≥SL,同样发出越界中断信号;若未越界, 则将该段的基址与段内地址w相加,得到要访问的内 存物理地址。
存储器内存管理--分页存储管理方式
存储器内存管理--分页存储管理⽅式本⽂以32位操作系统为例来介绍存储器/内存管理--分页存储管理⽅式。
在此⽅式下,操作系统会将⽤户程序的地址(逻辑地址)空间分为若⼲个固定⼤⼩区域,称为“页”或“页⾯”。
相应地,操作系统也会将内存空间(物理地址)划分为若⼲个物理块或页框,当然,页和块的⼤⼩应该相同,这样就可以将⼀个页存储在⼀个物理块中了。
页⾯和物理块两个概念 页⾯:在分页存储管理⽅式中,操作系统会将进程的逻辑地址空间分成若⼲个页,并加以编号,每⼀个编号代表⼀个页或者页⾯。
物理块:在内存的物理地址空间分成若⼲个块,也为每个块加以编号,每⼀个编号代表着⼀个物理块或者页框。
页⾯⼤⼩的选择 由于进程的最后⼀页通常是装不满的,从⽽形成了不可利⽤的碎⽚,这⾥称为“页内碎⽚”。
如果页/页⾯的⼤⼩选择过⼤,则会造成最后⼀页的页内碎⽚较⼤,内存利⽤率不⾼。
如果页/页⾯⼤⼩选择过⼩,则会造成进程的页表(下⾯将介绍)过长,页表将占⽤⼤量的内存,同样也会降低页⾯的换⼊换出的效率。
因此,页/页⾯的⼤⼩应该选择适中,通常为1--8KB。
分页管理⽅式中逻辑地址的地址结构 逻辑地址将分为两部分,第⼀部分为页号P,对应着所在的页/页⾯;第⼆部分为偏移量W,对应着所在页的页内地址。
上图中偏移量对应着低12位,所以每⼀个页/页⾯的⼤⼩为4KB,12--31位中共20位对应着页号的地址空间,所以地址空间最多允许有1M(1024*1024)个页。
以上是以4KB为页/页⾯⼤⼩的例⼦,其他页/页⾯⼤⼩可以⽤此⽅式类推。
若给定⼀个逻辑地址空间中的地址A,页⾯的⼤⼩为L,则可以计算出页号P和页内地址d,计算过程如下: P = INT [A/L], d = [A] MOD L;其中INT为取整,MOD为取余。
页表:实现从页号到物理块号的地址映射(转换) 所以在页表中有两项数据,页号和块号,页号和块号是⼀⼀对应的,操作系统通过页号,可以找到相应的物理地址的块号,实现了从逻辑地址到物理地址的转换。
ch4-4.3分页和4.4分段式存储管理
0
索引1(8)
索引2(6)
索引3(6)
偏移(12)
第一级
第二级
第三级
4K页面
4095
页表
多级页表结构的本质
• 多级不连续导致多级索引。 • 以二级页表为例,用户程序的页面不连续 存放,要有页面地址索引,该索引是进程 页表;进程页表又是不连续存放的多个页 表页,故页表页也要页表页地址索引,该 索引就是页目录。 • 页目录项是页表页的索引,而页表页项是 进程程序的页面索引。
4.3.5反臵页表(1)
逻辑地址
进程标识 页号 位移
物理地址
页框号 位移
进程标识 页号 特征位 链指针
哈希 函数
· ·
索引
哈希表
反臵页表
反臵页表及其地址转换
反臵页表(2)
• IPT是为内存中的每一个物理块 建立一个页表并按照块号排序, • 该表每个表项包含正在访问该 页框的进程标识、页号及特征 位,用来完成主存页框到访问进 程的页号、即物理地址到逻辑 地址的转换。
4.3 分页式存储管理
4.3.1 分页式存储管理的基本原理 4.3.2 相联存储器和快表 4.3.3 分页式存储空间的分配和去配 4.3.4 分页式存储空间的页面共享和 保护 4.3.5 多级页表 4.3.6 反臵页表
4.3.1 分页式存储管理 基本原理(1)
•为什么要引进分页技术? •基本原理 (1)页框 (2)页面 (3) 逻辑地址形式 (4) 页表和地址转换
多级页表的概念(2)
• 多级页表概念:页表和页面一样也进行 分页,内存仅存放当前使用的页表,暂 时不用部分放在磁盘上,待用到时再行 调进。 • 具体做法:把整个页表进行分页,分成 一张张小页表(称为页表页) ,小页表的 大小与页框相同,为进行索引查找,应 该为这些小页表建一张页目录表,其表 项指出小页表所在页框号及相关信息。
4.3分页存储管理方式
• 页表page table
系统为每个进程设置了一张页号到物理块号的映射表,称 为页表。页表项PTE包含页号和块号,但是实际只存储块号。
例题4-4:某分页系统页面大小为4KB,每个PTE占用4B, 若某进程大小为120MB,请计算回答: (1)每个页面可以存储几个PTE? (2)该进程的页表占用多少内存? (3)该进程的页表需要多少页面存储?
分析 • 逻辑地址有两个部分组成:页号和页内偏移地址。逻辑空
间有8 (23)页,说明页号需要3个二进制位描述,而每 页有1024(210)字节,说明页内偏移地址为10二进制位 描述,因此逻辑地址的有效位为3+10=13位。 • 因为物理地址与逻辑地址的页面大小相同,而物理存储块 为32(25)占5位,所以物理地址至少为5+10=15位
(2)逻辑地址2500对应的物理地址是多少?
(3)逻辑地址15ACH对应的物理地址是多少?
解答: (1)因为页面2KB=211,所以逻辑地址0~10为页内 地址,11~19为页号。
(2)页号P=2500 / 2048 = 1,页内地址d=2500 % 2048 = 452,查页表可知1号页对应的块号为3,则 实际物理地址 = 3×2048 + 452 = 6569
– 页号P – 页内位移量d(又称为页内地址)
页面的大小决定页内地址的位数,页号位数决定了逻辑地址 空间中页面的总数。
图4-8 分页系统逻辑地址结构示意图
问题:如果逻辑地址长度为16位,页面大小为1KB 时,请给出逻辑地址的构成。
• 页号p和页内地址d的计算公式
P = INT [ A/L ] 向下取整数 d = [ A ] mod L 取余
两级和多级页表
页号
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第四讲存储器管理主讲教师:夏辉丽
离散分配方式概述:
•基本思想:一个用户程序(进程)直接分散地装入到很多不相邻接的分区中。
•两种形式:
分页存储管理方式(离散基本单位:页)
分段存储管理方式(离散基本单位:段)
4.4 基本分页存储管理方式
4.4.1 页面与页表
4.4.2 地址变换机构
4.4.3 两级和多级页表
4.4.1 页面与页表
1. 页面:
•等分内存空间:每等份称为物理块,编号:0 1
2 3 4……
•等分逻辑空间:划分为与物理块大小相同的页
面,编号为0 1 2 3 4 ……
•页面大小:2n Bytes ,大小适中、通常为
512B~8KB
0 1 2 3 4 5 6 7 …
11 10 内存
第0页 第1页 第2页 第3页 第4页 第5页 第6页
用户程序
第1页
(页大小2K )
3号物理块
(块大小2K )
以 块 为 单 位
以 页 为 单 位
第6页
7号物理块
4.4.1 页面与页表
0 1 2
3
4 5 6 7 8 9 10 11
分配原则:1页→1块;分配给程序的物理块不必相邻接
4.4.1 页面与页表
2. 地址结构:
31 12 11 0
页号P 位移量W(页内地址d)
4K 1M
每页大小为 B,逻辑空间最多允许有个页面
212 220
若已知一个逻辑地址空间中的地址为A ,页面大小为L ,则页号P 和页内地址d 是多少? P = d = 例如:某系统的页面大小为1KB ,逻辑地址
A=2170B ,则求得P= d= 。
2 122 INT [A/L] [A] MOD L
2. 地址结构:
4.4.1 页面与页表
INT[2170/1K]
2170 MOD 1K
4.4.1 页面与页表
3. 页表:
•系统为每个进程建立一张页表。
•作用:实现从页号到物理块号的地址映射。
•在页表中,每页均对应一页表项,记录页号、
块号的对应关系,及存取控制字段。
11
内存
第0页 第1页 第2页 第3页 第4页 第5页 第6页
用户程序
块号 页号 10 5 11
6
9 4 5 3 3 2 7 1 2 0 页表 第0页 第1页 第2页 第3页 第4页 第5页 第6页 3. 页表:
4.4.1 页面与页表
0 1
2
3
4
5
6
7
8
9
4.4.2 地址变换机构
▪基本任务:
实现从逻辑地址到物理地址的映射。
逻辑地址物理地址
页号P 页内地址d 块号b 块内地址d ▪两种形式:
1.基本的地址变换机构
2.具有快表的地址变换机构
1. 基本地址变换机构:
4.4.2 地址变换机构
①
① 自动将逻辑地址分为页号和页内地址
1. 基本地址变换机构:
4.4.2 地址变换机构
① ②
①自动将逻辑地址分为页号和页内地址 ② 进行比较,若页号≥页表长度,则越界中断
1. 基本地址变换机构:
4.4.2 地址变换机构
① ②
③
页表始址+页号×页表项长度 ② 进行比较,若页号≥页表长度,则越界中断 ③ 以页号为索引,查询该表项在页表中的位置
1. 基本地址变换机构:
4.4.2 地址变换机构
①
②
③
页表始址+页号×页表项长度
④
①自动将逻辑地址分为页号和页内地址
②进行比较,若页号≥页表长度,则越界中断③以页号为索引,查询该表项在页表中的位置④将该页对应的物理块号送入物理地址寄存器
1. 基本地址变换机构:
4.4.2 地址变换机构
①
②
③
页表始址+页号×页表项长度
④
⑤
①自动将逻辑地址分为页号和页内地址
②进行比较,若页号≥页表长度,则越界中断③以页号为索引,查询该表项在页表中的位置④将该页对应的物理块号送入物理地址寄存器⑤将页内地址送入物理地址寄存器
【课堂练习】:已知某分页系统,主存容量为64k ,页面大小为1k ,对一个4页大的作业,第0、1、2、3页分别被分配到内存的2、4、6、8块中。
请将十进制的逻辑地址2200、5000转换成物理地址。
(1)2200/1K ,得到页号为2,页内地址152。
因对应的物理块号为6,故物理地址为6*1k+152=6296
(2)5000/1K ,得到页号为4,页内地址904。
因为页号等于页表长度,故产生越界中断。
4.4.2 地址变换机构
解:
4.4.2 地址变换机构
1. 基本的地址变换机构:
问题:
由于页表存放在内存中,CPU每取得一个数据,
均需要两次访问内存。
第一次:访问页表,形成物理地址;
第二次:从物理地址中获得数据
4.4.2 地址变换机构
2. 具有快表的地址变换机构:
增设一个具有并行查询能力的高速缓冲寄存器——快表(联想寄存器)
空间大小:几K到几百K ,只含有部分页表项(16~512个)
4.4.2 地址变换机构
2. 具有快表的地址变换机构: ②若有匹配页号,则直接读出对应的物理块号。
③无匹配页号,再访
问页表进行查询④将刚访问过的页表项存入块表。
①
① 将页号与快表中的所有页号进行比较。
4.4.2 地址变换机构
2. 具有快表的地址变换机构: ①将页号与快表中的所有页号进行比较。
② 若有匹配页号,则直
接读出对应的物理块号。
①
②
4.4.2 地址变换机构
2. 具有快表的地址变换机构: ①将页号与快表中的所有页号进行比较。
② 若有匹配页号,则直接读出对应的物理块号。
③无匹配页号,再访问页表进行查询
①
②
③
4.4.3 两级和多级页表
若逻辑地址结构规定如下:
31 12 11 0
页号P 位移量W(页内地址d) 问题:每个进程仅页表项就占1MB的连续内存空间
解决思路:将大页表进行分页,每个页面离散的存放在不同物理块中。
1. 两级页表:
4.4.3 两级和多级页表
为内存中离散分配的页表分页再建立一张外层
页表,每个页表项记录页表分页的物理块号。
逻辑地址结构描述如下:
1. 两级页表:
4.4.3 两级和多级页表
4.4.3 两级和多级页表
1. 两级页表:
地址变换机构如下:
4.4.3 两级和多级页表
2. 多级页表:
沿两级页表的思路继续分页,以处理更大
的页表。
本节小结
1.页面与页表
2.地址变换机构
3.两级和多级页表
思考
1. 什么是分页?页表的作用是什么?
2. 实现分页存储原理,需要哪些硬件支持?
3. 请简述基本页式存储管理的地址变换过程。
4. 在页式存储管理中,为什么引入快表?
谢谢!。