国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

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

2008-10-11 09:01
關(guān)鍵詞:嵌入式操作系統(tǒng)

羅 斌

【摘要】文章介紹了一個(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ā),而平臺(tái)相關(guān)的部分只需要使用匯編語言,但是只要設(shè)計(jì)好代碼框架,就可以做到方便移植。選擇了PC作為最初的目標(biāo)平臺(tái),是因?yàn)閤86體系結(jié)構(gòu)應(yīng)用范圍越來越廣,而且可以在開發(fā)x86版本后再移植到其他平臺(tái)。

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

操作系統(tǒng)在功能上主要是負(fù)責(zé)管理計(jì)算機(jī)的資源,這些資源包括CPU、內(nèi)存、外部存儲(chǔ)器、還有一些其他的外設(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ì)列,所有需要手動(dòng)構(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ù)切換中將會(huì)遇到麻煩。

由于假設(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初始化的情況下,確保不會(huì)發(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)都會(huì)有的硬件,就是系統(tǒng)時(shí)鐘。

在PC系統(tǒng)中要初始化系統(tǒng)時(shí)鐘,必須首先初始化中斷控制器,因?yàn)橄到y(tǒng)時(shí)鐘是通過中斷控制器接入系統(tǒng)的。由于INTEL已經(jīng)保留了CPU的0-31號(hào)中斷,因此中斷控制器的中斷只能從32號(hào)中斷開始。在本系統(tǒng)中,中斷控制器接入CPU的中斷號(hào)從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)先級(jí)為主,輔以時(shí)間片輪轉(zhuǎn)的調(diào)度算法。以優(yōu)先級(jí)為主的調(diào)度算法,可以保證高優(yōu)先級(jí)的進(jìn)程可以搶占CPU,以保證實(shí)時(shí)任務(wù)得到及時(shí)響應(yīng),而輔以時(shí)間片輪轉(zhuǎn),則可以保證優(yōu)先級(jí)相同時(shí),各進(jìn)程公平的獲得CPU時(shí)間。

系統(tǒng)調(diào)度過程是調(diào)度器根據(jù)優(yōu)先級(jí)從高到低的原則掃描系統(tǒng)進(jìn)程表,在發(fā)現(xiàn)某個(gè)優(yōu)先級(jí)存在可調(diào)度進(jìn)程的時(shí)候,就轉(zhuǎn)入掃描該優(yōu)先級(jí)的進(jìn)程表,如果該優(yōu)先級(jí)中存在多個(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)公司南寧供電局助理工程師。

猜你喜歡
嵌入式操作系統(tǒng)
典型實(shí)時(shí)嵌入式操作系統(tǒng)應(yīng)用分析
FATFS在嵌入式操作系統(tǒng)FreeRTOS中的移植與應(yīng)用
基于嵌入式操作系統(tǒng)的工業(yè)采集板設(shè)計(jì)
應(yīng)用服務(wù)型人才培養(yǎng)體系下的嵌入式操作系統(tǒng)教學(xué)改革探索
兼容多種通信方式的智能網(wǎng)關(guān)軟件設(shè)計(jì)
計(jì)算機(jī)嵌入式操作系統(tǒng)研究