天天看點

讀書筆記Pt.2——《深入了解計算機系統》

目錄

  • ​​傳統藝能????​​
  • ​​儲存設備的層次結構????​​
  • ​​作業系統管理硬體????​​
  • ​​程序????​​
  • ​​上下文切換????​​
  • ​​線程????​​
  • ​​虛拟存儲器????​​
  • ​​檔案????​​
  • ​​系統之間利用網絡通信????​​
  • ​​線程級并發????​​

傳統藝能????

小編是雙非大學大一菜鳥不贅述,歡迎大佬指點江山

此前部落格​​點我!點我!請搜尋部落客 【知曉天空之藍】​​

喬喬的gitee代碼庫(打灰人 )​​歡迎通路,點我!​​

????????非科班轉碼社群誠邀您入駐????????

小夥伴們,打碼路上一路向北,背後煙火,彼岸之前皆是疾苦

一個人的單打獨鬥不如一群人的砥砺前行

這是我和夢想合夥人組建的社群,誠邀各位有志之士的加入!!

社群使用者好文均加精(“标兵”文章字數2000+加精,“達人”文章字數1500+加精)

直達: ​​社群連結點我​​

讀書筆記Pt.2——《深入了解計算機系統》

儲存設備的層次結構????

實際上,每個計算機系統中的存現虎裝置都被組織成了一個存儲器層次結構,想象一下網一個又大又慢的裝置之間插入一個又小又快的儲存設備,就是這種層次結構現在已經成為了一個普遍的概念,如下:

讀書筆記Pt.2——《深入了解計算機系統》

這個圖的主要思想就是想告訴我們上一層的存儲器作為低一層存儲器的高速緩存,也就是寄存器是L1的高速緩存,L2是L1的高速緩存,以此類推。

就像可以用不同的高速緩存知識來提高程式的性能,我們一眼可以利用對整個存儲器層次的原理的了解來提高程式性能。

作業系統管理硬體????

接下來的内容在學校學過計組的讀者都會比較熟悉了。

讀書筆記Pt.2——《深入了解計算機系統》

我們可以把作業系統看作是插入在程式和硬體之間的一層軟體,因為所又的程式對硬體的操作都必須通過作業系統。

讀書筆記Pt.2——《深入了解計算機系統》

作業系統有兩個基本功能:

  1. 防止硬體被失控的程式濫用;
  2. 向程式提供一種機制來控制“長得像”而複雜的低級硬體裝置;

這兩個功能靠什麼實作呢?

答:程序,虛拟存儲器,檔案三者來抽象表示。接下來我會解釋他們

程序????

hello world 程式在運作時,作業系統會提供一種假象,因為螢幕上隻會出現執行結果,就好像系統上隻有這一個程式在運作,此時的處理器,I/O裝置,主存似乎都被這個程式所用,處理器就好像一條一條執行程式中的指令。這些假象都是通過程序的概念來實作的。

程序這個概念算是計算機中最重要最成功的概念之一了,他是對一個正在運作的程式的一種抽象。一個系統可以有很多的程序,似乎每個程序都在獨占硬體。而并發運作提出一個程序和另一個程序是交錯執行的。

在作業系統中,并發是指一個時間段中有幾個程式都處于已啟動運作到運作完畢之間,且這幾個程式都是在同一個處理機上運作,但任一個時刻點上隻有一個程式在處理機上運作

上下文切換????

需要運作的程序數要堆多于可以運作他們的CPU數的,如今大多的多核處理器都可以處理多個程式,但無論是單核還是多核,一個CPU都像是在并發運作多個程序,通過處理器在程序間切換來實作,這種機制就叫上下文切換,為了友善我們預設為隻有一個CPU。

什麼是上下文?他是指作業系統保持跟蹤程序所需的所有狀态資訊。任何時刻,單處理器隻能處理一個程序的代碼,如果他決定把控制權轉移到一個新程序,就會進行上下文切換,儲存目前上下文,恢複新程序上下文,然後遞交控制權新程序就會從上次停止的地方開始,以 hello world 為例大緻長成這樣:

讀書筆記Pt.2——《深入了解計算機系統》

實作這個抽象概念需要低級硬體和作業系統的配合,原理咱後面會談。

讀書筆記Pt.2——《深入了解計算機系統》

線程????

我們認為單個程序隻能有一個單一的控制流,但現代系統中,一個程序可以由多個線程執行單元組成,每個線程都運作在程序的上下文裡面,共享相同的資料與代碼。

因為多線程之間比對多程序更容易共享資料,是以線程一般比程序更高效。多處理器可用時,多線程也是使程式更高效的方法。

虛拟存儲器????

既然帶虛拟二字,就代表他是一個抽象概念,他是為程序提供假象的罪惡之源。其實每個程序看到的一緻的存儲器,被稱為虛拟位址空間。

他的結構從最低的位址開始向上分别是:

  1. 程式代碼和資料:對所有的程序都是,代碼是從後同一個固定位址開始的。
  2. 堆:緊随的就是運作時堆。這和堆區一樣是可供我們自主配置設定空間的區域。
  3. 共享庫:用來存放C标準庫(stdio.h)和數學庫(math.h )等,共享庫的概念很強大也很難懂,一樣後面講。
  4. 棧:位于使用者虛拟位址空間的使用者棧,用來調用函數,可以像堆一樣動态開辟和回收(函數的調用和傳回)
  5. 核心虛拟存儲器:核心是作業系統的一部分,虛拟存儲器運作需要硬體與作業系統精密複雜的互動。

檔案????

檔案就是位元組序列。

每個硬體裝置都可以被視為檔案,磁盤,鍵盤,甚至網絡,系統裡面所有的輸入輸出都是依靠一組Unix I/O 系統來調用讀寫檔案來實作的。

檔案這個簡單卻精緻的概念十分豐富,它向程式提供了一個統一的視角來看待各式各樣的I/O裝置

系統之間利用網絡通信????

我們一直把系統視為一個獨立的軟硬體集合體,實際上現代經常通過網絡和其他系統連結到一起。從一個單獨的系統來看,網絡可視為一個I/O裝置,系統複制一串位元組到網絡擴充卡,資料流經網絡到另一台機器而不是其他地方,同理機器可以讀取從其他地方發來的資料,并複制到自己主存(這裡沒挂圖,圖比較抽象對了解也沒有太大幫助)。

細想一下這種機制不就是我們郵件,即時通信,上網這樣的場景都涉及到的嗎。這就可以涉及到用戶端與伺服器的典型互動方式:在遠端主機上敲了一句哈哈哈,此時用戶端是連接配接到遠端主機上的伺服器的,遠端接收到輸入指令,就開始五步走戰略:

讀書筆記Pt.2——《深入了解計算機系統》

這裡的圖大家意會了解就可以了,主要是體會一個過程,現在有些概念比較晦澀難懂(以上語言描述經過了我主管二次修改,意思是一樣的)

線程級并發????

我們一直在要求計算機做的更多與做的更快,并發就是指一個同時具有多個活動的系統,并行是指并行使系統運作更快比如多線程。

我們設計出同時執行多個程式的系統,就會導緻并發,線程概念甚至允許我們一個程序使用多個控制流,傳統上并發隻是模拟出來的,通過正在執行的程序快速切換實作就像一個雜技演員同時抛多個球,這就允許了許多人從一個 web 伺服器擷取頁面的場景。多處理器系統是随着多核處理器和超線程的出現才變得常見,多核處理器是把多個CPU(核)內建到一個內建電路晶片上。

這裡的超線程是同時多線程,允許一個CPU執行多個控制流的技術,正常處理器需要大約20 000個時鐘周期做不同線程之間的轉換,而超線程處理器可以在單個周期決定執行哪一個線程,這使得CPU能更好利用他處理資源。

讀書筆記Pt.2——《深入了解計算機系統》

繼續閱讀