桂林理工大学操作系统实习指导书.docx

上传人:b****0 文档编号:17008884 上传时间:2023-07-21 格式:DOCX 页数:22 大小:383.60KB
下载 相关 举报
桂林理工大学操作系统实习指导书.docx_第1页
第1页 / 共22页
桂林理工大学操作系统实习指导书.docx_第2页
第2页 / 共22页
桂林理工大学操作系统实习指导书.docx_第3页
第3页 / 共22页
桂林理工大学操作系统实习指导书.docx_第4页
第4页 / 共22页
桂林理工大学操作系统实习指导书.docx_第5页
第5页 / 共22页
桂林理工大学操作系统实习指导书.docx_第6页
第6页 / 共22页
桂林理工大学操作系统实习指导书.docx_第7页
第7页 / 共22页
桂林理工大学操作系统实习指导书.docx_第8页
第8页 / 共22页
桂林理工大学操作系统实习指导书.docx_第9页
第9页 / 共22页
桂林理工大学操作系统实习指导书.docx_第10页
第10页 / 共22页
桂林理工大学操作系统实习指导书.docx_第11页
第11页 / 共22页
桂林理工大学操作系统实习指导书.docx_第12页
第12页 / 共22页
桂林理工大学操作系统实习指导书.docx_第13页
第13页 / 共22页
桂林理工大学操作系统实习指导书.docx_第14页
第14页 / 共22页
桂林理工大学操作系统实习指导书.docx_第15页
第15页 / 共22页
桂林理工大学操作系统实习指导书.docx_第16页
第16页 / 共22页
桂林理工大学操作系统实习指导书.docx_第17页
第17页 / 共22页
桂林理工大学操作系统实习指导书.docx_第18页
第18页 / 共22页
桂林理工大学操作系统实习指导书.docx_第19页
第19页 / 共22页
桂林理工大学操作系统实习指导书.docx_第20页
第20页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

桂林理工大学操作系统实习指导书.docx

《桂林理工大学操作系统实习指导书.docx》由会员分享,可在线阅读,更多相关《桂林理工大学操作系统实习指导书.docx(22页珍藏版)》请在冰点文库上搜索。

桂林理工大学操作系统实习指导书.docx

桂林理工大学操作系统实习指导书

 

网络工程专业

 

《操作系统实习》指导书

 

桂林理工大学信息科学与工程学院

2013年11月

《操作系统》实习指导书

一、实习目的

操作系统对计算机系统资源实施管理,是所有其它软件与计算机硬件的唯一接口,所有用户在使用计算机时都要得到操作系统提供的服务。

通过本次实习,使学生掌握操作系统的基本概念、设计原理及实施技术,理解操作系统的组成和主要功能的实现。

二、实习性质

培养网络工程专业学生的系统程序设计能力,是操作系统课程的一个非常重要的环节。

《操作系统实习》是《操作系统》理论课的必要补充,是复习和检验前期所学课程的重要手段,也是为毕业设计做必要的准备。

通过操作系统实习,可以培养学生程序设计的方法和技巧,提高学生编制清晰、合理、可读性好的系统程序的能力,加深对操作系统课程的理解。

使学生更好地掌握操作系统的基本概念、基本原理、及基本功能,具有分析实际操作系统、设计、构造和开发现代操作系统的基本能力。

根据实际情况,本次实习中的开发环境为:

基于Linux或windows操作系统,可使用VC、VB、java或C等编程语言解决一个实际应用问题。

三、实习内容(选题范围及要求):

1、操作系统基本操作。

要求:

熟练掌握LINUX下常用命令、使用编辑器vi编辑文件、添加新用户、修改文件属性。

2、源代码分析

要求:

通过LINUX有关源代码的分析,进一步了解操作系统的设计思想。

3、操作系统功能模拟程序的开发。

要求:

利用所学的编程知识,在理解操作系统设计的相关原理基础上,设计一个模拟其功能的小程序,可以让其他人清楚地看到演示的过程和结果。

四、进度安排

实习时间:

二周。

地点:

信息学院计算机机房。

具体安排:

1.实习动员、开发系统介绍、开发技术介绍。

(一天)

2.Linux操作系统的使用。

(时间安排为半天)

3.Linux操作系统源代码分析.(一天半)

4.根据所选系统要求,提出系统设计方案和测试程序设计方案。

(一天)

5.完成系统设计(时间安排为四天)

6.教师考评程序。

(时间安排为一天半)

7.提交设计报告(时间安排为半天)

五、报告书写要求:

1、分析设计要求,给出解决方案(要说明设计实现所用的原理,采用的数据结构)

2、画出程序的基本结构框图和流程图

3、对程序的每一部分要有详细的设计分析说明,

4、程序执行的每个步骤要有具体的提示内容或输出

5、源代码格式规范,注释不少于三分之一

6、设计合适的测试用例,对得到的运行结果要有分析,

7、设计中遇到的问题,设计的心得体会

8、提交完整程序代码、课程设计报告及相关文档

9、参考资料

六、成绩评定标准

根据学生设计的方案、最终程序结果的演示、实习报告、实习出勤情况等来评定成绩,考核成绩分为优、良、中、及格和不及格五个等级。

评分原则如下:

1问题描述10%没有有,但不完整基本正确描述正确描述准确

2解决方案10%没有有,但不完整基本可行方案良好很有说服力

3解决方案的流程图、主要算法的描述与具体实现的说明20%没有有,但不完整基本正确,但不够清晰正确,清晰正确,清晰,且让人感觉良好

4具体的解决实例40%没有有,但不完整基本完整完整让人感觉有价值,并可以实际演示。

5程序界面15%很差一般的命令行界面很好的命令行界面一般的图形界面很好的图形界面非常友好的图形界面

6其他5%包括是否按时完成,报告格式,字迹、语言等等

第一部分操作系统上机指导

Linux操作系统环境:

一、登录到系统

 

 

 

 

二、常用命令练习:

用root账号(超级用户)注册,口令为*****(注意大小写)。

注册成功出现#号(超级用户系统提示符,普通用户的系统提示符为$)。

1.注销(退出)系统:

logout或exit

2.练习使用命令ls(注意Linux命令区分大小写。

使用ls查看当前目录内容;使用ls查看指定目录内容,如/目录,/etc目录

使用ls–all查看当前目录内容;使用dir查看当前目录内容

3.使用cd改变当前目录:

cd..回到上层目录;cd/回到根目录

4.pwd显示当前路径

5.建立目录:

mkdir目录名;mkdir/home/s2001/newdir

6.删除目录:

rmdir;

7.复制文件cp:

如cp文件名1文件名2

8.移动文件或目录:

mv驼

9.删除文件rm

10.显示文件内容:

more文件(分页显示);

11.显示文件:

cat文件名建立文件:

cat>文件名,ctrl+d结束输入

三、使用编辑器vi编辑文件

1.进入linux的文本模式之后,

在命令行键入vifilename.c然后回车。

下面作一些简单的解释:

首先vi命令是打开vi编辑器。

后面的filename.c是用户即将编辑的c文件名字,注意扩展名字是.c;

当然,vi编辑器功能很强,可以用它来编辑其它格式的文件,比如汇编文件,其扩展名字是.s;也可以直接用vi打开一个新的未命名的文件,当保存的时候再给它命名,只是这样做不很方便。

2.最基本的命令I:

当进入刚打开的文件时,不能写入信息,这时按一下键盘上的I键(insert),插入的意思,就可以进入编辑模式了。

如下图所示:

3.a与i是相同的用法

4.当文件编辑完后,需要保存退出,

这时需要经过以下几个步骤:

1)按一下键盘上的Esc键;

2)键入冒号(:

),

紧跟在冒号后面是wq(意思是保存并退出)。

如果不想保存退出,则在第二步键入冒号之后,键入!

q。

如下图所示:

5.退出vi编辑器的编辑模式之后,要对刚才编写的程序进行编译。

编译的命令是:

gccfilename.c[-ooutputfilename],其中gcc是c的编译器。

参数:

filename.c是刚才编辑的c文件(当然也可以是以前编写好的c文件);后面中括号里面的参数是可选的,它是一个输出文件。

如果不选,默认的输出文件是a.out,选了之后输出文件就是outputfilename.out.

6.最后一步是运行程序,方法如下:

./outputfilename.out

四、添加新用户、修改文件属性

1.添加新用户(在root下,按默认值回答)

adduser用户名;如addusers2001;以新用户登录到系统

2.修改用户口令passwd

3.控制文件属性

使用ls–l查看文件属性

 

Unix文件目录的属性显示格式:

如:

-rw-rw-rw-1steveusers138Apr519:

34readme

drwxrwxrwx3steveusers80Apr519:

43dir1

 

 

4.改变用户的所有权:

chown用户名文件名

5.改变文件权限:

chmodg+w文件名;chmodo-r文件名

或使用数字方式修改:

如chmod644文件名;chmod755文件名

三种权限:

ownergroupothers.u(user用户),g(group组),o(other其他);w写访问权限,r读访问权限,x执行权限

6.查看相关命令的帮助:

man命令名

7.显示当前系统中已注册的用户信息:

who

8.显示当前注册的用户信息:

whoami

第二部分操作系统源代码分析

(Linux进程管理程序分析)

一.目的

1.了解Linux源代码的分布;

2.了解阅读Linux源代码的一般方法;

3.熟悉Linux管理进程用的主要数据结构;

4.通过阅读Linux进程调度有关函数的源代码,理解Linux的进程调度算法及其实现所用的主要数据结构。

5.通过查阅参考书或者上网找资料,熟悉/usr/src/linux(注意:

这里最后一级目录名可能是个含具体内核版本号和“linux”字符串的名字)下各子目录的内容,即所含Linux源代码的情况。

二.内容(三个选一个)

1.阅读Linux的fork.c源文件,分析进程的创建过程。

2.在概览Linux启动和初始化部分源代码基础上,分析Linux进程调度有关函数的源代码,主要是schedule()函数和goodness()函数,并且要对它们引用的头文件等一并分析。

3.阅读Linux系统的msg.c、sem.c和shm.c等源码文件,熟悉Linux三种进程通信机制。

第三部分操作系统原理演示系统的开发(任选一个)

要求:

编程模拟实现操作系统某些功能模块。

设计一:

进程调度

  设计目的:

    

  进程管理是操作系统中的重要功能,用来创建进程、撤消进程、实现进程状态转换,它提供了在可运行的进程之间复用CPU的方法。

在进程管理中,进程调度是核心,因为在采用多道程序设计的系统中,往往有若干个进程同时处于就绪状态,当就绪进程个数大于处理器数目时,就必须依照某种策略决定哪些进程优先占用处理器。

本实验模拟在单处理器情况下的进程调度,目的是加深对进程调度工作的理解,掌握不同调度算法的优缺点。

设计题目:

设计一个按先来先服务,算法时间片轮转法,优先数调度算法实现处理器调度的程序。

设计一个有N个进程处于就绪队列时,单处理机情况下的调度程序采取“优先数调度”算法。

进程的就绪队列中是按优先数的大小从大到小排列,调度算法总是选取队列中优先数高的队列投入运行,采取动态地改变优先数的办法,进程每运行一次优先数相应的减2,从而避免一个作业长期占据处理机,当调度时机出现时,调度算法适时再调度,首先判断此进程是否运行完,未运行完再判断此进程的优先权是否大于等于队列的首进程的优先数,若成立,就继续执行。

这样重复,直到就绪队列为空。

        

设计二:

进程同步

  设计目的:

  理解临界区和进程互斥的概念,掌握用信号量和PV操作实现进程互斥的方法。

  设计题目:

 

  在windows或者linux环境下编写应用程序,该程序运行时能创建N个线程,其中既有读者线程又有写者线程,它们按照事先设计好的测试数据进行读写操作。

用信号量和PV操作实现读者/写者问题。

设计三:

死锁

  设计目的:

        

  死锁是进程并发执行过程中可能出现的现象,哲学家就餐问题是描述死锁的经典例子。

为了防止死锁,可以采用资源预分配法或者资源按序分配法。

资源预分配法是指进程在运行前一次性地向系统申请它所需要的全部资源,如果系统当前不能够满足进程的全部资源请求,则不分配资源,此进程暂不投入运行,如果系统当前能够满足进程的全部资源请求,则一次性地将所申请的资源全部分配给申请进程。

资源按序分配法是指事先将所有资源类全排序,即赋予每一个资源类一个唯一的整数,规定进程必需按照资源编号由小到大的次序申请资源。

  设计题目:

模拟有五个哲学家的哲学家进餐问题。

设计四:

页面置换

设计目的:

加深对请求页式存储管理实现原理的理解,掌握页面置换算法。

设计要求:

 1.用户可以为程序指定内存块数

2.用户可以自由设置程序的页面访问顺序

3.用户可在OPT、FIFO和LRU算法选择一个,并能观看到页面置换过程。

设计五:

磁盘调度管理

设计目的:

加深对请求磁盘调度管理实现原理的理解,掌握磁盘调度算法。

设计要求:

1.用户可以为程序指定初始需要访问序列;

2.实现最短寻道和电梯调度两种调度算法;

3.根据用户的选择输出实际的访问序列;

设计六:

文件系统模拟设计

设计目的:

通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能及内部实现。

设计要求:

为linux系统设计一个简单的二级文件系统。

要求做到以下几点:

(1)可以实现下列几条命令(至少4条);

dir列文件目录

create创建文件

delete删除文件

open打开文件

close关闭文件

read读文件

write写文件

(2)列目录时要列出文件名、物理地址、保护码和文件长度;

(3)源文件可以进行读写保护。

提示:

(1)首先应确定文件系统的数据结构:

主目录、子目录及活动文件等。

主目录和子目录都以文件的形式存放于磁盘,这样便于查找和修改。

(2)用户创建的文件,可以编号存储于磁盘上。

如file0,file1,file2...并以编号作为物理地址,在目录中进行登记。

设计七:

其它题目

同学自己提出,由教师确认的题目。

要求:

1与操作系统理论紧密相连;

2可以用程序比较简单地实现;

3可以让其他人清楚地看到演示的过程和结果;

附录:

演示系统示例

实习报告书写参考-----银行家算法的实现

一、设计目的:

熟悉银行家算法,理解系统产生死锁的原因及避免死锁的方法,加深记忆。

二、设计内容

  设计一个n个并发进程共享m个系统资源的系统。

进程可动态申请资源和释放资源,系统按各进程的申请动态的分配资源。

要求采用银行家算法实现。

三、开发环境

windows环境,VC6.0平台。

四、分析设计

<一>实验原理

银行家算法是从当前状态出发,逐个按安全序列检查各客户中谁能完成其工作,然后假定其完成工作且归还全部贷款,再进而检查下一个能完成工作的客户。

如果所有客户都能完成工作,则找到一个安全序列,银行家才是安全的。

与预防死锁的几种方法相比较,限制条件少,资源利用程度提高了。

缺点:

该算法要求客户数保持固定不变,这在多道程序系统中是难以做到的;该算法保证所有客户在有限的时间内得到满足,但实时客户要求快速响应,所以要考虑这个因素;由于要寻找一个安全序列,实际上增加了系统的开销.

Bankeralgorithm最重要的一点是:

保证操作系统的安全状态!

这也是操作系统判断是否分配给一个进程资源的标准!

那什么是安全状态?

举个小例子,进程P需要申请8个资源(假设都是一样的),已经申请了5个资源,还差3个资源。

若这个时候操作系统还剩下2个资源。

很显然,这个时候操作系统无论如何都不能再分配资源给进程P了,因为即使全部给了他也不够,还很可能会造成死锁。

若这个时候操作系统还有3个资源,无论P这一次申请几个资源,操作系统都可以满足他,因为操作系统可以保证P不死锁,只要他不把剩余的资源分配给别人,进程P就一定能顺利完成任务。

 为什么银行家算法是可行的呢?

这里需要严格的证明一下。

不管任何时候,操作系统分配资源的时候都可以保证当前接受资源的进程不会陷入死锁,因为操作系统总是可以满足该进程需要的资源的。

假设有n个进程{p1,p2,p3,…pn},最后一个分配到资源的是pi,pi还需要mi个资源,假设此时操作系统还有m个资源剩余。

那么很显然m>=mi!

而且如果之后操作系统又把资源分配给其他进程了,假设是pj,pj还需要mj个资源,同理可知m>=mj!

也就是说在所有的进程中,还需要的资源数总是有小于m的!

这样就可以保证资源数永远不会为0,即使可能暂时性为0。

另外,还需要保证资源数不会减少!

而且,所有已经分配到资源的进程总有一天会归还它所拥有的资源!

根据操作系统再分配的时候的状态即可判定。

<二>程序结构

当进程pi提出资源申请时,系统执行下列步骤:

(1)若Request[i]≤Need[i],转

(2);否则错误返回

(2)若Request[i]≤Available,转(3);否则进程等待

(3)假设系统分配了资源,则有:

Available:

=Available-Request[i];

Allocation[i]:

=Allocation[i]+Request[i];

Need[i]:

=Need[i]-Request[i]

若系统新状态是安全的,则分配完成若系统新状态是不安全的,则恢复原状态,进程等待

模拟实现Dijkstra的银行家算法以避免死锁的出现.分两部分组成:

第一部分:

银行家算法(扫描)

1.如果Request<=Need,则转向2;否则,出错

2.如果Request<=Available,则转向3,否则等待

3.系统试探分配请求的资源给进程

4.系统执行安全性算法

第二部分:

安全性算法

1.设置两个向量

(1).工作向量:

Work=Available(表示系统可提供给进程继续运行所需要的各类资源数目)

(2).Finish:

表示系统是否有足够资源分配给进程(True:

有;False:

没有).初始化为False

2.若Finish[i]=False&&Need<=Work,则执行3;否则执行4(I为资源类别)

3.进程P获得第i类资源,则顺利执行直至完成!

并释放资源:

Work=Work+Allocation; Finish[i]=true;转2

4. 若所有进程的Finish[i]=true,则表示系统安全;否则,不安全!

<三>数据结构:

假设有M个进程N类资源,则有如下数据结构:

MAX[M*N]M个进程对N类资源的最大需求量

AVAILABLE[N]系统可用资源数

ALLOCATION[M*N]M个进程已经得到N类资源的资源量

NEED[M*N]M个进程还需要N类资源的资源量

<四>程序流程图:

五.运行示例及结果分析

  T0时刻可用资源(Available)A:

3,B:

3,C:

2

 请求分配时间:

14:

07:

29

 经测试,可为该进程分配资源。

以下为资源分配表

资源 WorkNeedAllocationWork+AllocFinish

ID  A B C  A B C A B C  A B C

P01  030302  010202  020000  050302  TRUE

P03  050302  000101  020101  070403  TRUE

P00  070403  070403  000100  070503  TRUE

P02  070503  060000  030002  100505  TRUE

P04  100505  040301  000002  100507  TRUE

进程1申请资源A:

2,B:

1,C:

1时的安全性检查

请求分配时间:

14:

07:

39

进程请求的资源比Need多!

!

不能为该进程分配资源!

系统在T0(Request)时刻是不安全的!

!

 

—-尝试进行另外一个分配—-

进程1申请资源A:

1,B:

0,C:

2时的安全性检查

请求分配时间:

14:

07:

55

经测试,可为该进程分配资源。

以下为资源分配表

资源  Work    Need   AllocationWork+Alloc  Finish

ID  A B C  A B C  A B C  A B C

P01  020300  000200  030002  050302  TRUE

P03  050302  000101  020101  070403  TRUE

P00  070403  070403  000100  070503  TRUE

P02  070503  060000  030002  100505  TRUE

P04  100505  040301  000002  100507  TRUE

进程4申请资源A:

3,B:

3,C:

0时的安全性检查

请求分配时间:

14:

09:

14

进程请求的资源比Avaliable(WORK)多!

!

不能为该进程分配资源!

系统在T0(Request)时刻是不安全的!

!

 

—-尝试进行另外一个分配—-

进程0申请资源A:

0,B:

2,C:

0时的安全性检查

请求分配时间:

14:

09:

23

系统进入不安全状态!

不能为该进程分配资源!

系统在T0(Request)时刻是不安全的!

!

 

—-尝试进行另外一个分配—-

进程1申请资源A:

0,B:

0,C:

0时的安全性检查

请求分配时间:

14:

09:

37

经测试,可为该进程分配资源。

以下为资源分配表

资源   Work    Need   AllocationWork+Alloc Finish

ID  A B C  A B C A B C  A B C

P01  020300  000200  030002  050302  TRUE

P03  050302  000101  020101  070403  TRUE

P00  070403  070403  000100  070503  TRUE

P02  070503  060000  030002  100505  TRUE

P04  100505  040301  000002  100507  TRUE

六、心得与体会(略)

参考文献:

1、汤子嬴编:

《计算机操作系统》,西安电子科技大学出版社

2、张尧学、史美林编:

《计算机操作系统教程》,清华大学出版社

3、任爱华、王雷编:

《操作系统实用教程》,清华大学出版社

附录、源程序清单

#include

usingnamespacestd;

#defineMAXPROCESS50                       /*最大进程数*/

#defineMAXRESOURCE100                       /*最大资源数*/

intAVAILABLE[MAXRESOURCE];                   /*可用资源数组*/

intMAX[MAXPROCESS][MAXRESOURCE];           /*最大需求矩阵*/

intALLOCATION[MAXPROCESS][MAXRESOURCE];   /*分配矩阵*/

intNEED[MAXPROCESS][MAXRESOURCE];           /*需求矩阵*/

intREQUEST[MAXPROCESS][MAXRESOURCE];       /*进程需要资源数*/

boolFINISH[MAXPROCESS];                       /*系统是否有足够的资源分配*/

intp[MAXPROCESS];                            /*记录序列*/

intm,n;                                   /*m个进程,n个资源*/

voidInit();

boolSafe();

voidBank();

intmain()

{

   Init();

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2