簡而言之,大家可以git clone 把linux下載下來。用find命令列出所有文件,然後sed命令做個查找替換。把linux關鍵字改成shanda,然後執行mv,把路徑中的linux替換成shanda,然後寫個ppt,開個發佈會就可以發佈山大OS。
開個玩笑,我再也不玩抽象了,今天我們來講講開發一款操作系統需要完成的工作(因爲內容太多,先簡單講一下操作系統的內核),順路瞭解一下操作系統的結構和內容。
簡化版操作系統知識體系
首先,什麼是操作系統,操作系統(Operating System,OS)是管理計算機硬件與軟件資源的系統級軟件。它爲用戶提供一個友好的界面,使得用戶能夠更輕鬆地與計算機進行交互。操作系統的主要任務包括:管理內存、處理器、設備驅動程序、文件系統和進程管理等。
操作系統主要有幾個部件組成,最重要的就是內核(Kernel),內核就如同操作系統的“大腦”,它掌控着系統的核心運作。例如,進行內存管理,決定哪些程序能獲取多少內存資源;進行進程調度,合理安排各個進程對 CPU 的使用,確保系統高效運行;處理中斷,及時響應外部設備的請求等。下面以linux的內核爲例,它主要實現瞭如下功能:
1.進程管理:
在進程創建時,內核會根據系統資源和調度策略決定何時創建新進程。例如,當用戶打開一個新的應用程序時,內核會分配必要的資源來創建對應的進程。調度過程中,內核會依據進程的優先級、等待時間和資源需求等因素來決定哪個進程獲得 CPU 時間。
比如,高優先級的實時進程可能會優先得到執行,以滿足其對時間的嚴格要求。進程之間的通信和同步通過各種機制實現,如信號量、互斥量等,內核確保這些機制的正確運行。例如,多個進程同時訪問共享資源時,內核通過同步機制避免衝突。
一個很經典的進程管理的例子就是哲學家就餐問題,即有五個哲學家,他們的生活方式是交替地進行思考和進餐,哲學家們共用一張圓桌,分別坐在周圍的五張椅子上,在圓桌上有五個碗和五支筷子,平時哲學家進行思考,飢餓時便試圖取其左、右最靠近他的筷子,只有在他拿到兩支筷子時才能進餐,該哲學家進餐完畢後,放下左右兩隻筷子又繼續思考,那麼該如何設計拿筷子順序和就餐順序,才能不產生衝突,這是內核算法需要考慮的問題:
2.內存管理:
在linux內核Linux內核中,RAM會將其中一部分永遠分配給內核,用來存放內核源碼Linux內核源碼以及一些靜態的數據結構。而剩餘部分則被稱之爲動態內存,是進程和內核本身所需的重要資源。事實上,整個系統的性能就取決於如何能高效地管理動態內存。因此,現在所有多任務操作系統都在優化對動態內存的使用,通俗講就是,儘可能的做到當需要時分配,不需要時釋放。
夥伴系統在管理區中的表示
在linux中,引入了一種叫做夥伴系統的算法,其基本思想很簡單,在linux中,內存被分成含有很多頁面的大塊, 每一塊都是2個頁面大小的方冪. 如果找不到想要的塊, 一個大塊會被分成兩部分, 這兩部分彼此就成爲夥伴. 其中一半被用來分配, 而另一半則空閒. 這些塊在以後分配的過程中會繼續被二分直至產生一個所需大小的塊. 當一個塊被最終釋放時, 其夥伴將被檢測出來, 如果夥伴也空閒則合併兩者。
夥伴系統通過這種有效的內存管理方式,儘可能地減少內存碎片的產生(小塊碎片很難分配,會被浪費掉),而且不需要引入複雜的數據結構來管理物理上連續的頁,內存區的夥伴在分配時可以彼此獨立,而在釋放時通過地址判斷是否能合併,管理相對簡便。
設備驅動管理:
對於 CPU,內核要進行資源分配和性能調節。硬盤驅動負責讀寫數據和處理磁盤錯誤。網絡設備驅動實現數據包的發送和接收。設備驅動的存在使得硬件能夠正常工作,並且能夠被操作系統有效地管理和控制。在linuxLinux系統中,內核驅動通常以模塊的形式存在,可以被動態地加載到內核中或從內核中卸載。這種模塊化設計使得Linux系統能夠靈活地支持各種硬件設備,而無需在每次添加或更換硬件時都重新編譯整個內核。
系統調用:
Linux內核系統調用是指所有的操作系統在其內核裏都有一些內建的函數,這些函數可以提供一些系統級別的功能,這些服務由內核提供,用戶態程序通過系統調用與內核進行交互。
從某種角度來看,系統調用和普通的函數調用非常相似。區別僅僅在於,系統調用由操作系統核心提供,運行於核心態;而普通的函數調用由函數庫或用戶自己提供,運行於用戶態。
核心態和用戶態是操作系統中的重要概念,區分主要是爲了保證系統的穩定性和安全性。將關鍵的系統操作限制在覈心態可以防止用戶程序的錯誤或惡意行爲對系統造成嚴重破壞。同時,這種區分也有助於提高系統資源的管理效率和系統的整體性能。
核心態具有較高的特權級別,能直接訪問系統的核心資源,包括硬件資源(如 CPU、內存、I/O 設備等)和關鍵的內核數據結構。在覈心態下,操作系統可以執行所有的指令,包括特權指令,進行諸如內存管理、進程調度、設備驅動、中斷處理等底層的系統操作。
用戶態則具有較低的特權級別,只能訪問受限的資源和執行受限的指令。用戶程序通常在用戶態下運行,不能直接訪問內核數據和硬件資源。如果用戶程序需要進行一些需要特權的操作,比如讀取系統配置信息或與硬件交互,就必須通過系統調用切換到核心態來完成。一個文本編輯軟件在用戶態下運行,它不能直接控制硬盤進行讀寫,而是通過系統調用請求操作系統來完成。
除此之外,內核還要完成許多工作,比如輸入/輸出(I/O)系統,訪問控制列表(ACL),文件系統接口等,可以看到,開發一款操作系統是非常困難的,這也是各種操作系統無法兼容的根本原因,因爲不同操作系統的軟件是根據特定操作系統的規範和接口來開發的。當一個軟件程序被編寫時,它使用了特定操作系統的API(應用程序接口)和庫來與操作系統進行交互,如果兩個系統軟件之間可以兼容,那麼很大概率是換殼套皮。
當然,我們也可以通過採用跨平臺框架和庫是實現軟件兼容性,或者針對對方系統的內核和接口,修改並重新編譯軟件代碼,但是一般這都是比較大的工程。現在的國產系統,海思麒麟和deepin,都是基於linux內核開發的,原因也是由於開發系統內核的困難性(當然也不排除是linux內核比較成熟,拿過來魔改一下就可以用)。
文章內容來自於操作系統課程,可能有寫的不太對的地方,歡迎評論區討論。
更多遊戲資訊請關註:電玩幫遊戲資訊專區
電玩幫圖文攻略 www.vgover.com