操作系统进程调度1报告
根据提供的文件信息,我们可以归纳出以下相关知识点: ### 操作系统进程调度基础知识 #### 进程的概念 在计算机科学中,进程(Process)是程序在一个数据集合上的运行过程,它是系统进行资源分配和调度的基本单位。一个进程可以包含多个线程。 #### 进程的状态 进程在其生命周期中会处于不同的状态: - **就绪状态**:进程已经准备好运行,正在等待处理器。 - **执行状态**:进程当前正在占用处理器执行。 - **阻塞状态**:进程因某种原因暂停执行,如等待输入/输出完成。 #### 进程调度 进程调度是指操作系统为进程分配处理器的过程。它包括选择进程并将其状态从就绪变为执行。进程调度器的主要任务是在就绪队列中选择一个合适的进程来执行,并将其他进程置于等待或休眠状态。常见的调度算法有: - 先来先服务(FCFS) - 短作业优先(SJF) - 时间片轮转(RR) - 优先级调度 - 多级反馈队列(MFQ) ### 代码分析 #### C++ 结构体定义 代码中定义了一个 `Process` 结构体,用于表示进程的信息: ```cpp struct Process { char name[10]; // 进程名称 int startTime; // 开始时间 int runTime; // 运行时间 int startIOTime; // I/O 开始时间 int runIOTime; // I/O 执行时间 Process *next; // 指向下一个进程的指针 }; ``` - `name`: 表示进程的名称。 - `startTime`: 进程的启动时间。 - `runTime`: 进程的运行时间。 - `startIOTime`: I/O 操作的开始时间。 - `runIOTime`: I/O 操作的执行时间。 - `next`: 用于链表结构中的指针。 #### 主函数逻辑分析 主函数 `main()` 包含了进程调度的核心逻辑: 1. 初始化变量: - `time`: 当前系统时间。 - `processNum`: 进程数量。 - `endedProcessNum`: 已经结束的进程数量。 - `p`: 一个数组,用于存储所有进程的信息。 - `runningProcess`: 当前正在运行的进程指针。 - `readyProcessQueue`: 就绪队列的头指针。 - `lastReadyProcess`: 就绪队列的尾指针。 - `waitProcessQueue`: 阻塞队列的头指针。 - `tempProcessX`: 临时进程指针。 2. 输入进程信息: - 通过循环输入每个进程的名称、开始时间、运行时间、I/O 开始时间和 I/O 执行时间。 3. 进程调度: - 使用 while 循环模拟进程的运行,直到所有进程都结束。 - 在每个时间点,检查是否有新的进程加入就绪队列。 - 如果当前有进程正在运行,则更新其运行时间和 I/O 时间。 - 如果运行时间归零,表明该进程结束,移除进程。 - 如果 I/O 时间归零,将进程从阻塞队列移到就绪队列。 - 检查阻塞队列中是否有进程完成了 I/O 操作,并将其移到就绪队列。 ### 总结 本篇报告介绍了操作系统进程调度的基础概念,并通过一段 C++ 代码实现了简单的进程调度机制。该代码展示了如何管理进程的不同状态以及如何在不同状态之间转换。此外,还介绍了进程调度中的一些关键步骤,如初始化进程信息、进程的添加与删除、进程状态的变化等。这些内容对于理解操作系统中进程调度机制至关重要。
#include<iostream>
using namespace std;
struct Process
{
char name[10];//进程名
int startTime;//进程开始时间
int runTime;//进程运行时间
int startIOTime;//IO开始时间
int runIOTime;//IO执行时间
Process *next;//下一进程指针
};
void main()
{
int time;//当前系统时间
int processNum;//进程数
int endedProcessNum;//已经结束的进程数量
Process p[20];//存放所有进程的数组
Process* runningProcess;//处于运行态的进程指针
Process* readyProcessQueue;//就绪队列头指针
Process* lastReadyProcess;//就绪队列尾指针
Process* waitProcessQueue;//等待队列头指针
Process* tempProcess1;//用于链表操作的指针
Process* tempProcess2;//用于链表操作的指针
Process* tempProcess3;//用于链表操作的指针
Process* tempProcess4;//用于链表操作的指针
//数据输入及初始化
time=0;//初始化系统时间
cout<<"input processNum:";
endedProcessNum=0;//初始化已经结束的进程数量
for(int i=0;i<processNum;i++)
{//循环输入各进程数据
cout<<"input process name:";
cin>>p[i].name;
cout<<"input "<<p[i].name<<"'s startTime:";
cin>>p[i].startTime;
cout<<"input "<<p[i].name<<"'s runTime:";
cin>>p[i].runTime;
cout<<"input "<<p[i].name<<"'s startIOTime:";
cin>>p[i].startIOTime;
cout<<"input "<<p[i].name<<"'s runIOTime:";
cin>>p[i].runIOTime;
p[i].next=NULL;
}
runningProcess=NULL;//初始化
readyProcessQueue=NULL;
lastReadyProcess=NULL;
waitProcessQueue=NULL;
//开始模拟进程调度,直到所有进程都结束
while(endedProcessNum<processNum)
{//查询哪个时间进程的运行最短,就将该进程放入就绪队列
for(int i=0;i<processNum;i++)
{
if(p[i].startTime==time)
{//放入就绪队列
if(readyProcessQueue==NULL)
readyProcessQueue=&p[i];
if(lastReadyProcess!=NULL)
剩余6页未读,继续阅读
- 一夜了2016-03-31看看,以后准备学习。。。
- 粉丝: 3
- 资源: 69
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助