操作系统-实验二复习课程

合集下载

操作系统实验二:进程管理

操作系统实验二:进程管理

操作系统实验二:进程管理操作系统实验二:进程管理篇一:操作系统实验报告实验一进程管理一、目的进程调度是处理机管理的核心内容。

本实验要求编写和调试一个简单的进程调度程序。

通过本实验加深理解有关进程控制块、进程队列的概念,并体会和了解进程调度算法的具体实施办法。

二、实验内容及要求1、设计进程控制块PCB的结构(PCB结构通常包括以下信息:进程名(进程ID)、进程优先数、轮转时间片、进程所占用的CPU时间、进程的状态、当前队列指针等。

可根据实验的不同,PCB结构的内容可以作适当的增删)。

为了便于处理,程序中的某进程运行时间以时间片为单位计算。

各进程的轮转时间数以及进程需运行的时间片数的初始值均由用户给定。

2、系统资源(r1…rw),共有w类,每类数目为r1…rw。

随机产生n进程Pi(id,s(j,k)t),0<=i<=n,0<=j<=m,0<=k<=dt为总运行时间,在运行过程中,会随机申请新的资源。

3、每个进程可有三个状态(即就绪状态W、运行状态R、等待或阻塞状态B),并假设初始状态为就绪状态。

建立进程就绪队列。

4、编制进程调度算法:时间片轮转调度算法本程序用该算法对n个进程进行调度,进程每执行一次,CPU时间片数加1,进程还需要的时间片数减1。

在调度算法中,采用固定时间片(即:每执行一次进程,该进程的执行时间片数为已执行了1个单位),这时,CPU时间片数加1,进程还需要的时间片数减1,并排列到就绪队列的尾上。

三、实验环境操作系统环境:Windows系统。

编程语言:C#。

四、实验思路和设计1、程序流程图2、主要程序代码//PCB结构体struct pcb{public int id; //进程IDpublic int ra; //所需资源A的数量public int rb; //所需资源B的数量public int rc; //所需资源C的数量public int ntime; //所需的时间片个数public int rtime; //已经运行的时间片个数public char state; //进程状态,W(等待)、R(运行)、B(阻塞)//public int next;}ArrayList hready = new ArrayList();ArrayList hblock = new ArrayList();Random random = new Random();//ArrayList p = new ArrayList();int m, n, r, a,a1, b,b1, c,c1, h = 0, i = 1, time1Inteval;//m为要模拟的进程个数,n为初始化进程个数//r为可随机产生的进程数(r=m-n)//a,b,c分别为A,B,C三类资源的总量//i为进城计数,i=1…n//h为运行的时间片次数,time1Inteval为时间片大小(毫秒)//对进程进行初始化,建立就绪数组、阻塞数组。

Linux操作系统与实验教程(第2版)

Linux操作系统与实验教程(第2版)
2024/1/24
FTP(File Transfer Protocol)概述:介绍FTP 的基本概念、工作原理和文件传输过程。
FTP客户端使用:介绍如何在Linux系统中使用 FTP客户端进行文件的上传和下载操作。
19
Web服务
01
Web服务概述
介绍Web服务的基本概念、工作 原理和HTTP协议。
2024/1/24
系统日志管理 查看和分析系统日志文件,如 /var/log/messages、 /var/log/syslog等,了解系统运 行状态和故障信息。
用户与组管理 创建、删除和管理用户账户及用 户组,设置用户权限和访问控制 。
28
实验四:Linux网络服务综合实践
网络配置与诊断
配置网络接口、路由表和网 络服务,使用ping、 traceroute等命令进行网络 连通性测试。
系统管理命令
如ps、top、kill等,用于查看 系统进程、管理进程和终止进 程等。
编程开发命令
如gcc、gdb、make等,用于 程序编译、调试和构建。
10
03
Linux系统管理
BIG DATA EMPOWERS TO CREATE A NEW
ERA
2024/1/24
11
用户和用户组管理
1 2
云计算和大数据
随着云计算和大数据技术的兴起 ,Linux在这些领域也发挥了重 要作用。许多云计算平台和大数 据处理框架都是基于Linux构建 的,利用了Linux的稳定性和可 扩展性。
2024/1/24
6
02
Linux基础知识
BIG DATA EMPOWERS TO CREATE A NEW
ERA

计算机操作系统实验二

计算机操作系统实验二

计算机操作系统实验二一、实验目的本实验旨在通过实际操作,深入理解和掌握计算机操作系统中的进程与线程管理。

通过实验,我们将了解进程的创建、执行、阻塞、唤醒等状态以及线程的创建、同步、通信等操作。

同时,通过实验,我们将学习如何利用进程和线程提高程序的并发性和效率。

二、实验内容1、进程管理a.进程的创建与执行:通过编程语言(如C/C++)编写一个程序,创建一个新的进程并执行。

观察和记录进程的创建、执行过程。

b.进程的阻塞与唤醒:编写一个程序,使一个进程在执行过程中发生阻塞,并观察和记录阻塞状态。

然后,通过其他进程唤醒该进程,并观察和记录唤醒过程。

c.进程的状态转换:根据实际操作,理解和分析进程的状态转换(就绪状态、阻塞状态、执行状态)以及转换的条件和过程。

2、线程管理a.线程的创建与同步:编写一个多线程程序,创建多个线程并观察和记录线程的创建过程。

同时,使用同步机制(如互斥锁或信号量)实现线程间的同步操作。

b.线程的通信:通过消息队列或其他通信机制,实现多个线程间的通信。

观察和记录线程间的通信过程以及通信对程序执行的影响。

c.线程的状态转换:根据实际操作,理解和分析线程的状态转换(新建状态、就绪状态、阻塞状态、终止状态)以及转换的条件和过程。

三、实验步骤1、按照实验内容的要求,编写相应的程序代码。

2、编译并运行程序,观察程序的执行过程。

3、根据程序的输出和实际操作情况,分析和理解进程与线程的状态转换以及进程与线程管理的相关原理。

4、修改程序代码,尝试不同的操作方式,观察程序执行结果的变化,进一步深入理解和掌握进程与线程管理。

5、完成实验报告,总结实验过程和结果,提出问题和建议。

四、实验总结通过本次实验,我们深入了解了计算机操作系统中的进程与线程管理原理和实践操作。

在实验过程中,我们不仅学习了如何利用编程语言实现进程和线程的操作,还通过实际操作观察和分析了进程与线程的状态转换以及进程与线程管理的基本原理。

《操作系统》实验2指导书

《操作系统》实验2指导书

实验二进程调度(时间轮转的进程调度算法)
一、实验目的
掌握时间片轮转的进程调度算法
二、实验主要设备及使用要求
按操作计算机的要求使用好计算机设备。

三、实验原理或算法
基于时间片的轮转调度算法
时间片轮转法。

时间片轮转法一般用于进程调度,每次调度,把CPU分配队首进程,并令其执行一个时间片。

当执行的时间片用完时,由一个记时器发出一个时钟中断请求,该进程被停止,并被送往就绪队列末尾;依次循环。

四、实验要求
1、输出时间片轮转调度执行顺序。

2、输出时间片轮转调度的进程名、结束时间、运行时间和等待时间。

3、输出时间片轮转调度的总等待时间和平均等待时间。

五、测试
调用静态进程流文件process_stream.txt,模拟时间片轮转调度算法。

测试数据:
p0 16 2
p1 5 1
p2 4 3
p3 8 0
p4 9 4
p5 7 6
1。

操作系统实验二PPT教学课件

操作系统实验二PPT教学课件

Signal(mutex);
2020/12/0e9nd
4
2.在本程序中用于表现的图形界面说明:
在程序编译运行后会出现中间一个大的圆圈表 示公用的资源,上面一排五个矩形表示5个读者, 下面的五个矩形表示五个写入者。每个读者和写 入者都有3种状态,休息,等待和操作(读入或者 写入)分别用黑颜色,绿颜色,红颜色表示休息, 等待和操作。一旦操作者获得资源,可以进行读 或者写,我们就划一条从操作者中心到资源中心 的线,表示开始操作。
2020/12/09
5
3.演示界面:
2020/12/09
6
4.Win32程序框架:
InitApplication()函数
WinMain()函数
InitInstance()函数
结束返回
CreateOffscreen()函数 Renderscreen()函数
ReaderAndWriter() 函数
5个进程PhilosopherThread()
2020/12/09
3
Var mutex,wrt :Semaphore
Writeri:begin
Readcount: integer; Mutex:=wrt:=1;
Wait(wrt); 写数据集;
Readcount:=0;
Signal(wrt);
Parbegin
end
Readeri:begin
coend谢谢观看
Thank You For Watching
2020/12/09
8
Wait(mutex);
readcount:=readcount+1;
If readcount=1 then Wait(wrt);

Vol.2实验(二)

Vol.2实验(二)

实验二Windows XP 基本操作实验目的:1.计算机的启动和退出2.掌握鼠标的基本操作。

3.掌握桌面图标“我的电脑”、“我的文档”、“回收站”等的基本操作4.Windows XP的基本设置实验操作内容和步骤:1 计算机的启动和退出启动:(1) 打开计算机显示器电源,然后打开计算机主机电源。

计算机在完成自检后,就会自动引导进入Windows XP系统,这种方式通常称为计算机的冷启动;(2) 热启动是指在计算机已经开启的状态下,通过键盘重新引导操作系统。

一般在死机时才使用。

方法:左手按住“Ctrl”和“Alt”不放开,右手按下“Del”,然后同时放开。

(3) 复位启动是指在计算机已经开启的状态下,按下主机箱面板上的复位按钮重新启动。

一般在计算机的运行状态出现异常,而热启动无效时才使用。

退出:(1) 单击桌面左下角的“开始”按钮。

“开始”→“关闭计算机”→“关闭”(2) 上述方法无效时,在这种情况下只能手动强行关机了(持续按下电源开关,几秒钟后计算机即可关机)2 鼠标的使用见课本P333 掌握桌面图标的基本操作见课本P324快捷方式的创建快捷方式是指向文件或文件夹的快捷图标,通过快捷方式可以快速找到文件及文件夹并将其打开,从而方便用户的操作。

快捷方式一般创建在桌面和“开始”菜单内。

在桌面上创建快捷方式有两种方法。

方法1:a)打开“我的电脑”窗口;b)打开预设置快捷方式的文件所在的文件夹c)用鼠标右击该文件,出现快捷菜单d)在快捷菜单中选择“发送到”→“桌面快捷方式”选项方法2:a)鼠标右击桌面空白处,在快捷菜单中选择“新建”→“快捷方式”选项,打开“创建快捷方式”对话框b)在“创建快捷方式”对话框,指定文件的位置,如D:\MyFile,也可以单击“浏览”按钮查找一个文件,然后单击“下一步”按钮c)在出现的“选择程序标题”对话框内,指定该快捷方式名称d)单击“完成”按钮在“开始”菜单内创建快捷方式有两种方法。

操作系统实验二(进程管理)

操作系统实验二(进程管理)

操作系统进程管理实验实验题目:(1)进程的创建编写一段程序,使用系统调用fork( )创建两个子进程。

当此程序运行时,在系统中有一个父进程和两个子进程活动。

让每一个进程在屏幕上显示一个字符:父进程显示字符“a”;子进程分别显示字符“b”和字符“c”。

试观察记录屏幕上的显示结果,并分析原因。

(2)进程的控制修改已编写的程序,将每个进程输出一个字符改为每个进程输出一句话,在观察程序执行时屏幕上出现的现象,并分析原因。

(3)编制一段程序,使其实现进程的软中断通信。

要求:使用系统调用fork( )创建两个子进程,再用系统调用signal( )让父进程捕捉键盘上来的中断信号(即按Del键);当捕捉到中断信号后,父进程调用系统调用kill( )向两个子进程发出信号,子进程捕捉到信号后分别输出下列信息后终止: Child process 1 is killed by parent! Child process 2 is killed by parent! 父进程等待两个子进程终止后,输出如下的信息后终止: Parent process is killed! 在上面的程序中增加语句signal(SIGINT, SIG_IGN)和signal(SIGQUIT, SIG_IGN),观察执行结果,并分析原因。

(4)进程的管道通信编制一段程序,实现进程的管道通信。

使用系统调用pipe( )建立一条管道线;两个进程P1和P2分别向管道各写一句话: Child 1 is sending a message! Child 2 is sending a message! 而父进程则从管道中读出来自于两个子进程的信息,显示在屏幕上。

要求父进程先接收子进程P1发来的消息,然后再接收子进程P2发来的消息。

实验源程序及报告:(1)、进程的创建#include <stdio.h>int main(int argc, char *argv[]){int pid1,pid2; /*fork first child process*/if ( ( pid1=fork() ) < 0 ){printf( "ProcessCreate Failed!");exit(-1);}if ( ( pid1=fork() ) == 0 ){printf( "b\n" );}/*fork second child process*/if ( ( pid2=fork() ) < 0 ){printf( "ProcessCreate Failed!"); exit(-1);}if ( ( pid2=fork() ) == 0 ){printf( "c\n" );}/*parent process*/else{wait(NULL);printf( "a\n" );exit(0);}return 0;}(2)、进程的控制#include <stdio.h>int main(int argc, char *argv[]){ int pid1,pid2;/*fork first child process*/if ( ( pid1=fork() ) < 0 ){printf( "ProcessCreate Failed!");exit(-1);}if ( ( pid1=fork() ) == 0 ){printf( "This is my Unix OS program!\n" ); }/*fork second child process*/if ( ( pid2=fork() ) < 0 ){printf( "ProcessCreate Failed!");exit(-1);}if ( ( pid2=fork() ) == 0 ){printf( "This is the second Child process!\n" ); }/*parent process*/else{wait(NULL);printf( "This is the Parent process\n" );exit(0);}return 0;}(3)编制一段程序,使其实现进程的软中断通信。

计算机应用基础课程实验2 操作系统应用

计算机应用基础课程实验2  操作系统应用

实验2:操作系统应用一、实验目的1.掌握资源管理器的组成和使用;2.掌握文件与文件夹的建立、删除、显示、重命名等操作;3.熟练使用Windows XP附带的系统工具对磁盘进行维护;4.熟练使用Windows XP附件。

二、实验环境Windows XP以上操作系统。

三、相关知识1、账户类型管理员账户(Administrator)、受限账户、来宾账户(Guest)。

2、显示器性能指标(1)分辨率:指屏幕上有多少行扫描线,每行有多少个像素点。

(2)颜色数:指一个像素可显示成多少种颜色。

颜色越多,图像越逼真。

(3)刷新频率:指屏幕在1秒内刷新的次数。

3、Windows文件(夹)命名约定(1)支持长文件名,即可以使用很长的文件名,最长为255个字符;(2)可以使用0-9,A-Z,a-z,其它特殊字符(如@, !,$……),也可使用汉字,一个汉字相当于2个英文字符;(3)不能出现以下 / \ :* ?” | < > 9个字符;(4)不区分英文字母大小写。

例如FILE.DAT与file .dat 表示同一文件;(5)可以使用多个分隔符的名字。

4、通配符?——代表任意一个字符*——代表任意多个字符。

5、各系统工具的功能作用磁盘清理:检查并删除磁盘上的垃圾文件,提高磁盘利用率;碎片整理:检查并整理磁盘上的碎片文件,放置在一个连续的磁盘空间,提高磁盘访问速度;磁盘扫描:检测和修复多种磁盘逻辑和物理错误;系统备份:避免因磁盘驱动器损坏、病毒感染、供电中断、网络故障及其他原因所造成的数据丢失和损坏。

四、实验内容1、创建一个帐户名为“student”、密码为“123456”的管理员账户;设置该用户隶属于“Administrators组”,并以该用户登录系统,再返回。

2、修改桌面背景图片为个人图库中的“星空2”;桌面上的我的电脑图标为“C:\WINDOWS\setdebug.exe”;设置屏幕保护程序为“windows XP”,且等待时间为“10分钟”;设置外观:颜色方案为“windows经典”、字体大小为“正常”,效果为“滚动效果”、“使用大图标”;设置分辨率为“1024X768”,监视器的屏幕刷新频率为“85赫兹”。

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

实验二单处理器系统的进程调度2012413039 蔡青12信管1.实验目的加深对进程概念的理解,明确进程和程序的区别;深入了解系统如何组织进程、创建进程;进一步认识如何实现处理器调度。

2.实验预备知识进程的概念;进程的组织方式;进程的创建;进程的调度。

3.实验内容编写程序完成单处理机系统中的进程调度,要求采用时间片轮转调度算法。

实验具体包括:首先确定进程控制块的内容,进程控制块的组成方式;然后完成进程创建原语和进程调度原语;最后编写主函数对所作工作进程测试。

4.提示与讲解这个实验主要要考虑三个问题:如何组织进程、如何创建进程和如何实现处理器调度。

考虑如何组织进程,首先就要设定进程控制块的内容。

进程控制块PCB记录各个进程执行时的情况。

不同的操作系统,进程控制块记录的信息内容不一样。

操作系统功能越强,软件也越庞大,进程控制块记录的内容也就越多。

这里的实验只使用了必不可少的信息。

一般操作系统中,无论进程控制块中信息量多少,信息都可以大致分为以下四类:①标识信息每个进程都要有一个惟一的标识符,用来标识进程的存在和区别于其他进程。

这个标识符是必不可少的,可以用符号或编号实现,它必须是操作系统分配的。

在后面给出的参考程序中,采用编号方式,也就是为每个进程依次分配一个不相同的正整数。

②说明信息用于记录进程的基本情况,例如进程的状态、等待原因、进程程序存放位置、进程数据存放位置等等。

实验中,因为进程没有数据和程序,仅使用进程控制块模拟进程,所以这部分内容仅包括进程状态。

③现场信息现场信息记录各个寄存器的内容。

当进程由于某种原因让出处理器时,需要将现场信息记录在进程控制块中,当进行进程调度时,从选中进程的进程控制块中读取现场信息进行现场恢复。

现场信息就是处理器的相关寄存器内容,包括通用寄存器、程序计数器和程序状态字寄存器等。

在实验中,可选取几个寄存器作为代表。

用大写的全局变量AX、BX、CX、DX模拟通用寄存器、大写的全局变量PC模拟程序计数器、大写的全局变量PSW模拟程序状态字寄存器。

④管理信息管理信息记录进程管理和调度的信息。

例如进程优先数、进程队列指针等。

实验中,仅包括队列指针。

因此可将进程控制块结构定义如下:struct pcb{int name;int status;int ax, bx, cx,dx;int pc;int psw;int next;}确定进程控制块内容后,要考虑的就是如何将进程控制块组织在一起。

多道程序设计系统中,往往同时创建多个进程。

在单处理器的情况下,每次只能有一个进程处于运行态,其他的进程处于就绪状态或等待状态。

为了便于管理,通常把处于相同状态的进程的进程控制块链接在一起。

单处理器系统中,正在运行的进程只有一个。

因此,单处理器系统中进程控制块分成一个正在运行进程的进程控制块、就绪进程的进程控制块组织成的就绪队列和等待进程的进程控制块组成的等待队列。

由于实验模拟的是进程调度,没有对等待队列的操作,所以实验中只有一个指向正在运行进程的进程控制块指针和一个就绪进程的进程控制块队列指针。

操作系统的实现中,系统往往在主存中划分出一个连续的专门区域存放系统的进程控制块,实验中应该用数组模拟这个专门的进程控制块区域,定义如下:#define n 10struct pcb pcbarea[n];这样,进程控制块的链表实际上是数据结构中使用的静态链表。

进程控制块的链接方式可以采用单向和双向链表,实验中,进程控制块队列采用单向不循环静态链表。

为了管理空闲进程控制块,还应该将空闲控制块链接成一个队列。

实验中采用时间片轮转调度算法,这种算法是将进程控制块按照进入就绪队列的先后次序排成队列。

关于就绪队列的操作就是从队头摘下一个进程控制块和从队尾挂入一个进程控制块。

因此为就绪队列定义两个指针,一个头指针,指向就绪队列的第一个进程控制块;一个尾指针,指向就绪队列的最后一个进程控制块。

实验中指向运行进程的进程控制块指针、就绪队列指针和空闲进程控制块队列指针定义如下:int run;struct{int head;int tail;}ready;int pfree;以上是如何组织进程,下面考虑如何创建进程。

进程创建是一个原语,因此在实验中应该用一个函数实现,进程创建的过程应该包括:①申请进程控制块:进程控制块的数量是有限的,如果没有空闲进程控制块,则进程不能创建,如果申请成功才可以执行第②步;②申请资源:除了进程控制块外,还需要有必要的资源才能创建进程,如果申请资源不成功,则不能创建进程,并且归还已申请的进程控制块;如果申请成功,则执行第三步,实验无法申请资源,所以模拟程序忽略了申请资源这一步;③填写进程控制块:将该进程信息写入进程控制块内,实验中只有进程标识符、进程状态可以填写,每个进程现场信息中的寄存器内容由于没有具体数据而使用进程(模拟进程创建时,需输入进程标识符字,进程标识符本应系统建立,并且是惟一的,输入时注意不要冲突),刚刚创建的进程应该为就绪态,然后转去执行第四步;④挂入就绪队列:如果原来就绪队列不为空,则将该进程控制块挂入就绪队列尾部,并修改就绪队列尾部指针;如果原来就绪队列为空,则将就绪队列的头指针、尾指针均指向该进程控制块,进程创建完成。

进程创建流程图如图2.2所示。

多道程序设计的系统中,处于就绪态的进程往往是多个,它们都要求占用处理器,可是单处理器系统的处理器只有一个,进程调度就是解决这个处理器竞争问题的。

进程调度的任务就是按照某种算法从就绪进程队列中选择一个进程,让它占有处理器。

因此进程调度程序就应该包括两部分,一部分是在进程就绪队列中选择一个进程,并将其进程控制块从进程就绪队列中摘下来,另一部分工作就是分配处理器给选中的进程,也就是将指向正在运行进程的进程控制块指针指向该进程的进程控制块,并将该进程的进程控制块信息写入处理器的各个寄存器中。

图2.2 进程创建流程图实验中采用时间片轮转调度算法。

时间片轮转调度算法让就绪进程按就绪的先后次序排成队列,每次总是选择就绪队列中的第一个进程占有处理器,但是规定只能使用一个“时间片”。

时间片就是规定进程一次使用处理器的最长时间。

实验中采用每个进程都使用相同的不变的时间片。

采用时间片轮转调度算法的进程调度流程图如图2.3所示。

完成上述功能后,编写主函数进行测试:首先建立一个就绪队列,手工输入信息建立几个进程;然后进行进程调度;最后将指向正在运行进程的指针指向的进程控制块的内容输出,察看结果。

我的实现代码(C语言):#include <stdio.h>#define N 10 //系统中所允许的最大进程数量#define SLOT 5 //时间片大小//进程状态枚举typedef enum{Running, //运行状态Aready, //就绪状态Blocking //阻塞状态} ProStatus;//进程控制块typedef struct{int name; //进程标识符ProStatus status; //进程状态int ax,bx,cx,dx; //通用寄存器int pc; //程序计数器寄存器int psw; //程序状态字寄存器int next; //指向下一个进程的指针} PCB;//就绪队列指针typedef struct{int head; //头指针int tail; //尾指针} Ready;//模拟寄存器int PSW,AX,BX,CX,DX,PC,TIME;//PCB的静态链表PCB pcbArea[N]; //模拟PCB区域的数组int run; //运行状态程序的指针Ready ready; //就绪队列指针int pfree; //空闲队列的指针//初始化运行状态进程指针void InitRun(){run=-1;}//初始化就绪状态队列void InitReady(){ready.head=ready.tail=-1;}//初始化空闲队列void InitFree(){int temp;for(temp=0;temp<N-1;temp++){pcbArea[temp].next=temp+1;}pcbArea[temp].next=-1;pfree=0;}//就绪队列出队int PopReady() //返回结点在PCB区域数组的编号{int temp;if(ready.head==-1){printf("就绪队列为空,不能出队。

\n");return -1;}temp=ready.head;ready.head=pcbArea[temp].next;if(ready.head==-1)ready.tail=-1;pcbArea[temp].next=-1;return temp;}//空闲队列出队int PopFree() //返回结点在PCB区域数组的编号{int temp;if(pfree==-1){printf("空闲队列为空,不能出队。

\n");return -1;}temp=pfree;pfree=pcbArea[temp].next;pcbArea[temp].next=-1;return temp;}//就绪队列入队void PushReady(int x) //x为入队结点的编号{int temp;if(ready.head==-1){ready.head=x;ready.tail=x;}else{temp=ready.tail;ready.tail=x;}pcbArea[ready.tail].next=-1;}//创建PCBvoid CreatePCB(int x,PCB pcb) //x为要创建PCB在PCB区域数组的编号{pcbArea[x].ax=pcb.ax;pcbArea[x].bx=pcb.bx;pcbArea[x].cx=pcb.cx;pcbArea[x].dx=pcb.dx;pcbArea[x].name=;pcbArea[x].next=-1;pcbArea[x].pc=pcb.pc;pcbArea[x].psw=pcb.psw;pcbArea[x].status=pcb.status;}//创建进程函数void Create(PCB pcb){int temp;if(pfree==-1){printf("空闲队列为空,不能创建进程。

\n");return;}temp=PopFree();pcb.status=Aready;CreatePCB(temp,pcb);PushReady(temp);}//进程调度函数void Schedule(){int temp;if(ready.head==-1){printf("系统内没有进程可以调度。

相关文档
最新文档