ImageVerifierCode 换一换
格式:DOCX , 页数:26 ,大小:565.45KB ,
资源ID:8976011      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8976011.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(操作系统实验报告.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

操作系统实验报告.docx

1、操作系统实验报告操作系统实验报告 2014/2015 学年 第 2 学期系 别 计算机学院 专 业 计算机科学与技术 班 级 2014级专升本班 姓 名 龚毓秀 学 号 1410211040 授课老师 赵群礼 实验一:熟悉LINUX基本命令及编程环境1、 实验内容1. 练习使用Gedit编辑器使用Gedit编辑器用C语言编写一个HelloWorld程序,并保存。具体操作:点击“任务栏位置主文件夹”,打开主文件夹位置文件浏览器,空白处右键单击,弹出菜单选择“创建文档空文件”,新建一个空文件,并命名为“hello.c”,右键单击“hello.c”,选择“使用Gedit打开”,在Gedit编辑器中编

2、辑代码如下:#includeint main() printf(Hello,Wrold!n);编辑完成后,点击“保存”,保存文件。2. 使用gcc编译源程序。gcc是linux下的一种c程序编译工具,使用方法如下:编译: gcc -o filename1 filename.c(或者gcc filename.c -o filename1),其中: filename.c是源文件名,filename1 是目标文件名,o代表object具体操作:点击“任务栏应用程序附件终端”,当前默认路径即为主文件夹,输入“gcc hello.c -o hello”,回车运行后,若无任何提示,怎说明编译成功,已生成可

3、执行文件“hello“,若提示有错误,则根据具体提示回到Gedit中修改源程序,保存后重新编译。3. 执行程序执行:./filenamel 其中: filename1 是目标文件名。具体操作:在“终端”中输入“./hello”,回车后运行,若无错误,终端中将显示运行结果“Hello,Wrold!”。2、 实验结果 实验二: 进程管理一、实验目的(1)理解进程的概念,掌握父、子进程创建的方法。(2)认识和了解并发执行的实质,掌握进程的并发及同步操作。二、实验环境 微型计算机,Ubuntu Linux10.04 ,gedit,gcc三、实验内容 1.编写一C语言程序,实现在程序运行时通过系统调用f

4、ork( )创建两个子进程,使父、子三进程并发执行,父亲进程执行时屏幕显示“I am father”,儿子进程执行时屏幕显示“I am son”,女儿进程执行时屏幕显示“I am daughter”。 2.多次连续反复运行这个程序,观察屏幕显示结果的顺序,直至出现不一样的情况为止。记下这种情况,试简单分析其原因。3.修改程序,在父、子进程中分别使用wait()、exit()等系统调用“实现”其同步推进,并获取子进程的ID号及结束状态值。多次反复运行改进后的程序,观察并记录运行结果。四、实验结果1.2 第一次:第二次:第三次:第四次:3.第一次:第二次:第三次:第四次:五、源代码1.#inclu

5、de #include #include #include int main() pid_t pid; char *message; int n; printf(fork program startingn); pid = fork(); if (pid = -1) perror(fork failed); exit(1); else if (pid = 0) message = I am son; n = 2; else message = I am father; n = 1; pid = fork(); if (pid = -1) perror(fork failed); exit(1)

6、; else if (pid = 0) message = I am daughter; n = 3; for (;n0;n-) puts(message); sleep(1); exit(0);2.#include #include #include #include int main() pid_t pid; char *message; int n; printf(fork program startingn); pid = fork(); if (pid = -1) perror(fork failed); exit(1); else if (pid = 0) message = I

7、am son; nice(5); n = 5; else message = I am father; n = 4; pid = fork(); if (pid = -1) perror(fork failed); exit(1); else if (pid = 0) message = I am daughter; nice(10); n = 3; for (;n0;n-) puts(message); sleep(1); exit(0);3.#include #include #include #include #include int main() pid_t pid; char *me

8、ssage; int n; int exit_code; printf(fork program startingn); pid = fork(); if (pid = -1) perror(fork failed); exit(1); else if (pid = 0) message = I am son; n = 2; exit_code = 42; else message = I am father; n = 1; exit_code = 0; pid = fork(); if (pid = -1) perror(fork failed); exit(1); else if (pid

9、 = 0) message = I am daughter; n = 3; exit_code = 43; for (;n0;n-) puts(message); sleep(1); if(pid !=0) int stat_val; pid_t child_pid; child_pid = wait(&stat_val); printf(child has finished: PID = %dn,child_pid); if(WIFEXITED(stat_val) printf(child exited with code %dn,WEXITSTATUS(stat_val); else pr

10、intf(child terminated abnormally); exit(exit_code); 实验三: 进程调度一、实验目的(1)理解进程控制块和进程组织方式;(2)掌握时间片轮转调度算法实现处理机调度。二、实验环境 微型计算机,Ubuntu Linux10.04 ,gedit,gcc三、实验内容 1建立合理的PCB数据结构,建立含有8个进程结点的就绪队列,每个进程的要求运行时间随机产生,要求每个进程的要求运行时间不大于15。 2 设置时间片大小(36),使用时间片轮转调度算法实现处理机调度。四、实验结果五、源代码#include #include #include #include

11、 #define NUM 8 #define LEN sizeof(PCB) typedef struct PCB int name; int runtime; int runedtime; int killtime; struct PCB *next; PCB; void main() int timeslice=5,i; PCB *top,*tail,*temp, *runqueue; srand(int)time(0); for(i=0;iname=i; temp-runtime=rand()%15;temp-runedtime=0; temp-next=NULL; temp-killt

12、ime=0; if(i=0) top=temp;tail=temp; else tail-next=temp; tail=temp; printf(process name %d, runtime=%d, runedtime=%d,killtime=%dn, tail-name,tail-runtime,tail-runedtime,tail-killtime); printf(*n); while(top!=NULL) runqueue= top; top = top-next; runqueue-next=NULL; runqueue-runtime =runqueue-runtime-t

13、imeslice; if(runqueue-runtimekilltime=runqueue-runtime+timeslice; runqueue-runedtime=runqueue-killtime+ runqueue-runedtime; runqueue-runtime=0; printf(process name %d; runtime=%d,runedtime=%d,killtime=%d(finished)n; runqueue-name,runqueue-runtime; runqueue-runedtime,runqueue-killtime); else runqueue

14、-killtime=timeslice; runqueue-runedtime=runqueue-runedtime+runqueue-killtime; printf(process name %d ,runtime=%d,runedtime=%d,killtime=%dn, runqueue-name,runqueue-runtime,runqueue-runedtime,runqueue-killtime); tail-next=runqueue; tail=tail-next; 实验四: 进程通信一、实验目的(1)了解什么是消息,熟悉消息传送原理;(2)了解和熟悉共享存储机制;(3)掌

15、握消息的发送与接收的实现方法。二、实验环境 微型计算机,Ubuntu Linux10.04 ,gedit,gcc三、实验内容 1根据消息传送机理,使用系统调用msgget( ), msgsnd( ), msgrev( ), 及msgctl( )编制一长度为k的消息发送和接收的程序,要求在程序中完成10次消息的发送和接收,每次发送消息结束和接收消息结束都需给出相应的屏幕提示,且每次发送的的内容不少于一个字符,并能在接收端输出。 2根据共享存储区原理,使用系统调用shmget( ), shmat( ), shmdt( ), 及shctl( )编制程序,要求创建一个长度为k的共享存储区,并完成10次

16、数据的发送和接收,每次发送数据结束和接收数据结束都需给出相应的屏幕提示,且每次发送的的数据应能在接收端输出。四、实验结果1.2.五、源代码1. client1.c#include #include #include #define MSGKEY 75structmsgformlongmtype; charmtext1000;msg;intmsgqid;void client()int i;msgqid=msgget(MSGKEY,0777); /*打开75#消息队列*/for(i=10;i=1;i-)msg.mtype=i;printf(client)sentn);msgsnd(msgqid,

17、&msg,1024,0); /*发送消息*/exit(0);main( ) client( );server1.c#include #include #include #define MSGKEY 75structmsgformlongmtype; charmtext1000;msg;intmsgqid;void server( )msgqid=msgget(MSGKEY,0777|IPC_CREAT);/*创建75#消息队列*/do msgrcv(msgqid,&msg,1030,0,0); /*接收消息*/printf(“(server)receivedn”);while(msg.mtyp

18、e!=1);msgctl(msgqid,IPC_RMID,0);/*删除消息队列,归还资源*/exit(0);main( )server( );2. client.c#include #include #include #include #include #define SHMKEY 75 int main() int shmid; int *addr; int i=0; shmid=shmget(SHMKEY,1024,0777); addr=shmat(shmid,0,0); while( i10) if(*addr=0) *(addr+1)=a+i; printf(client send

19、 message_%cn,*(addr+1); i+; *addr=1; else sleep(1); return 0; server.c#include #include #include #include #include #define SHMKEY 75 int main() int shmid; int i=0; int *addr; shmid=shmget(SHMKEY,1024,0777|IPC_CREAT); addr=shmat(shmid,0,0); *addr=0; while(i10) if(*addr=0) sleep(1); else printf(server

20、 get message_%cn,*(addr+1); *addr=0; i+; shmctl(shmid,IPC_RMID,0); exit(0); 实验五: 存储管理一、实验目的(1)熟悉内存空闲分区的分配方式;(2)理解动态分区存储管理方式;(3)掌握动态分区的分配与回收的过程。二、实验环境 微型计算机,Ubuntu Linux10.04 ,gedit,gcc三、实验内容 根据流程图和参考程序,完成模拟内存分配和回收过程。内存空间大小为100,进程数为5,每个进程所需空间为随机产生,大小为120,编制程序,首先对5个进程进行内存分配,然后回收指定的进程空间,并进行适当的空闲分区合并操作,

21、要求每次操作结束后都能显示当前的内存分配情况。四、实验结果截图一截图二截图三五、源代码#include#includetypedef struct MEMORY_BLOCK int name; /进程名 int address; /起始地址 int length; /长度 int flag; /标志,表示该块是否被分配。 struct MEMORY_BLOCK *next; /指向下一个进程MEMORY_BLOCK; #define NUM 5#define LEN sizeof(MEMORY_BLOCK)void allocation(MEMORY_BLOCK *Header,int nam

22、e,int length_p) MEMORY_BLOCK *temp,*t,*tt; int minsize=2; /不可切割的分区阈值 t=Header; while(t!=0) if(t-lengthlength_p&t-flag=0) break; t=t-next;if(t-length-length_pminsize) /分割 temp=(MEMORY_BLOCK*)malloc(LEN); temp-name=-1; temp-flag=0; temp-length=t-length-length_p; temp-address=t-address+length_p; t-name

23、=name; t-flag=1; t-length=length_p; temp-next=t-next; t-next=temp;else /直接分配t-name=name;t-flag=1;void reclaim(int processname, MEMORY_BLOCK *Header) MEMORY_BLOCK *temp,*t,*tt; t=Header; temp=t; while(t-name!=processname) temp=t; t=t-next; if(t-next!=NULL) /t非尾结点 if(temp-flag=0&t-next-flag=0) /左右为空 t

24、emp-name=-1; temp-length=temp-length+t-length+t-next-length; tt=t-next; temp-next=tt-next; else if(temp-flag=0) /左为空 temp-name=-1; temp-length=temp-length+t-length; temp-next=t-next; else if(t-next-flag=0) /右为空 t-name=-1; t-length=t-length+t-next-length; t-flag=0; tt=t-next; t-next=tt-next;else /左右不

25、为空 t-name=-1; t-flag=0; else /t是尾结点if(temp-flag=0) /左为空 temp-name=-1; temp-length=temp-length+t-length;temp=t-next;else /左不为空t-name=-1; t-flag=0; void main() /主函数int length_p,i,processname;MEMORY_BLOCK *Header,*t;Header=(MEMORY_BLOCK*)malloc(LEN); /初始化存储空间Header-name=-1;Header-address=0;Header-length=100;Header-flag=0;Header-next=NULL;srand(int)time(0);for(i=1;iname,t-address,t-length,t-flag);t=t-next;printf(请输入回收的进程号(输入0结束):n); scanf(%d,&processname); while(processname!=0) printf(

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1