cpu的三级调度是啥意思?
答案:2 悬赏:70
解决时间 2021-02-16 19:21
- 提问者网友:斯文败类
- 2021-02-16 09:55
cpu的三级调度是啥意思?
最佳答案
- 二级知识专家网友:青春如此荒謬
- 2021-02-16 11:04
所谓调度就是选出待分派的作业或进程。
处理机调度的主要目的就是为了分配处理机。
在不同的操作系统中所采用的调度方式并不完全相同。有的系统中仅采用一级调度,而有的系统采用两级或三级,并且所用的调度算法也完全可能不同。
一般说来,作业从进人系统到最后完成,可能要经历三级调度:高级调度、中级调度和低级调度。
(1)高级调度:又称作业调度。其主要功能是根据一定的算法,从输人的一批作业中选出若干个作业,分配必要的资源,如内存、外设等,为它建立相应的用户作业进程和为其服务的系统进程(如输人、输出进程),最后把它们的程序和数据调人内存,等待进程调度程序对其执行调度,并在作业完成后作善后处理工作。
(2)中级调度:为了使内存中同时存放的进程数目不至于太多,有时就需要把某些进程从内存中移到外存上,以减少多道程序的数目,为此设立了中级调度。特别在采用虚拟存储技术的系统或分时系统中,往往增加中级调度这一级。所以中级调度的功能是在内存使用情况紧张时,将一些暂时不能运行的讲程从内存对换到外存上等待。当以后内存有足够的空闲空间时,再将合适的进程重新换人内存,等待进程调度。引人中级调度的主要目的是为了提高内存的利用率和系统吞吐量。它实际上就是存储器管理中的对换功能。
(3)低级调度:又称进程调度。其主要功能是根据一定的算法将CPU分派给就绪队列中的一个进程。执行低级调度功能的程序称做进程调度程序,由它实现CPU在进程间的切换。进程调度的运行频率很高,在分时系统中往往几十毫秒就要运行一次。进程调度是操作系统中最基本的一种调度。在一般类型的操作系统中都必须有进程调度,而且它的策略的优劣直接影响整个系统的计能。
处理机调度的主要目的就是为了分配处理机。
在不同的操作系统中所采用的调度方式并不完全相同。有的系统中仅采用一级调度,而有的系统采用两级或三级,并且所用的调度算法也完全可能不同。
一般说来,作业从进人系统到最后完成,可能要经历三级调度:高级调度、中级调度和低级调度。
(1)高级调度:又称作业调度。其主要功能是根据一定的算法,从输人的一批作业中选出若干个作业,分配必要的资源,如内存、外设等,为它建立相应的用户作业进程和为其服务的系统进程(如输人、输出进程),最后把它们的程序和数据调人内存,等待进程调度程序对其执行调度,并在作业完成后作善后处理工作。
(2)中级调度:为了使内存中同时存放的进程数目不至于太多,有时就需要把某些进程从内存中移到外存上,以减少多道程序的数目,为此设立了中级调度。特别在采用虚拟存储技术的系统或分时系统中,往往增加中级调度这一级。所以中级调度的功能是在内存使用情况紧张时,将一些暂时不能运行的讲程从内存对换到外存上等待。当以后内存有足够的空闲空间时,再将合适的进程重新换人内存,等待进程调度。引人中级调度的主要目的是为了提高内存的利用率和系统吞吐量。它实际上就是存储器管理中的对换功能。
(3)低级调度:又称进程调度。其主要功能是根据一定的算法将CPU分派给就绪队列中的一个进程。执行低级调度功能的程序称做进程调度程序,由它实现CPU在进程间的切换。进程调度的运行频率很高,在分时系统中往往几十毫秒就要运行一次。进程调度是操作系统中最基本的一种调度。在一般类型的操作系统中都必须有进程调度,而且它的策略的优劣直接影响整个系统的计能。
全部回答
- 1楼网友:甜野猫
- 2021-02-16 12:15
进程调度源程序如下:
jingchendiaodu.cpp
#include "stdio.h"
#include <stdlib.h>
#include <conio.h>
#define getpch(type) (type*)malloc(sizeof(type))
#define null 0
struct pcb {
char name[10];
char state;
int super;
int ntime;
int rtime;
struct pcb* link;
}*ready=null,*p;
typedef struct pcb pcb;
sort()
{
pcb *first, *second;
int insert=0;
if((ready==null)||((p->super)>(ready->super)))
{
p->link=ready;
ready=p;
}
else
{
first=ready;
second=first->link;
while(second!=null)
{
if((p->super)>(second->super))
{
p->link=second;
first->link=p;
second=null;
insert=1;
}
else
{
first=first->link;
second=second->link;
}
}
if(insert==0) first->link=p;
}
}
input()
{
int i,num;
clrscr();
printf("\n 请输入进程号?");
scanf("%d",&num);
for(i=0;i<num;i++)
{
printf("\n 进程号no.%d:\n",i);
p=getpch(pcb);
printf("\n 输入进程名:");
scanf("%s",p->name);
printf("\n 输入进程优先数:");
scanf("%d",&p->super);
printf("\n 输入进程运行时间:");
scanf("%d",&p->ntime);
printf("\n");
p->rtime=0;p->state='w';
p->link=null;
sort();
}
}
int space()
{
int l=0; pcb* pr=ready;
while(pr!=null)
{
l++;
pr=pr->link;
}
return(l);
}
disp(pcb * pr)
{
printf("\n qname \t state \t super \t ndtime \t runtime \n");
printf("|%s\t",pr->name);
printf("|%c\t",pr->state);
printf("|%d\t",pr->super);
printf("|%d\t",pr->ntime);
printf("|%d\t",pr->rtime);
printf("\n");
}
check()
{
pcb* pr;
printf("\n **** 当前正在运行的进程是:%s",p->name);
disp(p);
pr=ready;
printf("\n ****当前就绪队列状态为:\n");
while(pr!=null)
{
disp(pr);
pr=pr->link;
}
}
destroy()
{
printf("\n 进程 [%s] 已完成.\n",p->name);
free(p);
}
running()
{
(p->rtime)++;
if(p->rtime==p->ntime)
destroy();
else
{
(p->super)--;
p->state='w';
sort();
}
}
main()
{
int len,h=0;
char ch;
input();
len=space();
while((len!=0)&&(ready!=null))
{
ch=getchar();
h++;
printf("\n the execute number:%d \n",h);
p=ready;
ready=p->link;
p->link=null;
p->state='r';
check();
running();
printf("\n 按任一键继续......");
ch=getchar();
}
printf("\n\n 进程已经完成.\n");
ch=getchar();
}
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯