999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于PC體系結(jié)構(gòu)的嵌入式操作系統(tǒng)實(shí)現(xiàn)

2008-10-11 09:01:20

羅 斌

【摘要】文章介紹了一個(gè)基于PC體系結(jié)構(gòu)的嵌入式操作系統(tǒng),從CPU的16位實(shí)模式切換到32位保護(hù)模式,包括中斷控制器、系統(tǒng)時(shí)鐘等在內(nèi)的系統(tǒng)硬件初始化過程,全局描述符表、中斷描述符表等內(nèi)核運(yùn)行環(huán)境的建立,進(jìn)程的定義以及調(diào)度算法,進(jìn)程切換方面介紹了一個(gè)具備基本功能的嵌入式操作系統(tǒng)。

【關(guān)鍵詞】PC;嵌入式操作系統(tǒng);CPU保護(hù)模式

當(dāng)前,嵌入式操作系統(tǒng)已經(jīng)獲得非常廣泛的應(yīng)用,涉及的領(lǐng)域包括通信、軍事、航空航天、以及生活等方方面面。目前市場上比較有名且占有一定市場分額的操作系統(tǒng)有VxWork、uLinux、uC/OS-II、eCos等,他們有各自的優(yōu)點(diǎn),VxWork經(jīng)過了長時(shí)間的發(fā)展和實(shí)際應(yīng)用的考驗(yàn),在關(guān)鍵應(yīng)用領(lǐng)域仍是一支獨(dú)秀。uLinux則可以利用廣泛的Linux資源,便于開發(fā)等等。

由于操作系統(tǒng)的基本功能是硬件無關(guān)的,因此這部分可以使用C語言進(jìn)行開發(fā),而平臺相關(guān)的部分只需要使用匯編語言,但是只要設(shè)計(jì)好代碼框架,就可以做到方便移植。選擇了PC作為最初的目標(biāo)平臺,是因?yàn)閤86體系結(jié)構(gòu)應(yīng)用范圍越來越廣,而且可以在開發(fā)x86版本后再移植到其他平臺。

一、操作系統(tǒng)簡介

操作系統(tǒng)在功能上主要是負(fù)責(zé)管理計(jì)算機(jī)的資源,這些資源包括CPU、內(nèi)存、外部存儲器、還有一些其他的外設(shè)。

從結(jié)構(gòu)上則分為單一內(nèi)核和微內(nèi)核結(jié)構(gòu),單一內(nèi)核的代表就是UNIX、Linux,這類操作系統(tǒng)的內(nèi)核是一個(gè)整體,功能都包含在內(nèi)核里面,有點(diǎn)“大雜燴”的味道,其優(yōu)點(diǎn)就是由于功能都包含在內(nèi)核中,因此內(nèi)核很緊湊,且效率較高。而且?guī)淼娜秉c(diǎn)就是當(dāng)一個(gè)功能模塊需要修改時(shí),就必須將內(nèi)核全部編譯一次。微內(nèi)核結(jié)構(gòu)的代表就是windows系列,其內(nèi)核提供的功能很少,僅有一些基本的功能,其他的功能全部作為擴(kuò)展模塊連接進(jìn)入核心,這樣的好處就是各個(gè)功能模塊在接口不變的時(shí)候,可以很方便的更新而不影響系統(tǒng),給系統(tǒng)提供了最大的靈活性。帶來的缺點(diǎn)是結(jié)構(gòu)不夠緊湊,造成一定的資源浪費(fèi),同時(shí)也對運(yùn)行效率產(chǎn)生一定影響。本系統(tǒng)采用的是單一內(nèi)核結(jié)構(gòu)。

操作系統(tǒng)的開發(fā)通常是在UNIX、Linux下使用GNU Compiler Collection(GCC)進(jìn)行開發(fā)編譯。一般認(rèn)為不能在Windows下開發(fā),并且認(rèn)為微軟提供的開發(fā)工具不能進(jìn)行此類開發(fā)。但是本操作系統(tǒng)是在Windows下開發(fā)使用Microsoft Visual C/C++ 6(VC6)進(jìn)行開發(fā)。

二、CPU保護(hù)模式初始化

PC在通電后運(yùn)行于16位實(shí)模式,其尋址能力為64K,而嵌入式系統(tǒng)的配置范圍非常廣泛,僅僅考慮16位的尋址范圍顯然不適合當(dāng)前的發(fā)展要求。而i386及其以上的CPU的尋址能力都達(dá)到了4G,因此需要設(shè)計(jì)能支持4G內(nèi)存的操作系統(tǒng)。

在系統(tǒng)引導(dǎo)時(shí),首先建立一個(gè)臨時(shí)的全局描述符表(GDT),這個(gè)全局描述符表中有5個(gè)描述符,第一個(gè)必須設(shè)為0,這是x86處理器規(guī)定的,稱為啞描述符。其中兩個(gè)是16位保護(hù)模式代碼段和數(shù)據(jù)段的描述符,用于在切換CPU運(yùn)行模式的時(shí)候,保證初始化代碼仍然能夠正常運(yùn)行。另外兩個(gè)是32位保護(hù)模式下的代碼段和數(shù)據(jù)的描述符,用于CPU內(nèi)核運(yùn)行。

由于CPU在復(fù)位時(shí)是處于16位實(shí)模式,所以初始化代碼是16位實(shí)模式下的代碼,這部分的代碼的作用是為切換到16位保護(hù)模式準(zhǔn)備運(yùn)行環(huán)境,主要的工作是設(shè)置GDT。具體地做法是根據(jù)當(dāng)前的段寄存器計(jì)算GDT中相應(yīng)段描述符的值。

再設(shè)置好GDT后,就可以將CPU切換到保護(hù)模式下運(yùn)行。將CPU切換到保護(hù)模式的方法是,將cr0寄存器的0位設(shè)置為1,代碼為:

……

mov eax,cr0

or eax,1

mov cr0,eax

……

再切換到保護(hù)模式運(yùn)行后,由于CPU有指令預(yù)取機(jī)制,所以在指令隊(duì)列中已經(jīng)存在了下一跳指令,而且需要刷新代碼段寄存器,為了防止運(yùn)行出錯(cuò),必須刷新指令隊(duì)列已近代碼段寄存器。由于需要在一條指令中同時(shí)刷新段寄存器和指令隊(duì)列,所有需要手動構(gòu)造一條段間轉(zhuǎn)移指令。代碼為:

……

db0eah

dwoffset init

dwtemp_code_sel

init:

……

完成后CPU即進(jìn)入16位保護(hù)模式運(yùn)行。

三、建立內(nèi)核運(yùn)行環(huán)境

進(jìn)入內(nèi)核后,首先必須建立運(yùn)行環(huán)境,對于INTEL的CPU來說,就是建立兩個(gè)系統(tǒng)表,一個(gè)是全局描述符表(GDT),一個(gè)是中斷描述符表(IDT)。

(一)全局描述符表初始化

在CPU由16位實(shí)模式切換到32位保護(hù)模式的時(shí)候,建立了一個(gè)臨時(shí)的GDT。但是進(jìn)入內(nèi)核后,需要一個(gè)真正的描述符表,不能在繼續(xù)使用這個(gè)臨時(shí)的GDT,否則在以后的任務(wù)切換中將會遇到麻煩。

由于假設(shè)系統(tǒng)運(yùn)行在單一地址空間,因此全局描述符表僅需要3個(gè)描述符,可以使用數(shù)組定義如下:

DESC gdt[4] = { {0,0,0,0,0,0},

{0xffff,0x0000,0x00,0x9a,0xcf,0x00}, // 代碼段

{0xffff,0x0000,0x00,0x92,0xcf,0x00} // 數(shù)據(jù)段

};

定義了新的全局表述附表后,就可以將GDT更換為新的描述符表,并且將段寄存器CS的值更換為新的段選擇子的值。

(二)中斷描述符表初始化

運(yùn)行環(huán)境的另一個(gè)重要的系統(tǒng)表就是中斷描述符表,他決定了由哪個(gè)程序來響應(yīng)系統(tǒng)的中斷或者陷阱。在保護(hù)模式初始化時(shí),并沒有對IDT進(jìn)行初始化,甚至沒有定義中斷描述符表,那是因?yàn)樵谶M(jìn)行保護(hù)模式切換時(shí),可以保證系統(tǒng)運(yùn)行于關(guān)中段狀態(tài),保證初始化本身也不使用任何的軟中斷指令,這樣就可以在沒有對IDT初始化的情況下,確保不會發(fā)生因中斷描述符表沒有設(shè)置而導(dǎo)致的錯(cuò)誤。

由于INETL的CPU可以響應(yīng)256個(gè)中斷,因此系統(tǒng)IDT最大有256個(gè)描述符,但是實(shí)際系統(tǒng)中并不需要那么多,所以可以根據(jù)需要進(jìn)行設(shè)置,在本系統(tǒng)中,為了節(jié)約空間,僅定義了64個(gè)。

定義后并將其初始化,使用一個(gè)默認(rèn)過程來初始化,這個(gè)默認(rèn)的過程什么工作都不作,僅僅是簡單的返回。默認(rèn)過程定義如下:

__declspec( naked )

void default_int()

{

__asm iretd ;

}

這里使用了__declspec( naked )這個(gè)由VC6提供的特有關(guān)鍵字,它可以讓編譯器不生成函數(shù)的環(huán)境初始化代碼,所有的操作都交由程序員來完成。因此可以使用VC6來編寫中斷處理程序,這也是為什么選擇VC6來編寫這個(gè)操作系統(tǒng)的原因。

(三)系統(tǒng)基本硬件初始化

系統(tǒng)環(huán)境建立后,需要對硬件設(shè)備進(jìn)行初始化,為了保證通用性,僅初始化大多數(shù)系統(tǒng)都會有的硬件,就是系統(tǒng)時(shí)鐘。

在PC系統(tǒng)中要初始化系統(tǒng)時(shí)鐘,必須首先初始化中斷控制器,因?yàn)橄到y(tǒng)時(shí)鐘是通過中斷控制器接入系統(tǒng)的。由于INTEL已經(jīng)保留了CPU的0-31號中斷,因此中斷控制器的中斷只能從32號中斷開始。在本系統(tǒng)中,中斷控制器接入CPU的中斷號從32開始,到47,一共16個(gè),另外保留16個(gè)中斷門作為系統(tǒng)調(diào)用的入口,為以后擴(kuò)展功能留下一定的余地。

四、 進(jìn)程定義及調(diào)度

(一)進(jìn)程定義

任何操作系統(tǒng),最重要的概念就是進(jìn)程,進(jìn)程通常表示一個(gè)執(zhí)行的程序,它包括可執(zhí)行的程序、程序數(shù)據(jù)、棧、程序計(jì)數(shù)器等等程序運(yùn)行需要的信息。在本系統(tǒng)中,由于并沒有涉及復(fù)雜的功能,所以進(jìn)程結(jié)構(gòu)的定義比較簡單。僅包含調(diào)度相關(guān)的信息和一些基本進(jìn)程信息

struct _task

{

struct _node task_node;

char task_cputime;

BYTEtask_stat;

BYTEtask_pri;

BYTEtask_pril;

DWORD task_prinum;

int task_sleep;

void *task_sp;

char *task_name;

int task_id;

int task_pid;

unsigned int task_errcode;

};

(二)調(diào)度算法

本系統(tǒng)采用的調(diào)度算法是以優(yōu)先級為主,輔以時(shí)間片輪轉(zhuǎn)的調(diào)度算法。以優(yōu)先級為主的調(diào)度算法,可以保證高優(yōu)先級的進(jìn)程可以搶占CPU,以保證實(shí)時(shí)任務(wù)得到及時(shí)響應(yīng),而輔以時(shí)間片輪轉(zhuǎn),則可以保證優(yōu)先級相同時(shí),各進(jìn)程公平的獲得CPU時(shí)間。

系統(tǒng)調(diào)度過程是調(diào)度器根據(jù)優(yōu)先級從高到低的原則掃描系統(tǒng)進(jìn)程表,在發(fā)現(xiàn)某個(gè)優(yōu)先級存在可調(diào)度進(jìn)程的時(shí)候,就轉(zhuǎn)入掃描該優(yōu)先級的進(jìn)程表,如果該優(yōu)先級中存在多個(gè)任務(wù),就根據(jù)時(shí)間片輪轉(zhuǎn)的原則挑選出進(jìn)程,然后將CPU的控制權(quán)交給挑選出來的進(jìn)程。

五、結(jié)語

這僅僅是一個(gè)最簡單的操作系統(tǒng)內(nèi)核,沒有提供任何額外的系統(tǒng)服務(wù),包括一些類似系統(tǒng)延時(shí)、互斥對象、定時(shí)器這樣的基本功能,但是有了基本的內(nèi)核后,就可以在其上發(fā)展,使其逐漸發(fā)展壯大。

【參考文獻(xiàn)】

[1]John Lions. Lion's Commentary on UNIX 6th Edition with Source Code [M].機(jī)械工業(yè)出版社,2000.

[2]Andrew S. Tanenbaum. Modern Operating Systems [M].機(jī)械工業(yè)出版社,1999.

[3]Jean J. Labrosse. MicroC/OS_II The Real-Time Kernel Sec-

ond Edition [M].北京航空航天大學(xué)出版社,2003.

[4]楊季文.80X86匯編語言程序設(shè)計(jì)教程[M].清華大學(xué)出版社,1998.

【作者簡介】羅斌(1978- ), 男 ,廣西馬山人,廣西電網(wǎng)公司南寧供電局助理工程師。

主站蜘蛛池模板: 亚洲AⅤ永久无码精品毛片| 尤物视频一区| 国产精品亚洲欧美日韩久久| 国内精品小视频福利网址| 毛片视频网址| 91青青在线视频| 欧美日韩第二页| 亚洲精品动漫在线观看| 热热久久狠狠偷偷色男同| 成人在线观看一区| 漂亮人妻被中出中文字幕久久| 国语少妇高潮| www.精品视频| 国产啪在线91| 波多野结衣中文字幕久久| 中国国产一级毛片| 久久精品视频一| a在线亚洲男人的天堂试看| 亚洲精品爱草草视频在线| 欧美a在线| 国产啪在线| 77777亚洲午夜久久多人| 亚洲国产高清精品线久久| 波多野结衣爽到高潮漏水大喷| 九色综合伊人久久富二代| 亚洲av无码成人专区| 一级黄色网站在线免费看| 亚洲国产中文在线二区三区免| 亚洲乱伦视频| 午夜少妇精品视频小电影| 久操中文在线| 欧美高清国产| 精品黑人一区二区三区| 国产精品一区二区不卡的视频| 高清乱码精品福利在线视频| 农村乱人伦一区二区| 久青草国产高清在线视频| 亚洲人网站| 久久一级电影| 最新日韩AV网址在线观看| 2019国产在线| 亚洲男人天堂2020| 欧美另类视频一区二区三区| 欧美黑人欧美精品刺激| 伊在人亚洲香蕉精品播放| 一级全免费视频播放| 欧美在线精品怡红院| аv天堂最新中文在线| 亚洲swag精品自拍一区| 午夜日b视频| 国产精品美女自慰喷水| 日日噜噜夜夜狠狠视频| 欧美亚洲一区二区三区导航| 国产成人a在线观看视频| 欧美成人aⅴ| 亚洲欧美精品在线| 在线国产资源| 青青草国产一区二区三区| 亚洲乱伦视频| 91九色视频网| 69av免费视频| 国产精品无码影视久久久久久久 | 日韩精品成人在线| 亚洲国产午夜精华无码福利| 中文字幕久久亚洲一区| 欧美成人综合在线| 在线免费亚洲无码视频| 欧美三级自拍| 四虎亚洲国产成人久久精品| 成年女人18毛片毛片免费| 日韩成人午夜| 青草视频免费在线观看| 国产成人免费高清AⅤ| 黄色成年视频| 国产网站黄| 国产精品妖精视频| 国产视频一二三区| 亚洲无码电影| 国产噜噜在线视频观看| 久久久受www免费人成| 色屁屁一区二区三区视频国产| 中文字幕 欧美日韩|