導航:首頁 > 廢水知識 > 處理器調度優先順序提升

處理器調度優先順序提升

發布時間: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.在搶占式里是這樣的,當然是就緒進程裡面最高的。阻塞的不能算。

感覺你的問題有點怪怪的。因為我實在不知道怎麼才會出現沒有運行進程的狀況。

閱讀全文

與處理器調度優先順序提升相關的資料

熱點內容
厭氧池對於污水處理的作用 瀏覽:593
如何凈化浴池廢水 瀏覽:467
如何控制環氧樹脂玻璃鋼的固化溫度 瀏覽:134
四川環氧樹脂地坪漆施工廠家 瀏覽:525
處理過生活廢水為什麼生蛆 瀏覽:666
金科凈水器怎麼換濾芯兒 瀏覽:768
沁園台上式凈水器怎麼復位 瀏覽:111
小污水管道封堵氣囊 瀏覽:418
飲水機放水嘴邊漏水怎麼辦 瀏覽:299
廢水酸特別高如何處理 瀏覽:456
小區污水總管壞有誰出資維修 瀏覽:666
買了新的飲水機為什麼還有水 瀏覽:951
門口左側污水井填土有什麼講究嗎 瀏覽:91
換機油濾芯會有什麼後果 瀏覽:793
櫻花校園模擬器里怎樣提升好感度 瀏覽:174
廢水儲存池 瀏覽:450
反滲透膜制備的難點 瀏覽:35
反滲透膜價格實惠上海保茲 瀏覽:122
處理污水起大泡什麼原因 瀏覽:308
反滲透凈水機五根管子都是什麼 瀏覽:379