宁夏师范学院——数学与计算机科学学院《操作系统》实验指导《OPERATINGSYSTEM》2013.08i前言计算机操作系统是计算机科学与技术专业的主要专业基础课程,其实践性、应用性很强。实践教学环节是必不可少的一个重要环节。计算机操作系统的实验目的是加深对理论教学内容的理解和掌握,使学生较系统地掌握操作系统的基本原理,加深对操作系统基本方法的理解,加深对课堂知识的理解,为学生综合运用所学知识,在Linux环境下调用一些常用的函数编写功能较简单的程序来实现操作系统的基本方法、并在实践应用方面打下一定基础。要求学生在实验指导教师的帮助下自行完成各个操作环节,并能实现且达到举一反三的目的,完成一个实验解决一类问题。要求学生能够全面、深入理解和熟练掌握所学内容,并能够用其分析、设计和解答类似问题;对此能够较好地理解和掌握,并且能够进行简单分析和判断;能够熟练使用Linux用户界面;掌握操作系统中进程的概念和控制方法;了解进程的并发,进程之间的通信方式,了解虚拟存储管理的基本思想。同时培养学生进行分析问题、解决问题的能力;培养学生完成实验分析、实验方法、实验操作与测试、实验过程的观察、理解和归纳能力。为了收到良好的实验效果,编写了这本实验指导书。在指导书中,每一个实验均按照该课程实验大纲的要求编写,力求紧扣理论知识点、突出设计方法、明确设计思路,通过多种形式完成实验任务,最终引导学生有目的、有方向地完成实验任务,得出实验结果。任课教师在实验前对实验任务进行一定的分析和讲解,要求学生按照每一个实验的具体要求提前完成准备工作,如:查找资料、设计程序、完成程序、写出预习报告等,做到有准备地上机。进行实验时,指导教师应检查学生的预习情况,并对调试过程给予积极指导。实验完毕后,学生应根据实验数据及结果,完成实验报告,由学习委员统一收齐后交指导教师审阅评定。ii目录操作系统实验大纲..............................................1第一部分实验环境及所用系统函数介绍...........................31.1Linux操作系统简介....................................31.2Linux的使用..........................................3第二部分实验内容.............................................7实验一熟悉LINUX基本命令及编程环境.......................7实验二进程管理..........................................10实验三进程调度..........................................14实验四进程间通信........................................19实验五存储管理实验......................................22.1.操作系统实验大纲一、教学目的和要求操作系统课程是一门理论性很强的专业课,操作系统实验是该课程的辅助课程。通过该课程的学习,使得学生能够熟悉1-2种实用的操作系统,理解其工作原理,掌握其使用;并能举一反三,具备自学其它操作系统的能力;通过实验加强对操作系统基本原理的理解,掌握操作系统五大管理功能。进一步了解和掌握操作系统原理,提高系统设计的能力。二、主要仪器设备计算机(要求安装windows和linux双系统)三、实验项目设置与内容序号实验项目学时项目要求项目类型项目性质目的要求1熟悉Linux基本命令及编程环境2必修操作验证理解操作系统的接口功能;掌握Linux操作系统的常用命令;掌握vi编辑器的使用。2进程管理4必修操作验证加深对进程概念的理解,明确进程和程序的区别;进一步认识并发执行的实质;分析进程争用资源的现象,学习解决进程互斥的方法。3进程调度4必修操作验证通过编程熟悉进程控制块和进程组织方式;熟悉进程调度的概念和时间片轮转调度算法。4进程间通信4必修操作验证验证Linux系统的进程通信机构(IPC)允许在任意进程间大批计算机量地交换数据。实验的目的是了解和熟悉Linux支持的消息通信机制、共享存储区机制及信息量机制。5存储管理实验4必修操作设计通过请求页式存储管理中页面置换算法模拟设计,了解虚拟存储技术的特点,掌握请求页式存储管理的页面置换算法。四、教材与参考资料.2.教材:《操作系统》实验指导参考书:汤小丹主编《计算机操作系统》(第四版),西安电子科学出版社,2007年参考资料:[1]任爱华等编著《操作系统实验指导》,清华大学出版社,2004年[2]周苏编著《操作系统原理实验》,科学出版社,2004年[3]孟静编著《操作系统题解与实验指导》,高等教育出版社,2002年五、教学资源多媒体实验室,实验指导,现场投影设备,linux,unix软件等。六、考核评价考核方式以提交的实验报告为主,考核成绩由平时成绩和实验报告两部分组成。要求随时检查学生考勤,批改实验报告,对于上机实验,可以采用学生相互批阅、小组讨论的形式批阅学生作业,并对存在的问题及时给予反馈。以上两个成绩累计60分以上(包括60分)算考核通过。.3.第一部分实验环境及所用系统函数介绍DOS操作系统是单道操作系统,无法进行多道程序设计,Windows环境下的VisualC++虽然也可用于多道程序设计,但是并不是完全的多道,因为它也可用于DOS编程。所以我们的实验选用Linux操作系统。Linux操作系统是一个类UINX操作系统,是一个纯多道并发的网络操作系统。1.1Linux操作系统简介Linux是一个多用户操作系统,是UNIX的一个克隆版本(界面相同但内部实现不同),同时它是一个自由软件,是免费的、源代码开放的,这是它与UNIX的不同之处。现在,Linux凭借优秀的设计,不凡的性能,加上IBM、Intel、CA、CORE、Oracle等国际知名企业的大力支持,市场份额逐步扩大,已成为与Windows和UNIX并存的三大主流操作系统之一。1.2Linux的使用1.2.1vi的使用1)vi的简单应用vi是linux环境下赫赫有名的文本编辑工具之一。进入vi编辑器的方法:vifilename.c注:文件名必须带有扩展名.c,如filename.c否则无法通过编译;进入vi后要按:按“i”键从命令方式切换到输入方式;从输入方式切换到命令方式的方法:按“Esc”键保存文件:w保存文件并退出:wq不保存文件退出:q!注:以上操作必须在命令方式下进行。2)其他常用vi操作命令j,k,h,l:上下左右0:行首$:行尾ctrl+f:后翻页.4.ctrl+b:前翻页G:文件尾数字G:数字所指定行i,I:插入命令,i在当前光标处插入,I行首插入a,A:追加命令,a在当前光标后追加,A在行末追加o,O:打开命令,o在当前行下打开一行,O在当前行上插入一行x:删除光标处字符dd:删除当前行d0:删除光标前半行d$:删除光标后半行r,R:替换命令,r替换当前光标处字符,R从光标处开始替换/string:查找字符串n:继续查找N:反向继续查找%:查找对应括号u:取消上次操作注:以上操作必须在命令方式下进行。1.2.2gcc的使用gcc是linux下的一种c程序编译工具,使用方法如下(有提示符#的情况):编译:gcc–ofilename1filename.c其中:filename.c是源文件名,filename1是目标文件名,o代表object执行:./filenamel示例:键入一简单的程序:viab.c按回车键输入以下代码段,#includestdio.h#includeunisted.hmain(){printf(“aaaa”);}按ESC键,再按“:WQ”(W是保存,Q是退出)出现提示符:[root@GGG-LINUXroot]#键入:gcc–oabab.c进行编译。执行:./ab1.2.3主要系统调用函数.5.1)系统调用fork()功能:创建一个新的进程.头文件:#includeunistd.h说明:本系统调用产生一个新的进程,叫子进程,是调用进程的一个复制品.调用进程叫父进程,子进程继承了父进程的几乎所有的属性。(1)该子进程继承了父进程的程序空间,复制了父进程的数据段和栈段。也就是说不管是父进程还是子进程,在占有处理机后,都从fork()调用的返回点开始运行;(2)调用成功则对父进程返回子进程标识号pid;(3)调用成功对子进程返回0,这也是最方便的区分父子进程的方法。(4)若调用失败则返回-1给父进程,子进程不生成。注意:如果fork()值0,0的数即是子进程号。但这时是父进程占有处理机。2)系统调用wait(&status)功能:等待子进程结束。(1)当有多个子进程时,任一个子进程结束即将控制返回调用者,并将子进程调用exit(status)时的status值送到&status指针所指单元中。(2)在控制返回调用者时,同时将所等到的子进程pid作为wait()系统调用函数的返回值。(3)waitpid(pid,…):等待pid所指定的进程结束。(4)返回值:等待到一个子进程返回时,返回值为该子进程号;否则返回值为–1。说明:允许调用进程(即父进程)取得子进程的状态信息,调用进程将会挂起直到其一个子进程终止。3)系统调用exit()功能:终止进程.语法:#includestdlib.hvoidexit(status)intstatus功能:调用进程被该系统调用终止。该系统调用发出后,操作系统将从系统中删除调用exit的进程,并将status值传给等待它结束的父进程。返回值:无4)系统调用kill()功能:向一个或一组进程发送一个信号。语法:#includesignal.hintkill(pid,sig);pid_tpid;intsig;说明:向一个或一组进程发送一个信号,该信号由参数sig指定,为系统给出的信号表.6.中的一个。Sig是signal的缩写。返回值:调用成功则返回0,否则返回-1.kill-STOP[pid]:发送SIGSTOP(17,19,23)停止一个进程,而并不消灭这个进程。kill-CONT[pid]:发送SIGCONT(19,18,25)重新开始一个停止的进程。kill-KILL[pid]:发送SIGKILL(9)强迫进程立即停止,并且不实施清理操作。kill-9-1:终止拥有的全部进程。SIGKILL和SIGSTOP信号不能被捕捉、封锁或者忽略。5)系统调用lockf()功能:应用、检测或删除打开文件的一个POSIX锁语法:#includeunistd.hintlockf(intfd,intcmd,off_tlen);说明:应用、检测或删除打开文件某部分的一个POSIX锁,文件通过fd指明,文件的描述符的请求操作通过cmd指明。#defineF_ULOCK0解锁一个区域#defineF_LOCK1上锁一个区域#defineF_TLOCK2检测并上锁一个区域#defineF_TEST3检测一个区域是否上锁文件上锁区域的请求起始于隐含的偏移并包好len字节,假如len为负,从pos…pos+len-1,这里pos为当前文件位置,假如len为零,则位置从当前文件位置延伸延伸到无限长,包括当前和以后的文件最后的位置。在所有情况下,位置可延伸到以前当前的文件的最后位置。在Linux中,这称为fcntl(2)的接口(一般会指明lockf和fcntl的关系)。6)系统调用pipe()是用来建立管道的。语法:#includeunistd.hintpipe(intfd[2]);这里fd[1]为写入端,fd[0]为读出端。功能:从管道里写或从管道里读。操作系统实验指导书.7.第二部分实验内容实验一熟悉LINUX基本命令及编程环境一、实验类型本实验为验证性实验。二、实验目的与任务1)熟