《操作系统B》实验报告学院:软件学院专业:计算机科学与技术姓名:岳智岫班级:软件1214班学号:2012005361指导教师:杨丽凤时间:2014年11月实验一几种操作系统的界面一、目的和要求(一)目的本实验的目的是使学生熟悉1—2种操作系统的界面,在熟练使用机器的基础上,能了解各种操作命令和系统调用在系统中的大致工作过程。也就是通过操作系统的外部特征,逐步深入到操作系统的内部实质内容中去。(二)要求1.能熟练的在1—2种操作系统的环境下工作,学会使用各种命令,熟悉系统提供的各种功能,主动而有效地使用计算机。2.熟悉系统实用程序的调用方法和各种系统调用模块的功能和作用二、内容(一)实验步骤在某种操作系统的环境下建立、修改、运行、打印源程序和结果,最后撤消一个完整的程序。提示:可按下述步骤进行1.编写一个完整的源程序,通过编辑命令送入机器,建立源程序文件;2.编译该源文件,建立相应的目标文件;3.编译有错时,再用编辑命令修改源文件,消除全部词法和语法错误;4.连接目标文件,形成可执行文件;5.执行该文件,得到结果;6.打印输出源程序和运行结果;7.撤消本次实验中形成的所有文件。(二)实验内容1,在vc++中输入#includestdio.h#includeconio.hintmain(){intl;printf(岳智岫操作系统实验报告!\n);printf(简单加法运算\n);printf(输入一个数:);scanf(%d,&l);l=l++;printf(加一以后得:%d\n,&l);return0;}2,链接,形成可执行文件3,实验结果三、总结1.本次实验用到的软硬件是VisualC++处理器:Intel(R)Core(TM)i5-3210MCPU@2.5GHz、内存:4GB硬盘大小:500GB操作系统:Windows7旗舰版2.本次试验要求也不是很明确,整个演示系统,自己不仅要考虑具体实现哪些功能,同时还要考虑如何布局,便于实现一定程度上的交互性,而不是像以前得到固定结果,毫无交互性。3.因此,在本次实验中,在程度构思及设计方面,得到了较大的锻炼,能力也得到了一定的提高。实验二进程调度程序设计一、目的和要求(一)目的进程是操作系统最重要的概念之一,进程调度是操作系统的主要内容,本实验要求学生独立地用高级语言编写一个进程调度程序,调度算法可任意选择或自行设计,本实验可使学生加深对进程调度和各种调度算法的理解。(二)要求1.设计一个有几个进程并发执行的进程调度程序,每个进程由一个进程控制块(PCB)表示,进程控制块通常应包括下述信息:进程名,进程优先数,进程需要运行的时间,占用CPU的时间以及进程的状态等,且可按照调度算法的不同而增删。2.调度程序应包含2—3种不同的调度算法,运行时可以任选一种,以利于各种方法的分析和比较。3.系统应能显示或打印各进程状态和参数的变化情况,便于观察。二、实验内容(一)实验原理1.本程序可选用优先数法或简单轮转法对五个进程进行调度。每个进程处于运行R(run)、就绪W(wait)和完成F(finish)三种状态之一,并假定起始状态都是就绪状态W。为了便于处理,程序中进程的运行时间以时间片为单位计算。各进程的优先数或轮转时间片数、以及进程需要运行的时间片数,均由伪随机数发生器产生。进程控制块结构如表2-1所示:表2-1PCB进程标识符链指针优先数/轮转时间片数占用CPU时间片数进程所需时间片数进程状态进程控制块链结构如图2-1所示:RUNHEADTAIL1┇3┇5┇0┇2图2-1进程控制块链结构其中:RUN—当前运行进程指针;HEAD—进程就绪链链首指针;TAIL—进程就绪链链尾指针。2.算法与框图程序框图如图2-2所示。图2-2进程调度框图priority是输入调度算法alog开始alog=priority/roundrobin?生成并按优先数大小排列进程控制块链进程时间片数为0?从链首取一个进程投入运行生成并按进入次序排列进程控制块链链首进程投入运行时间片到,进程时间片数减1,优先数减3运行进程退出,排到进程链尾部撤消该进程链首进程投入运行时间片到,进程时间片数减1,占用CPU时间加1优先数大于链首进程?进程时间片数为0?撤消该进程运行进程退出,按优先数插入进程链从链首取一个进程投入运行结束结束进程队列空?进程队列空?是是是否否否否否是roundrobin占用处理机时间片到?否是(1)优先数法。进程就绪链按优先数大小从大到小排列,链首进程首先投入运行。每过一个时间片,运行进程所需运行的时间片数减1,说明它已运行了一个时间片,优先数也减3。理由是该进程如果在一个时间片中完成不了,优先级应降低一级。接着比较现行进程和就绪链链首进程的优先数,如果仍是现行进程高或者相同,就让现行进程继续运行,否则,调度就绪链链首进程投入运行。原运行进程再按其优先数大小插入就绪链,且改变它们对应的进程状态,直至所有进程都运行完各自的时间片数。(2)简单轮转法。进程就绪链按各进程进入的先后次序排列,链首进程首先投入运行。进程每次占用处理机的轮转时间按其重要程度登入进程控制块中的轮转时间片数记录项(相应于优先数法的优先数记录项位置)。每过一个时间片,运行进程占用处理机的时间片数加1,然后比较占用处理机的时间片数是否与该进程的轮转时间片数相等,若相等说明已到达轮转时间,应将现运行进程排到就绪链末尾,调度链首进程占用处理机,且改变它们的进程状态,直至所有进程完成各自的时间片。(二)实验步骤1.根据实验原理图设计调度源码,如下:2.#includestdio.h3.#includestdlib.h4.#definefurthest55.structprocess/*PCBSTRUCTURE*/6.{7.intid;8.intpriority;9.intcputime;10.intalltime;11.charstate;12.intnext;13.}prochain[furthest-1];14.intprocnum;15.intrand();16.intalgo;17.intrun,head,tail,j;18.main()/*MAINPROGRAM*/19.{20.agan:printf(typethealgorithmis(1:RR,2:PRIO):);21.scanf(%d,&algo);22.if(algo==2)23.{24.printf(outputofpriority.\n);25.init();26.prisch();27.}else28.{29.if(algo==1)30.{31.printf(outputofroundrobin.\n);32.init();33.timesch();34.}else35.{36.printf(tryagain,please\n);37.gotoagan;38.}39.}40.for(j=1;j=40;j++)41.{42.printf(=);43.}44.printf(\n\n);45.for(j=1;j=40;j++)46.{47.printf(=);48.}49.printf(\n\n);50.printf(systemfinished\n);51.getch();52.}53.print()/*PRINTTHERUNNINGPROCESS,WAITING54.QUEUEANDPCBSEQUENCELIST*/55.{56.intk,p;57.for(k=1;k=40;k++)58.printf(=);59.printf(\nrunningproc.);60.printf(waitingqueue.);61.printf(\n%d,prochain[run].id);62.p=head;63.while(p!=0)64.{65.printf(%5d,p);66.p=prochain[p].next;67.}68.printf(\n);69.for(k=1;k=40;k++)70.printf(=);71.printf(\n);72.printf(id);73.for(k=1;kfurthest+1;k++)74.printf(%5d,prochain[k].id);75.printf(\n);76.printf(priority);77.for(k=1;kfurthest+1;k++)78.printf(%5d,prochain[k].priority);79.printf(\n);80.printf(cputime);81.for(k=1;kfurthest+1;k++)82.printf(%5d,prochain[k].cputime);83.printf(\n);84.printf(alltime);85.for(k=1;kfurthest+1;k++)86.printf(%5d,prochain[k].alltime);87.printf(\n);88.printf(state);89.for(k=1;kfurthest+1;k++)90.printf(%5c,prochain[k].state);91.printf(\n);92.printf(next);93.for(k=1;kfurthest+1;k++)94.printf(%5d,prochain[k].next);95.printf(\n);96.}97.insert(intq)/*INSERTAPROCESS*/98.{99.intp,s;100.p=head;101.s=prochain[head].next;102.while((prochain[q].priorityprochain[s].priority)&&(s!=0))103.{104.p=s;105.s=prochain[s].next;106.}107.prochain[p].next=q;108.prochain[q].next=s;109.}110.insert2()/*PUTAPROCESSONTOTHETAILOFTHEQUEUE*/111.{112.prochain[tail].next=run;113.tail=run;114.prochain[run].next=0;115.}116.117.init()/*CREATEAWAITINGQUEUE*/118.{119.inti;120.head=0;121.if(algo==2)122.{123.for(i=1;ifurthest+1;i++)124.{125.prochain[i].id=i;126.prochain[i].priority=(rand()+11)%41;127.prochain[i].cputime=0;128.prochain[i].alltime=(rand()+1)%7;129.prochain[i].state='W';130.prochain[i].next=0;131.if((prochain[i].priorityprochain[head].priority)&&(head!=0))132.insert(prochain[i].id);133.else134.{135.prochain[i].next=head;136.head=prochain[i].id;137.}138.}139.}else140.{141.for(i=1;ifurthest+1;i++)142.{143.prochain[i].id=i;144.prochain[i].priority=(rand()+1)%3+1;145.prochain[i].cputime=0;146.prochain[i].alltime=(rand()+1)%7;147.prochain[i].state='W';148.prochain[i].next=(i+1)%(furthest+1);149.}150.head=1;