《操作系统原理》课程实验指导书.docx
- 文档编号:6102998
- 上传时间:2023-01-03
- 格式:DOCX
- 页数:53
- 大小:743.69KB
《操作系统原理》课程实验指导书.docx
《《操作系统原理》课程实验指导书.docx》由会员分享,可在线阅读,更多相关《《操作系统原理》课程实验指导书.docx(53页珍藏版)》请在冰豆网上搜索。
《操作系统原理》课程实验指导书
《操作系统原理》课程实验指导书
(2014~2015学年第2学期)
课程名称:
操作系统原理
授课班级:
2012级
教研室:
学科基础教研室
任课教师:
史军勇
实验目标
《操作系统原理》课程实验是一门专业实验课,是计算机科学与技术和网络工程专业的学生提升计算机科学知识的必要环节,要求学生通过本实验课程,掌握操作系统基本概念和原理,学会使用系统调用编写高级程序。
实验对象
本实验开设对象为计算机科学与技术和网络工程专业本科学生,本课程为必修课程。
课程简介
《操作系统原理》是计算机专业的核心课程之一。
通过本课程的学习和实验,使学生掌握操作系统基本概念和原理,提高自身计算机的应用素质,并且培养学生熟练使用系统调用编程技能,为他们以后的专业学习奠定良好的基础。
实验内容
实验内容
课时
实验类型
完成情况
实验1:
Linux操作系统的安装
2
验证型
实验报告
实验2:
Linux程序开发入门
2
验证性
实验报告
实验3:
Linux多进程编程开发
2
设计性
实验报告
实验4:
IPC信号量机制
2
设计性
实验报告
实验5:
IPC共享存储器机制
2
设计性
实验报告
实验6:
无名管道通信机制
2
设计性
实验报告
实验7:
有名管道通信机制
2
设计性
实验报告
实验8:
Linux多线程编程开发
2
设计性
实验报告
实验9:
面向连接的网络通信
2
设计性
实验报告
实验10:
文件读写
2
设计性
实验报告
实验条件
硬件:
微型计算机
软件:
Linux操作系统
成绩评定办法
1.实验成绩的评定
成绩的评定依据两个方面:
考勤成绩和考核成绩,前者占总评的30%,后者占总成绩的70%。
考勤内容包括:
是否按时到场;是否按进度要求完成任务;是否认真填写实验日记;
是否保持实验设备完好无损等。
2.考核办法
要求学生独立完成任务,并结合学生的动手能力,独立分析问题、解决问题的能力和创新精神,成绩分优、良、中、及格和不及格五等。
其中,各等级的评判标准为:
⑴优秀标准:
能独立完成课题要求;能正确回答老师的提问;平时表现好,认真编写实验报告。
⑵良好标准:
能完成课题要求;基本上能正确回答老师的提问;平时表现较好,认真编写实验报告。
⑶中等标准:
基本上能完成课题要求;基本能正确回答老师的提问;平时表现较好,能编写实验报告。
⑷及格标准:
能完成课题的主要要求;平时表现较好,能编写实验报告。
⑸不及格标准:
上课不认真,缺课迟到多,不能完成课题要求;不认真填写实验、不上交实验报告。
目录
实验一Linux操作系统的安装1
一、实验目的1
二、实验设备1
三、相关准备知识1
四、实验步骤1
五、实验要求15
六、拓展分析及思考15
实验二Linux程序开发入门16
一、实验目的16
二、实验设备16
三、相关准备知识16
四、实验步骤16
五、实验要求18
六、拓展分析及思考18
实验三Linux多进程编程开发19
一、实验目的19
二、实验设备19
三、相关准备知识19
四、实验步骤19
五、实验要求21
六、拓展分析及思考21
实验四IPC信号量机制22
一、实验目的22
二、实验设备22
三、相关准备知识22
四、实验步骤22
五、实验要求26
六、拓展分析及思考26
实验五IPC共享存储器机制27
一、实验目的27
二、实验设备27
三、相关准备知识27
四、实验步骤27
五、实验要求30
六、拓展分析及思考31
实验六Linux多线程编程开发32
一、实验目的37
二、预备内容37
三、相关准备知识37
四、实验步骤37
五、实验要求38
六、拓展分析及思考38
实验七面向连接的网络通信39
一、实验目的39
二、预备内容39
三、相关准备知识39
四、实验步骤39
五、实验要求44
六、拓展分析及思考44
实验八文件读写45
一、实验目的45
二、实验设备45
三、相关准备知识45
四、实验步骤45
五、实验要求46
六、拓展分析及思考46
实验一Linux操作系统的安装
一、实验目的
学习使用VMwareWorkstation创建虚拟机,掌握Linux操作系统的安装。
实验设备
VMwareWorkstation9.0.1、FedoraLinux。
相关准备知识
操作系统安装。
实验步骤
获取或制作Linux系统安装光盘。
从网站http:
//fedoraproject.org下载FedoraLinux镜像。
1.用VMwareWorkstation创建一台Linux虚拟机。
(1)执行File->NewVirtualMachine…,弹出NewVirtualMachineWizard对话框。
(2)单击Typical,点击Next按钮。
单击Iwillinstalltheoperatingsystemlater,单击Next。
(3)Gusetoperatingsystem选择Linux,Version选择RedHatLinux,单击Next。
(4)Virtualmachinename命名为RedHatLinux,Location接受默认值,单击Next。
(5)接受默认值,单击Next。
(6)单击Finish。
2.Linux系统安装
(7)插入第一张Linux系统安装光盘,启动机器,选择图形安装界面,进入欢迎界面。
(8)越过光盘校验,进入安装语言选择界面。
(9)键盘配置。
(10)鼠标配置。
(11)安装类型(个人桌面、工作站、服务器、定制)选择定制。
(12)磁盘分区设置(自动、手工分区)选择自动。
Linux使用DiskDruid进行分区。
(13)自动分区将删除磁盘上的一些数据。
(14)自动分区后的结果如所示。
(15)引导装载程序(GRUB、LILO)的配置。
(16)网络配置。
(17)防火墙的配置。
(18)附加语言支持。
(19)时区选择。
(20)设置根口令。
(21)验证配置。
(22)软件包选择,包括编辑器和开发工具。
(23)即将安装,提示准备开始安装。
(24)安装完成后,提示创建引导盘。
(25)图形化界面配置。
(26)显示器配置。
(27)定制图形化配置。
(28)最后,完成安装。
3.系统的登录、注销和关闭
启动Linux虚拟机,输入根用户名root及口令,即可进入图形界面。
实验要求
4.学生必须认真阅读实验指导书,了解实验的目的,明确本次实验中所用实验程序。
5.学生必须认真听取老师对本实训的指导讲授,掌握基本知识。
6.写出实验报告,内容包括:
实验目的、基本原理、实验步骤等内容。
拓展分析及思考
7.Linux操作系统安装的主要步骤有哪些?
实验二Linux程序开发入门
二、实验目的
学会文件、目录管理,掌握C程序开发过程。
实验设备
VMwareWorkstation9.0.1、FedoraLinux。
相关准备知识
Linux操作系统命令接口。
实验步骤
以图形化方式登录Linux系统,在桌面单击鼠标右键,选新建终端。
8.文件、目录管理。
(29)pwd
功能:
显示用户当前所处的目录的绝对路径。
语法:
pwd
例如,以root身份登录后,使用命令pwd将显示/root信息。
(30)ls
功能:
列出目录的内容,类似于DOS下的dir命令。
语法:
ls[选项][目录或文件]
命令中常用选项为-l,表示以长格式来显示文件的详细信息。
每行列出的信息依次是:
文件类型与权限、链接数、文件属主、文件属组、文件大小、建立或最近修改的时间、名字等。
其中,文件类型与权限由10个字符构成,第一个字符表示文件类型,可以是-(普通文件)、d(目录)、l(符号链接)、b(块设备文件)、c(字符设备文件)、p(管道文件)、f(堆栈文件)。
后面的9个字符表示文件的访问权限,分为3组,每组3位。
第一组表示文件属主的权限,第二组表示同组用户的权限,第三组表示其他用户的权限。
每一组的三个字符分别表示对文件的读、写和执行权限。
各权限为r(读)、w(写)、x(执行)。
例如,root用户登录系统后,使用ls–l命令,出现如下结果:
…
-rw-r--r--1rootroot325610月807:
08install.log.syslog
drwxr-xr-xrrootroot409610月1122:
42vi
…
(31)cd
功能:
改变当前工作目录。
语法:
cd目录名
例如,cd/usr/bin表示切换到/usr/bin目录。
目录可以用相对路径,也可以用绝对路径。
(32)mkdir
功能:
创建目录。
语法:
mkdir目录名
例如,mkdir/tmp/os将在/tmp目录下创建新目录os,若/tmp不存在,则需要使用-p选项,否则出错。
(33)rmdir
功能:
删除空目录。
语法:
rmdir目录名
例如,rmdir/tmp/os将删除/tmp下的os目录,该命令要求c目录为空。
(34)vi
vi(visualinterface)是Linux系统中最常用的编辑器。
vi的工作模式有命令模式、插入模式和末行模式三种。
在Linux命令行方式下输入vi命令,运行后首先进入命令模式。
在命令模式输入插入命令i,附加命令a,打开命令o,修改命令c等即可进入插入模式,插入模式可以进行文字编辑。
插入模式下,按Esc键回到命令模式。
在命令模式下,用户按:
键进入末行模式,此时,在窗口底部显示“:
”作为提示符等待用户输入命令。
末行模式下输入w保存当前编辑的文件,输入q系统退出vi,输入q!
,则放弃修改退出。
末行模式下,按Esc键回到命令模式。
(35)cp
功能:
将给出的文件或目录拷贝到另一文件或目录中,类似MSDOS下的copy命令。
语法:
cp源文件或目录目标文件或目录
例如,cp/root/*/temp实现将root目录下的所有文件拷贝至/tmp。
(36)mv
功能:
移动或者重命名文件。
语法:
mv源文件目标文件或目录
例如:
mvaadd实现将当前目录下文件a重命名为add。
(37)rm
功能:
删除一个目录中的一个或多个文件或目录。
语法:
rm文件名…
例如,rm/tmp/my.c将删除/tmp目录下的my.c文件。
(38)clear
功能:
清除屏幕上的信息,清屏后,提示符移动到屏幕左上角。
9.C程序开发
(39)使用vi编辑C语言源程序
(40)gcc编译和链接
(41)运行程序。
(42)make工具的使用。
实验要求
10.学生必须认真阅读实验指导书,了解实验的目的,明确本次实验中所用实验程序。
11.学生必须认真听取老师对本实训的指导讲授,掌握基本知识。
12.写出实验报告,内容包括:
实验目的、基本原理、实验步骤等内容。
拓展分析及思考
13.Linux平台程序开发的主要步骤及使用的工具是什么?
实验三Linux多进程编程开发
三、实验目的
理解进程及进程实体概念、进程并发执行的异步性、进程树,学会fork系统调用。
实验设备
VMwareWorkstation9.0.1、FedoraLinux。
相关准备知识
进程概念。
实验步骤
14.编写多进程程序
#include
#include
intmain()
{
pid_tpid;
pid=fork();
if(pid==0){//等于0是子进程
printf("Thechild:
%d\n",getpid());
}
else{//大于0是父进程
printf("Theparent:
%d\n",getpid());
}
}
fork系统调用创建新的进程,父进程和子进程拥有两份相同的程序映像,父进程中,pid是新创建的子进程号,大于0;而在子进程中,pid的值是0。
验证操作:
(43)程序运行时共输出了几条语句。
思考:
(44)程序运行时为什么会打印两条语句?
15.写时复制。
#include
intx;
intmain()
{
pid_tpid;
pid=fork();
if(pid==0){//等于0是子进程
printf("Thechild:
%d\n",getpid());
x=3;
}
else{//大于0是父进程
printf("Theparent:
%d\n",getpid());
x=4;
}
printf("x=%d\n",x);
}
验证操作:
(45)程序运行共输出了几条语句?
(46)x的值输出了几次?
思考:
(47)x为什么会输出不同的值?
16.并发执行
#include
intmain()
{
inti;
doublej;
pid_tpid;
pid=fork();
if(pid==0){//等于0是子进程
for(i=0;i<10;i++){
for(j=0;j<10000000;j++);//不同平台进行相应调整,如100000000。
printf("A\n");
}
}
else{//大于0是父进程
for(i=0;i<10;i++){
for(j=0;j<10000000;j++);//不同平台进行相应调整,如100000000。
printf("B\n");
}
}
}
验证操作:
(48)多次运行程序,每次程序运行输出的结果一样吗?
思考:
(49)程序每次运行,为什么会输出不同的结果?
17.编写服务进程
//linux平台
#include
intmain()
{
pid_tpid;
pid=fork();
if(pid==0){//等于0是子进程
for(;;);
}
else{//大于0是父进程
;
}
}
验证操作:
(50)程序运行完后,是否还存在相关进程?
(51)注销,再登录系统,程序运行后留下的进程是否还存在?
思考:
(52)用户注销后,为什么程序运行后留下的进程还存在?
实验要求
18.学生必须认真阅读实验指导书,了解实验的目的,明确本次实验中所用实验程序。
19.学生必须认真听取老师对本实训的指导讲授,掌握基本知识。
20.写出实验报告,内容包括:
实验目的、基本原理、实验步骤等内容。
拓展分析及思考
(53)查看进程,如:
ps–e|grep‘test’
(54)终止进程,如:
killpid
(55)注销,如:
logout
实验四IPC信号量机制
四、实验目的
熟悉IPC软件包,理解其中的信号量机制,学会semget、semctl、semop系统调用。
实验设备
VMwareWorkstation9.0.1、FedoraLinux。
相关准备知识
信号量概念。
实验步骤
21.初始化程序init.c
//创建信号量
#include
#include
#include
#include
/*信号量外部标识符*/
#defineKEY(1492)
intmain()
{
intid;/*信号量内部标识符*/
unionsemun{
intval;
structsemid_ds*buf;
ushort*array;
}argument;
argument.val=0;//信号量初始值;
//创建信号量集,1代表信号量对象中包含的信号量个数。
id=semget(KEY,1,0666|IPC_CREAT);
if(id<0)
{
printf("Unabletoobtainsemaphore.\n");
exit(0);
}
/*id代表信号量对象,0代表信号量对象中的第0个信号量,SETVAL代表用argument参数中val成员的值来设定信号量的值。
*/
if(semctl(id,0,SETVAL,argument)<0)
printf("Cannotsetsemaphorevalue.\n");
else
printf("Semaphore%dinitialized.\n",KEY);
}
22.程序sema.c
//程序sema.c
#include
#include
#include
#include
/*信号量外部标识符*/
#defineKEY(1492)
intmain()
{
intid;/*信号量内部标识符*/
structsembufoperations[1];
intretval;
//获取信号量对象
id=semget(KEY,1,0666);
if(id<0){
printf("Programsemacannotfindsemaphore,exiting.\n");
exit(0);
}
//a程序要完成的任务
printf("ThisistheAtask.\n");
//设置operations结构体字段
//指明信号量对象中的哪一个信号量
operations[0].sem_num=0;
//指示在信号量上进行加1操作
operations[0].sem_op=1;
/*0代表使得操作系统跟踪当前进程对这个信号量的修改情况,如果这个进程在没有释放该信号量的情况下终止,操作系统将自动释放该进程持有的信号量。
*/
operations[0].sem_flg=0;
//执行V操作,operations定义了操作的序列,1指明操作序列的长度
retval=semop(id,operations,1);
if(retval==0)
printf("SuccessfulV-operationbyprogramsema.\n");
else
printf("sema:
V-operationdidnotsucceed.\n");
}
23.程序semb.c
//程序semb.c
#include
#include
#include
#include
/*信号量外部标识符*/
#defineKEY(1492)
intmain()
{
intid;/*信号量内部标识符*/
structsembufoperations[1];
intretval;
//获取信号量对象
id=semget(KEY,1,0666);
if(id<0)
{
printf("Programsembcannotfindsemaphore,exiting.\n");
exit(0);
}
//设置operations结构体字段
//指明信号量对象中的哪一个信号量
operations[0].sem_num=0;
//指示在信号量上进行减1操作
operations[0].sem_op=-1;
/*0代表使得操作系统跟踪当前进程对这个信号量的修改情况,如果这个进程在没有释放该信号量的情况下终止,操作系统将自动释放该进程持有的信号量。
*/
operations[0].sem_flg=0;
//执行P操作,operations定义了操作的序列,1指明操作序列的长度
retval=semop(id,operations,1);//在此阻塞
if(retval==0)
printf("SuccessfulP-operationbyprogramsemb.\n");
else
printf("semb:
P-operationdidnotsucceed.\n");
//b程序要完成的任务
printf("ThisistheBtask.\n");
}
24.删除信号量程序delsem.c
//创建信号量
#include
#include
#include
#include
/*信号量外部标识符*/
#defineKEY(1492)
intmain()
{
intid;/*信号量内部标识符*/
unionsemun{
intval;
structsemid_ds*buf;
ushort*array;
}argument;
//获取信号量对象
id=semget(KEY,1,0666);
if(id<0)
{
printf("Programsembcannotfindsemaphore,exiting.\n");
exit(0);
}
/*id代表信号量对象,0代表信号量对象中的第0个信号量,IPC_RMID代表删除信号量操作。
*/
if(semctl(id,0,IPC_RMID,argument)<0)
printf("Cannotdeletesemaphore.\n");
else
printf("Semaphore%ddeleted.\n",KEY);
}
验证操作:
(56)先运行init程序;再在后台运行semb程序,看semb是否能够结束?
在前台运行sema程序,检查b程序是否运行结束?
(57)查看1492信号量。
(58)删除1492信号量。
思考:
程序b先运行,为什么直到程序a运行后,才能结束?
实验要求
25.学生必须认真阅读实验指导书
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统原理 操作系统 原理 课程 实验 指导书
![提示](https://static.bdocx.com/images/bang_tan.gif)