深入理解電腦系統(1.3)---金字塔形的存放裝置、作業系統的抽象概念

來源:互聯網
上載者:User

標籤:

本文轉載地址:http://www.cnblogs.com/zuoxiaolong/p/computer3.html

 

           上一章LZ給各位展示了一下hello程式的簡單執行過程,可以看出在這一過程當中,系統在資料的傳輸上花費了大量的時間。硬體開發商為了減少這種資料轉送的時間成本,採用一種快取的技術去減少這種時間成本。

           快取被置放於處理器當中,與處理器中的寄存器檔案直接進行資料交換,這樣大大減少了資料轉送的時間成本,使得程式的運行速度可以得到數倍的提升。而作為一個程式猿,如果可以適當的利用快取去存放一些程式運行過程中可能會經常使用的資料,可以將程式的運行速度提高數倍甚至數個數量級。

           由此就可見快取的重要性,展示了硬體分布中,快取的位置。

存放裝置的金字塔

 

           當今的電腦系統當中,基本上全部都置入了各種各樣的存放裝置,這些存放裝置呈明顯的階層,它們的特點是容量越大,速度越慢。因此如果按照容量和速度將它們以圖示的方式呈現的話,則看起來就像是一個金字塔,如下所示。

           不過這個圖是英文版的,LZ稍微解釋下,有些特別明顯的LZ就不解釋了,如果有哪位猿友實在不明白,可以到LZ的群裡提問。

           左邊的意思是更小更快更貴的存放裝置,包括寄存器以及L1-L3的快取,以及更大更慢更便宜的存放裝置,包括主存、本地磁碟以及遠程存放裝置。通常意義下,我們將上一層的存放裝置作為當前存放裝置的快取,比如L1的快取是寄存器,L2的快取是L1,以此類推。

 

作業系統是硬體的manager

 

           作業系統是幫我們操控硬體的軟體,它就像是應用程式與硬體的中間者,在兩者之間扮演一個協調、管理的角色。它們的關係如。

          作業系統提供了幾個我們熟悉的概念去表示硬體裝置,比如進程、虛擬儲存空間、檔案。它們表示的硬體裝置如所示。

          可以看出檔案是對I/O裝置的抽象描述,而虛擬儲存空間是對主存和I/O裝置的統稱,最後,一個進程在此基礎上又加入了處理器。

 

進程

 

           進程是作業系統對一個正在啟動並執行程式的抽象。作業系統會記錄每一個進程的狀態,這些狀態就稱作進程的上下文。這些狀態主要包括了PC,寄存器以及主存的當前內容。當作業系統在進程間切換的時候,也會切換相應的上下文,從而保證進程恢複到之前的狀態。

           在進程當中,又被電腦界的大神們引入了線程的概念,這些線程可以共用進程級的代碼與資料,這種共用一般比進程間的共用更加高效。

 

虛擬儲存空間

 

           虛擬儲存空間是一種抽象描述,從物理上講,它包含了I/O裝置以及主存。在邏輯上講,虛擬儲存空間被描述為虛擬位址空間。為進程的虛擬位址空間表示。

 

           這裡的地址自下向上依次增大,可以看出,圖中標註了起始地址,分別為0x08048000(32位)以及0x00400000(64位),然後向上分別是唯讀代碼和資料、讀寫資料、運行時堆、共用庫的記憶體映射區間、使用者棧以及核心虛擬記憶體地區

           看完這個圖,LZ有一個疑問,就是這兩個32位和64位的起始地址是從何而來,於是小小的簡單探索了一下。

           LZ在32位的linux系統上做了個測試,我們隨便寫一個C程式,然後使用GCC加上參數-Wl,--verbose去編譯這個檔案,於是我們便可以在連結器指令碼裡看到這些內容。如所示。

           在裡面我們可以看到0x08048000這個記憶體位址,__executable_start表面看來的意思是可執行檔起始位置。具體這個數位來由LZ沒有找到,我們可以先存著這個疑問,或許在書中後面的內容會解答這個疑問。(小提示:有些東西一時搞不明白,不要沉迷於此,會得不償失)

           從這個地址向上則分了大致五個儲存地區。

           程式碼和資料:這些內容的起始地址就是0x08048000,首先是代碼,然後是一些全域變數。

           :是運行時可以動態擴充的一部分記憶體地區,它可以由malloc和free這樣的標準庫函數操作。

           共用庫:用於存放共用庫的代碼和資料。

           :在使用者虛擬位址空間的頂部是棧,這部分地區與函數的執行有密切的關係。

           核心虛擬儲存地區:核心是作業系統的一部分,就LZ粗淺的理解,核心也可以看做是一個進程,它在電腦運行期間總是在運行著,因此這部分記憶體地區對使用者程式是不可見的,通俗的說就是不能用。

 

檔案

 

          檔案是I/O裝置邏輯上的概念,它其實就是位元組序列,也就是1和0組成的一些資訊。因此所有的I/O裝置,包括磁碟、鍵盤、滑鼠、顯示器都可以看成是檔案。

 

網路

 

          前面說了,所有的I/O裝置其實都是檔案這一抽象概念的具體表現,那麼網路其實也是檔案的一種,因為說到底,它也可以被看做是一系列的位元組序列。網路介面卡的作用就是給電腦輸入一堆被傳送過來的位元組序列,這裡面可能包括圖片、文字,甚至可能是代碼等等。

 

文章小結

 

          本文主要介紹存放裝置的層次以及作業系統中的三個抽象概念,下一章是並發與並行的簡單介紹,也是電腦簡介的最後一章。

深入理解電腦系統(1.3)---金字塔形的存放裝置、作業系統的抽象概念

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.