操作系统课设——三种存储管理方式的地址换算

合集下载

操作系统 课程实验-实验四页式虚拟存储管理中地址转换和缺页中断

操作系统 课程实验-实验四页式虚拟存储管理中地址转换和缺页中断

实验四页式虚拟存储管理中地址转换和缺页中断一、实验目的深入了解页式存储管理如何实现地址转换;进一步认识页式虚拟存储管理中如何处理缺页中断。

二、实验预备知识页式存储管理中地址转换的方法;页式虚拟存储的缺页中断处理方法。

三、实验内容编写程序完成页式虚拟存储管理中地址转换过程和模拟缺页中断的处理。

实验具体包括:首先对给定的地址进行地址转换工作,若发生缺页则先进行缺页中断处理,然后再进行地址转换;最后编写主函数对所做工作进行测试。

假定主存64KB,每个主存块1024字节,作业最大支持到64KB,系统中每个作业分得主存块4块。

四、提示与讲解页式存储管理中地址转换过程很简单,假定主存块的大小为2n字节,主存大小为2m'字节和逻辑地址m位,则进行地址转换时,首先从逻辑地址中的高m-n位中取得页号,然后根据页号查页表,得到块号,并将块号放入物理地址的高m'-n位,最后从逻辑地址中取得低n位放入物理地址的低n位就得到了物理地址,过程如图6所示。

逻辑地址图6 页式存储管理系统地址转换示意图地址转换是由硬件完成的,实验中使用软件程序模拟地址转换过程,模拟地址转换的流程如图7所示(实验中假定主存64KB,每个主存块1024字节,即n=10,m'=16,物理地址中块号6位、块内地址10位;作业最大64KB,即m=16,逻辑地址中页号6位、页内地址10位)。

在页式虚拟存储管理方式中,作业信息作为副本放在磁盘上,作业执行时仅把作业信息的部分页面装入主存储器,作业执行时若访问的页面在主存中,则按上述方式进行地址转换,若访问的页面不在主存中,则产生一个“缺页中断”,由操作系统把当前所需的页面装入主存储器后,再次执行时才可以按上述方法进行地址转换。

页式虚拟存储管理方式中页表除页号和该页对应的主存块号外,至少还要包括存在标志(该页是否在主存),磁盘位置(该页的副本在磁盘上的位置)和修改标志(该页是否修改过)。

动态分区存储管理中地址转换

动态分区存储管理中地址转换

课程设计题目动态分区存储管理中地址转换学院计算机科学与技术学院专业计算机科学与技术班级0706 班姓名孙禹指导教师吕淑琴2010 年01 月28 日目录课程设计任务书 (1)一设计目的 (2)二问题描述 (2)三功能描述及分析 (2)四关键技术与方法 (3)4.1动态分区分配 (3)4.1.1动态分区基本思想 (3)4.1.2分区分配中的数据结构 (3)4.1.3动态分区分配算法 (4)4.1.4内存的回收 (4)4.2动态分区重定位 (5)4.2.1重定位的定义 (5)4.2.2动态重定位的实现 (5)4.2.3动态重定位分区分配算法 (6)4.3内存信息的保护 (6)4.3.1上界/下界寄存器 (6)4.3.2基址/限长寄存器 (6)4.4内存地址转换 (6)4.4.1逻辑地址 (6)4.4.2物理地址 (6)4.4.3地址映射 (7)五需求分析、数据结构及模块说明 (7)5.1需求分析 (7)5.2数据结构 (7)5.3模块说明 (8)5.4主要算法框图 (8)5.4.1最先适应法设计框图 (8)5.4.2进程的删除与回收框图 (9)5.4.3地址转换程序框图 (9)六源程序的主要部分(伪代码) (10)6.1有关内存分配算法 (10)6.2有关内存删除回收函数 (12)6.3有关地址转换函数 (14)七测试用例、运行结果与运行情况分析 (15)7.1用户界面 (15)7.2输入报错提醒 (15)7.3初始分配内存 (16)7.4 内存的删除与回收 (16)7.5用最先适应法分配接下来的内存 (16)7.6地址转换 (17)7.6.1输入合法的逻辑地址 (17)7.6.2输入非法的逻辑地址 (17)八自我评价与总结 (18)九致谢 (19)十参考文献 (19)本科生课程设计成绩评定表 (20)课程设计任务书学生姓名:孙禹专业班级:计算机0706 班指导教师:吕淑琴工作单位:计算机科学与技术学院题目:模拟设计动态分区存储管理中地址转换初始条件:1.预备内容:阅读操作系统的内存管理章节内容,理解动态分区的思想,并体会动态分区分配主存的过程。

计算机操作系统(第四版)1-8章-课后答案(全)

计算机操作系统(第四版)1-8章-课后答案(全)

计算机操作系统(第四版)1-8章-课后答案(全)第四版计算机操作系统课后答案第一章1. 操作系统的定义操作系统是一种软件,它管理着计算机系统的硬件和软件资源,并为用户和应用程序提供接口,以方便他们的使用。

2. 操作系统的功能操作系统具有以下功能:- 进程管理:负责创建、执行和终止进程,并管理它们的资源分配。

- 存储管理:管理计算机系统的内存资源,包括内存分配、虚拟内存和页面置换等。

- 文件系统管理:管理计算机系统中的文件和文件夹,包括文件的存储、读写和保护等。

- 设备管理:负责管理计算机系统中的各种设备,如打印机、键盘和鼠标等。

- 用户接口:提供用户与计算机系统进行交互的接口,如命令行界面和图形用户界面。

3. 操作系统的类型操作系统可以分为以下类型:- 批处理操作系统:按照一系列预先定义的指令集来运行任务。

- 分时操作系统:多个用户可以同时使用计算机系统。

- 实时操作系统:对任务的响应时间要求非常高,用于控制系统和嵌入式系统。

- 网络操作系统:支持多台计算机之间的通信和资源共享。

- 分布式操作系统:在多台计算机上分布式地管理和调度任务。

第二章1. 进程与线程的区别进程是计算机系统中正在运行的程序实例,而线程是进程内的一个执行单元。

进程拥有独立的地址空间和资源,而线程共享进程的地址空间和资源。

多个线程可以在同一进程内并发执行,从而提高系统的效率和资源利用率。

2. 进程的状态转换进程可以处于以下状态:- 创建状态:进程正在被创建。

- 就绪状态:进程准备好执行,等待分配CPU资源。

- 运行状态:进程占用CPU资源执行。

- 阻塞状态:进程等待某种事件发生。

- 终止状态:进程完成执行或被终止。

3. 进程调度算法操作系统使用进程调度算法来决定哪个进程应该被执行。

常见的调度算法有:- 先来先服务(FCFS)调度算法:按照进程到达的顺序进行调度。

- 最短作业优先(SJF)调度算法:选择运行时间最短的进程进行调度。

操作系统第5章

操作系统第5章

黄志华制作 版权所有
第5章 存储管理 §5.4 页式管理
2 静态分页(地址转换) 内存的速度与CPU的速度是数量级的差距,如果真是这样处 理, CPU的速度毫无意义。这个问题要如何解决? 第一 在CPU和内存之间设置高速缓存,常称为Cache。 程序运行过程中总是把常用的部分先从内存装入到Cache 中,使得程序运行过程中绝大多数时候仅直接访问 Cache,只在Cache中没有所需内容时才从内存中调入到 Cache。 第二 设置专门的硬件保存请求表、页表等数据结构,并由 专门的硬件进行地址转换,使得地址转换能够快速完成。 因此,实现某个内存管理方法必须有硬件的支持。
第5章 存储管理 §5.1 存储管理的功能
1 虚拟存储器 物理内存是实际存在的存储器,虚拟存储器以物理内存为基础, 由操作系统支持,进程所拥有,其大小与物理内存的大小没有直接联 系。 2 地址变换 由于编译链接时无法确定程序会被装入到内存的什么位置上运 行,编译链接形成的可执行程序中所有的地址都是虚拟存储器中的相 对地址或称逻辑地址,不是实际的物理地址。进程运行时,必须由操 作系统转换为物理地址。
帧号 2 3 8
黄志华制作 版权所有
第5章 存储管理 §5.4 页式管理
2 静态分页(地址转换) 804857f: call 8048568 上面是一条指令的例子。为了执行这条指令需要做两次地址转 换,而每次地址转换需要以下步骤: 第一步:由逻辑地址求出页号和页内地址。(如果从内存取逻 辑地址,那么需要访问一次内存) 第二步:查找请求表找到该进程对应的页表。(如果请求表保 存在内存中,又需要访问一次内存) 第三步:查找页表得到对应的帧号。(如果页表保存在内存 中,又要访问一次内存) 第四步:计算物理地址 物理地址=页内地址+帧号*帧长(如果指令或数据仍然在内存 中,还得再次访问内存)

考研操作系统-存储管理(二)

考研操作系统-存储管理(二)

考研操作系统-存储管理(二)(总分:108.00,做题时间:90分钟)一、单项选择题(总题数:34,分数:68.00)1.对主存储器的访问,是( )。

A.以页(块)或段为单位B.以字节或字为单位C.随存储器的管理方案不同而异D.以用户的逻辑记录为单位A.B. √C.D.本题考查对主存的访问,不是对主存的分配。

主存的编址以字节为单位,对主存的访问也是以字节为单位。

因此本题选择B。

2.在虚拟内存管理中,地址变换机构将逻辑地址变换为物理地址,形成该逻辑地址的阶段是( )。

A.编辑 B.编译 C.链接 D.装载A.B. √C.D.编译过程指编译程序将用护源代码编译成目标模块。

源地址编译成目标程序时,会形成逻辑地址。

因此本题选择B。

3.把作业空间中使用的逻辑地址变换为内存中的物理地址的过程称为( )。

A.加载 B.重定位 C.物理化 D.逻辑化A.B. √C.D.本题考查重定位的概念。

由于作业装入内存时分配的内存空间与作业的地址空间是不一致的。

因此在作业装入或执行时,不对有关逻辑地址部分进行相应的修改,会导致错误的结果。

这种将作业的逻辑地址变换为物理地址的过程称为“地址重定位”。

因此本题选择B。

4.为了保证一个程序中主存中改变了存放位置之后仍能正常执行,则对主存空间应采用( )技术。

A.静态重定位 B.动态重定位 C.动态分配 D.静态分配A.B. √C.D.本题考查重定位的相关概念,而不是内存分配方式,所以首先排除C和D选项。

静态重定位中,地址变换通常是在装入时一次性完成,之后地址都不再改变,称为静态重定位。

动态重定位采用动态运行时装入方式,可以保证一个程序在主存中改变了存放位置后仍然能正确执行。

因此本题选择B。

5.在存储管理中采用交换与覆盖技术,其目的是( )。

A.从物理上扩充内存 B.实现主存共享C.节省存储空间 D.提高内存利用率A.B.C.D. √本题考查交换与覆盖技术的基本概念。

采用交换与覆盖技术不会扩充物理内存,可以提高内存利用率。

《计算机操作系统》课件第4章

《计算机操作系统》课件第4章
18
第四章 存 储 器 管 理
3. 运行时动态链接(Run-time Dynamic Linking) 在许多情况下,应用程序在运行时,每次要运行的模块 可能是不相同的。但由于事先无法知道本次要运行哪些模块, 故只能是将所有可能要运行到的模块全部都装入内存,并在 装入时全部链接在一起。显然这是低效的,因为往往会有部 分目标模块根本就不运行。比较典型的例子是作为错误处理 用的目标模块,如果程序在整个运行过程中都不出现错误, 则显然就不会用到该模块。
2
第四章 存 储 器 管 理
4.1.1 多层结构的存储器系统 1. 存储器的多层结构 对于通用计算机而言,存储层次至少应具有三级:最高
层为CPU寄存器,中间为主存,最底层是辅存。在较高档的 计算机中,还可以根据具体的功能细分为寄存器、高速缓存、 主存储器、磁盘缓存、固定磁盘、可移动存储介质等6层。 如图4-1所示。
19
第四章 存 储 器 管 理
4.3 连续分配存储管理方式
4.3.1 单一连续分配 在单道程序环境下,当时的存储器管理方式是把内存分
为系统区和用户区两部分,系统区仅提供给OS使用,它通常 是放在内存的低址部分。而在用户区内存中,仅装有一道用 户程序,即整个内存的用户空间由该程序独占。这样的存储 器分配方式被称为单一连续分配方式。
9
第四章 存 储 器 管 理
4.2 程序的装入和链接
用户程序要在系统中运行,必须先将它装入内存,然后 再将其转变为一个可以执行的程序,通常都要经过以下几个 步骤:
(1) 编译,由编译程序(Compiler)对用户源程序进行编译, 形成若干个目标模块(Object Module);
(2) 链接,由链接程序(Linker)将编译后形成的一组目标 模块以及它们所需要的库函数链接在一起,形成一个完整的 装入模块(Load Module);

《操作系统》课件(五)页式存储管理

《操作系统》课件(五)页式存储管理

段的共享和保护
共享:在不同用户的段表中添入相同的 段表表项。
保护:在段表中添加一个保护位。 思 考:为什么段式存储管理比页式存储
管理更容易实现共享和保护?
段式和页式的问题和优点
页式:解决了碎片问题。但不便于用户作业 的共享和保护。由于用户调入的页可能只用 到其中的一部分,因此系统的效率不高。
210=1024,25=32
(2)根据给定的逻辑地址得到页号和页内地址。
035E(H)=(0000001101011110)2 从左边 数10位为页内地址,剩余为页号。页号为0。
(3)根据页号查页表,得到块号为5。
(4)将块号与块内地址组合为物理地址:
01011101011110=175E(H)
页表的实现—快表
块号
5 12
保护位
R WR
5
5
5
5
5
用户1
用户2
用户3
页式虚拟存储技术
虚拟存储器:内存扩充技术,为用户提供一 个比实际内存大得多的内存空间。
实现虚拟的三个三个条件;
程序中的哪些页已经加载内存。 当要访问的页不在内存时,如何将其掉如内存? 若此时内存空间已满,如何选择换出的页?
页式虚拟的基本原理:加载作业时,只加载 那些最活跃的页,其余的页需要时再加载。 “请求调页技术”和“预调页技术”。
从上述地址变换过程可以看出:CPU每取一条 指令或数据,都必须经过页表。
因此,页表的每一个表项都是一个动态重定位 机构。
如何实现页表,将影响系统的效率。 方式:
硬件实现:用寄存器组。但代价太高,特别是内存 很大时,是不可能的。
软件实现:将页表放在内存中。每取一条指令,要 两次访问内存。

《编程演示三种存储管理方式的地址换算过程》实验报告

《编程演示三种存储管理方式的地址换算过程》实验报告

内师大计算机与信息工程学院《操作系统》课程设计报告1.设计任务编程演示三种存储管理方式的地址换算过程2 设计的功能目标1、分页方式的地址换算2、分段方式的地址换算3、段页式的地址换算3 设计的思想、方法和技术(含数据结构、算法)实验要求演示分页方式的地址换算,分段方式的地址换算,段页式的地址换算。

1.分页方式通过自定义的逻辑地址算出页号与页内地址,页号=逻辑地址/页面大小,业内地址=逻辑地址%页面大小,然后通过页表来实现向物理地址的转换。

物理地址=块号*页面大小+页内地址2.分段方式通过段号和段内地址得到物理地址。

物理地址=段首地址+段内地址,段首地址根据段号找到,段号和逻辑地址自定义3.段页式通过段号得到页表首地址,通过页号得到块号,进而得到物理地址。

物理地址=页表首地址+块号*页面长度+页内地址,通过段号找到页表首地址,通过页号找到块号,其中逻辑地址段号,页号,页内地址自定义。

4 设计的主要代码及注释分页式部分:int page(int A,int L){int pl,pa;printf("int luo ji di zhi:");scanf("%d",&pl);printf("int ye mian da xiao:");scanf("%d",&pa);if(pl>256)printf("luo ji di zhi %d > ye biao chang du,wrong\n",pl);else{int d,P,kd,i;int WD;int PT[256];for(i=0;i<256;i++){PT[i]=rand() %512;}P=pl/pa;d=pl%pa;if(P>=256) printf("ye hao > biao chang du,wrong\n");else {printf("ye hao = luo ji di zhi / ye mian da xiao=%d,ye nei di zhi = luo ji di zhi % ye mian da xiao=%d\n",P,d);kd=PT[P];printf("gen ju ye hao:%d get kuai hao:%d\n",P,kd);WD=kd*pa+d;printf("wu li kuai hao=kuai hao*ye mian da xiao+ye nei di zhi\n");printf("wu li di zhi=%d*%d+%d\n",kd,pa,d);printf("luo ji di zhi huan suan hou wu li di zhi=%d\n\n",WD);return (0);}}}分段式部分:int Segment(int sn,int sd){int i,wd;for(i=0;i<255;i++){st.segf[i]=rand()%255;st.segl[i]=rand()%2048;}if(sn>256) printf("duan hao > duan biao chang du 256,wrong\n\n",sn);else if(sd>st.segl[sn]) printf("duan nei di zhi > duan chang du ,wrong\n\n",sd,st.segl[sn]);else{printf("gen ju duan hao zhao dao duan shou di zhi:%d\n",st.segf[sn]);printf("wu li di zhi=duan shou di zhi+duan nei di zhi\n");printf("wu li di zhi =%d+%d\n",st.segf[sn],sd);wd=st.segf[sn]+sd;printf("huan suan de dao de wu li di zhi=%d\n\n",wd);}return (0);}段页式部分:int SegPagt(int sn,int pn,int pd){int i,wd;sp.pl=256;for(i=0;i<255;i++){sp.pf[i]=sp.segf[i]=rand()%26624;sp.ptl[i]=sp.segl[i]=rand()%512;sp.pt[i]=rand()%256;}if(sn>=256)printf("duan hao %d > ye biao chang du 256,wrong\n\n",sn);elseif(pn>=256)printf("ye hao %d > ye biao chang du 256,wrong\n\n",pn);elseif(pd>sp.pl)printf("ye nei di zhi > ye mian chang du,wrong\n\n",pd,sp.pl);else{printf("tong guo duan hao:%d get ye biao shou di zhi:%d\n,tong guo ye hao:%d get kuai hao:%d\n",sn,sp.pf[sn],pn,sp.pt[pn]);printf("wu li di zhi=ye biao shou di zhi+kuai hao*ye mian chang du+ye nei di zhi\n");printf("wu li di zhi=%d+%d*%d+%d\n",sp.pf[sn],sp.pt[pn],sp.pl,pd);wd=sp.pf[sn]+sp.pt[pn]*sp.pl+pd;printf("wu li di zhi:%d\n\n",wd);}return (0);}5 结果分析(含实现中出错原因分析)分页式:分段式:段页式:6 设计小结(即收获和体会)通过本次实验,对分页式,分段式,段页式的地址转换有了更深的了解。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

题目三种存储管理方式的地址换算姓名:学号:专业:学院:指导教师:姚若龙2018年11月27日【目录】摘要 (01)引言 (02)算法设计 (02)程序分析 (04)算法分析 (09)调试结果 (11)个人总结 (15)参考文献 (15)摘要:操作系统(Operating System,OS)是方便用户、管理和控制计算机软硬件资源的系统软件(或程序集合)。

从用户角度看,操作系统可以看成是对计算机硬件的扩充;从人机交互方式来看,操作系统是用户与机器的接口;从计算机的系统结构看,操作系统是一种层次、模块结构的程序集合,属于有序分层法,是无序模块的有序层次调用。

操作系统在设计方面体现了计算机技术和管理技术的结合。

操作系统是系统软件的核心,、它控制程序的执行和提供资源分配、调度、输入/输出控制和数据管理等任务。

如DOS、UNIX、OS/2和Windows NT都是得到广泛使用的操作的系统。

三种管理方式中,分页系统能有效地提高内存利用率,分段系统则能很好地满足用户需要,而段页式系统则是把前两种结合起来形成的系统。

这种新系统既具有分段系统的便于实现、分段可共享、易于保护、可动态链接等一系列优点,有能像分页系统那样很好地解决内存的外部碎片问题,以及可为各个分段离散地分配内存等问题。

关键字:分页方式,分段方式,段页式方式,操作系统。

一.引言分页存储管理是将一个进程的逻辑地址空间分成若干个大小相等的片,称为页面或页。

在分段存储管理方式中,作业的地址空间被划分为若干个段,每个段定义了一组逻辑信息。

段的长度由相应的逻辑信息组的长度决定,因而个段长度不等。

段页式存储管理方式是分段和分页原理的结合,即先将用户程序分成若干个段,再把每个段分成若干个页,并为每一个段赋予一个段名。

三种存储管理都有其相应的段表、页表和地址变换机构。

二.三种存储管理方式地址换算描述(1)分页存储管理方式在页式存储管理方式中地址结构由两部构成,前一部分是页号,后一部分为页内地址w(位移量),如图为了实现从进程的逻辑地址到物理地址的变换功能,在系统中设置了页表寄存器,用于存放页表在内存中的始址和页表的长度。

当进程要访问某个逻辑地址中的数据时,分页地址变换机构会自动地将有效地址(相对地址)分为页号和页内地址两部分,再以页号为索引去检索页表。

查找操作由硬件执行。

在执行检索之前,先将页号与页表长度进行比较,如果页号大于或等于页表长度,则表示本次所访问的地址已超越进程的地址空间。

于是,这一错误将被系统发现并产生一地址越界中断。

若未出现越界错误,则将页表始址与页号和页表项长度的乘积相加,便得到该表项在页表中的位置,于是可从中得到该页的物理块号,将之装入物理地址寄存器中。

与此同时,再将有效地址寄存器中的页内地址送入物理地址寄存器的块内地址字段中。

这样便完成了从逻辑地址到物理地址的变换。

(2)分段存储管理方式程序通过分段划分为多个模块,如代码段、数据段、共享段:–可以分别编写和编译–可以针对不同类型的段采取不同的保护–可以按段为单位来进行共享,包括通过动态链接进行代码共享为了实现从进程的逻辑地址到物理地址的变换功能,在系统中设置了段表寄存器,用于存放段表始址和段表长度TL。

在进行地址变换时,系统将逻辑地址中的段号与段表长度TL进行比较。

若S>TL,表示段号太大,是访问越界,于是产生越界中断信号;若未越界,则根据段表的始址和该段的段号,计算出该段对应段表项的位置,从中读出该段在内存的起始地址,然后,再检查段内地址d是否超过该段的段长SL。

若超过,即d>SL,同样发出越界中断信号;若未越界,则将该段的基址与段内地址d相加,即可得到要访问的内存物理地址。

(3)段页存储管理方式在段页式系统中,为了便于实现地址变换,需配置一个段表寄存器,其中存放段表始址和段表长TL。

进行地址变换时,首先利用段号S,将它与段表长TL进行比较。

若S>TL,表示未越界,于是利用段表始址和段号来球出该段所对应的段表项在段表中的位置,从中得到该段的页表址,并利用逻辑地址中的段内页号P来获得对应表的页表项位置,从中读出该页所在的物理块号b,再利用块号b和页内地址来构成物理地址。

(4)段表、页表、段表地址寄存器。

为了进行地址转换,系统为每个作业建立一个段表,并且要为该作业段表中的每一个段建立一个页表。

系统中有一个段表地址寄存器来指出作业的段表起始地址和段表长度。

三.程序模块int settable1(int n,int k);//创建页表int printTable1(int n,int k);//显示页表int transt(int n,int k,int add);//分页地址换算int defSect(int n,int *t);//创建段表int printSect(int n);//输出段表内容int transSect(int n,int s,int d);//进行分段地址换算函数int setSectTable(int n,int k);//创建段页式内容int printSectTable(int n,int k);//显示段页内容int transSectPage(int n,int k,int s1,int s2,int s3);//段页式地址换算//定义页表结构体typedef struct stable{int y1;//页号int y2;//块号}stable;struct stable setst[512];typedef struct setsect{int d1;//段号int d2;//段长int d3;//基址}setsect;struct setsect sets[512];//定义段表的总长度//建立段页式内的页表的结构体typedef struct table{int dy1;//页号int dy2;//块号}table;//建立段页式的结构体typedef struct setAll{struct table c1[512];//定义段内页表的结构体int c2;//段号int c3;//段长int c4;//起始地址}setAll;struct setAll set[512];//定义段页式的总长度1.分页系统int page(int A,int L){int d,P,kd,i;int WD;int PT[256];for(i=1;i<256;i++){PT[i]=rand() %512;//定义随机产生的快号在到之间 }P=A/L;//页号等于逻辑地址/页面大小d=A%L;//页内地址=逻辑地址%页面大小if(P>L) printf("页号大于页表长度,越界中断\n\n");//如果页号大于页表长度,输出越界中段else {printf("页号=逻辑地址/页面大小=%d,页内地址=逻辑地址%页面大小=%d\n",P,d);//输出页号和页内地址kd=PT[P];//根据页号随机产生快号printf("根据页号%d得到块号%d\n",P,kd);WD=kd*L+d;//计算物理地址的公式printf("物理地址=块号%d*页面大小%d+页内地址%d\n",kd,L,d);//输出物理地址=块号*页面大小+页内地址printf("逻辑地址%d换算后的物理地址为%d\n\n",A,WD);//输出物理地址的结果return (0);}}2.分段系统int Segment(int sn,int sd){int i,wd;for(i=0;i<255;i++){st.segf[i]=rand()%255;//定义随机产生段首地址为到之间st.segl[i]=rand()%2048;//定义随机产生段长度为到之间}if(sn>256) printf("段号%d大于段表长度,越界中断\n\n",sn);//如果段号大于段表长度,输出越界中断else if(sd>st.segl[sn]) printf("段内地址%d大于段长度%d,越界中断\n",sd,st.segl[sn]);//如果段内地址大于段长度,输出越界中断else{printf("根据段号找到段首地址%d\n",st.segf[sn]);printf("物理地址=段首地址%d+段内地址%d\n",st.segf[sn],sd); //输出物理地址=段首地址+段内地址wd=st.segf[sn]+sd;//计算物理地址的算法printf("换算得到的物理地址为:%d\n\n",wd);//输出物理地址}return (0);3.段页系统int SegPagt(int sn,int pn,int pd){int i,wd;sp.pl=256;for(i=0;i<255;i++){sp.pf[i]=sp.segf[i]=rand()%26624;//定义随机产生的数在到之间sp.ptl[i]=sp.segl[i]=rand()%512;//定义随机产生的数在到之间sp.pt[i]=rand()%256;//定义随机产生的数在到之间}if(sn>256) printf("段号%d大于段表长度,越界中断\n\n",sn);//如果段号大于段表长度,输出越界中断else if(pn>sp.ptl[pn]) printf("页号%d大于页表长度%d,越界中断\n",pn,sp.ptl[pn]);//如果页号大于页表长度,输出越界中断else if(pd>sp.pl) printf("页内地址%d大于页面长度%d,中断\n",pd,sp.pl);//如果页内地址大于页面长度,输出中断else{printf("通过段号%d找到页表首地址%d\n通过页号%d找到块号%d\n",sn,sp.pf[sn],pn,sp.pt[pn]);//输出页表首地址和块号printf("物理地址=页表首地址%d+快号%d*页面长度%d+页内地址%d\n",sp.pf[sn],sp.pt[pn],sp.pl,pd);//输出物理地址=页表首地址+快号*页面长度+页内地址wd=sp.pf[sn]+sp.pt[pn]*sp.pl+pd;//计算物理地址的公式printf("物理地址为:%d\n\n",wd);//输出物理地址的最好结果}return (0);}4.主函数int main(){int code;int pl,pa,sn,sd,pd,pn;//const int ptl ;int temp;printf("----------------地址换算过程----------------------------\n\n"); printf(" 1.分页式地址换算\n");printf(" 2.分段式地址换算\n");printf(" 3.段页式地址换算\n");printf(" 4.结束运行\n\n");printf("----------------------------------------------------------\n"); printf("请输入您的选择:");scanf("%d",&code);switch(code){case 1:{printf("注意:请演示设定页表长度小于\n");printf("请输入换算的逻辑地址:\n");scanf("%d",&pa);printf("页面大小(B):\n");scanf("%d",&pl);page(pa,pl);}break;case 2:{printf("请演示设定段表长度小于\n");printf("请输入逻辑地址的段号:\n");scanf("%d",&sn);printf("段内地址:\n");scanf("%d",&sd);Segment(sn,sd);}break;case 3:{printf("预设定段表长为,页面大小为\n");printf("请输入逻辑地址的段号:\n");scanf("%d",&sn);printf("页号:\n");scanf("%d",&pn);printf("页内地址:\n");SegPagt(sn,pn,pd);}break;case 4:{}break;}}while (code<4);}四.三种存储管理方式的地址变换机构(1)分页系统的地址变换机构为了实现从进程的逻辑地址到物理地址的变换功能,在系统中设置了页表寄存器,用于存放页表在内存中的始址和页表的长度。

相关文档
最新文档