西电软院操作系统实验报告.docx
- 文档编号:5605458
- 上传时间:2022-12-28
- 格式:DOCX
- 页数:20
- 大小:1.42MB
西电软院操作系统实验报告.docx
《西电软院操作系统实验报告.docx》由会员分享,可在线阅读,更多相关《西电软院操作系统实验报告.docx(20页珍藏版)》请在冰豆网上搜索。
西电软院操作系统实验报告
西电软院操作系统实验报告(总23页)
操作系统实验报告
实验报告册
班级:
学号:
姓名:
教师:
褚华
实验说明
重要提示
实验1Linux(虚拟机)安装及Linux常用命令使用
实验2makefile的编写及Linux内核编译
实验3Linux的进程和线程
实验4同步与互斥
实验5文件系统
实验说明
1.实验做为学习的重要促进手段,是为了深化对理论的理解,锻炼实践动手能力。
2.实验同时也作为考核的手段。
3.实验内容会在课程进行中下达,并且会分次地、部分地被抽查。
4.课程结束时,要求把所有的实验整理成一个完整的电子文档并上交,做为最后成绩的评定依据。
5.如果有兴趣的合适的题目,也可自己选题目。
格式说明
1.本文档文件名命名为“学号-姓名”,如“_小王”。
2.留白部分不足的自己调整长度,也可加页(增加内容应在表格内)。
3.每次的实验报告都要在这个文件中(按照实验次序依次)增加,而不是每次一个新的word文件。
4.本文档保存为doc格式(请勿用Word2007的docx格式)。
重要提示:
1.实验正文建议使用小四号或五号宋体。
2.若附加图形,则请直接嵌入到实验手册相应位置。
3.各实验的源程序,请按实验分目录存放,如第一个实验的源程序存放在目录lab1下,第二个实验的源程序存放在目录lab2下等等,依次类推。
4.可互相讨论,但严禁抄袭网络或同学的实验结果。
实验编号
1
题目
Linux(虚拟机)安装及Linux常用命令使用
实验目的
1.安装虚拟机
2.学习linux基本操作
实验内容
1.安装虚拟机
2.熟悉linux操作
报告内容要求
(1)实现方法和思路
(2)测试及结果
报告正文
实验一:
安装虚拟机
由于我一直使用linux物理机
在本系列实验中我将使用的是我自己的linux物理机,所以就不用安装虚拟机了
实验二:
熟悉linux操作
Linux的基本操作有
一:
目录操作
lspwdmkdirrmdir
其中
1.ls是查看当前目录内容
使用方法ls-lls-al
2.pwd是显示当前所在目录的绝对路径
使用方法pwd
3.mkdir是创建一个新目录
使用方法mkdirdirname
4.rmdir是删除一个空目录
使用方法rmdirdirname注意dirname一定要是空目录才行
二:
文件操作
touch
使用方法touchfilename如果文件不存在则新建文件,否则不处理
cp
使用方法cpoldfilenamenewfilename拷贝oldfilename为newfilename
rm
使用方法rmfilename删除filename文件
mv
使用方法mvoldfilenamenewfilename将oldfilename移动到newfilename
find
使用方法findpathname-namefilename在pathname路径下寻找文件filename
三:
文本文件查看命令
cat
使用方法catfilename查看filename文件
more
使用方法morefilename也是查看filename不过不是一次将文件全部显示
less
使用方法lessfilename
head-nnfilename查看filename文件的前n行
tail
使用方法tail-nnfilename查看filename文件的后n行
实验编号
2
题目
makefile的编写及Linux内核编译
实验目的
1.通过自己编译linux内核的过程,理解并掌握linux内核的编译方法,以及linux启动过程
2.了解linux的makefile文件的编写,明白make在linux工程中的重要作用
实验内容
1.自己用源代码编译linux内核
2.学习并熟悉linux的makefile语法及编写方法
报告内容要求
(1)实现方法和思路
(2)测试及结果
报告正文
内容一:
编译linux内核
Ubuntu版本号
1.当前linux内核版本待编译内核版本首先解压内核源码压缩包
2.cd进入内核源码所在目录
3.makemenuconfig进入图形配置界面
4.在图形配置界面并设置版本号
5.执行make进入编译步骤,等待不短的时间直到编译完成
6.执行makemodule进行内核模块的编译
7.执行makeinstall安装内核
8.执行makemodules_install安装内核模块
9.执行sudomkinitramfs-o/boot/
更新grub执行update-grub2
10.重启即可
实验编号
3
题目
Linux的进程和线程
实验目的
1.通过自己动手编写进程创建等函数,了解linux中进程的概念以及基本使用方法
2.通过自己动手编写线程的一系列函数,连接linux中线程的概念以及基本使用方法
实验内容
1.掌握常用的进程函数forkwaitsignalpausekillexit等
2.了解进程的
3.了解线程与进程的区别和联系
4.掌握常用的线程函数
5.学会线程的创建,同步,互斥,退出
报告内容要求
(1)实现方法和思路
(2)测试及结果
报告正文
1.通过几个示例程序来掌握linux的进程概念以及基本进程函数
示例一:
通过这个示例进程可以知道如何获得进程号,父进程号以及群组号
运行结果为
示例二:
通过这个例程,明白如何利用创建一个子进程,并且如何区分两个进程
同时理解了僵尸进程的概念,并且知道父进程和子进程的运行顺序是不确定的,也明白了wait函数的使用方法以及作用
运行结果如下
可以看到父子进程的运行是没有特定的先后顺序的,而由于wait函数父进程要等待子进程结束才能结束,否则子进程可能成为僵尸进程
示例三:
运行结果如下
通过了这个程序,明白了linux如何通过注册信号句柄来实现信号机制
先通过signal函数注册句柄,但是此时句柄函数不会运行,知道本进程接收到了在signal中指定的信号才会执行该句柄函数
在本例中的信号是外部键盘中断,也就是Ctrl+C
示例四:
这个示例程序也是说明linux的信号机制的运作方式的,
本程序通过调用fork函数,创建出一个子进程,随后在父进程中注册了一个接受SIGUSR1信号的函数,usr1_handler,接着休眠,直到接受到信号
然后在子进程中使用kill函数向父进程发送一个SIGUSR1信号,唤醒父进程
随后父进程醒来,并因为wait函数等待子进程结束
运行结果如下
示例五:
本示例通过函数pthread_create()函数创建了一个线程,这个函数节后一个pthread_t的线程号类型,以及函数名作为参数,执行完该函数后myThread函数就作为一个新的线程开始执行了,但是要注意,线程的开始要有一段时间,而不是立即结束,所以如果进程中没有用join或者sleep一段时间的话,可能会看不到线程的开始
实验编号
4
题目
同步与互斥
实验目的
1.学习理解并发中的互斥原理
2.掌握peterson算法的原理及实现方法
3.实现生产者消费者模型
实验内容
1.实现peterson算法
2.利用peterson算法的原理,实现生产者消费者模型
报告内容要求
(1)实现方法和思路
(2)测试及结果
报告正文
一:
本实验利用软件方法实现同步互斥,也就是通过peterson算法,不通过中断等物理机制实现同步互斥
Peterson算法特点:
使用两个全局变量(flg[]和turn)
Flg[]表示哪个进程正在占用临界区及临界区的状态
Turn表示能进入临界区的进程序号。
此算法涉及两个原则:
忙则等待
空闲让进
实现代码如下
该算法满足解决临界区问题的三个必须标准:
互斥访问,进入,有限等待.互斥访问P0与P1显然不会同时在临界区:
如果进程P0在临界区内,那么或者flag[1]为假(意味着P1已经离开了它的临界区),或者turn为0(意味着P1只能在临界区外面等待,不能进入临界区).进入进入(Progress)定义为:
如果没有进程处于临界区内且有进程希望进入临界区,则只有那些不处于剩余区(remaindersection)的进程可以决定哪个进程获得进入临界区的权限,且这个决定不能无限推迟。
剩余区是指进程已经访问了临界区,并已经执行完成退出临界区的代码,即该进程当前的状态与临界区关系不大。
有限等待有限等待(Boundedwaiting)意味着一个进程在提出进入临界区请求后,只需要等待临界区被使用有上限的次数后,该进程就可以进入临界区。
即进程不论其优先级多低,不应该饿死(starvation)在该临界区入口处。
Peterson算法显然让进程等待不超过1次的临界区使用,即可获得权限进入临界区。
二:
用peterson算法生产者消费者模型
运行结果如下
可以看出在结果中,消费者必须等待生产者生产了数才能对临界区进行访问
代码中,shared_num为临界区,每次进行能存放一个数字
shared_num是自动递增的
生产者每次生产一个数字
而消费者要在生产者生产出数字后才能进行数字的读取
可以看出,即使生产者在最后sleep了一秒,消费者还是不能进行,因为此时临界区已经是空的了,消费者不能继续进行
实验编号
5
题目
文件系统
实验目的
1.掌握锁的结构和操作
2.掌握如何对文件进行加锁,解锁
3.学会如何协调不同进程对同一文件的互斥操作
实验内容
1.文件锁的测试
以下选做
2.获取文件的状态信息
3.创建一个带有空洞的文件
4.掌握lseek函数的用法
报告内容要求
(1)实现方法和思路
(2)测试及结果
报告正文
实验一:
文件锁的测试
实验代码如下
首先定义两个锁结构,并对其进行初始化然后fork一个子进程,接着在父进程中加上独占锁,并对文件进行写操作,同时在子进程中对文件试图进行加锁,由于父进程已经对文件上了锁,所以子进程输出文件当前正被锁住
也就是结果lockon
运行结果如下
实验二(选做):
创建带有空洞的文件
这个实验能够同时学习如何创建带有空洞的文件以及lseek函数的使用
程序首先创建一个空文件,然后在文件开始处写入十个字符abcdefghij
然后用lseek定位到100字符位置处(即使中间为空洞,中间被自动填充为0)
然后写入十个字符ABCDEFGHIJ
因此最后文件大小应该是110字节
如下图
命令od-c
查看文件内容如下,可以看到中间全为\0
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 西电软院 操作系统 实验 报告