如何寫一個簡易嵌入式作業系統

  學習了作業系統的概念與基礎知識後,我們可以練練手與,寫一個簡易的嵌入式作業系統,具體原理步驟怎樣的呢?面由小編為大家整理了寫一個簡易嵌入式作業系統的相關知識,希望對大家有幫助!

  寫一個簡易嵌入式作業系統概述

  1.首先確定CPU,在這裡為了簡單,就選用嵌入式的CPU,比如arm系列,之所以用RISC簡單指令集型別的CPU,其方便之處是沒有真實模式與保護模式之分,採用線性的統一定址,也就是不需要進行段頁式記憶體管理,還有就是晶片內部集成了一些常用外設控制器,比如乙太網卡,串列埠等等,不需要像在PC機的主機板上那麼多外設晶片

  2.確定要實現的模組和功能,為了簡單,只實現多工排程但有限制,比如最多不超過10,實現中斷處理不支援中斷優先順序,不進行動態SHELL互動,不實現動態模組載入,不實現fork之類的動態程序派生和載入也就是說要想在你的作業系統上加入使用者程式,只能靜態編譯進核心中;不支援檔案系統,不支援網路,不支援PCI,磁碟等外設除了支援串列埠,呵呵,串列埠最簡單嘛,不支援虛擬記憶體管理也就是說多工中的每個程序都可以訪問到任何地址,這樣做的話,一個程式死了,那麼這個作業系統也就玩完了

  3.確定要使用的編譯器,這裡採用GCC,檔案採用ELF格式,當然,最終的檔案就是BIN格式,GCC和LINUX有著緊密的聯絡,自己的作業系統,需要C庫支援和系統呼叫支援,所以需要自己去裁剪庫,自己去實現系統呼叫

  4.實現步驟:首先是CPU選型,交叉編譯環境的建立,然後就是寫BOOTLOADER,寫作業系統通過以上4點的學習一個簡單的嵌入式作業系統準備工作就差不多做好了。

  相關閱讀:作業系統常見故障核心知識

  1、程序與執行緒

  1 程序與執行緒的概念

  程序:是一定功能的程式關於某個資料集合的一次執行活動,程序是系統進行資源排程和分配的獨立單位。

  執行緒:是程序的實體,是CPU排程和分派的基本單位,它是比程序更小的能獨立執行的基本單位。

  2 程序與執行緒的關係

  a. 一個執行緒可以建立和撤銷另一個執行緒,一個程序中可以多個執行緒併發執行;

  b. 相對程序而言,執行緒更加接近於執行體的概念,多個執行緒可以共享同一個程序的資源,每個執行緒還有自己私有的桟空間並擁有獨立的執行序列。

  c. 程序有獨立的地址空間,在保護模式下,程序崩潰時不會對其他程序有影響。執行緒有自己的堆桟和區域性變數,但是執行緒之間沒有獨立的地址空間,所以一個執行緒的死亡就相當於程序的死亡。因此,多程序的程式比多執行緒的程式具有更好的健壯性,但是程序間切換耗費資源較大,大約是執行緒間切換的十倍,所以多執行緒擁有更高的效率

  執行緒和程序的區別聯絡:

  1,程序:子程序是父程序的複製品。子程序獲得父程序資料空間、堆和棧的複製品。

  2,執行緒:相對與程序而言,執行緒是一個更加接近與執行體的概念,它可以與同進程的其他執行緒共享資料,但擁有自己的棧空間,擁有獨立的執行序列。

  兩者都可以提高程式的併發度,提高程式執行效率和響應時間。

  執行緒和程序在使用上各有優缺點:執行緒執行開銷小,但不利於資源管理和保護;而程序正相反。同時,執行緒適合於在SMP機器上執行,而程序則可以跨機器遷移。

  根本區別就一點:用多程序每個程序有自己的地址空間address space,執行緒則共享地址空間。所有其它區別都是由此而來的:

  1、速度:執行緒產生的速度快,執行緒間的通訊快、切換快等,因為他們在同一個地址空間內。

  2、資源利用率:執行緒的資源利用率比較好也是因為他們在同一個地址空間內。

  3、同步問題:執行緒使用公共變數/記憶體時需要使用同步機制還是因為他們在同一個地址空間內

  2、程序間通訊

  程序間通訊主要有:管道、系統IPC訊息佇列、訊號量、共享儲存和socket。

  管道主要分為普通管道、流管道、命名管道。

  管道是一種半雙工的通訊方式,資料只能單項流動,並且只能在具有親緣關係的程序間流動,程序的親緣關係通常是父子程序

  命名管道也是半雙工的通訊方式,它允許無親緣關係的程序間進行通訊 訊號量是一個計數器,用來控制多個程序對資源的訪問,它通常作為一種鎖機制。

  訊息佇列是訊息的連結串列,存放在核心中並由訊息佇列識別符號標識。

  訊號是一種比較複雜的通訊方式,用於通知接收程序某個事件已經發生。

  共享記憶體就是對映一段能被其它程序訪問的記憶體,這段共享記憶體由一個程序建立,但是多個程序可以訪問。

  3、緩衝區溢位

  概念: 緩衝區溢位是指計算機向緩衝區填寫的資料超過了緩衝區的容量,資料覆蓋在其他合法區域上。

  危害: 程式崩潰,導致拒絕服務;跳轉並執行一段惡意程式碼

  注:緩衝區溢位的原因是程式設計師沒有對輸入資料進行檢查。

  4、死鎖

  1 概念:在兩個及兩個程序併發執行的過程中,有的執行緒持有了一部分資源,又在等待其他程序持有的資源,資源的互相持有和等待就導致了程序死鎖。

  2 死鎖產生的四個條件ACID:

  互斥性: 一個資源只能被一個程序持有

  請求和保持:一個程序因請求資源而阻塞導致原來持有的資源得不到釋放

  不可剝奪: 程序未完成功能之前,不可強制釋放當前所持有的資源

  環路等待: 若干程序之間形成環路等待資源的情形

  3 解決死鎖的方法:

  解決死鎖的基本思路就是破壞死鎖產生的四個必要條件

  解決死鎖的基本方法如下:

  預防死鎖、避免死鎖、檢測死鎖、解除死鎖

  解決四多的常用策略如下:

  鴕鳥策略、預防策略、避免策略、檢測與解除死鎖

  5、程序排程的策略

  FCFS先來先服務、優先順序、時間片輪轉、多級反饋

  6、程序同步的方式

  原子操作、訊號量、自旋鎖管程、會合、分散式系統