Linux 原理篇(一)綜述

2022-06-09 12:57:07 字數 3958 閱讀 3995

作業系統其實就像乙個軟體外包公司,其核心就相當於這家外包公司的老闆。所以接下來的內容中,請你將自己的角色切換成這家軟體外包公司的老闆,設身處地地去理解作業系統是如何協調各種資源,幫客戶做成事情的。

使用者開始對著螢幕上的 qq 圖示雙擊滑鼠了。

滑鼠和鍵盤是計算機的輸入裝置。大部分的普通使用者想要告訴計算機應該做什麼,都是通過這兩個裝置。例如,使用者移動了一下滑鼠,滑鼠就會通過滑鼠線給電腦發訊息,告知電腦,滑鼠向某個方向移動了多少距離。

如果是一家外包公司,怎麼才能知道客戶的需求呢?

你需要配備銷售、售前等角色,專門負責和客戶對接,把客戶需求拿回來,我們把這些人統稱為客戶對接員。你可以跟客戶說,有什麼事兒都找對接員。

螢幕,也就是顯示器,是計算機的輸出裝置,將計算機處理使用者請求後的結果展現給客戶,要不然使用者無法知道自己的請求是不是到達並且執行了。

顯示器上面顯示的東西是由顯示卡控制的。無論是顯示器還是顯示卡,這裡都有個「座標」的概念,也就是說,什麼影象在哪個座標,都是定義好了才畫上去的。本來在某個座標畫了乙個滑鼠箭頭,當接到滑鼠移動的事件之後,你應該按相同的方向,按照一定的比例(滑鼠靈敏度),在螢幕的某個座標再畫乙個滑鼠箭頭。

作為外包公司,當客戶給你提了需求,不管你做還是不做,最終做成什麼樣,你都需要給客戶反饋,所以你要配備交付人員,將做好的需求展示給他們看。

在作業系統中,輸入裝置驅動其實就是客戶對接員。有時候新插上乙個滑鼠的時候,會彈出乙個通知你安裝驅動,這就是作業系統這家外包公司給你配備對接人員呢。當客戶告訴對接員需求的時候,對於作業系統來講,輸入裝置會傳送乙個中斷。這個概念很好理解。客戶肯定希望外包公司把正在做的事情都停下來服務它。所以,這個時候客戶傳送的需求就被稱為中斷事件(interrupt event)。

顯示卡會有顯示卡驅動,在作業系統中稱為輸出裝置驅動,也就是上面說的交付人員。

有了客戶對接員和交付人員,外包公司就可以處理使用者「在桌面上點選 qq 圖示」的事件了。

首先,滑鼠雙擊會觸發乙個中斷,這相當於客戶告知客戶對接員「有了新需求,需要處理一下」。你會事先把處理這種問題的方法教給客戶對接員。在作業系統裡面就是呼叫中斷處理函式。作業系統發現雙擊的是乙個圖示,就明白了使用者的原始訴求,準備執行 qq 和別人聊天。

你會發現,執行 qq 是一件大事,因為將來的一段時間,使用者要一直和 qq 進行互動。這就相當於你們公司接了乙個大單,而不是處理零星的客戶需求,這個時候應該單獨立項。一旦立了項,以後與這個專案有關的事情,都由這個專案組來處理。

立項可不能隨便立,一定要有乙個專案執行計畫書,說明這個專案打算怎麼做,一步一步如何執行,遇到什麼情況應該怎麼辦等等。換句話說,對 qq 這個程式來說,它能做哪些事情,每個事情怎麼做,先做啥後做啥,都已經作為程式邏輯寫在程式裡面,並且編譯成為二進位制了。這個程式就相當於專案執行計畫書。

電腦上的程式有很多,什麼有道雲筆記的程式、word 程式等等,它們都以二進位制檔案的形式儲存在硬碟上。硬碟是個物理裝置,要按照規定格式化成為檔案系統,才能存放這些程式。檔案系統需要乙個系統進行統一管理,稱為檔案管理子系統(file management subsystem)。

對於你們公司,專案立得多了,專案執行計畫書也會很多,同樣需要有個統一儲存檔案的檔案庫,而且需要有序地管理起來。

當你從資料庫裡面拿到這個專案執行計畫書,接下來就需要開始執行這個專案了。專案執行計畫書是靜態的,專案的執行是動態的。

同理,當作業系統拿到 qq 的二進位制執行檔案的時候,就可以執行這個檔案了。qq 的二進位制檔案是靜態的,稱為程式(program),而執行起來的 qq,是不斷進行的,稱為程序(process)。

說了這麼多,怎樣才能立項呢?你會發現,乙個專案要想順暢進行,需要用到公司的各種資源,比如說蓋個公章、開個證明、申請個會議室、列印個材料等等。這裡有個兩難的權衡,一方面,資源畢竟是有限的,甚至是涉及機密的,不能由專案組濫取濫用;另一方面,就是效率,咱是乙個私營企業,保證專案申請資源的時候只跑一次,這樣才能比較高效。

為了平衡這一點,一方面涉及核心許可權的資源,還是應該被公司嚴格把控,審批了才能用;另外一方面,為了提高效率,最好有個統一的辦事大廳,明文列出提供哪些服務,誰需要可以來申請,然後就會有回應。

在作業系統中,也有同樣的問題,例如多個程序都要往印表機上列印檔案,如果隨便亂列印程序,就會出現同樣一張紙,第一行是 a 程序輸出的文字,第二行是 b 程序輸出的文字,全亂套了。所以,印表機的直接操作是放在作業系統核心裡面的,程序不能隨便操作。但是作業系統也提供乙個辦事大廳,也就是系統呼叫(system call)。

系統呼叫也能列出來提供哪些介面可以呼叫,程序有需要的時候就可以去呼叫。這其中,立項是辦事大廳提供的關鍵服務之一。同樣,任何乙個程式要想執行起來,就需要呼叫系統呼叫,建立程序。

一旦專案正式立項,就要開始執行,就要成立專案組,將開發人員分配到這個專案組,按照專案執行計畫書一步一步執行。為了管理這個專案,我們還需要乙個專案經理、一套專案管理流程、乙個專案管理系統,例如程式設計師比較熟悉的 jira。如果專案多,可能乙個開發人員需要同時執行多個專案,這就要考驗專案經理的排程能力了。

在作業系統中,程序的執行也需要分配 cpu 進行執行,也就是按照程式裡面的二進位制**一行一行地執行。於是,為了管理程序,我們還需要乙個程序管理子系統(process management subsystem)。如果執行的程序很多,則乙個 cpu 會併發執行多個程序,也就需要 cpu 的排程能力了。

每個專案都有自己的私密資料,這些資料不能被其他專案組看到。這些資料主要是專案在執行的過程中,產生的很多中間成果,例如架構圖、流程圖。

執行過程中,難免要在白板上或者本子上寫寫畫畫,如果不同專案的辦公空間不隔離,一方面,專案的私密性不能得到保證,a 專案的細節,b 專案也能看到;另一方面,專案之間會相互干擾,a 專案組的人剛在白板上畫了乙個架構圖,出去上個廁所,結果 b 專案組的人就給擦了。

如果把不同的專案組分配到不同的會議室,就解決了這個問題。當然會議室是有限的,需要有人管理和分配,並且需要乙個會議室管理系統。

在作業系統中,不同的程序有不同的記憶體空間,但是整個電腦記憶體就這麼點兒,所以需要統一的管理和分配,這就需要記憶體管理子系統(memory management subsystem)。

如果想直觀地了解 qq 如何使用 cpu 和記憶體,可以開啟任務管理器,你就能看到 qq 這個程序耗費的 cpu 和記憶體。

專案執行的時候,有了一定的成果,就要給客戶演示。例如客戶說要做個應用,我們做出來了要給客戶看看,如果客戶說**需要改,可以根據客戶的需求再改,這就需要交付人員了。

qq 啟動之後,有一部分**會在顯示器上畫乙個對話方塊,並且將鍵盤的焦點放在了輸入框裡面。cpu 根據這些指令,就會告知顯示卡驅動程式,將這個對話方塊畫出來。

於是使用 qq 的使用者就會很開心地發現,他能和別人開始聊天了。

當使用者通過鍵盤噼里啪啦打字的時候,鍵盤也是輸入裝置,也會觸發中斷,通知相應的輸入裝置驅動程式。

我們假設使用者輸入了乙個「a」。這就像客戶提出了新的需求給客戶對接員。客戶對接員收到需求後,因為是對接這個專案的,因而就回來報告,客戶提新需求了,專案組需要處理一下。專案執行計畫書裡面一般都會有當遇到何種需求應該怎麼做的規定,專案組就按這個規定做了,然後讓交付人員再去客戶那裡演示就行了。

對於 qq 來講,由於鍵盤閃啊閃的焦點在 qq 這個對話方塊上,因而作業系統知道,這個事件是給這個程序的。qq 的**裡面肯定有遇到這種事件如何處理的**,就會執行。一般是記錄下客戶的輸入,並且告知顯示卡驅動程式,在那個地方畫乙個「a」。顯示卡畫完了,客戶看到了,就覺得自己的輸入成功了。

當使用者輸入完畢之後,回車一下,還是會通過鍵盤驅動程式告訴作業系統,作業系統還是會找到 qq,qq 會將使用者的輸入傳送到網路上。qq 程序是不能直接傳送網路包的,需要呼叫系統呼叫,核心使用網絡卡驅動程式進行傳送。

這就像客戶對接員接到乙個需求,但是這個需求需要和其他公司溝通,這就需要依靠公司的對外合作部,對外合作部在辦事大廳有專門的視窗,非常方便。

總結乙個外包公司大部分的職能部門都湊齊了。你可以對應著下圖的作業系統核心體系結構,回顧一下它們是如何組成一家公司的。

倒車雷達原理篇

往後倒一點,再往後,打方向盤,打多了,回一點再倒,好,停!相信一般的車主在停車場泊位時,都會遇到車輛保管員的 熱情招呼 車技純熟的倒 也與人工提示配合默契 車技一般 方向感較差的,就經常使負責指揮的那位人士高度緊張,脾氣急躁的還少不了擠兌車主幾句。可是,並不是所有車主都有幸得到 人工倒車指引,比如說...

iOS知識原理篇

weak策略表明該屬性定義了一種 非擁有關係 nonowning relationship 為這種屬性設定新值時,設定方法既不保留新值,也不釋放舊值。此特質同assign類似 然而在屬性所指的物件遭到摧毀時,屬性值也會清空 nil out runtime對註冊的類,會進行布局,會將 weak 物件放...

MongoDB分片原理篇

mongodb目前3大核心優勢 靈活模式 高可用性 可擴充套件性 通過json文件來實現靈活模式,通過複製集來保證高可用,通過sharded cluster來保證可擴充套件性。何時使用分片技術 儲存容量需求超出單機磁碟容量 活躍的資料集超出單機記憶體容量,導致很多請求都要從磁碟讀取資料,影響效能 寫...