1. 程式人生 > >理解計算機(一)計算機中的抽象概念

理解計算機(一)計算機中的抽象概念

我們可以把作業系統看成是應用程式和硬體之間插入的一層軟體,所有應用程式對硬體的操作嘗試都必須通過作業系統。
這裡寫圖片描述

作業系統的兩個基本功能:
(1)防止硬體被失控的應用程式濫用
(2)嚮應用程式提供一致的機制來控制複雜而又通常大不相同的低階硬體裝置。作業系統通過幾個基本的抽象概念(程序,虛擬記憶體和檔案)來實現這個兩個功能。
這裡寫圖片描述
檔案是對I/O裝置的抽象表示
虛擬記憶體是對主存個磁碟I/O裝置的抽象表示,程序則是對處理器,主存和I/O裝置的抽象表示。

程序

程序是作業系統對一個正在執行的程式的一種抽象。在一個系統上可以同時執行多個程序,而每個程序都好像是單獨佔使用硬體。併發執行是指一個程序的指令可以和另一個程序的指令交錯執行。在大多數系統中,需要執行的程序數是多於可以執行他們的CPU個數的。傳統系統在一個時刻只能執行一個程式,而先進的多核處理器同時能夠執行多個程式,這是通過處理器在程序間切換來實現的。作業系統實現這種交錯執行的機制稱為上下文切換。

討論單個CPU的單處理器系統的情況
這裡寫圖片描述
作業系統保持跟蹤程序執行需要的所有狀態,這種狀態就是上下文,包括許多資訊,比如PC和暫存器檔案的當前值,以及主存中的內容。在任意時刻,單處理器系統都只能執行一個程序的程式碼。當作業系統決定把控制權從當前程序轉移到某個新程序時,就會執行上下文的切換,即儲存當前程序的上下文,恢復新程序的上下文,然後將控制權傳遞給新程序,新程序就從他上次停止的地方開始。
從一個程序到另一個程序的切換是由作業系統核心(kernel)管理的。核心是從作業系統程式碼常駐記憶體的部分,當應用程式需要作業系統的某些操作時,比如讀寫檔案,他就執行一條特殊的系統呼叫指令,將控制權傳遞給核心,然後核心執行被請求的操作並返回應用程式。注意,核心不是一個獨立的程序。相反,它是系統管理全部程序所用程式碼和資料的集合。

執行緒

儘管通常我們認為一個程序只有單一的控制流,但是在現代系統中,一個程序實際上可以由很多可以稱為執行緒的執行單元組成,每個執行緒都執行在程序的上下文中,並共享同樣的程式碼和全域性資料。由於網路伺服器中對並行處理的需求,執行緒成為越來越重要的程式設計模型,因為多執行緒之前比多程序之間更容易共享資料,執行緒一般而言比程序更高效。

虛擬記憶體

虛擬記憶體是一個抽象的概念,它為每一個程序提供了一個假象,即每個程序都在單獨的使用主存。每個程序看到的記憶體是一一致的,稱為虛擬地址空間。

併發和並行

併發:指一個同時具有多個活動的系統
並行:指的是用併發來使一個系統執行的更快。

計算機系統中抽象的重要性

抽象是電腦科學中最為重要的概念之一。比如我們為一組函式規定一個簡單的應用程式介面(API)就是一個很好的程式設計習慣,程式設計師無需瞭解它內部的工作便可以使用這些程式碼。不同的程式語言提供不同形式和等級的抽象支援,例如Java類的宣告和C語言的函式原型。
如下圖,在處理器裡,指令集架構提供了對實際處理器硬體的抽象。使用這個抽象,機器程式碼表現得幾號箱執行在一個依稀執行一條指令的處理器上。底層的已經遠比抽象描述的要複雜驚喜,它並行的執行多條指令,但又總是與那個簡單有序的模型保持一致。只要執行的模型一樣,不同的處理器實現也能執行同樣的機器程式碼,而有提供不同的開銷和效能。
這裡寫圖片描述
幾個抽象概念的額介紹:
檔案:對I/O裝置的抽象
虛擬記憶體:對程式儲存器的抽象
程序:對一個正在執行的程式的抽象
虛擬機器:對整個計算機的抽象,包括作業系統,處理器和程式

計算機系統是由硬體和系統軟體組成,它們共同協作以執行應用程式,計算機內部的資訊被表示為一組組位,它們依據上文有不同的解釋方式,程式被其他程式翻譯成不同形式,開始是ASCII文字,然後被編譯器和連結器翻譯成二進位制可執行檔案。
處理器讀取並解釋存放在主存中的二進位制指令,因為計算機花費大量時間在記憶體,I/O裝置和CPU暫存器之間複製資料,所以系統中的儲存裝置劃分成層次結構-CPU暫存器在頂部,接著是多層的硬體告訴快取儲存器,DRSM主存和磁碟儲存器。在層次模型中,位於更高層的儲存裝置比低層的儲存裝置要快,單位位元造價也更高。層次結構中較高層次的儲存裝置可作為較低層析的儲存裝置的告訴快取。理解這種儲存裝置,可以優化C程式的效能。