閱讀725 返回首頁    go 阿裏雲 go 技術社區[雲棲]


操作係統結構(一)

研究一個操作係統,或者說設計一個操作係統,需要從多個角度去了解操作係統。第一是通過考察所提供的服務(用戶角度);第二是通過考察為用戶和程序員提供的接口(程序員角度);第三是研究係統的各個組成部分及其相互關係(操作係統設計人員)。

主要內容:

*操作係統為用戶、進程和其他係統提供的服務;

*組織操作係統的不同方法;

 在本節介紹操作係統提供的服務和操作係統的設計和實現。

1、操作係統服務

操作係統提供一個環境以執行程序。它向程序和這些程序的用戶提供服務。這些服務幫助用戶更高效地完成任務,同時確保係統高效率運行。

*用戶界麵(User Interface, UI

*程序執行:係統必須能將程序裝入內存並運行程序。程序必須能結束執行,包括正常結束和部正常結束(指明錯誤)。

*I/O操作:運行程序可能需要I/O,這些I/O可能涉及文件或設備。為了提高效率和進行保護,用戶通常不能直接控製I/O。因此,操作係統必須提供進行I/O操作的方法。

*文件係統操作

*通信:在許多情況下,一個進程需要與另一個進程交換信息。這種通信有兩種主要形式。一種是發生在同一計算機(同一操作係統)運行的兩個進程之間;另一種是運行在由網絡連接起來的不同的計算機上的進程之間。通信可以通過共享內存來實現,也可通過消息交換技術來實現(對於消息交換,消息包通過操作係統在進程之間移動)。

*錯誤檢測:操作係統需要知道可能出現的錯誤。錯誤可能發生在CPU或內存硬件(如內存錯誤或電源失敗)、I/O設備(如網絡連接出錯、打印機缺紙)和用戶程序中(如算術溢出、試圖訪問非法內存地址)。對於每種類型的錯誤,操作係統應該采取適當的動作以確保正確和一致的計算。

*資源分配:當同時有多個用戶或多個作業運行時,係統必須為它們中的每一個分配資源。例如,為了更好地使用CPU,操作係統需要采用CPU調度算法以考慮CPU的速度、必須執行的作業、可用的寄存器數和其他因素。

*統計:需要記錄哪些用戶使用了多少和什麼類型的資源。

*保護和安全

A、操作係統的用戶界麵:

#命令行界麵(Command-Line Interface, CLI),采用文本命令,並用一定方法輸入。

命令解釋程序(Shell)的主要作用是獲取並執行用戶指定的下一條命令。執行這些命令有兩種常用方法。一種方法是命令解釋程序本身包含代碼以執行這些命令;另一種方法是由係統程序實現大多數命令,命令解釋程序用命令來識別文件以裝入內存(Unix係統)。

#圖形用戶界麵(Graphical User Interface),視窗係統,具有定位設備來指揮I/O、從菜單選擇、選中部分並用鍵盤輸入文本(像素Pixel)。

B、係統調用:

係統調用提供了操作係統提供的有效服務界麵。由操作係統實現提供的所有係統調用所構成的集合即應用程序接口(Application Programming InterfaceAPI)。一般應用程序開發人員根據API來設計程序。API是一係列適用於應用程序員的函數,包括傳遞給每個函數的參數及其返回的程序員想得到的值。有三種應用程序員常用的API:適用於Windows係統的Win32 API,適用於POSIX係統的POSIX API(包括幾乎所有UNIXLinuxMax OSX版本),以及適用於運行於Java虛擬機程序的Java API

對於程序員,通過API操作係統接口的絕大多數細節被隱藏起來,並被執行支持庫所管理。API、係統調用接口和操作係統之間的關係(處理一個Open()係統調用):

 

向操作係統傳遞參數的三種方法:

*寄存器參數傳遞;

*通過程序放入堆棧中;

*采用塊或堆棧的方法。

C、係統調用類型:

係統調用大致可以分為五大類:

*進程控製:

#結束,放棄

#裝入,執行

#創建進程,終止進程

#取得進程屬性,設置進程屬性

#等待時間

#等待事件,喚醒事件

#分配和釋放內存

*文件管理:

#創建文件,刪除文件

#打開,關閉

#讀、寫、重定位

#取得文件屬性,設置文件屬性

*設備管理:

#請求設備,釋放設備

#讀、寫、重定位

#取得設備屬性,設置設備屬性

#邏輯連接或斷開設備

*信息維護:

#讀取時間或日期,設置時間或日期

#讀取係統數據,設置係統數據

#讀取進程、文件或設備屬性

#設置進程、文件或設備屬性

*通信:消息傳遞模型和共享內存模型

#創建、刪除通信連接

#發送、接收消息

#傳遞狀態消息

#連接或斷開遠程設備

D、係統程序:

係統程序提供了一個方便的環境,以開發程序和執行程序。它們可以分為如下幾類:

*文件管理

*狀態信息:係統信息,詳細的性能、登錄和調試信息以及係統設置(如Windows注冊表)。

*文件修改

*程序語言支持:常用程序設計程序語言的編譯程序、匯編程序、調試程序和解釋程序通常與操作係統一起提供給用戶。

*程序裝入和執行:絕對加載程序,重定位加載程序,鏈接編輯器和覆蓋式加載程序。

*通信:提供在進程、用戶和計算機係統之間創建虛擬連接的機製。

2、操作係統設計和實現

A、設計目標:

需求可以分為兩個基本類:用戶目標和係統目標。

用戶目標:方便和容易使用,學習代價低,可靠安全快速。

係統目標:容易設計、實現和維護,靈活、可靠、高效且沒有錯誤。

B、機製(Mechanism)與策略(Policy):

機製決定如何做,策略決定做什麼。Unix/Linux的接口設計有一句通用的格言提供機製而不是策略操作係統的本質是什麼?管理者?亦或服務者?但歸根到底,操作係統是一個執行者。

執行用戶程序,所謂為用戶服務;執行中斷,所謂為外設服務;係統調用,所謂為廣大的程序員服務;執行內核線程,為操作係統自身服務。而這些所有,它們執行的核心,無非是在恰當的時機,讓哪個對象(程序、線程、中斷服務程序、中斷的下半部分、係統調用)占有CPU。換句話說,Unix/Linux抽象出對這些對象的執行機製:

*程序的執行機製——進程

*內核函數的執行機製——線程

*中斷服務程序的執行機製——中斷信號觸發

*中斷下半部的執行機製——softirq, tasklet, 工作隊列

*係統調用的執行機製——軟中斷(0x80中斷觸發)

如果說機製是一種框架,那麼,策略就是填充框架的一個個具體的實體。機製提供的是一種開放而寬鬆的環境,而策略就是在這個環境下賴以生存的生命個體。比如,我們編寫的一個程序,fork()以後,就成為一個個進程的生命個體。而操作係統所提供給我們創建、執行以及結束進程的各種原語fork()、exec()、exit()等是統管各種進程的機製。我們所創建進程的死活並不會影響機製本身。

C、實現:使用高級語言來實現操作係統。通過改善數據結構和算法來提高係統性能,同時監視係統性能,增加代碼以計算並顯示係統行為和測量。


最後更新:2017-04-03 05:39:25

  上一篇:go SDN學習筆記:分布式與集中式控製層麵
  下一篇:go 【北大夏令營筆記-動態規劃】poj1458-Common Subsequence