收藏 分销(赏)

操作系统linux版实验报告.doc

上传人:天**** 文档编号:4356733 上传时间:2024-09-12 格式:DOC 页数:28 大小:945.50KB
下载 相关 举报
操作系统linux版实验报告.doc_第1页
第1页 / 共28页
操作系统linux版实验报告.doc_第2页
第2页 / 共28页
操作系统linux版实验报告.doc_第3页
第3页 / 共28页
操作系统linux版实验报告.doc_第4页
第4页 / 共28页
操作系统linux版实验报告.doc_第5页
第5页 / 共28页
点击查看更多>>
资源描述

1、操作系统实验报告(iux版)网络142 潘豹 1999实验一 观察Liu进程状态一、 实验目得在本实验中学习Lix操作系统得进程状态,并通过编写一些简单代码来观察各种情况下,Lux进程得状态,进一步理解进程得状态及其转换机制。二、实验环境硬件环境:计算机一台,局域网环境;软件环境:Linxbuntu操作系统,cc编译器。(四)查瞧“不可中断阻塞”状态(D)创建一个C程序,如nnetus、c,让其睡眠30代码:#ncludeunisd、#incdestdo、hint mai() it =0,j=0,k=0; for(i=0;iiludestdo、hin ain() f(vfork()=0) sl

2、eep(30); rer;实验结果:(五)查瞧“僵尸”进程(Z)创建一个C程序,如omi_statu、c,在其中创建一个子进程,并让子进程迅速结束,而父进程陷入阻塞编译链接,后台运行该程序(后接&),并使用ps命令查瞧运行状态(30s内)代码:icdeincduent man() i(fork()) sleep(300);实验结果:实验二 观察Lux进程/线程得异步并发执行一、实验目得通过本实验学习如何创建Linux进程及线程,通过实验,观察inux进程及线程得异步执行。理解进程及线程得区别及特性,进一步理解进程就是资源分配单位,线程就是独立调度单位。二、实验环境硬件环境:计算机一台,局域网环

3、境;软件环境:LinuxUbu操作系统,cc编译器.三、实验内容与步骤、进程异步并发执行编写一个C语言程序,该程序首先初始化一个nt变量为1,然后使用fork函数创建两个子进程,每个子进程对nt加1后,显示“I m son,con=x”或“I amdauhter, count=”,父进程对count加1之后,显示“Iam ath, cn=”,其中使用cunt值代替。最后父进程使用waitd等待两个子进程结束之后退出。编译连接后,多次运行该程序,观察屏幕上显示结果得顺序性,直到出现不一样得情况为止,并观察每行打印结果中cout得值。代码:inludeistd、h#incdstdio、hnt ma

4、in() pd_ son_pid,augtr_pd; int cout1; so_pdfork(); f(onp=0) count+; pint(”i a so,ont=dn,oun); lse augterpifork(); if(dauhtpid=0) count+; printf(”i m dauhter,ct=,cnt); else count+; printf(i afather,countn”,cont); watpid(sn_pid,ULL,0); waipid(aughterpid,UL,); 2、线程异步并发执行编写一个语言程序,该程序首先初始化一个count变量为1,然后使

5、用phed_ceat函数创建两个线程,每个线程对cou加1后,显示“Iason, cux”或“ amdaghr, cotx,父进程对cnt加1之后,显示“I am father, count=x”,其中使用coun值代替。最后父进程使用pthred_jn等待两个线程结束之后退出。编译连接后,多次运行该程序,观察屏幕上显示结果得顺序性,直到出现不一样得情况为止,并观察每行打印结果中cun得值。代码:inclueunstd、hincuesio、hcdevid dagh(vid *nm)it a=(int )num;*a+=1;prn(”i am daugher,untd,*a);void o(oi

6、d*nu)nt* a=(nt )num;*a+=1;ritf(i m son,co%d,*a);int main()pthread_ sn_tid,dahertd;int cun=1;pthrad_cet(son_td,NUL,sn,&coun);prad_eate(ghtrt,NULL,dagter,&t);coun+;pintf(imparent,cot:=%dn”,con);ead_joi(ontid,NUL);thread_join(dauhter_tid,UL);ret ;实验结果:实验三 使用信号量进行互斥与同步 一、 实验目得本实验介绍在Linu中使用信号量进行进程同步、互斥得方

7、法。读者可以通过实验进一步理解进程间同步与互斥、临界区与临界资源得概念与含义,并学会Liux信号量得基本使用方法。二、实验环境硬件环境:计算机一台,局域网环境;软件环境:Linux Uunu操作系统,gcc编译器.三、实验内容与步骤三、实验内容与步骤(一)参考:PSIX以及sm VSyteV:U众多版本中得一支,最初由ATT定义,目前为第四个版本,其中定义了较为复杂得API。POSX:rtale Oprating Sste Interfac,IEEE为了统一Unx接口而定义得标准,定义了统一得AP接口。Linux即支持System PI,又支持PSIX PI(二)实验步骤st1:通过实例查瞧不

8、使用互斥时得情况 (假设文件命名为_sem、c)编译链接,同时运行两个进程,显示结果代码:#icudstdi、h#incluesli、hint min(it ac,char argv)chr mesae=x;int i=0;if(arg1)mesage=rv1;or(i=0;i;i+)prtf(”%c,messag);fs(stdou);slee(rad()%3);pntf(c”,me);fflush(stu);slp(n()2);sep(0);exit;实验结果:stp2:使用信号量来对临界资源进行互斥 (假设文件命名为witsem、c)编译链接,同时运行两个进程。观察X与O得出现规律,并分

9、析原因。代码:#inludestdi、hincluesdlib、inlde1)msage=argv10;sem_*mutex=sem_open(mye”,O_CREA,06,1);fr(i=0;1;i+)sem_wait(ute);rtf(c”,message);flush(stdut);sleep(rand();rint(c,msage);ffls(stdou);sem_post(te);le(an());le(10);smcle(utex);semnln(”s”);exi(0);实验结果:tep3:使用信号量来模拟下象棋红黑轮流走子得情况编写两个C语言程序blackhess、以及red_c

10、hess、c,分别模拟下象棋过程中红方走子与黑方走子过程。走子规则:红先黑后,红、黑双方轮流走子,到第1步,红方胜,黑方输。代码:红色棋icluest、includestdib、h#incluenclude#icldesys/st、hint main(int arc,ca argv)nt i=0;sem_ hei=semope(chessbse”,OCREAT,066,);sem_t ngsemopn(ss_resem,O_REAT,66,);for(i=0;i10;i+)swat(hei);if(!9)printf(Redcss hd move,blac,chess go!n);elsrin

11、tf(ed cess win!n);flsh(sou);sem_post(hon);seep(10);se_lose(hei);sem_close(hong);seulik(”cess_redsem);m_nlnk(ches_blackem”);ext(0);黑色棋 :#ncludestdo、inlueicludess/tat、int main(int ar,char *argv)t i=0;semt *heisem_open(chessback_em”,OCREAT,06,1);sem_t *hongsm_open(”ces_rede,O_CREAT,066,);for(=0;10;)sem

12、_wait(hog);i(i!=)pritf(ack chess ha movd,red chess go!”);elserint(Blak chewin!);fflh(stdut);m_ot(ei);slee(10);sm_cl(hi);sem_clse(hong);seunlik(”chess_edse);sem_unn(”ches_lack_sm”);exit(0);实验结果:实验四 作业调度算法模拟一、 实验目得(1)掌握周转时间、等待时间、平均周转时间等概念及其计算方法。(2)理解五种常用得进程调度算法(FFS、SJF、HRF、PF、R),区分算法之间得差异性,并用C语言模拟实现各算

13、法。(3)了解操作系统中高级调度、中级调度与低级调度得区别与联系.二、实验环境硬件环境:计算机一台,局域网环境;软件环境:Linux Unt操作系统,gcc编译器。三、实验内容与步骤本实验所选用得调度算法均默认为非抢占式.实验所用得测试数据如下表所示。本实验所用得测试数据如下表所示表 实验测试数据作业Id到达时间执行时间优先权85002815301383025220584515010178205作业得数据结构:typde struct nointnumber; / 作业号int rhtime;/ 作业抵达时间int edtme;/ 作业得执行时间int piviege;/作业优先权float

14、exclent;/ 响应比int srt_tim;/ 作业开始时间ntwit_te;/ 等待时间it vised;/ 作业就是否被访问过bool isreached;/ 作业就是否已经抵达jo;代码:#ince stdo、hlud strin、h#nclue #icudstdol、h/最大作业数量cot int AXOB=0;/作业得数据结构typedef suct nodein nuber;/作业号 treachtm;/作业抵达时间it needtm;/作业得执行时间ntpivilege;作业优先权float excllnt;/响应比n tar_time;/作业开始时间itwit_time;

15、/等待时间visted;/作业就是否被访问过bool srached;/作业就是否抵达jo;ob jobs50;作业序列i uanti;/作业数量/初始化作业序列voiiialjobs()int i;r(0;iMAXJOB;+)jbi、mber0;jbi、rachtim=0;jobsi、ivleg=;jobsi、xcllnt=0;jobsi、strt_time=;obs、wat_time=0;osi、isited=;obsi、iseche=lse;uantity0;/重置全部作业信息vdreset_ino() ii;fr(=0;iMAXJB;i) jobsi、startie0; joi、wit

16、_tie=0;obsi、ised=; /查找当前curent_tim已到达未执行得最短作业,若无返回1int fimijob(job job,nt u)int minob=1;/jbs0、ned_time;it inlo=-;int ;for(i=0;iun;i+)if(minloc=-1)if( obsi、sreached=true & josi、sied=0)injobjbi、ee_time;iloc=i;ls i(mnjbobsi、ne_time&oi、isite=0&jobs、srah=tre)minjob=jobi、nee_ime;mnloc=i;etn nloc;查找最早到达作业,

17、若全部到达返回-1、int idrerlyjo(job jobs,intcon)int realyoc=;treayjob=;int i;for(i=;in;)i(rrlyoc=1)if(jbsi、viite=0)relyc=i;rarljo=jobi、rechtime;eseif(rearlyjobjbi、each_timbs、sitd=0)raryjo=jbsi、rac_time;rearylc=;return erlloc;/读取作业数据vid reobta()FLE f;char fnae20;t i; /输入测试文件文件名prinf(”please inpt job data ”);

18、scaf(s,fme);if(p=fopen(fname,))=NLL)printf(”rror, e,ese check :n);el/依次读取作业信息ile(!fof(fp))if(fsanf(,d% d”,obsquantity、numer,jobsntity、reach_tm,&jobsqunity、ime,josqatty、rivilege)=)quantity+;/打印作业信息rntf(outt theor job datan”);prif(”-n”);pnf(tjbIDtreactieteedtimepriilegen”);for(i=0;iny;+)printf(”t%dt-8

19、%8n,jb、numr,jobi、reachtime,jobsi、ned_tie,obsi、privig);/FFvoidFC() nt; int curen_time=0;it lo;i toalwaitie=;intol_rndtime=0;/获取最近到达得作业lo=ndralyo(ob,quni);/输出作业流pitf(”nnFCS算法作业流n”);prnf(-n”); prntf(tjbItreachmetsarttitwaittimetroundtien”);currenttim=jobl、ac_ie;/每次循环找出最先到达得作业并打印相关信息r(i=;iquatit;+) if(j

20、osloc、each_timecurrt_te)jolo、stattm=oloc、reh_im;currettme=jobs、rech_tie;lsejobslc、star_ime=currenttm;obloc、waittie=crrnt_time-obsloc、each_im; prit(t%-8dt%-8dt%8t%-8dt8dn,lc+1,jobsl、rach_te,obsoc、strt_time,josloc、wa_ie,os、wittime+jobsc、nee_t);jobslc、vitd1;crentte+=jobslo、needime;total_waitime+=jslo、w

21、itime; tta_rdtetta_rndtime+joslc、wt_tie+jobslc、nd_tie;/获取剩余作业中最近到达作业loc=indrelj(job,quatity); printf(”总等待时间:8d总周转时间:-dn,oal_aitme,total_rontime);rintf(“平均等待时间: %4、2f 平均周转时间: %、2fn”,(flot)totl_waitime(uatiy),(flot)totalountime(uantity); /短作业优先作业调度vid SFJhulejo(b jos,in cunt)nt ma() initial_jobs();ead

22、Jobdata(); FCFS();esetifo();SJschdeo(obs,quati);ysm(pase”);return 0;实验结果:实验五 inx内存分配一、 实验目得1、了解Linux内存得分配与虚拟内存管理得原理,学习如何使用al动态申请内存,了解动态申请与静态申请得区别。2、深入理解Linu得内存布局:代码段、数据段、SS段、堆栈段、堆二、实验环境硬件环境:计算机一台,局域网环境;软件环境:Linx buntu操作系统,c编译器。三、实验内容与步骤第一部分:编程分析Liu中内存动态申请与内存静态申请得区别 要求: 1、编写一个Lnux C程序,在该程序中使用定义一个全局变量

23、,以及使用mlloc申请一段内存(可大于物理内存大小,理论上在位系统中可以申请小于G空间,但由于aloc要求申请连续得空间,所以能申请到得空间一般在2G以下)。2、打印出全局变量得起始地址,以及moc分配得内存得地址;3、观察运行结果,并分析说明结果得地址就是否就是物理地址.代码:iudesti、hicludesdlib、hint int128;t main()hr* puf(char*)mallc(iz(har)1024*104*102);(pt)prinf(”the ddres ofpint s %n,pint);if(f)n(e addres of pbuf sxn”,puf);if(p

24、bu)fee(puf);buf=ULL;retu0;实验结果:第二部分:进一步了解Lnu内存得分配与虚拟内存管理得原理、了解inux得内存布局:代码段、数据段、BS段、堆栈段、堆.要求:1、编写一个Linux C程序,在该程序中定义初始化全局变量、未初始化全局变量、初始化静态变量、未初始化静态变量、局部变量、使用malloc分配得局部变量2、打印出各种变量得得起始地址代码:#includestdi、h #inlude tlib、/定义两个初始化得全局变量t dat_va0 1; nt ata_ar1 = 0;定义两个未初始化得全局变量int bss_ar0; intbss_r1; int ai

25、n() /分别定义一个初始化与一个未初始化得静态变量 scin dta_vr2 = 0; stati in bssvr2;/定义两个局部变量 int stack_var = 1; n stackvr ; it stack_var = ; pintf(”-TEXT Segme-n); prntf(”ddre ofmin: pn, main); pritf(-DATA Sement-n”); print(”rss f dta_vr0: %pn”, data_r0); rintf(”Adres o daa_var1: pn, &da_var1); rtf(dress f dar2: p, data_

26、vr2); rintf(”-BSS Segment-n”); prntf(”ddressofbss_var0(BSSSmet): %pn”, bsr0); prnf(”Adrs of bsvar1(BSS gment): %pn”, ss_var1); prnt(Addrs of bss_v2(BSS Segmt):pn”, bss_var); prif(-STAK Segment-”); printf(”Adrss ofsk_0: n, stac_var0); pint(Ades f takvar: pn”, &tack_va1); pintf(”Addressofstak_var2: %p

27、n”, sack_v2); /使用mloc分配三个大小为102B得内存 c heap_vr =(car)aloc(1024); char he_var1 (char)allo(10); char hea_var2 (cha)mlc(102); 使用mllc分配三个大小为512M得内存 hmavar0 (har*)maloc(1024 104 12); char* mmapvar1= (cha)c(1* 14 1); char map_var2 =(cha*)maloc(2 102 * 512); intf(-EAP Segment-n”); f(heapvr) rintf(ddrss ofhe

28、pvar0:pn”,ea_vr0); re(heap_var0); ea_ar =NULL; if(hava1) pritf(ddesof he_var1:%pn”, heapvr1); re(heapvr1); hap_ar = UL; i(heap_var) printf(”Adss f eaar2:n,ea_ar2); fr(hea_r); hea_var2 = NLL; prnt(”-map-n); i(mmap_va0) pint(Addres f mmap_var0:pn”, mm_va0); free(mmaar0); ma_var0 = UL; if(mma_va1) nt(A

29、ddressfmmp_var1:%pn, ma_var1); fre(mapvar); ma_va1 = ULL; if(mmapva2) rintf(”Addres of mmapvr2:n,m_var); fre(ma_var2); map_var = NULL; retur0; 实验结果:实验六 页面置换模拟程序设计一、 实验目得1、通过软件模拟页面置换过程,加深对请求页式存储管理实现原理得理解2、理解与掌握OPT、IF与LR三种页面置换算法,深入分析三者之间得优缺点.二、实验环境硬件环境:计算机一台,局域网环境;软件环境:Lin uu操作系统,cc编译器。三、实验内容与步骤代码:inc

30、ldetdo、hiluestdlib、ldestring、#ncluunt、h#defie VMPG3#dfine PM_PAG 4ne OAL_INSTR 320defi NTR_PR_PAGE 1dfineOPTfine IFO 2defin LR 3tyedf stru int vn; nt pmn; int exist; t tim; vageiem; vag_item page_tableV_PG; vpe_item pa_bimaPMPAE;typdetuct int nm; int vpage; itffst; int infow; instr_itm; institm nrarayTOTLIS;stru ns_flow intr_emistr; sructinr_flownex; ;ct inst_lo_hed i nm; truc instr_fnxt; ;struct nt_fow_ead ifowhead; int painm=; ntrrepce_alg1; void nit_ata(); od

展开阅读全文
部分上传会员的收益排行 01、路***(¥15400+),02、曲****(¥15300+),
03、wei****016(¥13200+),04、大***流(¥12600+),
05、Fis****915(¥4200+),06、h****i(¥4100+),
07、Q**(¥3400+),08、自******点(¥2400+),
09、h*****x(¥1400+),10、c****e(¥1100+),
11、be*****ha(¥800+),12、13********8(¥800+)。
相似文档                                   自信AI助手自信AI助手
搜索标签

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服