操作系统实验
- 格式:doc
- 大小:82.00 KB
- 文档页数:17
南昌工程学院《操作系统》实验指导书09信息管理与信息系统(本)01杨朝晖编2011 年 9 月目录实验一Linux基本命令的使用 (2)实验二进程实验 (3)实验三信号量实践程序实验........................................... 错误!未定义书签。
实验四生产者-消费者程序实验 ......................................... 错误!未定义书签。
实验五存储管理实验.. (10)实验六进程通信实验 (11)实验七时间片轮转进程调度算法实验 (13)实验八文件系统实验 (15)实验一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<stdio.h>#include<sys/types.h>#include<unistd.h>int main(void){pid_t pid;int data=5;if((pid=vfork())<0){printf("fork error");exit(0);}else if(pid==0){data--;printf("child's data is %d\n",data);execve("newproc",0,0);data--;printf("child's data is %d\n",data);exit(0);}else{printf("parent's data is %d\n",data);exit(0);}exit(0);}//注意,此处的程序单独编译#include<stdio.h>main(){int i;printf("this is in newproc!\n");for(i=0;i<400000;i++){// putchar(i);}}1.实验原理进程用来述程序的并发执行,进程有3种基本状态:运行态、就绪态和阻塞态。
进程各状态间可进行相互转换。
各进程按时间片的方式进行轮转调度。
2. 步骤gedit proc.c (编辑程序)gcc –o proc proc.c(编译、链接程序)gedit newproc.c (编辑程序)gcc –o proc newproc.c(编译、链接程序)./proc(执行程序)五、实验报告要求:在实验报告中,要求详细填写如下内容:实验目的,实验设备和仪器,实验原理简述,实验记录,实验结果分析及数据处理,问题与讨论。
一、实验目的1.学会使用信号量解决资源共享问题;2.观察各进程并发执行竟争资源的情况;3.加深对信号量的理解。
二、实验设备和仪器1.计算机2.linux操作系统三// 信号量实践程序,在程序中建立了5个进程,每个进程都尝试运行update_file() #include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<time.h>#include<sys/types.h>#include<sys/wait.h>#include<linux/sem.h>#define NUM_PROCS 5#define SEM_ID 250#define FILE_NAME "/tmp/sem_aaa"#define DELAY 4000000void update_file(int sem_set_id, char *file_path, int number){ struct sembuf sem_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);}//子进程写文件void do_child_loop(int sem_set_id,char *file_name){ pid_t pid=getpid();int i,j;for(i=0;i<3;i++){update_file(sem_set_id,file_name,pid);for(}int main(int argc,char **argv){int sem_set_id; //信号量集的IDunion semun sem_val; //信号量的数值,用于semctl()int child_pid;int i;int rc;// 建立信号量集,ID是250,其中只有一个信号量sem_set_id=semget(SEM_ID,1,IPC_CREAT|0600);if(sem_set_id==-1){perror("main: semget");exit(1);}//把第一个信号量的数值设置为1sem_val.val=1;rc=semctl(sem_set_id,0,SETVAL,sem_val);if(rc==-1){perror("main:semctl");exit(1);}//建立一些子进程,使它们可以同时以竞争的方式访问信号量for(i=0;i<NUM_PROCS;i++){child_pid=fork();switch(child_pid){case -1:perror("fork");case 0: //子进程do_child_loop(sem_set_id,FILE_NAME);exit(0);default: //父进程接着运行break;}}//等待子进程结束for(i=0;i<NUM_PROCS;i++){int wait(&child_status);}printf("main:we're done\n");fflush(stdout);return 0;}四、实验原理及步骤1.实验原理为使多个进程能互斥地访问某临界资源,只需为该资源设置一个互斥信号量mutex,并设其初值为1,然后将各进程的临界区CS置于P(mutex)和V(mutex)操作之间即可。
2. 步骤gedit semaphore.c (编辑程序)gcc –o semaphore semaphore.c (编译、链接程序)./semaphore(执行程序)五在实验报告中,要求详细填写如下内容:实验目的,实验设备和仪器,实验原理简述,实验记录,实验结果分析及数据处理,问题与讨论。
2.观察生产者和消费者进程并发执行竞争资源的情况;3.进一步以实例加深对信号量的理解。
二、实验设备和仪器1.计算机2.linux操作系统三、实验内容及要求要求读懂程序,并观察程序的输出,并分析实验结果,写出实验报告。
程序如下://生产者-消费者程序//file producer-consumer.c//在程序中,父进程建立许多子进程,父进程增加信号量的数值,子进程减少信号量的数值#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<time.h>#include<linux/sem.h>#include<sys/types.h>for(i=0;i<NUM_LOOPS;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<NUM_LOOPS;i++){printf("producer %d\n",i);fflush(stdout);//把信号量的数值增加1sem_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)){_sec=0;_nsec=10;nanosleep(&delay,NULL);}}break;}return 0;}四、实验原理及步骤1.实验原理进程用来述程序的并发执行,进程有3种基本状态:运行态、就绪态和阻塞态。