操作系统报告_第1页
操作系统报告_第2页
操作系统报告_第3页
操作系统报告_第4页
操作系统报告_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、徐州工程学院 管理学院实验报告 实验课程名称:计算机操作系统 实验地点: 南主楼七楼机房 2013 年_3月至2013 年4 月 专 业信息管理与信息系统 班 级 学生姓名 学 号 指导老师 实验报告 进程 周转时间 带权周 转时间 A 12 3 B 9 3 C 14 3.5 D 8 4 E 13 3.25 时间片大小为1的情况如右图a(1),a(2): 完成顺序:BDACE (a1) a(2) 实验项目:分时系统 实验学时:2 实验日期:2013-3-14 实验要求: 加深学生对多道系统中进程管理的理解,了解进程的各种状态及其转换过程,分时系统中时间片的 设置及进程在时间片开始和结束时的调度

2、过程。 实验内容: (1)利用程序设计语言模拟分时系统中多个进程按时间片轮转调度算法进行进程调度的过程; (2)假设有五个进程 A,B,C, D,E,它们的到达时间及要求服务的时间分别为: 进程名 A B C D E 到达时间 0 1 2 3 4 服务时间 4 3 4 2 4 时间片大小为1,利用程序模拟 A, B, C, D, E 五个进程按时间片轮转的调度及执行过 程并计算各进程的周转时间及带权周转时 间。 (3)修改时间片大小为 2,利用程序模拟 A, B, C, D, E 五个进程按时间片轮转的调度及执行过 程并计算各进程的周转时间及带权周转时间。 (4)修改时间片大小为 4,利用程序

3、模拟 A, B, C, D, E 五个进程按时间片轮转的调度及执行过 程并计算各进程的周转时间及带权周转时间。 : * 怖入 追彳卫月收丹时 I 备辅入逍程到达町冋 录茄入商艸H海町问 詁軸入进程封达吋冋 务捲入追俚胴君时间 話植入进程那吉时冋 器帕入逍俚關务町问 I! and Sc-Il 4 i scs-AdaiiKii :Fl_ B cW D E 七 xmc- d n A t me 玄 n A d r-r xm tf neu piocessr ai*i* v e Id t llIU dL rMn t 4IU W PFUU UU U fc Tn醪 PHOCC-S-S t J.Fit:11 n

4、 B t m d rif am t? run 3 t A Ime ai A Jjiim 吉 A line sl A fi a w mu w new new process ai*i* iv e v e ilonc ? rn _a 1*011 nd_t ime : 8 i_t iiif-ri_ i-nund._t Tmt?常龙 Jicw finne * uin _a if d ij n rl _t xmes : V B 1-i-di.Mie liuiitf* t ui*nun d_t lme 2; vjc i_t urnn aioundt imc * 4 X HL * U H H f C hav

5、e donet t urn i*oun dt inc : 13 MEE E have clone? t:mrn一arnunil_七;Litiv s X3 Ijcs i_t U.1-I1_厲严口und_t 3_rie=二 M -空弓 b(1) 时间片大小为 2情况如b(1),b(2): 进程 周转时间 带权周转时 间 A 8 2 B 12 4 C 13 3.25 D 7 3.5 E 13 3.25 完成顺序:ADBCE pr-ut h w poceitc 丄VHf 耳片於jLue R iv Uufiw T ifc %irri_G i-j 3._tuLmi 已经运行时间 int don e_tim

6、e;完成时间 int turn_arou nd_time;周转时间 float wei_turn_arou nd_time;带权周转时间 struct process * n ext; int time=-1; int time_slice=4;时间片初始值为1 lsempty(struct process* head) void pushli ne(struct process* head,struct process* rn) if (rn=NULL) void popli ne(struct process* head,struct process* x) if(!lsempty(hea

7、d)*x=head-n ext;head-n ext=(*x)-n ext; (*x)- n ext=NULL;void isn ewcome(struct process* head,struct process* readyli ne) struct process* (head-n ext=NULL)return ;if(head-n ext-arri_time=time struct process* newno de; struct process* tail; struct process* readyli ne;队歹列 readyli ne=(struct process*)ma

8、lloc(sizeof(process); readyli ne-n ext=NULL; head=readyli ne-n ext; p=readyli ne; readyli ne=readyli ne-n ext; n-n ext=q; /加入就绪队列 else q=q- next; /便利链表将到达进程加入 就绪队列 /运行当前进程 if(readyli ne=NULL) break; int i; struct process* right now; struct process* p; cout内存分配错误endl; newno de=(struct process*)malloc

9、(sizeof(process); cout请输入进程名n ame; if(newno de-n ame=#) break; cout 请输入进程到达时间arri_time; cout 请输入进程服务时间serv_time; newno de-do ne_time=0; newno de-tur n_arou nd_time=0; while(p匸NULL) coutp-name进程n ext; time+; right no w-turn_arou nd_time=right no w-do ne_time-right no w-arri_time+1; right no w-wei_tur

10、n_arou nd_time=(float)right no w-turn_arou nd_time/right no w-serv_time; coutv*v namevv have don e!e ndl; coutturn_arou nd_time:turn_arou nd_timee ndl; coutwei turn around time:wei turn around timeendl; Coutvv I * turn_arou nd_time=right no w-do ne_time-right no w-arri_time+1; right no w-wei_turn_ar

11、ou nd_time=(float)right no w-turn_arou nd_time/right no w-serv_time; cout* namevv have don e!e ndl; coutturn_arou nd_time:turn_arou nd_timee ndl; coutwei turn around time:wei turn around timeendl; coutv*vn ext; 实验项目:PV操作-生产者与消费者 实验学时:2 实验日期:2013-3-21 实验要求: 实验内容: 1. 由用户指定要产生的进程及其类别,存入就绪队列。 2. 调度程序从就绪

12、队列中提取一个就绪进程运行。如果申请的资源被阻塞则进入相应的等待队列, 调度程序调度就绪队列中的下一个进程。进程运行结束时,会检查对应的等待队列,激活队列中的 进程进入就绪队列。运行结束的进程进入over链表。重复这一过程直至就绪队列为空。 3. 输入两个进程,分别为生产者和消费者,按照先生产后消费顺序输入,观察并记录运行结果;调 整输入进程的顺序,观察并记录运行结果 4. 输入多个进程,随机分配为生产者和消费者,按(1)两种进程数量相同、(2)生产者多于消费者、 生产者少于消费者三种情况,观察并记录运行结果 5. 多次输入多个进程,随机分配为生产者和消费者,使缓冲区中产品最后都被消费完,观察

13、并记录 运行结果 输入两个进程,分别为生产者和消费者,按照先生产后消费顺序输入,观察并记录运行结果 - 吐 隼 Z 且活 电一運 liiT. 匕e 产h 婆如 t 輕債,粘憎 1R-r4rL上和用 件祕旨ff-s冃巴】帕 予P 1:4豪祜喑;洛1 -*iff_Rn 向ci Ju- 1 f 1 ! J 4 二 E 用一lr_r:盲 1 调整输入进程的顺序,先消费后生产,观察并记录运行结果 :馨5:讓欝醛霽黔郭停 产羊前运程是锻鞋苕 它是希亍退程 mnlwjrKkSiitWRKMiR it?迎光 1屁 sntirKiip itiwHi T *0 MMli. HJlJ! Si l 11 Lbi i

14、h MI J 6 ;pw 冷Xs鼬SI 讣眩生的建軽巒賽它砂讨翅 :喘曲密愛s祁 IC 1C 丢-石- t-k- 鳖卅 tt看盲 1 它邢 MS r-r 性泄2- stE -字 r -I f严 =4 巻 .可 .二;: 壷 二一 丿一嗔- 童 荐 ?t亠 S 址匕$ 输入多个进程,随机分配为生产者和消费者,按 不同情况观察并记录运行结果 (1)两种进程数量相同 严空追程展灵卅番- 威: M - ij 啊吉 BE 1 nj 产蔦 一百縈 对.尸 与徧F生; 4-1亠芯古.于*结卜 左主京弋聊f.ft-tA V d Y n g J E Hr bt I 1 隨響.芹FF雷 -#-.:2 .sff-

15、I 妣黑冋黑冋申卉冋申幵冋申可向申幵问甲硏 1hj0!-2潭L3- 1J- %- 4 7. - *li tttt - 1 - J- 肆卸聲 1 fLJt虽.留 無短.tig .後燼檢 vs3 - I- .一; 、.-:.:,一 :I.-.:.;r17 5 ;胡-1?、1夏,电:.;為地.V.II迫丄巧;沖1为甘瓷.弗叮左 駝申齊戸申幵F黑问开直晳盘澤WS-WW同 -sill Z 9- 2 J 3 344 4r_-fcrk_r- 774.4旧 a Luh二-一 3-/. w住:TA-J-rHr更w转ftLv 产 严 厂i 宇士眾丄主电二5_-千F ,涉:-直1 1 2 亠二为hi 量程 rl琶

16、丄.-:” 产A (3)生产者少于消费者 多次输入多个进程,随机分配为生产者和消费者,使缓冲区中产品最后都被消费完,观察并记录运 行结果 2牯阳宵看需 黄蠶者.它是笫4个进程 社書赛盏 I. U予驚5$讲种 匸字符 古 费 带 一數作二 亍番害 -.A茎r.区茎匕S坟;三數它区 4 ,-s 和 一 1缓 lj -纹 亡X丑殺辭 它是i 惟鹫 _上丄丄旦 J 理 趣弄时. 迸理阳乓U区毂软携卡為卑”蜩E 铲更爭嬲冲艮有超 廳囁叫T1J/W 附 #i nclude stdio.h #defi ne getpch(type) (type*)malloc(sizeof(type) int produc

17、t num=0;产品数量 int process num=0;/ 进程计数器 int full=0; int empty=buffersize; / semaphorechar bufferbuffersize; 缓冲区 int bufferpoint=0;缓冲区指针 while(li nkhead!=NULL) p=li nkhead; lin khead=li nkhead-processli nk; free(p); return p; void lin klist(PCB* p,PCB* listhead) int processproc() /给PCB分配内存。 in t i,f,

18、num; char ch; lin kqueue(p, / 并把这些进 程放入就绪队列中。 return true;bool waitempty() /如果缓冲区满,该进程进入生产者 等待队列; if(empty=0) cout:)进程numlabel 缓冲区存数,该进程进入生产者等待队 列processli nk=NULL) void lin kqueue(PCB* process,PCB* tail) /把就绪队列里的进程放入生产者队列的尾 (*tail)-processli nk=process; (*tail)=process; return ; void freel in k(PCB

19、* lin khead) /清除队列 PCB* p; linkqueue(exe,缓冲区满,进程压入生产者等待队列队尾 return false;else empty-;/缓冲区未满,则进行生产操作 return true; void sig nalempty() 将等待中的生产者进程进入就绪队列 PCB* p; if(hasEleme nt(producerhead) p=getq(producerhead, lin kqueue(p, cout:)等待中的生产者进程进入就绪队列,它的进程号为 numlabele ndl; p=getq(c on sumerhead, lin kqueue(

20、p, cout:)等待中的消费者进程进入就绪队列,它的进程号是 numlabele ndl; full+; void producerr un() /进程运行 if(!waitempty() 缓冲区为空 return; 缓冲区不为空,执行消费者进程 cout:)进程numlabel开始向缓冲区存数productproduct; 放入缓冲区 bufferpoint+;缓冲区指针后移 cout:) 进程numlabel向缓冲区存数操作结束endl; signalfull();等待的消费队列进入就绪队列 li nklist(exe,over); void comsuerr un() if(!wait

21、full() 缓冲区不为空 return; cout:)进程numlabel开始向缓冲区取数product=bufferbufferpo in t-1; bufferpo in t-; cout:)进程numlabel向缓冲区取数操作结束,取数是productprocessli nk; while(p!=NULL) printf(:)进程 d,它是一个,p-numlabel); p-flag=1? cout生产者endl:cout消费者endl; coutvtt* 欢迎光临*numlabel); exe-flag=1 t消费者endl; cout:) 就绪队列没有进程endl; if(hasE

22、leme nt(con sumerhead) cout:) 消费者等待队列中有进程:e ndl; display(c on sumerhead); else if(hasEleme nt(producerhead) ) cout:)生产者等待队列中有进程 :e ndl;display(producerhead);else cout:) 生产者等待队列中没有进程e ndl; cout:)想继续吗?(y/n)endl; c=getchar();ch=getchar();if(c=y | c=Y) Flag=1;else if(c= n | c=N)Flag=O;else Flag=0; cout:

23、)输入有误endl; PCB*p=NULL;coute ndlnum; for(i=0;i nu m;i+) /产生相应的的进程: cout:) 输入1生产者进程endl; cout:) 输入2消费者进程flag=f;/进程标志,1为生产者, 2为消费者 process num+;进程计数器加 1 p-numlabel=processnum; 进程编 号记为进程计数器 p-state=w;/ 置为等待 p-processli nk=NULL; if(p-flag=1) /输入1为生产者进程; cout:)您要产生的进程是生产者 cout:)请输入您要该进程产生的字符 e ndlproduct=

24、ch; product nu m+; cout:)该进程产生的内容 是producte ndl; /输入2为消费者进程; cout:)产生的进程是消费 者,它是第numlabel个进程 i 臺頁甯裁统可供鋼您甬娅話 孕10 * 大需求量灯梱矩阵IHhm】i XxilS程已经田请的资源星灼旳拒阵心llCMtiooJ E 1 e i 1 a a a i e 系统目莉可.用的资粽A呃liJh le 1 = Hiir- 址程名 B. h G a !b r a b c a ii 9 7 10 1 LA 9 6 i 9 id e 1 Z Z 禺舉 ion =L 竹=L X 22 轲0轲 Nk:ed Abe

25、 IB 9 6 B H 6 10 9 ? 11 11 4 5 轻 1 K MM MM M M M M H M M M H MK M H +M: M M MK M MM MM H M M M H M 系统安全。 附: #in clude #in clude #in clude #defi ne False 0 #defi ne True 1 x100100=0;各进程所需各类资源的最大需求 int Avaliable100=0; 系统可用资源 char name100=0; 资源的名称 int Allocatio n100100=0;系统已分配资源 int Need100100=0;还需要资源

26、int Request1001=0; 请求资源向量 int temp100=0;存放安全序列 int Work100=0;存放系统可提供资 源 int M=100;作业的最大数为100 int N=100;资源的最大数为100 void showdata()显示资源矩阵 int i,j; cout系统目前可用的资源 Avaliable:e ndl; for(i=0;iN;i+) coutAvaliablej”; 输出分 配资源 coute ndl; coutMax Allocati on Neede ndl; cout进程名; for(j=0;j3;j+) for(i=0;iN;i+) cou

27、t n amei; void share()利用银行家算法对申请资源 对进行判定 cout请输入要求分配的资源进程号 (0-M-1i;输入须申请的资源号 cinRequestj;输入需要申请的资 源 for (j=O;jNeedij)判断申请是否大于需求,若大于则出错 cout进程i申请的资源大于它需要的资源; cout分配不合理,不予分配! Avaliablej)判断申请是否 大于当前资源,若大于则/出错 cout进程i申请的资源大于系统现在可利用的资源 ; cout分配出错,不予分配!endl; ch= n; break; if(ch=y) cha ngdata(i);/根据进程需求量变换

28、资源 showdata();根据进程需求量显示变换后的资源 safe();/根据进程需求量进行银行家算法判断 void addresources()/ 添加资源 int n, flag; cout请输入需要添加资源种类的数量:; cinn; flag=N; N=N+n; for(int i=0;in;i+) cout名称:; cinn ameflag; cout Avaliableflag+; showdata(); safe(); void delresources()/ 删除资源 char ming; int i,flag=1; cout请输入需要删除的资源名称:; do cinming;

29、 for(i=0;iN;i+) if(mi ng=n amei) flag=0; break; if(i=N) cout该资源名称不存在,请重新输入: while(flag); for(int i=i;iN-1;i+) void cha ngeresources() 修改资源函数 cout系统目前可用的资源 Avaliable:e ndl; for(int i=0;iN;i+) cout n amei:Avaliableie ndl; cout输入系统可用资源Avaliable:Avaliable0Avaliable1Avaliable2; cout请输入各进程的最大需求量 (m*n矩阵)Ma

30、x:endl; cout请输入各进程已经申请的资源量 (m*n矩阵)Allocation:endl; if(flag) cout申请的资源大于最大需求量,请重新 输入!n; while(flag); showdata();/显示各种资源 safe();/用银行家算法判定系统是否安全 while(choice) cout* 银行家算法演示 *e nd cout 1:增加资源 e ndl; cout 2:删除资源 e ndl; cout 3:修改资源 e ndl; cout 4:分配资源 e ndl; cout 5:增加作业 e ndl; cout0: :离开 e ndl; cout* cout

31、choice; case 0: choice=0;break; default: cout请正确选择功能号 (0-5)!fcJ 迸彳呈大小油 讲稈=* I 苜地址 |扌井理大1“ N 最后空闲区内存的个数为2, 2个空闲区的 请輸-入娶守酉己空司的大才 =理 止匕况苕酉己进程为=进程E | 育 P也1 上=0044 7*2 进程六小 大小都是1. (2) 宀酣沟空闲区大小 char *m_addr; /空闲区首地址 struct map *n ext,*prior; ; /定义链表以管理空闲区 struct process un sig ned p_size;/ 进程大小 char *p_ad

32、dr;/进程首地址 ; process array100;/定义数组以管理进程 map * head; /定义头指针 map * cursor;定义指向当前的游标指针 un sig ned siz,room; char choice; /定义分配的整个内存空间的大小 void create();/初始化管理空闲区的链表 void begi n();主体函数 char *lmalloc(unsigned size); / 分配进程函数 void Ifree; /释放进程函数 void prin t_proess();II打印当前进程情况 void ma in ()主函数 create(); be

33、gi n(); void create()II初始化循环链表 head=new map; head-prior=head; head- next=head;II 创建头指针 cursor=head; cout siz; room=siz; head-m_addr=(char *)malloc II 初始化首地址 head-m_size=room; II初始化整个空闲区大小 printf(”分配的首地址:); prin tf(%p,head-m_addr); coute ndl; cout分配的总空间大小: endl; for(i nt j=1;j=1OO;j+) arrayj.p_size=0

34、; I 使其大小全为 0 void begi n() unsigned m size; int i=1; un sig ned num; while(choice!=e) coutendl请选择操作:endl; coutm:分配进程空间endl; coutf:释放进程空间endl; coute:结束操作 choice; if(choice=m) 若选择分配进程 coutendl m_size; if(arrayi.p_addr=lmalloc(m_size) 调用lmalloc,分配内存,若成功分配 arrayi.p_size=m_size;II 给进程数组赋值 coutendl此次 分配进程

35、为:进程itendl; i+; prin t_proess();每次分配进程后,打印 (输出)系统当前进程的总情况 if(array num.p_size=0)II 判断此进程是否驻 于内存 cout无此进程!endl; continue; II 回至U while elselfree(array nu m.p_size,array nu m.p_addr); 执行lfree函数 arraynum.p_size=0; II令进程数组中该进程的 大小置0 cout释放中endl; cout进程num已释放!m_size=size) /判断是否当前空闲区大于进程大小 aa=bp-m_addr; 将

36、空闲区扣除进程大小 /调整空闲区首地址 若该空闲区正好用完 a=bp-m_size; bp-m_size-=size; bp-m_addr+=size; if(bp-m_size=0) if(bp=head while(bp!=cursor);直到正好走遍链表的所有结点 cout对不起,没有可分配的合适空间m_addraa)/如果所释放的进程地址小于第一个空闲区的首地址 if(aa+size=head-m_addr | head-m_size=0) / 进程尾部与下一空闲区粘连 head-m_addr=aa; head-m_size+=size; 修改此空闲区的首地址和大小 else/进程尾部

37、与空闲区不粘连 head=ps; /创建一个新的空闲区结点,记录此次释放进程 /if lse /释放的进程所在内存位置前已有空闲区 bp=head; do bp=bp-n ext; while(bp-m_addr=aa /走到该进程后的一个空闲区结点 if(bp-prior-m_addr+bp-prior-m_size=aa)该进程与前一空闲区粘连 bp-prior-m_size+=size; / 修改空闲区大小 if(aa+size=bp-m_addr / 修改空闲区大小 p=bp; if(cursor=p) /若后空闲区结点为当前游标结点,游标指向上一结点 cursor=p-prior;

38、pt-m_size=size;pt- n ext=bp;pt-prior=bp-prior;bp-prior- n ext=pt;bp-prior=pt/ 为进程创建新 的空闲区结点 else bp-m_addr-=size; bp-m size+=size; /else/lfree 实验项目:请求分页 实验学时:2 实验日期:2013-4-2 实验要求: 实验内容: 以课本126页图4-27的例子,设置物理块为3个,总页面个数为 12个,按照序列输入,记录结果 并与书中结果比较是否符合先入先出算法的结果;然后将输入页面序列颠倒输入,观察并记录结果 =-s1.1.1.Ada i. n.ii s

39、ix y *%*IP T PC 市.戸口辛 w * 削K貝默认=-x衆_示物理块空闹冲亠宀十 戶豐佥謹要苕斟卡尹 3 -1 =2 - =3 1 .以课本126页图4-27中的例子,设置物理块为3个,总页面个数为12个,按照序列输入,记录 结果并与书中结果比较是否符合先入先出算法的结果。 X 3 -X. 2 3 -1 5E 1L 9 1 石 2 X 5 2: 理 名 拜 4 0 2 3 5 不符合先入先出算法 屮MH! 古寸甘.出叭FOffl面芒艳JK注 *默仏=-I義奈鬲冠頭;空屈匚 iff踰卜予堑沖避程奇阳的杓理矩數5工册心 请硕L入亘贡向紊5QT时3.2 27L 2. 占一直 25-1 S

40、53 2G3 453 专0石 /flag:标记当前序号页面是否已驻入内 存(-1:否) block_num:驻留内存时间最长的页面 所在的物理块序号 time标记对应序号的物理块中页面 驻留时间 int i,j,max_stay=0,co un t=0; int get=-1,flag=-1,block_ num=-1; get=j; /物理块j即将(/等待)驻入新页 面 break; for(j=0;jm;j+)查找序号相同的页面 if(Blockj=Pagei) 物理块 j 中页面 与当前期望调入内存的页面相同 flag=j; break; for(j=0;jmax_stay) max_s

41、tay=timej; block_ num=j;/block_ num 标记当前 序号物理块中页面驻留时间最久 if(flag=-1)不存在相同页面 if(get!=-1)/物理块即将(/等待) 驻入新页面 Blockblock_ num=Pagei; timeblock_ num=0; for(j=0;jSize;j+) timej+; coun t+; else 附: #in clude #include 使用setw()时用到的头文件 #include / 使用 getchar()时用到的头文件 using n amespace std; #define Max 30/某进程调入内存中的

42、最大页面数 #defi ne Size 10/系统为某进程分配的最大物理块数 void Init(int Block,int m) /初始化物理块 int i;for(i=0;im;i+)Blocki=-1; void creat(int Page,int n) / 输入页面串引用号 int i;for(i=0;i Pagei; void FIFO(int Page,int Block,int n,int m) /max_stay:比较当前内存中页面驻留的最久时间,count:统计页面置换次数 /get:某物理块是否等待驻入新页面(-1:否) /待调入页面与序号flag的物理块中页面相同 fo

43、r(j=0;jm;j+) timej+; flag=-1; for(j=0;jm;j+)输出物理块中的页面驻入情况 coutsetw (3)Blockj; coutm) coun t=co un t+m-3; cout缺页中断次数为:countendl; void mai n() int n,m,PageMax,BlockSize; cout*先进先出 FIFO 页面置换算法 *endl; coute ndl; cout*(默认:-1 表示物理块空闲)*endl; coutendl请输入系统为进程分配的物理块数(mSize|m1) cout警告:输入的数据错误!e ndl; cout请重新输入

44、物理块数:; else break; In it(Block,m); cout请输入总页面数(n=30):; cinn; coutn请输入页面号引用串:; creat(Page ,n); coutFIFO 算法过程如下:endl; FIFO(Page,Block, n,m); getchar();/直接执行exe文件时做停留查看结果之用 getchar(); 实验项目:磁盘调度 实验学时:2 实验日期: 2013-4-11 实验要求: 实验内容: 磁盘调度: 输入49 38 15 61 28 56访问序列,起始磁盘号为36,比较四种调度算法的访问序列和平均寻道长度, 简述其算法原理 卜,-先来

45、5iJE务-2最煖寻道时间优龙峙.扫描训度储环押描 耳 週出 KK M H H M WHMK M N H M MM h h HHH H MKkh H H HHjHMKh H H HHjHMKh H HHM 融肃术庄列为,4? 38 15 ii 28 5t 的確道号:IS 直也俎福.予列勺49 K灯11 ZB 5t 均寻道札匿: 因为先来先服务的磁盘调度算法是按照进程请求访问磁盘的先后次序进行调度的,所以磁盘请求序 列为:49 38 15 61 28 56,磁盘扫描序列不变,也为:49 38 15 61 28 56。此算法由于没有作任何优化 处理,所以平均查找时间可能较长,在可供选择的算法中平均

46、寻道长度最长为25.6667。平均寻道长 度=(13+11+23+46+33+28)/6=25.6667 最短寻道时间优先算法,考虑了个请求之间的区别,总是先执行查找时间最短的那个磁盘请求,有 较好的寻道性能。因为起始磁盘号为 36,查找时间最短的是 38,接着距离38查找时间最近的是 28, 以此类推,磁盘扫描序列是:38 28 15 49 56 61。平均寻道长度 =(2+10+13+34+7+5)/6=11.8333 hriHHHMhHHKHHMbH 4KNHHMH -2-最短寻道时间优先T-扫描调度悄坏扫描 L区动为 用的当当描掘 准灵入?3寻 49 张 61 1袤示旬外 潮15 ll

47、uB333 扫描调度不仅考虑了欲访问的磁道与当前磁道间的距离,更有限考虑的是磁头当前移动的方向。当 前移动臂的移动的方向为向外,所以扫描序列先向外为:38 49 56 61,沿这个方向扫描到头,改变 臂的方向:28 15。平均寻道长度 =(2+11+7+5+33+13)/6=11.8333 先来:先服务*2* 最短寻道时间优先祠扫描调度M. 退出* 为篇29 列這背 动为I 话当当W道 IAA 寻 2 ie 2 38 4? ee gi s 36 移动的方向!: 请选择算観s Pr*-? S:5 fiy lu= y tQ 冲上沖|曹 附: #in clude #in clude #in clud

48、e #in clude #defi ne maxsize 1000 /*判断输入数据是否有效*/ int decide(char str) /判断输入数据是否有效 int i=0; while(stri!=0) if(stri9) return 0; break; i+; return i; int tran s(char str,i nt a) int i; int sum=0; for(i=0;ia;i+) sum=sum+(i nt)(stri-0)*pow(10,a-i-1); return sum; /* 冒泡排序算法*/ int *bubble(i nt cidao,i nt m)

49、 int i,j; int temp; for(i=0;im;i+) /使用冒泡法按从小到大顺序排列 for(j=i+1;jcidaoj) temp=cidaoi; cidaoi=cidaoj; cidaoj=temp; cout排序后的磁盘序列为:; for( i=0;im;i+) /输出排序结果 /* 先来先服务调度算法 * void FCFS(int cidao,int m) / 磁道号数组,个数为 m int now;/当前磁道号 int sum=0; /总寻道长度 int j,i; int a; char str100; float ave; /平均寻道长度 cout磁盘请求序列为:

50、; for( i=0;im;i+) 按先来先服务的策略输出磁盘请 求序列 coute ndl; coutstr; /对输入数据进行有效性判断 a=decide(str); if(a=0) cout输入数据的类型错误,请重新输入!e ndl; goto B; else no w=tra ns(str,a); /输入当前磁道号 sum+=abs(cidao 0-no w); cout磁盘扫描序列为:; for( i=0;im;i+) /输出磁盘扫描序列 coutcidaoi; for(i=0,j=1;jm;i+,j+) / 求平均寻道长度 sum+=abs(cidaoj-cidaoi); ave=

51、(float)(sum)/(float)(m); coute ndl; cout平均寻道长度:aveendl; /*最短寻道时间优先调度算法*/ void SSTF(int cidao,int m) int k=1; int no w,l,r; int i,j,sum=0; int a; char str1OO; float ave; cidao=bubble(cidao,m); /调用冒泡排序算法排序 coutstr; /对输入数据进行有效性判断 a=decide(str); if(a=0) cout输入数据的类型错误,请重新输入!endl; goto C; else now=trans(s

52、tr,a); /输入当前磁道号 if(cidaom-1=now) cout=0;i-) coutcidaoi=now) cout磁盘扫描序列为:; for(i=0;im;i+) coutcidaoicidao0 while(cidaok =0)j-) coutcidaoj; sum+=cidaom-1-cidao0; ave=(float)(sum)/(float)(m); coute ndl; cout平均寻道长度:aveendl; /*描调度算法 */ void SCAN(i nt cidao,i nt m) /先要给出当前磁 道号和移动臂的移动方向 idao,m); /调用冒泡排序算法排

53、序 cout请输入当前的磁道号:; no w=tra ns(str,a); /输入当前磁道号 if(cidaom-1-now)/右当前磁道号大于请求 序列中最大者,则直接由外向内依次给予各请 求服务,此情况同最短寻道优先 cout=0;i-) coutcidaoi=now) cout磁盘扫描序列为:; for(i=0;im;i+) coutcidaoicidao0j-) coutcidaoj ; /输出向内扫描的序列 for(j=r;jm;j+) coutcidaoj ; /输出向外扫描的序列 sum=no w-2*cidao0+cidaom-1; else 选择移动臂方向向外,则先向外扫描

54、cout磁盘扫描序列为:; for(j=r;jm;j+) coutcidaoj=0;j-) coutcidaoj; sum=-no w-cidao0+2*cidaom-1; ave=(float)(sum)/(float)(m); coute ndl; cout平均寻道长度:aveendl; /*循环扫描调度算法 */ void CSCAN(int cidao,int m) cidao=bubble(cidao,m); /调用冒泡排序算法排序 coutstr; /对输入数据进行有效性判断 a=decide(str); if(a=0) cout输入数据的类型错误,请重新输入!endl; goto

55、 E; else now=trans(str,a); /输入当前磁道号 if(cidaom-1=now) cout磁盘扫描序列为:; for(i=0;im;i+) coutcidaoi=now) /若当前磁道号小于请求序 列中最小者,则直接由内向外依次给予各请求 服务,此情况同最短寻道优先 nowcidao0 coutcidaoj ; /输出从当前磁道向外扫 描的序列 for(j=0;jr;j+) /当扫描完最大号磁道,磁头直 接移动到最小号磁道,再向外扫描未扫描的磁 道 coutcidaoj; sum=2*cidaom-1+cidaol-now-2*cidao0; ave=(float)(s

56、um)/(float)(m); coute ndl; cout平均寻道长度:aveendl; void mai n() int a; int c; /菜单项 int cidaomaxsize; int i=0,co unt; char str100; cout请输入磁道序列(0结束):str; /对输入数据进行有效性判断 a=decide(str); if(a=0) cout输入数据的类型错误,请重新输入! str; /对输入数据进行有效性判断 a=decide(str); if(a=0) cout * e ndl; cout*1.先来先服务 *2.最短寻道时间优先 *3.扫描调度*4.循环扫

57、描*5.退出*endl; cout * e ndl; G:coutstr; /对输入数据进行有效性判断 a=decide(str); if(a=O) cout输入数据的类型错误,请重新输入! endl; goto F;输入错误,跳转到F,重新输入 cout数据输入错误!请重新输入 i真辰1悔改P:件丰诉 弭*肚*甘1帀 甲 二丁三肚 盖 已茗 !* I- ! !l 文件l.ut創建咸功I 列出文件列表查看文件是否创建 lxs t low文件名1 St心寥件霑1 |n(辺件】 ir-it b 【S?计宅 h戶世回主菜 户库 嬰文件 关删打写单 crv4t?l文件書1却應哀件 lit列出列表 河胡

58、宅比容1谩文览 r Im d I文沖容】耨改文件机限 用户I母目录下的文件 1-txt ft 对文件1以“覆盖原文件”方式写入内容hello fun Smi ilt; e 1 浮誓雷探康2.在厢文件泰足写入 氣 耶捎 畀婿输入正文 lie 1 la 读取文件,查看内容是否写入。 ran 户仙11 L110 再对文件1 否写入。 rawri.lfciHl 2.在虑文件未尾蹲h氛取消 以“在原文件末尾写入”方式写入内容 world ”,以#结束写入,读取文件,查看内容是 unXt-eadJl I。 再对文件1 写入。 wu r 1-d 以“覆盖原文件”方式写入内容welcome”,以#结束写入;读

59、取文件,查看内容是否 请选择堅方佥 1*羅羔原文祚 2,在原文件末尾写入筑取消 莽始箱入正尤 wo IcuretfK ruiiTHl uv lcorw- 修改文件1 的权限为只读 文件名1 delcte文件名; open文件呂】 rite文件名: 应诡回主菜 户乍 i 对文件1执行读操作,查看是否能成功读取;再对文件1执行写操作,查看能否成功读取 run Sreadl we leone iun wri tEl 忻无权对文n泌执行吐浙作I 退出程序然后再次进入,以用户a登陆,修改文件1的权限为只写; 目户名 create !_ Li话 readil文件 clinodtr tt-FJ 由建文件 扔

60、出列壌 g 卡名】 riui XL: liKHid i. 輸入文杵仪 11 潜 IJ :n 荣育新的枚限值= 退回主界面以用户 b登陆,对文件1执行读操作和写操作,查看是否成功 囲户h又件夹是空的 mun Xtc-chI 莎弋权对文件法执行此操侗 runXNite 1 请选扌 Z在原文件末尾写入3,取消 ItmXchnoiiiM 愉;”的新E仪限直 30 谀碍下能 31 琴 32 只讫 当匏限设电 融圳户对1*礙写权但有谏权I 退到王界面注册用尸b *: *11j i mr fA3J1i- .Yf用户注册豎nt .用户名I 1 注册战功I 文忖仓I腱文件 list 洌岀列表 件取限 readt

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论