windows調度演算法
1. 急求 程序代碼 c/c++ 操作系統中的 處理機調度演算法
#include <iostream>
#include <stdio.h>
#include <string>
//#include <windows.h>
using namespace std;
//hyugtyftydrtdtrdrrtrdrt
struct Node
{
string name;//進程(作業)名稱
int arriveTime;//到達時間
int ServerTime;//服務時間
int leftTime;//the left time
Node *link;//指向下一個節點的指針
};
class CProcess
{
public:
CProcess();//構造函數
~CProcess();//析構函數
const CProcess &operator =(const CProcess& p);//重載賦值操作符
void insertNode(string &na,int& at,int& st);//插入新元素(at由小到大)到鏈表合適的位置
void sort();//按照服務時間由大到小排序
bool isEmpty();//判斷是否為空
void destroy();//銷毀
int length();//求出鏈表長度
void print();//列印出元素
void FCFS();//先到先服務
void SJF();//短進程(作業)優先
void RR(int& q);//時間片輪轉
void priority();//優先權調度
protected:
Node *first;
Node *last;
};
const CProcess& CProcess::operator=(const CProcess& p)
{
Node *newNode;
Node *Current;
if(this!=&p)//避免自己給自己賦值
{
if(first!=NULL)//如果鏈表不為空
destroy();
if(p.first==NULL)
{//如果要拷貝的對象為空
this->first = NULL;
this->last = NULL;
}
else
{
Current = p.first;
first= new Node;
first->name=Current->name;//
first->arriveTime=Current->arriveTime;
first->ServerTime=Current->ServerTime;
first->link =NULL;
last =first;
Current = Current->link;
while(Current!=NULL)
{
newNode = new Node;
newNode->name=Current->name;
newNode->arriveTime=Current->arriveTime;
newNode->ServerTime=Current->ServerTime;
newNode->link=NULL;
last->link=newNode;
last=newNode;
Current = Current->link;
}
}
}
return *this;
}
CProcess::CProcess()
{//構造函數
first=NULL;
last=NULL;
}
CProcess::~CProcess()
{
Node *temp;
while(first!=NULL)
{
temp=first;
first=first->link;
delete temp;
}
last=NULL;
}
void CProcess::insertNode(string &na,int& at,int& st)
{//按照到達時間升序排序
Node *Current;
Node *trailCurrent;//指向Current的前一個節點
Node *newNode;
bool found;
newNode = new Node;//建立一個新節點
newNode->name=na;
newNode->arriveTime=at;
newNode->ServerTime=st;
newNode->link=NULL;//
if(first==NULL)//如果第一個節點為空(如果是第一次插入元素)
first=newNode;//將新節點賦給第一個節點
else
{//如果不是第一次
Current =first;
found = false;
while(Current!=NULL && !found)
{
if(Current->arriveTime >= at)
found = true;
else
{
trailCurrent = Current;
Current = Current->link;
}
}
if(Current==first)
{
newNode->link = first;
first = newNode;
}
else
{
trailCurrent->link = newNode;
newNode->link = Current;
}
}
}
int CProcess::length()
{
int count =0;//聲明變數,並初始化為0(用來記錄長度)
Node *Current;
Current = first;
while(Current!=NULL)//當前節點不為空,記錄值自加,一直向後遍歷,
{
count++;
Current = Current->link;
}
return count;//返回長度
}
void CProcess::sort()//按照服務時間,升序排列
{//冒泡排序
string sname;
int at;
int st;
Node *Current;//指向當前節點
Node *trailCurrent;//指向當前節點的前一個節點
for(trailCurrent=first->link;trailCurrent!=NULL;trailCurrent=trailCurrent->link)//控制條件有問題
{
for(Current=trailCurrent->link;Current!=NULL;Current=Current->link)//控制條件有問題
{
if(trailCurrent->ServerTime > Current->ServerTime)
{
sname=trailCurrent->name;
at=trailCurrent->arriveTime;
st=trailCurrent->ServerTime;
trailCurrent->name=Current->name;
trailCurrent->arriveTime=Current->arriveTime;
trailCurrent->ServerTime=Current->ServerTime;
Current->name=sname;
Current->arriveTime=at;
Current->ServerTime=st;
}
}
}
}
bool CProcess::isEmpty()//判斷是否為空
{
return (first==NULL);//如果第一個節點為空,返回值
}
void CProcess::print()
{
Node *Current;
Current = first->link;//頭節點賦給當前節點
while(Current!=NULL)//當前節點不為空,一直向後遍歷列印
{
cout<<Current->name<<" ";
cout<<Current->arriveTime<<" ";
cout<<Current->ServerTime<<"\n";
Current = Current->link;
}
}
void CProcess::destroy()
{
Node *temp;//定義一個臨時指針變數
while(first!=NULL)
{
temp=first;
first=first->link;
delete temp;
}
last=NULL;
}
void CProcess::FCFS()//先到先服務
{
Node *Current;
int T0=0;//完成時間
int T1=0;//周轉時間
Current = first->link;//頭節點賦給當前節點
while(Current!=NULL)
{
if(T0 < Current->arriveTime)
{
T0=Current->arriveTime+Current->ServerTime;
T1=T0-Current->arriveTime;
cout<<Current->name<<"\t";//列印出進程名
cout<<T0<<"\t";//列印出完成時間
cout<<T1<<"\n";//列印出周轉時間
Current = Current->link;
}
else
{
T0=Current->ServerTime+T0;
T1=T0-Current->arriveTime;//周轉時間等於,完成時間 - 到達時間
cout<<Current->name<<"\t";//列印出進程名
cout<<T0<<"\t";//列印出完成時間
cout<<T1<<"\n";//列印出周轉時間
Current = Current->link;
}
}
}
void CProcess::SJF()//短進程(作業)優先
{
//首先執行第一個到達的作業
Node *Current;
int T0=0;//完成時間
int T1=0;//周轉時間
T0=first->link->ServerTime+T0;
T1=T0-first->link->arriveTime;
cout<<first->link->name<<"\t";
cout<<T0<<"\t";//列印出完成時間
cout<<T1<<"\n";//列印出周轉時間
first->link=first->link->link;//刪除
//執行剩下的
sort();//對剩下的排序
Current = first->link;//頭節點賦給當前節點
while(Current!=NULL)
{
if(T0 < Current->arriveTime)
{
T0=Current->arriveTime+Current->ServerTime;
T1=T0-Current->arriveTime;
cout<<Current->name<<"\t";//列印出進程名
cout<<T0<<"\t";//列印出完成時間
cout<<T1<<"\n";//列印出周轉時間
Current = Current->link;
}
else
{
T0=Current->ServerTime+T0;
T1=T0-Current->arriveTime;//周轉時間等於,完成時間 - 到達時間
cout<<Current->name<<"\t";//列印出進程名
cout<<T0<<"\t";//列印出完成時間
cout<<T1<<"\n";//列印出周轉時間
Current = Current->link;
}
}
}
void CProcess::RR(int& q)//時間片輪轉
{
cout<<"時間片輪轉操作完成!\n";
}
void CProcess::priority()//優先權調度
{
cout<<"優先權操作完成!\n";
}
void main()
{
CProcess p0,p1,p2,p3,p4;
int at,st;
string na;
int judge=1;//控制退出程序
int choice;//控制選擇操作
while(judge)
{
cout<<"********************************************************\n";
cout<<"****** 說明:本程序適用於單道進程(作業) ******\n";
cout<<"******** 請選擇您的操作 ***************\n";
cout<<"*********輸入相應的數字,按下(Enter)鍵!**************\n";
cout<<"************* 5.錄入信息 ************\n";
cout<<"************* 1.先到先服務 ************\n";
cout<<"************* 2.短進程(作業)優先 ************\n";
cout<<"************* 3.時間片輪轉 ************\n";
cout<<"************* 4.優先權(靜態)調度 ************\n";
cout<<"************* 0.退出程序 ************\n";
cout<<"********************************************************\n";
cin>>choice;
switch(choice)
{
case 0:
judge=0;
break;
case 5:
cout<<"請輸入信息以「end」結束輸入!\n";
cout<<"進程名 到達時間 服務時間"<<endl;
while(na.compare("end"))//如果相等則會返回0
{
p0.insertNode(na,at,st);
cin>>na>>at>>st;
}
cout<<"錄入成功,目前的信息為:\n";
cout<<"進程名 到達時間 服務時間"<<endl;
p0.print();
break;
case 1://先到先服務
p1=p0;//拷貝一份
if(p1.isEmpty())
{
cout<<"請先錄入信息\n";
break;
}
else
{
cout<<"先到先服務\n";
cout<<"進程名 完成時間 周轉時間\n";
p1.FCFS();
break;
}
case 2://短作業優先
p2=p0;//拷貝一份
//p2.sort();
//p2.print();
if(p2.isEmpty())
{
cout<<"請先錄入信息\n";
break;
}
else
{
cout<<"短作業優先\n";
cout<<"進程名 完成時間 周轉時間\n";
p2.SJF();
break;
}
case 3://時間片輪轉
p3=p0;//拷貝一份
int q;
if(p3.isEmpty())
{
cout<<"請先錄入信息\n";
break;
}
else
{
cout<<"請輸入時間片大小";
cin>>q;
cout<<"時間片輪轉\n";
cout<<"進程名 完成時間 周轉時間\n";
p3.RR(q);
break;
}
case 4://優先權
p4=p0;//拷貝一份
if(p4.isEmpty())
{
cout<<"請先錄入信息\n";
break;
}
else
{
cout<<"時間片輪轉\n";
cout<<"進程名 完成時間 周轉時間\n";
p4.priority();
break;
}
default:
cout<<"請選擇目錄中的選項!\n";
break;
}
}
return;
}
2. windows鍜宭inux澶氱嚎紼嬮偅涓蹇
浠庢ц兘瑙掑害鏉ョ湅錛孡inux鐨勫氱嚎紼嬮氬父姣擶indows鏇村揩銆傝繖鏄鍥犱負Linux鍐呮牳鍦ㄥ勭悊綰跨▼璋冨害鍜屽悓姝ユ椂鏇村姞楂樻晥銆侺inux鍐呮牳閲囩敤浜嗚緝涓虹伒媧葷殑璋冨害綆楁硶錛屽彲浠ユ洿濂藉湴鍒╃敤澶氭牳澶勭悊鍣ㄧ殑璁$畻鑳藉姏錛屼互鍙婃洿濂藉湴騫寵璐熻澆銆傛ゅ栵紝Linux鍐呮牳瀵圭嚎紼嬬殑鍒涘緩鍜岄攢姣佷篃鏇村姞杞婚噺綰э紝鍑忓皯浜嗙郴緇熷紑閿銆
鍙﹀栵紝Linux鎻愪緵浜嗘洿涓板瘜鐨勭郴緇熻皟鐢ㄦ帴鍙e拰宸ュ叿錛屼嬌寰楀紑鍙戣呰兘澶熸洿緇嗙矑搴﹀湴鎺у埗綰跨▼鐨勮屼負銆傚紑鍙戣呭彲浠ヤ嬌鐢╬thread搴撴潵鍒涘緩鍜岀$悊綰跨▼錛岃繖涓搴撴彁渚涗簡涓緋誨垪楂樻晥鐨勭嚎紼嬫搷浣滃嚱鏁般傛ゅ栵紝Linux榪樻敮鎸佹洿澶氱殑綰跨▼鍚屾ユ満鍒訛紝濡備俊鍙烽噺銆佷簰鏂ラ攣銆佹潯浠跺彉閲忕瓑錛屼嬌寰楃紪鍐欏苟鍙戠▼搴忔洿鍔犳柟渚褲
鍊煎緱涓鎻愮殑鏄錛學indows鐨勫氱嚎紼嬩篃鍦ㄤ笉鏂鏀硅繘鍜屼紭鍖栵紝鏈鏂扮増鏈鐨刉indows鎿嶄綔緋葷粺宸茬粡鎻愪緵浜嗕竴浜涙ц兘鎻愬崌鐨勭壒鎬э紝濡傜敤鎴鋒ā寮忚皟搴﹀櫒錛圲MS錛夊拰鐢ㄦ埛妯″紡瀹氭椂鍣錛圲MT錛夈傝繖浜涚壒鎬т嬌寰楀湪Windows涓婂紑鍙戝氱嚎紼嬪簲鐢ㄧ▼搴忔椂錛屼篃鑳藉熻幏寰楄緝楂樼殑鎬ц兘銆
鎬葷殑鏉ヨ達紝Linux鐨勫氱嚎紼嬪湪鎬ц兘涓婇氬父鏇村揩錛岃繖涓昏佸綊鍥犱簬鍏舵洿楂樻晥鐨勫唴鏍歌皟搴︽満鍒躲佽交閲忕駭鐨勭嚎紼嬬$悊鍜屼赴瀵岀殑緋葷粺璋冪敤鎺ュ彛銆傜劧鑰岋紝鍏蜂綋鐨勬ц兘宸寮傝繕鍙栧喅浜庡簲鐢ㄧ▼搴忕殑鐗圭偣銆佺‖浠剁幆澧冧互鍙婄紪鍐欎唬鐮佺殑璐ㄩ噺絳夊洜緔犮
3. 操作系統中的三級調度分別是指
處理器調度分為三級。分別是高級調度、中級調度和低級調度。
高級調度為作業調度、宏觀調度或者長程調度,其主要任務是按照一定的原則從外存上處於後備狀態的作業中選擇一個或者多個,分配內存、輸入輸出設備等必要的資源,並建立相應的進程,以使作業具有獲得競爭處理器的權利。
(3)windows調度演算法擴展閱讀:
注意事項:
定期清理Windows注冊表:防止注冊表垃圾使用Registry Cleaner這類工具。不要使用OutlookExpress,把垃圾郵件過濾器存放在注冊表中。注冊表的清理工具網上有很多,筆者給大家推薦兩款注冊表吸塵器和RegClear。但是有一點,清理前必須先備份注冊表。
盡可能不用管理員賬戶登錄:不要總用管理員賬戶登錄,尤其是從外部向你的PC中拷貝文件的時候。如果只是用普通許可權的用戶登錄,大多數惡意軟體都不能得逞。