操作系统实验指导书3rd.docx
- 文档编号:15813646
- 上传时间:2023-07-08
- 格式:DOCX
- 页数:19
- 大小:28.71KB
操作系统实验指导书3rd.docx
《操作系统实验指导书3rd.docx》由会员分享,可在线阅读,更多相关《操作系统实验指导书3rd.docx(19页珍藏版)》请在冰点文库上搜索。
操作系统实验指导书3rd
版本号:
3.0
撰写人:
孙自广
合陈波〔博士〕
欧阳浩
日期:
2011-09-08
操作系统实验指导书
〔第3版〕
广西工学院计算机工程系
2021年09月
前言
操作系统是计算机科学与技术专业〔软件工程方向〕的一门非常重要的专业课程,操作系统是应用软件与底层硬件的桥梁。
通俗的说“只有搞懂了操作系统,才能真正理解计算机〞。
学好操作系统课程可以提升学生应用计算机解决问题的才能,并获得开发大型复杂软件的经历。
操作系统至关重要,但学好它并不容易。
虽然Windows界面友好,方便使用,但是底层运行机制被有效的隐藏,在很多人眼里计算机还是一个黑匣子。
在选择教学用操作系统上颇费苦心,目前可用于教学的操作系统有Minix,Nochos,Geekos,JOS,FreeBSD等,而Linux不仅是开源的,而且资料丰富并拥有大量的应用软件,所有我们选择了Linux作为实验的平台。
本实验指导书参阅了很多网上的优秀资源,在此对提供这些资源的作者,表示感谢。
实验1Linux的安装与使用
1.实验目的
在做本课程系列实验之前需要先安装Linux系统。
假设你的计算机上已经安装了Linux,那么本实验可以不做。
熟悉Linux提供的图形用户界面。
2.实验预备知识
Linux系统的安装方法和图形界面根本操作请参考相关资料。
3.实验内容
〔1〕在虚拟机软件VMWare上安装Linux操作系统,版本是RedHatLinux9。
〔2〕进入Linux的资源管理器,以树状构造查看系统目录,并在/home目录下创立子目录,目录名任意。
〔3〕实现文本方式与图形方式的切换。
〔4〕翻开文字处理器,输入一段文字后存盘,与Word进展比较。
〔5〕插入软盘,单击桌面上的软盘上的软盘标志,观察软盘驱动器的动作,观察窗口上显示的问价名,核对是否是软盘上的文件。
〔6〕进入Linux的控制面板,参考Windows进展设置。
比方设置文字为中文、设置显示器等。
〔7〕进入子目录下查看有哪些文件夹,在进入其中的kernel子目录中看看,再进入其中的include/linux子目录看看有哪些头文件。
该文件夹是本课程后续章节所看到的数据构造集中存放的地方。
〔8〕选择菜单“红帽子〞—>“系统工具〞—>“系统监视器〞,进入Linux的系统监视器看看,与Windows的任务管理器进展比较。
4.实验要求与考虑
〔1〕按照系统提示进展安装,同时学习VMWare的使用方法。
〔2〕以Windows操作系统窗口的操作方式使用Linux图形界面,比较它们的异同。
〔3〕比较Linux的文本方式和窗口方式,哪种更受用户欢迎?
〔4〕可以翻开多个虚拟文本窗口吗?
比较它与实验2-1的文本有什么一样和不同之处。
实验2Linux的键盘命令
1.实验目的
〔1〕通过本实验使学生理解Linux所提供的用户界面中的键盘命令操作界面;
〔2〕纯熟掌握常用的键盘命令;
〔3〕理解Linux的实形式文本操作界面。
2.实验预备知识
请参考相关资料学习Linux的命令。
3.实验内容
进入Linux的文本方式,完成以下键盘命令的操作。
(1)目录操作
1在/home下建立自己的子目录,子目录名自己取,然后在自己的子目录下再创立子目录,可以多建几个。
2进入/home,查看创立的子目录。
3删除一部分自己的子目录下的子目录。
4再回自己的子目录,显示当前目录清单。
5显示当前目录所处的途径。
6在自己的子目录下再创立子目录sub和sub1。
7进入sub子目录。
(2)文件操作
1复制一部分文件到sub子目录〔当前目录〕
cp/usr/src/linux-2.4/kernel/*.c.
注意:
命令最后有一个小数点,表示目的地址为当前目录,后面的命令中也要注意。
2用长格式显示目录清单,看看文件的权限。
3查看sub目录中是否有sys.c文件〔只显示该文件名〕。
4
5查看sub目录中是否有mysys.c文件,是否还有sys.c文件。
6
7查看上述两个文件是否有一样的i节点号。
使用格式:
ls-i文件名//查看该文件的节点号
⑧按页显示文件mysys.c的内容〔分别使用more和less〕。
9将mysys.c按高比例进展压缩,压缩前后的文件大小进展观察和比较。
10将sub子目录下的所有文件进展打包,并压缩生成doc.tar文件。
11查看该文件,注意文件名的颜色。
12进入sub1子目录。
13在sub1子目录下将sub中的doc.tar文件解压到当前目录。
14查看sub1子目录下的文件,查看是否已经解压包解压。
15删除sub1下的所有文件〔一次性删除,不用选择提示〕。
16返回父目录。
17查找文件mysys.c。
18进入sub子目录。
19修改文件mysys.c的权限为如下。
文件拥有者:
可读,可写,可执行。
所属同组用户:
可读,可执行。
不同组用户:
可读。
20删除sub子目录下的所有文件,mysys.c除外,并查看是否完成。
21删除mysys.c。
22返回用户目录。
23删除sub和sub1子目录。
⑶历史命令的调用
用光标挪动键↑和↓显示已经用过的命令,体会其方便之处。
⑷日期与理论
1显示系统当前时间和日期。
2显示2002年12月的日历。
3显示2002年全年的日历。
⑸输入输出重定向
1键盘输入文件file1的内容〔用∧d存盘退出〕。
2键盘输入文件file2的内容。
3分别显示file1和file2。
4将文件file1,file2合并到file中。
5显示file。
6将file追加到file1的末尾。
7显示file1.
(6)管理操作
用一条命令合并file,file1,file2,并显示〔使用管道〕。
(7)安装与卸载U盘〔以下操作注意观察软驱是否运转〕
1 将U盘插入驱动器,并挂接到安装点上。
2 将文件file1复制到U盘上。
3 显示U盘上的文件清单〔文本文件与DOS兼容〕。
4 显示file1的内容〔该内容可以在Windows下显示出来〕。
5 将U盘卸载。
〔8〕用户管理
1 用root登录。
2 添加用户名为a1的用户。
3 为该用户设置密码:
123456
4 重新启动系统。
5 用a1登录并输入密码。
6 注意用户状态下的提示符与管理员状态下的不同。
7 重新启动系统,用root登录.
8 显示/etc/passwd/和/etc/shadow文件的内容,查看该用户信息。
9 删除用户a1。
10 重新启动系统再用a1登录,看系统是否允许;假设不允许,那么用root登录。
11 在/home下建子目录abc。
12 再添加用户b1,并指定其主目录为/home/abc。
13 显示/etc/passwd/和/etc/shadow文件的内容,查看该用户信息。
14 使用用户名b1进入该用户的主目录,查看是否进入/home/abc。
15 删除用户b1。
(1)在用root登陆时,注意是以特权用户的身份登录的,具有最大的实用权利,因此也极易破坏系统。
(2)在修改密码时要注意,假设不给出用户名,那么系统默认用户就是特权用户,被修改的密码是特权用户的密码。
实验3-1Linux进程的创立与父子进程同步
1.实验目的
〔1〕熟悉在C语言源程序中使用Linux所提供的系统调用界面的方法;
〔2〕掌握Linux中进程的创立方法以及调度执行情况,理解进程与程序的区别;
〔3〕使用系统调用wait()和exit(),实现父子进程同步;
〔4〕理解Linux提供的C编译器gcc的调用;
〔5〕进一步掌握vi的使用。
2.实验预备知识
〔1〕vi的使用请参考相关资料。
〔2〕C编译器gcc的使用请参考相关资料。
3.实验内容
〔1〕父进程创立子进程,返回后父子进程都分别循环输出字符串“Iamparent.〞或“Iamchild.〞5次,每输出一次后使用sleep
(1)延时1秒,然后再进入下一次循环,如下所示。
将该源程序链接后执行,观察并分析运行结果。
父进程返回后执行:
for(i=0;i<5;i++)
{
printf(“Iamparent.\n〞);
sleep
(1);
}
子进程返回后执行:
for(i=0;i<5;i++)
{
printf(“Iamchild.\n〞);
sleep
(1);
}
〔2〕进程家族树
在源程序中连续使用4个fork(),而不是用if()进展返回值的判段,在4个fork()语言后面输出字符“A〞。
观察并分析该程序编译连接执行后的输出结果。
〔3〕父子同步进程
修改第〔1〕题的程序,使用exit()和wait()实现父子进程同步,其同步方式为父进程等待子进程的同步,即:
子进程先循环输出5次,然后父进程再循环输出5次.观察是否有不同的结果出现。
4.实验要求与考虑
〔1〕观察运行结果,分析结果产生的原因。
〔2〕当程序中创立了子进程后,该程序的执行有什么特点?
为什么?
〔3〕假设连续创立多个子进程而不使用条件进展各自空间的分隔,会出现什么情况?
请画出第〔2〕题实验的进程家族树。
〔4〕如何实现父子进程之间的父进程等待子进程的同步?
实验3-2Linux子进程映像的重新加载
1.实验目的
〔1〕掌握在Linux中如何加载属于子进程自己的程序,以取代在子进程创立时由系统复制的父进程的程序;
〔2〕掌握父进程通过创立子进程来完成某项任务的方法;
〔3〕熟悉系统调用execv()和execl()的使用。
2.实验预备知识
有关Linux子进程映像的重新加载的知识点请相关资料。
3.实验内容
〔1〕由父进程创立一个子进程,子进程的功能是输出26个英文字母,使用execl()加载子进程的程序。
〔2〕创立一个子进程,并使用execv()给它加载程序,其功能是调用键盘命令ps–a.键盘命令ps的途径与文件名为:
/bin/ps。
4.实验考虑
〔1〕加载子进程映像的目的何在?
〔2〕如何加载子进程映像?
实验4-1Linux软中断通信
1.实验目的
(1)掌握软中断通信信号的使用;
(2)熟悉通过软中断信号实现子进程等待父进程的同步;
(3)理解使用软中断通信实现异步事件的方法;
(4)熟悉线程的使用。
2.实验预备知识
(1)与本实验软中断通信有关的知识点请参考相关资料。
(2)与本实验线程有关的知识点请参考相关资料。
3.实验内容
(1)编写一个程序循环显示“Howareyou?
〞,当键盘输入Ctrl+C的组合键后中断循环显示,执行软中断程序,软中断程序的功能是修改循环变量的值终止循环,然后输出“Byebye〞。
(2)使用软中断实现父子进程同步,同步方式为:
父进程先输出字符“A〞,然后子进程再输出“B〞。
(3)编写一个程序,完成以下功能。
1父进程创立两个子进程P1和P2;
2父进程捕捉从键盘上通过Ctrl+C键发来的中断信号;
3父进程获得中断信号后使用系统调用kill()向两个子进程分别发终止执行信号SIGUSR1和SIGUSR2;
4子进程捕捉到各自的信号后分别输出:
Child1iskilledbyparent!
和
Child2iskilledbyparent!
然后终止执行〔无先后次序的要求〕:
5父进程等待两个子进程终止后输出以下信息,然后终止执行:
Parentprocessiskilled!
(4)编写一个程序,完成以下功能。
由进程创立一个线程,并定义软中断信号Ctrl+C终止进程执行。
运行后,父子两个线程分别循环输出“Thissismainpthread.\n〞和“Thisisthesecondpthread.\n〞。
父进程接收软中断信号出循环,然后显示“Byebye!
\n〞后终止执行。
说明:
由于线程没有自己的地址空间,所以父进程执行终止后其子线程也会随之终止,因此该程序中只需要父线程接收软中断信号后终止即可。
4.实验考虑
(1)对实验内容〔1〕进展改进,先输出10次“Howareyou?
〞,在此过程中使用Ctrl+C不能中断循环显示,10次以后使用Ctrl+C可以中断循环。
(2)本次实验内容〔2〕实现子进程等待父进程,而实验3-2中实现了父进程等待子进程,它们分别采用了什么方法?
互相之间可不可以代替?
(3)实验内容〔3〕中一共存在几个进程?
它们执行的顺序是怎么样的?
假设如今要务实现进程间的同步关系child1、child2、parent,需要怎样改进?
(4)线程的创立与执行与进程有何区别?
当程序后中使用了创立线程的调用后,其编译参数与进程有何不同?
实验4-2Linux管道通信
1.实验目的
〔1〕掌握父子进程使用管道进展通信的方法。
〔2〕理解管道通信的特点和使用上的限制。
2.实验预备知识
理解无名管道工作原理和无名管道编程实现。
3.实验内容
编写一个程序,实现以下功能。
〔1〕父进程使用系统调用pipe()建立一个无名管道;
〔2〕创立两个子进程,分别向管道各分布下面中一条信息后完毕;
Child1issendingamessagetoparent!
Child2issendingamessagetoparent!
(3)父进程从管道中分别接收两个子进程发来的消息并显示该消息,然后父进程完毕。
(4)两个子进程的发送没有先后要求。
4、实验考虑
〔1〕管道通信与软件中断通信在信息量的大小上有何区别?
〔2〕共享同一个管道进展通信的读写进程之间必须满足什么关系?
为什么?
实验4-3Linux信息缓冲通信
1.实验目的
(1)掌握Linux中进程之间使用消息缓冲实现进程通信的方法;
(2)理解消息缓冲通信的特点;
(3)理解Linux提供的IPC机制。
2.实验预备知识
查找资料理解消息缓冲通信的实现方法。
3.实验内容
〔1〕父进程创立一个消息队列和一个子进程,由子进程发送消息,父进程等待子进程完毕后接收子进程发来的消息,并显示消息内容。
以“end〞作为完毕消息。
〔2〕分别编写发送进程和接收进程,由发送进程发送消息,接收进程接收消息。
采用先执行发送进程后执行接收进程的方式同步。
以“end〞作为完毕消息。
〔3〕模拟C/S通信,要求如下。
1模拟客户〔Client端〕程序client,其功能如下。
a)显示以下效劳功能菜单:
Enteryourchoice:
1.Savemoney
2.Takemoner
b)接收用户键入的功能号进展选择;
c)将用户键入的功能号作为一条信息发送消息队列,然后完毕。
②模拟效劳器端〔Server端〕程序server,其功能如下。
a)从消息队列接搜Client端发来一条消息:
b)根据消息作如下处理。
假设消息为“1〞,那么创立子进程1,由子进程1加载效劳模块save,该模块的作用为显示以下信息:
Yourmoneywassaved!
假设消息为“2〞,那么创立子进程2,由子进程2加载效劳模块take,该模块的作用为显示以下消息:
Pleasetakeyourmoney!
c)等待子进程终止后,Server进程删除消息队列,然后完毕。
注意:
1save和take要事先编译连接好,放在适宜的子目录下;
2采用先运行客户端进程,然后运行效劳器端进程的方式实现同步;
3子进程的加载方法请参考实验3-2。
4.实验考虑
(1)消息缓冲通信有哪些特点?
(2)在使用消息缓冲通信进展通信时,发送和接收之间的同步机制由谁提供?
(3)消息缓冲通信与管道通信有哪些不同之处?
当两个独立的进程之间需要传递大量信息时,应该使用其中哪一种通信方式?
实验4-4Linux共享存储通信
1.实验目的
(1)掌握Linux提供的共享存储区通信方式的使用方法。
(2)理解共享存储区通信方法的特点。
(3)理解实现进程间通信的不同方法之间的区别、特点和适用情况。
2.实验预备知识
(1)理解共享存储区通信方式的适用方法。
(2)理解子进程等待父进程的同步的实现方法。
1创立一个共享存储区间;
2将它附接到自己的地址空间;
3循环写入假设干信息,以“end〞完毕〔提示:
信息以追加方式存放到共享区中,可以用strcat()函数实现追加〕;
4断开共享区;
5完毕。
1创立/获取同一个共享存储区;
2将它附接到自己的地址空间;
3输入其中已经由发送地方输入的内容;
4断开共享区
5删除共享区
6完毕。
采用先执行发送进程、后执行承受进程来实现同步。
(2)父进程创立一个共享存储区,然后创立子进程;采用终端实现父进程发送信息和子进程承受信息的同步;信息以“end〞作为完毕标志。
4.实验考虑
(1)共享存储区间通信有哪些优点?
使用上有哪些限制?
适用于哪种场合?
(2)总结共享存储区通信与消息缓冲通信、管理通信方式各有哪些特点?
实验5Linux信号量与P、V操作函数的定义
1.实验目的
(1)掌握Linux信号量的使用方法和P、V操作函数的定义;
(2)掌握使用P、V操作实现进程之间的同步和互斥的方法;
(3)加深对进程同步互斥概念的理解。
2.实验预备知识
(1)Linux信号量的使用方法请参考附件材料。
(2)共享存储通信请参考实验4-4.
(3)用P、V操作实现进程互斥与同步请参考附件材料。
3.实验内容
(1)使用信号量及P、V操作实现进程互斥。
阅读附件材料中例4-9,将程序编译连接后运行,观察运行结果。
(2)使用信号量及P、V操作实现子进程之间通过共享内存通信的读写同步,如实验图5-1所示。
要求如下:
消费者进程消费者进程A
sum
父进程
消费者进程B
实验图5-1
1请参考附件材料中的例4-11,设计一个父进程,创立三个子进程。
3个子进程中一个是消费者进程,两个是消费者进程。
父子进程都使用父进程创立的共享存储区进展通信。
2由消费者进程发送数值1~10到由5个缓冲区组成的共享内存中,两个消费者进程轮流承受并输入这10个数据,同时将两个消费者进程对读出的所有数据进展累加求和。
33个子进程完毕后,由父进程输出两个消费者进程所读出数据的累加和。
它们的同步关系使用P、V操作系统。
提示:
在例4-11使用2个共享内存的根底上再使用一个共享内存来存放读出信息的累加和,由两个消费者进程和父进程共享使用。
4.实验考虑
(1)针对每个信号量需要进展哪些定义?
(2)总结使用信号量系统调用的步骤与方法。
(3)进程之间如何使用信号量及其P、V操作实现互斥?
(4)进程之间如何使用信号量及其P、V操作实现同步?
(5)总结数值型共享内存作为变量或作为数组的使用方法。
实验6在Linux中增加一个新的系统调用函数
1.实验目的
(1)理解在Linux内核中增加一个系统调用函数的方法;
(2)理解内核被修改后必须重新编辑连接的道理,理解编译连接的过程。
2.实验预备知识
(1)系统调用的实现原理请参考相关材料;
(2)在Linux内核中增加一个系统调用的方法和步骤请参考附件材料。
3.实验内容
在Linux内核中增加一个系统调用函数,其功能是输出一个字符串,并返回数值5。
测试函数中调用该函数,并输出其返回值,查看是否将字符串和返回值输出。
4.实验考虑
(1)作为操作系统,为用户提供系统调用用户界面需要做那些工作?
(2)用户如何将新的系统调用函数增加到Linux内核中?
(3)在实现的过程中,遇到了那些困难?
是如何解决的?
实验7动态申请内存
1.实验目的
(1)掌握Linux中动态申请内存的方法;
(2)理解操作系统对于高级语言程序设计所提供的环境变量支撑。
2.实验预备知识
Linux内存分配策略和系统调用请参考附件材料。
3.实验内容
(1)使用键盘命令以字节为单位显示系统中的内存使用情况,特别是当前系统中的空闲内存大小。
(2)编写一个程序申请两块大小为10的内存,分别存放字符串“123456789〞和“987654321〞,并输出字符串及存放地址,然后重新调整内存大小为20,再次输出地址。
(3)再次显示系统中的内存使用情况,看看前后系统中的空闲内存大小有没有变化。
4.实验考虑
(1)实验内容〔1〕中的前后两次输出的内存地址有何不同?
与附件材料中的例11-2相比区别在哪里?
为什么会产生这些?
(2)在程序中申请使用了内存后有没有释放?
假设不释放申请的内存,会产生什么后果?
实验8Linux字符设备驱动
1.实验目的
(1)理解设备驱动程序的编写、编译、和装载、卸载的方法;
(2)理解设备文件的创立;
(3)理解如何编写测试程序测试自己的系统是否可以正常工作。
2.实验预备知识
请参考附件材料中“字符设备驱动程序实例分析〞中的mydriver.
3.实验内容
将附件材料节中的mydriver在自己的计算机上实现,并测试该字符设备的open、write和read函数。
4.实验考虑
(1)设备与文件的接口是什么?
(2)实现对字符设备需要编写哪些函数?
如何实现?
(3)在对设备,模块进展编译时与普通文件的编译有何不同?
需要增加哪些参数?
(4)在调试运行中遇到了哪些问题?
是如何解决的?
实验9Linux文件系统调用
1.实验目的
〔1〕掌握Linux提供的文件系统调用的使用方法;
〔2〕熟悉文件操作的系统调用用户接口;
〔3〕理解操作系统文件系统的工作原理和工作方式。
2.实验预备知识
Linux文件系统调用中的相关调用格式和参数说明请参考附件材料。
3.实验内容
编写一个文件工具filetools,使其具有以下功能:
*********************************
1、退出
2、创立新文件
3、写文件
4、读文件
5、修改文件权限
6、查看当前文件权限并退
*********************************
提示用户输入功能号,并根据用户输入的功能选择完成相应的功能。
〔1〕先做一个针对一个文件的工具,即该工具可以处理的一个给定的文件。
〔2〕在〔1〕的根底上加以改进,是该工具可以处理任意文件,文件名由用户从键盘输入。
〔3〕要求在完成某个功能后返回主菜单,只有在主菜单下选择0或查看权限后才能退出该工具,返回操作系统。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 实验 指导书 rd
![提示](https://static.bingdoc.com/images/bang_tan.gif)