4-3 基本分页存储管理方式
- 格式:pdf
- 大小:550.90 KB
- 文档页数:29
说明基本分页存储管理方式在计算机系统中,存储管理是一个重要的部分,其功能是对计算机系统中的数据进行合理的管理与分配。
分页存储管理方式是其中的一种常用方式。
分页存储管理方式指的是将物理存储空间划分为大小相等的页框,将逻辑存储空间按照页的大小来划分,将逻辑地址空间中的每个页面映射到物理地址空间中的一个页框上。
这样就可以实现逻辑地址与物理地址的映射。
在分页存储管理方式中,每个进程都有自己的页表,用于记录该进程的逻辑地址空间与物理地址空间之间的映射关系。
当进程需要访问某个逻辑地址时,通过查找页表,找到对应的物理地址。
如果该页不在内存中,则需要从磁盘中读取该页,并将其放置到空闲的页框中。
分页存储管理方式的优点在于可以充分利用内存空间,提高内存利用率。
同时,由于每个进程有自己的页表,各个进程之间的地址空间是独立的,可以有效地防止进程间的地址冲突。
此外,由于采用了分页的方式,可以实现对内存中的数据进行快速查找和访问。
然而,分页存储管理方式也存在一些缺点。
首先,由于需要维护每个进程的页表,对于系统的管理与维护带来了一定的复杂度。
其次,由于每个页都需要记录页表信息,因此会占用一定的空间。
此外,由于每次访问都需要进行地址映射,会带来一定的时间开销。
为了克服分页存储管理方式的缺点,还可以采用其他的存储管理方式,如分段存储管理方式、虚拟存储管理方式等。
分段存储管理方式将逻辑地址空间划分为若干个段,每个段可以有不同的长度,不同的段可以放置在不同的物理地址空间中。
虚拟存储管理方式则将整个逻辑地址空间划分为若干个页面,每个页面可以在内存中或者磁盘中进行存储,当进程需要访问某个页面时,会先判断该页面是否在内存中,如果在则直接访问,否则从磁盘中调入并放置在内存中。
分页存储管理方式是一种常用的存储管理方式,可以充分利用内存空间,提高内存利用率。
但是,由于需要维护每个进程的页表,会带来一定的管理与维护复杂度。
因此,在实际应用中,需要根据具体情况选择合适的存储管理方式。
基本分页存储管理方式和虚拟存储方式
基本分页存储管理方式是一种将主存储器划分为固定大小的页框和相同大小的页的方法。
程序在执行时被划分为固定大小的页,而主存储器划分为相同大小的页框。
当程序执行需要的某个页时,该页从辅助存储器加载到一个空闲的页框中,程序就可以继续执行。
虚拟存储方式是一种将程序按逻辑地址划分为多个大小固定的逻辑块,而主存储器被划分为固定大小的块。
逻辑块的大小可以不同于物理块的大小。
当程序执行需要的某个逻辑块时,该块可以从辅助存储器加载到主存储器中的任意一个空闲块中。
区别:
1.分页方式划分的是主存储器中的页框和程序的页,而虚拟存储方式划分的是主存储器中的块和程序的逻辑块。
2.分页方式中,页的大小是固定的,而虚拟存储方式中,逻辑块的大小可以不同于物理块的大小。
3.分页方式中,程序执行时需要的页会被加载到主存储器中的任意一个空闲页框中,而虚拟存储方式中,逻辑块会被加载到主存储器中的任意一个空闲块中。
综上所述,基本分页存储管理方式和虚拟存储方式都是一种将程序按组块管理的方法,但在具体的实现细节和块的大小上有所不同。
基本分页存储管理实验目的连续内存分配方式会形成许多“碎片”,虽然可以通过“紧凑”方法将许多碎片拼接成可用的大块空间,但须为之付出很大开销。
如果允许将一个进程直接分散地装入到许多不相邻接的分区中,则无需再进行“紧凑”。
基于这一思想而产生了离散分配方式。
如果离散分配的基本单位是页,则称为分页存储管理方式;如果离散分配的基本单位是段,则称为分段存储管理方式。
在分页存储管理方式中,如果不具备页面兑换功能,则称为基本的分页存储管理方式,或称为纯分页存储管理方式,它不具备支持虚拟存储器的功能,它要求把每个作业全部装入内存后方能运行。
本实验通过程序模拟操作系统的基本分页存储管理方式,进一步理解这一内存分配方式的原理和特点,加深对理论知识的掌握。
实验要求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便得到了实际的物理地址。
操作系统-分页存储管理方式操作系统分页存储管理方式在计算机操作系统中,分页存储管理方式是一种重要的内存管理技术。
它的出现和应用,极大地提高了计算机系统的内存使用效率和性能。
我们先来想象一下,如果没有分页存储管理方式,计算机在处理程序和数据时会面临怎样的情况。
假设我们的计算机内存就像一个大的房间,而程序和数据就像各种大小不一的家具。
如果没有一种有效的规划和安排方式,这些家具可能会随意摆放,导致空间浪费,甚至可能出现有些家具无法放进房间的情况。
这就是没有良好内存管理时可能出现的混乱局面。
那么,分页存储管理方式是如何解决这个问题的呢?简单来说,它就像是把这个大房间划分成了一个个大小相同的小格子。
在分页存储管理中,将内存空间划分为若干个固定大小的页框,同时将进程的逻辑地址空间也划分为同样大小的页。
页框和页的大小通常是相等的,比如常见的 4KB 大小。
这样一来,当程序要运行时,操作系统会将程序的页加载到内存的页框中。
比如说,一个程序有 100KB 的大小,按照 4KB 一页来划分,就可以分成 25 页。
当程序运行时,可能并不是所有的 25 页都需要同时加载到内存中,而是根据程序运行的实际情况,逐步加载需要的页。
这就大大提高了内存的利用率,因为不需要一次性为整个程序分配大量的连续内存空间。
分页存储管理方式还有一个重要的优点,那就是实现了虚拟内存。
虚拟内存使得计算机能够运行比实际物理内存更大的程序。
这是怎么做到的呢?当程序需要访问的页不在内存中时,操作系统会通过一定的机制,将需要的页从外存(如硬盘)加载到内存中,同时将暂时不用的页换出到外存。
这种页的换入换出是由操作系统自动完成的,对于用户程序来说是透明的。
用户感觉好像自己的程序拥有了无限大的内存空间,但实际上只是操作系统在背后巧妙地进行着内存的调度和管理。
为了有效地管理页的换入换出,操作系统通常会使用页表。
页表记录了每个页在内存中的位置信息。
当程序访问某个逻辑地址时,操作系统通过查询页表,将逻辑地址转换为物理地址,从而找到实际的数据所在的内存位置。
操作系统的基本分页存储管理方式操作系统中的分页存储管理是一种常见的内存管理方式,它将进程的地址空间划分为固定大小的页面,并将页面映射到物理内存的不同位置。
这种方式能够有效地管理内存资源,并提高系统的性能。
下面将详细介绍操作系统中的基本分页存储管理方式。
分页存储管理是将进程的内存划分为大小相等的固定大小的页面,与物理内存的页面大小相同。
通常,每个页面的大小为4KB或者8KB。
在分页存储管理中,每个进程的地址空间被划分为多个页面,每个页面都有一个唯一的页面号或索引。
这样,进程的地址空间可以通过页面号来访问。
在分页存储管理中,操作系统维护了一个页表,用于记录每个页面在物理内存中的位置。
页表中的每一项被称为页表项,它包含了页面号和物理内存地址之间的映射关系。
当一个进程访问或修改某个页面时,操作系统将根据页表查找页面在物理内存中的位置,并将该页面加载到内存中进行访问。
如果页面不在内存中,就会发生缺页中断,操作系统会将缺失的页面从硬盘上加载到内存,并更新页表。
分页存储管理方式的核心概念是页面的概念。
页面是一个连续的地址空间块,大小固定。
进程的地址空间被划分为多个页面,每个页面都有一个唯一的页面号。
页面的大小相同,这样能够简化内存管理和页面调度的工作。
页面之间是相互独立的,可以独立地加载和替换。
这种方式提供了更高的内存利用率和灵活性。
分页存储管理方式具有以下优点:1.内存利用率高:由于页面的大小固定,可以更好地利用内存空间。
如果一个进程的部分页面不用,可以将这些页面换出到磁盘上,从而腾出更多的内存空间给其他进程使用。
2.地址空间连续性:分页存储管理方式使得进程的地址空间在逻辑上是连续的。
每个页面的大小相同,页面之间没有空隙。
这样使得进程的地址空间更加规整和易于管理。
3.页面替换灵活:当物理内存不足时,操作系统可以通过页面替换算法将一些页面从内存中换出,从而为其他页面腾出空间。
由于页面的大小相同,可以更加灵活地选择被替换的页面。
(存储管理)01.分页式存储管理
将内存划分为若⼲个⼤⼩相等的分区,叫做块;将逻辑空间划分出与块⼤⼩⼀致的分区,叫做页。
作业运⾏时,通过地址重定位技术,实现页与块的对应。
这样就以页的⽅式来管理存储块,就叫分页式存储管理。
在分配存储块时,会根据作业的逻辑地址的⼤⼩计算所需要多少个存储块,然后查找空闲块并更新空闲块的状态为占⽤;回收存储块时,会将作业关联的所有空闲块的状态设置为空闲。
记录空闲块状态的⽅法有两种:位图法和链表法。
在分配存储块之后,就在页表中,增加页和块对应关系的记录;同理,回收存储块时,就会删除对应记录。
访问存储块时,就会根据逻辑地址的页号,在页表找到对应的块号,然后再通过块号计算出物理地址,找到对应的存储块。
如下图:
补充
页表:记录页号与块号对应关系的表,包含页号和块号两个字段。
逻辑地址:由 “页号” 和 “页内地址” 组成。
其中页内地址是通过页⼤⼩来决定。
例如:逻辑地址长度为 16 位,页⼤⼩是 1kb (⼆的⼗次幂),那么页内地址占低⼗位,⾼六位是页号。
如下:
在重定位存储块时,需要访问页表。
为了加快重定位,就会通过快表(联想存储器,记录常⽤的页号和块号的对应关系)来快速通过页号找到对应的块号。
但是如果不能通过快表找到对应的块号,那么就会按照查找页表的⽅式来完成重定位。
存储器内存管理--分页存储管理⽅式本⽂以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为取余。
页表:实现从页号到物理块号的地址映射(转换) 所以在页表中有两项数据,页号和块号,页号和块号是⼀⼀对应的,操作系统通过页号,可以找到相应的物理地址的块号,实现了从逻辑地址到物理地址的转换。
第四讲存储器管理主讲教师:夏辉丽
离散分配方式概述:
•基本思想:一个用户程序(进程)直接分散地装入到很多不相邻接的分区中。
•两种形式:
分页存储管理方式(离散基本单位:页)
分段存储管理方式(离散基本单位:段)
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. 在页式存储管理中,为什么引入快表?
谢谢!。