操作系统课程设计地址转换
- 格式:doc
- 大小:901.50 KB
- 文档页数:16
实验四页式虚拟存储管理中地址转换和缺页中断一、实验目的深入了解页式存储管理如何实现地址转换;进一步认识页式虚拟存储管理中如何处理缺页中断。
二、实验预备知识页式存储管理中地址转换的方法;页式虚拟存储的缺页中断处理方法。
三、实验内容编写程序完成页式虚拟存储管理中地址转换过程和模拟缺页中断的处理。
实验具体包括:首先对给定的地址进行地址转换工作,若发生缺页则先进行缺页中断处理,然后再进行地址转换;最后编写主函数对所做工作进行测试。
假定主存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位)。
在页式虚拟存储管理方式中,作业信息作为副本放在磁盘上,作业执行时仅把作业信息的部分页面装入主存储器,作业执行时若访问的页面在主存中,则按上述方式进行地址转换,若访问的页面不在主存中,则产生一个“缺页中断”,由操作系统把当前所需的页面装入主存储器后,再次执行时才可以按上述方法进行地址转换。
页式虚拟存储管理方式中页表除页号和该页对应的主存块号外,至少还要包括存在标志(该页是否在主存),磁盘位置(该页的副本在磁盘上的位置)和修改标志(该页是否修改过)。
操作系统实验报告-页式虚拟存储管理中地址转换和缺页中断实验四页式虚拟存储管理中地址转换和缺页中断一.实验目的(1)深入了解存储管理如何实现地址转换。
(2)进一步认识页式虚拟存储管理中如何处理缺页中断。
二.实验内容编写程序完成页式虚拟存储管理中地址转换过程和模拟缺页中断的处理。
三.实验原理页式存储管理把内存分割成大小相等位置固定的若干区域,叫内存页面,内存的分配以“页”为单位,一个程序可以占用不连续的页面,逻辑页面的大小和内存页面的大小相同,内外存的交换也以页为单位进行,页面交换时,先查询快表,若快表中找不到所需页面再去查询页表,若页表中仍未找到说明发生了缺页中断,需先将所需页面调入内存再进行存取。
四.实验部分源程序#define size 1024//定义块的大小,本次模拟设为1024个字节。
#include "stdio.h"#include "string.h"#includestruct plist{int number; //页号int flag; //标志,如为1表示该页已调入主存,如为0则还没调入。
int block; //主存块号,表示该页在主存中的位置。
int modify; //修改标志,如在主存中修改过该页的内容则设为1,反之设为0int location; //在磁盘上的位置};//模拟之前初始化一个页表。
struct plist p1[7]={{0,1,5,0,010},{1,1,8,0,012},{2,1,9,0,013},{3,1,1,0,021},{4,0,-1,0,022},{5,0,-1,0,023},{6, 0,-1,0,125}};//命令结构,包括操作符,页号,页内偏移地址。
struct ilist{char operation[10];int pagenumber;int address;};//在模拟之前初始化一个命令表,通过程序可以让其顺序执行。
课程设计题目模拟设计页式存储管理中地址转换学院计算机科学与技术学院专业计算机科学与技术专业班级姓名指导教师汪祥莉2012 年 1 月10 日课程设计任务书学生姓名:专业班级:指导教师:汪祥莉工作单位:计算机科学与技术学院题目: 模拟设计页式存储管理中地址转换初始条件:1.预备内容:阅读操作系统的内存管理章节内容,理解页式存储管理的思想及相应的分配主存的过程。
2.实践准备:掌握一种计算机高级语言的使用。
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1.实现页式存储管理中逻辑地址到物理地址的转换。
能够处理以下的情形:页式逻辑地址可以输入十进制或者十六进制,能检查地址的合法性,如果合法进行转换,否则显示“地址非法”;物理地址能够分别用十进制和十六进制表示。
2.设计报告内容应说明:⑴课程设计目的与功能;⑵需求分析,数据结构或模块说明(功能与框图);⑶源程序的主要部分;⑷测试用例,运行结果与运行情况分析;⑸自我评价与总结:i)你认为你完成的设计哪些地方做得比较好或比较出色;ii)什么地方做得不太好,以后如何改正;iii)从本设计得到的收获(在编写,调试,执行过程中的经验和教训);iv)完成本题是否有其他的其他方法(如果有,简要说明该方法);v)对实验题的评价和改进意见,请你推荐设计题目。
时间安排:设计安排一周:周1、周2:完成程序分析及设计。
周2、周3:完成程序调试及测试。
周4、周5:验收、撰写课程设计报告。
(注意事项:严禁抄袭,一旦发现,抄与被抄的一律按0分记)指导教师签名:年月日系主任(或责任教师)签名:年月日目录1.摘要 (4)2.设计目的与基本要求 (4)3.程序设计模块说明 (5)3.1主要定义变量说明 (5)3.2程序设计思路 (5)3.2.1程序语言的选择 (5)3.2.1操作系统中页式存储系统的地址转换图 (5)3.2.2地址转换流程图 (6)3.2.2程序设计流程图 (7)3.3程序主要语句和数据结构 (8)4.程序调试与运行结果 (8)4.1程序运行开始界面 (8)4.2设置内存分页 (9)4.3输入进程分块数目并生成随机页表 (9)4.4输入十进制逻辑地址并转换成物理地址 (10)4.5输入十六进制逻辑地址并转换成物理地址 (10)4.6程序结束 (10)5. 自我评价与总结 (11)6.附录:程序主要部分 (11)1.摘要页表的功能可以由一组专门的寄存器来实现。
计算机操作系统辅导之二地址转换The pony was revised in January 2021关于地址转换在计算机操作系统中,地址转换是存储管理的一个主要功能。
所谓地址转换就是将用户的逻辑地址转换成内存的物理地址,完成地址重定位。
需要指出的是,地址转换是操作系统的地址变换机构自行完成的,无需用户干预,这样我们使用操作系统时,才方便而可靠。
在这一章里,介绍的存储管理有分区管理(包括固定分区和可变分区)、分页管理、分段管理和段页式管理,其中分页管理的地址转换是重点和难点。
下面,我们结合三个例题对地址转换作详细地分析。
【例1】考虑一个由8个页面,每页有1024个字节组成的逻辑空间,把它装入到有32个物理块的存储器中,问:(1)逻辑地址需要多少二进制位表示?(2)物理地址需要多少二进制位表示?分析在分页存储管理中,逻辑地址结构如下图所示。
它由两个部分组成:前一部分表示该地址所在页面的页号p;后一部分表示页内地址(页内位移)d。
页号的地址位数决定了页的多少,假设页号有20位,则地址空间中最多可容纳的页面数为220,即1MB个页面。
页内地址位数确定了每页的大小,若页内地址为12位,则每页大小为212,即2KB。
同理,物理地址中块号的地址位数决定了块的数量。
由于页式存储管理内存空间块的大小与页面大小相同,所以物理地址中块内地址与逻辑地址中的页内地址位数相同。
解因为页面数为8=23,故需要3位二进制数表示。
每页有1024个字节,1024=210,于是页内地址需要10位二进制数表示。
32个物理块,需要5位二进制数表示(32=25)。
(1)页的逻辑地址由页号和页内地址组成,所以需要3+10=13位二进制数表示。
(2)页的物理地址由块号和页内地址的拼接,所以需要5+10=15位二进制数表示。
【例2】若在一分页存储管理系统中,某作业的页表如下所示。
已知页面大小为1024字节,试将逻辑地址1011,2148,4000,5012转化为相应的物理地址。
页式地址变换课程设计一、课程目标知识目标:1. 理解并掌握页式地址变换的基本原理,包括分页机制、页表结构、地址映射过程;2. 学会计算页面大小、页表长度以及逻辑地址与物理地址的转换;3. 掌握内存页式管理中的置换算法,如LRU、FIFO等,并了解其优缺点。
技能目标:1. 能够运用所学知识,对给定的逻辑地址进行页式地址变换,完成地址映射;2. 能够分析并解决内存管理中的实际问题,如缺页中断、页面置换等;3. 能够运用编程语言实现简单的页式地址变换算法。
情感态度价值观目标:1. 培养学生主动探究、积极思考的学习态度,提高学生对计算机硬件及系统结构的兴趣;2. 增强学生的团队合作意识,培养学生良好的沟通能力;3. 引导学生认识到内存管理在计算机系统中的重要性,培养学生对技术发展的关注和责任感。
本课程针对高中信息技术课程中的计算机硬件及系统结构部分,结合学生已掌握的知识和认知特点,设计具有实际操作性的教学内容。
通过本课程的学习,旨在帮助学生深入理解页式地址变换的原理,培养其解决实际问题的能力,并提高学生对计算机硬件的兴趣和认识。
课程目标具体、可衡量,便于教师进行教学设计和评估。
二、教学内容1. 页式地址变换原理:- 分页机制的概念与原理- 页表的结构与作用- 逻辑地址与物理地址的转换方法2. 页式管理中的置换算法:- LRU(最近最少使用)算法- FIFO(先进先出)算法- 其他置换算法的简要介绍3. 地址变换过程的实现:- 地址映射的步骤与方法- 缺页中断的处理- 页面置换的策略4. 实践操作:- 使用编程语言(如Python)实现简单的页式地址变换算法- 分析实际案例,探讨页式地址变换在操作系统中的应用教学内容依据课程目标,按照科学性和系统性原则进行组织。
本章节内容与教材中关于计算机系统结构、内存管理部分紧密相关。
教学大纲明确,内容安排合理,确保学生在掌握基本原理的同时,能够通过实践操作加深对页式地址变换的理解。
摘要分页存储管理是将一个进程的逻辑地址空间分成若干个大小相等的片,称为页面或页,并为各页加以编号,从0开始,相应地,也把内存空间分成与页面相同大小的若干个存储块,称为(物理)块或页框(frame),也同样为它们加以编号。
在分段存储管理方式中,作业的地址空间被划分为若干个段,每个段定义了一组逻辑信息。
每个段都从0开始编址,并采用一段连续的地址空间。
段的长度由相应的逻辑信息组的长度决定,因而各段长度不等。
整个作业的地址空间由于是分成多个段,因而是二维的,亦即,其逻辑地址由段号(段名)和段内地址所组成。
段页式系统的基本原理,是基本分段存储管理方式和基本分页存储管理方式原理的结合,即先将用户程序分成若干个段,再把每个段分成若干个页,并为每一个段赋予一个段名。
目录1概述 (4)(一)分页存储管理方式的作用: (4)(二)分段存储管理方式的作用: (4)(三)段页式存储管理方式的作用 (4)2. 课程设计任务及要求 (5)2.1 设计任务 (5)2.2 设计要求 (5)(一)分页方式的地址换算。
具体要求: (5)随机生成页面大小,但一定为2的幂,系统随机生成一个至少有10行的页表,页号、块号从0开始。
(5)分段方式的地址换算。
具体要求: (5)(二)段页式的地址换算。
具体要求: (5)3. 算法及数据结构 (6)3.1算法的总体思想 (6)3.2数据结构模块 (6)3.3分页方式的地址换算模块 (7)3.4分段方式的地址换算模块 (9)3.5段页方式的地址换算模块 (10)3.6主函数模块 (12)4. 程序设计与实现 (14)4.1 程序流程图 (14)5. 结论 (24)6. 收获、体会和建议 (25)7. 参考文献 (26)1概述(一)分页存储管理方式的作用:页表的功能可以由一组专门的寄存器来实现。
一个页表项用一个寄存器。
由于寄存器具有较高的访问速度,因而有利于提高地址变换的速度;在分页系统中,选择过小的页面大小,可以减少内存碎片,起到减少内存碎片总空间的作用,有利于内存利用率的提高。
内师大计算机与信息工程学院《操作系统》课程设计报告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 设计小结(即收获和体会)通过本次实验,对分页式,分段式,段页式的地址转换有了更深的了解。
第五章名字与地址转换5.1 域名系统尽管通过IP地址可以唯一地识别主机上的网络接口,从而访问网络中的每个主机。
但是,由于IP地址不便于人们记忆,因此人们还是习惯于使用主机名来访问网络。
随着IPv6协议的不断广泛应用,数值地址变得更长,手工键入一个地址更容易出错。
在大多数操作系统中,任何应用程序都可以调用一个标准的库函数来查看给定名字的主机的IP地址(UNIX系统中函数名);同样,系统还提供了一个逆函数,即给定主机的IP地址,查看它所对应的主机名。
大多数使用主机名作为参数的应用程序也支持把IP地址作为参数。
域名系统DNS(Domain Name System)主要用于主机名与IP地址间的映射。
主机名可以是简单名字,例如Jida,也可以是全限定域名FQDN(Fully Qualified Domain Name),例如。
严格地说,FQDN也称为绝对名字(absolute name),因此必须以一个点号结尾,但用户经常省略最后的点号。
在Internet上使用了基于层次型的名字管理机制。
在Internet的层次型名字管理中,先由中央管理机构(例如Internet的NIC)将最高一级的名字空间进行划分,并将相应部分的管理权交给相应的机构,各管理机构可对名字空间进行进一步的划分。
一般来说,最高一级的名字空间的划分是基于“网络节点名”(site name)的。
网络节点的概念是对Internet整个网络的一部分(通常由若干个网络构成)的一种抽象,这些网络的组织关系或地理位置联系非常紧密,可以将它们看成一个节点。
各个网络节点中又可划分成不同的管理组。
组名下面是主机的本地名。
典型的Internet 层次型主机名由三部分构成:本地名称.管理组名.网络节点名例如,其中cn属于第一级的名字空间,代表国家;第二级域为,代表教育机构,最低一级代表吉林大学。
5.1.1 资源记录在TCP/IP环境中,域名系统(DNS)是一个分布式数据库系统,通过它来提供IP地址和主机名之间的映射。
操作系统课设页式存储系统地址转换代码import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;public class adressadvant {public static void main(String[] args) throws IOException {intmemory=0,pagesize=0,pagen=0,n=0,adresslo=0,adressp=0;int adressw=0,adressc=0,x=0,again1=0,again2=0,again3=0;BufferedReader buf;String str;int i=0,j=0,k=0,max=50;int pglist[]=new int[50];for (i=0;i<max;i++){pglist[i]=0;}System.out.print("欢迎使用页式存储系统地址转换模拟软件\n\r");do{do{do{buf=new BufferedReader(new InputStreamReader(System.in));System.out.print("请输入内存大小\n\r");str=buf.readLine();memory=Integer.parseInt(str);buf=new BufferedReader(new InputStreamReader(System.in));System.out.print("请输入内存页面大小\n\r");str=buf.readLine();pagesize=Integer.parseInt(str);}while(memory%pagesize!=0);pagen=memory/pagesize;System.out.println("则内存页数为"+pagen);do{buf=new BufferedReader(new InputStreamReader(System.in));System.out.print("\n\r请输入进程块号数目n(页号:0,1,2,。
课程设计课程名称操作系统学院计算机学院专业年级班别学号学生姓名指导教师2013 年 1 月7 日操作系统课程设计任务书学生姓名陈泳鑫专业班级学号题目编程演示三种存储管理方式的地址换算过程指导教师林穗题目编号2012秋-14主要内容1、分页方式的地址换算2、分段方式的地址换算3、段页式的地址换算任务要求要求演示正确、清晰,编程所用工具不限。
参考文献[1]计算机操作系统,汤小丹等,西安电子科技大学出版社[2]操作系统实验指导书,傅秀芬,广东工业大学(自编)[3] 计算机操作系统教程( 第二版),张尧学、史美林,清华大学出版社[4] 现代操作系统,A.S.Tanenbaum 著,陈向群等译机械工业出版社审查意见指导教师签字:系主任签字:年月日1、设计思想说明1.1 设计环境在实现地址转换的程序实现时,运用了C++6.0来实现,因为对C语言程序的编写稍微熟悉点,可以很好的编写及调试。
程序很容易看懂,输入条件在后边备注。
1.2 设计思想编程演示三种存储管理方式的地址换算过程,分别为分页方式的地址换算,分段方式的地址换算,段页式的地址换算。
分页方式通过逻辑地址算出页号与叶内地址,然后通过页表来实现向物理地址的转换。
分段方式通过段号和段内地址得到物理地址。
段叶式通过段号得到页表首地址,通过页号得到块号,进而得到物理地址。
2、系统结构程序主要有三个功能,分别是分页方式的地址换算,分段方式的地址换算,段页式的地址换算。
Switch函数包含3个case语句,分别用page,Segment,SegPagt完成分页方式的地址换算,分段方式的地址换算,段页式的地址换算。
3、数据结构的说明typedef struct segtable{int segf[256];int segl[256];}segtable;struct segtable st;typedef struct segpagt{int segf[256];int segl[256];int ptl[256];int pt[256];int pf[256];int pl;}segpagt;struct segpagt sp;4、算法流程图分页式:分段式:段页式:5、主要函数列表函数原型功能入口、出口参数说明void main() 输入、输出Int 整形变量6、测试与分析分页式地址换算结果:分页式地址越界中断:分段式地址转换结果:分段式地址段号越界中断:分段式地址段内越界中断:段页式地址转换结果:段页式地址转换段号越界中断:段页式地址转换页号越界中断:段页式地址转换段内地址越界中断:结束:7、用户使用说明根据提示输入1-4,然后有相应的提示说明,分别输入,错误的时候有提示,正确的输入会输出相应的正确的结果。
附录:#include <stdlib.h>#include <stdio.h>int page(int A,int L );int Segment(int sn,int sl);int SegPagt(int sn,int pn,int pd);typedef struct segtable{int segf[256];int segl[256];}segtable;struct segtable st;typedef struct segpagt{int segf[256];int segl[256];int ptl[256];int pt[256];int pf[256];int pl;}segpagt;struct segpagt sp;int main(){int code;int pl,pa,sn,sd,pd,pn,pc;//const int ptl ;int temp;do{printf("----------------地址换算过程----------------------------\n\n");printf("******本程序由陈泳鑫设计--2013年1月3号*****\n");printf(" 1.分页式地址换算\n");printf(" 2.分段式地址换算\n");printf(" 3.段页式地址换算\n");printf(" 4.结束运行\n\n");printf("--------------------------------------------------------\n");printf("请输入1-4:");scanf("%d",&temp);switch(temp){case 1:printf("预设页表长度为256\n");page(pl,pa);break;case 2:int pl,pa;printf("预设段表长度为256\n");printf("请输入您的逻辑地址段号:");scanf("%d",&pl);printf("请输入您的页内地址:");scanf("%d",&pa);if(pl>256)printf("段号%d大于段表长度256,越界中断\n",pl);else{if(pa>256)printf("段内地址%d大于段长度256,越界中断\n",pa);else{Segment(pl,pa);}}break;case 3:printf("预设段表长度为256,页面大小为256\n");printf("请输入您的逻辑地址段号:");scanf("%d",&pl);printf("请输入您的页号:");scanf("%d",&pa);printf("请输入您的页内地址:");scanf("%d",&pc);if(pl>256)printf("段号%d大于段表长度256,越界中断\n",pl);else{if(pa>256)printf("页号长度%d大于页表长度256,越界中断\n",pa);else{if(pc>256)printf("页内地址%d大于页面长度256,越界中断\n",pc);elseSegPagt(pl,pa,pc);}}break;}}while(temp != 4);return 0;}//分页式地址换算部分:int page(int A,int L){int pl,pa;printf("请输入您的逻辑地址:");scanf("%d",&pl);printf("请输入您的页面大小:");scanf("%d",&pa);if(pl>256)printf("页号%d大于页表长度256,越界中断\n",pl);else{int d,P,kd,i;int WD;int PT[256];for(i=0;i<256;i++){PT[i]=rand() %512;//定义随机产生的快号在1到512之间}P=A/L;//页号等于逻辑地址/页面大小d=A%L;//页内地址=逻辑地址%页面大小if(P>=256) printf("页号大于页表长度,越界中断\n\n");//如果页号大于页表长度,输出越界中段else {printf("页号=逻辑地址/页面大小=%d,页内地址=逻辑地址%页面大小=%d\n",P,d);//输出页号和页内地址kd=PT[P];//根据页号随机产生快号printf("根据页号%d得到块号%d\n",P,kd);WD=kd*L+d;//计算物理地址的公式printf("物理地址=块号*页面大小+页内地址\n");printf("物理地址=%d*%d+%d\n",kd,L,d);//输出物理地址=块号*页面大小+页内地址printf("逻辑地址%d换算后的物理地址=%d\n\n",A,WD);//输出物理地址的结果return (0);}}}//分段式地址换算部分:int Segment(int sn,int sd){int i,wd;for(i=0;i<255;i++){st.segf[i]=rand()%255;//定义随机产生段首地址为1到255之间st.segl[i]=rand()%2048;//定义随机产生段长度为1到2048之间}if(sn>256) printf("段号%d大于段表长度256,越界中断\n\n",sn);//如果段号大于段表长度,输出越界中断else if(sd>st.segl[sn]) printf("段内地址%d大于段长度%d,越界中断\n\n",sd,st.segl[sn]);//如果段内地址大于段长度,输出越界中断else{printf("根据段号找到段首地址%d\n",st.segf[sn]);printf("物理地址=段首地址+段内地址\n");printf("物理地址=%d+%d\n",st.segf[sn],sd); //输出物理地址=段首地址+段内地址wd=st.segf[sn]+sd;//计算物理地址的算法printf("换算得到的物理地址=%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;//定义随机产生的数在1到26624之间sp.ptl[i]=sp.segl[i]=rand()%512;//定义随机产生的数在1到512之间sp.pt[i]=rand()%256;//定义随机产生的数在1到256之间}if(sn>=256)printf("段号%d大于段表长度256,越界中断\n\n",sn);//如果段号大于段表长度256,输出越界中断elseif(pn>=256)printf("页号%d大于页表长度256,越界中断\n\n",pn);//如果页号大于页表长度,输出越界中断elseif(pd>sp.pl)printf("页内地址%d大于页面长度%d,中断\n\n",pd,sp.pl);//如果页内地址大于页面长度,输出中断else{printf("通过段号%d找到页表首地址%d\n通过页号%d找到块号%d\n",sn,sp.pf[sn],pn,sp.pt[pn]);//输出页表首地址和块号printf("物理地址=页表首地址+块号*页面长度+页内地址\n");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);}。