練一練,嵌入式工程師操作系統面試題三道

練一練,嵌入式工程師操作系統面試題三道

來自專欄韋東山嵌入式Linux9 人贊了文章

題一,同步和非同步有啥區別?

題二,TCP與UDP有啥區別?

題三,進程和線程有啥區別?

題一答案:

同步(Sync):所有的操作都做完,才返回給用戶。這樣用戶在線等待的時間太長,給用戶一種卡死了的感覺(比如系統遷移中,點擊了遷移,界面就不動了,但是程序還在執行,卡死了的感覺)。

這種情況下,用戶不能關閉界面,如果關閉,那麼遷移程序也會中斷,用戶體驗不好。

非同步(Async):將用戶請求放入消息隊列,並反饋給用戶,比如系統遷移程序已經啟動,提示你可以關閉瀏覽器了。然後程序再慢慢地寫入資料庫。但是用戶沒有卡死的感覺,用戶體驗較好。

題二答案:

1、TCP面向連接(如打電話要先撥號建立連接);UDP是無連接的,即發送數據之前不需要建立連接

2、TCP提供可靠的服務。它通過校驗和,丟包時的重傳控制,序號標識,滑動窗口、確認應答,次序亂掉的分包進行順序控制實現可靠傳輸。即通過TCP連接傳送的數據,無差錯,不丟失,不重複,且按序到達; UDP盡最大努力交付,即不保證可靠交付。

3、UDP具有較好的實時性,工作效率比TCP高,適用於對高速傳輸和實時性有較高要求的通信或廣播通信場景。

4、每一條TCP連接只能是點到點的; UDP支持一對一,一對多,多對一和多對多的交互通信方式。

5、TCP對系統資源要求較多,UDP對系統資源要求較少。

UDP有時比TCP更有優勢:

UDP以其簡單、傳輸快的優勢,在越來越多場景下取代了TCP, 如實時遊戲。

(1)網速的提升給UDP的穩定性提供可靠網路保障,丟包率很低,如果使用應用層重傳,能夠確保傳輸的可靠性。

(2)TCP為了實現網路通信的可靠性,使用了複雜的擁塞控制演算法,建立了繁瑣的握手過程,由於TCP在內置的系統協議棧中,極難對其進行改進。

採用TCP,一旦發生丟包,TCP會將後續的包緩存起來,等前面的包重傳並接收到後再繼續發送,延時會越來越大。

基於UDP對實時性要求較為嚴格的情況下,採用自定義重傳機制,能夠把丟包產生的延遲降到最低,盡量減少網路問題造成的影響。

題三答案:

1. 進程是資源分配的最小單位。

2. 線程是程序執行的最小單位,也是處理器調度的基本單位,但進程不是,兩者均可並發執行。

3. 進程有自己的獨立地址空間,每啟動一個進程,系統就會為它分配地址空間,建立數據表來維護代碼段、堆棧段和數據段,這種操作非常昂貴。而線程是共享進程中的數據,使用相同的地址空間,因此,CPU切換一個線程的花費遠比進程小很多,同時創建一個線程的開銷也比進程小很多。

4. 線程之間的通信更方便,同一進程下的線程共享全局變數、靜態變數等數據,而進程之間的通信需要以通信的方式(IPC)進行。不過如何處理好同步與互斥是編寫多線程程序的難點。但是多進程程序更健壯,多線程程序只要有一個線程死掉,整個進程也跟著死掉了,而一個進程死掉並不會對另外一個進程造成影響,因為進程有自己獨立的地址空間。

5. 進程切換時,消耗的資源大,效率高。所以涉及到頻繁的切換時,使用線程要好於進程。同樣如果要求同時進行並且又要共享某些變數的並發操作,只能用線程不能用進程。

6. 執行過程:每個獨立的進程有一個程序運行的入口、順序執行序列和程序入口。但是線程不能獨立執行,必須依存在應用程序中,由應用程序提供多個線程執行控制。

優缺點:

線程執行開銷小,但是不利於資源的管理和保護。線程適合在SMP機器(雙CPU系統)上運行。

進程執行開銷大,但是能夠很好的進行資源管理和保護,可以跨機器遷移。

何時使用多進程,何時使用多線程?

對資源的管理和保護要求高,不限制開銷和效率時,使用多進程。

要求效率高,頻繁切換時,資源的保護管理要求不是很高時,使用多線程。

更多嵌入式linux乾貨請關注微信公眾號:baiwenkeji


推薦閱讀:

嵌入式開發ARM處理器的技術特點
單片機如何過渡到嵌入式?
嵌入式stm32項目開發 心率檢測儀的設計與實現
物聯網時代下嵌入式在各個行業的應用
Rusty Nixie! 完全使用Rust製作輝光鍾(1)

TAG:面試 | 嵌入式開發 | 操作系統 |