导航:首页 > 废水知识 > 处理器调度优先级提升

处理器调度优先级提升

发布时间:2021-11-29 02:06:13

『壹』 多核CPU调度有哪几种算法 比如单核的有优先级、先来先服务。那多核的有哪几种呢

一般多核任务调度算法有全局队列调度和局部队列调度。前者是指操作系统维护一个全局的任务等待队列,当系统中有一个CPU核心空闲时,操作系统就从全局任务等待队列中选取就绪任务开始在此核心上执行。这种方法的优点是CPU核心利用率较高。后者是指操作系统为每个CPU内核维护一个局部的任务等待队列,当系统中有一个CPU内核空闲时,便从该核心的任务等待队列中选取恰当的任务执行,这种方法的优点是任务基本上无需在多个CPU核心间切换,有利于提高CPU核心局部Cache命中率。目前多数多核CPU操作系统采用的是基于全局队列的任务调度算法。

『贰』 设计一个按优先数调度算法实现处理器调度的程序。

#include "stdio.h"
#include "malloc.h"
#include "string.h"
typedef struct node{
int time;
int name;
char statement;
int num;
struct node *next;
}node,*L;
void createL(L &l,int n){
l=(L)malloc(sizeof(node));
if(!l)
printf("error!");
else
l->next=NULL;
L p,q;
q=l;
for(int i=0;i<n;i++){
p=(L)malloc(sizeof(node));
printf("请输入进程的名字name:\n");
scanf("%d",&p->name);
getchar();
printf("请输入该进程的运行时间time:\n");
scanf("%d",&p->time);
printf("请输入其优先级数num:\n");
scanf("%d",&p->num);
getchar();
printf("请输入其状态:\n");
p->statement=getchar();
p->next=q->next;
q->next=p;
q=p;
getchar();
}

}
void traL(L &l){
L p;
p=l->next;
printf("进程名\t运行时间\t优先数\t状态\n");
while(p){
printf(" %d\t%5d\t%11d\t %c",p->name,p->time,p->num,p->statement);
printf("\n");
p=p->next;
}
}
void Sort(L &l)
{
L tail=NULL;

while(tail!= l->next)
{
L pre = l;
L cur = pre->next;
while(cur != tail && cur->next != tail)
{
if( cur->num < cur->next->num )
{
pre->next = cur->next;
cur->next = cur->next->next;
pre->next->next = cur;
}
pre = pre->next;
cur = pre->next;
}
tail = cur;
}
}
void run(L &l){
Sort(l);
L p,r,q;
q=l;
if(l->next!=NULL)
p=l->next;
int j=0;
printf("第k次运行\t进程名\t运行时间\t优先数\t状态\n");
while(p!=NULL){
j++;
printf("%5d\t %d\t%5d\t%11d\t %c",j,p->name,p->time,p->num,p->statement);
printf("\n");
p->num--;
p->time--;
if(p->time==0){
p->statement='E';
r=p;
if(p->next!=NULL)
{
l->next=p->next;
free(r);
p=l->next;
}
else
break;
}
else{
Sort(l);
if(l->next!=NULL)
p=l->next;
else
break;
}
}
}

void main(){
L l;
int n;
printf("请输入进程的数目n:\n");
scanf("%d",&n);
createL(l,n);
traL(l);
run(l);
}
//这是运行过的,应该符合你的要求!

『叁』 CPU调度先来先服务、优先级。但网上的都是单核的,有没有针对多核CPU调度的先来先服务算法的程序代码

你直接 上个 i7 3930q 要不amd 推土机也行 就不用这么瞎操心了

『肆』 双核CPU处理关系设置优先级问题

CPU工作不是单纯的从使用率可以观察到的。。。这个根本不用去研究。。。它都是自动调度的

『伍』 怎样永久提升进程优先级

进程优先级有些是固定的,系统运行的需要,剩下的才是可调的,一般来说大多数进程是频分复用的,不需要调试没优先级。

『陆』 怎样优化CPU,就是把CPU性能调到最高

一、在BIOS中优化CPU
1、打开CPU二级缓存
对于一些特殊主板,CPU的某些功能在默认的情况下是不开启的,需要在BIOS中将其打开,如CPU的内部高速缓存和超线程技术等。打开CPU的内部高速缓存的方法如下:
步骤1
进入BIOS设置主界面,选择“Advanced
BIOS
Features”设置项,按Enter键进入。
步骤2
将“CPU
Internal
Cache”设置为“Enabled”,即打开CPU的二级缓存。打开后可以减少CPU在存储器读/写周期中的等待时间,从而提升CPU的工作效率。
步骤3
CPU二级缓存ECC校验也是一个很重要的参数。将“CPU
L2
Cache
ECC
Checking”设置为“Enabled”,可启用CPU内部L2Cache,进行ECC检测。它可以侦察并纠正单位信号错误,保持资料的准确性,对超频的稳定性有帮助,但不能侦察双位信号错误。
2、设置超线程技术
超线程技术回增强处理器的性能,提高工作效率。因此,对于一些支持超线程技术的CPU(如P42.8C等),可以对其进行如下设置:
步骤1
进入主板BIOS中,在“Advanced
BIOS
Features”中找到“
Hyper-Threading
Technology”选项。
步骤2
将其设置为“Enabled”。
步骤3
设置完毕后重启电脑,然后在开机自检画面时会显示两个处理器。当用户进入系统后还可以在系统的“设备管理器”里面看到两个处理器,这就代表超线程技术已经成功打开。
二、系统设置优化CPU
1、调整程序优先级
在Windows系统中,对CPU的优化处理并不多,可以通过设置CPU优先等级的方法来优化CPU。Windows
2000/XP内的应用程序共分为32个等级(0~31),一般都处于0~15级之间。默认情况下,程序的优先级别都为8,即“标准”。在有些时候,可以将一些无关紧要的进程的优先级调低,这样可以提升CPU的性能。
要设置CPU的优先级,可以执行以下操作:
步骤1
按Ctrl+Alt+Del组合键,打开“Windows任务管理器”窗口。
步骤2
选中要设置优先级的程序,单击鼠标右键,在弹出的快捷菜单中选择“设置优先级”→“低”的命令,即可降低程序的级别。
4
2、优化处理器二级缓存容量
在Windows
XP中,为加快系统运行,可以在注册表中设置二级缓存容量。方法如下:
步骤1
首先打开注册表,找到如下分支:“HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\SessionManager\\MemoryManagement\\”。
步骤2
选择其下的“SecondLevelDataCache”,用户根据自己所用的处理器设置即可,例如Athlon
XP是“38”,P4Northwood是“512”。

『柒』 什么是优先级轮转调度算法支持处理机抢占吗

我想估计跟多级反馈队列算法(Round Robin with Multiple Feedback)有点相似

多级反馈队列算法时间片轮转算法和优先级算法的综合和发展。

优点:

² 为提高系统吞吐量和缩短平均周转时间而照顾短进程。

² 为获得较好的I/O设备利用率和缩短响应时间而照顾I/O型进程。

² 不必估计进程的执行时间,动态调节。

1. 多级反馈队列算法

² 设置多个就绪队列,分别赋予不同的优先级,如逐级降低,队列1的优先级最高。每个队列执行时间片的长度也不同,规定优先级越低则时间片越长,如逐级加倍。

² 新进程进入内存后,先投入队列1的末尾,按FCFS算法调度;若按队列1一个时间片未能执行完,则降低投入到队列2的末尾,同样按FCFS算法调度;如此下去,降低到最后的队列,则按“时间片轮转”算法调度直到完成。

² 仅当较高优先级的队列为空,才调度较低优先级的队列中的进程执行。如果进程执行时有新进程进入较高优先级的队列,则抢先执行新进程,并把被抢先的进程投入原队列的末尾。

『捌』 处理器调度的原则有哪些

处理器调度分为:高级调度,中级调度,低级调度
高级调度主要任务:在多道批处理操作系统中,从输入系统的一批作业中按照预订的调度策略挑选若干作业进入主存,为其分配所需资源,并创建作业的响应用户进程后便完成高级调度任务。

中级调度:根据主存资源决定主存中所能容纳的进程数目,并根据进程的当前状态来决定辅助存储器和主存中进程的对换。

低级调度:根据某种原则决定就绪队列中的哪个进程或者内核级线程获得处理器,并将处理器出让给它使用。。

『玖』 设计一个按优先数调度算法实现处理器调度的程序。 高手帮忙!!

#include <stdio.h>
#include <stdlib.h> //提供atoi()函数
#include <conio.c> //提供clrscr()函数
#define M 10 //字符串大小常量
#define N 3 //进程数常量
#define SLOT 2
typedef struct node{
char name[M];
int prio; //优先级
int round; //时间片长度
int cputime; //已经使用的cpu时间
int needtime;//需要多少cpu时间
int count; //计数器
char state; //进程的当前状态
struct node *next; //指向下一个进程
}PCB;

PCB *finish,*ready,*tail,*run;

void ShowHead(char *s1,char *s2);
int Menu_Select();
void Creat(int select);
void InsertPriority(PCB *q);
void InsertSlot(PCB *q);
void PrintOneProcess(int select,PCB *q);
void PrintAllProcess(int select);
void FirstIn();
void FIFODo(int select);
void PriorityDo(int select);
void SlotDo(int select);
void Quit();
main()
{
while(1)
{
clrscr();
switch(Menu_Select())
{
case 1:
Creat(1);
FIFODo(1);
printf("\n\n\t\t按回车键返回菜单...");
getchar();
getchar();
break;
case 2:
Creat(2);
PriorityDo(2);
printf("\n\n\t\t按回车键返回菜单...");
getchar();
getchar();
break;
case 3:
Creat(3);
SlotDo(3);
printf("\n\n\t\t按回车键返回菜单...");
getchar();
getchar();
break;
case 0:
Quit();
break;
}
}
}

/*打印每个界面的开头显示*/
void ShowHead(char *s1,char *s2)
{
printf("\t ==================%s========================\n\n",s1);
printf("\t\t\t\t%s\n\n",s2);
printf("\t ========================================================\n\n");
}

/*主菜单*/
int Menu_Select()
{
int choose;
char s[2];
clrscr();
printf("====================进程调度算法模拟程序=====================\n\n");
printf("\t\t 1.先进先出调度策略\n");
printf("\t\t 2.优先数调度策略\n");
printf("\t\t 3.时间片轮转调度策略\n");
printf("\t\t 0.退出系统\n\n");
printf("=============================================================\n\n");
do
{
printf("\n请输入你的选择(0-3):");
scanf("%s",s);
choose=atoi(s);
}while(choose<0 || choose>3);
return choose;
}

/*创建调度算法的链表*/
void Creat(int select)
{
PCB *p,*q; //q为就绪队列的最后一个结点
int i,time,rounds;
char na[M];
ready=NULL;
finish=NULL;
run=NULL;
if(select==1) //先进先出调度创建
{
printf("\nEnter name and time of process:\n");
for(i=1;i<=N;i++)
{
p=(PCB *)malloc(sizeof(PCB));
scanf("%s",na);
scanf("%d",&time);
strcpy(p->name,na);
p->cputime=0;
p->needtime=time;
p->state='W';
p->next=NULL;
if(ready!=NULL) //就绪队列不为空
{
q->next=p;
q=p;
}
else //就绪队列为空
{
p->next=ready;
ready=p;
q=ready;
}
}
clrscr();
ShowHead("先进先出调度策略","FIFO dispatching algorithm ");
printf("\t\t name cputime needtime state\n");
PrintAllProcess(select); //打印出初始状态的信息
}
else if(select==2) //优先数调度创建
{
printf("\nEnter name and time of process:\n");
for(i=1;i<=N;i++)
{
p=(PCB *)malloc(sizeof(PCB));
scanf("%s",na);
scanf("%d",&time);
strcpy(p->name,na);
p->cputime=0;
p->needtime=time;
p->state='W';
p->prio=50-time;
if(ready!=NULL) //就绪队列不为空的时候
InsertPriority(p);
else //就绪队列为空
{
p->next=ready;
ready=p;
}
}//end of for()
clrscr();
ShowHead("优先级调度策略","Priority dispatching algorithm ");
printf("\t\t name cputime needtime prio state\n");
PrintAllProcess(select); //打印出初始状态的信息
}//end of else if()
else if(select==3) //时间片轮转调度创建
{
printf("\nEnter name and the time of process:\n");
for(i=1;i<=N;i++)
{
p=(PCB *)malloc(sizeof(PCB));
scanf("%s",na);
scanf("%d",&time);
strcpy(p->name,na);
p->cputime=0;
p->needtime=time;
p->count=0; //计数器
p->round=SLOT;
p->state='W';
if(ready!=NULL)
InsertSlot(p);
else
{
p->next=ready;
ready=p;
}
}
clrscr();
ShowHead("时间片轮转调度策略","Time slot dispatching algorithm ");
printf("\n\t\t name cputime needtime count slot state\n");
PrintAllProcess(select); //打印出初始状态的信息
}
run=ready; //从就绪队列取一个进程,使其运行,同时就绪队列的头指针后移
run->state='R';
ready=ready->next;
}

/*优先调度:把进程插入到合适的位置,就绪队列按优先级由高到低的顺序排列*/
void InsertPriority(PCB *q)
{
PCB *pre,*p;
int flag=1;
pre=NULL;
p=ready;
while(p!=NULL && flag)
{
if(p->prio>q->prio)
{
pre=p;
p=p->next;
}
else
flag=0;
}
if(pre==NULL)
{
q->next=ready;
ready=q;
}
else
{
pre->next=q;
q->next=p;
}
}

/*时间片轮转:把结点插入到就绪队列的末尾*/
void InsertSlot(PCB *q)
{
PCB *pre,*p;
pre=NULL;
p=ready;
while(p!=NULL)
{
pre=p;
p=p->next;
}
pre->next=q;
q->next=NULL; /*由于插入到队列的末尾,所以必须要使其的下一个结点为空值*/
}

/*打印一个信息*/
void PrintOneProcess(int select,PCB *q)
{
if(select==1)
printf("\t\t %-10s%-10d%-10d%c\n",q->name,q->cputime,q->needtime,q->state);
else if(select==2)
printf("\t\t %-10s%-10d%-10d%-10d%c\n",q->name,q->cputime,q->needtime,q->prio,q->state);
else if(select==3)
printf("\t\t %-10s%-10d%-10d%-10d%-10d%c\n",q->name,q->cputime,q->needtime,q->count,q->round,q->state);
}

/*将所有的进程打印出来,按运行,就绪,完成顺序打印*/
void PrintAllProcess(int select)
{
PCB *p;
if(run!=NULL)
PrintOneProcess(select,run);
p=ready;
while(p!=NULL)
{
PrintOneProcess(select,p);
p=p->next;
}
p=finish;
while(p!=NULL)
{
PrintOneProcess(select,p);
p=p->next;
}
}

/*把就绪队列的第一个进程调入运行*/
void FirstIn()
{
run=ready;
ready=ready->next;
run->state='R';
}

/*先进先出调度策略*/
void FIFODo(int select)
{
while(run!=NULL)
{

run->cputime=run->cputime+1;
run->needtime=run->needtime-1;
if(run->needtime==0) //进程执行结束
{
printf("\n\t\t name cputime needtime state\n");
run->next=finish;
finish=run;
run->state='F';
run=NULL;
if(ready!=NULL)
FirstIn();
PrintAllProcess(1);
}
}
}

/*优先级算法*/
void PriorityDo(int select)
{
while(run!=NULL)
{
printf("\n\t\t name cputime needtime prio state\n");
run->cputime=run->cputime+1;
run->needtime=run->needtime-1;
run->prio=run->prio-3;
if(run->needtime==0)
{
run->next=finish;
finish=run;
run->state='F';
run=NULL;
if(ready!=NULL)
FirstIn();
}
else if((ready!=NULL) && (run->prio < ready->prio))
{
run->state='W';
InsertPriority(run);
FirstIn();
}
PrintAllProcess(select);
}
}

/*时间片轮转算法*/
void SlotDo(int select)
{
while(run!=NULL)
{
printf("\n\t\t name cputime needtime count slot state\n");
run->count=run->count+1;
run->cputime=run->cputime+1;
run->needtime=run->needtime-1;
if(run->needtime==0) /*运行完成时*/
{
run->next=finish;
finish=run;
run->state='F';
run=NULL;
if(ready!=NULL)
FirstIn(); //就绪队列不为空,将就绪队列的第一个进程投入运行
}
else if(run->count==run->round) /*时间片已经到了,还未运行完成*/
{
run->count=0; //时间片
if(ready!=NULL)
{
run->state='W';
InsertSlot(run);
FirstIn();
}
}
PrintAllProcess(select); //打印本次的所有记录
}
}

void Quit()
{
char ch;
clrscr();
gotoxy(10,5);
printf("==========================================================\n\n");
printf(" Thank you for you using\n\n");
gotoxy(10,9);
printf("==========================================================\n\n");
gotoxy(13,15);

getchar();
printf("\n\t\tDo you really want to quit(y/Y or n/N):");
scanf("%c",&ch);
if(ch=='y' || ch=='Y')
{
printf("\n\t\t按任意键退出系统...");
getchar();
exit(0);
}

}

『拾』 在CPU按动态优先级调度(抢占式)的操作系统中的问题

1.可以这么说,没有运行进程就没有就绪进程。

2.也可以这么认为,不过计算机出问题时候才会出现。

3.在抢占式里是这样的,当然是就绪进程里面最高的。阻塞的不能算。

感觉你的问题有点怪怪的。因为我实在不知道怎么才会出现没有运行进程的状况。

阅读全文

与处理器调度优先级提升相关的资料

热点内容
一点点奶茶过滤器 浏览:435
搅拌车抽油滤芯怎么拆 浏览:958
茶山生活污水处理哪里有做 浏览:637
ro反渗透废水多故障 浏览:928
染料废水国内外研究现状 浏览:977
离子交换废水处理工艺 浏览:771
水处理设备技术资料培训 浏览:336
污水脱氮用醋酸可否 浏览:214
调节污水池提升泵 浏览:904
污水管道阀门用的多不多呢 浏览:712
农村污水治理哪个部门 浏览:542
超纯水洗脸有什么功效 浏览:681
搅拌站碱性污水怎么处理 浏览:568
播州区污水处理厂招标文件 浏览:141
提升网速换路由器还是无线网 浏览:87
500l超滤 浏览:287
纯水机怎么加尿素 浏览:525
史密斯净水器和滨特尔哪个好 浏览:709
高甲醚化氨基树脂乳液 浏览:962
过滤自救法是过滤 浏览:880