Process學習

  主要系統總結下我對進程的認識,之前理解得不夠全面不夠深刻。本文確定還不夠好,當有新的認識新的理解後還會隨時來更新。讀完本文,下面幾個問題即可理解清楚。linux

 

1.進程是什麼?windows

2.爲何要有進程這個概念?安全

3.進程須要哪些成分?數據結構

4.進程怎麼管理?多線程

5.進程狀態?操作系統

 

進程的定義線程

進程就是計算機程序被執行的實例。linux系統能夠top命令查看進程,大部分人仍是用windows,你應該有過電腦很卡的時候吧?這個時候怎麼辦?Ctrl+Alt+Del打開任務管理器,查看是哪一個或哪幾個進程佔用了大部分的cpu,關掉後,你的電腦又開始流暢起來了。code

 

爲何要有進程blog

  操做系統就是由不少程序代碼組成的,只是很是複雜。一個程序的執行是這樣的,首先,程序代碼在輔助存儲器(通常是硬盤)裏,加載到主存(memory),cpu分配資源和處理器時間給機器碼(代碼最終都必須編譯成機器碼)。一個cpu只能執行一個程序,若是不採起諸如多線程之類的技術,計算機中那麼多程序要使用cpu呢?雖然如今已經有多核cpu了,可是和程序的數量比,仍是不夠。那麼多程序要爭奪cpu使用權,是否是須要好好管理下,進程就是爲了這個使命而誕生的,有了進程,管理和調度進入主存的程序就會比較方便。進程

 

進程的組成

進程由5部分組成:

(1)和程序相關的可執行的機器碼的一個鏡像;(代碼的最終形態,就是一些指令的集合,只不過如今是0101)

(2)主存;(要存放code,data等)

(3)操做系統資源描述符;(文件描述符,數據來源等)

(4)安全屬性;(英文叫security attributes,進程擁有者或進程權限)

(5)進程context;(寄存器的內容,物理內存地址等)

 

進程的管理

管理進程所須要的信息在process control blocks裏面。這個數據結構在操做系統內核裏。管理一個進程所須要的信息就存儲在這個數據結構裏面了。裏面有哪些信息呢?

  (1)進程識別數據;

  (2)處理器狀態數據;

  (3)進程控制數據。

  os就是經過進程識別數據(進程id)來識別不一樣進程,根據處理器狀態數據和進程控制數據來管理進程。

 

進程的狀態

Wating,Running,Blocked狀態下的進程在主存裏。

  當一個進程"Created"的時候,process就從輔助存儲器加載到主存,process scheduler給process一個狀態"Waitting"。之因此有個Waitting是由於要進入Running狀態須要些準備工做,這個著名的準備工做叫context switch(就是上下文環境切換,一個進程的某個時刻的信息的記錄),當scheduler完成context switch後,process就進入處理器,狀態更新爲"running",處理器執行指令。

  當一個進程須要等待資源(等待用戶輸入或打開文件)時,process就變爲「blocked」狀態,當等待的資源來到時,process就進入「watting」狀態。

  當一個process完成任務或被用戶強行中斷,process就進入「Terminated」狀態。主存裏關於這個process的全部數據將被刪除。

相關文章
相關標籤/搜索