韓沐軒,徐艷
(成都錦城學院 計算機與軟件學院,四川成都,611731)
現(xiàn)在的城市交通存在以下一些問題:一、城市交通的基礎設施不夠完善。二、城市交通的設計不合理。三、城市交通的管理缺乏有效的機制。城市的交通問題將會影響一個城市的各個方面比如:擁堵的交通將會增加人們通勤的時間從而影響一個城市的經(jīng)濟發(fā)展、堵車也會浪費更多的資源并且產(chǎn)生更多的有害氣體污染空氣、同時面對一些緊急事情的處理上也會因為交通的擁堵可能造成一些嚴重的損失。計算機的操作系統(tǒng)和城市的交通系統(tǒng)在很多方面都十分的相似,因此我們可以通過計算機操作系統(tǒng)來幫助我們分析并解決城市的交通擁堵問題。所以,通過計算機操作系統(tǒng)的知識來解決交通擁堵對于中國城市未來的發(fā)展具有十分深遠的意義。
老城區(qū)的規(guī)劃和建造時間較早,然而隨著城市的發(fā)展和汽車保有量的不斷增加,這導致了老城區(qū)交通道路早已不能滿足如今的道路需要。因此,對老城區(qū)的交通道路進行相應的重新修建或者適當?shù)母脑欤@將會大大提高生活在附近居民的生活質(zhì)量以及出現(xiàn)的便利性。同時,在一些人文氣息濃厚的老城區(qū)通過交通條件的改善也會使其更加具有吸引力,從而帶動城市的旅游業(yè)和經(jīng)濟的發(fā)展[1]。
這時我們可以從操作系統(tǒng)原理中引入多線程的概念來幫助解決問題。一個程序可以有多個線程同時進行工作,這里的程序可以比作從老城區(qū)的A點到B點這個過程,而多線程可以比作從A點到B點的道路可以同時通過多輛汽車。然后通過下面的程序可以幫助我們更加直觀的了解多線程在解決老城區(qū)道路擁堵時起到的重要作用,我們設置a代表的是同方向汽車的數(shù)量,m代表車輛通過所需時間,用循環(huán)來實現(xiàn)得到每個車道通過所需時間,x代表為車道數(shù),當x越大時m的值就越小。
綜上所述我們可以得出結(jié)論就是當汽車的總量相同時車道數(shù)越多所需通過的時間越短。因此,老城區(qū)的交通擁堵問題可以通過擴建道路來進行緩解。
高速公路時常會因為雨雪天氣導致的道路的摩擦阻力減小等環(huán)境因素,駕駛?cè)藛T的安全意識淡薄、沒有遵守交通規(guī)則、駕駛水平較差或者存在疲勞駕駛等人為因素,汽車的輪胎使用時間過長導致的摩擦力變小或者制動的機械結(jié)構(gòu)損壞等汽車因素,從而導致發(fā)生嚴重的交通事故,進而導致產(chǎn)生了高速公路的交通擁堵現(xiàn)象[2]。
我國高速公路的建設標準一般都是單向兩車道以上,然而高速公路發(fā)生的事故一般都會涉及兩個車道及以上,這會導致高速公路單方向可通行的車道可能只有一個,但是因為高速公路事故導致?lián)矶碌能囕v會有兩三個車道,當交通警察抵達事故地點對后續(xù)車輛進行疏通時應該怎么樣安排不同車道的疏通順序才能使大家的擁堵時間變少呢?操作系統(tǒng)中的進程調(diào)度算法將會幫助交通警察更加高效的疏通道路。
首先,我們需要引入的算法有:先來先服務算法(FCFS)、短作業(yè)優(yōu)先算法(SJF/SPF)、時間片輪轉(zhuǎn)算法(RR)。
先來先服務算法(FCFS):按照進程進入就緒隊列的先后時間來進行排隊,先來的先執(zhí)行后來的后執(zhí)行,優(yōu)點是簡單,缺點是對于后面進入的進程不公平、而且使用這個算法有很大的不確定性,因為你并不能缺點是短進程先來還是長進程先來,而且通常會導致平均周期很長。
短作業(yè)優(yōu)先算法(SJF/SPF):當有多個進程在就緒隊列中排隊時,其中短進程優(yōu)先執(zhí)行并且當有更短的進程進入就緒隊列后會發(fā)生搶占讓更短的進程優(yōu)先執(zhí)行。在平均周期上會比先來先服務算法更短,然而這個也有缺點就是對短進程公平而對長進程不公平,在某些長進程的重要性上大于短進程時就會降低工作效率。
時間片輪轉(zhuǎn)算法(RR):規(guī)定一個固定的時間片例如1秒,當就緒隊列的第一個進程運行1秒之后就會排在隊列的最后一個,然后就是第二個進程運行1秒后排在之前第一個進程的后面,這樣一直重復循環(huán)。時間片輪轉(zhuǎn)算法的優(yōu)點就是對不管是長進程還是短進程都是公平的,但是對于該算法最大的缺點就是對時間片的設定上面,時間片過短會導致調(diào)度程序剝奪處理器的次數(shù)增加而讓系統(tǒng)的開銷增大,時間片過長會導致時間片輪轉(zhuǎn)算法變成效率較低的先來先服務算法[3]。
3.1.1 不同算法疏通道路的分析與比較
我們假定一個高速同向是三車道,因為前方發(fā)生了事故導致有兩個車道無法正常使用,現(xiàn)在有A、B、C三個個車道的車輛等待通行,其中A車道車輛到達事故地點時間為12:00通過需花費3分鐘,B車道車輛到達事故地點時間為12:02通過需花費6分鐘,C車道車輛到達事故地點時間為12:04通過需花費4分鐘,這時候交通警察該什么順序疏通三個車道的車輛從而使得大家的平均等待時間最短。以下代碼是通過C語言實現(xiàn)三種調(diào)度算法在該問題的運用:
(1)先來先服務(FCFS)程序:
void FCFS(vector
{Input(pcb,n);
TimeBubbleSort(pcb,n);
float tursum=0.0;
float Time=0;//運行總時間
for(int i=0;i {if(i==0) {pcb[0].fintime=pcb[0].sertime; Time=pcb[0].fintime;} Else {if(pcb[i].arrtime>Time){//如果前一個進程運行完成下一個進程沒有到達Time=pcb[i].arrtime;} pcb[i].fintime=pcb[i].sertime+Time;//更新一下程序運行的總時間 Time=pcb[i].fintime;} pcb[i].turtime=pcb[i].fintime-pcb[i].arrtime; tursum+=pcb[i].turtime;} Output(pcb,n,tursum); } (2)短進程優(yōu)先算法(SJF): void SJF(vector {Input(pcb,n); //先按照到達時間排序 TimeBubbleSort(pcb,n); float Time=0; bool flaghave=false; float tursum=0.0; //一次運行一個進程 //第一個進程一定先運行 pcb[0].fintim=pcb[0].sertime; pcb[0].flagrun=true; pcb[0].turtime=pcb[0].fintime-pcb[0].arrtime; Time=pcb[0].fintime; tursum+=pcb[0].turtime; for(int i=1;i {flaghave=false; //找出當前數(shù)組中還沒有運行的第一個pcb //不會存在全部運行過的情況,因為上面的for循環(huán)是n-1次,所以肯定剛好把下標從1~n-1的訪問完 int Minser=0; for(int index=1;index {if(!pcb[index].flagrun) {Minser=index;break;} } //找到之后,從第一個節(jié)點開始向后訪問,判斷有沒有到達時間小于Time的有:再找出服務時間最小的 for(int j=1;j {if((pcb[j].arrtime