趙敏強(qiáng)
【摘 要】論文首先簡(jiǎn)單介紹了小型操作系統(tǒng)和開發(fā)該系統(tǒng)的主要目的,其次闡述了操作系統(tǒng)重要的軟硬件知識(shí),通過查閱相關(guān)資料和技術(shù)文檔,對(duì)其中主要的問題,例如緩沖區(qū)、內(nèi)存管理、CPU任務(wù)調(diào)度等方面進(jìn)行了闡述和探討,明確了主要需要實(shí)現(xiàn)的功能,最后通過實(shí)際的測(cè)試不斷改進(jìn),得到一個(gè)成型的小型操作系統(tǒng)。
【Abstract】Firstly,the paper introduces the small operating system and the main purpose of developing the system, and then describes the important knowledge of software and hardware of the operating system.Through consulting relevant materials and technical documents, the main problems, such as buffer, memory management, CPU task scheduling and so on, are expounded and discussed.The main functions that need to be realized are defined. Finally, a miniature operating system is obtained by continuous improvement of the actual test.
【關(guān)鍵詞】操作系統(tǒng); 多任務(wù); 內(nèi)存管理
【Keywords】operating system; multitask; memory management
【中圖分類號(hào)】TP311 【文獻(xiàn)標(biāo)志碼】A 【文章編號(hào)】1673-1069(2018)05-0156-03
1 小型操作系統(tǒng)概述
1.1 操作系統(tǒng)的本質(zhì)
時(shí)至今日,在所參考的資料上并未發(fā)現(xiàn)關(guān)于操作系統(tǒng)的完整的統(tǒng)一定義。本文認(rèn)為軟件的產(chǎn)生是為了更好地使用硬件設(shè)備,操作系統(tǒng)作為底層系統(tǒng)軟件,為應(yīng)用軟件與硬件提供了接口,為用戶與應(yīng)用軟件提供接口。因此,本質(zhì)上操作系統(tǒng)就是為了解決計(jì)算機(jī)系統(tǒng)問題的一套解決方案。
簡(jiǎn)而言之,不論解決方案是否完善,是否高效,當(dāng)它確實(shí)起到解決計(jì)算機(jī)系統(tǒng)關(guān)鍵問題的作用,那么就可以被稱為操作系統(tǒng)。
1.2 小型操作系統(tǒng)簡(jiǎn)介
本文闡述的小型操作系統(tǒng)是一種功能簡(jiǎn)易,構(gòu)造簡(jiǎn)單的操作系統(tǒng)。
1.2.1 小型操作系統(tǒng)的特點(diǎn)
①體量小
一般的現(xiàn)代操作系統(tǒng)功能完備,因此體量都比較大。而本文設(shè)計(jì)的操作系統(tǒng)相對(duì)簡(jiǎn)陋,很多核心功能的實(shí)現(xiàn)策略都采用了較為簡(jiǎn)單的種類,因此體量很小,根據(jù)實(shí)際測(cè)試檢驗(yàn),本文的操作系統(tǒng)核心小于40KB。
②對(duì)硬件要求低
本文開發(fā)的操作系統(tǒng)是一款成本低廉的操作系統(tǒng),其需要的存儲(chǔ)介質(zhì)是市場(chǎng)上淘汰的便宜軟盤,由于設(shè)計(jì)系統(tǒng)為32位系統(tǒng),所以對(duì)于CPU有一定要求,要等于或高于Intel 80386版本。
1.2.2 小型操作系統(tǒng)的應(yīng)用范圍
由于體量小,對(duì)硬件的要求低,小型操作系統(tǒng)可以運(yùn)行在嚴(yán)酷的硬件環(huán)境中,32M左右的存儲(chǔ)空間就足以運(yùn)行。需要注意的是,本文所闡述的操作系統(tǒng)主要用于加強(qiáng)對(duì)操作系統(tǒng)理論的理解,因此商業(yè)應(yīng)用并不在設(shè)計(jì)的需求內(nèi)。
2 操作系統(tǒng)的發(fā)展
2.1 發(fā)展歷史簡(jiǎn)述
歷史上,最早的計(jì)算機(jī)使用的是人工操作,數(shù)據(jù)和程序都需要穿孔在紙帶或卡片上,然后通過輸入輸出設(shè)備送入計(jì)算機(jī)。這種方式煩瑣且容易出錯(cuò),設(shè)備利用率也很低,所以后來人們創(chuàng)造了執(zhí)行系統(tǒng),用以控制和管理計(jì)算機(jī),并對(duì)重復(fù)的操作實(shí)現(xiàn)自動(dòng)化,在這個(gè)階段,已經(jīng)可以同時(shí)提交多個(gè)作業(yè)了,但是在處理上一次只會(huì)有一個(gè)作業(yè)被處理,這樣處理設(shè)備的能力就被浪費(fèi)了。
后面,就出現(xiàn)了多道程序設(shè)計(jì)的理論,該理論允許多個(gè)程序進(jìn)入內(nèi)存,實(shí)質(zhì)上處理器仍然是在處理單個(gè)程序,但是在宏觀上,多個(gè)程序處于運(yùn)行中但尚未結(jié)束的狀態(tài)。雖然這樣做會(huì)導(dǎo)致作業(yè)的處理周期變長(zhǎng),但對(duì)設(shè)備資源的利用率極大地提高了。
從半自動(dòng)的執(zhí)行系統(tǒng)到自動(dòng)化的多道批處理,這個(gè)轉(zhuǎn)變花費(fèi)了很長(zhǎng)的時(shí)間,主要是存儲(chǔ)介質(zhì)的問題。之后多數(shù)書籍上提到的三類操作系統(tǒng)(多道批處理、分時(shí)、實(shí)時(shí))就逐次問世了,本文認(rèn)為這三類操作系統(tǒng)的出現(xiàn)其實(shí)與時(shí)代環(huán)境相關(guān)。多道批處理出現(xiàn)較早,其理論早在執(zhí)行系統(tǒng)時(shí)代就有雛形。分時(shí)操作系統(tǒng)建立于一個(gè)網(wǎng)絡(luò)相對(duì)發(fā)達(dá),但計(jì)算機(jī)設(shè)備昂貴的時(shí)代,分時(shí)的核心就是讓多個(gè)用戶共同使用一臺(tái)計(jì)算機(jī),但要讓每個(gè)人都感覺自己在獨(dú)享資源。解決辦法就是時(shí)間片輪轉(zhuǎn)策略。實(shí)時(shí)操作系統(tǒng)建立于一個(gè)信息發(fā)達(dá)的時(shí)代,它需要系統(tǒng)快速穩(wěn)定地獲取數(shù)據(jù)處理結(jié)果,并快速地反饋給對(duì)應(yīng)設(shè)備,以此來實(shí)時(shí)控制某些生產(chǎn)或處理過程。比較常見的例子就是金融行業(yè)用的操作系統(tǒng)[1]。
2.2 總結(jié)與展望
操作系統(tǒng)發(fā)展一直與社會(huì)需求有關(guān),不同的需求會(huì)導(dǎo)致對(duì)應(yīng)的操作系統(tǒng)不同特性。從目前來看,人工智能、量子通信、云計(jì)算、混合現(xiàn)實(shí)技術(shù)正當(dāng)社會(huì)的關(guān)注熱點(diǎn),為了支撐這些技術(shù)的進(jìn)一步發(fā)展與普及,對(duì)應(yīng)的操作系統(tǒng)也將成為社會(huì)資源和開發(fā)者們關(guān)注與研究的目標(biāo)。
3 小型操作系統(tǒng)的設(shè)計(jì)原理與實(shí)現(xiàn)方法
3.1 多任務(wù)調(diào)度
CPU進(jìn)程調(diào)度有很多算法,這里主要采用多級(jí)隊(duì)列調(diào)度算法和時(shí)間片輪轉(zhuǎn)算法。通俗解釋,人為劃分多個(gè)隊(duì)列,按進(jìn)程的特性和對(duì)資源的需求程度劃分入隊(duì)列,每個(gè)隊(duì)列都有自己的優(yōu)先級(jí),一般來說,優(yōu)先級(jí)的設(shè)置與用戶體驗(yàn)有很大關(guān)系,比如鍵盤鼠標(biāo)的信息讀取這一類就要設(shè)置較高優(yōu)先級(jí),以便及時(shí)反應(yīng)。
在隊(duì)列內(nèi)采取時(shí)間片輪轉(zhuǎn)的策略,當(dāng)優(yōu)先級(jí)較高的隊(duì)列內(nèi)已沒有進(jìn)程時(shí),才開始執(zhí)行低一級(jí)的隊(duì)列。如果低優(yōu)先級(jí)隊(duì)列的任務(wù)運(yùn)行時(shí)出現(xiàn)了更高優(yōu)先級(jí)的任務(wù),則在下次任務(wù)切換時(shí)必須無條件切換回該優(yōu)先級(jí)隊(duì)列的任務(wù)。
時(shí)間片輪轉(zhuǎn)算法的效率很大程度上依賴時(shí)間片的劃分,一般操作系統(tǒng)的切換動(dòng)作間隔10ms到100ms。切換動(dòng)作本身也有消耗,大概平均消耗時(shí)間在0.01ms左右。假設(shè)時(shí)間片只有0.02ms,那么處理器處理能力的50%都會(huì)被消耗在自身的切換動(dòng)作上。反言之,若時(shí)間片太長(zhǎng),就會(huì)退化為FCFS策略。
采用這種方式可以有效地防止輸入輸出設(shè)備的進(jìn)程被應(yīng)用程序搶占,極大地提高用戶體驗(yàn),同時(shí)保障了系統(tǒng)的穩(wěn)定運(yùn)行。
3.2 內(nèi)存管理
本文采取的策略是可變分區(qū)存儲(chǔ)管理。在內(nèi)存中設(shè)置一張內(nèi)存地址管理表,記錄可用內(nèi)存和不可用內(nèi)存的起始地址。一開始,所有內(nèi)存可用于用戶進(jìn)程,當(dāng)新進(jìn)程需要內(nèi)存時(shí)就為它查找一塊足夠大的內(nèi)存,進(jìn)程運(yùn)行完釋放內(nèi)存。長(zhǎng)期運(yùn)轉(zhuǎn)之后,內(nèi)存就會(huì)被分隔成大小不一的塊,相鄰內(nèi)存塊合并,左右不相鄰的就將該信息棄置最后。
實(shí)現(xiàn)上相對(duì)較繁雜,首先是給內(nèi)存管理表劃分約32KB的存儲(chǔ)空間,接下來創(chuàng)建2個(gè)結(jié)構(gòu)體,分別為可用內(nèi)存信息和內(nèi)存管理。
在實(shí)現(xiàn)過程中最麻煩的是釋放內(nèi)存后的可用內(nèi)存信息合并。為了方便整理,free[ ]會(huì)按照結(jié)構(gòu)體中的地址變量addr排序。釋放內(nèi)存函數(shù)被調(diào)用后會(huì)先進(jìn)行排序,排序法為插入排序。以此決定新紀(jì)錄將要防置的位置。此時(shí)新紀(jì)錄并未被放入記錄表。然后判斷自身所記錄的地址是否與前面記錄的地址合并,用free[i-1].addr+free[i-1].size==free[i].addr來判斷。然后被前面的記錄合并,接下來和后一位記錄判斷是否可以合并,公式與左側(cè)合并類似,合并完成后銷毀所有被合并的記錄。將后方的記錄向前移1位。
在第二次判斷時(shí),有可能無法與右側(cè)合并,此時(shí)就可以結(jié)束釋放過程。
如果左側(cè)無法歸納合并,就與右側(cè)判斷,然后不需要后續(xù)記錄的移位。
如果左右皆不可以歸納合并,則將其置入記錄表,其右側(cè)的向右移1位,并更新可用狀況表的最大值。此處還需要增加一個(gè)判斷,以確定是否有溢出問題,如果有則在記錄表的錯(cuò)誤報(bào)告數(shù)上累加。
3.3 緩沖區(qū)
緩沖區(qū)設(shè)計(jì)為FIFO型緩沖區(qū),在最開始的設(shè)計(jì)中,F(xiàn)IFO緩沖區(qū)只維護(hù)最后寫入的數(shù)據(jù)的位置,讀取最先進(jìn)去的數(shù)據(jù)后進(jìn)行數(shù)據(jù)向前移送。但這種做法的效率很低,且移送數(shù)據(jù)處于禁止中斷中。所以最后采取的策略是維護(hù)兩個(gè)位置。一個(gè)是下一個(gè)要寫入的數(shù)據(jù)的位置,另一個(gè)是下一個(gè)要讀取的數(shù)據(jù)的位置。同時(shí)用程序設(shè)置,當(dāng)下一個(gè)要操作的位置為緩沖區(qū)的終點(diǎn)時(shí),強(qiáng)制將操作位置跳轉(zhuǎn)到緩沖區(qū)的起點(diǎn)。
首先將緩沖區(qū)定義為可變的,緩沖區(qū)總字節(jié)數(shù)保存在變量size中,設(shè)置一個(gè)變量free保存緩沖區(qū)里沒有數(shù)據(jù)的字節(jié)數(shù),變量buff保存緩沖區(qū)的地址,p表示下一個(gè)寫入地址,q表示下一個(gè)讀出地址。
3.4 屏幕與字符顯示
操作系統(tǒng)是人機(jī)交互的接口,對(duì)于機(jī)器語言必須轉(zhuǎn)化成操作者可以看懂的字符。顯示字符需要先顯示出一個(gè)屏幕。先不考慮鼠標(biāo)等設(shè)備,只繪制一個(gè)屏幕,并顯示英文字符。
3.4.1 屏幕繪制
屏幕的顯示需要處理顏色,一般使用RGB方式的顏色是用24位二進(jìn)制指定顏色,而本文采取的是調(diào)色板模式,采用8位二進(jìn)制,由程序員指定0~255的數(shù)字所對(duì)應(yīng)的顏色。
寫入調(diào)色板的具體流程:記錄中斷許可標(biāo)志位的值→禁止中斷→將想要設(shè)定的調(diào)色板號(hào)碼寫入0x03c8→按R、G、B順序?qū)懭?x03c9→恢復(fù)許可標(biāo)志的值。
讀取與之類似,但調(diào)色板號(hào)碼寫入的是0x03c7地址,讀取仍然按照R、G、B順序從0x03c9讀取。
之后只要利用顯存(VRAM)與畫面模式中像素點(diǎn)的關(guān)系繪制直線,重復(fù)繪制直線,變?yōu)橛刑畛渖木匦?。這就構(gòu)成了操作系統(tǒng)的屏幕[2]。
3.4.2 字符顯示
本質(zhì)上,所有的圖標(biāo)都是用二進(jìn)制數(shù)描繪的,字符也不例外。在使用32位模式顯示字符前可以調(diào)用BIOS的函數(shù)顯示字符。字符的顯示使用像素點(diǎn)陣,用8*16的二進(jìn)制數(shù)表示一個(gè)字符,即16字節(jié)表示一個(gè)字符。繪制鼠標(biāo)圖案也是同理,唯一的區(qū)別就是鼠標(biāo)的規(guī)劃大小是16*16.
3.5 鍵盤與鼠標(biāo)信息的獲取
鼠標(biāo)與鍵盤和操作系統(tǒng)主要依靠中斷的方式實(shí)現(xiàn),鍵盤的中斷號(hào)碼是IRQ1,鼠標(biāo)的中斷號(hào)碼是IRQ12,從中斷號(hào)碼來看,鼠標(biāo)的出現(xiàn)相對(duì)較晚。從參考資料來看,由于鼠標(biāo)動(dòng)一下就會(huì)產(chǎn)生中斷,所以最初的鼠標(biāo)幾乎不被多數(shù)操作系統(tǒng)支持。所以在后來的設(shè)計(jì)中,雖然在主板上制作了鼠標(biāo)的電路,但如果不激活鼠標(biāo)的指令,就不會(huì)產(chǎn)生鼠標(biāo)的中斷信號(hào)。
而最關(guān)鍵的鼠標(biāo)激活指令需要先完成鍵盤的初始化。換句話說就是要先激活鍵盤。
除此以外,鼠標(biāo)還需要一些額外的操作。這是因?yàn)槭髽?biāo)的IRQ12在從PIC上,主/從PIC協(xié)調(diào)不會(huì)自動(dòng)完成,所以需要在通知IRQ12受理完成后,通知主PIC IRQ2受理完成。
4 演示效果
用QEMU模擬,結(jié)果如下圖3所示,光標(biāo)閃爍正常,鼠標(biāo)移動(dòng)正常,鍵盤輸入正常。
上圖3中主要參數(shù)是測(cè)試使用的,第一行是鼠標(biāo)位于的屏幕坐標(biāo)值,第二行第一個(gè)參數(shù)是鍵盤按鍵后返回值,鍵盤按鍵在按下和彈起兩個(gè)動(dòng)作顯示的值不同。中括號(hào)里的值是鼠標(biāo)相對(duì)位移(與前一次刷新相比)。第三行是內(nèi)存檢查。顯示的是開機(jī)后內(nèi)存使用情況。
本文所設(shè)計(jì)的小型操作系統(tǒng)主要以命令行的形式控制。因此設(shè)計(jì)并制作了控制臺(tái)窗口。
5 結(jié)語
本文介紹了一個(gè)小型操作系統(tǒng)的設(shè)計(jì)與開發(fā)過程。本文的主要目的是通過實(shí)現(xiàn)一個(gè)功能簡(jiǎn)陋的操作系統(tǒng),在試錯(cuò)過程中不斷學(xué)習(xí)相關(guān)知識(shí)點(diǎn),更好的理解操作系統(tǒng)概念。本文的小型操作系統(tǒng)雖然簡(jiǎn)陋,但是仍然可以繼續(xù)開發(fā)進(jìn)一步完善。小型操作系統(tǒng)的很多設(shè)計(jì)思想與現(xiàn)代商用操作系統(tǒng)基本一致,但在源碼編寫難度上卻大大降低了,且在多處采用了較為簡(jiǎn)單的思路,易于理解。
【參考文獻(xiàn)】
【1】郭景,陳賢富.一種符合OSEK標(biāo)準(zhǔn)的操作系統(tǒng)微內(nèi)核設(shè)計(jì)[J].微電子學(xué)與計(jì)算機(jī), 2017,34(11):16-20.
【2】陳云龍.小型微內(nèi)核操作系統(tǒng)內(nèi)核模型設(shè)計(jì)與實(shí)現(xiàn)[J].信息與電腦(理論版), 2011(05):80-82.