




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
施工组织设计施工组织设计11页脚内容11页脚内容《操作系统》实验报告年级、专业、班级姓名实验题目多线程和多 进程的管 理 实验时间实验成绩实验地点实验性质□验证性□设计性 ■综合性教师评价:□算法/实验过程正确;□源程序/实验内容提交 □程序结构实验步骤合理;□实验结果正确; □语法、语义正确; □报告规范;其他:评价教师签名:一、实验目的了解操作系统中常见的进程调度算法了解在 linux中利用多线程模拟实现 FCFS,SJF,RR的调度过程。了解进程同步的特点,掌握利用信号量实现进程间同步的的方法。了解哲学家问题中进程之间的相互制约关系,能够合理的设置信号量。了解 Linux系统下创建多线程的原理及使用方法,模拟哲学家问题的实现。二、实验项目内容一:本实验利用线程模拟进程,实现进程间的调度算法。主要有以下内容:创建主线程,主线程的工作包括:创建线程,线程的拟 PCB;线程的调度。调度的本时间1s。主线程创建 20线程,实现 FCFS调度、SJF调度、RR调度、级调度和多级调度,计算调度的时间。其中级调度和多级调度。线程,在其间,其用的时间号,3线程用了0的 U时间,“:0。二:根据哲学家进程间的相互制约关系,设置合理的信号量及信号量初值。创建 5线程,模拟 5哲学家进程。在哲学家线程之间通过信号量的 P,V操作,实现线程之间的同步关系。、实验过程或算法(源程序)FCFS.c:#include<stdio.h>#include<stdlib.h>#include<pthread.h>#include<unistd.h>#include<time.h>#defineN20structPCB{pthread_tthreadId;intthreadNum;intarrivalTime;intburstTime;intpriority;};structPCBp[N];intrunTime=0;intwaitTimeList[N]={0};void*thread(void*in){inti,num;for(i=0;i<N;i++)if(p[i].threadId==pthread_self()){num=i;break;}waitTimeList[num]=runTime;runTime+=p[num].burstTime;printf("Thread%d:%d\n",p[num].threadNum,runTime);pthread_exit((void*)0);}intmain(){srand((unsigned)time(NULL));inti,j;for(i=0;i<N;i++){p[i].arrivalTime=rand()%201;p[i].burstTime=rand()%11+1;p[i].priority=rand()%6+1;p[i].threadNum=i;}for(i=0;i<N;i++)printf("Thread%d:arrival time:%d,bursttime:%d\n",p[i].threadNum,p[i].arrivalTime,p[i].burstTime);structPCBtemp;for(i=0;i<N-1;i++)for(j=N-1;j>i;j--)if(p[j].arrivalTime<p[j-1].arrivalTime){temp=p[j];p[j]=p[j-1];p[j-1]=temp;}for(i=0;i<N;i++){pthread_create(&p[i].threadId,NULL,(void*)thread,NULL);usleep(N);}for(i=0;i<N;i++)pthread_join(p[i].threadId,NULL);intsum=0;for(i=0;i<N;i++){sum+=waitTimeList[i];}}SJF.c:
printf("Averagewaittime=%d\n",sum/N);return0;#include<stdio.h>#include<stdlib.h>#include<pthread.h>#include<unistd.h>#include<time.h>#defineN20structPCB{pthread_tthreadId;intthreadNum;intintburstTime;intpriority;};structPCBp[N];intrunTime=0;intwaitTimeList[N]={0};void*thread(void*in){inti,num;for(i=0;i<N;i++)if(p[i].threadId==pthread_self()){num=i;break;}waitTimeList[num]=runTime;runTime+=p[num].burstTime;printf("Thread%d:%d\n",p[num].threadNum,runTime);pthread_exit((void*)0);}intmain(){srand((unsigned)time(NULL));inti,j;for(i=0;i<N;i++){p[i].arrivalTime=rand()%201;p[i].burstTime=rand()%11+1;p[i].priority=rand()%6+1;p[i].threadNum=i;}for(i=0;i<N;i++)printf("Thread%d:arrival time:%d,bursttime:%d\n",p[i].threadNum,p[i].arrivalTime,p[i].burstTime);structPCBtemp;for(i=0;i<N-1;i++)for(j=N-1;j>i;j--)if(p[j].burstTime<p[j-1].burstTime){temp=p[j];p[j]=p[j-1];p[j-1]=temp;}for(i=0;i<N;i++){pthread_create(&p[i].threadId,NULL,(void*)thread,NULL);usleep(N);}for(i=0;i<N;i++)pthread_join(p[i].threadId,NULL);intsum=0;for(i=0;i<N;i++){sum+=waitTimeList[i];}printf("Averagewaittime=%d\n",sum/N);return0;}RR.c:#include<stdio.h>#include<stdlib.h>#include<pthread.h>#include<unistd.h>#include<time.h>#defineN20structPCB{pthread_tthreadId;intthreadNum;intintburstTime;intpriority;};structPCBp[N];intrunTime=0;intwaitTimeList[N]={0};void*thread(void*in){inti,num;for(i=0;i<N;i++)if(p[i].threadId==pthread_self()){num=i;break;}while(p[num].burstTime!=0){p[num].burstTime--;waitTimeList[num]=runTime;runTime++;printf("Thread%d:%d\n",p[num].threadNum,runTime);usleep(N*20);}pthread_exit((void*)0);}intmain(){srand((unsigned)time(NULL));inti,j;for(i=0;i<N;i++){p[i].arrivalTime=rand()%201;p[i].burstTime=rand()%11+1;p[i].priority=rand()%6+1;p[i].threadNum=i;}for(i=0;i<N;i++)printf("Thread%d:arrival time:%d,bursttime:%d\n",p[i].threadNum,p[i].arrivalTime,p[i].burstTime);structPCBtemp;for(i=0;i<N-1;i++)for(j=N-1;j>i;j--)if(p[j].arrivalTime<p[j-1].arrivalTime){temp=p[j];p[j]=p[j-1];p[j-1]=temp;}for(i=0;i<N;i++){pthread_create(&p[i].threadId,NULL,(void*)thread,NULL);usleep(3);}for(i=0;i<N;i++)pthread_join(p[i].threadId,NULL);intsum=0;for(i=0;i<N;i++){sum+=waitTimeList[i];}printf("Averagewaittime=%d\n",sum/N);return0;}sy3b.c:#include<stdio.h>#include<pthread.h>#include<stdlib.h>#include<unistd.h>#defineN5pthread_tphilosopherID[N];//IDpthread_mutex_tchopsticks[N];//introom=0;//人数intsw(pthread_tid){if(id==philosopherID[0])return0;elseif(id==philosopherID[1])return1;elseif(id==philosopherID[2])return2;elseif(id==philosopherID[3])return3;elseif(id==philosopherID[4])return4;return-1;}void*eat_think(void*in){intleft,right,num,op;op=sw(pthread_self());switch(op){case0:num=0;left=0;right=4;break;case1:num=1;left=1;right=0;break;case2:num=2;left=2;right=1;break;case3:num=3;left=3;right=2;break;case4:num=4;left=4;right=3;break;}while(1){printf("philosopher%disthinking...\n",num);usleep(N);pthread_mutex_lock(&chopsticks[left]);if(pthread_mutex_trylock(&chopsticks[right])!=0){pthread_mutex_unlock(&chopsticks[left]);room++;// printf("%dphilosopheriswaiting\n",room);continue;}printf("philosopher%diseating...\n",num);if(room>0)room--;usleep(N);pthread_mutex_unlock(&chopsticks[right]);pthread_mutex_unlock(&chopsticks[left]);printf("philosopher%disthinking...\n",num);}pthread_exit((void*)0);}intmain(){inti;for(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 初级资格计算机技术新变化试题及答案
- 茶艺知识掌握与试题及答案详解
- 妇幼健康教育的创新方式试题及答案
- 学习茶艺的艺术表现力试题及答案在考试中的应用
- 编程思维与技巧试题及答案
- 2025茶艺师考试指南及注意事项试题及答案
- 趣味全媒体运营师考试试题及答案
- 人力资源管理师人际交往试题及答案2024
- 健康管理师科学依据试题及答案2025年
- 2025年河边农业土地承包与生态循环农业合作协议
- 2025年领导胜任力测试题及答案
- 中职高考数学一轮复习讲练测专题一 集合与充要条件(测)原卷版
- 水利项目申报专项债、中央预算内资金、超长国债
- 企业财务会计(第四版)教案27:合同成本
- 2025年春季安全教育主题班会教育记录
- 人工湿地施工合同
- 2025年水井使用承包合同协议书
- 2024年领导干部政治理论知识培训考试题库及答案(十)
- 2024-2025学年人教版八年级下册地理第五章综合测试卷(含答案)
- 广医三院产房个案护理分享
- 《铁路轨道维护》课件-更换轨距杆作业
评论
0/150
提交评论