操作系统实验指导书确定稿.docx
- 文档编号:6554711
- 上传时间:2023-01-07
- 格式:DOCX
- 页数:19
- 大小:20.85KB
操作系统实验指导书确定稿.docx
《操作系统实验指导书确定稿.docx》由会员分享,可在线阅读,更多相关《操作系统实验指导书确定稿.docx(19页珍藏版)》请在冰豆网上搜索。
操作系统实验指导书确定稿
南昌工程学院
《操作系统》实验指导书
09信息管理与信息系统(本)01
杨朝晖编
2011年9月
目录
实验一Linux基本命令的使用2
实验二进程实验3
实验三信号量实践程序实验5
实验四生产者-消费者程序实验8
实验五存储管理实验11
实验六进程通信实验12
实验七时间片轮转进程调度算法实验14
实验八文件系统实验16
实验一Linux基本命令的使用
一、实验目的
1.熟悉linux操作系统环境。
2.掌握linux环境下一些常用命令的使用。
二、实验设备和仪器
1.计算机
2.linux操作系统
三、实验内容及要求
1.cd—切换目录
2.mkdir—建立一个新目录
3.cp—文件拷贝
4.ls—显示目录及文件的内容
5.mv—更改文件名称
6.cat—浏览文件内容
7.chmod—更改文件或目录的访问权限
8.rm—删除文件
9.sort—文件排序命令
四、实验原理及步骤
1.实验原理
linux许多命令看起来简单而普通,但是当它们组织在一起时就表现出强有力的功能和用途。
所以还需掌握linux环境下复合命令的使用。
2.步骤
1)将/bin子目录下文件和子目录存入file1;
2)将/use/bin子目录下文件和子目录追加到file1;
3)从file1中选取可执行文件的行,存入file2;
4)从文件file2中选取文件名垂直列存入file31.
五、实验报告要求:
在实验报告中,要求详细填写如下内容:
实验目的,实验设备和仪器,实验原理简述,实验记录,实验结果分析及数据处理,问题与讨论。
实验二进程实验
一、实验目的
1.学会在linux下创建进程;
2.观察进程并发执行的情况;
3.加深对进程的理解。
二、实验设备和仪器
1.计算机
2.linux操作系统
三、实验内容及要求
要求读懂程序,并观察程序的输出,并分析实验结果,写出实验报告。
程序如下:
#include
#include
#include
intmain(void){
pid_tpid;
intdata=5;
if((pid=vfork())<0)
{
printf("forkerror");
exit(0);
}
elseif(pid==0)
{
data--;
printf("child'sdatais%d\n",data);
execve("newproc",0,0);
data--;
printf("child'sdatais%d\n",data);
exit(0);
}
else
{
printf("parent'sdatais%d\n",data);
exit(0);
}
exit(0);
}
//注意,此处的程序单独编译
#include
main(){
inti;
printf("thisisinnewproc!
\n");
for(i=0;i<400000;i++){
//putchar(i);
}
}
四、实验原理及步骤
1.实验原理
进程用来述程序的并发执行,进程有3种基本状态:
运行态、就绪态和阻塞态。
进程各状态间可进行相互转换。
各进程按时间片的方式进行轮转调度。
2.步骤
geditproc.c(编辑程序)
gcc–oprocproc.c(编译、链接程序)
geditnewproc.c(编辑程序)
gcc–oprocnewproc.c(编译、链接程序)
./proc(执行程序)
五、实验报告要求:
在实验报告中,要求详细填写如下内容:
实验目的,实验设备和仪器,实验原理简述,实验记录,实验结果分析及数据处理,问题与讨论。
实验三信号量实践程序实验
一、实验目的
1.学会使用信号量解决资源共享问题;
2.观察各进程并发执行竟争资源的情况;
3.加深对信号量的理解。
二、实验设备和仪器
1.计算机
2.linux操作系统
三、实验内容及要求
要求读懂程序,并观察程序的输出,并分析实验结果,写出实验报告。
程序如下:
/*file:
semaphore.c*/
//信号量实践程序,在程序中建立了5个进程,每个进程都尝试运行update_file()
#include
#include
#include
#include
#include
#include
#include
#defineNUM_PROCS5
#defineSEM_ID250
#defineFILE_NAME"/tmp/sem_aaa"
#defineDELAY4000000
voidupdate_file(intsem_set_id,char*file_path,intnumber){
structsembufsem_op;
FILE*file;
//等待信号量的数值变为非负数,此处设为负值,相当于对信号量进行P操作
sem_op.sem_num=0;
sem_op.sem_op=-1;
sem_op.sem_flg=0;
semop(sem_set_id,&sem_op,1);
//写文件,写入的数值是当前进程的进程号
file=fopen(file_path,"w");
if(file){//临界区
fprintf(file,"%d\n",number);
printf("%d\n",number);
fclose(file);
}
//发送信号,把信号量的数值加1,此处相当于对信号量进行V操作
sem_op.sem_num=0;
sem_op.sem_op=1;
sem_op.sem_flg=0;
semop(sem_set_id,&sem_op,1);
}
//子进程写文件
voiddo_child_loop(intsem_set_id,char*file_name){
pid_tpid=getpid();
inti,j;
for(i=0;i<3;i++){
update_file(sem_set_id,file_name,pid);
for(j=0;j<4000000;j++);
}
}
intmain(intargc,char**argv)
{
intsem_set_id;//信号量集的ID
unionsemunsem_val;//信号量的数值,用于semctl()
intchild_pid;
inti;
intrc;
//建立信号量集,ID是250,其中只有一个信号量
sem_set_id=semget(SEM_ID,1,IPC_CREAT|0600);
if(sem_set_id==-1){
perror("main:
semget");
exit
(1);
}
//把第一个信号量的数值设置为1
sem_val.val=1;
rc=semctl(sem_set_id,0,SETVAL,sem_val);
if(rc==-1)
{
perror("main:
semctl");
exit
(1);
}
//建立一些子进程,使它们可以同时以竞争的方式访问信号量
for(i=0;i child_pid=fork(); switch(child_pid){ case-1: perror("fork"); case0: //子进程 do_child_loop(sem_set_id,FILE_NAME); exit(0); default: //父进程接着运行 break; } } //等待子进程结束 for(i=0;i intchild_status; wait(&child_status); } printf("main: we'redone\n"); fflush(stdout); return0; } 四、实验原理及步骤 1.实验原理 为使多个进程能互斥地访问某临界资源,只需为该资源设置一个互斥信号量mutex,并设其初值为1,然后将各进程的临界区CS置于P(mutex)和V(mutex)操作之间即可。 2.步骤 geditsemaphore.c(编辑程序) gcc–osemaphoresemaphore.c(编译、链接程序) ./semaphore(执行程序) 五、实验报告要求: 在实验报告中,要求详细填写如下内容: 实验目的,实验设备和仪器,实验原理简述,实验记录,实验结果分析及数据处理,问题与讨论。 实验四生产者-消费者程序实验 一、实验目的 1.学会使用信号量解决资源共享问题; 2.观察生产者和消费者进程并发执行竞争资源的情况; 3.进一步以实例加深对信号量的理解。 二、实验设备和仪器 1.计算机 2.linux操作系统 三、实验内容及要求 要求读懂程序,并观察程序的输出,并分析实验结果,写出实验报告。 程序如下: //生产者-消费者程序 //fileproducer-consumer.c //在程序中,父进程建立许多子进程,父进程增加信号量的数值,子进程减少信号量的数值 #include #include #include #include #include #include #defineNUM_LOOPS20 intmain(intargc,char*argv[]) { intsem_set_id;//信号量集的ID unionsemunsem_val;//信号量的数值 intchild_pid;//子进程的PID structsembufsem_op;//信号量操作结构 inti; intrc;//返回值 structtimespecdelay;//延迟时间 //建立信号量集,集中只含有一个信号量 sem_set_id=semget(IPC_PRIVATE,1,0600); if(sem_set_id==-1){ perror("main: semget"); exit (1); } printf("semaphoresetcreated,semaphoresetid%d\n",sem_set_id); //信号量数值设置为零 sem_val.val=0; rc=semctl(sem_set_id,0,SETVAL,sem_val); //建立子进程 child_pid=fork(); switch(child_pid){ case-1: //失败 perror("fork"); case0: for(i=0;i //被阻塞,直到信号量的数值变为非负值 sem_op.sem_num=0; sem_op.sem_op=-1; sem_op.sem_flg=0; semop(sem_set_id,&sem_op,1); printf("consumer: %d\n",i); fflush(stdout); } break; default: //父进程 for(i=0;i printf("producer%d\n",i); fflush(stdout); //把信号量的数值增加1 sem_op.sem_num=0; sem_op.sem_op=1; sem_op.sem_flg=0; semop(sem_set_id,&sem_op,1); //等待一段时间 if(rand()>3*(RAND_MAX/4)){ delay.tv_sec=0; delay.tv_nsec=10; nanosleep(&delay,NULL); } } break; } return0; } 四、实验原理及步骤 1.实验原理 进程用来述程序的并发执行,进程有3种基本状态: 运行态、就绪态和阻塞态。 进程各状态间可进行相互转换。 各进程按时间片的方式进行轮转调度。 2.步骤 geditproducer-consumer.c(编辑程序) gcc–oproducer-consumerproducer-consumer.c(编译、链接程序) ./producer-consumer(执行程序) 五、实验报告要求: 在实验报告中,要求详细填写如下内容: 实验目的,实验设备和仪器,实验原理简述,实验记录,实验结果分析及数据处理,问题与讨论。 实验五存储管理实验 一、实验目的 1.在Win2000下观察虚拟内存管理程序的性能; 2.学会设置交换文件的大小并观察交换文件的大小; 3.进一步加深对虚拟内存管理的理解。 二、实验设备和仪器 1.计算机 2.Win2000操作系统 三、实验内容及要求 1.用系统监视器观察虚拟内存管理程序的性能; 2.设置交换文件的大小并观察交换文件的大小; 3.观察32位模块程序的加载情况; 实验后,要求写出一份详细的实验报告。 四、实验原理及步骤 1.实验原理 win2000将有限的物理内存映射至虚拟内存空间,每个应用程序都如同拥有4GB的内存地址空间。 应用程序通过调度程序(换页器)使用虚拟内存,当需要更多的内存空间时,换页器会将一部分内存页面换到硬盘上,以此来模拟更多的内存。 应用程序不会意识到自己是在真正的物理内存上,还是在硬盘的虚拟内存中。 2.步骤 (1)启动程序/管理工具/性能 (2)控制面板/系统/高级/性能 (3)程序/附件/系统工具/系统信息 五、实验报告要求: 在实验报告中,要求详细填写如下内容: 实验目的,实验设备和仪器,实验原理简述,实验记录,实验结果分析及数据处理,问题与讨论。 实验六进程通信实验 一、实验目的 1.了解linux环境下通过共享内存实现进程间通信的程序编写方法; 3.以实例加深进程间通讯的另一种机制: 共享内存的理解。 二、实验设备和仪器 1.计算机 2.linux操作系统 三、实验内容及要求 要求读懂程序,并观察程序的输出,并分析实验结果,写出实验报告。 程序如下: #include #include #include #include #defineKEY1234//键 #defineSIZE1024//欲建立的共享内存的大小 intmain(){ intshmid; char*shmaddr; structshmid_dsbuf; shmid=shmget(KEY,SIZE,IPC_CREATE|0600);//建立共享内存 if(shmid==-1){ printf("createsharememoryfailed: %s",strerror(errno)); return0; } if(fork()==0){ shmaddr=(char*)shmat(shmid,NULL,0);//系统自动选择一个地址连接 if(shmaddr==(void*)-1){ printf("connecttothesharememoryfailed: %s",strerror(errno)); return0; } strcpy(shmaddr,"hello,thisischildprocess! \n"); shmdt(shmaddr);//断开与共享内存的连接 return0; } else { sleep(3);//等待子进程执行完毕 shmctl(shmid,IPC_STAT,&buf);//取得共享内存的相关信息 printf("sizeofthesharememory: "); printf("shm_segsz=%dbytes\n",buf.shm_segsz); printf("processidofthecreator: "); printf("shm_cpid=%d\n",buf.shm_cpid); printf("processidofthelastoperator: "); printf("shm_lpid=%d\n",buf.shm_lpid); shmaddr=(char*)shmat(shmid,NULL,0);//系统自动选择一个地址连接 if(shmaddr==(void*)-1){ printf("connecttothesharememoryfailed: %s",strerror(errno)); return0; } printf("printthecontentofthesharememory: "); printf("%s\n",shmaddr); shmdt(shmaddr);//断开与共享内存的连接 shmctl(shmid,IPC_RMID,NULL); //当不再有任何其他进程使用该共享内存时系统将自动销毁它 } } 四、实验原理及步骤 1.实验原理 共享内存是Linux支持的3种进程间通信机制中的一种。 它实际上是一段特殊的内存区域,这一段区域可以被两个或两个以上的进程映射至自身的地址空间中。 一个进程写入共享内存中的信息,可以被其他使用这个共享内存的进程,通过一个简单的内存读操作读出,从而实现了进程间的通信。 2.步骤 geditproc.c(编辑程序) gcc–oprocproc.c(编译、链接程序) ./proc(执行程序) 五、实验报告要求: 在实验报告中,要求详细填写如下内容: 实验目的,实验设备和仪器,实验原理简述,实验记录,实验结果分析及数据处理,问题与讨论。 实验七时间片轮转进程调度算法实验 一、实验目的 1.观察Win2000环境下的时间片轮转进程调度算法; 3.以实例加深对进程调度算法的理解。 二、实验设备和仪器 1.计算机 2.Win2000操作系统 三、实验内容及要求 要求读懂程序,并观察程序的输出,并分析实验结果,写出实验报告。 程序如下: #include #include DWORDChildMain(); DWORDChildMain1(); intbb=1; main() { inti,c=98; INTgiThreadNumber=1; DWORDdwThreadId;//新线程的标识符 HANDLEhThread;//新线程的句柄 INTiThread;//在对话框中选择的线程数 DWORDdwCreationFlags=0;//线程创建标志 hThread=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ChildMain,(LPVOID)giThreadNumber, dwCreationFlags,&dwThreadId); hThread=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ChildMain1,(LPVOID)giThreadNumber, dwCreationFlags,&dwThreadId); printf("线程1的输入: \n"); //c=scanf("%d",&c); for(i=0;i<1000000000;i++); printf("线程1的输出%d\n",c); printf("%d\n",bb); } DWORDChildMain(giThreadNumber)//子线程号 { longinti,b; charc=99; for(i=0;i<1000000000;i++); printf("bbbbbb\n"); bb=1000; printf("线程2的输入: \n"); //scanf("%d",&b); printf("线程2的输出%d,%d\n",c,b); } DWORDChildMain1(giThreadNumber)//子线程号 { charc=100; longinti,b; printf("cccccc\n"); for(i=0;i<100000000;i++); bb=10; printf("线程3的输入: \n"); //scanf("%d",&b); printf("线程3的输出%d,%d\n",c,b); } 四、实验原理及步骤 1.实验原理 进程有3种基本状态: 运行态、就绪态和阻塞态。 进程各状态间可进行相互转换。 各进程按时间片的方式进行轮转调度。 进程调度算法主要有: FCJS,SJF,RR,HRN等。 2.步骤 geditproc.c(编辑程序) gcc–oprocproc.c(编译、链接程序) ./proc(执行程序) 五、实验报告要求: 在实验报告中,要求详细填写如下内容: 实验目的,实验设备和仪器,实验原理简述,实验记录,实验结果分析及数据处理,问题与讨论。 实验八文件系统实验 一、实验目的 1.以实例加深了解Win2000环境下的文件编程方法; 2.以实例加深了解Linux环境下的文件编程方法; 二、实验设备和仪器 1.计算机 2.Win2000操作系统 3.Linux操作系统 三、实验内容及要求 要求读懂程序,并观察程序的输出,并分析实验结果,写出实验报告。 程序如下: //文件操作,在linux下的文件编程 #include #include #include
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 实验 指导书 确定