文档库 最新最全的文档下载
当前位置:文档库 › 操作系统设备管理实验代码

操作系统设备管理实验代码

操作系统设备管理实验代码
操作系统设备管理实验代码

#include

using namespace std;

//

typedef struct node

{

char name[10];

char devname[10];

struct node *next;

}PCB;//进程

PCB * run;//执行队列

//

typedef struct Node

{

char identify[10];//标识

int state;//设备状态

PCB *blocking;//阻塞队列指针}CHCT;//通道控制表

CHCT * CH1, * CH2;

//

typedef struct NOde

{

char identify[10];//标识

int state;//设备状态

CHCT * chct;//CHCT

PCB *blocking;//阻塞队列指针

struct NOde *next;

}COCT;//控制器控制表

COCT * cohead;

typedef struct NODe

{

char identify[10];//标识

char type;//设备类型

int state;//设备状态

int times;//重复执行次数

PCB *blocking;//阻塞队列指针

COCT * coct;//COCT

}DCT;//设备控制表

typedef struct NODE

{

char type;//类别

char identify[10];//标识

DCT * dct;//DCT

//驱动入口地址

struct NODE *next;

}SDT;

//系统设备表

SDT * head;

SDT * checkdel;

void Init()

{

PCB * ch1block,* ch2block,* co1block,* co2block,* co3block,* d1block,* d2block,* d3block,* d4block;

COCT * CO1,* CO2,* CO3;

DCT *d1,*d2,*d3,*d4;

SDT *s1,*s2,*s3,*s4;

//=================================================

run=(PCB *)malloc(sizeof(PCB));

run->next=NULL;

CH1=(CHCT *)malloc(sizeof(CHCT));

CH2=(CHCT *)malloc(sizeof(CHCT));

strcpy(CH1->identify,"ch1");

strcpy(CH2->identify,"ch2");

CH1->state=0;

CH2->state=0;

ch1block=(PCB *)malloc(sizeof(PCB));

ch1block->next=NULL;

ch2block=(PCB *)malloc(sizeof(PCB));

ch2block->next=NULL;

CH1->blocking=ch1block;

CH2->blocking=ch2block;

cohead=(COCT *)malloc(sizeof(COCT));

cohead->next=NULL;

CO1=(COCT *)malloc(sizeof(COCT));

cohead->next=CO1;

CO1->next=NULL;

CO2=(COCT *)malloc(sizeof(COCT));

CO1->next=CO2;

CO2->next=NULL;

CO3=(COCT *)malloc(sizeof(COCT));

CO2->next=CO3;

CO3->next=NULL;

CO1->state=0;

CO2->state=0;

CO3->state=0;

co1block=(PCB *)malloc(sizeof(PCB));

co1block->next=NULL;

co2block=(PCB *)malloc(sizeof(PCB));

co2block->next=NULL;

co3block=(PCB *)malloc(sizeof(PCB));

co3block->next=NULL;

strcpy(CO1->identify,"co1");

strcpy(CO2->identify,"co2");

strcpy(CO3->identify,"co3");

CO1->chct=CH1;

CO2->chct=CH1;

CO3->chct=CH2;

CO1->blocking=co1block;

CO2->blocking=co2block;

CO3->blocking=co3block;

//===================================================== d1block=(PCB *)malloc(sizeof(PCB));

d2block=(PCB *)malloc(sizeof(PCB));

d3block=(PCB *)malloc(sizeof(PCB));

d4block=(PCB *)malloc(sizeof(PCB));

d1block->next=NULL;

d2block->next=NULL;

d3block->next=NULL;

d4block->next=NULL;

d1=(DCT *)malloc(sizeof(DCT));

strcpy(d1->identify,"P");

d2=(DCT *)malloc(sizeof(DCT));

strcpy(d2->identify,"T");

d3=(DCT *)malloc(sizeof(DCT));

strcpy(d3->identify,"K");

d4=(DCT *)malloc(sizeof(DCT));

strcpy(d4->identify,"M");

d1->coct=CO1;

d2->coct=CO2;

d3->coct=CO3;

d4->coct=CO3;

d1->state=0;

d2->state=0;

d3->state=0;

d4->state=0;

d1->type='o';

d2->type='o';

d3->type='i';

d4->type='i';

d1->blocking=d1block;

d2->blocking=d2block;

d3->blocking=d3block;

d4->blocking=d4block;

//================================

head=(SDT *)malloc(sizeof(SDT));

head->next=NULL;

s1=(SDT *)malloc(sizeof(SDT));

s2=(SDT *)malloc(sizeof(SDT));

s3=(SDT *)malloc(sizeof(SDT));

s4=(SDT *)malloc(sizeof(SDT));

head->next=s1;

s1->next=s2;

s2->next=s3;

s3->next=s4;

s4->next=NULL;

s1->dct=d1;

s2->dct=d2;

s3->dct=d3;

s4->dct=d4;

strcpy(s1->identify,"P");

strcpy(s2->identify,"T");

strcpy(s3->identify,"K");

strcpy(s4->identify,"M");

s1->type='o';

s2->type='o';

s3->type='i';

s4->type='i';

//test

SDT *temp=head->next;

}

//============================================ //添加设备时候,添加新控制器,把控制器加到最后void Addcotrol (COCT *temp)

{

COCT *cotemp=cohead;

while(cotemp->next!=NULL)

{

cotemp=cotemp->next;

}

cotemp->next=temp;

temp->next=NULL;

}

//查看所有控制器,选择所要连接的控制器

void Showallco()

{

COCT *temp=cohead->next;

while(temp!=NULL)

{

cout<identify<<" ";

temp=temp->next;

}

cout<

}

//查找要连接的控制器

COCT * Findco(char a[])

{

COCT * temp=cohead->next;

while(temp!=NULL)

{

if(!strcmp(temp->identify,a))

{

return temp;

}

temp=temp->next;

}

return temp;

}

//删除设备时候,判断是不是同时删除控制器,等于1删,0不删

int sf_deleteco(char a[],char b[])

{

SDT *temp;

temp=head->next;

while(temp!=NULL)

{

if((strcmp(temp->identify,a))&&((!strcmp(temp->dct->coct->identify,b)))) {

return 0;

}

temp=temp->next;

}

return 1;

}

//删除设备的时候同时删除控制器

void Deletecotrol(COCT *te)

{

COCT * temp=cohead;

while(temp->next!=te)

{

temp=temp->next;

}

temp->next=te->next;

delete(te);

}

//添加设备,查找设备是不是已经存在

int sf_exist(char a[])

{

SDT *temp;

if(head->next==NULL)

{

return 0;

}

else

{

temp=head->next;

while(temp!=NULL)

{

if(!strcmp(a,temp->identify))

{

checkdel=temp;

return 1;

}

temp=temp->next;

}

return 0;

}

}

//申请设备时候,如果忙,将设备挂到等待队列void Addwaitpcb(PCB * p1,PCB * p2)

{

PCB *temp=p1;

while(temp->next!=NULL)

{

temp=temp->next;

}

temp->next=p2;

p2->next=NULL;

}

//回收设备时候,对PCB的操作

void Deletepcb(char a[])

{

PCB * temp2=run->next,* temp=run;

while(temp2!=NULL)

{

if(!strcmp(temp2->devname,a))

{

temp->next=temp2->next;

delete(temp2);

break;

}

temp=temp2;

temp2=temp->next;

}

}

//判断等待队列是不是空

int sf_pcbnull(PCB *temp)

{

if(temp->next==NULL)

{

return 0;

}

else return 1;

}

//查看所有设备状态

void Showmenu()

{

PCB * ptemp=run->next;

SDT * temp=head->next;

DCT * dtemp;

COCT * cotemp;

CHCT * chtemp;

cout<<"SDT"<<" i/o"<<" COCT"<<" CHCT"<

while(temp!=NULL)

{

dtemp=temp->dct;

cotemp=dtemp->coct;

chtemp=cotemp->chct;

cout<identify<<"["<state<<"]"<<"\t"<type<<"\t"<identify<<"["<state<<"]"<<"

\t"<identify<<"["<state<<"]"<

temp=temp->next;

}

while(ptemp!=NULL)

{

cout<<"进程"<name<<"申请了设备"<devname<

ptemp=ptemp->next;

}

cout<

}

//设备独立性时候查找要查找的类型是不是存在

int sf_typeexist(char ch)

{

SDT *temp;

if(head->next==NULL)

{

return 0;

}

else

{

temp=head->next;

while(temp!=NULL)

{

if(temp->type==ch)

{

return 1;

}

else temp=temp->next;

}

}

return 0;

}

//增加设备

void Adddevice()

{

cout<<"增加设备"<

SDT * stemp,* s2temp;

COCT *cotemp;

DCT *temp;

char temptype;

PCB *tempblock,* cotempblock;

char choice;

char eqary[10],coary[10];

cin>>eqary;

//此处查找SDT,看是否所要添加的设备已经存在if(sf_exist(eqary)==1)

{//设备已经存在

cout<<"设备已存在"<

}

else

{//设备不存在

tempblock=(PCB *)malloc(sizeof(PCB));

tempblock->next=NULL;

temp=(DCT *)malloc(sizeof(DCT));

strcpy(temp->identify,eqary);

temp->blocking=tempblock;

temp->state=0;

cout<<"输入设备类型"<

cin>>temptype;

temp->type=temptype;

stemp=(SDT *)malloc(sizeof(SDT));

stemp->next=NULL;

stemp->dct=temp;

stemp->type=temptype;

strcpy(stemp->identify,eqary);

s2temp=head;

while(s2temp->next!=NULL)

{

s2temp=s2temp->next;

}

s2temp->next=stemp;

stemp->next=NULL;

cout<<"是否添加控制器?(y/n)"<

cin>>choice;

if((choice=='y')||(choice=='Y'))

{ //添加新控制器

cout<<"输入控制器名称:"<

cin>>coary;

cotempblock=(PCB *)malloc(sizeof(PCB));

cotempblock->next=NULL;

cotemp=(COCT *)malloc(sizeof(COCT));

cotemp->next=NULL;

strcpy(cotemp->identify,coary);

cotemp->state=0;

cotemp->blocking=cotempblock;

Addcotrol(cotemp);

temp->coct=cotemp;

cout<<"请选择连接的通道:1/2"<

int i;

cin>>i;

if(i==1)

{

cotemp->chct=CH1;

}

else

{

cotemp->chct=CH2;

}

}

else

{//不添加控制器

Showallco();

cout<<"输入连接控制器的名称:"<

cin>>coary;

cotemp=Findco(coary);

temp->coct=cotemp;

}

cout<<"设备"<

}

}

//删除设备

void Deletedevice()

{//删除设备的时候同时删除pcb Deletepcb

cout<<"删除设备"<

COCT * temp;

SDT * stemp;

char chary[10];

char tempary[10];

cin>>chary;

if(sf_exist(chary)==0)

{

cout<<"删除设备不存在!"<

}

else if(checkdel->dct->state==1)

{

cout<<"设备正在使用无法删除"<

}

else

{//sf_deleteco();

Deletepcb(chary);

strcpy(tempary,checkdel->dct->coct->identify);

if(sf_deleteco(chary,tempary))

{//删除控制器

temp=checkdel->dct->coct;

Deletecotrol(temp);

}

stemp=head;

while(stemp->next!=checkdel)

{

stemp=stemp->next;

}

stemp->next=checkdel->next;

delete(checkdel);

cout<<"设备"<

}

}

//申请设备

void Applydevice()

{

cout<<"申请设备"<

PCB *ptemp;

DCT *dtemp;

COCT *cotemp;

CHCT *chtemp;

char pname[10],eqname[10];

cin>>pname>>eqname;

if(sf_exist(eqname)==0)

{

cout<<"设备不存在!"<

}

else

{//checkdel(对应要申请设备的指针)

ptemp=(PCB *)malloc(sizeof(PCB));

strcpy(ptemp->name,pname);

ptemp->next=NULL;

dtemp=checkdel->dct;

//====================此处是否要考虑状态的改变========================

if(dtemp->state==1)

{//设备忙

Addwaitpcb(dtemp->blocking,ptemp);

cout<<"进程"<name<<"被挂在设备"<identify<<"的等待队列上!"<

}

else

{//设备不忙

cotemp=dtemp->coct;

if(cotemp->state==1)

{//控制器忙

Addwaitpcb(cotemp->blocking,ptemp);

cout<<"进程"<name<<"被挂在控制器"<identify<<"的等待队列上!"<

}

else

{//控制器不忙

chtemp=cotemp->chct;

if(chtemp->state==1)

{//通道忙

Addwaitpcb(chtemp->blocking,ptemp);

cout<<"进程"<name<<"被挂在通道"<identify<<"的等待队列上!"<

}

else

{//通道不忙

Addwaitpcb(run,ptemp);

dtemp->state=1;

cotemp->state=1;

chtemp->state=1;

strcpy(ptemp->devname,eqname);

cout<<"进程"<

}

}

}

}

}

//回收设备

void Recycledevice()

{

cout<<"回收设备"<

// char ch;

char eqname[10];

DCT *dtemp;

COCT *cotemp;

CHCT *chtemp;

PCB *pctemp1,*pctemp2;

cin>>eqname;

if(sf_exist(eqname)==0)

{//设备不存在

cout<<"要回收的设备不存在!"<

}

else if(checkdel->dct->state==0)

{//设备存在,但是不需要回收

cout<<"设备处于闲状态,不需要回收!"<

}

else

{//需要回收

Deletepcb(eqname);//

dtemp=checkdel->dct;

cotemp=dtemp->coct;

chtemp=cotemp->chct;

dtemp->state=0;

cotemp->state=0;

chtemp->state=0;

if(sf_pcbnull(chtemp->blocking))

{//如果通道等待队列不空

pctemp1=chtemp->blocking;

pctemp2=pctemp1->next;

pctemp1->next=pctemp2->next;

pctemp2->next=NULL;

strcpy(pctemp2->devname,eqname);

Addwaitpcb(run,pctemp2);

dtemp->state=1;

cotemp->state=1;

chtemp->state=1;

}

else

{

if(sf_pcbnull(cotemp->blocking))

{//如果控制器的等待队列不空

pctemp1=cotemp->blocking;

pctemp2=pctemp1->next;

pctemp1->next=pctemp2->next;

pctemp2->next=NULL;

strcpy(pctemp2->devname,eqname);

Addwaitpcb(run,pctemp2);

dtemp->state=1;

cotemp->state=1;

chtemp->state=1;

}

else

{

if(sf_pcbnull(dtemp->blocking))

{//如果设备的等待队列不空

pctemp1=dtemp->blocking;

pctemp2=pctemp1->next;

pctemp1->next=pctemp2->next;

pctemp2->next=NULL;

strcpy(pctemp2->devname,eqname);

Addwaitpcb(run,pctemp2);

dtemp->state=1;

cotemp->state=1;

chtemp->state=1;

}

}

}

cout<<"设备"<

}

}

//设备独立性=======

void Independence()

{

cout<<"设备独立性--申请设备:"<

//cout<<"申请设备"<

char type;

char pname[10];

SDT * temp,* temp2;

PCB *ptemp;

DCT *dtemp;

COCT *cotemp;

CHCT *chtemp;

cin>>pname>>type;

if((type=='o')||(type=='i'))

{//=========还得考虑要申请的类型是不是存在============================ if(sf_typeexist(type)==0)

{

cout<<"要申请的该类设备不存在!"<

}

else

{

temp=head->next;

while(temp!=NULL)

{

if((temp->type==type)&&(temp->dct->state==0))

{//当设备类型相同,并且设备空闲

temp2=temp;

break;

}

else if((temp->type==type))

{

temp2=temp;

}

temp=temp->next;

}

sf_exist(temp2->identify);//================================================ =

ptemp=(PCB *)malloc(sizeof(PCB));

strcpy(ptemp->name,pname);

ptemp->next=NULL;

dtemp=checkdel->dct;//要用了这个函数才可以========================================================================== if(temp2->dct->state==0)

{//当设备不忙时候

cotemp=dtemp->coct;

if(cotemp->state==1)

{//控制器忙

Addwaitpcb(cotemp->blocking,ptemp);

cout<<"进程"<name<<"被挂在控制器"<identify<<"的等待队列上!"<

}

else

{//控制器不忙

chtemp=cotemp->chct;

if(chtemp->state==1)

{//通道忙

Addwaitpcb(chtemp->blocking,ptemp);

cout<<"进程"<name<<"被挂在通道"<identify<<"的等待队列上!"<

}

else

{//通道不忙

Addwaitpcb(run,ptemp);

dtemp->state=1;

cotemp->state=1;

chtemp->state=1;

strcpy(ptemp->devname,temp2->identify);

cout<<"进程"<identify<<"成功!"<

}

}

}

else

{//当设备忙时候

Addwaitpcb(dtemp->blocking,ptemp);

cout<<"进程"<name<<"被挂在设备"<identify<<"的等待队列上!"<

}

}

}

else

{

cout<<"输入设备的类型错误!"<

}

}

//

void Show()

{

cout<<"A :增加设备"<

cout<<"D :删除设备"<

cout<<"S :申请设备"<

cout<<"H :回收设备"<

cout<<"I :设备独立性"<

cout<<"Q :退出"<

}

//

int main()

{ cout<<" 操作系统实验三 "<

Init();

Show();

char choice;

while(true)

{

Showmenu();

cout<<"选择指令:"<

cin>>choice;

switch(choice)

{

case 'a':

case 'A':

Adddevice();

break;

case 'd':

case 'D':

Deletedevice();

break;

case 's':

case 'S':

Applydevice();

break;

case 'h':

case 'H':

Recycledevice();

break;

case 'q':

case 'Q':

exit(0);

case 'i':

case 'I':

Independence();

break;

default :

cout<<"指令错误"<

break;

}

}

return 0;

}

操作系统实验报告

操作系统实验报告 集团企业公司编码:(LL3698-KKI1269-TM2483-LUI12689-ITT289-

实验二进程调度1.目的和要求 通过这次实验,理解进程调度的过程,进一步掌握进程状态的转变、进程调度的策略,进一步体会多道程序并发执行的特点,并分析具体的调度算法的特点,掌握对系统性能的评价方法。 2.实验内容 阅读教材《计算机操作系统》第二章和第三章,掌握进程管理及调度相关概念和原理。 编写程序模拟实现进程的轮转法调度过程,模拟程序只对PCB进行相应的调度模拟操作,不需要实际程序。假设初始状态为:有n个进程处于就绪状态,有m个进程处于阻塞状态。采用轮转法进程调度算法进行调度(调度过程中,假设处于执行状态的进程不会阻塞),且每过t个时间片系统释放资源,唤醒处于阻塞队列队首的进程。 程序要求如下: 1)输出系统中进程的调度次序; 2)计算CPU利用率。 3.实验环境 Windows操作系统、VC++6.0 C语言 4设计思想: (1)程序中进程可用PCB表示,其类型描述如下:

structPCB_type { intpid;//进程名 intstate;//进程状态 2——表示“执行”状态 1——表示“就绪”状态 0——表示“阻塞”状态 intcpu_time;//运行需要的CPU时间(需运行的时间片个数) } 用PCB来模拟进程; (2)设置两个队列,将处于“就绪”状态的进程PCB挂在队列ready中;将处于“阻塞”状态的进程PCB挂在队列blocked中。队列类型描述如下: structQueueNode{ structPCB_typePCB; StructQueueNode*next; } 并设全程量: structQueueNode*ready_head=NULL,//ready队列队首指针 *ready_tail=NULL,//ready队列队尾指 针

《实用操作系统》实验报告五linux设备管理

《实用操作系统》实验报告 实验报告: 5 实验项目名称:设备管理 班级:学号:姓名: 地点:时间:2013 年11 月13 日 一、实验内容 1、添加硬盘,创建二个主分区、一个扩展分区,二个逻辑分区 注意:ide、scsi 提示:分区、格式化、挂载(fdisk,mkfs,mount) 2、查看常见的设备文件有哪些?(ls /dev ) 常见的设备文件:/dev/hd* IDE接口的硬盘(IDE接口的设备) /dev/sd* SCSI/USB设备/dev/cua* 串口设备/dev/lp* 并口设备/dev/tty* 终端设备/dev/consol 控制台设备/dev/eth* 以太网设备/dev/cdrom IDE光驱/dev/fd* 软驱/dev/audio 音频设备/dev/scd SCSI的光驱/dev/ppp PPP设备/dev/isdn* ISDN设备 3、挂载光盘,查看光盘内容创建挂载点要求:以本人姓名缩写为目录mkdir / 目录/设备挂载mount 空格源设备空格挂载点 4、显示管理System-config-display 5、声卡管理System-config-soundcard 6、打印机管理System-config-printer 7、网卡管理System-config-network 二、实验步骤及结果 1.添加硬盘,创建分区; 在启动虚拟机前,在工具栏中点击“虚拟机”,找到“设置”选项,在左面的硬件中找到硬盘,进行硬盘设备添加,这里有IDE和SCSI两种硬盘类型可供选择添加。完成硬盘添加后即可启动虚拟机进入linux系统。在这我添加了容量相同的硬盘设备类型各一;

网络管理实验报告

实验1:W i n d o w2003S N M P服务配置 1.掌握简单网络管理协议的操作知识 (SNMP网络管理模型,抽象语法表示(ASN.1),管理信息结构(SMI),常用的管理信息(MIB)。SNMP协议数据格式与工作模式,网络管理系统) 2.收集在网络上实现SNMP所必需信息 (1)一个典型的网络管理系统包括四个要素:管理员、管理代理、管理信息数据库、代理服务设备。一般说来,前三个要素是必需的,第四个只是可选项。 (2)网络管理软件的重要功能之一,就是协助网络管理员完成管理整个网络的工作。网络管理软件要求管理代理定期收集重要的设备信息,收集到的信息将用于确定独立的网络设备、部分网络、或整个网络运行的状态是否正常。管理员应该定期查询管理代理收集到的有关主机运转状态、配置及性能等的信息。? 网络管理代理是驻留在网络设备中的软件模块,这里的设备可以是UNIX工作站、网络打印机,也可以是其它的网络设备。管理代理软件可以获得本地设备的运转状态、设备特性、系统配置等相关信息。管理代理软件就象是每个被管理设备的信息经纪人,它们完成网络管理员布置的采集信息的任务。管理代理软件所起的作用是,充当管理系统与管理代理软件驻留设备之间的中介,通过控制设备的管理信息数据库(MIB)中的信息来管理该设备。管理代理软件可以把网络管理员发出的命令按照标准的网络格式进行转化,收集所需的信息,之后返回正确的响应。在某些情况下,管理员也可以通过设置某个MIB对象来命令系统进行某种操作。 路由器、交换器、集线器等许多网络设备的管理代理软件一般是由原网络设备制造商提供的,它可以作为底层系统的一部分、也可以作为可选的升级模块。设备厂商决定他们的管 理代理软件可以控制哪些MIB对象,哪些对象可以反映管理代理软件开发者感兴趣的问题。 (3)管理信息数据库(MIB)定义了一种数据对象,它可以被网络管理系统控制。MIB是一个信息存储库,这里包括了数千个数据对象,网络管理员可以通过直接控制这些数据对象去控制、配置或监控网络设备。网络管理系统可以通过网络管理代理软件来控制MIB数据对象。不管到底有多少个MIB

操作系统实验六_设备管理

操作系统课程报告实验六设备管理 学号 姓名 班级 教师 华侨大学电子工程系

实验目的 1、理解设备管理的概念和任务。 2、掌握独占设备的分配、回收等主要算法的原理并编程实现。 实验内容与基本要求 1、在Windows系统中,编写程序实现对独占设备的分配和回收的模拟, 该程序中包括:建立设备类表和设备表、分配设备和回收设备的函数。实验报告内容 1、独占设备的分配、回收等主要算法的原理。 为了提高操作系统的可适应性和可扩展性,现代操作系统中都毫无例外地实现了设备独立性,又叫做设备无关性。设备独立性的含义是:应用程序独立于具体使用的物理设备。为了实现独占设备的分配,系统设置数据表格的方式也不相同,在实验中只要设计合理即可。这里仅仅是一种方案,采用设备类表和设备表。 (1)数据结构 操作系统设置“设备分配表”,用来记录计算机系统所配置的独占设备类型、台数以及分配情况。设备分配表可由“设备类表”和“设备表”两部分组成,如下图: (2)设备分配 当进程申请某类设备时,系统先查“设备类表”如果该类设备的现存台数可以满足申请要求,则从该类设备的“设备表”始址开始依次查该类设备在设备表中的登记项,找出“未分配”的设备分配给进程。分配后要修改设备类表中的现存台数,把分配给进程的设备标志改为“已分配”且填上占用设备的进程名。然后,

把设备的绝对号与相对号的对应关系通知用户,以便用户在分配到的设备上装上存储介质。 (3)设备回收 当进程执行结束撤离时应归还所占设备,系统根据进程名查设备表,找出进程占用设备的登记栏,把标志修改为“未分配”,清除进程名。同时把回收的设备台数加到设备类表中的现存台数中。

软件工程实验报告

软件工程实验报告 姓名:冯巧 学号 实验题目:实验室设备管理系统 1、系统简介: 每天对实验室设备使用情况进行统计,对于已彻底损坏的作报废处理,同时详细记录有关信息。对于有严重问题(故障)的要即时修理,并记录修理日期、设备名、修理厂家、修理费用、责任人等。对于急需但又缺少的设备需以“申请表”的形式送交上级领导请求批准购买。新设备购入后立即对新设备登记(包括类别、设备名、型号、规格、单价、数量、购置日期、生产厂家、购买人等),同时更新申请表的内容。 2、技术要求及限定条件: 采用C#语言设计桌面应用程序,同时与数据库MySql进行交互。系统对硬件的要求低,不需要网络支持,在单机环境下也能运行,在局域网环境下也能使用。方案实施相对容易,成本低,工期短。 一:可行性分析 1、技术可行性分析 计算机硬件设备,数据库,实验室设备管理软件与实验室设备管理系统的操作人员组成,能够实现实验室设备管理的信息化,提高工作效率,实现现代化的实验室设备管理。系统需要满足实验室设备管理(包括对实验设备的报废、维修和新设备的购买)、实验室设备信息查询(包括按类别进行查询和按时间进行查询)、实验室设备信息统计报表(包括对已报废设备的统计、申请新设备购买的统计和现有设备的统计)。这些功能框图如下图所示: 2、经济可行性分析 依据用户的现实需求、技术现状、经济条件、工期以及其他局限性因素等等因素,考虑到工期的长短、技术的成熟可靠、操作方便等因素,本方案具备经济可行性。

3、系统可选择的开发方案 ①方案A用C#开发系统的特点是:开发工具与数据库集成一体,可视化,开发速度较快,但数据库能够管理的数据规模相对较小。系统对硬件的要求低,不需要网络支持,在单机环境下也能运行,在局域网环境下也能使用。方案的实施相对容易,成本低,工期短。 ②方案B:以小型数据库管理系统为后台数据库,该前台操作与数据库分离,也能够实现多层应用系统。系统对硬件的要求居中,特别适合在网络环境下使用,操作方便。但系统得实现最复杂,成本最高,工期也较长。 二:软件需求分析 1.软件系统需求基本描述: 实验室设备管理系统是现代企业资源管理中的一个重要内容,也是资源开发利用的基础性工作。实验室设备在信息化之前,在用户系统管理、设备维修管理、设备的增删改查管理等方面存在诸多不利于管理的地方,不适应现代的企业管理形势和资源的开发利用。 2.软件系统数据流图(由加工、数据流、文件、源点和终点四种元素组成): 1)顶层数据流图 2)二层流程图 3)总数据流图

操作系统实验指导_源码参考资料

华东交通大学 软件学院 操作系统实验报告 专业: 计算机科学与技术 姓名: 林庆达 学号: 3103005138 2005-6

试验一进程调度 一、实验目的: 编写和调试一个进程调度程序,以加深对进程的概念及进程调度算法的理解。 二、实验内容:以两种典型算法为例说明实现的算法 (一)、最高优先数优先的调度算法 1、实验原理 进程调度算法:采用最高优先数优先 的调度算法(即把处理机分配给优先数最 高的进程)和先来先服务算法。 每个进程有一个进程控制块(PCB) 表示。进程控制块可以包含如下信息:进 程名、优先数、到达时间、需要运行时间、 已用CPU时间、进程状态等等。 进程的优先数及需要的运行时间可以 事先人为地指定(也可以由随机数产生)。 进程的到达时间为进程输入的时间。 进程的运行时间以时间片为单位进 行计算。 每个进程的状态可以是就绪W (Wait)、运行R(Run)、或完成F(Finish) 三种状态之一。 就绪进程获得CPU后都只能运行一 个时间片。用已占用CPU时间加1来表示。 如果运行一个时间片后,进程的已占 用CPU时间已达到所需要的运行时间, 则撤消该进程,如果运行一个时间片后进 程的已占用CPU时间还未达所需要的运 行时间,也就是进程还需要继续运行,此 时应将进程的优先数减1(即降低一级), 然后把它插入就绪队列等待CPU。 每进行一次调度程序都打印一次运 行进程、就绪队列、以及各个进程的PCB, 以便进行检查。 重复以上过程,直到所有进程都完成为止。 2、源代码: #include "stdio.h" #include #include #define getpch(type) (type*)malloc(sizeof(type)) #define NULL 0

操作系统实验七设备管理实验(广西师大)

操作系统课程实验 年级2012级 专业计算机科学与技术(应用型)姓名 学号 指导教师黄玲 日期2013年12月26日

实验七、设备管理实验 一、关键问题 1、实验目的 观察Linux下U盘的访问;理解设备虚拟分配技术。 2、实验环境 Ubuntu8.0或者以上,Eclipse集成开发环境 3、实验内容 3.1观察Linux下的U盘访问 从键盘获得符号串,写入磁盘文件,然后读取该文件。 3.2设备管理模拟实验要求:设计一个SPOOLing输入模拟系统。提示:输入井设计成结构体数组,每块存放一个输入文件内容。三个用户进程与一个后台输入进程并发执行,后台输入进程接受用户键盘输入的文件到输入井,每个用户进程从输入井获取输入数据。 老师所给的例子为为利用内存SPOOLing输入模拟系统,而问题的关键就是如何参考spoolout()设计spoolin()以及修改用户进程usepro()和输入#进程spoolsever()。 二、设计修改思路 spoolout()进程:键入要输入的用户id,如果用户输入文件未完成则键入文件内容,将文件内容mybuf发到输入井。 spoolsever()输入#进程:登记输入请求块,将缓冲区mybuf的数据送入输入井well。若成功送入,返回TRUE,否则返回FALSE。 usepro()用户进程:遍历输入请求块如找到该用户的输入请求,将输入请求块的数据送入用户缓冲区userbuf,并在屏幕输出userbuf。 三、实现修改的关键代码 #include #define WELLSIZE500//输入井的大小 #define FALSE0 #define TRUE1 //进程控制块 struct { int id;//进程标识数 char status;//进程状态,'e'为执行态,'c'为完成态。 int bufflag;//用户缓冲区userbuf空闲标志:FALSE为无数据,TRUE为有数据。 int filec;//本进程需要输出的文件数(用户指定) }pcb[4];//pcb[0]为SPOOLing进程,pcb[1]、pcb[2]、pcb[3]为3个用户进程

实验室设备管理系统实验报告1讲解

本科实验报告 课程名称:软件工程导论 实验项目:实验室设备管理系统 实验地点:实验楼210 专业班级:软件1319 学号:2013005655 学生姓名:张卫东 指导教师:王会青 2015年05 月21 日

一、实验目的和要求 1.系统简介 某大学每学年都需要对实验室设备使用情况进行统计、更新。 其中: (1)对于已彻底损坏的实验设备做报废处理,同时详细记录有关信息。 (2)对于有严重问题(故障)的需要及时修理,并记录修理日期、设备名、编号、修理厂家、修理费用、责任人等。 (3)对于急需使用但实验室目前又缺乏的设备,需以“申请表”的形式送交上级领导请求批准购买。新设备购入后要立即进行设备登记(包括类别、设备名、编号、 型号、规格、单价、数量、购置日期、生产厂家、保质期和经办人等信息),同 时更新申请表的内容。 (4)随时对现有设备及其修理、报废情况进行统计、查询,要求能够按类别和时间段等条件进行查询。 2.技术要求及限制条件 (1)所有工作由专门人员负责完成,其他人不得任意使用。 (2)每件设备在做入库登记时均由系统按类别加自动顺序号编号,形成设备号;设备报废时要及时修改相应的设备记录,且有领导认可。 (3)本系统的数据存储至少包括:设备记录、修理记录、报废记录、申请购买记录。 (4)本系统的输入项至少包括:新设备信息、修理信息、申请购买信息、具体查询统计要求。 (5)本系统的输出项至少包括:设备购买申请表、修理/报废设备资金统计表。 二、实验内容和原理 可行性分析报告 可行性研究主要是初步确定项目的规模和目标,确定项目的约束和限制。对于项目的功能和性能方面的要求进行简要的概述。详见组长田彦博的实验报告。 需求规格说明书 需求规格说明书主要是进一步定制实验室设备管理系统软件开发的细节问题,便于用户与开发商协调工作。在此主要绘制了系统的数据流图、相应的数据字典、E-R图、以及系统的功能图,对于各个方面的需求进行了详细的阐述。详见组长田彦博的实验报告。 概要设计说明书 概要设计说明书是为了说明整个实验室设备管理系统的体系架构,以及需求用例的各个功能点在架构中的体现。在此主要绘制了系统流程图、总体结构和模块的外部设计,而且对于数据库中逻辑结构方面也进行了详细的设计。详见组长田彦博的实验报告。

操作系统实验 设备管理汇总

操作系统实验 名称实验六设备管理 姓名 专业 学号 日期 2015年12月01日指导老师

一、实验目的 1.理解设备管理的概念和任务。 2.掌握独占设备的分配、回收等主要算法的原理并编程实现。 二、实验内容与要求 1.在Windows系统中,编写程序实现对独占设备的分配和回收的模拟,该程序中包括:建立设备类表和设备表、分配设备和回收设备的函数。 三、实验原理 1.独占设备的分配、回收等主要算法的原理。 为了提高操作系统的可适应性和可扩展性,现代操作系统中都毫无例外地实现了设备独立性,又叫做设备无关性。设备独立性的含义是:应用程序独立于具体使用的物理设备。 为了实现独占设备的分配,系统设置数据表格的方式也不相同,在实验中只要设计合理即可。这里仅仅是一种方案,采用设备类表和设备表。 (1)数据结构 操作系统设置“设备分配表”,用来记录计算机系统所配置的独占设备类型、台数以及分配情况。设备分配表可由“设备类表”和“设备表”两部分组成,如下 设备类表设备表 控制器表通道表 设备队列队首指针。凡因请求本设备而未得到满足的进程,其PCB都应按照一定的策略排成一个队列,称该队列为设备请求队列或简称设备队列。其队首指针指向队首PCB。在有的系统中还设置了队尾指针。 设备状态。当设备自身正处于使用状态时,应将设备的忙/闲标志置“1”。若与该设备相连接的控制器或通道正忙,也不能启动该设备,此时则应将设备的等待标志置“1”。

与设备连接的控制器表指针。该指针指向该设备所连接的控制器的控制表。在设备到主机之间具有多条通路的情况下,一个设备将与多个控制器相连接。此时,在DCT中还应设置多个控制器表指针。 (2)设备分配 1)当进程申请某类设备时,系统先查“设备类表”。 2)如果该类设备的现存台数可以满足申请要求,则从该类设备的“设备表”始址开始依次查该类设备在设备表中的登记项,找出“未分配”的设备分配给进程。 3)分配后要修改设备类表中的现存台数,把分配给进程的设备标志改为“已分配”且填上占用设备的进程名。 4)然后,把设备的绝对号与相对号的对应关系通知用户,以便用户在分配到的设备上装上存储介质。 (3)设备回收 当进程执行结束撤离时应归还所占设备,系统根据进程名查设备表,找出进程占用设备的登记栏,把标志修改为“未分配”,清除进程名。同时把回收的设备台数加到设备类表中的现存台数中。 设备分配程序的改进 增加设备的独立性:为了获得设备的独立性,进程应使用逻辑设备名I/O。这样,系统首先从SDT中找出第一个该类设备的DCT。若该设备忙,又查找第二个该类设备的DCT,仅当所有该类设备都忙时,才把进程挂在该类设备的等待队列上,而只要有一个该类设备可用,系统便进一歩计算分配该设备的安全性。 四、程序流程图

操作系统实验报告

操作系统实验报告 实验名称: 系统的引导 所在班级: 指导老师: 老师 实验日期: 2014年3 月29 日

一、实验目的 ◆熟悉hit-oslab实验环境; ◆建立对操作系统引导过程的深入认识; ◆掌握操作系统的基本开发过程; ◆能对操作系统代码进行简单的控制,揭开操作系统的神秘面纱。 二、实验容 1. 阅读《Linux核完全注释》的第6章引导启动程序,对计算机和Linux 0.11的引导过程进行初步的了解。 2. 按照下面的要求改写0.11的引导程序bootsect.s。 3. 有兴趣同学可以做做进入保护模式前的设置程序setup.s。 4. 修改build.c,以便可以使用make BootImage命令 5. 改写bootsect.s主要完成如下功能: bootsect.s能在屏幕上打印一段提示信息XXX is booting...,其中XXX是你给自己的操作系统起的名字,例如LZJos、Sunix等。 6. 改写setup.s主要完成如下功能: bootsect.s能完成setup.s的载入,并跳转到setup.s开始地址执行。而setup.s 向屏幕输出一行"Now we are in SETUP"。setup.s能获取至少一个基本的硬件参数(如存参数、显卡参数、硬盘参数等),将其存放在存的特定地址,并输出到屏幕上。setup.s不再加载Linux核,保持上述信息显示在屏幕上即可。 三、实验环境

本实验使用的系统是windows系统或者是Linux系统,需要的材料是osexp。 四、实验步骤 1. 修改bootsect.s中的提示信息及相关代码; 到osexp\Linux-0.11\boot目录下会看到图1所示的三个文件夹,使用UtraEdit 打开该文件。将文档中的98行的mov cx,#24修改为mov cx,#80。同时修改文档中的第246行为图2所示的情形。 图1图2 图3 2. 在目录linux-0.11\boot下,分别用命令as86 -0 -a -o bootsect.obootsect.s和 ld86 -0 -s -obootsectbootsect.o编译和bootsect.s,生成bootsect文件; 在\osexp目录下点击MinGW32.bat依此输入下面的命令: cd linux-0.11 cd boot as86 -0 -a -o bootsect.obootsect.s ld86 -0 -s -o bootsectbootsect.o

数据库设备管理系统

郑州轻工业学院本科 数据库课程设计总结报告 设计题目:设备管理系统 学生姓名:xx 、xx 系别:计算机与通信工程学院 专业:计算机科学与技术 班级:计算机科学与技术10~01 学号:xx 指导教师:张保威金松河 2012 年12月30 日

郑州轻工业学院 课程设计任务书 题目设备管理系统 专业、班级计算机科学与技术10-1 学号 xx 姓名 xx 学号 xx 姓名 xx 主要内容: 了解设备管理的基本流程,根据构思活出E---R图。根据所化E---R图,对相应的试题和关系建立表格,实现数据的初始化。用SQL建立数据库表,然后再用其他软件建立界面(如此设备管理系统用的是C#实现界面),将建立好的界面同数据库进行链接,实现对数据库的简单的增删改查。 E-R图思路: 部门向设备处申请所需设备的数量及类型,设备处产生采购清单递交给采购员。 采购员从供应商获得设备存放在设备存放处,设备管理员将设备分配到需要设备的各个部门,部门将设备分给员工进行使用。 在使用设备的过程中,如果设备在保修期限内出现质量问题部门向设备处申请,设备退回供应商;如果设备损坏,由部门向维修人员报修;若无维修价值,则申请报废。 基本要求: 立足于科技日益发达,自动化组不占据主要市场,要求学生根据自己所学的数据库知识,建立简单的数据库实现对设备管理的机械化,自动化。 1:能够数量掌握SQL; 2:能够运用其他辅助工具做图形界面。 3:能够实现对C#和数据库的链接。 4:作出的系统能够对数据库进行简单的增删改查。 5:通过机械化,自动化工具的使用,提高工作效率、准确率。 主要参考资料等: 《数据库系统概论》作者:王珊萨师煊出版社:高等教育出版社 《数据库系统概论》课堂课件。 完成期限:两周 指导教师签名: 课程负责人签名: 2012年 12月 30 日

操作系统实验报告

操作系统实验报告 学生学院计算机学院 专业班级计算机科学与技术3班学号3213005910 学生姓名林虹 指导教师丁国芳 2015 年12月15 日

目录 1 实验一进程调度 (1) 2 实验二银行家算法 (16) 3 实验三动态分区分配方式的模拟 (20) 4 实验四仿真各种磁盘调度算法 (26)

实验一进程调度 1. 实验目的 编写并调试一个模拟的进程调度程序,分别采用“短进程优先”、“时间片轮转”、“高响应比优先”调度算法对随机产生的五个进程进行调度,并比较算法的平均周转时间。以加深对进程的概念及进程调度算法的理解。 2. 实验要求 1.每个进程由一个进程控制块(PCB)表示,进程控制块可以包含如下信息:进程 名、优先数(响应比)、到达时间、需要运行时间(进程的长度)、已运行时间、进 程状态等等(可以根据需要自己设定)。 2.由程序自动生成进程(包括需要的数据,要注意数据的合理范围),第一个进程到 达时间从0开始,其余进程到达时间随机产生。 3.采用时间片轮转调度算法时,进程的运行时间以时间片为单位进行计算。 4.每个进程的状态可以是就绪W(Wait)、运行R(Run)、或完成F(Finish)三种 状态之一。 5.每进行一次调度,程序都要输出一次运行结果:正在运行的进程、就绪队列中的进 程、完成的进程以及各个进程的PCB,以便进行检查。 6.最后计算各调度算法的平均周转时间,并进行比较、分析。 3. 实验内容 a.算法原理 (1)短进程优先调度算法 “短进程优先”调度算法的基本思想是把CPU分配给就绪队列中需要时间最短的进程。 (2)时间片轮转算法 将系统中所有的就绪进程按照FCFS原则,排成一个队列。每次调度时将CPU 分派给队首进程,让其执行一个时间片。时间片的长度从几个ms到几百ms。在一个时间片结束时,发生时钟中断。调度程序据此暂停当前进程的执行,将其送到就绪队列的末尾,并通过上下文切换执行当前的队首进程。进程可以未使用完一个时间片,就出让CPU。 (3)高响应比优先算法 HRRN调度策略同时考虑每个作业的等待时间长短和估计需要的执行时间长短,从中选出响应比最高的作业投入执行。 每个作业完成后要打印该作业的开始运行时刻、完成时刻、周转时间和带权周转时间,这一组作业完成后要计算并打印这组作业的平均周转时间、带权平均周转时间。

实验10 操作系统设备管理

实验10 操作系统设备管理 一、按课本第139页【实例分析4-7】内容熟悉设备管理器界面。(若课本没带,打开我的电脑-右键-管理-设备管理-查看相应设备。)记录你使用的电脑的处理器、磁盘存储器等的型号分别是什么。二、学习如何在Microsoft Windows XP 中如何使用设备管理器管 理设备。 使用设备管理器管理设备 设备管理器提供一个图形视图,可显示计算机上安装的硬件以及与硬件关联的设备驱动程序和资源。在设备管理器上,可以集中更改配置硬件的方式以及更改硬件与计算机微处理器交互的方式。 使用设备管理器管理设备及其驱动程序需要拥有下列权限,系统管理员被授予了所有这些权限:?加载/卸载驱动程序权限。 ?向system32\drivers 目录复制文件所需的权限。 ?向注册表写入设置所需的权限。 设备管理器具有下列功能: ?确定计算机上的硬件是否工作正常。 ?更改硬件配置设置。 ?标识为每个设备加载的设备驱动程序,并获取每个设备驱动程序的有关信息。 ?更改设备的高级设置和属性。 ?安装更新的设备驱动程序。 ?禁用、启用和卸载设备。 ?重新安装驱动程序的前一版本。 ?找出设备冲突并手动配置资源设置。 ?打印计算机上所安装设备的概要信息。 通常,设备管理器用于检查计算机硬件的状态以及更新计算机上的设备驱动程序。如果您是高级用户并且通晓计算机硬件知识,则可以使用设备管理器的诊断功能来消除设备冲突和更改资源设置。 要访问设备管理器,请使用下列任一方法: ?单击开始,单击运行,然后键入devmgmt.msc。 ?右键单击我的电脑,单击管理,然后单击设备管理器。 ?右键单击我的电脑,单击属性,单击硬件选项卡,然后单击设备管理器。

用友ERP生产管理系统实验报告

用友ERP生产管理系统实验报告 本课程共分14单,以用友ERP-U8.72为实验平台,以一个企业的生产经营业务贯穿始终,分别介绍了ERP生产管理系统中物料清单、主生产计划、产能管理、需求规划、生产订单、车间管理、工程变更、设备管理的生产制造模块,以及与生产管理活动有关的销售管理、采购管理、委外管理、库存管理、应收款管理及应付款管理等模块的相关功能。 用友ERP生产管理系统是ERP-U8企业管理软件的重要组成部分,是企业信息化管理核心的和有效的方法和工具。它面向离散型和半离散型的制造企业资源管理的需求,遵循以客户为中心的经营战略,以销售订单及市场预测需求为导向,以计划为主轴,覆盖了面向订单采购、订单生产、订单装配和库存生产四种制造业生产类型,并广泛应用于机械、电子、食品、制药等行业。 本实验报告要针对的实验项目有客户订货、排程业务、产能管理、采购业务、委外业务、生产业务、车间管理、销售发货业务、应收款和应付款系统的制单业务、期末处理、物料清单维护、工程变更管理和设备管理。 实验一客户订货 一、实验目的 1.理解销售报价的作用,掌握销售报价的操作。 2.理解销售订货管理的主要功能,掌握相关的基本操作。 二、实验内容 1.输入销售报价单。 2.审核销售报价单。 3.输入销售预订单。 4.输入销售订单。 5.审核销售订单。 6.修改已审核销售订单。 三、实验步骤 1.输入报价单。 2.审核报价单。 3.根据报价单生成销售订单。 4.审核销售订单。 5.修改已审核销售订单。 6.手工输入新的销售订单。 7.审核手工输入的销售订单。

四、实验成果 实验二排程业务 一、实验目的 理解主生产计划和物料需求计划的作用,掌握产销排程和物料需求计划的操作。 二、实验内容 1.MPS累计提前天数推算和库存异常状况查询。 2.MPS计划参数维护。 3.MPS计划生成。 4.MPS计划作业的供需资料查询。 5.MRP累计提前天数推算和库存异常状况查询。 6.MRP计划参数维护。 7.MRP计划生成。 8.MRP供需资料查询。 三、实验步骤 1.MPS累计提前天数推算和库存异常状况查询。 2.MPS计划参数维护。 3.MPS计划生成。

设备管理系统(论文+开题报告+源码)

目录 前言―――――――――――――――――――――――摘要―――――――――――――――――――――――第一章系统需求分析 第二章系统设计 2.1系统方案确定 2.2系统功能实现 第三章怎样开发一个人事工资管理系统? 3.1 编程环境的选择

3.2 关系型数据库的实现 3.3 二者的结合(DBA) 第四章 Visual basic下的控件所实现的功能 4.1实现菜单选项 4.2 实现工具栏 4.3 帮助 第五章系统总体规划 5.1 系统功能 5.2 流程图 第六章系统具体实现 6.1 用户界面的实现 6.2 数据库的实现 第七章结束语 第八章主要参考文献 第九章程序源代码、各功能模块的程序流程图 --------------前言-------------- 设备管理信息系统是一个企事业单位不可缺少的部分,它的内容对于企事业单位的决策者和管理者来说都至关重要,所以设备管理信息系统应该能够为用户提供充足的信息和快捷的查询手段。但一直以来人们使用传统人工的方式管理设备的信息,这种管理方式存在着许多缺点,如:效率低、保密性差,另外时间一长,将产生大量的文件和数据,这对于查找、更新和维护都带来了不少的困难。本论文主要介绍的是设备管理信息系统的整个设计过程。 随着计算机技术的不断发展,计算机应用于各大领域,并给人们的生活带来了极大的便利,在固定管理系统亦是如此。以往设备员由于缺乏适当的软件而给其工作带来了很多不便。本论文所介绍的便是一个设备管理信息系统,以方便在设备安排和设备管理信息上的工作任务。 该系统适用于普通设备的管理,在使用上力求操作容易,界面美观,另外,本系统具有较高的扩展性和可维护性,可能在以后需要的时候进行软件升级。 整个系统的开发过程严格遵循软件工程的要求,做到模块化分析、模块化设计和代码编写的模块化。 作为计算机应用的一部分,使用计算机对设备信息进行管理,具有着手工管理所无法比拟的优点.例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高设备管理信息的效率,也是企业的科学化、正规化管理,与世界接轨的重要条件。 --------------摘要--------------

操作系统实验报告

操作系统实验报告 银行家算法 班级:计算机()班 姓名:李君益 学号:(号) 提交日期: 指导老师: 林穗 一、设计题目 加深了解有关资源申请、避免死锁等概念,并体会和了解死锁和避免死锁的具体实施方法。 要求编写和调试一个系统动态分配资源的简单模拟程序,观察死锁产生的条件,并采用银行家算法,有效的防止和避免死锁的发生。 二、设计要求

内容: 编制银行家算法通用程序,并检测思考题中所给状态的安全性。 要求: (1)下列状态是否安全?(三个进程共享个同类资源) 进程已分配资源数最大需求数 (状态) (状态) (2)考虑下列系统状态 分配矩阵最大需求矩阵可用资源矩阵 问系统是否安全?若安全就给出所有的安全序列。若进程请求(),可否立即分配? 三、设计分析 一.关于操作系统的死锁 .死锁的产生 计算机系统中有许多独占资源,他们在任一时刻只能被一个进程使用,如磁带机,绘图仪等独占型外围设备,或进程表,临界区等软件资源。两个进程同时向一台打印机输出将导致一片混乱,两个进程同时进入临界区将导致数据库错误乃至程序崩溃。正因为这些原因,所有操作系统都具有授权一个进程独立访问某一辞源的能力。一个进程需要使用独占型资源必须通过以下的次序: ●申请资源 ●使用资源 ●归还资源 若申请施资源不可用,则申请进程进入等待状态。对于不同的独占资源,进程等待的方式是有差别的,如申请打印机资源、临界区资源时,申请失败将一位这阻塞申请进程;而申请打开文件文件资源时,申请失败将返回一个错误码,由申请进程等待一段时间之后重试。只得指出的是,不同的操作系统对于同一种资源采取的等待方式也是有差异的。 在许多应用中,一个进程需要独占访问多个资源,而操作系统允许多个进程并发执行共享系统资源时,此时可能会出现进程永远被阻塞的现象。这种现象称为“死锁”。 2.死锁的定义 一组进程处于死锁状态是指:如果在一个进程集合中的每个进程都在等待只能由该集合中的其他一个进程才能引发的时间,则称一组进程或系统此时发生了死锁。 .死锁的防止 .死锁产生的条件: ●互斥条件

JAVAEE课程设计 之实验室设备管理系统

软件学院 课程设计报告书 课程名称 Java高级框架应用开发 设计题目实验室设备管理系统 专业班级软件工程10-6班 学号1020010627 姓名萧翎 指导教师郭鹏飞 2013 年 1 月

目录 1 设计时间.............................................................. 错误!未定义书签。 2 设计目的.............................................................. 错误!未定义书签。3设计任务............................................................... 错误!未定义书签。 4 设计内容.............................................................. 错误!未定义书签。 4.1需求分析............................................................ 错误!未定义书签。 4.1.1总体目标 ...................................................... 错误!未定义书签。 4.1.2具体目标 ...................................................... 错误!未定义书签。 4.1.3系统数据建模 .............................................. 错误!未定义书签。 4.1.4系统功能建模 .............................................. 错误!未定义书签。 4.1.5数据字典 ...................................................... 错误!未定义书签。 4.2总体设计............................................................ 错误!未定义书签。 4.3详细设计........................................................... 错误!未定义书签。 4.4运行与测试 ...................................................... 错误!未定义书签。 5 总结与展望.......................................................... 错误!未定义书签。附:系统程序主要代码 ......................................... 错误!未定义书签。参考文献.................................................................. 错误!未定义书签。成绩评定.................................................................. 错误!未定义书签。

计算机操作系统体系结构实验报告

操作系统实验报告 实验目的: 随着操作系统应用领域的扩大,以及操作系统硬件平台的多样化,操作系统的体系结构和开发方式都在不断更新,目前通用机上常见操作系统的体系结构有如下几种:模块组合结构、层次结构、虚拟机结构和微内核结构。为了更好的了解计算机操作系统体系结构,以及linux 的体系结构,特作此报告。 实验内容: 计算机操作系统体系结构 一、模块组合结构 操作系统刚开始发展时是以建立一个简单的小系统为目标来实现的,但是为了满足其他需求又陆续加入一些新的功能,其结构渐渐变得复杂而无法掌握。以前我们使用的MS-DOS 就是这种结构最典型的例子。这种操作系统是一个有多种功能的系统程序,也可以看成是一个大的可执行体,即整个操作系统是一些过程的集合。系统中的每一个过程模块根据它们要完成的功能进行划分,然后按照一定的结构方式组合起来,协同完成整个系统的功能。如图1所示: 在模块组合结构中,没有一致的系统调用界面,模块之间通过对外提供的接口传递信息,模块内部实现隐藏的程序单元,使其对其它过程模块来说是透明的。但是,随着功能的增加,模块组合结构变得越来越复杂而难以控制,模块间不加控制地相互调用和转移,以及信息传递方式的随意性,使系统存在一定隐患。 二、层次结构 为了弥补模块组合结构中模块间调用存在的固有不足之处,就必须减少模块间毫无规则的相互调用、相互依赖的关系,尤其要清除模块间的循环调用。从这一点出发,层次结构的设计采用了高层建筑结构的理念,将操作系统或软件系统中的全部构成模块进行分类:将基础的模块放在基层(或称底层、一层),在此基础上,再将某些模块放在二层,二层的模块在基础模块提供的环境中工作;它只能调用基层的模块为其工作,反之不行。严格的层次结构,第N+l层只能在N层模块提供的基础上建立,只能在N层提供的环境中工作,也只能向N 层的模块发调用请求。 在采用层次结构的操作系统中,各个模块都有相对固定的位置、相对固定的层次。处在同一层次的各模块,其相对位置的概念可以不非常明确。处于不同层次的各模块,一般而言,不可以互相交换位置,只存在单向调用和单向依赖。Unix/Linux系统采用的就是这种体系结构。 在层次结构中,强调的是系统中各组成部分所处的位置,但是想要让系统正常运作,不得不协调两种关系,即依赖关系和调用关系。 依赖关系是指处于上层(或外层)的软件成分依赖下层软件的存在、依赖下层软件的运行而运行。例如,浏览器这部分软件就依赖GUI的存在和运行,GUI又依赖操作系统的存在和运行。在操作系统内部,外围部分依赖内核的存在而存在,依赖内核的运行而运行,内核又依赖HAL而运行。处在同层之内的软件成分可以是相对独立的,相互之间一般不存在相互依赖关系。 三、虚拟机结构 虚拟机的基本思想是系统能提供两个功能:①多道程序处理能力;②提供一个比裸机有更方便扩展界面的计算机。操作系统是覆盖在硬件裸机上的一层软件,它通过系统调用向位于

操作系统实验报告1

操作系统 实验报告 班号:1303107 学号:1130310726 姓名:蔡鹏

1.请简述head.s 的工作原理。 head.s实在32位保护模式下运行的。我认为这段程序主要包括两个部分:1.初始化设置。2.任务执行与切换。 初始设置主要包括了:1.设置GDT表2.设置系统定时芯片3. 设置IDT表(0x08时钟中断和0x80系统调用中断)4.切换到任务0执行 任务切换和执行包括了:1.任务0和任务1 , 2.时钟中断, 3.系统中断 两个任务的在LDT中代码段和数据段描述符的内容都设置为:基地址0x0000;段限长值为0x03ff,实际段长度为4MB。因此在线性地址空间中这个?内核?的代码和数据段与任务的代码和数据段都从线性地址0开始并且由于没有采用分页机制,所以他们都直接对应物理地址0开始处。 为了每隔10毫秒切换运行的任务,head.s程序中把定时器芯片8253的通道0设置成每隔10毫秒就向中断控制芯片8259A发送一个时钟中断请求信号。PC机的ROM BIOS开机时已经在8259A中把时钟中断请求信号设置成中断向量8,因此我们需要在中断8的处理过程中执行任务切换操作。任务切换的实现是查看current变量中的当前运行的任务号,如果为0,就利用任务1的TSS选择符作为操作数执行远跳转指令,从而切换到任务1中,否则反之。

每个任务在执行时,会首先把一个字符的ASCII码放入寄存器AL中,然后调用系统中断调用int 0x80,而该系统调用处理过程则会调用一个简单的字符写屏子程序,把寄存器AL中的字符显示在屏幕上,同时把字符显示的屏幕的下一个位置记录下来,作为下一次显示字符用。在显示过一个字符后,任务代码会使用循环语句延迟一段时间,然后又跳转到任务代码开始处继续循环执行,直到运行了10毫秒而发生了定时中断,从而代码会切换到另一个任务执行。对于任务A,寄存器AL中始终存放字符‘A’,而任务B运行时AL中始终存放字符‘B’。因此程序运行时我们将看到一连串的‘A’和一连串的‘B’间隔的连续不断的显示在屏幕上。若出现了一个‘C’,是由于PC机偶然产生了一个不是时钟中断和系统调用中断的其他中断。因为我们已经在程序中给所有其他中断安装了一个默认中断处理程序。当出现一个其他中断时,系统就会运行这个中断处理程序,于是就会在屏幕上显示一个‘C’,然后退出中断。 4.请记录head.s 的内存分布状况,写明每个数据段,代码段,栈段 的起始与终止的内存地址。

相关文档
相关文档 最新文档