广西师范大学计应专业操作系统实验

上传人:飞*** 文档编号:42023285 上传时间:2018-05-31 格式:PDF 页数:79 大小:870.45KB
返回 下载 相关 举报
广西师范大学计应专业操作系统实验_第1页
第1页 / 共79页
广西师范大学计应专业操作系统实验_第2页
第2页 / 共79页
广西师范大学计应专业操作系统实验_第3页
第3页 / 共79页
广西师范大学计应专业操作系统实验_第4页
第4页 / 共79页
广西师范大学计应专业操作系统实验_第5页
第5页 / 共79页
点击查看更多>>
资源描述

《广西师范大学计应专业操作系统实验》由会员分享,可在线阅读,更多相关《广西师范大学计应专业操作系统实验(79页珍藏版)》请在金锄头文库上搜索。

1、广西师范大学计算机科学与信息工程学院操作系统实验书1 操作系统课程实验年级2011 级专业计算机科学与技术(应用型)指导教师黄 玲2012 年 9 月 15 日广西师范大学计算机科学与信息工程学院操作系统实验书2 欢迎进入操作系统实验!操作系统是计算机系统的核心和灵魂,通过实验, 可以帮助我们掌握操作系统的精髓,真正做到深刻理解和融会贯通用。本学期实验30 学时, 安排如下:实验一、熟悉Linux 环境( 2 学时,第4 周) . 3实验二、 Linux 进程同步与通信(4 学时,第 5、6 周) . 6实验三、进程管理模拟实验(6 学时,第7、8、9 周) . 14 实验四、 Linux 线

2、程死锁实验(2学时,第10 周) . 30 实验五、存储管理实验(6 学时,第11、 12、13 周) . 34 实验六、设备管理实验(4 学时,第14、15 周) . 50 实验七、文件系统管理实验(6 学时,第16、17、18 周) . 62 上述实验,有的在Linux环境下执行,主要目的是学习Linux API 的使用;其他的在Windows 环境下执行,采用Visual Studio C+ 开发环境(较好的调试环境),实现模拟管理实验。 建议 Linux 实验采用Ubutu 8 (及以上版本 ),其内核为Linux2.6 。可以从Ubuntu 网站下 载 光 盘 镜 像 并 刻 录 安

3、 装 , 网 址 : http:/。 Ubuntu中 文 论 坛 :http:/ 后,进入其终端,可以在命令行界面运行Linux 指令。广西师范大学计算机科学与信息工程学院操作系统实验书3 实验一、熟悉Linux 环境( 2 学时,第 4 周)1.实验目的熟悉 Linux 的基本命令、 C 开发环境、程序执行。2.实验环境Ubuntu 8.0 3. 实验内容3.1 熟悉 Linux 界面进入 ubuntu,进入终端,执行所下述命令,观察结果:ls 、cat、 cp、mv、rm、mkdir 、cd、 rmdir、man、ps、 kill 进入终端:应用程序-附件 -终端。为了方便,可以把终端图标

4、放到桌面上。命令输入提示符$表示当前处于普通用户状态,命令输入提示符#表示当前处于超级用户状态。有关Linux命令,可以参看附件“Linux常用命令 .doc” ,也可以到网上查找。按键CTRL+C 可以中断命令的执行。3.2 Linux 下 C 程序的编写及其执行(1)一般性步骤:第一步,使用文本编辑器编辑后缀为.c 的源程序。进入文本编辑器:应用程序-附件 -文本编辑器。(为了方便,可以把文本编辑器放在桌面)第二步,进入终端的命令行界面,在源程序所在目录,编译源程序,一般命令如下:gcc o 目标文件名源程序文件名第三步,如果没有错误,在当前目录下,运行目标程序:./目标文件名更多 Lin

5、ux 环境安装、实验编写,可参考书籍:Linux 操作系统实验教程费翔林主编高等教育出版社更多编写 Linux 系统的 C 程序,请查阅Linux C 函数库。推荐参考书:Linux C 函数库参考手册徐千洋中国青年出版社或请查看附件“Linux C 函数库说明 .pdf”更多的 linux 命令,请查阅网络或者书籍。建议参考书:Linux 应用与开发典型实例精讲邱铁清华大学出版社(2) 、编辑、编译链接、执行下面C 语言程序:父进程创建一个子进程,并等待子进程结束;子进程调用execve 启动 shell 的 ps 命令,查看系统当前的进程信息。#include 广西师范大学计算机科学与信息

6、工程学院操作系统实验书4 #include #include main() pid_t pid; char* str; char* path=“/bin/ps“; char* argv5=“ps“,“-a“,“-x“,NULL; if (pid=fork()0时继续父进程执行(pid 为子进程号):wait(); /父进程等待子进程结束printf(“父进程退出!n“); exit(0); /父进程结束 函数说明:(1)、pid_t fork(void) 创建子进程。如创建成功,在父进程返回子进程代码,在子进程则返回0。fork ()创建的子进程与父进程运行于不同的地址空间,即父子各有独立空间

7、,但子进程会复制父进程的资源 (如同一份代码,打开文件等等)。父子进程之间的通信只能通过共享内存、消息、管道等方式进行。(2)、 pid_t wait() 暂停当前进程的执行,直到有信号来或者子进程结束。(3) 、 void exit(int status) 正常结束当前进程,并把参数status 返回给父进程广西师范大学计算机科学与信息工程学院操作系统实验书5 (4) 、 int execve(const char* filename,char* const argv,char* const envp) 执行参数filename 字符串所代表的文件路径,argv 传递给执行文件,envp 为

8、执行文件需要的新环境变量。如执行文件能成功执行则函数不会返回,执行失败返回-1。(5) 、pid_t vfork(void) 创建子进程。vfork() 不同fork() 。vfor() 创建的子进程与父进程共享同一地址空间,即子进程完全运行在父进程的地址空间上,子进程对虚拟地址空间任何数据的修改,父进程可见。但父进程创建子进程之后,父进程会被阻塞,直到子进程执行exec()或 exit() 。更多的函数说明,请查看附件“Linux C 函数库说明 .pdf”在源程序所在目录下编译连接:(假设上述源程序文件名myc.c,目标文件名myexe)gcc o myexe myc.c 运行目标程序:

9、/myexe 3.3 查看进程在一个命令终端1 执行下述程序:#include #include main() long k; k=0; printf(“nprocess ID=%d 中断: ctrl+c“,(int)getpid(); while(1) sleep(1); printf(“n%d“,k+); 打开另外一个终端2,执行命令:ps -a -l 观察上述进程相关内容,并用kill 命令终止它。广西师范大学计算机科学与信息工程学院操作系统实验书6 实验二、 Linux 进程同步与通信(4 学时,第 5、6 周)1、实验目的理解进程的高级通信;理解通过信号量实现进程的同步。2、实验环境

10、Ubuntu 8.0 3、实验内容3.1 观察 Linux 进程通信下面代码实现两个进程之间通过共享内存通信。#include #include #include #include #define KEY 1234 #define SIZE 64 main() pid_t pid; /进程号int shmid; /共享内存标识号char* shmaddr; /共享内存的起始地址shmid=shmget(KEY,SIZE,IPC_CREAT|0600); /创建共享内存shmid, 大小为 SIZE. if (pid=fork() #include #include #include #incl

11、ude #include #include #include #define MAXSEM 5 / 声明三个信号灯ID int fullid; int emptyid; int mutxid; int main() struct sembuf P,V; /对信号量操作时需要的数据结构union semun arg; /对信号量操作时需要的数据结构条件为真对信号量执行P 操作取数据并相加对信号量执行V 操作休眠一下是否取完数据?显示求和结果退出是否取完数据?广西师范大学计算机科学与信息工程学院操作系统实验书10 / 声明虚拟主存int *array; int *sum; int *set; in

12、t *get; / 创建虚拟主存。即变量作为共享虚拟主存实现。array = (int *)mmap(NULL , sizeof( int )* MAXSEM,PROT_READ|PROT_WRITE,MAP_SHARED|MAP_ANONYMOUS,-1,0); sum = (int *)mmap(NULL , sizeof( int),PROT_READ|PROT_WRITE,MAP_SHARED|MAP_ANONYMOUS,-1,0); get = (int *)mmap(NULL , sizeof( int),PROT_READ|PROT_WRITE,MAP_SHARED|MAP_AN

13、ONYMOUS,-1,0); set = (int *)mmap(NULL , sizeof( int),PROT_READ|PROT_WRITE,MAP_SHARED|MAP_ANONYMOUS,-1,0); *sum = 0; /初始化变量*get = 0; *set = 0; /创建信号量fullid= semget(IPC_PRIVATE,1,IPC_CREAT|00666); /该信号量用于消费者获取数据emptyid=semget(IPC_PRIVATE,1,IPC_CREAT|00666); /该信号量用于生产者获空闲缓冲区mutxid=semget(IPC_PRIVATE,1,

14、IPC_CREAT|00666); /该信号量用于对缓冲区的互斥/为信号灯赋初值arg.val = 0; if(semctl(fullid , 0 , SETVAL , arg) = -1) perror(“semctl setval error“); arg.val = MAXSEM; if(semctl(emptyid , 0 ,SETVAL , arg) = -1) perror(“semctl setval error“); arg.val = 1; if(semctl(mutxid , 0 ,SETVAL , arg) = -1) perror(“setctl setval erro

15、r“); / 初始化 P,V操作V.sem_num=0; V.sem_op =1; V.sem_flg=SEM_UNDO; P.sem_num=0; P.sem_op =-1; P.sem_flg=SEM_UNDO; /生产者进程if(fork() = 0 ) int i = 0; while( i =0? 信号量申请失败处理:阻塞当前进程,保存当前进程现场,释放处理器。返回 true(失败)信号量 semse的值加 1 信号量 semse的值 0? 有等待进程处理: 唤醒等待进程,保存当前进程现场。返回TRUE (有等待进程)返回 false (申请成功)返回 FALSE (无等待进程)广西师范大学计算机科学与信息工程学院操作系统实验书20

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号