摘要:電腦上的程序有很多,它們都以二進制文件的形式保存在硬盤上。文件系統需要一個系統進行統一管理,稱為文件管理子系統。的二進制文件是靜態的,稱為程序,運行起來的,是不斷進行的,稱為進程。在操作系統中,也有同樣的問題。
不知道你有沒有產生過這些疑問:
桌面上的圖標到底是啥?憑啥我在鼠標上一雙擊,就會出來一些不可描述的畫面?都是從哪里跑出來的?
憑什么我在鍵盤上噼里啪啦地敲,某個位置就會顯示我想要的那些字符?
電腦怎么知道我鼠標點擊的是這個地方,又是怎么知道我要輸入的是這個地方?
我在鍵盤上點“a”,是誰在顯示器上畫出“a”這個圖像呢?
為什么我一回車,這些字符就發到遙遠的另外一臺機器上去了?
別小看“雙擊鼠標打開聊天軟件”這樣一個簡單的操作,它幾乎涵蓋了操作系統的所有功能。我們就從這個熟悉的操作,來認識陌生的操作系統。
操作系統其實就像一個軟件外包,內核就相當于這家外包公司的老板。所以接下來請你將自己的角色切換成這家軟件外包公司的老板,設身處地地去理解操作系統是如何協調各種資源,幫客戶做成事情的。
今后所說的“用戶”,都是指操作系統的用戶,“客戶”則是指外包公司的客戶,這兩者是對應的。
1 雙擊運行軟件,觸動了哪些硬件呢 1.1 鼠標和鍵盤計算機的輸入設備。
用戶想要告訴計算機應該做什么,都是通過這兩個設備。
如果是一家外包公司,怎么才能知道客戶的需求呢?你需要配備銷售、售前等角色,專門負責和客戶對接,把客戶需求拿回來,我們把這些人統稱為客戶對接員。你可以跟客戶說,有什么事兒都找對接員。
1.2 屏幕也就是顯示器,是計算機的輸出設備,將計算機處理用戶請求后的結果反饋給客戶。
顯示器上面顯示的東西是由顯卡控制的。
無論是顯示器還是顯卡,這里都有個“坐標”的概念,也就是說,什么圖像在哪個坐標,都是定義好了才畫上去的。本來在某個坐標畫了一個鼠標箭頭,當接到鼠標移動的事件之后,你應該按相同的方向,按照一定的比例(鼠標靈敏度),在屏幕的某個坐標再畫一個鼠標箭頭。
作為外包公司,當客戶給你提了需求,不管你做還是不做,最終做成什么樣,你都需要給客戶反饋,所以你要配備交付人員,將做好的需求展示給他們看。
1.3 輸入設備驅動其實就是客戶對接員。有時候新插上一個鼠標的時候,會彈出一個通知你安裝驅動,這就是操作系統這家外包公司給你配備對接人員呢。當客戶告訴對接員需求的時候,對于操作系統來講,輸入設備會發送一個中斷。這個概念很好理解。客戶肯定希望外包公司把正在做的事情都停下來服務它。所以,這個時候客戶發送的需求就被稱為中斷事件(Interrupt Event)。
1.4 輸出設備驅動顯卡會有顯卡驅動,在操作系統中稱為輸出設備驅動,也就是上面說的交付人員。
2 從點擊程序,窺探OS全貌有了客戶對接員和交付人員,外包公司就可以處理用戶“在桌面上點擊QQ圖標”的事件了。
首先,鼠標雙擊會觸發一個中斷,這相當于客戶告知客戶對接員“有了新需求,需要處理一下”。你會事先把處理這種問題的方法教給客戶對接員。在操作系統里面就是調用中斷處理函數。操作系統發現雙擊的是一個圖標,就明白了用戶的原始訴求,準備運行QQ和別人聊天。
你會發現,運行QQ是一件大事,因為將來的一段時間,用戶要一直和QQ進行交互。
這就相當于你們公司接了一個大單,而不是處理零星的客戶需求,這個時候應該多帶帶立項。一旦立了項,以后與這個項目有關的事情,都由這個項目組來處理。
2.1文件管理系統立項可不能隨便立,一定要有一個項目執行計劃書,說明這個項目打算怎么做,一步一步如何執行,遇到什么情況應該怎么辦等等。
換句話說,對QQ這個程序來說,它能做哪些事情,每個事情怎么做,先做啥后做啥,都已經作為程序邏輯寫在程序里面,并且編譯成為二進制了。這個程序就相當于項目執行計劃書。
電腦上的程序有很多,它們都以二進制文件的形式保存在硬盤上。硬盤是個物理設備,要按照規定格式化成為文件系統,才能存放這些程序。文件系統需要一個系統進行統一管理,稱為文件管理子系統(File Management Subsystem)。
2.2 進程與程序對于你們公司,項目立得多了,項目執行計劃書也會很多,同樣需要有個統一保存文件的檔案庫,而且需要有序地管理起來。
當你從資料庫里面拿到這個項目執行計劃書,接下來就需要開始執行這個項目了。項目執行計劃書是靜態的,項目的執行是動態的。
同理,當操作系統拿到QQ的二進制執行文件的時候,就可以運行這個文件了。
QQ的二進制文件是靜態的,稱為程序(Program),
運行起來的QQ,是不斷進行的,稱為進程(Process)。
2.3 系統調用你會發現,一個項目要想順暢進行,需要用到公司的各種資源,比如說蓋個公章、開個證明、申請個會議室、打印個材料等等。
這里有個兩難的權衡
資源有限,甚至是涉及機密的,不能由項目組濫取濫用
效率,咱是一個私營企業,保證項目申請資源的時候只跑一次,這樣才能比較高效。
為了平衡這一點,一方面涉及核心權限的資源,還是應該被公司嚴格把控,審批了才能用;
另外一方面,為了提高效率,最好有個統一的辦事大廳,明文列出提供哪些服務,誰需要可以來申請,然后就會有回應。
在操作系統中,也有同樣的問題。
例如多個進程都要往打印機上打印文件,如果隨便亂打印進程,就會出現同樣一張紙,第一行是A進程輸出的文字,第二行是B進程輸出的文字,全亂套了。所以,打印機的直接操作是放在操作系統內核里面的,進程不能隨便操作。但是操作系統也提供一個辦事大廳,也就是系統調用(System Call)。
系統調用也能列出來提供哪些接口可以調用,進程有需要的時候就可以去調用。
這其中,立項是辦事大廳提供的關鍵服務之一。同樣,任何一個程序要想運行起來,就需要調用系統調用,創建進程。
2.4 進程管理系統一旦項目正式立項,就要開始執行,就要成立項目組,將開發人員分配到這個項目組,按照項目執行計劃書一步一步執行。
為了管理這個項目,我們還需要一個項目經理、一套項目管理流程、一個項目管理系統,例如程序員比較熟悉的Jira。如果項目多,可能一個開發人員需要同時執行多個項目,這就要考驗項目經理的調度能力了。
在操作系統中,進程的執行也需要分配CPU進行執行,也就是按照程序里面的二進制代碼一行一行地執行。
于是,為了管理進程,我們還需要一個進程管理子系統(Process Management Subsystem)。如果運行的進程很多,則一個CPU會并發運行多個進程,也就需要CPU的調度能力了。
2.5 內存管理系統每個項目都有自己的私密資料,這些資料不能被其他項目組看到。這些資料主要是項目在執行的過程中,產生的很多中間成果,例如架構圖、流程圖。
執行過程中,難免要在白板上或者本子上寫寫畫畫,如果不同項目的辦公空間不隔離,一方面,項目的私密性不能得到保證,A項目的細節,B項目也能看到;另一方面,項目之間會相互干擾,A項目組的人剛在白板上畫了一個架構圖,出去上個廁所,結果B項目組的人就給擦了。
如果把不同的項目組分配到不同的會議室,就解決了這個問題。當然會議室是有限的,需要有人管理和分配,并且需要一個會議室管理系統。
在操作系統中,不同的進程有不同的內存空間,但是整個電腦內存就這么點兒,所以需要統一的管理和分配,這就需要內存管理子系統(Memory Management Subsystem)。
如果想直觀地了解QQ如何使用CPU和內存,可以打開任務管理器,你就能看到QQ這個進程耗費的CPU和內存。
項目執行的時候,有了一定的成果,就要給客戶演示。例如客戶說要做個應用,我們做出來了要給客戶看看,如果客戶說哪里需要改,可以根據客戶的需求再改,這就需要交付人員了。
QQ啟動之后,有一部分代碼會在顯示器上畫一個對話框,并且將鍵盤的焦點放在了輸入框里面。CPU根據這些指令,就會告知顯卡驅動程序,將這個對話框畫出來。
于是使用QQ的用戶就會很開心地發現,他能和別人開始聊天了。
當用戶通過鍵盤噼里啪啦打字的時候,鍵盤也是輸入設備,也會觸發中斷,通知相應的輸入設備驅動程序。
我們假設用戶輸入了一個“a”。這就像客戶提出了新的需求給客戶對接員。客戶對接員收到需求后,因為是對接這個項目的,因而就回來報告,客戶提新需求了,項目組需要處理一下。項目執行計劃書里面一般都會有當遇到何種需求應該怎么做的規定,項目組就按這個規定做了,然后讓交付人員再去客戶那里演示就行了。
對于QQ來講,由于鍵盤閃啊閃的焦點在QQ這個對話框上,因而操作系統知道,這個事件是給這個進程的。QQ的代碼里面肯定有遇到這種事件如何處理的代碼,就會執行。一般是記錄下客戶的輸入,并且告知顯卡驅動程序,在那個地方畫一個“a”。顯卡畫完了,客戶看到了,就覺得自己的輸入成功了。
當用戶輸入完畢之后,回車一下,還是會通過鍵盤驅動程序告訴操作系統,操作系統還是會找到QQ,QQ會將用戶的輸入發送到網絡上。QQ進程是不能直接發送網絡包的,需要調用系統調用,內核使用網卡驅動程序進行發送。
這就像客戶對接員接到一個需求,但是這個需求需要和其他公司溝通,這就需要依靠公司的對外合作部,對外合作部在辦事大廳有專門的窗口,非常方便。
總結到這里,一個外包公司大部分的職能部門都湊齊了。你可以對應著下圖的操作系統內核體系結構,回顧一下它們是如何組成一家公司的。
QQ的運行過程,只是一個簡單的比喻。在后面的章節中,我會展開講述每個部分是怎么工作的,最后我會再將這個過程串起來,這樣你就能了解操作系統的全貌了。
操作系統內核體系結構圖 參考趣談Linux操作系統
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/75801.html
摘要:六文件類型與目錄結構支持很多文件類型,其中非常重要的文件類型有普通文件,目錄文件,鏈接文件,設備文件,管道文件,套接字文件等。套接字文件套接字文件被用于網絡進程之間的通信,既可以使臺不同的機器進行通信,也可以用于本機的網絡程序。一、Linux簡介類Unix系統: Linux是一種自由、開放源碼的類似Unix的操作系統Linux內核: 嚴格來說,Linux這個詞本身只表示Linux內核Linu...
摘要:編程書籍的整理和收集最近一直在學習深度學習和機器學習的東西,發現深入地去學習就需要不斷的去提高自己算法和高數的能力然后也找了很多的書和文章,隨著不斷的學習,也整理了下自己的學習筆記準備分享出來給大家后續的文章和總結會繼續分享,先分享一部分的 編程書籍的整理和收集 最近一直在學習deep learning深度學習和機器學習的東西,發現深入地去學習就需要不斷的去提高自己算法和高數的能力然后...
閱讀 3640·2023-04-26 02:07
閱讀 3150·2021-09-22 15:55
閱讀 2534·2021-07-26 23:38
閱讀 3119·2019-08-29 15:16
閱讀 2008·2019-08-29 11:16
閱讀 1746·2019-08-29 11:00
閱讀 3583·2019-08-26 18:36
閱讀 3164·2019-08-26 13:32