• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 軟件測試中如何實現一個最簡單的操作系統

    發表于:2009-08-10來源:作者:點擊數: 標簽:軟件測試操作系統
    軟件測試中如何實現一個最簡單的操作系統 軟件測試方法 關鍵字:操作系統 Linux 這里為了簡單,就不考慮可移植性開求,不從BOOT部分來接收參數,也不對硬件進行檢測,也不需要進行DATA段,代碼段的重定位。我只是讀了Linux內核相關部分,并未自己去實現一個

    軟件測試中如何實現一個最簡單的操作系統   軟件測試方法

    關鍵字:操作系統 Linux

      這里為了簡單,就不考慮可移植性開求,不從BOOT部分來接收參數,也不對硬件進行檢測,也不需要進行DATA段,代碼段的重定位。我只是讀了Linux內核相關部分,并未自己去實現一個操作系統,所以我以下所說的只是概念性的東西:

      1.接管系統的中斷處理,由于BOOT部分的代碼決定了那個中斷向量表,從而決定了系統中斷之后進入的內存位置,但BOOT并不知道操作系統的中斷處理函數位置所在啊,怎么辦呢?有幾種方法,其一是:如果你的板子可以重映射地址,也就是可以將內存條所在的位置重映射成0x0開始,那么在鏈接內核的時候,就將操作系統自己的中斷向量表定位在0x0處并且在BOOTLOADER引導結束時就完成映射操作,并讓CPU跳轉到0x0處執行;如果沒有重映射功能,我就不曉得怎么辦了,不過我想到一個折衷的辦法,就是在BOOTLOADER啟動完成時(也就是將CPU控制權交給操作系統內核時),重新改寫FLASH的0x0區域,就是將操作系統的內核的中斷向量表寫入FLASH區的0x0處,比如,當一個IRQ發生時,CPU決定了會跳入0x18(假設這里FLASH占用地址總線0x0至0x0fffffff,內存占用0x20000000至0x2fffffff),而BOOTLOADER在最后將0x18處的代碼修改成了0x20000000加上0x18的地址處的代碼,而這個地址就是內核的中斷向量表中的相關跳轉指令,就相當于跳轉進了內核所關聯的IRQ處理函數的地址上去執行中斷處理函數了,而這樣的不好之處在于:當系統重新上電之后,BOOT的中斷向量表已經被修改,除非BOOT本身不使用中斷,呵,在這樣簡單的系統中,BOOT是不需要中斷功能的

      2.這里為了簡單,所以沒有使用分頁內存管理,就不需要建立頁表等操作,直接進行操作系統的堆棧設置,同BOOT一樣的設置過程一樣,接著就進行BSS段清零操作,這里的BSS段是指操作系統自身的BSS段,與BOOT的BSS段是同一個含義只是用在了不同的地方了,接著就跳入了MAIN函數

      3.為了最大可能的簡單,采用靜態建立任務結構數組,比如只建立十個任務,那么首先要為這十個任務結構分配段內存,可以在堆上分配(這個分配的內存直到操作系統結束才會被釋放,當然也可以指定一片操作系統的其它地方都用不到的內存區域,不過這樣寫的話就有點外行的味道了,而符務結構數組的指針卻是全局變量,存放在BSS段或者DATA段),

      由于在上一步中已經分配了一個系統堆棧,那么我們這十個任務就分享這總體的堆棧區域這里的重點就是如果定義每個任務結構數組里面的結構,可以參照Linux的相關部分設計

      4.中斷處理:在第一步中已經確定了CPU進行相關的幾類型的中斷跳轉地址,而相同類型的中斷卻只有一個入口地址,這里的中斷處理就會完成以幾個動作:其一:入棧操作,包括所有寄存器入棧,至于這個棧,就是在第二步中所設置的IRQ棧,其二:屏掉所有中斷,呵,這里為了簡單起見,所以在處理中斷時不允許再次發生中斷其,三:讀取中斷相關的寄存器,判別是發生了什么中斷,以至于跳進相關的中斷處理函數中去執行(在這里只包括兩種中斷,一是時鐘中斷,另一個是SWI中斷,也就是所謂的系統調用時需要用到的)其四:等待中斷處理完成,然后就開啟中斷并出棧,恢復現場,將CPU控制權交給被中斷的代碼處

      注意:

      其一:在MIAN中必須首先確定整個系統有哪些需要處理的中斷,也就是有哪些中斷處理函數,然后才編寫這里的中斷處理函數

      其二:本操作系統不處理虛擬內存,其至連CPU異常都不處理(一切都為了簡單),一旦

      

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>