在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 小型多任務(wù)操作系統(tǒng)miniOS的實(shí)現(xiàn)

            小型多任務(wù)操作系統(tǒng)miniOS的實(shí)現(xiàn)

            作者: 時(shí)間:2016-11-20 來(lái)源:網(wǎng)絡(luò) 收藏
            關(guān)于miniOS的介紹

            http://blog.csdn.net/mr_raptor/article/details/7338051

            本文引用地址:http://www.biyoush.com/article/201611/319035.htm

            本實(shí)驗(yàn)源碼包含三部分:

            miniOS源碼:miniOS_xxxx(開(kāi)發(fā)板名)工程目錄下。

            miniOS應(yīng)用程序跑馬燈:miniOS_app_led工程目錄下。

            miniOS應(yīng)用程序打印程序:miniOS_app_print工程目錄下。

            # miniOS源碼:http://download.csdn.net/detail/mr_raptor/4179593

            # 程序下載:http://download.csdn.net/detail/mr_raptor/4382941

            操作步驟:

            (1)在A(yíng)DS下編譯miniOS_xxxx工程,選擇Norflash啟動(dòng),然后通過(guò)H-Jtag將minios_org.bin燒寫(xiě)到Norflash中0地址處。

            (2)編譯應(yīng)用程序miniOS_app_led和miniOS_app_print,選擇Norflash啟動(dòng),通過(guò)H-Jtag將miniOS_app_print.bin燒寫(xiě)到0x10000地址處,將miniOS_app_led.bin燒寫(xiě)0x20000地址處。

            (3)啟動(dòng)開(kāi)發(fā)板,可以看到miniOS啟動(dòng)信息。miniOS最多同時(shí)支持62個(gè)進(jìn)程執(zhí)行(在2440開(kāi)發(fā)板64M內(nèi)存上),miniOS啟動(dòng)完畢之后,默認(rèn)只有系統(tǒng)內(nèi)核進(jìn)程在執(zhí)行,可以通過(guò)按K1鍵,新創(chuàng)建進(jìn)程,最多創(chuàng)建62個(gè),按K2鍵,隨機(jī)殺死一個(gè)進(jìn)程,按K6鍵可以啟動(dòng)跑馬燈進(jìn)程。

            (4)如果讀者想寫(xiě)一個(gè)程序,讓miniOS啟動(dòng)它,則根據(jù)編寫(xiě)規(guī)則,編寫(xiě)程序,如果需要系統(tǒng)調(diào)用,還要自己實(shí)現(xiàn)系統(tǒng)調(diào)用接口。

            分析miniOS代碼分為下面章節(jié):

            1. miniOS內(nèi)存分布

            2. 重要頭文件說(shuō)明

            3. 啟動(dòng)代碼分析

            4. MMU與內(nèi)存保護(hù)的實(shí)現(xiàn)

            5. 內(nèi)核定時(shí)器與中斷處理

            6. CPU模式切換

            7. 進(jìn)程調(diào)度與上下文切換技術(shù)

            8. 軟件中斷與系統(tǒng)調(diào)用

            9. 系統(tǒng)調(diào)試、優(yōu)化及可改進(jìn)地方

            下面來(lái)看下第1節(jié):

            miniOS V2.0內(nèi)存分布圖:

            Linux內(nèi)核中內(nèi)核地址空間分為:

            • 直接內(nèi)存映射區(qū)(Direct Memory Region)即:低端物理內(nèi)存
            • 動(dòng)態(tài)內(nèi)存映射區(qū)(VMalloc Region)即:高端物理內(nèi)存
            • 其它映射區(qū)

            miniOS里,虛擬地址空間分為兩大部分:

            • 用戶(hù)程序空間:0x0 ~ 0x80000000
            • 內(nèi)核管理空間:0x80000000 ~ 0xC0000000

            >>用戶(hù)程序空間每個(gè)進(jìn)程使用其中的32M虛擬地址空間,其空間地址和其PID有如下關(guān)系:

            PID * 32M = PID的進(jìn)程空間

            其中,0~32M空間為0號(hào)進(jìn)程空間,其實(shí)是當(dāng)前正在運(yùn)行的地址空間。

            之所以這么設(shè)計(jì),是因?yàn)锳RM CPU在開(kāi)啟了MMU之后,將低于32M的地址作為進(jìn)程內(nèi)空間,當(dāng)?shù)刂犯哂?2M時(shí),MMU會(huì)將其進(jìn)行地址轉(zhuǎn)換,具體內(nèi)容,請(qǐng)參考:MMU與內(nèi)存管理章節(jié)。

            每個(gè)進(jìn)程空間為32M,將來(lái)進(jìn)行進(jìn)程切換時(shí),只需要按照上面定義的關(guān)系,線(xiàn)性偏移即可,減少進(jìn)程切換時(shí)的復(fù)雜度。

            每個(gè)進(jìn)程的實(shí)際物理內(nèi)存空間為1M,也就是說(shuō)每個(gè)進(jìn)程只有1M的物理地址空間,當(dāng)用戶(hù)程序超過(guò)1M時(shí),程序不能運(yùn)行(當(dāng)然還沒(méi)有超過(guò)1M的程序),它們的映射關(guān)系如下所示:

            0x30000000 ~ 0x34000000 ----> 0x0 ~ 0x80000000

            >>內(nèi)核管理地址空間又可以細(xì)分為以下幾個(gè)部分:

            • 物理內(nèi)存完全映射區(qū):0x80000000 ~ 0x84000000
            • 外設(shè)寄存器地址映射區(qū):0x98000000 ~ 0xB0000000
            • 啟動(dòng)ROM映射區(qū):0xC0100000 ~ 0xC0000000

            >>物理內(nèi)存完全映射區(qū),主要用于管理進(jìn)程實(shí)際地址空間,它其實(shí)是0x30000000 ~ 0x80000000的一個(gè)線(xiàn)性偏移地址(0x50000000),當(dāng)我們需要在內(nèi)核空間里操作用戶(hù)空間時(shí),使用該完整映射區(qū),非常方便操作,比如:加載程序到進(jìn)程空間時(shí),只需通過(guò)簡(jiǎn)單的計(jì)算即可知道其虛擬地址。

            例如:?jiǎn)?dòng)5號(hào)進(jìn)程時(shí),其物理地址放在0x30000000開(kāi)始的第5M空間里,那么其虛擬地址為0x30000000 + 5M + 0x50000000(偏移地址)。

            >> 外設(shè)寄存器地址映射區(qū),用來(lái)操作外設(shè)寄存器,當(dāng)使用到外設(shè)寄存器時(shí),可以通過(guò)簡(jiǎn)單的加減運(yùn)算可以得到其虛擬地址。

            >> 啟動(dòng)ROM映射區(qū),用來(lái)映射N(xiāo)OR FLASH。

            物理內(nèi)存空間結(jié)構(gòu):

            由上圖可知,0號(hào)進(jìn)程物理空間里(0x30000000 ~ 0x30100000),其實(shí)除了存放os代碼外,還有其它的用途。

            • 頁(yè)表放到了內(nèi)存地址0x30000000處
            • OS代碼放到了0x300F0000,該地址是故意而為之

            最開(kāi)始的1MB物理內(nèi)存地址0x30000000~0x30100000為0號(hào)內(nèi)核進(jìn)程地址空間,其實(shí)就是OS代碼區(qū)和內(nèi)核棧區(qū)及頁(yè)表區(qū)。

            由于OS代碼放到了物理內(nèi)存0x300F0000處,其被映射到虛擬地址0x800F0000處,所以ADS里設(shè)置的OS代碼的運(yùn)行地址為0x800F0000



            評(píng)論


            技術(shù)專(zhuān)區(qū)

            關(guān)閉