一、课程设计题目及内容

设计一个按照时间片轮转法实现处理机调度的程序
时间片轮转法实现处理机调度的程序设计提示如下:
(1) 假设系统有n个进程,每个进程用一个进程控制块(PCB)来代表。进程控制块的格式如下表所示,且参数意义也相同。

进程名

链接指针

到达时间

估计运行时间

进程状态

(2) 按照进程到达的先后顺序排成一个循环队列,设一个队首指针指向第一个到达进程的首址。另外再设一个当前运行进程指针,指向当前正运行的进程。
(3) 执行处理机调度时,首先选择队首的第一个进程运行。
(4) 由于本题目是模拟实验,所以对被选中的进程并不实际启动运行,而只是执行如下操作:1)估计运行时间减1;
2)输出当前运行进程的名字。
用这两个操作来模拟进程的一次运行。
(5) 进程运行一次后,以后的调度则将当前指针依次下移一个位置,指向下一个进程,即调整当前运行指针指向该进程的链接指针所指进程,以指示应运行进程,同时还应判断该进程的剩余运行时间是否为0,若不为0,则等待下一轮的运行,若该进程的剩余运行时间为0,则将该进程的状态置为完成状态“C”,并退出循环队列。
(6) 若就绪队列不为空,则重复上述的步骤(4)和(5)直到所有进程都运行完为止。
(7) 在所设计的调度程序中,应包含显示或打印语句,以便显示或打印每次选中进程的名称及运行一次后队列的变化情况。

二、程序使用的数据结构及主要函数说明

(1)数据结构
1.自定义PCB类:

//PCB类
public class PCB {
    String name;    //名称
    PCB next;       //指向下一节点
    int arriveTime; //到达时间
    int runTime;    //运行时间
    String state;   //状态,A表示还没运行完,C表示已经运行结束
    }

}

2.存储所有进程的总进程队列

List<PCB> processQueue =new ArrayList<>();//所有进程的队列

3.存储就绪进程的就绪队列

Queue<PCB> readyQueue =new ArrayDeque<>();   //就绪队列

4.可视化界面表格内容

Vector<String> table1_title =new Vector<String>();  //就绪队列表头标题
Vector<Vector<String>> table1_data =new Vector<Vector<String>>();   //就绪队列表格内容
Vector<String> table2_title =new Vector<String>();  //运行情况表头标题
Vector<Vector<String>> table2_data =new Vector<Vector<String>>();   //运行情况表格内容

(2)主要类及其主要函数说明
(1)Main类:主类,调用其他类

(2)initData类:初始化数据类
Void Init():预先插入几个数据;

(3)initView类:初始展示界面类
Void init():界面初始化,设置界面大小及属性,以及界面内各个组件和表格的位置和属性,还有对表格进行渲染,使界面更美观;
Void addNewData(PCB p):添加新的进程
Void mouseAction():鼠标事件监控函数

(4)sort类:用于对总进程队列进行排序的类
void quickSort(List processQueue, int low, int high):对所有的进程进行快速排序;

(5)runView类:运行情况展示类
Void init():界面初始化,设置界面大小及属性,以及界面内各个组件和表格的位置和属性,还有对表格进行渲染,使界面更美观;
void RR():时间片轮转算法
void add_table1_Data(int round):为就绪队列表格添加数据
void add_table2_Data(int round):为运行情况表格添加数据
void add_table1_Empty(int round):为就绪队列表格添加空值
void add_table2_Empty(int round):为运行情况表格添加空值
Void mouseAction():鼠标事件监控函数

(6)MyTableCellRenderer类:表格渲染类,使界面美观
(7)endView类:结束提示界面类,提示所有进程已运行结束

三、程序构思及流程图

在java底层中时间轮算法都用在那些地方 java时间片轮转调度_队列


在java底层中时间轮算法都用在那些地方 java时间片轮转调度_时间片_02


在java底层中时间轮算法都用在那些地方 java时间片轮转调度_操作系统_03

四、源程序及注释

源代码过多,就不放上来了,有需要的同学可以留下邮箱

五、实验运行结果展示

初始界面,添加一个d进程,状态A表示尚未运行结束,状态C表示已经运行结束

在java底层中时间轮算法都用在那些地方 java时间片轮转调度_java_04

继续,时间片3时,c进程到达,进入就绪队列,开始运行

在java底层中时间轮算法都用在那些地方 java时间片轮转调度_java_05


时间片4,进程a,d到达,插入就绪队列,并将在时间片3未运行完的进程c插回就绪队列队尾,取就绪队列队首进程a运行

在java底层中时间轮算法都用在那些地方 java时间片轮转调度_java_06


时间片5~8没有新的进程到达,就绪队列中几个进程轮流执行

在java底层中时间轮算法都用在那些地方 java时间片轮转调度_操作系统_07


时间片9,进程b到达,插入就绪队列,并将时间片8未执行完的进程d插回就绪队列队尾,取就绪队列队首进程c运行

在java底层中时间轮算法都用在那些地方 java时间片轮转调度_队列_08


时间片10~25,没有新进程到达,就绪队列中各进程轮流执行,直到所有进程运行结束

在java底层中时间轮算法都用在那些地方 java时间片轮转调度_队列_09


所有进程运行结束,弹出结束界面

在java底层中时间轮算法都用在那些地方 java时间片轮转调度_java_10