《计算机操作系统》实验指导书-2015

合集下载

实验指导(2015完全版)

实验指导(2015完全版)

操作系统上机实验指导书(第一版)闫大顺李晟编著吴家培主审计算机科学与工程学院2014.8操作系统实验指导本课程是为《计算机操作系统》课所开的实验。

计算机操作系统课程是一门实践性很强的技术课程,本课程实验的目的在于培养学生的实践能力,促进理论与实践的结合。

要求学生通过上机编程,熟悉对操作系统原理,并熟练使用程序接口,并了解如何模拟操作系统原理的实现,从而加深对操作系统原理的领会,加深对操作系统实现方法的理解,与此同时使学生在程序设计方面也能够得到很大程度的提高。

实验的目的是使学生理论联系实际,提高学生系统理解与开发能力。

这里所列的实验分为必做和选做。

具体实验题的选择,不仅要考虑课程内容,而且要考虑学生目前的编程能力,要由浅入深。

教师可通过运行示例或动画,帮助学生理解实验要求。

学生应选择自己熟悉的语言与开发环境去完成实验。

根据以往的教学经验,Delphi、C++ Builder,JBuilder由于提供了许多可重用的构件,易于学习、使用,VC++学习、使用困难较多。

实验要求尽量在windows操作系统下,也可以在Linux下完成,由于多数没有专门学习Linux,在其平台下做试验比较困难。

实验的硬件要求是能够支持VC++、Delphi、C++ Builder,JBuilder的微机即可。

每个学生都独立在一台计算机上完成自己的实验内容,杜绝学生的抄袭。

实验报告的要求1. 每位同学准备实验报告本,上机前作好充分的准备工作,预习本次实验的内容,事先熟悉与实验有关的软硬件环境。

2. 实验时遵守实验室的规章制度,爱护实验设备,对于实验设备出现的问题,要及时向指导老师汇报。

3. 提交实验文件格式:[班级][学号]_[实验题号].[扩展名]例:计051班学号为03的学生第四个实验的文件名为:j05103_4.c4. 最终的实验报告按照实验名称、实验目的、实验内容,实验过程(程序设计、实现与调试)、实验总结五部分书写,按时上交。

计算机操作系统 实验指导书

计算机操作系统 实验指导书

Linux 实验指导书Linux操作系统是一个向用户开放源码的免费的类UNIX操作系统。

它为在校学生学习操作系统课程提供了一个看得见摸得着的范例。

对于学生正确理解,掌握操作系统的基本知识具有重要意义。

鉴于此,本操作系统课程涉及的实验均在linux环境下进行。

安装linux系统的免费网址:ftp://ftp://ftp://要求:熟悉Linux的操作和开发环境首先介绍几个关于Linux系统的系统调用函数说明、参考值及定义1、fork()创建一个新进程。

int fork()其中返回值int联值意义如下:0:创建子进程,从子进程返回的id值大于0:从父进程返回的子进程id值-1:创建失败其源代码:#include <sys/types.h>#include <unistd.h>#include <stdio.h>#include <stdlib.h>#include <sys/stat.h>#include <fcntl.h>#include <errno.h>#include <string.h>extern int errno;int main(){char buf[100];pid_t cld_pid;int fd;int status;if ((fd=open("temp",O_CREA T|O_TRUNC | O_RDWR,S_IRWXU)) == -1){printf("open error %d",errno);exit(1);}strcpy(buf,"This is parent process write\n");if ((cld_pid=fork()) == 0){ /* 这里是子进程执行的代码*/strcpy(buf,"This is child process write\n");printf("This is child process\n");printf("My PID(child) is %d\n",getpid()); /*打印出本进程的ID*/printf("My parent PID is %d\n",getppid()); /*打印出父进程的ID*/write(fd,buf,strlen(buf));close(fd);exit(0);}else{ /* 这里是父进程执行的代码*/printf("This is parent process\n");printf("My PID(parent) is %d\n",getpid()); /*打印出本进程的ID */printf("My child PID is %d\n",cld_pid); /*打印出子进程的ID*/write(fd,buf,strlen(buf));close(fd);}wait(&status);}2、lockf(files,function,size)用作锁定文件的某些段或者整个文件,本函数适用的头文件为#include <unistd.h>参数定义:int lockf(files,function,size)int files,function;long size;其中:files是文件描述符:function是锁定和解锁;1表示锁定,0表示解锁。

操作系统实验指导书

操作系统实验指导书

操作系统实验指导书实验概述本次操作系统实验是为了让学生通过实践了解操作系统的基本概念,原理和使用。

通过完成实验,学生将了解操作系统内核,进程调度,文件系统和输入输出等关键组成部分。

实验环境实验要求使用 Linux 操作系统,可以选择任意一种 Linux 发行版。

可以在物理机上安装 Linux,也可以使用虚拟机软件(如 VirtualBox)来运行 Linux 虚拟机。

实验准备在进行实验之前,需要完成以下准备工作:1.安装 Linux 操作系统(如 Ubuntu、Fedora 等)或虚拟机软件(如VirtualBox)。

2.熟悉 Linux 基本命令和操作,包括文件操作、进程管理等。

实验内容本次操作系统实验分为以下几个部分:1. 实验一:进程管理本部分实验要求学生了解进程管理的基本概念和原理,掌握进程创建、终止和状态转换等操作。

学生需要完成以下任务:•编写一个简单的 C 程序,实现进程的创建、终止和状态转换功能。

•使用 Linux 命令行工具编译、运行和调试 C 程序。

•观察和分析进程的状态转换过程。

2. 实验二:进程调度本部分实验要求学生了解进程调度算法的原理和实现方法,掌握优先级调度、轮转调度和最短作业优先调度等算法。

学生需要完成以下任务:•编写一个简单的 C 程序,模拟进程调度算法的执行过程。

•使用 Linux 命令行工具编译、运行和调试 C 程序。

•观察和分析不同调度算法对进程执行顺序的影响。

3. 实验三:文件系统本部分实验要求学生了解文件系统的基本概念和实现原理,掌握文件的创建、读写和删除等操作。

学生需要完成以下任务:•编写一个简单的 C 程序,实现文件的创建、读写和删除功能。

•使用 Linux 命令行工具编译、运行和调试 C 程序。

•观察和分析文件系统的存储结构和操作过程。

4. 实验四:输入输出本部分实验要求学生了解操作系统的输入输出机制和设备驱动程序的原理和实现方法,掌握文件读写、设备驱动和错误处理等操作。

各种笔记-计算机操作系统实验指导书20151130

各种笔记-计算机操作系统实验指导书20151130

实验一进程控制描述与控制[1] Windows“任务管理器”的进程管理背景知识Windows 2000的任务管理器提供了用户计算机上正在运行的程序和进程的相关信息,也显示了最常用的度量进程性能的单位。

使用任务管理器,可以打开监视计算机性能的关键指示器,快速查看正在运行的程序的状态,或者终止已停止响应的程序。

也可以使用多个参数评估正在运行的进程的活动,以及查看CPU 和内存使用情况的图形和数据。

其中:1) “应用程序”选项卡显示正在运行程序的状态,用户能够结束、切换或者启动程序。

2) “进程”选项卡显示正在运行的进程信息。

例如,可以显示关于CPU 和内存使用情况、页面错误、句柄计数以及许多其他参数的信息。

3) “性能”选项卡显示计算机动态性能,包括CPU 和内存使用情况的图表,正在运行的句柄、线程和进程的总数,物理、核心和认可的内存总数(KB) 等。

实验目的通过在Windows 任务管理器中对程序进程进行响应的管理操作,熟悉操作系统进程管理的概念,学习观察操作系统运行的动态性能。

工具/准备工作在开始本实验之前,请回顾教科书的相关内容。

需要准备一台运行Windows 2000 Professional操作系统的计算机。

实验内容与步骤1. 使用任务管理器终止进程2. 显示其他进程计数器3. 更改正在运行的程序的优先级启动并进入Windows环境,单击Ctrl + Alt + Del键,或者右键单击任务栏,在快捷菜单中单击“任务管理器”命令,打开“任务管理器”窗口。

在本次实验中,你使用的操作系统版本是:____________________________________________________________________当前机器中由你打开,正在运行的应用程序有:1) __________________________________________________________________2) __________________________________________________________________3) __________________________________________________________________4) __________________________________________________________________5) __________________________________________________________________Windows“任务管理器”的窗口由______个选项卡组成,分别是:1) __________________________________________________________________2) __________________________________________________________________3) __________________________________________________________________当前“进程”选项卡显示的栏目分别是(可移动窗口下方的游标/箭头,或使窗口最大化进行观察) :1) __________________________________________________________________2) __________________________________________________________________3) __________________________________________________________________4) __________________________________________________________________5) __________________________________________________________________6) __________________________________________________________________7) __________________________________________________________________8) __________________________________________________________________1. 使用任务管理器终止进程步骤1:单击“进程”选项卡,一共显示了______个进程。

计算机操作系统实验指导书

计算机操作系统实验指导书

实验一UNIX/LINUX入门实验目的1、了解UNIX的命令及使用格式。

2、熟悉UNIX/LINUX的常用基本命令。

实验内容1、通过WINDOWS操作系统中的远程登录程序telnet.exe 登录UNIX。

2、熟悉UNIX/LINUX的常用基本命令如ls、who、w、pwd、ps、pstree、top等。

实验指导一、UNIX的登录与退出1、登录在DOS环境下用MS提供的telnet程序(也可使用WINDOWS 自带的telnet图形界面程序或多功能的S-Term终端程序),可使PC作为终端(terminal)登录(login)UNIX服务器(UNIX Server)。

(1)执行格式:telnet hostname(主机名)或telnet 主机的IP地址例:telnet telnet 140.122.77.120(2)步骤login:(输入username)password:(输入密码)2、退出在UNIX系统提示符$下,输入logout、exit或shutdown 。

例:$ logout二、UNIX命令格式命令[选项] [处理对象]例:ls -la mydir注意:(1)命令一般是小写字串。

注意大小写有别(2)选项通常以减号(-)再加上一个或数个字符表示,用来选择一个命令的不同操作(3)同一行可有数个命令,命令间应以分号隔开(4)命令后加上&可使该命令后台(background)执行三、常用命令1、目录操作和DOS相似,UNIX采用树型目录管理结构,由根目录(/)开始一层层将子目录建下去,各子目录以/ 隔开。

用户login后,工作目录的位置称为home directory,由系统管理员设定。

‗~‘符号代表自己的home directory,例如~/myfile 是指自己home目录下myfile这个文件。

UNIX的通配符有三种:‘*‘ 和‘?‘ 用法与DOS相同,‗-‗代表区间内的任一字符,如test[0-5]即代表test0,test1,……,test5的集合。

操作系统实验指导书[2015春季学期]

操作系统实验指导书[2015春季学期]

操作系统实验指导书计算机科学与软件学院2015年实验一进程控制与描述一、实验目的通过对Windows XP编程,进一步熟悉操作系统的基本概念,较好地理解Windows XP的结构。

通过创建进程、观察正在运行的进程和终止进程的程序设计和调试操作,进一步熟悉操作系统的进程概念,理解Windows XP进程的“一生”。

二、实验环境硬件环境:计算机一台,局域网环境;软件环境:Windows XP,Visual C++ 6.0专业版或企业版。

三、实验内容和步骤第一部分Windows 编程Windows XP可以识别的程序包括控制台应用程序、GUI应用程序和服务应用程序。

本实验中主要用到的是控制台应用程序和GUI应用程序。

1、简单的控制台应用程序创建一个名为“Hello”的应用程序, 在“开始”菜单中单击“程序”-“附件”-“记事本”命令,将程序键入记事本中,并把代码保存为1-1.cpp。

程序1-1 Windows XP的GUI应用程序#include <iostream>void main(){Std::cout<<”Hello, Windows XP”<<std::endl;}在“命令提示符”窗口运行CL.EXE,产生1-1.EXE文件:C:\> CL 1-1.cpp运行1-1.EXE程序,运行结果是:(如果运行不成功,则可能的原因是什么?)________________________________________________________________________________________________________________________________________2、GUI应用程序Windows XP Professional下的GUI应用程序,使用Visual C++编译器创建一个GUI应用程序,代码中包括了WinMain()方法,该方法GUI类型的应用程序的标准入口点。

计算机操作系统实验指导书

计算机操作系统实验指导书

操书作系统实验指导实验目录实验一动态优先权进程调度 (3)实验二作业调度 (9)实验三动态分区首次适应分配算法模拟 (18)实验四请求分页存储管理页面淘汰模拟 (24)实验五磁盘调度算法模拟 (31)实验一动态优先权进程调度一、实验目的与要求:1.掌握进程调度中的优先权调度算法过程;2.掌握进程调度中时间片轮转调度算法的过程;3.加深掌握程序在Visual C++6.0环境下的编译、调试和运行。

二、实验内容:编写程序,用C语言来实现对N个进程采用动态优先权算法的进程调度。

每个进程使用进程pcb结构来描述。

优先数改变原则:进程在就绪队列中多呆一个时间片,优先数增加1;进程每运行一个时间片,优先数减3。

三、实验器材:微机+windows操作系统+VC++6.0四、实验步骤:#include <iostream>#include <iomanip>#include <algorithm>#include "define.h"using namespace std;PCB READY_QUEUE; // 就绪队列PCB BLOCK_QUEUE; // 阻塞队列bool compare_priority(const PCB& p1, const PCB& p2){return p1.PRIORITY > p2.PRIORITY;}bool compare_id(const PCB& p1, const PCB& p2){return p1.ID < p2.ID;}// inital PCB dataPCB produces[5]={{0,9,0,3,2,3,READY,NULL},{1,38,0,3,-1,0,READY,NULL},{2,30,0,6,-1,0,READY,NULL},{3,29,0,3,-1,0,READY,NULL},{4,0,0,4,-1,0,READY,NULL}};// inital queue( ready queue , block queue );void inital_queue(){READY_QUEUE.NEXT = NULL;BLOCK_QUEUE.NEXT = NULL;PCB * r = &READY_QUEUE;PCB * b = &BLOCK_QUEUE;// sort order by PRIORITY (DEC)sort(produces, &produces[4], compare_priority);for(int i=0; i<5; i++){if(produces[i].ALLTIME == 0){produces[i].STATE = FINISH;continue;}if(produces[i].STATE == BLOCK && produces[i].BLOCKTIME == 0){// block -> readyr->NEXT = &produces[i];produces[i].STATE = READY;r = r->NEXT;}else if(produces[i].STATE == BLOCK && produces[i].BLOCKTIME != 0) {// block -> blcokb->NEXT = &produces[i];produces[i].STATE = BLOCK;b = b->NEXT;}else if(produces[i].STATE == READY && produces[i].STARTBLOCK == 0) {// ready -> blockb->NEXT = &produces[i];produces[i].STATE = BLOCK;b = b->NEXT;}else if(produces[i].STATE == READY && produces[i].STARTBLOCK != 0) {// ready -> readyr->NEXT = &produces[i];produces[i].STATE = READY;r = r->NEXT;}}}void run(){PCB * r = READY_QUEUE.NEXT; // r point to the ready queue first pcb PCB * b = BLOCK_QUEUE.NEXT; // b point to the block queue first pcb PCB * running_pcb = r;r = r->NEXT;cout<<"--------------正在执行的进程--------------" << endl;cout << "running produce's ID = " << running_pcb->ID << endl;// update datarunning_pcb->ALLTIME--;running_pcb->CPUTIME++;running_pcb->PRIORITY -= 3;running_pcb->STARTBLOCK--;while(r){r->PRIORITY++;r = r->NEXT;}while(b){b->BLOCKTIME--;b = b->NEXT;}}void print_pcb(){cout<<"---------------就绪,阻塞队列-------------" << endl;PCB * r = READY_QUEUE.NEXT;cout << "READY_QUEUE -> ";while(r!=NULL){cout << "ID" << r->ID << " -> ";r = r->NEXT;}cout << " NULL " << endl;PCB * b = BLOCK_QUEUE.NEXT;cout << "BLOCK_QUEUE -> ";while(b!=NULL){cout << "ID" << b->ID << " -> ";b = b->NEXT;}cout << " NULL " << endl;PCB temp[5];memcpy(temp, produces, 5*sizeof(PCB));ort(temp, &temp[4], compare_id);cout <<"----------------所有进程信息--------------" << endl;cout << setw(11) << "ID"<< setw(11) << "PRIORITY"<< setw(11) << "CPUTIME"<< setw(11) << "ALLTIME"<< setw(11) << "STARTBLOCK"<< setw(11) << "BLOCKTIME"<< setw(11) << "STATE" << endl;for(int i=0; i<5; i++){cout << setw(11) << temp[i].ID ;cout << setw(11) << temp[i].PRIORITY ; cout << setw(11) << temp[i].CPUTIME ; cout << setw(11) << temp[i].ALLTIME ; cout << setw(11) << temp[i].STARTBLOCK ; cout << setw(11) << temp[i].BLOCKTIME ; if(temp[i].STATE==READY)cout << setw(11) << "READY" ;else if(temp[i].STATE==BLOCK)cout << setw(11) << "BLOCK" ;else if(temp[i].STATE==FINISH)cout << setw(11) << "FINISH" ;cout << endl;}}int main(){inital_queue();while(READY_QUEUE.NEXT!=NULL){run();inital_queue();print_pcb();system("pause");}cout << "finish all produces" << endl; return 0;}//头文件#ifndef DEFINE_H#define DEFINE_H// STATE#define READY 1#define BLOCK 2#define RUN 3#define FINISH 4// struct declarationstruct PCB{int ID;int PRIORITY;int CPUTIME;int ALLTIME;int STARTBLOCK;int BLOCKTIME;int STATE;PCB * NEXT;};void print_pcb();void inital_queue();void run();#endif五、实验结果:本次实验输入了5个进程,到达时间均为0。

操作系统课程设计指导书2015

操作系统课程设计指导书2015

操作系统课程设计指导书赵伟华梁红兵刘真2013年2月计算机学院目录第一章操作系统课程设计的内容与实施方法.............................................................. - 3 -1.1 操作系统课程设计总体要求............................................................................. - 3 -1.2 操作系统课程设计的内容................................................................................. - 3 -1.3 操作系统课程设计实施方案............................................................................. - 3 - 第二章基于DOS的多任务系统的实现........................................................................ - 5 -2.1 设计目的和内容要求......................................................................................... - 5 -2.2 线程描述.......................................................................................................... - 6 -2.3 线程的创建和撤消.......................................................................................... - 8 -2.4 线程调度设计................................................................................................ - 10 -2.5 基本实例程序的实现.................................................................................... - 23 -2.6 线程的阻塞和唤醒........................................................................................ - 26 -2.7 线程的同步与互斥........................................................................................... - 26 -2.8 利用消息缓冲队列通信机制实现线程间通信............................................... - 27 - 第三章简单文件系统的实现.................................................................................... - 32 -3.1 设计目的和内容要求......................................................................................... - 32 -3.2 预备知识............................................................................................................. - 33 -3.3实例系统的设计与实现...................................................................................... - 36 -操作系统课程设计第一章操作系统课程设计的内容与实施方法1.1 操作系统课程设计总体要求1.遵守机房纪律,服从机房调度。

14-15(2)实验指导书

14-15(2)实验指导书

《操作系统》实验讲义计算机科学与工程学院2015年3月实验一Linux初步实验预备知识一、创建实验平台如果实验室里的计算机安装了Windows操作系统,则可以先安装VMWare软件(一般使用工作站版本)并启动它,来创建一个虚拟机,然后在其中安装Linux操作系统。

这样就可以从虚拟机中启动Linux系统,并完成相应的实验。

VMWare软件和Linux操作系统的安装十分简单,这里就不做介绍。

二、Linux下的proc文件系统在Linux操作系统中,提供了一套非常有用的在用户态检查内核状态和系统特征的机制,这就是proc文件系统。

该文件系统安装在/proc 目录中。

比起Windows的任务管理器来,proc文件系统的功能更强大:它能提供更多的系统信息,能修改部分系统信息,还能通过编程来扩充其中的内容。

该文件系统将进程的地址空间、系统的硬件信息(包括CPU、内存状态以及网卡等各种硬件设备)、系统相关机制(中断、I/O)等内容全部设置成虚拟的Linux文件。

它以一种特殊的文件系统的方式,为访问系统内核数据的操作提供接口。

也就是说,这个文件系统中所有的文件都是特殊文件,这些特殊文件一般与外部设备无关,所涉及到的介质通常室内存和CPU。

当从一个特殊文件“读”出时,所读出的数据都是由系统内部按一定的规则临时生成的,或从内存中收集、加工出来的,反之亦然。

换言之,这些文件的内容都不存在任何存储设备上,而是在读/写的时候才根据系统中的有关信息生成出来,或映射到系统中的有关变量或数据结构中。

/proc 目录中的每个文件都有一组分配给它的非常特殊的文件许可权,并且每个文件属于特定的用户标识,这里面的文件仅仅包含以下几种权限(除非root用户特别授权):●只读任何用户都不能更改该文件,它用于表示系统信息。

●root写/proc 目录中的一些文件是可写的,但通常只能由root用户来写。

●root读有些文件对一般系统用户是不可见的,而对root用户是可见的。

《计算机操作系统》实验指导书

《计算机操作系统》实验指导书

宁夏师范学院——数学与计算机科学学院《操作系统》实验指导《OPERATING SYSTEM》2013.08前言计算机操作系统是计算机科学与技术专业的主要专业基础课程,其实践性、应用性很强。

实践教学环节是必不可少的一个重要环节。

计算机操作系统的实验目的是加深对理论教学内容的理解和掌握,使学生较系统地掌握操作系统的基本原理,加深对操作系统基本方法的理解,加深对课堂知识的理解,为学生综合运用所学知识,在Linux环境下调用一些常用的函数编写功能较简单的程序来实现操作系统的基本方法、并在实践应用方面打下一定基础。

要求学生在实验指导教师的帮助下自行完成各个操作环节,并能实现且达到举一反三的目的,完成一个实验解决一类问题。

要求学生能够全面、深入理解和熟练掌握所学内容,并能够用其分析、设计和解答类似问题;对此能够较好地理解和掌握,并且能够进行简单分析和判断;能够熟练使用Linux用户界面;掌握操作系统中进程的概念和控制方法;了解进程的并发,进程之间的通信方式,了解虚拟存储管理的基本思想。

同时培养学生进行分析问题、解决问题的能力;培养学生完成实验分析、实验方法、实验操作与测试、实验过程的观察、理解和归纳能力。

为了收到良好的实验效果,编写了这本实验指导书。

在指导书中,每一个实验均按照该课程实验大纲的要求编写,力求紧扣理论知识点、突出设计方法、明确设计思路,通过多种形式完成实验任务,最终引导学生有目的、有方向地完成实验任务,得出实验结果。

任课教师在实验前对实验任务进行一定的分析和讲解,要求学生按照每一个实验的具体要求提前完成准备工作,如:查找资料、设计程序、完成程序、写出预习报告等,做到有准备地上机。

进行实验时,指导教师应检查学生的预习情况,并对调试过程给予积极指导。

实验完毕后,学生应根据实验数据及结果,完成实验报告,由学习委员统一收齐后交指导教师审阅评定。

目录操作系统实验大纲 (1)第一部分实验环境及所用系统函数介绍 (4)1.1 Linux操作系统简介 (4)1.2 Linux的使用 (4)第二部分实验内容 (8)实验一熟悉LINUX基本命令及编程环境 (8)实验二进程管理 (11)实验三进程调度 (15)实验四进程间通信 (20)实验五存储管理实验 (23)操作系统实验大纲一、教学目的和要求操作系统课程是一门理论性很强的专业课,操作系统实验是该课程的辅助课程。

实验指导书-2015

实验指导书-2015

文件操作: cat 显示文件内容和合并多个文件 clear 清屏 chattr 改变文件属性 chgrp 改变文件组权
chmod 改变文件或目录的权限 chown 改变文件的属权 comm 比较两个已排过序的文件 cp dd df diff du file 将文件拷贝至另一文件 从指定文件读取数据写到指定文件 报告磁盘空间使用情况 比较两个文本文件,列出行不同之处 统计目录/文件所占磁盘空间的大小 辨识文件类型 功能强大的编辑环境
export
finger 查找并显示用户信息 free 显示内存状态
hostid 显示主机标识 hostname id kill last 显示主机名
显示用户标识 删除执行中的程序或工作 列出目前与过去登入系统的用户相关信息 退出系统 显示已载入系统的模块 自动处理可载入模块
logout lsmod
实验三 线程的管理
实验学时:2 学时 实验类型:设计 一、实验目的 编写 Linux 环境下的多线程程序,了解多线程的程序设计方法,掌握最常用的三个函 数 pthread_create,pthread_join 和 pthread_exit 的用法 二、实验内容 1、 主 程 序 创 建 两 个 线 程 myThread1 和 myThread2 , 每 个 线 程 打 印 一 句 话 。 使 用 pthread_create(&id,NULL,(void *) thread,NULL)完成。 提示: 先定义每个线程的执行体,然后在 main 中()创建几个线程,最后主线程等待子线程结 束后再退出。 2、创建两个线程,分别向线程传递如下两种类型的参数 传递整型值 传递字符 三、实验要求 按照要求编写程序,放在相应的目录中,编译成功后执行,并按照要求分析执行结果, 并写出实验报告。 四、补充材料:Linux 下的多线程编程简介 (1)pthread 库 Linux 下的多线程遵循 POSIX 线程接口,称为 pthread。编写 Linux 下的多线程程序, 需要使用头文件 pthread.h,连接时需要使用库 pthread。 注意: 编译时要使用如下命令 (设 example.c 是源程序名字) 。 因为 pthread 的库不是 linux 系统的库,所以在进行编译的时候要加上-lpthread,否则编译不过。具体命令如下: gcc example.c -lpthread -o example (2)函数 pthread_create()的用法 函数 pthread_create()用来创建一个线程,它的原型为: extern int pthread_create __P ((pthread_t *__thread, __const pthread_attr_t *__attr,void *(*__start_routine) (void *), void *__arg)); 第一个参数为指向线程标识符的指针,第二个参数用来设置线程属性,第三个参数是 线程运行函数的起始地址, 最后一个参数是运行函数的参数。 这里, 如果所创建的函数 thread 不需要参数,则最后一个参数设为空指针。第二个参数一般也设为空指针,这样将生成默认

《计算机操作系统》实验指导书

《计算机操作系统》实验指导书
1.2Linux的使用
1.2.1 vi的使用
1) vi的简单应用
vi是linux环境下赫赫有名的文本编辑工具之一。
进入vi编辑器的方法:vi注:文件名必须带有扩展名.c,如否则无法通过编译;
进入vi后要按:按“i”键从命令方式切换到输入方式;
从输入方式切换到命令方式的方法:按“Esc”键
保存文件:w
3
进程调度
4
必修
操作
验证
通过编程熟悉进程控制块和进程组织方式;熟悉进程调度的概念和时间片轮转调度算法。
4
进程间通信

必修
操作
验证
验证Linux系统的进程通信机构(IPC)允许在任意进程间大批计算机量地交换数据。实验的目的是了解和熟悉Linux支持的消息通信机制、共享存储区机制及信息量机制。
5
存储管理实验
保存文件并退出:wq
不保存文件退出:q!
注:以上操作必须在命令方式下进行。
2)其他常用vi操作命令
j,k,h,l:上下左右
0:行首
$:行尾
ctrl+f:后翻页
ctrl+b:前翻页
G:文件尾
1.1Linux操作系统简介
Linux是一个多用户操作系统,是UNIX的一个克隆版本(界面相同但内部实现不同),同时它是一个自由软件,是免费的、源代码开放的,这是它与UNIX的不同之处。现在,Linux凭借优秀的设计,不凡的性能,加上IBM、Intel、CA、CORE、Oracle等国际知名企业的大力支持,市场份额逐步扩大,已成为与Windows和UNIX并存的三大主流操作系统之一。
《计算机操作系统》实验指导书
———————————————————————————————— 作者:

操作系统实验指导书(完整版)

操作系统实验指导书(完整版)

《计算机操作系统实验》指导书(第二版)实验一LINUX的安装与使用 (2)实验二进程管理与通信 (27)实验三存储管理——页面置换算法模拟 (51)实验四文件管理 (56)实验五LINUX服务器配置(选做) (62)实验报告撰写指导 (72)韶关学院信息工程学院计算机系教师:陈正铭2007-9-10实验一LINUX的安装与使用【实验目的】1、了解与掌握RED HAT LINUX 9.0的安装过程。

2、熟悉LINUX的命令及使用格式与常用基本命令。

【实验内容】1、使用图形化安装模式安装RED HAT LINUX 9.0。

2、使用WINDOWS操作系统中的远程登录程序telnet.exe 登录LINUX。

3、练习使用LINUX的常用基本命令如ls、cd、who、pwd、ps、pstree、top等。

4、掌握WINDOWS和LINUX之间的文件共享方法。

【实验指导】一、Red Hat Linux 9光盘启动安装过程1、准备工作(1)购买或下载Redhat9的安装光盘(3张盘)或镜像文件,下载地址:校园网FTP站点。

或从红帽子主站下载∶/(2)在硬盘中至少留2个分区给安装系统用,挂载点所用分区推荐4G以上,交换分区在256M 左右比较适合,文件系统格式不论,反正安装过程会重新格式化。

(假如使用虚拟机vm安装建议最少留6G存储空间)(3)记录下你电脑中下列设备型号∶鼠标、键盘、显卡、网卡、显示器。

及网络设置用到的IP地址、子网掩码、默认网关和DNS名称服务器地址等信息。

2、安装红帽子Red Hat Linux 9将光驱设为第一启动盘,放入第一张安装光盘后重新启动电脑,如果你的光驱支持自启动, 如无意外将出现如下图:直接按回车键后将出现如下图1 ,如果你不处理30秒后也会自动进入。

在图1中提示:是否测试安装CD的内容的完整性,选―OK‖开始测试安装CD;选―Skip‖不测试安装CD开始安装出现图6所示,如果是第一次安装当然要测试安装CD,选―OK‖后回车,出现如下图2选―Test‖测试安装光盘的文件,选―Eject CD‖测试光盘以外的安装文件,这里我选择―Test‖后回车,出现如下图3正在测试第一张安装CD,测试完后显示如下图4所示看到上图最后一行英文―It is OK to install from this med ia‖说明这张安装CD是OK的,按―Enter‖键回车后,显示如下图5所示选择―Continue‖并回车开始安装。

操作系统实验指导书

操作系统实验指导书

操作系统实验指导书前言操作系统是计算机系统的核心,《操作系统》课程是计算机科学与技术专业的重要必修课。

本课程的目的是使学生掌握现代计算机操作系统的基本原理、基本设计方法及实现技术,具有分析现行操作系统和设计、开发实际操作系统的基本能力。

操作系统实验是操作系统课程的重要组成部分,属于学科基础实验范畴。

作为与相关教学内容配合的实践性教学环节,应在操作系统理论课教学过程中开设。

操作系统是计算机科学与技术专业必修的专业基础课程,操作系统实验的作用是:理解操作系统的设计和实现思路,掌握典型算法。

学生应具有高级语言编程能力、具有数据结构等基础知识。

实验要求为了顺利完成操作系统课程实验,学生应做到:(1)实验前,认真学习教材以及实验指导书的相关内容,提前做好实验准备。

(2)实验结束一周后提交实验报告。

实验报告内容应包括:实验目的、实验内容、设计思路和流程框图,源程序(含注释)清单、测试结果以及实验总结。

(3)遵守机房纪律,服从辅导教师指挥,爱护实验设备。

实验的验收将分为两个部分。

第一部分是上机操作,随机抽查程序运行和即时提问;第二部分是提交书面的实验报告。

此外杜绝抄袭现象,一经发现雷同,双方成绩均以0分计算。

目录第1章Windows的进程管理 (5)1.1 实验一:Windows基本进程的管理与控制 (5)1.2 实验二:线程的创建与撤销 (8)1.3 实验三:进程的同步与互斥 ........................................................ 错误!未定义书签。

1.4 实验四:进程调度 ........................................................................ 错误!未定义书签。

1.5 实验五:死锁的检测与避免 ........................................................ 错误!未定义书签。

《计算机操作系统》实验指导书共16页文档

《计算机操作系统》实验指导书共16页文档
实验二 玩转“我的电脑”
1、“我的电脑”新面孔 开始—>我的电脑 2、方便的显示设置 1)Web视图中系统任务:用鼠标点“查看系统信息” 2)在空白处单击鼠标右键—>排列图标—>按组排列 3)用鼠标点工具栏上“设置显示方式按钮” 4)变成资源管理器:用鼠标点工具栏上“文件夹”按钮 5)用鼠标点工具栏上“搜索”按钮—>改变首选项 6)单击工具—>文件夹选项—> “常规”页:使用Windows传统风格的文件夹—>应用;
3.管理我的硬件
1)键盘和鼠标 控制面板--->”打印机和其它硬件“ 单击”键盘“, 单击”鼠标“,查看各页 鼠标按键的“设置”页--->“切换主要和次要的按钮”、 “启动单击锁定”、“设置” “指针”页--->“指针”、“自定义”、“启动指针阴 影” “指针选项”页 “轮”页 2)电源选项 点“电源选项” “电源使用方案”页 “高级”页--->点小箭头
3)音频设备 控制面板--->”声音、语音和音频设备“ 鼠标点击“声音和音频设备”,查看各页 “音频”页 “音量”页 --->想控制某种声音,点“高级” 在任务栏设置音量图标--->鼠标选中“将音量图标放入任务 栏”,--->”应用“ “声音”页--->鼠标小箭头,可以任选,不满意,点“浏览” 4.语言和区域设置 1)区域设置 “日期、时间、语言和区域设置”组---> 选择“更改日期和时间”任务,可以改时间等 “时区”页--->可以改所在的时区 “internet”页--->是新增的 “更改数字、日期和时间的各式”任务--->可以选择自己目 前所在的国家和地区,不满意,点“自定义”
--->点“创建密码” --->输入密码--->单击“创建密码” 按纽

2015操作系统课程设计指导书

2015操作系统课程设计指导书

操作系统 课程设计指导书(2013级)计算机科学与工程学院内部使用湖南科技大学2015年6月一、课程设计目的通过课程设计,加深学生对教材中的重要算法的理解,同时通过用C语言编程实现这些算法,并在Linux或Windows平台上实现,让学生更好地掌握操作系统的原理及实现方法,提高学生综合运用各专业课知识的能力。

二、课程设计要求1.每位同学准备实验本,上机前作好充分的准备工作,预习本次实验的内容,事先熟悉与实验有关的软硬件环境。

2.实验时遵守实验室的规章制度,爱护实验设备,不得在实验室做与实验无关的事情,影响其他同学的上机。

对于实验设备出现的问题,要及时向指导老师汇报。

3.最终的实验报告要求格式规范,语言通顺,仔细记录实验中的数据、源程序、实验结果,对于实验过程中出现的问题或疑惑要一并书写,并作为重点加以思考。

4.课程设计程序、实验报告要求独立完成、不允许抄袭。

5.及时提交课程设计报告(主要包含课程设计目的、内容、步骤、结果及其分析,请参见最末的课程设计格式要求)和程序文件。

三、课程设计考核1. 建议实验一、二、三、四、六必做,其它实验选做。

指导老师也可以根据实际情况进行调整。

2. 课程设计成绩主要由以下几部分组成:实验期间的表现情况、程序测试情况、实验报告质量。

目 录实验一 Windows进程管理 (1)实验二 Linux进程管理 (8)实验三进程同步的经典算法 (11)实验四银行家算法的模拟与实现 (15)实验五存储管理 (16)实验六进程间通信 (26)实验七简单二级文件系统设计 (33)附录1:Linux编程基础 (40)附录2:课程设计报告参考格式 (42)实验一 Windows进程管理1、实验目的(1)学会使用VC编写基本的Win32 Consol Application(控制台应用程序)。

(2)通过创建进程、观察正在运行的进程和终止进程的程序设计和调试操作,进一步熟悉操作系统的进程概念,理解Windows进程的“一生”。

计算机操作系统原理实验指导书

计算机操作系统原理实验指导书

目录1进程创建模拟实现 (6)1.1实验类型 (6)1.2实验目的 (6)1.3实验描述 (6)1.4实验内容 (6)1.5实验要求 (6)1.6测试要求 (6)1.7相关知识 (7)1.8实验设备 (9)1.9实验指导 (9)1.10实验成绩评定 (9)1.11实验报告 (9)1.12实验思考 (9)2P、V原语的模拟实现 (10)2.1实验类型 (10)2.2实验目的 (10)2.3实验描述 (10)2.4实验内容 (10)2.5实验要求 (10)2.6测试要求 (10)2.7相关知识 (11)2.8实验设备 (11)2.9实验指导 (11)2.10实验成绩评定 (12)2.11实验报告 (12)2.12实验思考 (12)3进程撤销模拟实现 (13)3.1实验类型 (13)3.2实验目的 (13)3.3实验描述 (13)3.4实验内容 (13)3.5实验要求 (13)3.6测试要求 (14)3.7相关知识 (14)3.8实验设备 (15)3.9实验成绩评定 (15)3.10实验报告 (16)3.11实验思考 (16)4FCFS进程调度模拟实现 (17)4.2实验目的 (17)4.3实验描述 (17)4.4实验内容 (17)4.5实验要求 (17)4.6测试要求 (18)4.7相关知识 (18)4.8实验设备 (18)4.9实验成绩评定 (19)4.10实验报告 (19)4.11实验思考 (19)5银行家算法实现 (20)5.1实验类型 (20)5.2实验目的 (20)5.3实验描述 (20)5.4实验内容 (20)5.5实验要求 (20)5.6测试要求 (21)5.7相关知识 (21)5.8实验设备 (22)5.9实验成绩评定 (22)5.10实验报告 (22)5.11实验思考 (22)6改进型CLOCK页面置换算法实现 (23)6.1实验类型 (23)6.2实验目的 (23)6.3实验描述 (23)6.4实验内容 (23)6.5实验要求 (23)6.6测试要求 (24)6.7相关知识 (24)6.8实验设备 (24)6.9实验成绩评定 (25)6.10实验报告 (25)6.11实验思考 (25)7SCAN磁盘调度模拟实现 (26)7.1实验类型 (26)7.2实验目的 (26)7.3实验描述 (26)7.4实验内容 (26)7.5实验要求 (26)7.6测试要求 (27)7.8实验设备 (27)7.9实验成绩评定 (27)7.10实验报告 (27)7.11实验思考 (27)8基于时间片的高优先级调度模拟实现 (29)8.1实验类型 (29)8.2实验目的 (29)8.3实验描述 (29)8.4实验内容 (29)8.5实验要求 (29)8.6测试要求 (30)8.7相关知识 (30)8.8实验设备 (31)8.9实验成绩评定 (31)8.10实验报告 (31)8.11实验思考 (31)9连续动态内存管理模拟实现 (32)9.1实验类型 (32)9.2实验目的 (32)9.3实验描述 (32)9.4实验内容 (32)9.5实验要求 (32)9.6测试要求 (33)9.7相关知识 (33)9.8实验设备 (34)9.9实验成绩评定 (34)9.10实验报告 (34)9.11实验思考 (34)10EXE文件装载实现 (35)10.1实验类型 (35)10.2实验目的 (35)10.3实验描述 (35)10.4实验内容 (35)10.5实验要求 (35)10.6测试要求 (35)10.7相关知识 (36)10.8实验设备 (37)10.9实验成绩评定 (37)10.10实验报告 (37)10.11实验思考 (37)11附录: (38)11.2实验二代码: (43)11.3BASIC.H文件 (48)1进程创建模拟实现1.1 实验类型验证型(2学时)。

操作系统指导书

操作系统指导书

《计算机操作系统》实验指导书适用专业:计算机科学与技术信息与计算机江南大学物联网工程学院2015年4月前言计算机操作系统(Operating System简称OS)是计算机中最重要的系统软件,也是最活跃的学科之一,是计算机相关本科专业的核心课程。

通过本课程的学习使学生掌握操作系统的基本概念、技术、原理,具备一定的从不同层次分析与使用操作系统功能的能力。

了解计算机操作系统方面的新技术、新理论与新发展。

本实验指导书,是根据《操作系统》课程教学大纲的要求而编写的,目的是让学生能够进一步了解操作系统的基本概念、原理,通过综合性、验证性和设计性等实验,熟练掌握操作系统的运行机理和各种算法思想,尤其是操作系统的核心功能。

同时还希望通过实验进一步提高学生的动手能力和综合运用先修课程的能力。

由于编写仓促,难免有错误和不足之处,恳请读者不吝赐教。

目录前言 (1)实验一进程调度 (3)实验二作业调度实验 (6)实验三银行家算法 (9)实验四存储管理 (13)实验一进程调度实验学时:4学时实验类型:设计实验要求:必修一、实验目的多道程序设计中,经常是若干个进程同时处于就绪状态,必须依照某种策略来决定那个进程优先占有处理机。

因而引起进程调度。

本实验模拟在单处理机情况下的处理机调度问题,加深对进程调度的理解。

二、实验内容1.优先权法、轮转法简化假设1)进程为计算型的(无I/O)2)进程状态:ready、running、finish3)进程需要的CPU时间以时间片为单位确定2.算法描述1)优先权法——动态优先权当前运行进程用完时间片后,其优先权减去一个常数。

2)轮转法三、流程图产生n 需的时间片数,已占用CPU 的时间片数置为0按进程产生的先后次序拉成就绪队列链=0? 撤销该进程就绪队列为空吗?=轮转时间片数?NYYY 结束N开始键盘输入进程数n ,和调度方法的选择优先权法? 轮转法产生n 个进程,对每个进程产生一个PCB ,并用随机数产生进程的优先权及进程所需的CPU 时间 按优先权大小,把n 个进程拉成一个就绪队列 撤销进程就绪队列为空?结束NYY四、实验要求1.产生的各种随机数的取值范围加以限制,如所需的CPU时间限制在1~20之间。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《计算机操作系统》实验指导书实验类别:课内实验实验课程名称:计算机操作系统实验室名称:计算机科学与技术专业实验室实验课程编号: N02140113总学时:8 学分: 4.5适用专业:软件工程先修课程:计算机导论及操作、计算机硬件实验一进程同步控制1、开发语言及实现平台或实验环境C++/JA V ATurbo C / Microsoft Visual Studio 6.0 / Microsoft Visual Studio .NET 20102、实验目的(1)加强对进程概念的理解,尤其是对进程的同步与互斥机制的理解。

(2)分析进程竞争资源的现象,学习解决进程互斥与同步的方法。

3、实验要求(1)理解利用进程控制机制;(2)理解利用信号量进行进程同步控制原理;(3)使用某种编程语言进行模拟实现生产者-消费者进程。

4、实验原理(注意:这个仅是个例子,仅供参考)生产者-消费者问题描述的是:有一群生产者进程在生产产品,并将这些产品提供给消费者进程去消费。

为使生产者进程与消费者进程能够并发执行,在两者之间设置了一个具有n个缓冲区的缓冲池,生产者进程将它所生产的产品放入一个缓冲区中;消费者进程可以从一个缓冲区中取走产品去消费。

尽管所有的生产者和消费者进程都是以异步方式运行的,但它们之间必须保持同步,即不允许消费者进程到一个空缓冲区去取产品;也不允许生产者进程向一个已经装满产品的缓冲区中投放产品。

这是一个同步与互斥共存的问题。

生产者—消费者问题是一个同步问题。

即生产者和消费者之间满足如下条件:(1) 消费者想接收数据时,有界缓冲区中至少有一个单元是满的。

(2) 生产者想发送数据时,有界缓冲区中至少有一个单元是空的。

故设置两个信号量:(1) empty:说明空缓冲区的数目,初值为有界缓冲区的大小N。

(2) full:说明已用缓冲区的数目,初值为0。

由于有界缓冲区是临界资源,因此,各生产者进程和各消费者进程之间必须互斥执行。

故设置一个互斥信号量mutex,其初值为1。

5、实验步骤参考实验代码如下:class Q{String name;int num=0;int size=10;}class Producer implements Runnable{Q q;Producer(Q q){this.q = q;="producer";}public void run(){while(true){synchronized(q){if(q.num<q.size){q.num++;System.out.println("producer已生产第:"+q.num+"个产品!");try{Thread.currentThread().sleep(100);} catch(InterruptedException e) {e.printStackTrace();}q.notify();}else{try{System.out.println("producer stop!");q.wait();} catch(InterruptedException e) {e.printStackTrace();}}}}}}class Consumer implements Runnable{Q q;Consumer(Q q){this.q = q;="consumer";}public void run(){while(true){synchronized(q){if(q.num>0){System.out.println("consumer要消费第:"+q.num+"个产品!");q.num--;try{Thread.currentThread().sleep(100);} catch(InterruptedException e) {e.printStackTrace();}q.notifyAll();}else{try{System.out.println("consumer stop!");q.wait();} catch(InterruptedException e) {e.printStackTrace();}}}}}}public class project{public static void main(String[] args){Q q = new Q();new Thread(new Producer(q)).start();new Thread(new Consumer(q)).start();}}实验二进程调度实验1、开发语言及实现平台或实验环境C++/JAVATurbo C / Microsoft Visual Studio 6.0 / Microsoft Visual Studio .NET 20102、实验目的(1)加深对进程的概念及进程调度算法的理解;(2)在了解和掌握进程调度算法的基础上,编制进程调度算法通用程序,将调试结果显示在计算机屏幕上,并检测机算和笔算的一致性。

3、实验要求(1)了解进程调度;(2)理解利用进程调度算法进行调度的原理;(3)使用某种编程语言进行算法模拟。

4、实验原理(注意:这个仅是个例子,可以参考本例,选择其他算法进行实验)一、例题:设计一个有N个进程的进程调度算法。

进程调度算法:采用最高优先数的调度算法(即把处理机分配给优先数最高的进程)。

每个进程有一个进程控制块(PCB)表示。

进程控制块可以包含如下信息:进程名、优先数、到达时间、需要运行时间、已用CPU时间、进程状态等等。

进程的优先数及需要的运行时间可以事先人为的指定(也可以由随机数产生)。

进程的到达时间为进程的输入的时间。

进程的运行时间以时间片为单位进行计算。

每个进程的状态可以是就绪W(Wait)、运行R(Run)、或完成F(Finish)三种状态之一。

就绪进程获得CPU后都只能运行一个时间片。

用已占用CPU时间加1表示。

如果运行一个时间片后,进程的已占用CPU时间已达到所需要的运行时间,则撤销该进程,如果运行一个时间片后,进程的已占用CPU时间还未达到所需要的运行时间,也就是进程还需要继续运行,此时应该将进程的优先数减1(即降低一级),然后把它插入就绪队列等待CPU。

每进行一次调度程序都打印一次运行进程、就绪队列、以及各个进程的PCB,以便进行检查。

重复以上过程,直到所要的进程都完成为止。

分析:使用固定队列与静动态优先级结合每个优先级为0~0xFF,并且以小的数字为高优先级,大的数字为低优先级,每次皆使用循环得到最高优先级的进程并执行,然后将其动态优先级设置为最低,并将其他进程动态优先级提高,以使得每个进程都有机会运行。

进程的优先级与运行时间由随机数产生。

二、代码试例#include <stdlib.h>#include <stdio.h>#include <time.h>/*常量和状态定义*/#define PRO_NUM 0x05 #define MAX_TIME 0xFF /*状态宏*/#define WAIT 0x01#define RUN 0x02#define FINISH 0x03#define ID_ERROR 0x10#define MIN_PRIOR 0xFF#define MAX_PRIOR 0x00typedef unsigned int Uint32;/*进程PCB*/struct PCB_Info{Uint32 s_id;Uint32 s_static_prior;Uint32 s_dynamic_prior;Uint32 s_start_time;Uint32 s_need_time;Uint32 s_used_time;Uint32 s_state;};/*进程队列*/PCB_Info g_queue[5];Uint32 g_time;/*模拟进程执行函数*/void Simulator();/*初始化5个进程函数*/void Init_Process();/*初始化进程队列函数*/void Init_Queue();/*创建进程函数*/Uint32 Create_Process(Uint32 pri,Uint32 needtime); /*系统运行函数*/void Run_Process();/*得到最高优先级进程ID函数*/Uint32 Get_PriProcess();/*进程时间片执行函数*/void Work_Process(Uint32 id);/*改变进程状态和优先级函数*/void Change_Process(Uint32 id);/*打印进程状态函数*/void Print_State();/*结束系统函数*/void End_Process();/*入口函数*/int main( int argc, char *argv[ ]){Simulator();return 0;}void Simulator(){Init_Process();Run_Process();End_Process();}void Init_Process(){int i;Uint32 id;srand( (unsigned)time( NULL ) );Init_Queue();for(i=0;i<PRO_NUM;++i){/*在这里修改随机数的范围,建议优先级取值为0到4之间,进程工作总时间为1到10之间*/id=Create_Process(rand()%4,1+rand()%10);if(id!=ID_ERROR){printf("**********************************\n");printf("创建进程成功\n");printf("进程ID号为:%d\n",id);printf("进程的静态优先权为:%d\n",g_queue[id].s_static_prior);printf("进程的动态优先权为:%d\n",g_queue[id].s_dynamic_prior);printf("进程的到达时间为:%d\n",g_queue[id].s_start_time);printf("进程需要时间为:%d\n",g_queue[id].s_need_time);printf("进程已用CPU时间为:%d\n",g_queue[id].s_used_time);printf("进程的状态为:%d\n",g_queue[id].s_state);printf("\n");}else{printf("创建进程失败\n");}}}void Init_Queue()int i;for(i=0;i<PRO_NUM;++i){g_queue[i].s_id=i;g_queue[i].s_dynamic_prior=MIN_PRIOR;g_queue[i].s_need_time=0;g_queue[i].s_start_time=0;g_queue[i].s_static_prior=MIN_PRIOR;g_queue[i].s_used_time=0;g_queue[i].s_state=FINISH;}}Uint32 Create_Process(Uint32 pri,Uint32 needtime) {int i=0;Uint32 id=ID_ERROR;for(i=0;i<PRO_NUM;++i){if(g_queue[i].s_state==FINISH){id=g_queue[i].s_id;g_queue[i].s_dynamic_prior=MIN_PRIOR;g_queue[i].s_need_time=needtime;g_queue[i].s_start_time=g_time;g_queue[i].s_state=WAIT;g_queue[i].s_static_prior=pri;g_queue[i].s_used_time=0x0;break;}}return id;}void Run_Process(){Uint32 id;while((id=Get_PriProcess())!=ID_ERROR){Work_Process(id);Change_Process(id);}}void Print_State(){int i;printf("时间进程ID\t状态已用时间需要时间开始时间静优先级动优先级\n");for(i=0;i<PRO_NUM;++i){printf("%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\n",g_time,g_queue[i].s_id,g_queu e[i].s_state,g_queue[i].s_used_time,g_queue[i].s_need_time,g_queue[i].s_start_time,g_queue[i].s_static_prior,g_queue[i].s_dynamic_prior);}}Uint32 Get_PriProcess(){Uint32 id=ID_ERROR;int i,prev_id=ID_ERROR;Uint32 prior=MIN_PRIOR*2,temp_prior;for(i=0;i<PRO_NUM;++i){if(g_queue[i].s_state!=FINISH){temp_prior=g_queue[i].s_dynamic_prior+g_queue[i].s_static_prior;if(temp_prior<=prior){id=i;prior=temp_prior;}}}return id;}void Work_Process(Uint32 id){++g_time;g_queue[id].s_state=RUN;++g_queue[id].s_used_time;Print_State();}void Change_Process(Uint32 id){int i;if(g_queue[id].s_need_time==g_queue[id].s_used_time){g_queue[id].s_state=FINISH;}else{g_queue[id].s_dynamic_prior=MIN_PRIOR;g_queue[id].s_state=WAIT;}for(i=0;i<PRO_NUM;++i){if((i!=id)&&(g_queue[i].s_state!=FINISH)){g_queue[i].s_dynamic_prior>0?--g_queue[i].s_dynamic_prior:g_queue[i].s_dyna mic_prior=0;}}}void End_Process(){printf("所有进程结束状态:\n");Print_State();printf("所有进程已经结束!\n");}实验三银行家算法模拟1、开发语言及实现平台或实验环境C++/JA V ATurbo C / Microsoft Visual Studio 6.0 / Microsoft Visual Studio .NET 20102、实验目的(1)理解利用银行家算法避免死锁的问题;(2)在了解和掌握银行家算法的基础上,编制银行家算法通用程序,将调试结果显示在计算机屏幕上,并检测机算和笔算的一致性。

相关文档
最新文档