




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、华南理工大学操作系统课程实验报告实验概述【实验目的】1. 掌握进程的概念,深入理解进程的含义。认识并理解并发环境中进程执行的实质问题,了解构成并发机制的进程创建过程;2. 了解在进程创建后通过对进程控制的系统调用,可实现对进程的有效控制。掌握在进程执行中对进程进行睡眠、同步、撤消等控制方法;3分析进程竞争资源的现象,学习解决进程互斥的方法。【实验内容】1、创建新的进程;查看运行进程;换出某个进程;杀死运行进程。2、采用写者优先重写P94的读者-写者问题,并通过一个读写序列,将算法与读者优先算法进行比较。3、P98的53题的上机作业。【实验原理】1.简述调用fork创建新进程的过程。fork()
2、用于创建新的进程,所创建进程为当前进程的子进程,可以通过fork()函数的返回值来控制进程是在父进程中还是在子进程中。如果运行在父进程中, 则返回PID为子进程的进程号,如果在子进程中,则返回的PID为0。2简述信号量的作用及使用方法。作用:多进程资源共享时,使用信号量,避免产生死锁。使用方法:信号量是一个整数;大于或等于0时代表可供并发进程使用的资 源实体数;小于0时代表正在等待使用临界区的进程数; 用于互斥的信号量初始 值应大于0 ;只能通过P、V原语操作而改变。【实验环境】运行电脑系统:win7所用软件:VMware 9.0.0.0模拟系统:Ubu ntu实验内容【实验过程】(实验步骤、
3、记录、数据、分析)1、创建新的进程:使用fork ()函数查看运行进程&换出某个进程:使用execl换出进程,并且用PS来替换以达到 查看进程的效果杀死运行进程:在父进程后使用 kill函数代码:#i nclude#in clude#i ncludev un istd.h#in elude int main()pid_t pid;pid = fork(); / 创建进程if(pid=0)prin tf( I am the child, my pid is %d!n, getpid();execl( /bin/ps, ps, r, NULL);/ 查看进程和替换进程elsesleep(2);pr
4、in tf( I am the pare nt, my pid is %d, my child pid is %d!n, getpid(), pid);kill(getpid(),SIGTERM); / 杀死进程prin tf( Not kill);运行结果:COMMANDPS r121B1, my child pid is 12182!limaoubuntu:*$ ./createfork I am the child, my pid is 12182?PID TTYSTATTIME12102 pts/1R+6:00I am the parent, my pid is 已终止 limaoub
5、untu:$ |结果分析:如图所示,在调用了fork()函数后,程序先创建了子进程,然后进程被execl替换成ps,显示出了当前正在运行的进程,最后父进程运行,由于执行了 kill()函数,所以后面的printf里的内容并未打印出来。2采用写者优先重写P94的读者-写者冋题,并通过一个读写序列,将算法与读者优先算法进行比较。代码:#include unistd.h #i nclude stdio.h #i nclude stdlib.h #i nclude sig nal.h #i nclude pthread_mutex_t rmutex;/控制对rc的访问pthread_mutex_t w
6、mutex;/控制对wc的访问pthread_mutex_t readDB;/用于写进程对读进程的互斥pthread_mutex_t writeDB;/用于读进程对写进程互斥和写进程之间的互斥int rc = 0;/正在读或者即将读的进程数目int wc = 0;/即将写的进程数目pthread_t n tid;void read_data_base()pthread_t tid;tid = pthread_self();printf(reading,tid is %dn, (unsigned int)tid);sleep(2);void write_data_base()pthread_t
7、tid;tid = pthread_self();printf(writing,tid is %dn, (unsigned int)tid); sleep(2);void *reader(void *ptr)prin tf(reader come in g, ready to read. n); pthread_mutex_lock(&wmutex); pthread_mutex_ un lock(&wmutex);pthread_mutex_lock(&rmutex);rc = rc + 1;if(rc=1)pthread_mutex_lock(&readDB); pthread_mutex
8、_ un lock(&rmutex); read_data_base();rc=rc-1;if(rc=0)pthread_mutex_ un lock(&readDB);pthread_mutex_ un lock(&rmutex); return (void *)0);void *writer(void *ptr)printf(writer comeing, ready to write.n);pthread_mutex_lock(&wmutex);wc = wc + 1;if(wc = 1)pthread_mutex_lock(&readDB); pthread_mutex_ un loc
9、k(&wmutex);pthread_mutex_lock(& writeDB); write_data_base();pthread_mutex_lock(&wmutex);wc = wc - 1;if(wc=O)pthread_mutex_ un lock(&readDB);pthread_mutex_ un lock(& writeDB); pthread_mutex_ un lock(&wmutex); return (void *)0);int main(v oid)pthread_mutex_i nit(&wmutex,0); pthread_mutex_i nit(&rmutex
10、,0); pthread_mutex_i nit(&writeDB,0);pthread_mutex_i nit(&readDB,O);pthread_create(&n tid,NULL,reader,NULL); pthread_create(&n tid,NULL,reader,NULL); pthread_create(&n tid,NULL,writer,NULL); pthread_create(&n tid,NULL,writer,NULL); pthread_create(&n tid,NULL,reader,NULL); pthread_create(&n tid,NULL,
11、reader,NULL); pthread_create(&n tid,NULL,reader,NULL); pthread_create(&n tid,NULL,writer,NULL); pthread_create(&n tid,NULL,writer,NULL); pthread_exit(void *)pthread_self(); exit(O);运行结果:llmaoiibijntu:5 time ./writerFirst ready to read -1266488464reader comeing, readingftid is 曲炖工comeing F reader com
12、eing, ijfi面 comeing f reader c&meing P ”丄leF comeing F 讨屯酊comeing, readfiP comeing, 凹后 comeing F wFiring.tid is writing,tid is writingttid is writing,tid is reading,tid is reading.tid is reading,tid is reading.tid isready to vrite ready to read. ready to write, ready to read. ready to vrite ready to
13、 vrite, ready to read ready to read. *1274881168 -1283273872 -1241316352 -123291764S -1255695760 249763656 *1224524944 -1216132248realU5ergml2.S12s5SB7BBBS*-0mO.0O4s优先完成写操作,结果分析:写者优先就是说当等待队列中既有读者又有写者时, 从结果来看,代码是正确的。对比读者优先和写者优先,可以看出,写者优先会 比读者优先慢一些,这是因为写操作是不能同时运行, 会降低并行度。所以读者 优先的效率会略高于写者优先。3、编写一个使用线程并
14、共享一个公共缓冲区的生产者-消费者问题。但是,不要使用信号量或任何其他用来保护共享数据结构的同步原语。直接让每个线程在需 要访问时就访问。使用sleep和wakeup来处理满和空的条件。观察需要多长 时间会出现比较严重的竞争条件。例如,可以让生产者一会儿打印一个数字,每分钟打印不要超过一个数字,因为I/O会影响竞争条件。(课本98页作业题53) 代码:#i nclude #i nclude #defi ne MAX 1000000000/缓冲区中的槽数目#defi ne N 5pthread_mutex_t the_mutex;pthread_c ond_t con dc, con dp;in
15、t count = 0;void *producer(void *ptr)int i;for(i=1; i= MAX; i+)if(co un t=N)pthread_co nd_wait(&con dp, &the_mutex);coun t=co un t+1;sleep(1);if(i%60=0)prin tf(r unnin g.%dn,co un t);if(co un t=1)pthread_c on d_sig nal(&con dc);return (void *)0);void *con sumer(void *ptr)int i;for(i=1; i = MAX; i+)i
16、f(co un t=0)pthread_co nd_wait(&con dc, &the_mutex);coun t=co un t-1;sleep(2);if(cou nt=N-1)pthread_c on d_sig nal(&con dp);return (void *)0);int main()pthread_t pro,c on;pthread_mutex_i nit(&the_mutex,0); pthread_co ndn it(&con dc,0);pthread_c ond_in it(&con dp,0);pthread_create(&con, NULL,c on sumer,NULL);pthread_create(&pro,NULL,producer,NULL);pthread_exit(void *)pthread_self();return 0;结果(运行了 15分钟左右,此时程序并未停止,但却不再打印):limaoubuntu:$ time ./producer consumerproblemrunning 4runmng* *4running.,.4running.4running.,4running*.*4结果分析:代码会可能会出现竞争条件,其原因是对count的访问未加限制。有可能出现如下情况:缓冲区为空,消费者刚刚读取count的值
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 学校生物教育科研方案计划
- 品牌资产管理的工具和方法计划
- 跨境教育的文化适应与教育模式创新
- 生物教学主题周活动安排计划
- 购物中心的生态化改造与可持续发展
- 高效商务演讲英语口语表达的艺术
- 财报中的商机解析与策略
- 项目驱动下设计艺术的实效性提升路径
- 超市防损防盗策略保障商业安全的核心措施
- 高中语文作文团结才是力量
- 2023年高考真题-地理(天津卷) 含答案
- 办公场所修缮施工方案
- 2025年公务员考试《行测》模拟题及答案(详细解析)
- 2024年黑龙江省牡丹江市中考历史试卷
- 2024员工质量意识培训
- 高速公路日常清扫与养护方案
- 风电epc合同模板
- 2024年新人教版一年级数学下册《第2单元第5课时 20以内的退位减法解决问题(1)》教学课件
- 2022年陕西省普通高校职业教育单独招生统一考试语文甲(A)试题
- DB11T 212-2017 园林绿化工程施工及验收规范
- 2024-2025学年初中信息技术(信息科技)第二册河北大学版(第3版)教学设计合集
评论
0/150
提交评论