计算机操作系统实验

  • 格式:doc
  • 大小:42.50 KB
  • 文档页数:17

计算机操作系统实验

计算机操作系统实验报告

实验一:了解操作系统 一、 实验目的:

通过在虚拟机中装载操作系统、并对硬盘进行分区的操作对操作系统有进一步和深入的了解,学会使用VMware Workstation,掌握操作系统的安装和对磁盘进行分区等各种操作 二、 实验原理:

在VMware Workstation中装载操作系统、对硬盘进行分区

三、 实验器材:

硬件:计算机 软件:VMware Workstation、windows系统镜像

四、 实验步骤:

1.打开计算机并运行VMware Workstation,新建虚拟机文件

2.在VMware Workstation中找到保存在本地的系统镜像文件并选择

3.启动虚拟机

4.在弹出对话框中选择PQ系统分区,对硬盘进行分区

5.重新启动虚拟机,选择系统安装位置

6.在装好的操作系统中进行各项操作,检查系统是否存在错误

7.实验完成,关闭VMware Workstation,关闭计算机

五、 实验心得:

通过本次实验中的各项操作,我学会了安装操作系统并对磁盘进行分区,了解了操作系统,掌握了安装操作系统以及对硬盘进行分区等的各项操作。

1 / 13

计算机操作系统实验报告

实验二:进程同步和互斥 一、 实验目的:

1、掌握临界资源,临界正概念及并发进程互斥,同步访问原理

2、学会使用高级语言进行多线程编程方法

3、掌握利用VC++语言线程库实现进程的互斥,条件竞争并编码实现。P.O操作,利用

P.O操作实现两个并发线程,对有界临界区的同步访问。

二、 实验要求:

1、知识基础:学生应在完成进程和线程及调度章节学习后进行

2、开发环境工具:

硬件平台----网络实验室

软件平台-----windows操作系统 VC++语言开发环境

三、 实验内容:

1、实现临界资源 临界区 进程或线程的定义与创建

2、合用两个并发运行的进程 实现互斥算法 和有界缓冲区的同步算法 四、

实验步骤:

kan ra// Process.cpp : 定义控制台应用 }

程序的入口点。 else

// {

return 0; #include "stdafx.h" }

#include }

#include void Ssignal(int& s) using namespace std; {

static int Mutex=1; s=s+1;

static int S=5; }

int MBlock=0; int BlockProcess() int SBlock=0; { class UiProcess if(Mutex<=0) { {

public: MBlock=abs(Mutex);

int Swait(int& s) return MBlock;

{ }

s=s-1; if(S<=0)

if(s<=0) {

{ SBlock=abs(S);

return BlockProcess(); return SBlock;

2 / 13

计算机操作系统实验报告

} }

} else if(j>0)

void Print(string s) {

{ Print("当前因互斥阻塞的进

cout<

} }

void Print(string s,int i) this->Ssignal(Mutex);

{ //this->Ssignal(S);

cout<

} };

void Process()

{ int _tmain(int argc, _TCHAR* argv[])

int i=this->Swait(S); {

int j=this->Swait(Mutex); for(int i=0;i<10;i++) if(i==0 && j==0) {

{ UiProcess ui;

Print("进程可以运行"); ui.Process();

} }

else if(i>0) system("pause");

{ return 0;

Print("当前因资源阻塞的进}

程数目为:",i);

五、实验心得:

通过这次试验,加深了对进程同步的理解。

3 / 13

计算机操作系统实验报告

实验三:矩阵乘法 一、 实验目的:

熟悉矩阵乘法规则以及在计算中实现

二、 实验环器材:

Windows XP ,vc++6.0

三、 实验内容:

将程序输入计算机,调试运行程序。

程序如下:

#include void main() {

int i,j,k;

int a[5][3]={{1,2,3},{2,3,4},{3,4,5},{4,5,6},{5,6,7}}; //相乘的一个矩阵 int b[3][4] = {{1,2,3,4},{1,2,3,4},{1,2,3,4}};

int c[5][4]={0}; for(i=0; i<5; i++) for(j=0;j<4;j++) for(k=0;k<3;k++)

{

c[i][j]+=a[i][k]*b[k][j]; }

/*以上是主要的乘法算法,三个for循环*/

/*以下是打印得到的矩阵*/

for(i=0; i<5; i++)

{

printf("\n"); for(j=0;j<4;j++) {

printf("%3.2d",c[i][j]);

}

}

getch(); /*输入任意字符结束程序,使程序停下来以便观察结果*/ }

四、 实验心得:

通过本次实验对三个for循环相乘时的过程分析,熟悉了矩阵相乘的算法以及二维数组在内

存中的存储形式

4 / 13

计算机操作系统实验报告

实验四:银行家算法

一、 实验目的:

1,理解死锁概念,银行家算法及安全性检测算法

2,掌握利用C语言设计实现银行家算数的基本进程

3,验证银行家算法对于避免死锁的作用。

二、 实验要求: 1,学生应完成如下章节的学习:进程和线程的调度,死锁

2,安装上述操作系统,使用C程序编程完成设计实现

三、 实验步骤:

1,定义并初始化进程及其资源结构

2,提供一个用户界面,用户利用它可动态输入进程和资源种类等相关参数

3,设计实现安全状态,检测和银行家死锁避免功能函数

四、 实验步骤:

1,开发一个变量程序

首先从文件中读入系统描述信息,包括进程的数目,资源的种类和数量,每个进程最大资源请求。程序自动根据文件内容创建一个当前系统描述

如:每类资源的数目用...准数组R[M]描述,m为资源的种类,每个[J]记录资源的RJ的数量。进程的最大需求矩阵用P[n] [m]表示,P[3][J]记录进程Pi对资源RJ的最大需求。分配矩阵和请求矩阵,可使用二维数组表示。

2,用户输入一个请求,

格式类似:request(i,j,k) 求release(i,j,k),在这里,i表示进程Pi,J表示进程PJ,K为申请释放的数量。对于每一个请求,系统回应是满足要求,还是拒绝分配。

3,设定一个申请和释放序列,无任何检测和避免死锁的算法,分配会导致死锁

4,设定一个申请和释放序列,按照安全性算法进行设计,回应系统是否安全。然后实现银行家算法,确保没有死锁的分配

五、 算法如下:

#include { #include struct type value; struct type struct allocation

*next; { };

int a; struct max int b; {

int c; struct type value; }; struct max *next; struct allocation };

5 / 13

计算机操作系统实验报告

struct available *availablehead,*workhead,*worktemp;

struct need {

*needhead,*need1,*need2,*needtemp; struct type value;

struct path struct available *next;

*pathhead,*path1,*path2,*pathtemp; }; struct finish

struct need *finishhead,*finish1,*finish2,*finishtemp;

{

struct type value; printf("请输入进程的数目\n");

struct need *next; scanf("%d",&p);

}; for(i=0;i

struct path {

{ printf("\n输入进程p%d已经分配的资源

\n",i+1); int value;

if(flag==0) struct path *next;

{ };

allochead=alloc1=alloc2=(struct struct finish

allocation*)malloc(sizeof(struct { allocation));