操作系统实验精选报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
操作系统课程设计实验报告
2015年 1 月 9日成绩:
沈 XX13055805
姓名夏 XX学号13055807班级13052314江 XX13055816
专业计算机科学与技术课程名称操作系统课程设计
任课老师赵伟华指导老
赵伟华师
实验序号1实验名
进度调动管理称
实验时间15 年 10实验地
1 教南 1 楼
月点
一、题目说明
(1)用C 语言达成线程的创立和取消,并按先来先服务方式对多个线程进
行调动。
(2)将线程调动算法改正为时间片轮转算法,实现时间片轮转调动。
(也能够联合优先权,实现优先权加时间片轮转算法的线程调动。
)
(3)改变时间片的大小,察看结果的变化。
思虑:为何时间片不可以太小
或太大。
(4)假定两个线程共用同一软件资源(如某一变量,或某一数据构造),请用记录型信号量来实现对它的互斥接见。
(5)假定有两个线程共享一个可寄存5个整数的缓冲,此中一个线程不断地
计算1至50的平方,并将结果放入缓冲中,另一个线程不断地从缓冲中拿出结果,并将它们打印出来,请用记录型信号量实现这一世产者和花费者的同步问题。
(6)实现信息缓冲通讯,并与4、 5 中的简单通讯进行比较。
(7)思虑:在线程间进行信息缓冲通讯时,若抵信息行列的接见没有知足
互斥要求,状况将会如何?
二、设计方案(系统框架)
该程序主假如分 5 大块内容:
(1)线程的创立和撤除,
(2)线程的调动,
(3)线程的同步与互斥,
(4)线程的堵塞与唤醒,
(5)利用信息缓冲行列的线程间的通讯。
由这五大块功能来达成的鉴于 DOS的多任务系统的实现。
在这个系统中,第
一先由 main 函数进行一些初始化工作,而后直接创立 0#线程对应于 main 函数,再由 0#线程调用 create 创立 1#,2#线程分别对应与函数 f1(),f2(),最后将系统的中止服务程序设置为 new_int8 ,并把控制交给 1#线程,启动多个线程的并发履行。
0#线程是一个比较特别的线程,它在创立的时候没有使用create 来创立,
而是在系统初始化后直接创立的,因它对应的程序段为main 函数中的一段,所
以也直接使用整个系统的货仓,而不再创立时为私有货仓分派额外的空间;相同,撤除的时也不需要开释私有货仓的空间,因此也没有over()函数而是直接撤除,
从这方面来看,它是一个系统线程。
其余,在启动多个线程并发履行过程后,0#线程将系统控制权转交出去,直
至系统中其余进度都不具备履行条件时,它才有可能从头获得CPU,从这方面看,0#线程相当于是一个空转线程,最后, 0#线程还担负着一个特其余使命:等候系统中所有其余的线程的达成,此时,它将直接撤除自己并恢还本来的时钟中止服
务程序,此后停止整个多任务系统。
三、程序流程图
四、实验结果(程序截图)
主界面
先进先出成效
实现线程的并发履行,可设置时间片大小实现线程对同一资源的互斥接见
实现生产者和花费者同步问题
实现信息缓冲通讯
五、思虑与探究
(1)为何时间片不可以太小或太大
答:设置过长的时间片会致使结果和进度在一个时间片内达成任务,进而先进先出算法的成效相同,失掉时间片的意,义。
设置太短会致使进度切换屡次, CPU的效率降低
(2)惹起调动的原由有哪些?
答:惹起 CPU调动的主要原由有:时间片到时、线程履行完成或正在履行的线程因等候某事件发生而不可以持续履行。
(3)办理中止时控制转移状况
答:中间止发生时,系统第一将标记寄存器 Flags的值压入货仓,而后将装有被中止程序下一条指令地点的 CS和 IP 寄存器的内容也分别压入货仓,再从中止向量中获得中止服务程序的进口地点并将它们装入 CS 和 IP 寄存器,这样,控制就从被中止的程序转向中止服务程序。
中止
返回时,系统自动从栈顶弹出返址 1 的偏移、返址 1 的段址和Flags并送到 IP、CS和 Flags寄存器中, CPU就开始持续从断点处履行被中止程序。
(4)为何创立的时候,线程的DS 和 ES都是相同的
答:因为线程共用进度的数据段。
(5)函数调动时控制转移状况
答:在履行函数调用指令时,系统会自动地先将主调函数的下一条
指令的地点(在 CS:IP中)压入货仓,而后把被调函数的进口地点装
入 CS和 IP 寄存器(段内函数调用只要压入和装置 IP),控制就从
主调函数转向被调函数;当履行函数返回指令时,系统将目前堆
栈的栈顶的两个字(主调函数下一条指令的地点)弹出并送到IP 和CS中(段内函数返回只要弹出一个字送到 IP 中),控制就从被
调函数返回到主调函数。
(6) new_int8(void) 函数的作用,以及如何让它自动地按期地运转答:该函数要达成的主要工作包含:第一履行老的时钟中止办理程序的功能;而后判断目前线程的时间片能否到了,假如到了,且DOS
不忙,则保留目前线程的运转环境,从头选择一个新的就绪线程,恢复其运转现场,使其在 CPU上参加运转。
因为该函数一定是自动地按期地运转,因此我们经过截取时钟中止( int 08)来达成。
在 PC机上,有一个准时器,每当它发一个时钟信号时(一般状况下,它每秒发出 18.2 个信号,除非是对产生该中止的准时器芯片从头编程),系统就进入时钟中止办理程序( INT 8)来达成系统计时、调用 INT 1CH、封闭磁盘马达等工作。
2名
序号linux 程管理
称
15 年 12地
月1 教南 1 楼
点
一、题目说明
1.熟习 linux 的命令接口。
2.通 linux 程控制的有关系用的程用,一步加深程观点的理解,明确程
和程序的系和区,理解程并行的详细含。
3.通 Linux 管道通讯体制、信息列通讯体制、共享内存通讯体制的使用,
加深不一样型的程通讯方式的理解。
4.通 linux 的 Posix 信号量的用,加深信号量同步体制的理解。
二、设计方案(系统框架)
1. Shell部分
要求:写三个不一样的程序cmd1.c, cmd2.c, cmd3.c,每个程序出一句
,分成可行文件cmd1, cmd2, cmd3。
而后再写一个程序,模
shell 程序的功能,能依据用入的字符串(表示相的命令名),去相的命令建子程并它去行相的程序,而父程等候子程束,而后再等候接收下一条命令。
假如接收到的命令 exit,父程束;假如接收
到的命令是无效命令,示“Command not found”,等候。
新建三个不一样的程序cmd1,cmd2,cmd3
而后成可行文件cmd1,cmd2,cmd3
以后写程序 my_shell.c 通取 shell 命令用在使用 if else 句判断并分通 fork()建子程,子程中采纳 execl(const char *path,const char
*arg,⋯);行先前达成的可行文件。
2.由父程建一个管道,而后再建 2 个子程,并由两个兄弟程利用管道行程
通讯:子程 1 使用管道的写端,子程 2 使用管道的端。
通讯的详细内容可依据自己的需要任意,要求能堵塞型写程中的各样状况。
运转程序,察各样状况下,程
写的字数以及程堵塞醒的状况。
3 写程序建两个程:sender 程和 receive 程,此中 sender 程运
行函数 sender(),它创立一个信息行列,而后,循环等候用户经过终端输入一串
字符,将这串字符经过信息行列发送给receiver 线程,直到用户输入“ exit”为止;最后,它向receiver 线程发送信息“ end”,而且等候 receiver 的应答,等到应答信息后,将接收到的应答信息显示在终端屏幕上,删除有关信息行列,结束程序的运转。
Receiver线程运转 receive(),它经过信息行列接收来自sender 的消息,将信息显示在终端屏幕上,直至收到内容为“end”的信息为止,此时,它向sender 发送一个应答信息“ over”,结束程序的运转。
使用无名信号量实现
两个线程之间的同步与互斥。
4.编写程序sender,它创立一个共享内存,而后等候用户经过终端输入一
串字符,并将这串字符经过共享内存发送给receiver;最后,它等候receiver 的应答,等到应答信息后,将接收到的应答信息显示在终端屏幕上,删除共享内存,结束程序的运转。
编写receiver 程序,它经过共享内存接收来自sender 的信息,将信息显示在终端屏幕上,而后再经过该共享内存向sender 发送一个应答信息“ over”,结束程序的运转。
使用无名信号量或 System V 信号量实现两个进度对
共享内存的互斥使用。
三、程序流程图
shell
无名管道通讯
发送者进度(信息行列通讯)
接收者进度(信息行列)主程序(信息行列通讯)共享内存思路
四、实验结果(程序截图)
信息行列
Shell 命令
五、思虑与探究
当时卡壳的地方
( 1)我们在设计程序时,最卡壳的地方在共享内存来实现通讯时,能
不可以用无名信号量,最后向老师求援才知道,用出名信号量。
有关于无名信号量来说,出名信号量经过 IPC 名字进前进度间的同步,其特色是把信号量保留在文件中,这决定了其用途特别宽泛:既可用于线程,也可用于有关进度和不有关进度。
(2)在父子进度的通讯里面,无名管道自带堵塞功能,但他的互斥与同步需要我们自己去实现,经过多次查阅资料和测试,我们最后困难
地选择了 System V 信号量,并自己写函数来实现PV操作
(3)在经过信息行列来实现通讯的程序中,我们碰到的问题是,程序莫名其妙的堵塞,可是加入 print 来测试则又能够正常运转,以后才意识到,这就是进度的异步性的表现哇。
最后我们找到死锁原由,并
使用一个资源信号量来解决 sender 发送的 over 信息被自己给接收的问题。
(一开始我们还把这个资源信号量看作了互斥信号量,在程序查收时老师告诉我们,只好有一个互斥信号量)
3实验名
实验序号文件系统
称
16 年 1 月实验地
实验时间 1 教南 1 楼
点
一、题目说明
经过详细的文件储存空间的管理、文件的物理构造、目录构造和文件操作的实现,加深对文件系统内部数据构造、功能以及实现过程的理解。
二、设计方案(系统框架)
(1) 在内存中开拓一个虚构磁盘空间作为文件储存分区,在其上实现一个简单的鉴于多级目录的单用户单任务系统中的文件系统。
在退出该文件系统的使用时,
应将该虚构文件系统以一个Windows 文件的方式保留到磁盘上,以便下次能够再将它恢复到内存的虚构磁盘空间中。
(2)文件储存空间的分派可采纳显式链接分派或其余的方法。
(3)安闲磁盘空间的管理可选择位示图或其余的方法。
假如采纳位示图来管理文件储存空间,并采纳显式链接分派方式,那么能够将位示图归并到FAT中。
(4)文件目录构造采纳多级目录构造。
为了简单起见,能够不使用索引结点,此中的每个目录项应包含文件名、物理地点、长度等信息,还能够经过目录项实现对文件的读和写的保护。
(5)实现以下函数:
my_format:对文件储存器进行格式化,即依据文件系统的构造对虚构磁盘
空间进行布局,并在其上创立根目录以及用于管理文件储存空间等的数据构造。
my_mkdir:用于创立子目录。
my_rmdir :用于删除子目录。
my_ls:用于显示目录中的内容。
my_cd:用于改正目前目录。
my_create:用于创立文件。
my_open:用于翻开文件。
my_close:用于封闭文件。
my_write :用于写文件。
my_read:用于读文件。
my_rm:用于删除文件。
my_exitsys:用于退出文件系统。
三、程序流程图
创立新目录
创立文件和目录相像
删除目录
读文件
初始化
主程序删除文件
翻开文件
四、实验结果(程序截图)
界面
五、思虑与探究
文件系统的难点:
文件系统是我们经历的最难的一个实验了。
除了代码量大,还有就是
很难理解。
下边是我们在和组员沟通我们的代码时,组员的问题和解
答(可能有不正确的地方)
(1) . 和.. 两个特别的目录项,他们的 first (文件开端盘块号)指向哪
里?
答:在根目录中,它们两个都指向同一个盘块,就是他自己。
但其余
文件中,“. ”指向他自己的开端盘块号,而“.. ”指向他父亲的开端
盘块号
(2)为何在my_format() 函数中,
fat1 = (fat *)(myvhard + BLOCKSIZE);
fat2 = (fat *)(myvhard + 3 * BLOCKSIZE);
root = (fcb *)(myvhard + 5 * BLOCKSIZE);
为何都差了 2 个盘块大小
答:这个要从磁盘布局提及
虚构磁盘一共区分红 1000 个磁盘块,每个块 1024 个字节,此中指引块占一个盘块,两张FAT各占2 个盘块,剩下的空间所有是数据区,在对虚构磁盘进行格式化的时候,将把数据区第 1 块(即虚构磁盘的第 6 块)分派给根目录文件,
如下图:
2块995块块数1块2
块
指引块FAT1FAT2数据区(3)为何创立子目录的时候length = 2 * sizeof(fcb)答:这是因为它在创立子目录就创立两个特别的目录项。