《操作系统》实验指导书2017 下载本文

步骤1:开机,单击“开始”按钮,选择“程

序 ->Microsoft Visual Studio 6.0->Microsoft Visual C++6.0”进入Microsoft Visual C++6.0。见图1-1。

步骤2:在Microsoft Visual C++6.0中,单击“File”菜单,选择“New”菜单命令,见图1-2。

步骤3:在“Files”选项卡中选择“C++ Source File”,见图1-3

2. linux的vi应用编程

登录 Linux是一个多用户多任务操作系统,多个用户可以拥有自己独立的用户账号 登录提示:

Red Hat Linux release 6.0 (Hedwing) Kernel 2.2.5-15 on an i686 Login:

此时输入用户户名(账号)并键入回车,则系统显示“passward”。在输入密码和回车。 登录后:[root@hawk/root]#

#表示是按root方式登录,$表示是普通用户。Linux大小写敏感,用“-”加参数

zlinux:~# ls –F

HowTo/ HowToMin/ linux@ nag/ sag/

获取帮助:Linux带有联机手册,可以用man命令来阅读 Zlinux:~$ man ls

虚拟终端 Linux可有多个用户登录到同一个计算机,但一般微机只有一个终端难以体现。可以使用多个虚拟终端,用Alt+F1、 Alt+F2等来切换。

退出系统 在停止使用系统时,要退出系统。具体方法:exit或logout,或Ctrl+D

关机 如果没有用户在使用系统,可以关机。但是不能直接关闭电源,而要按正常顺序关机。一般用户是不能关机的,只有root用户可以关机。

方法:可以使用halt或shutdown命令,也可以同时键入Ctrl+Alt+Del。

Windows 虚拟机环境: 登录到系统

点击桌面“VMware”图标——> Vmware Workstation窗口——>Commands——>Start this virtual machine

进入fedora后,用户名:root 口 令:123456 使用编辑器vi 编辑文件

1. 进入linux的文本模式之后,在命令行键入vi filename.c 然后回车。下面作一些简单

的解释:首先vi命令是打开vi编辑器。后面的filename.c是用户即将编辑的c文件名字,注意扩展名字是.c;当然,vi编辑器功能很强,可以用它来编辑其它格式的文件,比如汇编文件,其扩展名字是.s;也可以直接用vi打开一个新的未命名的文件,当保存的时候再给它命名,只是这样做不很方便。

2. 最基本的命令I :当进入刚打开的文件时,不能写入信息,这时按一下键盘上的I键

(insert),插入的意思,就可以进入编辑模式了。如下图所示:

3. a与i是相同的用法

4. 当文件编辑完后,需要保存退出,这时需要经过以下几个步骤:1)按一下键盘上的

Esc 键;2)键入冒号(:),紧跟在冒号后面是wq(意思是保存并退出)。如果不想保存退出,则在第二步键入冒号之后,键入!q(不带w,机尾部保存)。如下图所示:

5. 退出vi编辑器的编辑模式之后,要对刚才编写的程序进行编译。编译的命令是:gcc filename.c [-o outputfilename],其中gcc是c的编译器。参数:filename.c 是刚才编辑的c 文件(当然也可以是以前编写好的c文件);后面中括号里面的参数是可选的,它是一个输出文件。如果不选,默认的输出文件是a.out ,选了之后输出文件就是outputfilename.out.

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

实验二 进程管理

(一)实验目的

掌握临界区的概念及临界区的设计原则;掌握信号量的概念、PV操作的含义以及应用PV操作实现进程的同步与互斥;分析进程争用资源的现象,学习解决进程互斥的方法;掌握进程的状态及状态转换;掌握常用的进程调度算法。

(二)实验内容

1.分析进程的同步与互斥现象,编程实现经典的进程同步问题——生产者消费者问题的模拟;

2. 编写允许进程并行执行的进程调度程序,在常用的进程(作业)调度算法:先来先服务算法、短作业优先算法、最高响应比优先算法、高优先权优先算法等调度算法中至少选择三种调度算法进行模拟,并输出平均周转时间和平均带权周转时间。

本实验涉及内容较多,可以在两个题目里选择一个完成。

编程实现经典的进程同步问题——生产者消费者问题的模拟

模拟实现用同步机构避免发生进程执行时可能出现的与时间有关的错误。

进程是程序在一个数据集合上运行的过程,进程是并发执行的,也即系统中的多个进程轮流地占用处理器运行。

我们把若干个进程都能进行访问和修改的那些变量称为公共变量。由于进程是并发地执行的,所以,如果对进程访问公共变量不加限制,那么就会产生“与时间有关”的错误,即进程执行后所得到的结果与访问公共变量的时间有关。为了防止这类错误,系统必须要用同步机构来控制进程对公共变量的访问。一般说,同步机构是由若干条原语——同步原语——所组成。本实验要求模拟PV操作同步机构的实现,模拟进程的并发执行,了解进程并发执行时同步机构的作用。

此次用到的数据结构知识如下: typedef struct Pcb{

char name[10]; //进程名 char state[10]; //运行状态 char reason[10]; //若阻塞,其原因 int breakp; //断点保护 struct Pcb *next; //阻塞时的顺序

}Pcb,*link;

进程名 状态 等待原因 断点

后继进程 进程控制块结构

定义两个进程: link p1;//生产者进程,link c1;//消费者进程。pc程序计数器和link ready; 就绪队列,link b_s1; s1阻塞队列,link b_s2; s2阻塞队列。

实验指导:

a. h头文件

#include #include

#include /* malloc()等 */ #include /* INT_MAX等 */

#include /* EOF(=^Z或F6),NULL */ #include /* atoi() */ #include /* eof() */

#include /* floor(),ceil(),abs() */ #include /* exit() */ #include using namespace std; #include

#define BUF 10 //缓存的大小

#define MAX 20 //最大可以输入的字符

b. h头文件

//数据结构的定义和全局变量 typedef struct Pcb{

char name[10]; //进程名 char state[10]; //运行状态

char reason[10]; //若阻塞,其原因 int breakp; //断点保护 struct Pcb *next; //阻塞时的顺序 }Pcb,*link;

int s1,s2; //信号量 link p1;//生产者进程 link c1;//消费者进程

char str[MAX]; //输入的字符串 char buffer[BUF]; //缓冲池 int len; //输入长度

int sp=0; //string的指针