计算机科学与技术学院2007-2008学年第一学期《操作系统》课程设计题目:模拟段页式存储管理地址变换教师:冯霞班级:050341D班学号:050341404姓名:陈玉虎成绩:1.题目分析1.1设计目的了解内存管理机制,掌握段页式虚拟存储技术;理解内存分配原理,特别是以页面为单位的虚拟内存分配方法;用可视化界面来掌握操作系统的知识。1.2设计内容根据逻辑地址中的段号进行查找,先查找快表。如果找到,则形成物理地址,否则进行后续步骤;通过段表始址寄存器,查找段表在内存中的始址;通过段表并根据段号,查找页表所在位置;访问页表,根据逻辑页号查找该页所在的物理块号;将物理块号和逻辑地址中的页内地址拼接,形成访问内存单元的物理地址。1.3相关知识概述段页式存储管理的主要内容是:(1)用页式方法来分配和管理内存空间,即:把内存分为若干大小相等的页面;(2)用段式方法对用户程序按照其内在的逻辑关系划分成若干段;(3)再按照划分的内存页面的大小,把每一段内划分成若干大小相等的页面;(4)用户程序的逻辑地址由三部分组成:段号(s),页号(p),页内地址(d);(5)内存是以页为基本单位分配给每个用户程序的,在逻辑上相邻的页面在内存不一定相邻。1.4基本设计思路(1)建立段表系统为每个用户程序建立一张段表,用于记录各段的页表始址和页表长度。(2)建立页表系统为用户程序的每一段各建立一张页表,用于记录该段中各逻辑页号与物理块号之间的对应关系。段表、页表和内存的关系如图所示。(3)建立内存空闲页面表整个系统建立一张内存空闲页面表,用于记录并管理内存空闲页面。(4)硬件支持为加快地址映射速度,硬件需要提供如下2个寄存器:①段表始址寄存器;②段表长度寄存器;(5)地址映射过程在段页式存储管理中,要访问内存的单元,则要经过如下地址转换步骤,才能得到最终的物理地址。根据逻辑地址中的段号查找快表。如果找到,则形成物理地址,否则进行后续步骤;通过段表始址寄存器,查找段表在内存中的始址;通过段表并根据段号,查找页表所在位置;访问页表,根据逻辑页号查找该页所在的物理块号;将物理块号和逻辑地址中的页内地址拼接,形成访问内存单元的物理地址;2.概要设计2.1功能模块段段表表地地址址寄寄存存器器段段表表起起始始地地址址段段号号页页表表长长度度页页表表始始址址页页号号块块号号00段段页页表表页页号号块块号号11段段页页表表内内存存空空间间如如图图段段表表、、页页表表和和内内存存的的关关系系段段表表NYYN2.2主要数据结构描述对段表与页表中的数据的存储如下:页号:逻辑地址(段号、页号、页内地址)段号—(段表始址寄存器)段号S页越界段号段表长度物理块号物理地址返回段越界页号—(页表始址寄存器)页号P页号页表长度页内地址段号:101234506789123456789段号:0………逻辑地址段表和页表的存储以由低到高的优先级顺序进行编排,在进行程序分段分析的时候用到了堆栈和队列,以便对程序的语句进行逐个分析。3.详细设计3.1主要算法描述主要代码:voidCScannerDlg::ShowOut(){m33=0;m10=1A;//初始化常数m7=1;m11=14;m8=2;m12=B3;m9=3;m13=4C;m18=0;m14=0;m19=1;m15=10;m20=2;m16=20;m21=3;m17=30;m22=10;m23=10;m26=0;m24=10;m25=10;m28=6;UpdateData(false);m_result+=----(段0)关键字段----;m_result+=\r\n;CVocabularybu;intn1=0;for(inti=1;i39;i++){if(PrimaryKey[i]==1){m_result+=bu.Vocabulary[i];n1+=1;m_result+=\r\n;}}m1=n1;UpdateData(false);m_result+=----(段1)符号段----;m_result+=\r\n;intn2=0;for(i=51;i86;i++){if(Symbol[i-50]==1){m_result+=bu.Vocabulary[i];n2+=1;m_result+=\r\n;}}m2=n2;UpdateData(false);m_result+=----(段2)标识段-----;m_result+=\r\n;intn3=0;for(i=0;i50;i++){if(Identifier[i]!=){m_result+=Identifier[i];n3+=1;m_result+=\r\n;}}m3=n3;UpdateData(false);m_result+=-----(段3)常数段----;m_result+=\r\n;intl=0;intn4=0;for(i=0;i50;i++){m_result+=Const[i];n4=+1;m_result+=\r\n;}m4=n4;UpdateData(false);}voidCScannerDlg::OnButton1(){//TODO:Addyourcontrolnotificationhandlercodehereif(m33m28){UpdateData(true);m32=m33+m26;m36=m10;UpdateData(false);if(m32==m18)//查段表{if(m1m22){m27=m1+m14;//查页表UpdateData(false);}elseMessageBox(页越界!!!,越界中断,MB_ICONEXCLAMATION);return;}if(m32==m19){if(m1m23){m27=m1+m15;UpdateData(false);}elseMessageBox(页越界!!!,越界中断,MB_ICONEXCLAMATION);return;}if(m32==m20){if(m1m24){m27=m1+m16;UpdateData(false);}elseMessageBox(页越界!!!,越界中断,MB_ICONEXCLAMATION);return;}if(m32==m21){if(m1m25){m27=m1+m17;UpdateData(false);}elseMessageBox(页越界!!!,越界中断,MB_ICONEXCLAMATION);return;}elseMessageBox(未找到!!!,越界中断,MB_ICONEXCLAMATION);return;}elseMessageBox(段越界!!!,越界中断,MB_ICONEXCLAMATION);return;}3.2程序界面设计4.编码实现4.1开发工具简介VisualC++4.2实现过程总结对于分析器的设计只设计了四个段,整个程序都是在围绕四个程序段进行存取。这是一个段页式地址转换的过程,其实,数据的存取对于此程序是个虚拟的过程。内存中的段表与页表也是虚拟出来的,程序需要查询段表和页表两个表,并通过使用段表始址寄存器与页表始址寄存器来确定要查找的段号与页号。通过此程序中地址的转化过程,使自己在存储管理面方面了解了很多,了解了内存管理机制,掌握了段页式虚拟存储技术;理解了内存分配原理,特别是以页面为单位的虚拟内存分配方法;并加深了以可视化界面来掌握系统知识的能力。4.3程序使用手册先通过“打开文件”按钮添加源程序,或者编写一段代码,然后点“分析”按钮,分析结果一栏显示划分成段后的结果,并且逻辑地址表中显示每段的段号以及每段的最后的一个单元的页号和页内地址,系统的段表与页表内的数值开始是默认,也可以修改,包括要转化的逻辑地址也可以修改,一旦修改即要据此来进行转化,点“”按钮进行转换查询。5.结果分析与总结5.1结果分析将段号、页号、页内地址分别为2、3、B3的逻辑地址,在段表始址为0,段表长度为6,页表始址为0,页表长度都为10的情况下,转化为物理地址为23B3。结果正确。5.2总结与建议由理论知识到具体模型的建立是一个困难的过程,需要有透彻的分析与理解做支持,另一方面需要在脑海中建立形象的思维。通过课程设计使自己在分析问题和理解问题上,以及形象思维的能力有了提高。真的对理论知识到建模的过程产生了兴趣,以后会多向这方面发展的。6.参考资料《计算机操作系统及实验教程》——刘欣怡《计算机操作系统》修订版西安电子科技大学出版社《VisualC++的使用及面向对象软件工程实例分析》电子工业出版社