当前位置:文档之家› 操作系统实验报告模板

操作系统实验报告模板

{
strcpy(fname,"/0");
type=NULL;
size=0;
fatherBlockNum=currentBlockNum=0;
}
};
/*常量设置*/
constchar*FilePath="C://myfiles";
constintBlockSize=512;//盘块大小
constintOPEN_MAX=5;//能打开最多的文件数
FILE*fp;//磁盘文件地址
char*BaseAddr;//虚拟磁盘空间基地址
stringcurrentPath="C://";//当前路径
intcurrent=2;//当前目录的盘块号
stringcmd;//输入指令
structDISK*osPoint;//磁盘操作系统指针
charcommand[16];//文件名标识
实验二进程间的同步
【实验目的】
理解进程同步和互斥模型及其应用
【实验软硬件环境】
Linux、Windows98、Windows2000
【实验内容】
利用通信API实现进程之间的同步:
建立司机和售票员进程;
并实现他们间的同步运行。
【实验程序及分析】
程序总体思路:由于本次试验时用PV操作实现的互斥与同步模型,所以先实现P、V操作的函数,然后在主程序中利用PV操作函数实现司机和售票员的同步。司机和售票员分别为父进程和子进程,假设司机停车开门,此时为父进程中运行,然后申请开车,但是此时乘客没上车,所以只能阻塞。此时进入子进程,乘客上车,关门,售票员检票,释放开车,然后死机开车,到站,释放开车门。如此循环。
操作系统上机
实 验 报 告
成绩
教 师:
2012 年 12月 5日
班 级:
学 号:
姓 名:
实验地点:
实验时间:
实验一进程的建立
【实验目的】
创建进程及子进程
在父子进程间实现进程通信
【实验软硬件环境】
Linux、Windows98、Windows2000
【实验内容】
创建进程并显示标识等进程控制块的属性信息;
设计并实现文件系统的描述结构;
显示文件系统中文件的属性;
给出文件系统最基本操作的仿真实现。
【实验程序及分析】
程序中带有详细的解释。
整体编程思路为:首先建立文件系统的基本存储部分,包括结构体变量等等的定义,主要利用数组的存储功能模拟文件系统。除了基本的目录查看,目录创建、删除,文件创建、删除外,我还增加了文件的读写的函数,实现了文件的读出与写入。但由于用的是数组存储,所以有长度限制,具体可参加程序注释。
{
printf("该文件夹下已经有同名的文件夹存在了!\n");
【实验截图】
【实验心得体会】
通过这次上机练习,我熟悉了用c++实现进程的创建,销毁,父子进程间的通讯等一系列课程中需要学习的内容。本来进程的概念在一开始我始终无法清晰地理解,但是通过自己用mfc的方法去实现它后,我开始慢慢地理解操作系统的进程的运作机制。
虽然,我只是实现了一个父子进程的创建和通讯,但是,管中窥豹,我想自己开始明白一个操作系统正是由很多这种进程实现功能的。其中,系统整体的进程调度,管理等等还有很多东西等着我们去进一步学习、理解。
intformat()
{
current=2;
currentPath="C://";//当前路径
osPoint->format();//打开文件列表初始化
deleteopenlist;
openlist=newOPENLIST;
/*-------保存到磁盘上myfiles--------*/
fp=fopen(FilePath,"w+");
fcb[0].currentBlockNum=_CurrentBlockNum;
fcb[0].type=DIRECTORY;//标记目录文件
for(inti=1;i<BlockFcbCount;i++){
fcb[i].fatherBlockNum=_CurrentBlockNum;//标记为子项
fcb[i].type=NULL;//标记为空白项
else
dir=(structdirFile*)(osPoint->data[current-3]);
/*--------为了避免该目录下同名文件夹--------*/
for(i=1;i<BlockFcbCount;i++)
{
if(dir->fcb[i].type==DIRECTORY&&strcmp(dir->fcb[i].fname,sonfname)==0)
#include<stdio.h>
#include<memory.h>
#include<string>
#include<iostream>
usingnamespacestd;
//1代表普通文件2代表目录文件0表示空文件
//基本变量常量定义去
#defineGENERAL1
#defineDIRECTORY2
intmkdir(char*sonfname)
{
//判断是否有重名
//寻找空白子目录项
//寻找空白盘块号
//当前目录下增加该子目录项
//分配子目录盘块,并且初始化
//修改fat表
inti,temp,iFAT;
structdirFile*dir;//当前目录的指针
if(current==2)
dir=&(osPoint->root);
{
intfiles;//当前打开文件数
FCBf[OPEN_MAX];//FCB拷贝
OPENLIST()
{
files=0;
for(inti=0;i<OPEN_MAX;i++){
f[i].fatherBlockNum=-1;//为分配打开
f[i].type=GENERAL;
}
}
};
/*-------------目录文件结构---------------*/
}
}
};
/**********************************************************************/
structDISK
{
intFAT1[BlockCount];//FAT1
intFAT2[BlockCount];//FAT2
structdirFileroot;//根目录
structOPENLIST*openlist;//用户文件列表指针
/*-----------函数事先申明--------------------*/
intmkdir(char*sonfname);
intcreate(char*name);
intlistshow();
intdelfile(char*name);
总之,此次实验不但帮我进一步理解了进程同步和互斥模型,还使我了解Linux系统下的C编程。
实验三文件系统的设计与基本操作的实现
【实验目的】
理解文件系统的组织结构
理解文件系统的描述结构
【实验软硬件环境】
Linux、Windows98、Windows2000
【实验内容】
选择一种操作系统(UNIX),理解其文件系统结构。
//intchangePath(char*sonfname);
intwrite(char*name);
intexit();
intopen(char*file);
intclose(char*file);
intread(char*file);
/*------------初始化-----------------------*/
{
while(1)
{
P(runid);
printf("\n");
printf("汽车启动\n");
printf("汽车到站\n");
V(stopid);
}
}
else
{
while(1)
{
printf("乘务员开车门\n");
printf("乘务员关车门\n");
V(runid);
printf("售票\n");
显示父子进程的通信信息和相应的应答信息。
(进程间通信机制任选)
【实验程序及分析】
编程思路:首先本程序在Linux用C语言完成的,父子进程的创建用fork函数来实现,然后是父子进程间的通信,这里用pipe实现。可以定义chan1[2],chan1[2],chanx[0]表示读,chanx[1]表示写。他们配合使用。
chardata[BlockCount-3][BlockSize];
voidformat()
{
memset(FAT1,0,BlockCount);//FAT1
memset(FAT2,0,BlockCount);//FAT2
FAT1[0]=FAT1[1]=FAT1[2]=-2;//0,1,2盘块号依次代表FAT1,FAT2,根目录区
structdirFile
{
structFCBfcb[BlockFcbCount];
voidinit(int_FatherBlockNum,int_CurrentBlockNum,char*name)//父块号,当前块号,目录名
相关主题