進程(一)---- 操作系統、進程創建

進程概念:

  1. 馮諾依曼體系結構
  2. 認識操作系統
  3. 進程概念
  4. 進程狀態
  5. 環境變量
  6. 程序地址空間
  7. 進度調度

馮諾依曼體系結構

現代計算機硬件體系結構
輸入設備:採集獲取數據 鍵盤
輸出設備:數據輸出 顯示器
存儲器:內存
運算器:中央處理器cpu
控制器:
在這裏插入圖片描述
硬件結構決定軟件行爲:QQ聊天
所有的硬件都是圍繞着內存工作的

爲什麼不使用更大的硬盤作爲存儲器?

答:內存的存儲介質是一種易失性介質;輸入斷電後會丟失。所有設備都是圍繞內存工作,內存是中間的數據緩衝帶。

char buf[1024] ----------------申請一塊內存空間
scanf("%s",buf)-----------標準輸入設備獲取數據
printf(buf)-----------------------輸出

認識操作系統

操作系統:系統內核+外部應用
(內核)功能:管理計算機上的軟硬件資源
目的:讓計算機更加好用
操作系統如何管理計算機上的軟硬件資源:
在這裏插入圖片描述

庫函數與系統調用接口的關係:庫函數封裝了系統調用的接口。
系統調用接口:操作系統向上提供的系統核心功能的接口。

進程概念

	進程:一個運行起來的程序;
	程序:一系列有序的指令集合;
	CPU分時機制:CPU以極快的速度切換調度運行所有程序,造成大家都在同時運行的假象。

在這裏插入圖片描述

操作系統如何實現多個程序的調度運行?
答:將這個運行中的程序描述出來,然後將這些描述組織起來進行管理。通過實現對pcb的調度管理實現對運行中程序的切換調度運行,對於操作系統而言,pcb就是進程。
進程就是pcb,是操作系統對一個運行中程序的描述,通過這個描述,實現對程序的運行調度。
這個pcb/這個描述在Linux中是一個結構體,即		struct  task_struct{....} 

描述信息:內存指針,程序計數器,上下文數據,進程標識符PID,IO信息,進程狀態,記賬信息。

內存指針:子進程與父進程運行的代碼其實是一樣的—指向同一塊物理內存中的數據以及指令。

程序計數器/上下文數據:子進程被創建出來後,運行位置與父進程是完全一樣的,下一步即執行的指令都是從創建子進程成功之後開始的,創建一個子進程出來,跟父進程乾的事情是一樣的,因爲他們運行的代碼和數據以及當前的運行位置都是一樣的。
這個函數的返回值對於父子進程是不一樣的
在父進程中返回創建的子進程的pid
在子進程中返回的是0
通常根據fork的返回值進行代碼的分流,讓父子進程進入不同的判斷執行體完成不同的功能。
父子進程代碼共享,數據獨有。
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

併發:輪詢處理執行
並行:同時運行/執行

進程創建的初步認識

pid_t fork(void) …通過複製調用進程(父進程)創建一個新的進程(子進程)

進程的查看:ps -ef 或者ps -aux(更詳細)

進程狀態(5種):
1、運行態:(R)就緒/運行
2、可中斷休眠態(S):當前阻塞能夠被中斷喚醒
3、不可中斷休眠態(D):當前阻塞不能夠被中斷喚醒
4、停止態(T):停止運行,什麼也不幹
5:僵死態(Z):進程已經退出了,但資源沒有完全被釋放
殺死進程ps -aux / kill / kill -9強制殺死進程

殭屍進程

殭屍進程:處於殭屍狀態的進程,指的是進程已經退出不再運行,但是資源沒有完全釋放。
殭屍進程的產生:子進程先與父進程退出,但是父進程沒有關注子進程的退出狀態,因此子進程成爲殭屍進程。
殭屍進程的危害:資源泄露,一個用戶所能創建的進程數量是有限的,並且資源沒有完全回收會佔據內存資源。
處理方法:進程等待。退出父進程(父進程退出,子進程保存退出原因就沒有意義了因此就被釋放了)。

孤兒進程

父進程先於子進程退出,則子進程成爲孤兒進程,這個孤兒進程的父進程成爲了1號進程,並且這個孤兒進程運行在後臺。
孤兒進程不會成爲殭屍進程的,因爲1號進程隨時關注子進程退出

守護進程(精靈進程)

守護進程是一種特殊的孤兒進程,父進程是1號進程,運行在後臺+++++與終端以及登錄會話脫離關係,不再受影響。
守護進程通常是一種運行在系統後臺的批處理程序(默默的做一些循環往復的事情)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章