下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、.操作系统实验报告指导教师:胡晓鹏.实验报告一实验名称 : Linux 操作系统下的C语言编程实验目的 : 1.认识 Linux 系统,熟悉Linux 操作系统的基本操作;2.了解 vi 命令的基本用法,能够使用vi 命令对文件进行基础的操作与编辑;3.能够在 Linux 环境下编写 C语言程序,生成 .out 文件,并成功执行;4.体会 Linux 环境下编程与Windows 环境下编程的异同,加深对Linux 操作系统的理解。实验内容 :熟悉 Linux 环境,编写简单C 语言程序。实验结果:.实验结论: 在 Linux 操作系统下的编程环境不同于Windows ,编译器进行命令编译。操作
2、环境简洁,大多以键盘操作。.实验报告二实验名称: 基于进程与线程的并发实验目的 :1. 了解进程与线程工作原理,掌握并发机制,学会编写简单的并发程序。2. 充分理解并掌握基于进程与线程的并发。实验内容 :在 Linux 环境进行基于进程与线程编写实验程序。试验核心代码 :int main() pthread_t tidN; pid_t pid; pid=fork(); if(pid0) printf(fail to forkn);exit(1);else if(pid=0) printf(the child process:n);elsesleep(10);printf(the parent
3、process:n);void *res;int err3;err0=pthread_create(&tid0,NULL,fn1,NULL);err1=pthread_create(&tid1,NULL,fn2,NULL);err2=pthread_create(&tid2,NULL,fn3,NULL);int i;.for(i=0;iN;i+)if(erri= pthread_join(tidi,&res)!=0) printf(cannot join the thread %dn,i); exit(1);return 0;void *fn1(void *arg)printf(the fir
4、st thread is donen);return (void *)1;void *fn2(void *arg)printf(the second thread is donen);/ sleep(1);return (void *)1;void *fn3(void *arg)printf(the third thread is donen);/ sleep(2); return (void *)1;.实验结果:实验结论: 进程与线程之间的关系为线程离不开进程,线程在多任务系统的作用使计算机高校工作,同时下创建进程是应尽量避免进程的出现。掌握线程pthread_join()中的阻塞原理。.实
5、验报告三实验题目 : 进程间的通信实验目的 :学习在 linux环境进程间的信息传递和接收, 理解进程间的信号通信,并能编写简单代码实现进程间的通信。实验代码:#include #include #include #include #include static int alarm_fired=0;void ouch(int sig) alarm_fired=1;int main() pid_t pid;pid=fork();if(pid=-1) printf(fork failedn); exit(1);else if(pid=0) kill(getpid(),SIGALRM); exit(
6、0);signal(SIGALRM,ouch);alarm(5);pause();.if(alarm_fired=1)printf(receive a signal %dn,SIGALRM);exit(0);实验结果 :实验结论: 进程能进行信息通信, 如果进程间有必要, 能够实现很好的进程异步处理。.实验报告四实验题目 : 进程间的通信 - 共享内存实验目的 :理解进程间共享内存机制, 学会分析共享内存之间的通信方式并进行内存共享实践,编写简单程序实现内存简单共享。实验代码 :核心代码:/*/ 定义数据结构体struct shared_use_stint written_by_you;cha
7、r some_textTEXT_SZ;/* 写入 */* 创建共享内存 */shmid=shmget(key_t)1234,sizeof(struct shared_use_st),0666|IPC_CREAT);if(shmid=-1)fprintf(stderr,shmget failedn);exit(EXIT_FAILURE);/* 映射共享内存*/shared_memory=shmat(shmid,(void *)0,0);if(shared_memory=(void *)-1)fprintf(stderr,shmat failedn);exit(EXIT_FAILURE);.pri
8、ntf(Memory attached at %Xn,(int)shared_memory);/* 让结构体指针指向这块共享内存*/shared_stuff=(struct shared_use_st *)shared_memory;/* 循环的向共享内存中写数据,直到写入的为“ end为”止 */while(running)while(shared_stuff-written_by_you=1)sleep(1);/ 等到读进程读完之后再写printf(waiting for client.n);printf(ener some text:);fgets(buffer,BUFSIZ,stdin
9、);strncpy(shared_stuff-some_text,buffer,TEXT_SZ);shared_stuff-written_by_you=1;if(strncmp(buffer,end,3)=0)running=0;/ 结束循环/* 读取 */* 创建共享内存 */shmid=shmget(key_t)1234,sizeof(struct shared_use_st),0666|IPC_CREAT);if(shmid=-1)fprintf(stderr,shmget failedn);exit(EXIT_FAILURE);./* 映射共享内存*/shared_memory=sh
10、mat(shmid,(void *)0,0);if(shared_memory=(void *)-1)fprintf(stderr,shmat failedn);exit(EXIT_FAILURE);printf(Memory attached at %Xn,(int)shared_memory);/* 让结构体指针指向这块共享内存*/shared_stuff=(struct shared_use_st *)shared_memory;/* 控制读写顺序*/shared_stuff-written_by_you=0;/* 循环的从共享内存中读数据,直到读到“ end为”止 */while(ru
11、nning)if(shared_stuff-written_by_you)printf(You wrote:%s,shared_stuff-some_text);sleep(1); /读进程睡一秒,同时会导致写进程睡一秒,这样做到读了之后再写 shared_stuff-written_by_you=0;if(strncmp(shared_stuff-some_text,end,3)=0)running=0; / 结束循环.实验结果:实验结论:内存共享中应该含有安全防护机制, 内存在共享的同时应该做到内存的保护,共享内存段是更应该做到安全高效共享。 应当加强训练共享内存段申请原则,多多学习管道运
12、输的实现。.实验报告五实验题目 :虚拟内存实验目的 :模拟替换算法技术, 编程实现 LRU和 CLOCK算法,掌握替换算法技术,完全实现替换策略。实验主要函数:void lru_p(int n,int m,int proc);void clock_p(int n,int m,int proc);实验代码 :#include #include / 准备用时钟函数调用库函数#include using namespace std;void lru_p(int n,int m,int proc)cout-endl;cout 这是 least recently used:endl;struct pag
13、eint time;int pro;struct page *p=(struct page*)malloc(n*sizeof(page);int i = 0;int flag = 0;/记录是否满页int exit;/初始化时间for(int j=0;jn;j+).pj.time=0;while(im)/ 初始化进程不占用页 exit=0;for(j = 0;j flag;j+)pj.time+;if( = proci) / 处理相同如何情况下的相同进程exit=1;pj.time=1;if(exit=0&(flagn)/ 没有相同进程且不缺页 =proci;pf
14、lag.time=1;flag+;elseif(exit=0)/处理缺页没有相同进程但缺页int key=0;int maxtime=p0.time;for(j=1;jn;j+).if(maxtimepj.time)maxtime=pj.time; key=j;=proci;pkey.time=1;/输出for(j=0;jflag;j+)printf( %d,);coutendl;i+;void clock_p(int n,int m,int proc)cout-endl;cout 这是 clock:endl;struct pageint flag;int pro;
15、struct page *p=(struct page*)malloc(m*sizeof(page);./初始化队列for(int k=0;kn;k+)pk.flag=0;int i=0;int next;int j=0;/标记初始位置int mart=0;while(im)next=1; while(next)for(k=0;kmart;k+)if(=proci)next=0;if(next)if(!pj.flag)=proci;pj.flag=1;next=0;if(martn)mart+;.elsepj.flag=0;next=1;if(martn)mart+;j
16、+;j=j%n;/ 输出i+;for(k=0;kmart;k+)printf( %d,);coutendl;void main()int pages;cout pages;coutm;cout 输入你的进程ID:;int *proc=new intm;for(int i=0;iproci;lru_p(pages,m,proc);clock_p(pages,m,proc);实验结果:实验结论:替换策略是计算机高效工作,充分利用资源, 而不同的替换算法都有自己的利弊,不同的场景应充分权衡利弊进行选择。.实验报告六实验题目 :进程调度和轮循实验目的 :理解掌握进程调度算法,使用程序实现算
17、法,学会分析调度算法,以加深对进程的概念及进程调度算法的理解。实验代码 :核心代码:-实现函数 -/定义存放nums 个进程 PCB 的链表的头结点;PCB* linkinit()/初始化链表的头结点;PCB* head1;head1=(PCB *)malloc(sizeof(PCB);head1-next=NULL;return head1;/往链表中添加进程PCB 节点 ;void linkadd(PCB* head)PCB* r,* q=head;r=(PCB *)malloc(sizeof(PCB);while(q-next)q=q-next;void inputdata(PCB* r
18、);inputdata(r);r-next=q-next;q-next=r;/向链表 PCB 节点内容中输入数据void inputdata(PCB* r).printf( 进程名 :);scanf(n%c,&r-name);printf( 到达时间 :);scanf(%d,& r-reach_time);printf( 运行时间 :);scanf(%d,& r-run_time);/以 “到达时间 ”的从大到小的顺序对链表进行排序void seq(PCB* head)PCB* h=head;while(h-next-next)PCB* p=h-next,*q=h-next;while(q-n
19、ext)q=q-next;if(p-reach_time q-reach_time)p=q;PCB* r=h;while(r-next!=p)r=r-next;r-next=p-next;p-next=h-next;h-next=p;h=h-next;/求最大的到达时间int mrtime(PCB* head)PCB* p=head;.while(p-next)p=p-next;int maxreachtime=p-reach_time;return maxreachtime;/将各个进程运行时间的初始值赋给p-rt; 在求 带权周转时间 的时候要用到void runtort(PCB* hea
20、d)PCB* p=head;dop=p-next;p-rt=p-run_time;while(p-next);void output(PCB* head,int nums)PCB* t=head;int zzs_time=0;float dqzzs_time=0.00;while(t-next!=NULL)t=t-next;printf( 进程名 :%cn,t-name);printf(t周转时间 :%dn,t-zz_time);printf(t带权周转时间:%fn,t-dqzz_time);zzs_time=zzs_time+t-zz_time;dqzzs_time=dqzzs_time+t-dqzz_time;printf(n 平均周转时间:%fn,(float)zzs_time/nums);printf( 平均带权周转时间:%fn,(float)dqzzs_time/nums);.-主函数 -voidmain()int nums;printf( 请输入要运行的进程个数:);scanf(%d,&nums); /
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年中国啤酒行业发展展望及投资策略报告
- ABS等材料生产项目环境影响报告表
- 河南市政b证考试试题及答案
- 2025年测篮球知识的题库及答案
- 等高线地图考试题及答案
- 2025年广东化学高考试题及答案
- 重要业务系统应急预案(3篇)
- 中学防暴雪应急预案(3篇)
- 环保监控考试题库及答案
- 备战2026年高考英语考试易错题(新高考)易错点02 非谓语动词(解析版)
- 【2025年】人防工程测试题及答案
- 北京师范大学本科生毕业论文(设计)开题报告
- 普通高中英语课程标准(2017年版-2020年修订)词汇表
- 银行保洁服务投标方案(技术标)
- 古代军事策略与智慧战略
- 癫痫与睡眠:睡眠障碍与癫痫的关系及对治疗的影响
- 常用型钢规格(截面)表教学内容
- 2022年湖北省药品监督管理局审评中心招聘笔试备考题库及答案解析
- 在职申硕(同等学力)临床医学学科综合普通外科-试卷1
- JJF 1099-2018表面粗糙度比较样块校准规范
- GB/T 5095.2-1997电子设备用机电元件基本试验规程及测量方法第2部分:一般检查、电连续性和接触电阻测试、绝缘试验和电压应力试验
评论
0/150
提交评论