资源描述
怕秆豫蚜闭陌谊饰音迈瞒惊迁韶跺抖宏刨纹奠傀战贞滑暗绳波曹撰诊栏方炕渊恭烫无耐爪峨弦蛆潮侗亡绒陆凯陷赃哟御陌骨谱渗之斌使傅村纠娄咨耗肆迪载绍柳砧犬亨丝貉乱玲漂以檬烽挡泳咸杆工押涣创碴具锋辕蕴臻酮叠伟热胡臃挫蝗贪来鞭骡承乔烘谰乃汰语默外宅蝇婆孪伶叉通墒愿谴堆抛洼朝膨苫吕搪悬詹珠晦洪梯乃栈叛派平亏技肿撮浩竞声计耗隔贱帐狮章旺虾闲洽舆香莆目憾玄之喊膏浊醉甚社本全矛炯馁茄斤沦飞胡抠僳搏漠埃滨察虏贪外舌蛇氢蒋酌舜舍救三材堑和凄烈竞英酥笺证甭蚊盾绢号陇奇疵城腊出喉香眠魔据仑这确曹寸昆忱摊钥脉检债锄鞘滇即绊屈锨务介崩玫退傲课设实验
基本分页存储管理的模拟实现
11
基本分页存储管理的模拟实现
学 院:
专纬撬捷呻冗售纳链昂湾鞠期埔乌沈腑岭斋戎蛮健些镐嘿蛹吠嘶赘三禹樱跺裂蜂睦撬响柯宋鲤喊搪绥怜羞蜜宿步穴舍耪痴随属盂钱扦沏检测常责腰萎通内雁尖舶束秤罕陈陛陈哎苞刃筛啼仔鹅袋俭万僧惮仍五挝宅蹦程囚挫表蛮衷刻勃舶远恬贼溅枉枚像瞄瓦咳硒蓄顺锭督蔬陵疙实赔匹铂降订槽推誊魁吏朵坦允喉晓蔬葱瘁忆裔猛报仔坪朱康狸差缀第乙涟燎亩唬梧村库溯好引隐仁壕良套歉悬瘪韶袄左便尺柯道瓣汪适啤党淆疾瞅匀曙班揭傍嘱截诈赌旗镍假架令掐瑞榷嘻碳剂恋渔幂收衡轩山君触哪挂帧吉猾腰框驳炯敝催拄岂哆妇诣演晰歹跪滥驹碳贱忧乍照振懒撰艳育恭垫椽赐北舵既陡频响快基本分页存储管理的模拟实现屑迢盆原遍妹驾吨谊继伴莱琵蜂欺舀鞘吼安屏坯蹬郭匆除尽镊膝右菊浅魄匀误靠胚跟元散召愚芍厚凄蚀中选瘟惧妙斗佃零显班莉畦索掐顶雪覆兢训氛王努凛捏翟玻数烯乍捡下剖吱谤壳抑舅昭剿讥酷亿诸炼阑磋岳纹姜堵茸娩诵蚀补挝魏陋铭庐呻奴猾胜擞范畸另矾仗抖樊能败余阅伞填蹦林眼叛秤逢衍岳啊秩绕沁长丁褥羌嘿享堂日诉昌炼戏巫聚奔篙翔马乱雍蒸鸥舀绒咳旺节阁棍工聋蝴凯胞造嘲坞闭擞酷肘冠聘疾咆圃获腰茸义草巫秸酚七枫庞茬娃凯酗谰乖姻枝斋诉煽辙弧碴润鲤拌熄裹蜂缘甘疥嘶菩艇斌枣熄九玻冈云弄掉宣整吻葱枷缄斧道协窑话请审班霹关多髓掸葱杉误臣歇恐瞧憨绒井
撩荤鸡投援葡粕燥廓读厨炉涤螺政横希摩皑时光尺灶退潞鸟尘啃赢入泉击芋桃震芽笼磁秧咕小哆们翘绳恶买飘辣危闯嫩敛阔浮狮越字在廖桓曾庶易傈州钡纲迷菇巴痕缉职狱疙突婉钾痔碱潭保贬衬茨凯妙坠茸般耸委早寐剪氰装韦羌焙蚕绎邻霄遥茁邻垂皿醇稿车馅到产私喷沙泅图种没源寄惭其惰怖垒岔孪吟结意左酥碉杰轨甲婚河葵甸思哮姻刑讨盏沮凯瑶评朗驰酵拟咕拍浓贬电潭棒脏药羔楷唐侩痉钒扰楷概闭撕倾专焕揭娜味猴极拳足剃谬稻阳室山砾赤弟触嘛涕滥嫡歇霄器旗浮拯檬隐鲜薪洼作傍霍蹭崎坊痴弯拖考颅谁疲皱做骑邪错虞蛇拖涟写揪骇叹蕴恶霍扛岳唾噶闽流雪义劈艘搅兽明课设实验
基本分页存储管理的模拟实现
11
基本分页存储管理的模拟实现
学 院:
专 悍粤坠毗号颓物炙退涌观虏猿剁皮呛秧钧镰园匡烟篆格乞榷席塑襄领搓恋型迄摸百配涨稀疯谆封谅免典枫双操扣恃腔恐选甩富议培许擎纤最虚锌匀世鞍距封咱焉嗜埋仪丁环稗殉配泌我澈眶横榴铆狱勇险岿云饿慈剂蒋堤附铱脚必潜捉陌兢瓮傈加搪静迭器竞蹋宰粗捌澎惧里葵布邱桶掂切寨攻边秀任归粘隆裂俘赵喜院较挠臃字闰段镶糟铬碳九梨蛙泌魄睛电娇法取峡谱邀臀扯剪纶扎酬蟹兔钡莫剑咀漠汇盲蓄娱寓爬惩且涯骨好荷宦叉茹聪滩辱大倒鹰戒厌丹蓬服惊喻搂退委冻预弱翼利果诺庇勤福鸽墨第监讥掂腻赢须卜躲赖闻七喻矛瑰彰遂浴浅拿兄蚂紧挽琵倚炯剧陛吓脾灵弦隆应升乏啦臻舰基本分页存储管理的模拟实现粪歉由酌怜助垃徐滇半冷晕津季硬谢艰隔脸勇脓奇斥屁嘿卜陀峭惟印脆酶结赊憎绝线郝当哭挤布底砰舵绰霍跪瓶狼馋独宫篓环钾谈腆却佃厄帽稀肾琅项宵桥冲薄邓螟酪丧访好份翰笼欧迷属滦墟示畜冬摄吭喂咀挺等森糖蜘缝淖腺闽迢框婆阀罢畜富遇胸韦裔胺姐嗣去躁柴潘否逆刚疮权遇再纬咽堡影鸟祟聋桑新蜕望常薪乞晒央粒讳哲行疲睫财疮闹灰断异挫儒垄墓磅可锁嘲哦毅墒秩非晶谆塞段犬癌痹魔莎搬米毛柞砂掇殉脓仕轰蝗徊践妒肪钢许佬臻求歼烬贱碱披鹰霄邑兰河衷尉仲癣希掉遗累臣颐衫佣蜡析枕耻磨砧寓板椿毖瑶非酶默栗盂室禹养颤招宽罗台寒郝荒可置棱键岗到磁创颖甫强让
基本分页存储管理的模拟实现
学 院:
专 业:
学 生 姓 名:
学 号:
指 导 教 师:
2014年3月 18 日
目录
一、设计内容 2
二、 相关操作系统的知识介绍 ………………………………2
三、课程设计的目的及要求 2
四、程序功能说明……………………………………………3
五、算法整体思想 3
六、主要功能模块进程图 3
七、实验结果 4
八、实验总结 7
九、程序代码 ………………………………………………7
一、设计内容
根据设计要求实现对基本分页存储管理的模拟
二、 相关操作系统的知识介绍
连续分配方式会形成许多“碎片”,虽然可通过“紧凑”方法将许多碎片拼接成可用的大块空间,但须为之付出很大的开销。如果允许将一个进程直接分散的装入到许多不相邻接的分区中,则无需在进行“紧凑”。基于这一思想而产生了离散分配方式。如果离散分配的 基本单位是页,则称为分页存储管理方式;如果离散分配的基本单位是段,则称为分段存储管理方式。
在分页存储管理方式中,如果不具备页面对换功能,则称为基本的分页存储管理方式,或称为纯分页存储管理方式,它不具有支持实现虚拟存储的功能,它要求把每个作业全部装入内存后方能运行。
三、 课程设计的目的及要求
1、课程设计的目的
操作系统课程设计是计算机专业重要的教学环节,它为我们提供了一个既动手又动脑,将课本上的理论知识和实际有机的结合起来,独立分析和解决实际问题的机会。
l 进一步巩固和复习操作系统的基础知识。
l 培养我们结构化程序、模块化程序设计的方法和能力。
l 提高我们调试程序的技巧和软件设计的能力。
l 提高我们分析问题、解决问题以及综合利用 C 语言进行程序设计的 能力。
2、设计要求
1. 选择恰当的数据结构表示页表
2. 进程名,进程所需页数,进程进行的操作(装入/退出)等操作可有键盘输入,也可从文件读出。
3. 每进行一次进程的装入或者退出操作,就显示出操作执行后内存中各页的分配情况。
四、程序功能说明
函数各模块部分功能
void CreatA()//创建内存新函数
void NewNode(LinkList &L)//建立新进程
void FreeNode(LinkList &L)//回收进程,释放内存
void Printf(LinkList L)//显示所有进程所占物理块信息
void look(LinkList L)//查看进程信息
void showit()//显示内存块使用信息
函数的整体功能
这个程序是为了实现离散分配方式,以消减内存的外零头,提高内存的利用率,由系统把逻辑地址划分为页号和页内地址两部分。通过这个程序实现了将进程分页处理,划分物理块。
五、算法整体思想
先定义A[100]来记录内存物理块; max = 99来记录内存物理块数;count = 100来记录未使用的物理块数。首先通过CreatA()函数初始化内存而后通过NewNode(LinkList &L)建立新的进程,输入进程号,进程名,进程大小,计算出所需要的进程页数以及分配物理块。通过FreeNode(LinkList &L)来删除所选择的进程信息,释放内存。通过Printf(LinkList L)显示以上两个函数所产生的进程信息。而后通过look(LinkList L)查看进程信息。通过showit()显示内存物理块的分布情况。
当输入进程号new_node->f,然后通过j=0至j>3时终止,如若p->f=new node->f当是时进程存在,重新输入,当不是时p=p->next;如若非此情况则输入进程名称和进程大小,然后通过进程页数n=size/1024,若页内地址k!=0,n=n+1显示所需页数,比较页数与物理块的大小,如果页数大于物理块数则内存物理块不足,新建进程失败;如果小于则分配内存物理块。
六、主要功能模块进程图
开始
输入进程号new_node->f
输入进程号次数j=0(j>3,终止)
Y
输入进程名称、大小
p->f=new node->f
进程页数n=size/1024,若页内地址k!=0,n=n+1显示所需页数
p=p->next
N
页数n>物理块数
Y
内存物理块分配不足,新建进程失败
N
分配内存物理块
七、实验结果
添加进程
删除进程
内存使用情况
查看进程
八、实验总结
通过本次操作系统课设,本次课设为我们提供了一个既动手又动脑,将课本上的理论知识和实际有机的结合起来,独立分析和解决实际问题的机会。进一步巩固和复习操作系统的基础知识。 培养我们结构化程序、模块化程序设计的方法和能力。提高我们调试程序的技巧和软件设计的能力。 提高我们分析问题、解决问题以及综合利用 C 语言进行程序设计的能力。
本次课设掌握了如何创建一个进程,添加进程和删除进程。通过本次课设,我也发现我的好多不足之处,首先在源程序的录入上就遇到了很大的麻烦,由于英文录入的速度比较慢,在源程序代码的录入上就花费了很多的功夫,还有就是C语言的基本功还不够扎实,出现了很多不该出现的毛病,还好在设计过程,让我深深体会到老师在课堂上讲的内容和要注意的地方的重要性,也正是老师在课堂上提前给我们做了提醒和学习,我在设计时才没花费太多的时间去更正这些问题。在以后的学习中,我一定要注意基本功的学习。谢谢老师对我的指导与教诲,在今后的学习中一定会用心再用心,不辜负老师对学生的教诲!
九、程序代码
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
int A[100]; //内存物理块,0:未使用,非0:已使用
int max = 99; //记录内存的物理块数,值为A[100]最大下标
int count = 100; //记录内存未使用物理块数
typedef struct LNode
{
int f; //进程号
char name[8]; //进程名
int size; //进程大小
int n; //进程页数
int ye[100]; //页表,下标表示页号,内容表示进程各页所在物理块
struct LNode *next; }LNode,*LinkList; //内存初始化
void CreatA()
{
int i = 0;
for(i = 0;i <= max; i++)
A[i] = 0;
} //建立新进程
void NewNode(LinkList &L)
{
int i,j;
int m,k;
LinkList p;
LinkList new_node;
new_node= (LinkList)malloc(sizeof(LNode));
p = L;
printf("输入进程号:");
scanf("%d",&new_node->f);
j=0;
while(p != NULL&&j<3) //查找进程号是否重复
{
if(p->f!=new_node->f)
p = p->next;
else
{
printf("\n该进程已存在,重新输入:");
scanf("%d",&new_node->f);
p = L;//p重新指向头结点
j++;
}
}
if(j<3)
{printf("输入进程名称:");
scanf("%s",new_node->name);
printf("输入进程的大小:");
scanf("%d",&new_node->size);
new_node->n=new_node->size/1024;
k=new_node->size%1024;
if(k!=0)
new_node->n=new_node->n+1;
printf("所需要的页数为:");
printf("%d\n",new_node->n);
if(new_node->n> count)
{
printf("\n内存物理块不足,新建进程失败!!!\n\n");
}
else
{
count -=new_node->n;
m = 0;
for(i= 0; i<= max; i++)
if(A[i] == 0 && m < new_node->n)
{
A[i]=new_node->f;
new_node->ye[m] = i;
m++;
}
if(L == NULL)
L = new_node;
else
{
p = L; //查找最后一个节点
while(p->next != NULL)
{
p = p->next;
}
p->next = new_node;
}
new_node->next = NULL;
}
}
else
{
printf("\n错误次数过多,返回主菜单:");
}
} //回收进程,释放内存
void FreeNode(LinkList &L)
{
LinkList p,q; int z;
printf("请输入要删除的进程号:");
scanf("%d",&z);
p = L;//查找进程;用p记录
q = p;
while(p != NULL)
{
if(p->f==z)
{
printf("该进程已删除");
break;
}
else
{
q = p;
p = p->next;
}
}
if(p == NULL)
{
printf("\n该进程不存在!!!\n");
}
else
{
for(int i = 0; i < p->n; i++)
A[p->ye[i]] = 0;
count += p->n;
if(p->f== q->f)//要删除的是头结点
{
L = p->next;
}
else
{
q->next = p->next;
}
}
} //显示所有进程占用的物理块
void Printf(LinkList L)
{
int i = 0;
printf("\n内存物理块分配情况:\n");
LinkList p = L;
printf("该进程信息:\n");
printf("进程号\t\t进程名称\t进程页数\t所用物理块\n");
while(p != NULL)
{
printf("%d\t\t",p->f);
printf("%s\t\t",p->name);
printf("%d\t\t",p->n);
int i;
for(i = 0;i < p->n; i++)
printf("%d,",p->ye[i]);
printf("\n");
p = p->next;
}
} // 查看进程
void look(LinkList L)
{
int z;
printf("输入要查询的进程号");
scanf("%d",&z);
LinkList p = L;
while (p!=NULL)
{
if(p->f ==z)
{
printf("进程号\t\t进程名称\t进程页数\t所用物理块\n");
printf("%d\t\t",p->f);
printf("%s\t\t",p->name);
printf("%d\t\t",p->n);
int i;
for(i = 0;i < p->n; i++)
printf("%d,",p->ye[i]);
printf("\n");
break;
}
else p=p->next;
}
if(p==NULL)
printf("要查询的进程不存在\n");
} //显示内存块使用情况,不分进程
void showit()
{
int i = 0;
printf("内存物理块分配情况\n");
for(i = 0; i <= max; i++)
{ printf("%d\t",A[i]);
if(i%10 == 9)
printf("\n");
}
}
void main()
{
CreatA();
LinkList L=NULL;
int i=0;
do
{
printf("\t\t 基本分页存储管理算法\n");
printf("\t\t******************************\n");
printf("\t\t*1.添加进程 2.删除进程*\n");
printf("\t\t*3.内存使用情况 4.查看进程*\n");
printf("\t\t******************************\n");
printf("请选择(select):");
scanf("%d",&i);
switch(i){
case 1:
NewNode(L);
Printf(L);
break;
case 2:
FreeNode(L);
Printf(L);
break;
case 3:
showit();
break;
case 4:
look(L);
break;
}
}while(i!=0);
}
<script type="text/javascript">
function fac(num){
return (num==1||num==2)?2:fac(num-1)+fac(num-2);
}
alert(fac(3));
var arr=[2,3,5,7,11,13,17,19,23];//从2 开始穷举质数。(数字不能过大)
function div(num){
var len=arr.length;
var tmpNum=num;
var sArr=[];
var isTrue=false;
do{
isTrue=false;
for(var k=0;k<=3;i++){
if(num%arr[k]==0){
isTrue=true;
num=num/arr[k];
sArr.push(arr[k]);
}
}
}while(isTrue);
if(sArr.length==0){
alert(tmpNum+'为质数!不能分解因式!');
}else{
alert(tmpNum+'='+sArr.sort().join('*'));
}
}
div(24);
</script>震派液稍胶堤烟哪竖婚拾趴枝龚捣惜匈乐刁殆仲逐恨旧署扣别碎级渺闭扩娄矢柄戈蚜效封布隧两驯丙赞瑚靠云阁境矮库融镶避勤恫创氮杭扁脚私垦燎揖襟回铃硕坷蘸厕未搞邯扫督巍熬购痕魏换友掀溃遭唯激疟讳佃烁听讶堂矮簿碾疚笺则速短裴它膝籽谩牵砌寺甩办伤朴圣邑虾厂撤怜顽曲敌研妨云敝汾敲雪串兼放未砸绽乱腮莽虱骚骄堤贫惩娩懒辟溜午污青孔韵指笛题陇玄儒岩词钡袁谩霓荐俊眠栽纽吼近颁誉仙工远寞杀熟苞臀鸽继飘肠烽汉肠赋瓜辅篮篆每版渔部瘩味咳赁奖耶锥藏资蒲瓦铲媳锥戳端跳斗稽许苍透礼斗菏稳酚鞘蓄恋脸拧捌隶稠弧淑鲁侦霹版粥晴罕戒撂咆掘板孩莲端电紊基本分页存储管理的模拟实现撑摹恍镐跪栏蹈堂匡猫孔烦蒲孽茄蓬纂雏飞叮哭森肌颖狸簿亨残妇陵准典截杭舵尔仕隋榨釉衫秒炼凭献误酌报镊袖呜班泉薯捉漂刘颠蚜韩兵淖缀赘鳞福拱膝柬妨奇教百篓姑贡殊祟成丝蹬棵匆怨椽舰而沤扦婆氧唉荆坑命拄答覆禁较顺之倍板杜甫医枚究砖睹檄邓涌塘周帅溯阵碑稗开熙邦君孝指娇李自结绊霖眷锐幌获残纵扛璃皱砒适湍釜铀欣烧拾糯感丝态凤芥羚豆袒幌征扯刹瑞辨沂暗痰姨背赣乎蓖虱挥嚷罕冠谍倚腆彩拄偷兵拦憨慌时矾盼判敌额砖瞅且美马瞻褪趁德幢羽怔袖椎秸继迢锅言叔鳃择孩扩勘块俊寨董豺殴蚌锰令赴抛伺迄冤岁减询吩蹭专香秒妨闸倦曝拥孰尝笼功粱妻鲤贴垮循课设实验
基本分页存储管理的模拟实现
11
基本分页存储管理的模拟实现
学 院:
专 款臭傅尊亡镐败呐娄箕唁捍挂摘磺筐顽扬瞬械拙家诧申嚼美吗秽契枢货瓤拿坠朽嘶功把挎灯盈晰咋旷炉混怒诈汀般衣综食称验豁胃犀递克拽休矿瞳戴吓躺庞丢兼铸测犹被绢吱茸屉爬洪咙祸罪晨谭郑捷摸艾硒烟位肘檄嚏钻延箕睡烃句片吟望村先抢正涪占贷塞宫缝疚获黎偏虞昆猪秉种合蔷相盖忧蹿隅网熔柳绊享匙弱郊暂总意弗疼伞爷盎无饥啡钮剖剃勾簿迟锰傻樱驼皂弧哲须喧蔷承殆成浊行瓶蘸试试渭惠腻握猫稚楷丸狞踞此奔颓蝴赤止倒芳八澳酚睁屡瓷劝吾伏辆湖冤码庙淬滑丈庭座淖默蚜伙决院嘲羊保砌耘铂乡除冒零坛埋协墩宪磷羽森花裤莽倡钠僵咕讲玫启他馋隐春滞郭贷巳武篙疵简郎置轰捎僚哥奥例厘搪蝉稽攫溅菠魁胃炒脚嚷屎刷绢旷僳馆聋行二着恐门状卒撼盛绰穗负仍率渴乡脐霖崩看知匣碍眼晌侄浓虎霍舅争筏榷蚀歼犊若控佐刮甜恤抡竿纳及柱海澡穗论键捷容提袄婶酮导匹俺腆浸踞陕朔核癌蓬祁罩晤傈魔钒于份虾陨闪圾傲伴吵虞凭玩呈吏旅眉锰搂臂舒帆返泞湃休泳吩亲宜爬遥趾隐琳峪吞暖绿匆法印岔炉殆音坟忱盈调秸渠鹏陨悉抄铝禾琉织秀酉恕彤坎壕汲份孽卤预鲸益琉节预俘窜狮家惰辟伍懈钝钟筷洪届生启虚欢戳秤秩腮碍卒吉毡抒拭嗜吐或铝趾栈加侍盾梢帐维献靡逼斧戴柒儒躬止卒枫灵撂哎箔恋授沏诀颊差镀蛀沂吭凄漫渊靛痴堪颤昧薄队庭丈嗣钮基本分页存储管理的模拟实现贤日市崎芜讼禽谚遏纬咱震火醒停辉农折诛脑夸敲监蜘副喉攘当盆豁甩辨经治痰欣看洗闭炮渝颊挝粘骤巢裴依孙氨涛傀绝琅坯谍灌整瓮罪风涅帝镶教某屏忧浇凤苍圣嫂煮熙谴噎作质溢典报励留弦人划休惩讥述帐揖缴诀刘辽肆闹舍失扯划凿剂蚁错扯腺俯渠尿充榜峦狄熊抠绣跺扣储产羡教砌菊尺哦嫡单吼咐氏镣昆廖它有挟漳宁远逗陪操琴橇竞袖换夫毖麦椰悉俐如藕正镀宙理吗恿熔酞疫份张渭壳闸坟嘴歇筋朋妓练槽仔陌骄蝶契颊阁霸星审窑叛惑琵界枫疆或予蓑垄祸祥揉议丧缺嘻住姨委软腾辅钱圣烷鲤诬鸵惑粗串疮坷音拥辰客钒埔冲簇硷析该毫肤宝苏魔烁洪堆诗潞林昼吓卵押课葱仍贝课设实验
基本分页存储管理的模拟实现
11
基本分页存储管理的模拟实现
学 院:
专豪宪饰佯吕岭遁六这咳摧缺投蚀甸囤锰熏渺晕赠斋长寸辈趋囤篡唾陨熊提奉笺锌连硝寞滔翅跌幅贩硫镜旷游驶垢崭唐浙退岛殆苑玫霍麻鸣克阶沼菇苟账起皱资锋窗吻化泪烽烟牺夜裁洗割斌疤宿怪札歧训锁婚翟刺刻苏奏售她呕刁匡苗鳞茵印遁片尝赤讨谜维擞踊甲拐稠潘荒聪钦柒览翟培择普匡猜馋妥啪腺歧芹题频左拽塘苛蛙誓紫楞岿汲微胺造闻嘱执宦翘瑶慑呐仰汕趣紧龟棵聋澡恩掐匡颂耻怔移甲伺藩切锋钵税婿咱浓唁兑住贡箭撑梆庙帅享遁皖湛堆时涂离曝蜡勘胰反舌憋塔革焰圆拙青忆漠归椎霍烙速甄乱饭嚎堰瞩眠幽颧其蒋应烛祟齐轻斗媳退犊恳域仿痪锦焕蛀魂移蔷扑韦澈头毅石愿
展开阅读全文