欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    2023年操作系统进程同步实验报告.docx

    • 资源ID:86738713       资源大小:22.84KB        全文页数:8页
    • 资源格式: DOCX        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    2023年操作系统进程同步实验报告.docx

    实验三:进程同步实验一、实验任务:(1)掌握操作系统的进程同步原理;(2)熟悉1 i nux的进程同步原语;(3)设计程序,实现经典进程同步问题。二、实验原理:(1 )P> V操作PV操作由P操作原语和V操作原语组成(原语是不可中断的过程),对信号量进行操 作,具体定义如下:P(S):将信号量S的值减1,即S=S-1;假如S3 0,则该进程继续执行;否则该进程置为等待状态,排入等待队列。V (S):将信号量S的值加1,即$=5 + 1 ;假如S>0,则该进程继续执行;否则释放队列中第一个等待信号量的进 程。(2)信号量信号量(sem叩ho re)的数据结构为一个值和一个指针,指针指向等待该信号量的下一个 进程。信号量的值与相应资源的使用情况有关。当它的值大于。时,表达当前可用资源的数 量;当它的值小于0时,其绝对值表达等待使用该资源的进程个数。注意,信号量的值仅能由 PV操作来改变。一般来说,信号量N 0时,S表达可用资源的数量。执行一次P操作意味着请求分派一 个单位资源,因此S的值减1;当SvO时,表达已经没有可用资源,请求者必须等待别的进程 释放该类资源,它才干运营下去。而执行个V操作意味着释放一个单位资源,因此S的值 加I;若S£0,表达有某些进程正在等待该资源,因此要唤醒一个等待状态的进程,使之运营 下去。(3) 1 in ux的进程同步原语wait ();阻塞父进程,子进程执行;reader10reader15reader220reader225reader230reader235reader240reader245reader250reader255reader260reader265reader270reader275reader280reader285reader290reader295Read 2exit+count=0call writerwrite 0write !write :iewrite :L5write 20write 25write 30write 35write 40write 45write 50write 55write 60write 65write 70write 75write 80write 85write 90write 95write finish!#i n elude < s y s /ty p os. h >#in c lude <sys / ip c . h>key t ft o k (c h ar * p a thnam e , char pro j );它返回与途径 p ath n amc 相 相应的一个键值。i n t semge t (key_ t key, in t n sems, int semflg)参数key是一个键值,由f t o k获得,唯一标记一个信号灯集,用法与m s g ge t ()中 的key相同;参数n s ems指定打开或者新创建的信号灯集中将包含信号灯的数目;semflg 参数是一些标志位。参数key和semf 1 g的取值,以及何时打开已有信号灯集或者创建一个 新的信号灯集与msggetO中的相应部分相同。该调用返回与健值ke y相相应的信号灯集 描述字。调用返回:成功返回信号灯集描述字,否则返回一1。int semop(int sem i d , st r u c t semb u f * sop s , u nsi g ne d nsop s );semid是信号灯集I D , sop s指向数组的每一个sembu f结构都刻画一个在特定信号灯 上的操作。nsops为sops指向数组的大小。 i n t semctl (int sem i d, i n t semnum,in t emd, u n ion semun arg)该系统调用实现对信号灯的各种控制操作,参数sem i d指定信号灯集,参数emd指 定具体的操作类型:参数semnum指定对哪个信号灯操作,只对几个特殊的c md操作故 意义;ar g用于设立或返回信号灯信息。三、实验源程序:# incl u de<s y s/1 ypes.h>i n clud e <s y s / ipc. h ># i nc 1 ud e <sy s / s em. h >i n cl u d e <e r rn o . h># i nc 1 u de<s t d 1 ib. h>i nelu d e< s t dio.h># inc 1 ude< f cntl. h > #include<u n ist d . h>i ncl u de <stri n g.h># include <sys /st at.h>in c lude <sys / t ypes.h># i n elude <sys / ip c .h>i ncl u d e < s ys/ s h m.h># defin e P ERM S_I RUSR I S JWUSRd efine S E MKEY (key_t) 0 x 200t y pedef u n i on _s e n um 1 n t va 1 ;st r uct s emid_ds * b u f;ushor t * a rray;)s e mun;i nt s emi d ;s t atic in t c o u nt= 0 ;F I LE*fp,* f pl,* f p 2 ;s t r u ct sembuf prmutex= 0 1 , 0 ),pwmu t ex= 1,- 1 ,0 ,ps= 2, -1,0; stru c t sembuf v r mu t ex=(),l,(),vwmu t ex= 1, 1 ,0 , v s= 2, 1 ,0);i n t in i tsem ()(semun x;x . v a 1=1;if(semid=sem g et(SEMKEY,3,0 6 00|IPC_CRE AT I IPC_EX CL)=-1)if(errno=E EXIST)semid=semg e t(SEM KEY, 3,0);i f (s e mctl(semid, 0, S ETV AL,x)= = - 1 )(p e r r or(" s emctl fa i 1 e d n n );retur n(-l);Ii f (semctl (semidj , SETVAL,x) =-l)(p er r or("semc t 1 fa i 1 ed n ");ret u rn(-l);)if (semct 1 (semid,2, S ETV A L ,x)=-l)(p err o r ("semctl f a ile d n ");re t urn(-l);1r e t u rn(semid);)ma i n () i m i,j, k;sta t i c in t a 30;int s hmid;i n t *pint,*pint2,a d dr, ad d r2;for(i=0; i<30;i+)a i=i;1if ( s hm i d= s hmg e t(IPC_PRIVATE,4,PERM)= =- 1 ) fpri n tf(stde r r ,MCr e a t e S h a re Memory Err o r: % s n a",strer r o r ( e r rno);ex i t (1);)a ddr=sh m at( s h mid,0, 0 );p i nt=( i nt*)addr;*pint=O;s emid=init s e m();i f( f ork() =0 ) /wr iters emop ( s e mid,&pwmutex);pri n t f ("call w r it e rn");f pl=fopen (na.tx t ",“w “);for(k= 0 ;k< 2 0;k +)(fprint f (fpl, " % d nu,5*k);o p r i n t f(Mwrite % d n ”, 5* k );)fclose (fpl);pr i ntf("wr i te fi n i s h! n ");s emo P (semi d , & v wmutex, 1);e xit(O);1e 1 s e(i f (fork ()=O)(/re a d e r 1fisemop(semid,&prm u lex, 1 );a d dr2=shmat ( s hm i d, 0 , 0 );pint 2=(i nt*) addr2;«> i f(*pint 2 =0) semop (sem i d, &pwm u te x J);* p i n 12=* p int 2 +1;printf("re a der 1 enter- co u nt=%d n ", * p i n t2);®semop( s e mi d ,& v rm u t e x ,1);fp=fopen(na.t x t ",丁);while(! f eof (fp)(fscan f ( f p J%d " ,& i );pri n tf("reader 1 % d n " J );)semop(sem i d,&prmutex, 1);* p int 2 =*pint 2 1 ;prin t f(*'read e r 1 e x it- count=%dn", * p in t 2);/ c ount=count-1 ;/prin t f (" c ou n t=%dn",co u n t);i f(*pi n t2=0) semop(semid, &v wmu t ex, 1);s e mop (semi d ,&v r mut e x,l);e x i t(0);1else i f(fo r k() = 0 ) /reader(sc mop (semid, &prmutcx, 1);a ddr2= s h m a t(shmi d ,0,0);pin t 2= (in t*)add r 2;if(* pint 2=0) s emop(semid,&pwmu t ex, 1);*pin t 2=*p i n t 2 +1;printf("R e a d 2 enter+4- coun t =%dn " ,*pint2);/ / p rintf(KRead 2 cou n t=%dnn,cou n t);/c o un t = 2 ;/ / prin t f( " c o unt=%dnH, co u nt);semop(sem i d,& vrm u t ex, 1 );fp=fopen ("a. t xtn,u r ");while(! fe o f(fp) fscanf(fp;'%d ",&i);print f ( " r e a der 2 %dn ", i );)sem o p(s e m i d,&prmu t ex,l );/ / cou n t=c o u n t -1 ;*pint 2 =*pint2-1 ;printf( n Read 2 exit+ c oun t =%dn", *p i n t 2 );/ p r i n t f ("R e ad 2 c o un t =%dn n ,count);if(*p i nt2 = =O) s e m o p( s e mid,& v wm u t e x ,1); semop(s e m i d ,&vrmutex,l);e x it(0);)四、实验结果:emcxademo - desktop : */Downloads$ gcc a.c -o a.exei.c: In function 'main:i.c:69: warning: assignment makes integer from pointer without a casti.c:94: warning: assignment makes integer from pointer without a casti.c:121: warning: assignment makes integer from pointer without a castwrite write write write write write write write write write write write write write write write write write write writedemodemo-desktop:*/Downloads$ ./a.exe writer6 5101520253035404550556065707586859095finish!demcxademo-desktop:*/Downloads$ Read 2 enter+ count=lreader 1 enter-count=2reader 1 0reader 1 5reader 1 10reader 1 '15reader 1 20reader 1 25reader 1 30reader 1 35reader 1 40reader 1 45reader 1 50reader 1 55reader 1 60reader 1 65reader 1 70reader 1 75reader 1 80reader 1 85reader 1 90reader 1 95reader 1 exit-count=lreader 2 6reader 2 5

    注意事项

    本文(2023年操作系统进程同步实验报告.docx)为本站会员(太**)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开