摘要:詳解進程在中的作用,組成,什么是父子進程系統(tǒng)是一個多進程的系統(tǒng),它的進程之間具有并行性互不干擾等特點。中的進程包含個段,分別為數(shù)據(jù)段代碼段和堆棧段。
1.什么是進程?
進程的經(jīng)典定義是一個執(zhí)行中程序的實例,同時也是資源分配的最小單元。系統(tǒng)中的每個程序都運行在某個進程中的上下文中,上下文是由程序正確運行所需的狀態(tài)組成的。這個狀態(tài)包括存放在內(nèi)存中的程序的代碼和數(shù)據(jù),它的棧、通用目的寄存器的內(nèi)容、程序計數(shù)器、環(huán)境變量以及打開文件描述符的集合。
進程的生命周期:
創(chuàng)建: 每個進程都是由其父進程創(chuàng)建進程可以創(chuàng)建子進程,子進程又可以創(chuàng)建子進程的子進程
運行: 多個進程可以同時存在進程間可以通信
撤銷: 進程可以被撤銷,從而結(jié)束一個進程的運行
進程的分類:
交互進程、批處理進程和守護進程
進程的屬性:
進程ID(PID):是唯一的數(shù)值,用來區(qū)分進程
父進程和父進程的ID(PPID)
啟動進程的用戶ID(UID)和所歸屬的組(GID)
進程狀態(tài):運行R、休眠S、僵尸Z
執(zhí)行狀態(tài):進程正在占用CPU
就緒狀態(tài):進程已具備一切條件,正在等待分配CPU的處理時間片
等待狀態(tài):進程不能使用CPU,若等待事件發(fā)生則可將其喚醒
程序是放到磁盤的可執(zhí)行文件,進程是指程序執(zhí)行的實例;
進程是動態(tài)的,程序是靜態(tài)的:程序是有序代碼的集合。通常進程不可在計算機之間遷移;而程序通常對應(yīng)著文件、靜態(tài)和可以復(fù)制;
進程是暫時的,程序是長久的:進程是一個狀態(tài)變化的過程,程序可長久保存;
進程與程序組成不同:進程的組成包括程序、數(shù)據(jù)和進程控制塊(即進程狀態(tài)信息);
進程與程序的對應(yīng)關(guān)系:通過多次執(zhí)行,一個程序可對應(yīng)多個進程;通過調(diào)用關(guān)系,一個進程可包括多個程序。
3.詳解進程在linux中的作用,組成,什么是父子進程?Linux系統(tǒng)是一個多進程的系統(tǒng),它的進程之間具有并行性、互不干擾等特點。
也就是說,每個進程都是一個獨立的運行單位,擁有各自的權(quán)利和責(zé)任。其中,各個進程都運行在獨立的虛擬地址空間,因此,即使一個進程發(fā)生異常,它也不會影響到系統(tǒng)中的其他進程。
Linux中的進程包含3個段,分別為“數(shù)據(jù)段”、“代碼段”和“堆棧段”。
“數(shù)據(jù)段”存放的是全局變量、常數(shù)以及動態(tài)數(shù)據(jù)分配的數(shù)據(jù)空間;
“代碼段”存放的是程序代碼的數(shù)據(jù)。
“堆棧段”存放的是子程序的返回地址、子程序的參數(shù)以及程序的局部變量等。
堆和棧的概念見博文——堆和棧。
父子進程:
父進程與子進程是管理與被管理的關(guān)系,當父進程終止時,子進程也隨之終止;但子進程終止,父進程不一定終止
ps、kill、pgrep
監(jiān)視進程工具:
ps:aux或lax輸出的解釋
ps –aux |more分頁查看
top 選擇參數(shù)
終止進程的工具:
kill [信號代碼] 進程ID
killall 正在運行的程序名
pkill 正在運行的程序名
xkill
pgrep查詢進程工具:pgrep 參數(shù)選項 程序名
5.進程的三態(tài)之間的轉(zhuǎn)換關(guān)系,常用的進程調(diào)度算法有哪些?用排隊買票的例子對比就緒->執(zhí)行:處于就緒狀態(tài)的進程->進程調(diào)度程序為之分配處理器->執(zhí)行(排隊買票輪到自己)
執(zhí)行->就緒:處于執(zhí)行狀態(tài)的進程->分配的時間片用完讓出處理器->就緒(正要買票發(fā)現(xiàn)車票時間未確定,讓后面的人先買票)
執(zhí)行->阻塞:正在執(zhí)行的進程->等待無法繼續(xù)執(zhí)行->阻塞(買票時發(fā)現(xiàn)需要做其他重要的事而選擇不買票)
阻塞->就緒:阻塞狀態(tài)的進程->等待的事情發(fā)生->就緒(路過車站為別人買票,卻未知車票詳情,接到別人確切的車票時間而排隊買票)
6.進程的調(diào)度算法有哪些?什么是優(yōu)先級反轉(zhuǎn)?調(diào)度算法:
先來先服務(wù)調(diào)度算法
短進程優(yōu)先調(diào)度算法
高優(yōu)先級優(yōu)先調(diào)度算法
時間片輪轉(zhuǎn)法
優(yōu)先級反轉(zhuǎn):
優(yōu)先級反轉(zhuǎn)是指一個低優(yōu)先級的任務(wù)持有一個被高優(yōu)先級任務(wù)所需要的共享資源。高優(yōu)先任務(wù)由于因資源缺乏而處于受阻狀態(tài),一直等到低優(yōu)先級任務(wù)釋放資源為止。而低優(yōu)先級獲得的CPU時間少,如果此時有優(yōu)先級處于兩者之間的任務(wù),并且不需要那個共享資源,則該中優(yōu)先級的任務(wù)反而超過這兩個任務(wù)而獲得CPU時間。如果高優(yōu)先級等待資源時不是阻塞等待,而是忙循環(huán),則可能永遠無法獲得資源,因為此時低優(yōu)先級進程無法與高優(yōu)先級進程爭奪CPU時間,從而無法執(zhí)行,進而無法釋放資源,造成的后果就是高優(yōu)先級任務(wù)無法獲得資源而繼續(xù)推進。
7.什么是死鎖?死鎖:多個進程因競爭資源而形成一種僵局若無外力作用,這些進程都將永遠不能再向前推進
同步:一組并發(fā)進程按一定的順序執(zhí)行的過程稱為進程間的同步
互斥:指當有若干進程都要使用某一共享資源時,任何時刻最多允許一個進程使用,其他要使用該資源的進程必須等待,直到占用該資源者釋放了該資源為止
8.常見的面試問題:死鎖的原因,如何解決?死鎖的四個必要條件(缺一不可):
(1) 互斥條件:一個資源每次只能被一個進程使用。
(2) 請求與保持條件:一個進程因請求資源而阻塞時,對已獲得的資源保持不放。
(3) 不剝奪條件:進程已獲得的資源,在末使用完之前,不能強行剝奪。
(4) 循環(huán)等待條件:若干進程之間形成一種頭尾相接的循環(huán)等待資源關(guān)系。
死鎖的解決辦法:
(1)按同一順序訪問對象。
如果所有并發(fā)事務(wù)按同一順序訪問對象,則發(fā)生死鎖的可能性會降低。例如,如果兩個并發(fā)事務(wù)獲得 Supplier 表上的鎖,然后獲得 Part 表上的鎖,則在其中一個事務(wù)完成之前,另一個事務(wù)被阻塞在 Supplier 表上。第一個事務(wù)提交或回滾后,第二個事務(wù)繼續(xù)進行。不發(fā)生死鎖。將存儲過程用于所有的數(shù)據(jù)修改可以標準化訪問對象的順序
(2)避免事務(wù)中的用戶交互。
避免編寫包含用戶交互的事務(wù),因為運行沒有用戶交互的批處理的速度要遠遠快于用戶手動響應(yīng)查詢的速度,例如答復(fù)應(yīng)用程序請求參數(shù)的提示。例如,如果事務(wù)正在等待用戶輸入,而用戶去吃午餐了或者甚至回家過周末了,則用戶將此事務(wù)掛起使之不能完成。這樣將降低系統(tǒng)的吞吐量,因為事務(wù)持有的任何鎖只有在事務(wù)提交或回滾時才會釋放。即使不出現(xiàn)死鎖的情況,訪問同一資源的其它事務(wù)也會被阻塞,等待該事務(wù)完成。
(3)保持事務(wù)簡短并在一個批處理中。
在同一數(shù)據(jù)庫中并發(fā)執(zhí)行多個需要長時間運行的事務(wù)時通常發(fā)生死鎖。事務(wù)運行時間越長,其持有排它鎖或更新鎖的時間也就越長,從而堵塞了其它活動并可能導(dǎo)致死鎖。保持事務(wù)在一個批處理中,可以最小化事務(wù)的網(wǎng)絡(luò)通信往返量,減少完成事務(wù)可能的延遲并釋放鎖
(4)使用低隔離級別。
確定事務(wù)是否能在更低的隔離級別上運行。執(zhí)行提交讀允許事務(wù)讀取另一個事務(wù)已讀取(未修改)的數(shù)據(jù),而不必等待第一個事務(wù)完成。使用較低的隔離級別(例如提交讀)而不使用較高的隔離級別(例如可串行讀)可以縮短持有共享鎖的時間,從而降低了鎖定爭奪
(5)使用綁定連接。
使用綁定連接使同一應(yīng)用程序所打開的兩個或多個連接可以相互合作。次級連接所獲得的任何鎖可以象由主連接獲得的鎖那樣持有,反之亦然,因此不會相互阻塞。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/28963.html
摘要:概念全稱是通用網(wǎng)關(guān)接口,服務(wù)器與應(yīng)用進行交談的一種工具,其程序須運行在網(wǎng)絡(luò)服務(wù)器上。開啟之后,會看到多個進程,它們都由管理。一些進步修改配置后,平滑過渡,新的進程使用新的配置,正在運行的進程處理完當前請求后自動。 CGI(Common Gateway InterFace) 既然webserver想把這個請求交給可以處理的人來做,是不是該告訴人家一些基本的,并且人家看得懂的信息信息? W...
摘要:又因為是谷歌出品的,依賴了很多谷歌自己的鏡像,所以對于國內(nèi)的同學(xué)環(huán)境搭建的難度又增加了一層。 帶著問題學(xué) Kubernetes 架構(gòu) 摘要:本文屬于原創(chuàng),歡迎轉(zhuǎn)載,轉(zhuǎn)載請保留出處:https://github.com/jasonGeng88/blog 打開這篇文章的同學(xué),想必對 docker 都不會陌生。docker 是一種虛擬容器技術(shù),它上手比較簡單,只需在宿主機上起一個 docke...
摘要:又因為是谷歌出品的,依賴了很多谷歌自己的鏡像,所以對于國內(nèi)的同學(xué)環(huán)境搭建的難度又增加了一層。 帶著問題學(xué) Kubernetes 架構(gòu) 摘要:本文屬于原創(chuàng),歡迎轉(zhuǎn)載,轉(zhuǎn)載請保留出處:https://github.com/jasonGeng88/blog 打開這篇文章的同學(xué),想必對 docker 都不會陌生。docker 是一種虛擬容器技術(shù),它上手比較簡單,只需在宿主機上起一個 docke...
摘要:進程與線程聲明文章均為本人技術(shù)筆記,轉(zhuǎn)載請注明出處進程線程基本概念進程程序的執(zhí)行實體,操作系統(tǒng)分配資源的最小單位線程被稱為輕量級進程,是調(diào)度分配的最小單位。一個標準的線程由線程,程序計數(shù)器,寄存器集合和堆棧組成進程間線程間通信方式進程間通信 進程與線程 聲明 文章均為本人技術(shù)筆記,轉(zhuǎn)載請注明出處https://segmentfault.com/u/yzwall 進程&線程基本概念 進...
摘要:每個在同一時間只能執(zhí)行一個線程在單核下的多線程其實都只是并發(fā),不是并行,并發(fā)和并行從宏觀上來講都是同時處理多路請求的概念。在多線程下,每個線程的執(zhí)行方式獲取執(zhí)行代碼直到或者是虛擬機將其掛起。拿不到通行證的線程,就不允許進入執(zhí)行。 進程與線程 并發(fā)與并行 進程與線程 首先要理解的是,我們的軟件都是運行在操作系統(tǒng)之上,操作系統(tǒng)再控制硬件,比如 處理器、內(nèi)存、IO設(shè)備等。操作系統(tǒng)為了向上...
閱讀 1726·2021-11-22 15:33
閱讀 2102·2021-10-08 10:04
閱讀 3554·2021-08-27 13:12
閱讀 3429·2019-08-30 13:06
閱讀 1477·2019-08-29 16:43
閱讀 1400·2019-08-29 16:40
閱讀 794·2019-08-29 16:15
閱讀 2752·2019-08-29 14:13