您的位置 首页 kreess

深度好文|面試官:進程和線程的所有知識點

大傢好,這裡是周日凌晨4點,仍在筆耕不輟的程序喵大人。下面隆重推出我嘔心瀝血,耗時半個月完成的精心力作:01什麼是進程?標準定義:進程是一個具有一定獨立功能的程序在一個數據

大傢好,這裡是周日凌晨4點,仍在筆耕不輟的程序喵大人。

下面隆重推出我嘔心瀝血,耗時半個月完成的精心力作:

01什麼是進程?

標準定義:進程是一個具有一定獨立功能的程序在一個數據集合上依次動態執行的過程。進程是一個正在執行程序的實例,包括程序計數器、寄存器和程序變量的當前值。

簡單來說進程就是一個程序的執行流程,內部保存程序運行所需的資源。

在操作系統中可以有多個進程在運行,可對於CPU來說,同一時刻,一個CPU隻能運行一個進程,但在某一時間段內,CPU將這一時間段拆分成更短的時間片,CPU不停的在各個進程間遊走,這就給人一種並行的錯覺,像CPU可以同時運行多個進程一樣,這就是偽並行。

02 進程和程序有什麼聯系?

一個進程是某種類型的一個活動,它有程序、輸入、輸出以及狀態。單個處理器可以被若幹進程共享,它使用某種調度算法決定何時停止一個進程的工作,並轉而為另一個進程提供服務。

  • 程序是產生進程的基礎
  • 程序的每次運行產生不同的進程
  • 進程是程序功能的體現
  • 通過多次執行,一個程序可對應多個進程;通過調用關系,一個進程可包括多個程序

03進程和程序有什麼區別?

進程是動態的,程序是靜態的:程序是有序代碼的集合,進程是程序的執行。

進程是暫時的,程序是永久的:進程是一個狀態變化的過程,程序可長久保存。

進程和程序的組成不同:進程的組成包括程序、數據和進程控制塊(進程狀態信息)。

04 進程有什麼特點?

動態性:可動態的創建和結束進程

並發性:可以被獨立的調度並占用處理機並發運行

獨立性:不同進程的工作不相互影響

制約性:因訪問共享資源或進程間同步而產生制約

05 進程如何創建?

有什麼事件會觸發進程的創建呢?

系統初始化:當啟動操作系統時,通常會創建很多進程,有些是同用戶交互並替他們完成工作的前臺進程,其它的都是後臺進程,後臺進程和特定用戶沒有關系,但也提供某些專門的功能,例如接收郵件等,這種功能的進程也稱為守護進程。計劃任務是個典型的守護進程,它每分鐘運行一次來檢查是否有工作需要它完成。如果有工作要做,它就會完成此工作,然後進入休眠狀態,直到下一次檢查時刻的到來。

正在運行的程序執行瞭創建進程的系統調用:在一個進程中又創建瞭一個新的進程,這種情況很常見。

用戶請求創建一個新進程:這種情況相信每個人都見過,用電腦時雙擊某個應用圖標,就會有至少一個進程被創建。

一個批處理作業的初始化:這種情形不常見,僅在大型機的批處理系統中應用,用戶在這種系統中提交批處理作業,在操作系統認為有資源可運行另一個作業時,它創建一個新的進程,並運行其輸入隊列中的下一個作業。

歸根到底:在UNIX系統中,隻有fork系統調用才可以創建新進程,使用方式如下:

#include <stdio.h>

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

返回顶部