進程認識
- (一)馮諾依曼體系結構
- 1.概念
- 從數據流向上理解馮諾依曼
- (二)操作系統(OS)
- 1.概念
- 2.設計目的
- 3. 如何理解操作系統的 "管理"
- 4.操作系統調用接口
- (三) 進程
- 1.概念
- 2.描述進程-PCB
- 3.如何對PCB進行管理?
(一)馮諾依曼體系結構
1.概念
???????
????
輸入設備
:包括鍵盤, 鼠標,掃描儀, 寫板等
輸出設備
:顯示器,打印機等,硬盤,網卡等
存儲器
: 指內存
中央處理器(CPU)
: 含有運算器(對數據進行計算任務)和控制器(對計算硬件流程進行一定的控制)等。在不考慮緩存情況,這里的CPU能且只能對內存進行讀寫,不能訪問外設(輸入或輸出設備)。
外設(輸入或輸出設備)要輸入或者輸出數據,也只能寫入內存或者從內存中讀取。
在不考慮緩存情況,這里的CPU能且只能對內存進行讀寫,不能訪問外設(輸入或輸出設備)。所有設備都只能直接和內存打交道。
從數據流向上理解馮諾依曼
對馮諾依曼的理解,不能停留在概念上,要深入到對軟件數據流理解上。
這一段的描述來自這位博主的博客,點我~
(二)操作系統(OS)
在整個計算機軟硬件架構中,操作系統的定位是:一款純正的“搞管理”的軟件(操作系統是一個對軟硬件進行管理的軟件!)
1.概念
任何計算機系統都包含一個基本的程序集合,稱為操作系統(OS)。籠統的理解,操作系統包括:
內核(進程管理,內存管理,文件管理,驅動管理)
其他程序(例如函數庫,shell程序等等)
2.設計目的
- 與硬件交互,管理所有的軟硬件資源為用戶程序(應用程序)提供一個良好的執行環境。
- 在整個計算機軟硬件架構中,操作系統的定位是:一款純正的“搞管理”的軟件(操作系統是一個對軟硬件進行管理的軟件!)
3. 如何理解操作系統的 “管理”
先描述再組織
是操作系統管理的核心。管理是通過對數據的管理
先描述,那怎么描述?
在操作系統中,管理任何對象,首先要對 對象的特征進行描述。描述便是對軟硬件資源的各種特征通過結構體對每一個對象的特征進行描述。
struct PCB
{
//各種信息等等
struct PCB* next;
};
描述表示描述被管理的對象。
再組織
在操作系統中,管理任何對象,最終都可以轉化為對某種數據結構的增刪改查。可以理解為對象之間通過鏈表(不一定是鏈表)的結構進行管理。
總結
計算機如何管理硬件?
- 描述起來,用struct結構體
- 組織起來,用鏈表或其他高效的數據結構
(即先描述,在組織)
4.操作系統調用接口
操作系統為了保證自己的數據安全,也為了保證給用戶提供服務,操作系統以接口的方式給用戶提供調用的入口。用戶以此來獲取操作系統內部的數據。
- 所以系統調用接口是什么???
是操作系統提供的用c語言實現的,自己內部的接口,所有訪問操作系統的行為,都只能通過系統調用來完成。
而在系統調用接口之上我們又封裝了用戶操作接口(簡單的理解就是我們編程時提供的庫等),而又在此之上,我們用戶(程序員)才是算是進行軟件開發。
1.在開發角度,操作系統對外會表現為一個整體,但是會暴露自己的部分接口,供上層開發使用,這部分由操作系統提供的接口,叫做系統調用。
2.系統調用在使用上,功能比較基礎,對用戶的要求相對也比較高,所以,有心的開發者可以對部分系統 調用進行適度封裝,從而形成庫,有了庫,就很有利于更上層用戶或者開發者進行二次開發。
????????
(三) 進程
1.概念
課本概念:
程序的一個執行實例,正在執行的程序等(一個加載到內存的程序或者正在運行的程序)內核觀點:
擔當分配系統資源(CPU時間,內存)的實體
當我們雙擊打開這個可執行程序的時候,將其運行起來的時候,本質來講也就是將這個可執行進程加載到內存中了,CPU才能對其程序進行逐語句的執行,而當這個程序加載到內存了以后,我們稱之為進程。
2.描述進程-PCB
- 進程信息被放在一個叫做進程控制塊的數據結構中,可以理解為進程屬性的集合
- 課本上稱之為PCB(process control block)Linux操作系統下的PCB是: task_struct
實際上描述進程的過程就是**先描述再組織
**。
進程 = 內核PCB數據結構對象(描述進程的所有屬性) + 代碼數據
3.如何對PCB進行管理?
任何一個進程,再加載到內存的時候,形成真正的進程時,操作系統要先創造描述進程的結構體對象----PCB(進程控制塊)
根據進程PCB的類型,為該進程創建對應的PCB對象。
對進程的管理,并不是對一整個進程做管理,而是對進程里面的PCB進行管理,
對PCB對象用雙向鏈表的數據結構進行鏈接,變成了對某種數據結構的增刪改查。
那么只對PCB進行管理,我們如何得到進程里面的代碼數據呢???
可以理解為,PCB存放有該對應的代碼數據的地址,當我們想要訪問該代碼和數據時,從PCB里面找到該地址即可。
這里只是對進程的管理方式的認識,后面博客中會對PCB屬性進行更深的理解。