主要系統總結下我對進程的認識,之前理解得不夠全面不夠深刻。本文確定還不夠好,當有新的認識新的理解後還會隨時來更新。讀完本文,下面幾個問題即可理解清楚。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的全部數據將被刪除。