欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    计算机专业操作系统课程设计 存储管理地址换算演示.docx

    • 资源ID:9340997       资源大小:361.74KB        全文页数:33页
    • 资源格式: DOCX        下载积分:3金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    计算机专业操作系统课程设计 存储管理地址换算演示.docx

    1、计算机专业操作系统课程设计 存储管理地址换算演示操作系统课程设计报告课题:存储管理地址换算演示 学院 (系): 计算机科学与工程学院 班 级: 学 号: 学生姓名: 指导教师: 时间: 2009年 12月24日 到 2009 年 12月30日目 录封 面 1目 录 2一、设计任务 3二、任务目的 3三、存储器管理地址换算思想 32.1 分页方式的地址换算 32.2 分段方式的地址换算 42.3 段页式的地址换算 5四、设计方案 64.1 设计功能流程图 64.2 功能流程图说明 74.3 代码实现核心部分 74.3.1 打开演示窗体 74.3.2 分页方式的地址换算参数处理及模拟分配页表映射

    2、104.3.3 分页方式的地址换算过程演示 104.3.4 分段方式的地址换算参数处理及模拟分配段表映射 114.3.5 分段方式的地址换算过程演示 134.3.6 段页式的地址换算参数处理及模拟分配页、段表映射 144.3.7 段页式的地址换算过程演示 17五、程序运行实例 205.1 主窗体界面 205.2 分页方式的地址换算演示界面 205.3 分段方式的地址换算演示界面 215.4 段页式的址换算演示界面 225.5 关于对话框界面 23六、心得体会 23七、参考文献 24一、设计任务编程演示三种存储管理方式的地址换算过程:1)分页方式的地址换算2)分段方式的地址换算3)段页式的地址换

    3、算要求演示正确、清晰,编程所用工具不限。二、任务目的3.1 通过演示实现三种存储管理方式的地址换算过程,了解存储器管理内存分配方式的特点。3.2 通过对页表及段表映射关系、三种地址变换机构的模拟,加深对存储器管理内存离散分配方式的原理和实现过程的理解。3.3 掌握三种存储管理方式的地址换算的基本思想和实现过程,并区分它们之间的不同。三、存储器管理地址换算思想2.1 分页方式的地址换算在系统中设置一个页表寄存器PTR,在其中存放页表在内存的始址和页表的长度,进程未执行时,页表的始址和页表的长度存放在本进程的PCB中。当进程要访问某个逻辑地址中的数据时,分页地址变换机构会自动地将有效地址分为页号和

    4、页内地址两部分,再以页号为索引去检索页表。查找操作由硬件执行。在执行检索之前,先将页号与页表长度进行比较,如果页号大于或等于页表长度,则表示本次所访问的地址已超越进程的地址空间。于是这一错误将被系统发现并产生一地址越界中断。若未出现越界错误,则将页表始址与页号和页表项长度的乘积相加,便得到该表项在页表中的位置,于是可从中得到该页的物理块号,将之装入物理地址寄存器中。与此同时,再将有效地址寄存器中的页内地址送入物理地址寄存器的块内地址字段中。这样便完成了从逻辑地址到物理地址的变换。页表作用优点:没有外碎片,每个内碎片不超过页大小。一个程序不必连续存放。便于改变程序占用空间的大小。即随着程序运行而

    5、动态生成的数据增多,地址空间可相应增长。缺点:程序全部装入内存。2.2 分段方式的地址换算 为了实现从进程的逻辑地址到物理地址的变换功能,在系统中设置了段表寄存器,用于存放段表始址和段表长度TL。在进行地址变换时,系统讲逻辑地址中的段号S与段表长度TL进行比较。若STL,表示段号太大,是访问越界,于是产生越界中断信号;若未越界,则根据段表的始址和该段的段号,计算出该段对应段表项的位置,接着检查该段对应的状态位,若状态位为1,表示该段在外存而非主存,于是产生缺页中断信号,若状态位为0,则从段表项中读出该段在内存的起始地址,然后,再检查段内地址d是否超过该段的段长SL。若超过,即dSL,同样发出越

    6、界中断信号;若未越界,则将该段的基址与段内地址d相加,即可达到要访问的内存物理地址。利用段表实现地址映射优点:便于动态申请内存;管理和使用统一化;便于共享;便于动态链接。缺点:产生碎片。2.3 段页式的地址换算 在段页式系统中,为了便于实现地址变换,须配置一个段表寄存器,其中存放段表始址和段表长度TL。进行地址变换时,首先利用段号S,将它与段表长TL进行比较。若STL,表示未越界,于是利用段表始址和段号来求出该段所对应的段表项在段表中的位置,接着检查该段对应的状态位,若状态位为1,表示该段在外存而非主存,于是产生缺页中断信号,若状态位为0,则从段表项中得到该段的页表始址,并利用逻辑地址中的段内

    7、页号P来获得对应页的页表项位置,再接着检查该页对应的状态位,若状态位为1,表示该页在外存而非主存,于是产生缺页中断信号,若状态位为0,则从页表项从中读出改页所在的物理块号b,再利用块号b和页内地址来构成物理地址。利用段表和页表实现地址映射特点;结合页式、段式优点,克服二者的缺点。四、设计方案4.1 设计功能流程图4.2 功能流程图说明设计C#程序Windows应用程序来分别实现上述三种存储管理方式的地址换算。主窗口用来进行地址换算方式的选择以及相对应方式的参数设置(分页方式的地址换算参数设置,页表长度、页面大小、逻辑地址、主存大小;分段方式的地址换算参数设置,段表长度、逻辑地址段号、段内地址;

    8、段页式的地址换算参数设置,段表长度、逻辑地址段号、页内地址、页面大小、逻辑地址页号)。在相应存储管理方式地址换算的参数设置中设置好参数后点击“演示”按钮,程序将会根据地址换算方式的选择的不同而打开不同地址换算方式的演示窗体,演示开始前将会以对话框的方式提交换算结果,演示窗体展示各个地址换算方式的换算过程。4.3 代码实现核心部分4.3.1 打开演示窗体 / / 根据所选地址换算方式打开不同演示窗体演示不同方式的存储管理地址换算 / / / private void buttonShow_Click(object sender, EventArgs e) /根据不同选择的地址换算方式打开不同演示

    9、窗体 if (radioPageMode.Checked) /分页方式的地址换算 传递参数且打开相应演示窗体 Program.LogicalAddressA = (int)numericLogicalAddressA.Value; /如果页面大小未设置则弹出警告对话框 if (comboBlockSizeA.SelectedIndex = -1) MessageBox.Show(请设置页面大小!, 存储管理地址换算演示, MessageBoxButtons.OK, MessageBoxIcon.Warning); return; string PageSizeA = comboBlockSiz

    10、eA.SelectedItem.ToString(); if (PageSizeA = 512B) Program.PageSizeA = 512; else if (PageSizeA = 1KB) Program.PageSizeA = 1024; else if (PageSizeA = 2KB) Program.PageSizeA = 1024 * 2; else if (PageSizeA = 4KB) Program.PageSizeA = 1024 * 4; Program.PageLengthA = (int)numericPageLengthA.Value; /如果主存大小未

    11、设置则弹出警告对话框 if (comboMemorySizeA.SelectedIndex = -1) MessageBox.Show(请设置主存大小!, 存储管理地址换算演示, MessageBoxButtons.OK, MessageBoxIcon.Warning); return; string MemorySizeA = comboMemorySizeA.SelectedItem.ToString(); if (MemorySizeA = 512KB) Program.MemorySizeA = 1024 * 512; else if (MemorySizeA = 1M) Progra

    12、m.MemorySizeA = 1024 * 1024; else if (MemorySizeA = 2M) Program.MemorySizeA = 1024 * 1024 * 2; else if (MemorySizeA = 4M) Program.MemorySizeA = 1024 * 1024 * 4; new FormPageMode().Show(this); else if (radioSegmentMode.Checked) /分段方式的地址换算 传递参数且打开相应演示窗体 Program.SegmentInAddressB = (int)numericSegmentI

    13、nAddressB.Value; Program.SegmentLengthB = (int)numericSegmentLengthB.Value; Program.SegmentNumberB = (int)numericSegmentNumberB.Value; new FormSegmentMode().Show(this); else if (radioSPMode.Checked) /段页式的地址换算 传递参数且打开相应演示窗体 /如果页面大小未设置则弹出警告对话框 if (comboPageSizeC.SelectedIndex = -1) MessageBox.Show(请设置

    14、页面大小!, 存储管理地址换算演示, MessageBoxButtons.OK, MessageBoxIcon.Warning); return; string PageSizeC = comboPageSizeC.SelectedItem.ToString(); if (PageSizeC = 512B) Program.PageSizeC = 512; else if (PageSizeC = 1KB) Program.PageSizeC = 1024; else if (PageSizeC = 2KB) Program.PageSizeC = 2048; else if (PageSiz

    15、eC = 4KB) Program.PageSizeC = 4096; Program.SegmentLengthC = (int)numericSegmentLengthC.Value; Program.SegmentNumberC = (int)numericSegmentNumberC.Value; Program.PageNumberC = (int)numericPageNumberC.Value; /确保页内地址对应于相应页面大小均有效 if (PageSizeC = 512B) numericPageInAddressC.Maximum = 511; else if (PageS

    16、izeC = 1KB) numericPageInAddressC.Maximum = 1023; else if (PageSizeC = 2KB) numericPageInAddressC.Maximum = 1024 * 2 - 1; else if (PageSizeC = 4KB) numericPageInAddressC.Maximum = 1024 * 4 - 1; Program.PageInAddressC = (int)numericPageInAddressC.Value; new FormSPMode().Show(this); 4.3.2 分页方式的地址换算参数处

    17、理及模拟分配页表映射 / / 构造函数初始各参数 / public FormPageMode() InitializeComponent(); /定义随机数用于生成页表映射关系 Random rn = new Random(); /物理块总数=内存大小/页面大小 int BT = MS / PS; /实例化用来表示页表的映射关系的结构体数组 PT = new PageTableEntriesPL; /分配页表项页号 for (int i = 0; i PL; i+) PTi.pagenumber = i; /分配页表项块号 PT0.blocknumber = rn.Next(BT); for

    18、(int i = 1; i PL; i+) PTi.blocknumber = rn.Next(BT); for (int j = 0; j i; j+) if (PTj.blocknumber= PTi.blocknumber) /确保页表中一个物理块只对应于一个页号 i-; break; StartShow(); 4.3.3 分页方式的地址换算过程演示 / / 地址换算演示方法 / public void StartShow() /向演示窗体listView中添加页表各表项信息 for (int i = 0; i = PL) /页号大于页表长度,越界中断 label1.Text += 【页

    19、号与页表长度比较】n + PN + + PL + 地址越界中断 (注:页表页号从开始)n; MessageBox.Show(PN + (页号) + PL + (页表长度) 地址越界中断!, 分页方式的地址换算演示, MessageBoxButtons.OK, MessageBoxIcon.Warning); else label1.Text += 【页号与页表长度比较】n + PN + + PL + 页表中页号: + PN + 物理块号: + PTPN.blocknumber + n; label1.Text += 【计算页起始地址】n 页表中页号: + PN + 物理块号: + PTPN.b

    20、locknumber + 页起始地址: + PTPN.blocknumber + * + PS + = + PTPN.blocknumber * PS + (B)n; /转换所得的物理地址 int PA = PTPN.blocknumber * PS + PIA; label1.Text += 【换算物理地址】n 物理地址= + PTPN.blocknumber + * + PS + + + PIA + = + PA + (B)n; label1.Text += (物理地址=物理块号*块大小+页内地址 注:块大小=页面大小)n; MessageBox.Show(物理地址= + PA + (B)

    21、, 分页方式的地址换算演示, MessageBoxButtons.OK, MessageBoxIcon.Information); 4.3.4 分段方式的地址换算参数处理及模拟分配段表映射 / / 构造函数初始各参数 / public FormSegmentMode() InitializeComponent(); /定义随机数用于生成段表映射关系 Random rn = new Random(); /定义常量K,用于生成符合要求的段长 int K_5 = 1024 * 5; /定义常量K,用于生成符合要求的基址 int K_30 = 1024 * 30; /实例化用来表示段表的映射关系的结构

    22、体数组 ST = new SegmentTableEntriesSL; /分配段表项段号 for (int i = 0; i SL; i+) STi.segmentnumber = i; /分配段表项状态位 for (int i = 0; i SL; i+) STi.state = rn.Next(110) / 100; /分配段表项段长 for (int i = 0; i SL; i+) /随机数rn.Next(1, 7)相当于区间1,),可以取到取不到 STi.segmentlength = rn.Next(1, 7) * K_5;/随机指定段长在K、K、K、K、K、K之间 /分配段表项主

    23、存起始地址 ST0.startaddress = rn.Next(SL) * K_30; for (int i = 1; i SL; i+) /保证两基址之间容得下所有段长 STi.startaddress = rn.Next(SL) * K_30; for (int j = 0; j i; j+) if (STj.startaddress = STi.startaddress) /确保段表中主存起始地址唯一 i-; break; StartShow(); 4.3.5 分段方式的地址换算过程演示 / / 地址换算演示方法 / public void StartShow() /向演示窗体list

    24、View中添加段表各表项信息 for (int i = 0; i = SL) label1.Text += 【段号与段表长度比较】n + SN + + SL + 地址越界中断 (注:段表段号从开始)n; MessageBox.Show(SN + (页号) + SL + (页表长度) 地址越界中断, 分段方式的地址换算演示, MessageBoxButtons.OK, MessageBoxIcon.Warning); else /段表中段号及段号对应段长 label1.Text += 【段号与段表长度比较】n + SN + STSN.segmentlength) label1.Text += 【段内地址与段长比较】n + SIA + + STSN.segmentlength + 地址越界中断n; MessageBox.Show(SIA + (段内地址) + STSN.segmentlength + (段长) 地址越界中断, 分段方式的地址换算演示, MessageBoxButtons.OK, MessageBoxI


    注意事项

    本文(计算机专业操作系统课程设计 存储管理地址换算演示.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开