《操作系统原理》课程实验指导书.docx

上传人:叶*** 文档编号:89028895 上传时间:2023-05-05 格式:DOCX 页数:48 大小:3.53MB
返回 下载 相关 举报
《操作系统原理》课程实验指导书.docx_第1页
第1页 / 共48页
《操作系统原理》课程实验指导书.docx_第2页
第2页 / 共48页
点击查看更多>>
资源描述

《《操作系统原理》课程实验指导书.docx》由会员分享,可在线阅读,更多相关《《操作系统原理》课程实验指导书.docx(48页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、操作系统原理课程实验指导书 (20142015学年第 2 学期)课程名称: 操作系统原理 授课班级: 2012级 教 研 室: 学科基础教研室 任课教师: 史军勇 一、 实验目标操作系统原理课程实验是一门专业实验课,是计算机科学与技术和网络工程专业的学生提升计算机科学知识的必要环节,要求学生通过本实验课程,掌握操作系统基本概念和原理,学会使用系统调用编写高级程序。二、 实验对象本实验开设对象为计算机科学与技术和网络工程专业本科学生,本课程为必修课程。三、 课程简介操作系统原理是计算机专业的核心课程之一。通过本课程的学习和实验,使学生掌握操作系统基本概念和原理,提高自身计算机的应用素质,并且培养

2、学生熟练使用系统调用编程技能,为他们以后的专业学习奠定良好的基础。四、 实验内容实验内容课时实验类型完成情况实验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操作系统六、

3、 成绩评定办法1实验成绩的评定成绩的评定依据两个方面:考勤成绩和考核成绩,前者占总评的30%,后者占总成绩的70%。考勤内容包括:是否按时到场;是否按进度要求完成任务;是否认真填写实验日记;是否保持实验设备完好无损等。2考核办法要求学生独立完成任务,并结合学生的动手能力,独立分析问题、解决问题的能力和创新精神,成绩分优、良、中、及格和不及格五等。其中,各等级的评判标准为:优秀标准:能独立完成课题要求;能正确回答老师的提问;平时表现好,认真编写实验报告。良好标准:能完成课题要求;基本上能正确回答老师的提问;平时表现较好,认真编写实验报告。中等标准:基本上能完成课题要求;基本能正确回答老师的提问;

4、平时表现较好,能编写实验报告。及格标准:能完成课题的主要要求;平时表现较好,能编写实验报告。不及格标准:上课不认真,缺课迟到多,不能完成课题要求;不认真填写实验、不上交实验报告。目 录实验一 Linux操作系统的安装1一、实验目的1二、实验设备1三、相关准备知识1四、实验步骤1五、实验要求15六、拓展分析及思考15实验二 Linux程序开发入门16一、实验目的16二、实验设备16三、相关准备知识16四、实验步骤16五、实验要求18六、拓展分析及思考18实验三 Linux多进程编程开发19一、实验目的19二、实验设备19三、相关准备知识19四、实验步骤19五、实验要求21六、拓展分析及思考21实

5、验四 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

6、三、相关准备知识45四、实验步骤45五、实验要求46六、拓展分析及思考46实验一 Linux操作系统的安装七、 实验目的学习使用VMware Workstation创建虚拟机,掌握Linux操作系统的安装。八、 实验设备VMware Workstation 9.0.1、Fedora Linux。九、 相关准备知识操作系统安装。十、 实验步骤获取或制作Linux系统安装光盘。从网站http:/fedoraproject.org下载Fedora Linux镜像。1. 用VMware Workstation创建一台Linux虚拟机。(1) 执行File-New Virtual Machine,弹出N

7、ew Virtual Machine Wizard对话框。(2) 单击Typical,点击Next按钮。单击I will install the operating system later,单击Next。(3) Guset operating system选择Linux,Version选择Red Hat Linux,单击Next。(4) Virtual machine name命名为Red Hat Linux,Location接受默认值,单击Next。(5) 接受默认值,单击Next。(6) 单击Finish。2. Linux系统安装(7) 插入第一张Linux系统安装光盘,启动机器,选择图

8、形安装界面,进入欢迎界面。(8) 越过光盘校验,进入安装语言选择界面。(9) 键盘配置。(10) 鼠标配置。(11) 安装类型(个人桌面、工作站、服务器、定制)选择定制。(12) 磁盘分区设置(自动、手工分区)选择自动。Linux使用Disk Druid进行分区。(13) 自动分区将删除磁盘上的一些数据。(14) 自动分区后的结果如所示。(15) 引导装载程序(GRUB、LILO)的配置。(16) 网络配置。(17) 防火墙的配置。(18) 附加语言支持。(19) 时区选择。(20) 设置根口令。(21) 验证配置。(22) 软件包选择,包括编辑器和开发工具。(23) 即将安装,提示准备开始安

9、装。(24) 安装完成后,提示创建引导盘。(25) 图形化界面配置。(26) 显示器配置。(27) 定制图形化配置。(28) 最后,完成安装。3. 系统的登录、注销和关闭启动Linux虚拟机,输入根用户名root及口令,即可进入图形界面。十一、 实验要求4. 学生必须认真阅读实验指导书,了解实验的目的,明确本次实验中所用实验程序。5. 学生必须认真听取老师对本实训的指导讲授,掌握基本知识。6. 写出实验报告,内容包括:实验目的、基本原理、实验步骤等内容。十二、 拓展分析及思考7. Linux操作系统安装的主要步骤有哪些?实验二 Linux程序开发入门十三、 实验目的学会文件、目录管理,掌握C程

10、序开发过程。十四、 实验设备VMware Workstation 9.0.1、Fedora Linux。十五、 相关准备知识Linux操作系统命令接口。十六、 实验步骤以图形化方式登录Linux系统,在桌面单击鼠标右键,选新建终端。8. 文件、目录管理。(29) pwd 功能:显示用户当前所处的目录的绝对路径。语法:pwd 例如,以root身份登录后,使用命令pwd将显示/root信息。(30) ls 功能:列出目录的内容,类似于DOS下的dir命令。 语法:ls 选项 目录或文件 命令中常用选项为-l,表示以长格式来显示文件的详细信息。每行列出的信息依次是:文件类型与权限、链接数、文件属主、

11、文件属组、文件大小、建立或最近修改的时间、名字等。其中,文件类型与权限由10个字符构成,第一个字符表示文件类型,可以是-(普通文件)、d(目录)、l(符号链接)、b(块设备文件)、c(字符设备文件)、p(管道文件)、f(堆栈文件)。后面的9个字符表示文件的访问权限,分为3组,每组3位。第一组表示文件属主的权限,第二组表示同组用户的权限,第三组表示其他用户的权限。每一组的三个字符分别表示对文件的读、写和执行权限。各权限为r(读)、w(写)、x(执行)。例如,root用户登录系统后,使用ls l命令,出现如下结果:-rw-r-r- 1 root root 3256 10月 8 07:08 inst

12、all.log.syslogdrwxr-xr-x r root root 4096 10月 11 22:42 vi(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目录为空。(

13、34) vivi(visual interface)是Linux系统中最常用的编辑器。vi的工作模式有命令模式、插入模式和末行模式三种。在Linux命令行方式下输入vi命令,运行后首先进入命令模式。在命令模式输入插入命令i,附加命令a,打开命令o,修改命令c等即可进入插入模式,插入模式可以进行文字编辑。插入模式下,按Esc键回到命令模式。在命令模式下,用户按:键进入末行模式,此时,在窗口底部显示“:”作为提示符等待用户输入命令。末行模式下输入w保存当前编辑的文件,输入q系统退出vi,输入q!,则放弃修改退出。末行模式下,按Esc键回到命令模式。(35) cp功能:将给出的文件或目录拷贝到另一文

14、件或目录中,类似MSDOS下的copy命令。语法: cp 源文件或目录 目标文件或目录 例如,cp /root/* /temp实现将root目录下的所有文件拷贝至/tmp。(36) mv功能:移动或者重命名文件。 语法:mv 源文件 目标文件或目录例如: mv a add实现将当前目录下文件a重命名为add。(37) rm功能:删除一个目录中的一个或多个文件或目录。语法:rm 文件名 例如,rm /tmp/my.c将删除/tmp目录下的my.c文件。(38) clear功能:清除屏幕上的信息,清屏后,提示符移动到屏幕左上角。9. C程序开发(39) 使用vi编辑C语言源程序(40) gcc编译

15、和链接(41) 运行程序。(42) make工具的使用。十七、 实验要求10. 学生必须认真阅读实验指导书,了解实验的目的,明确本次实验中所用实验程序。11. 学生必须认真听取老师对本实训的指导讲授,掌握基本知识。12. 写出实验报告,内容包括:实验目的、基本原理、实验步骤等内容。十八、 拓展分析及思考13. Linux平台程序开发的主要步骤及使用的工具是什么?实验三 Linux多进程编程开发十九、 实验目的理解进程及进程实体概念、进程并发执行的异步性、进程树,学会fork系统调用。二十、 实验设备VMware Workstation 9.0.1、Fedora Linux。二十一、 相关准备知

16、识进程概念。二十二、 实验步骤14. 编写多进程程序#include #include int main()pid_t pid;pid=fork();if (pid=0) /等于0是子进程printf(The child:%dn, getpid();else /大于0是父进程printf(The parent:%dn, getpid();fork系统调用创建新的进程,父进程和子进程拥有两份相同的程序映像,父进程中,pid是新创建的子进程号,大于0;而在子进程中,pid的值是0。验证操作:(43) 程序运行时共输出了几条语句。思考:(44) 程序运行时为什么会打印两条语句?15. 写时复制。#i

17、nclude int x;int main()pid_t pid;pid=fork();if (pid=0) /等于0是子进程printf(The child:%dn, getpid();x=3;else /大于0是父进程printf(The parent:%dn, getpid();x=4;printf(x=%dn,x);验证操作:(45) 程序运行共输出了几条语句?(46) x的值输出了几次?思考:(47) x为什么会输出不同的值?16. 并发执行#include int main()int i;double j;pid_t pid;pid=fork();if (pid=0) /等于0是子

18、进程for(i=0;i10;i+)for(j=0;j10000000;j+);/不同平台进行相应调整,如100000000。printf(An);else /大于0是父进程for(i=0;i10;i+)for(j=0;j10000000;j+);/不同平台进行相应调整,如100000000。printf(Bn);验证操作:(48) 多次运行程序,每次程序运行输出的结果一样吗?思考:(49) 程序每次运行,为什么会输出不同的结果?17. 编写服务进程/linux平台#include int main()pid_t pid;pid=fork();if (pid=0) /等于0是子进程for(;);

19、else /大于0是父进程;验证操作:(50) 程序运行完后,是否还存在相关进程?(51) 注销,再登录系统,程序运行后留下的进程是否还存在?思考:(52) 用户注销后,为什么程序运行后留下的进程还存在?二十三、 实验要求18. 学生必须认真阅读实验指导书,了解实验的目的,明确本次实验中所用实验程序。19. 学生必须认真听取老师对本实训的指导讲授,掌握基本知识。20. 写出实验报告,内容包括:实验目的、基本原理、实验步骤等内容。二十四、 拓展分析及思考(53) 查看进程,如:ps e | grep test(54) 终止进程,如:kill pid(55) 注销,如:logout实验四 IPC信

20、号量机制二十五、 实验目的熟悉IPC软件包,理解其中的信号量机制,学会semget、semctl、semop系统调用。二十六、 实验设备VMware Workstation 9.0.1、Fedora Linux。二十七、 相关准备知识信号量概念。二十八、 实验步骤21. 初始化程序init.c/创建信号量#include #include #include #include /* 信号量外部标识符 */ #define KEY (1492) int main() int id;/* 信号量内部标识符*/union semunint val;struct semid_ds *buf;ushort

21、 *array;argument;argument.val=0;/信号量初始值;/创建信号量集,1代表信号量对象中包含的信号量个数。id=semget(KEY, 1, 0666|IPC_CREAT);if(id0)printf(Unable to obtain semaphore.n);exit(0);/*id代表信号量对象,0代表信号量对象中的第0个信号量,SETVAL代表用argument参数中val成员的值来设定信号量的值。*/if(semctl(id, 0, SETVAL, argument)0)printf(Cannot set semaphore value.n);elseprin

22、tf(Semaphore %d initialized. n, KEY);22. 程序sema.c/程序sema.c#include #include #include #include /*信号量外部标识符*/#define KEY (1492)int main() int id; /*信号量内部标识符*/struct sembuf operations1;int retval;/获取信号量对象id=semget(KEY, 1, 0666);if(id0)printf(Program sema cannot find semaphore, exiting.n);exit(0);/a程序要完成

23、的任务printf(This is the A task.n);/设置operations结构体字段/指明信号量对象中的哪一个信号量operations0.sem_num=0;/指示在信号量上进行加1操作operations0.sem_op=1;/*0代表使得操作系统跟踪当前进程对这个信号量的修改情况,如果这个进程在没有释放该信号量的情况下终止,操作系统将自动释放该进程持有的信号量。*/operations0.sem_flg=0;/执行V操作,operations定义了操作的序列,1指明操作序列的长度retval = semop(id, operations, 1);if(retval=0)p

24、rintf(Successful V-operation by program sema.n);elseprintf(sema: V-operation did not succeed.n);23. 程序semb.c/程序semb.c#include #include #include #include /*信号量外部标识符*/#define KEY (1492)int main()int id; /*信号量内部标识符*/struct sembuf operations1;int retval;/获取信号量对象id=semget(KEY, 1, 0666);if(id0)printf(Prog

25、ram semb cannot find semaphore, exiting. n);exit(0); /设置operations结构体字段/指明信号量对象中的哪一个信号量operations0.sem_num=0;/指示在信号量上进行减1操作operations0.sem_op=-1;/*0代表使得操作系统跟踪当前进程对这个信号量的修改情况,如果这个进程在没有释放该信号量的情况下终止,操作系统将自动释放该进程持有的信号量。*/operations0.sem_flg=0;/执行P操作,operations定义了操作的序列,1指明操作序列的长度retval=semop(id, operatio

26、ns, 1);/在此阻塞if(retval=0)printf(Successful P-operation by program semb.n);elseprintf(semb: P-operation did not succeed.n);/b程序要完成的任务printf(This is the B task.n);24. 删除信号量程序delsem.c/创建信号量#include #include #include #include /* 信号量外部标识符 */ #define KEY (1492) int main() int id;/* 信号量内部标识符*/union semunint

27、 val;struct semid_ds *buf;ushort *array;argument;/获取信号量对象id=semget(KEY, 1, 0666);if(id0)printf(Program semb cannot find semaphore, exiting. n);exit(0); /*id代表信号量对象,0代表信号量对象中的第0个信号量,IPC_RMID代表删除信号量操作。*/if(semctl(id, 0, IPC_RMID, argument)0)printf(Cannot delete semaphore.n);elseprintf(Semaphore %d del

28、eted. n, KEY);验证操作:(56) 先运行init程序;再在后台运行semb程序,看semb是否能够结束?在前台运行sema程序,检查b程序是否运行结束?(57) 查看1492信号量。(58) 删除1492信号量。思考:程序b先运行,为什么直到程序a运行后,才能结束?二十九、 实验要求25. 学生必须认真阅读实验指导书,了解实验的目的,明确本次实验中所用实验程序。26. 学生必须认真听取老师对本实训的指导讲授,掌握基本知识。27. 写出实验报告,内容包括:实验目的、基本原理、实验步骤等内容。三十、 拓展分析及思考28. 后台运行程序,如:./b &;29. ipc软件包对象查看,如

29、:ipcs;30. ipc软件包对象删除,如:ipcrm;实验五 IPC共享存储器机制三十一、 实验目的熟悉IPC软件包共享存储器机制,理解其中的共享存储器机制,学会shmget、shmat系统调用。三十二、 实验设备VMware Workstation 9.0.1、Fedora Linux。三十三、 相关准备知识进程间通信。三十四、 实验步骤31. 头文件shm.h/定义共享存储区外部标识符及结构#define KEY 1492struct bufferdouble x;32. 初始化程序init.c/创建共享存储区#include #include #include #include #i

30、nclude shm.hint main() int shmid;struct buffer *retaddr;/创建共享存储区shmid=shmget(KEY, sizeof(struct buffer), IPC_CREAT|0660);if(shmid= -1) printf(Creating shared memory failed.n);exit(0);else printf(Creating shared memory succeed.n);printf(Shared memory key:%d.n,KEY);printf(Shared memory id:%d.n,shmid);

31、/映射共享存储区retaddr=(struct buffer *)shmat(shmid,0,0);if (int)retaddr= -1) printf(reflecting shared memory error.n);exit(0);/x初始值为0retaddr-x=0;33. 加法程序add.c#include #include #include #include #include shm.hint main()int shmid;double i;struct buffer *retaddr;/获得共享存储区shmid=shmget(KEY, sizeof(struct buffer

32、), 0666);if (shmid= -1) printf(Getting shared memory error. n);exit(0);/将共享存储区映射到进程自己的内存空间retaddr =(struct buffer *)shmat(shmid, 0,0);if (int)retaddr = -1) printf(Reflecting shared memory error. n);exit(0);for(i=1;ix+; /for结束34. 减法程序subtraction.c#include #include #include #include #include shm.hint

33、main()int shmid;double i;struct buffer *retaddr;/获得共享内存shmid=shmget(KEY, sizeof(struct buffer), 0666);if (shmid= -1) printf(Getting shared memory error. n);exit(0);/将共享内存映射到进程自己的内存空间retaddr =(struct buffer *)shmat(shmid, 0,0);if (int)retaddr = -1) printf(Reflecting shared memory error. n);exit(0);fo

34、r(i=1;ix-;/for结束35. 输出程序print.c#include #include #include #include #include shm.hint main()int shmid;struct buffer *retaddr;/获得共享内存shmid=shmget(KEY, sizeof(struct buffer), 0666);if (shmid= -1) printf(Getting shared memory error. n);exit(0);/将共享内存映射到进程自己的内存空间retaddr =(struct buffer *)shmat(shmid, 0,0

35、);if (int)retaddr = -1) printf(Reflecting shared memory error. n);exit(0);printf(x=%fn,retaddr-x);exit(1);验证操作:(59) 编译并多次运行程序,检查x的结果。(60) 修改加法和减法程序中的i值,将i的值改小些,例如100,检查。思考:(61) x的结果对吗?每次运行结果为什么不一样?(62) 如何利用信号量机制解决?x的结果?三十五、 实验要求36. 学生必须认真阅读实验指导书,了解实验的目的,明确本次实验中所用实验程序。37. 学生必须认真听取老师对本实训的指导讲授,掌握基本知识。3

36、8. 写出实验报告,内容包括:实验目的、基本原理、实验步骤等内容。三十六、 拓展分析及思考39. 采用make工具编译程序;all:init add subtraction printinit:init.c shm.hgcc init.c -o initadd:add.c shm.hgcc add.c -o addsubtraction:subtraction.c shm.hgcc subtraction.c -o subtractionprint:print.c shm.hgcc print.c -o printclean:rm -f init add subtraction print40

37、. 采用shell脚本运行程序;#!/bin/sh./initecho run add./add &echo run subtraction./subtraction &echo wait.FoundLine=ps -e | grep add | wc -lwhile test $FoundLine -ne 0doFoundLine=ps -e | grep add | wc -ldone echo add overFoundLine=ps -e | grep subtraction | wc -lwhile test $FoundLine -ne 0doFoundLine=ps -e | g

38、rep subtraction | wc -ldone echo subtraction overecho -n the result:./printecho delete shared memory 1492.ipcrm -M 1492实验六 无名管道通信机制三十七、 实验目的熟悉Linux系统管道通信机制,理解无名管道和有名管道应用方法,学会pipe、read、write、mknod、fopen、fgets、fputs、fclose系统调用。三十八、 实验设备VMware Workstation 9.0.1、Fedora Linux。三十九、 相关准备知识进程间通信。四十、 实验步骤Pip

39、e系统调用用于创建无名管道,创建后返回两个句柄,如图所示,Fd0句柄用于读数据,fd1句柄用于写数据。无名管道没有外部标识符,只能在父子进程间使用。若父进程向子进程发送数据,则发送前要将fd0句柄关闭,而子进程要将fd1句柄关闭。/unamedpipe.c程序#include #include #include #define MAXLINE 256int main()int n,fd2;pid_t pid;char lineMAXLINE;if (pipe(fd)0)close(fd0);printf(Parent process send:hello world.n);write(fd1,hello world.n,14);wait();close(fd1);验证操作:(63) 子进程是否收到了父进程发送的消息?思考:(64) 无名管道为什么只能用于父子进程之间?四十一、 实验要求41. 学生必须认真阅读实验指导书,了解实验

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 工作总结

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁