计算机操作系统实验
- 格式: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));