通過Linux理解作業系統(一) 概述

2022-05-13 14:19:47 字數 4671 閱讀 4349

通過linux理解作業系統(一):概述

用了那麼多年電腦,作業系統從winxp

,vista

, 再到win7

, 然後是現在用的ubuntu

,這麼長的時間裡,一直沒有搞明白這作業系統是個什麼東西,為什麼這麼神奇,只要點一點,按一按,那些一塊一塊的硬體就可以完成我們的工作。直到學了作業系統這門課程,才開始有點朦朦朧朧的理解,最近又看了一些linux

系統設計的資料,覺得有些領悟,所以寫出來跟大家分享一下。

先宣告,本人不是linux

技術極客,所以本文不會講一些很酷的linux

使用技術,也不會講一些很深入的linux

核心分析,這些都有相應的書籍和資料可以學習,比如鳥哥的linux

私房菜和linux

核心原始碼剖析,我只是希望通過linux

這樣乙個開源的作業系統例項來幫助像我一樣的菜鳥們理解作業系統這個東西,更多地是從系統本身的設計,資料結構,演算法,**來講,如何實現了i/o

,程序管理,記憶體管理這些東西,有講錯的地方請指正或者補充。(還有請輕噴~)

1

、作業系統究竟是個神馬東西

作業系統 (英語:operating system

,簡稱os

)是管理計算機 硬體與軟體資源的電腦程式 ,同時也是計算機系統的核心與基石。 作業系統需要處理如管理與配置記憶體 、決定系統資源供需的優先次序、控制輸入與輸出裝置、操作網路與管理檔案系統等基本事務。 作業系統也提供乙個讓使用者與系統互動的操作介面。(摘自維基百科)

)。意識到這一點,我們才能拋開對它的恐懼,來好好的研究一下它。

2

、linux

的歷史發展

linux

的歷史已經要被講爛了,幾乎所有的資料裡都會花很大的篇幅來講linux

的發展,但是為了後面的理解需要,這裡還是要簡單提一提,詳細的可以參閱:鳥哥的linux

私房菜這個站點:

提到linux

,就不得不提到unix

,因為linux

就是由unix

發展而來的。unix

最早誕生與20

世紀四五十年代,是貝爾實驗室的ken thompson

在一台叫pdp-7

的機器上寫出來的,這個東西出來以後他的同事都被這個系統的能力感到驚訝,因為在此之前操作計算機是很痛苦的,(這裡涉及到計算機的歷史,就不展開了)。很多人開始加入到unix

的開發中,而由於這個系統一開始是用彙編寫的,這意味著要把它用在其他機器上,就必須在新的機器上重新編寫整個系統。怎麼辦呢?學過編譯原理的同學就知道應該使用一種高階語言來編寫這個程式,然後在不同的機器上通過編譯器將其編譯成能在該機器上執行的機器**就行了。thompson

於是自己設計了一種語言叫做b

,然後用這種語言重寫了unix

,但是由於這個語言設計的缺陷最終不是很成功,這時候大名鼎鼎的dennis ritchie

出現了,根據b

,他又設計出了大家都相當熟悉的c

語言,而且還為c

寫了乙個很棒的編譯器,然後他們兩個就用了c

把unix

給重寫了一遍,而c

語言也成為了一種影響深遠的程式語言(

這兩位大哥真心牛叉~

)。unix

出來之後,受到了很多關注,很多的大公司,科研機構都找貝爾實驗室拿原始碼,當時貝爾實驗室的老闆at&t

公司由於對這個東西不是很重視 所以都給了(因為人家當時有的是錢~

,這些機構拿到了原始碼之後,又進行了很多的研究和開發,於是產生了很多不同版本的unix

,其中乙個就是伯克利大學,他們的版本就是很多人知道的bsd

了 (berkeley software distribution),

它的特殊之處在於它第乙個將網路引入到作業系統中,使得網路協議(tcp/ip

)的支援成為了unix

的乙個標準,為之後網際網路的發展中,基於unix

的伺服器統治整個市場打下了基礎。

由於很多廠商,機構都發布了自己的unix

版本,這就帶來了乙個相容的問題,不同的unix

版本提供不同的功能,甚至同個功能又有不同的系統呼叫介面,這意味著開發者必須針對每乙個版本編寫自己的程式,這又是一件很痛苦的事情。為了解決這個問題,ieee

標準委員會展開了乙個專案叫做posix

(前三個字母表示potable operating system)

,主要根據當時最流行的兩個unix

版本,乙個是bsd

,乙個是at&t

原生的unix (system v),

這個標準定義了所有unix

系統必須提供的一套庫函式,開發者只要通過這些庫函式就可以滿足他們開發利用unix

系統的需要。當然,標準制定的過程肯定有很多衝突,這個過程也是挺有趣的,有興趣的話可以自己再去了解一下。

講了那麼多unix

,終於要講到linux

了。因為當時所有的unix

系統都十分龐大和複雜,很難用於學校教學目的,有位大學教授就根據unix

,又寫了乙個相似的簡化了的系統,叫做minix

,它的核心只有1600

多行c**和800

多行的彙編,這個東西出來之後同樣受到了很多人的歡迎,不僅僅是學習,而且還移植了許多unix

的程式過來。隨著它的發展,有人就希望原作者能夠給這個系統核心增加更多的功能,但是作者為了保證這個系統的規模足夠小,能夠被學生在短時間理解,所有沒有同意新增功能。於是一位芬蘭的大學生linus torvalds

又根據minix

重寫了乙個系統叫做linux

,支援了很多擴充套件功能如網路通訊,其最為特殊的一點,也是它能取得現在這樣的成功的一點是在與它的商業模式,它是乙個開源的自由軟體,意味著任何人都能夠對它的**進行研究,修改,由此創造了很大的活力,對這個有興趣的可以查閱一些開源軟體,開源協議方面的資料。

。。。本來說簡單提一提的,想不到說了這麼多,接下來還是正式進入linux

系統的所謂概述吧。

3

、linux

系統概述

首先通過乙個簡單的例子來引出一些概念,思考一下,當我們在shell

終端裡輸入:ls

,這個時候系統發生了什麼?

我們知道ls

是乙個系統命令,可以列出乙個目錄裡的檔案列表,那麼系統命令是什麼,它是如何實現的?

熟悉linux

的都知道,其實它是乙個編譯好的程式,就放在/usr

檔案目錄裡,這些程式叫做core utility program,

那麼這些程式又是如何來完成其相應的功能的呢?這裡就涉及到了一些概念,如庫函式,系統呼叫,核心模式,使用者模式等。了解c

語言的肯定對c

庫函式不陌生,我們的程式裡經常都會有的scanf

,printf

,fopen

,fwrite

,malloc

這些就是,通過使用這些函式我們可以進行i/o

操作和記憶體管理等,這些庫函式也就是前面講linux

歷史時提到的posix

的成果,但是這些函式又是如何完成其功能的呢?

沒錯,是通過系統呼叫,系統呼叫是作業系統核心的一種方式,具體是怎麼實現的我也不知道,但是我們只要知道,我們的庫函式內部是通過系統呼叫讓系統的核心去控制記憶體,程序,還有i/o

裝置的管理就行,但是庫函式又不完全等價於系統呼叫,因為有些庫函式並沒有進行系統呼叫,比如數學函式abs

,sin

,cos

或是字元函式isnum

,isdigt

,tolower

這些,而前面提到的幾個函式則有進行系統呼叫,它們之間的區別大概就在於有沒有操作到記憶體,i/o

,或是程序。而關於核心模式和使用者模式,又有相關的程序的核心空間跟使用者空間的概念,這些之後會再提到,我們現在只要知道,所有進行系統呼叫的操作都要切換到核心模式下完成,普通的操作則是在使用者模式下執行即可。為什麼要這樣呢?簡單地講就是為了安全,這樣做的話可以保證系統核心進行的所有操作都是系統本身定義的,而使用者定義的操作都是在核心以外執行,這樣即使使用者的操作出了問題(惡意的或者無意的),

那麼系統的核心也不會受到很大的影響。

為了清晰地展示一下這些概念還有linux

核心的結構,還是上個圖吧~

從上圖我們可以看到那一大塊的就是我們的作業系統,它位於計算機硬體的上層,支援了程式和硬體裝置的互動,而整個作業系統核心又可以大致分成三個模組,分別為i/o

,記憶體管理和程序管理。

linux

通過乙個虛擬檔案系統將所有的i/o

裝置都抽象成檔案,即所有的i/o

裝置的輸入輸出都可通過檔案的read/write

操作完成,而不需要考慮它實際上是在操作硬碟,螢幕,鍵盤還是網絡卡,而記憶體模組負責虛擬位址空間到實體地址空間的對映,記憶體分頁管理和快取等,程序管理模組負責程序執行緒的建立和終止,程序排程和程序間通訊。這三個模組之間相互依賴,支撐起了作業系統的所有功能,在後續的文章裡會分別進行深入的介紹。(這樣講可能籠統了一點,再舉個例子吧)比如當我們的程式要讀取乙個磁碟上的檔案時,就需要訪問到檔案系統,而為了減少磁碟讀取延遲,提高效率,一次讀取就會讀取乙個block的資料然後儲存在記憶體裡,而在程式等待磁碟讀取的過程中,為了提高cpu的利用率,系統又會排程其他程序在這個過程中執行,這就是它們之間乙個簡單的依賴關係,當然它們還有其他許多的依賴。

好了,作為第一篇部落格寫得實在有點長了,下次再繼續吧~

作業系統(一)概述

學習資料 作業系統 清華大學出版社 2012 一 功能 1.管理系統的各個部件,使它們能夠正常運轉 2.給上層的應用軟體提供乙個易於理解和程式設計的介面 二 角色 對於作業系統的設計者,作業系統是系統資源的管理者 如何管理cpu 記憶體 i o裝置等系統部件 對於應用程式開發人員,作業系統是一組抽象...

作業系統(一) 概述

作業系統是緊貼硬體之上,所有其他軟體之下 是其它軟體的環境 用來管理硬體 使cpu i o裝置和儲存空間能夠有效利用,管理分配軟硬體資源,合理組織計算機工作流程 作業管理,程序管理 實現使用者介面 彌補硬體系統的型別和數量的差別 將覆蓋了軟體的機器稱為擴充機器或虛擬機器,因此,os是擴充套件機 虛擬...

linux作業系統一

1有效的方式使用計算機系統資源。作業系統向下封裝硬體,向下提供操作介面。unix linux 2檔案系統 2.1 目錄和路徑 2.1.1 目錄 一組相關檔案的集合 乙個目錄下面包含子目錄 檔案下有檔案 路徑名 檔名 確定檔案位置 目錄位置 路徑反映目錄和目錄之間的關係。2.1.2 路徑 linux中...