新聞中心
[[375850]]

本系列將按類別對題目進行分類整理,重要的地方標上星星,這樣有利于大家打下堅實的基礎(chǔ)。
本文均為嵌入式筆試面試高頻題目
一、進程與線程
1、什么是進程、線程,有什么區(qū)別?
進程是資源(CPU、內(nèi)存等)分配的基本單位,線程是CPU調(diào)度和分配的基本單位(程序執(zhí)行的最小單位)。同一時間,如果CPU是單核,只有一個進程在執(zhí)行,所謂的并發(fā)執(zhí)行,也是順序執(zhí)行,只不過由于切換速度太快,你以為這些進程在同步執(zhí)行而已。多核CPU可以同一時間點有多個進程在執(zhí)行。
2、多進程、多線程的優(yōu)缺點
說明:一個進程由進程控制塊、數(shù)據(jù)段、代碼段組成,進程本身不可以運行程序,而是像一個容器一樣,先創(chuàng)建出一個主線程,分配給主線程一定的系統(tǒng)資源,這時候就可以在主線程開始實現(xiàn)各種功能。當我們需要實現(xiàn)更復(fù)雜的功能時,可以在主線程里創(chuàng)建多個子線程,多個線程在同一個進程里,利用這個進程所擁有的系統(tǒng)資源合作完成某些功能。
優(yōu)缺點:1)一個進程死了不影響其他進程,一個線程崩潰很可能影響到它本身所處的整個進程。2) 創(chuàng)建多進程的系統(tǒng)花銷大于創(chuàng)建多線程。3)多進程通訊因為需要跨越進程邊界,不適合大量數(shù)據(jù)的傳送,適合小數(shù)據(jù)或者密集數(shù)據(jù)的傳送。多線程無需跨越進程邊界,適合各線程間大量數(shù)據(jù)的傳送。并且多線程可以共享同一進程里的共享內(nèi)存和變量。
3、什么時候用進程,什么時候用線程
1)創(chuàng)建和銷毀較頻繁使用線程,因為創(chuàng)建進程花銷大。2)需要大量數(shù)據(jù)傳送使用線程,因為多線程切換速度快,不需要跨越進程邊界。3)安全穩(wěn)定選進程;快速頻繁選線程;
4、多進程、多線程同步(通訊)的方法
進程間通訊:
(1)有名管道/無名管道(2)信號(3)共享內(nèi)存(4)消息隊列(5)信號量(6)socket
線程通訊(鎖):
(1)信號量(2)讀寫鎖(3)條件變量(4)互斥鎖(5)自旋鎖
5、進程線程的狀態(tài)轉(zhuǎn)換圖
(1)就緒狀態(tài):進程已獲得除CPU外的所有必要資源,只等待CPU時的狀態(tài)。一個系統(tǒng)會將多個處于就緒狀態(tài)的進程排成一個就緒隊列。
(2)執(zhí)行狀態(tài):進程已獲CPU,正在執(zhí)行。單處理機系統(tǒng)中,處于執(zhí)行狀態(tài)的進程只一個;多處理機系統(tǒng)中,有多個處于執(zhí)行狀態(tài)的進程。
(3)阻塞狀態(tài):正在執(zhí)行的進程由于某種原因而暫時無法繼續(xù)執(zhí)行,便放棄處理機而處于暫停狀態(tài),即進程執(zhí)行受阻。(這種狀態(tài)又稱等待狀態(tài)或封鎖狀態(tài))
通常導(dǎo)致進程阻塞的典型事件有:請求I/O,申請緩沖空間等。
一般,將處于阻塞狀態(tài)的進程排成一個隊列,有的系統(tǒng)還根據(jù)阻塞原因不同把這些阻塞集成排成多個隊列。
(1) 就緒→執(zhí)行
處于就緒狀態(tài)的進程,當進程調(diào)度程序為之分配了處理機后,該進程便由就緒狀態(tài)轉(zhuǎn)變成執(zhí)行狀態(tài)。
(2) 執(zhí)行→就緒
處于執(zhí)行狀態(tài)的進程在其執(zhí)行過程中,因分配給它的一個時間片已用完而不得不讓出處理機,于是進程從執(zhí)行狀態(tài)轉(zhuǎn)變成就緒狀態(tài)。
(3) 執(zhí)行→阻塞
正在執(zhí)行的進程因等待某種事件發(fā)生而無法繼續(xù)執(zhí)行時,便從執(zhí)行狀態(tài)變成阻塞狀態(tài)。
(4) 阻塞→就緒
處于阻塞狀態(tài)的進程,若其等待的事件已經(jīng)發(fā)生,于是進程由阻塞狀態(tài)轉(zhuǎn)變?yōu)榫途w狀態(tài)。
6、父進程、子進程
父進程調(diào)用fork()以后,克隆出一個子進程,子進程和父進程擁有相同內(nèi)容的代碼段、數(shù)據(jù)段和用戶堆棧。父進程和子進程誰先執(zhí)行不一定,看CPU。所以我們一般我們會設(shè)置父進程等待子進程執(zhí)行完畢。
7、說明什么是上下文切換?
你可以有很多角度,有進程上下文,有中斷上下文。
進程上下文:一個進程在執(zhí)行的時候,CPU的所有寄存器中的值、進程的狀態(tài)以及堆棧中的內(nèi)容,當內(nèi)核需要切換到另一個進程時,它需要保存當前進程的所有狀態(tài),即保存當前進程的進程上下文,以便再次執(zhí)行該進程時,能夠恢復(fù)切換時的狀態(tài),繼續(xù)執(zhí)行。
中斷上下文:由于觸發(fā)信號,導(dǎo)致CPU中斷當前進程,轉(zhuǎn)而去執(zhí)行另外的程序。那么當前進程的所有資源要保存,比如堆棧和指針。保存過后轉(zhuǎn)而去執(zhí)行中斷處理程序,快讀執(zhí)行完畢返回,返回后恢復(fù)上一個進程的資源,繼續(xù)執(zhí)行。這就是中斷的上下文。
當前標題:嵌入式筆試面試題目系列(一)
鏈接分享:http://www.dlmjj.cn/article/djopcdh.html


咨詢
建站咨詢
