1. 請分別簡單說一說進程和線程以及它們的區別:
進程是具有一定功能的程序關於某個數據集合上的一次運行活動,進程是系統進行資源調度和分配的一個獨立單位。
線程是進程的實體,是CPU調度和分派的基本單位,它是比進程更小的能獨立運行的基本單位。
一個進程可以有多個線程,多個線程可以並發執行。
2. 線程同步的方式有哪些?
互斥量:采用互斥對象機制,只有擁有互斥對象的線程才有訪問公共資源的權限。
信號量:它允許同一時刻多個線程訪問同一資源,但是需要控制同一時刻訪問此資源的最大線程數量。
事件(信號):通過通知操作的方式來保持多線程同步,還可以方便的實現多線程優先級的比較操作。
3. 進程的通信方式有哪些?
主要分為:管道、系統IPC(包括消息隊列、信號量、共享存儲)、SOCKET
管道主要分為:普通管帶PIPE、流管道(s_pipe)、命名管道(name_pipe)
管道是一種半雙工的通信方式,數據只能單項流動,並且只能在具有親緣關系的進程間流動,通常是父子進程。
流管道可以進行雙向傳輸。
命名管道也是半雙工的通信方式,它允許無親緣關系的進程間進行通信。
信號量是一個計數器,用來控制多個進程對資源的訪問,它通常作為一種鎖機制。
消息隊列是消息的鏈表,存放在內核中並由消息隊列標識符標識。
信號是一種比較復雜的通信方式,用於通知接收進程某個事件已經發生。
共享內存就是映射一段能被其他進程訪問的內存,這段共享內存由一個進程創建,但是多個進程可以訪問,共享內存是最快的IPC方式。
4. 什么是緩沖區溢出?有什么危害?其原因是什么?
緩沖區溢出是指當前計算機向緩沖區填充數據時超出了緩沖區本身的容量,溢出的數據覆蓋在合法數據上。
危害有以下兩點:
程序崩潰,導致拒絕服務;
跳轉並執行一段惡意代碼。
造成緩沖區溢出的主要原因是程序中沒有仔細檢查用戶輸入。
5. 什么是死鎖?死鎖產生的條件是什么?
在兩個或多個並發進程中,如果每個進程持有某種資源而又等待其他進程釋放它或它們現在保持着的資源,在未改變這種狀態之前都不能向前推進,稱這一組進程產生了死鎖。通俗的講就是兩個或多個進程無限期的阻塞、相互等待的一種狀態。
死鎖產生需要四個條件(有一個條件不成立,則不會產生死鎖):
互斥條件:一個資源只能被一個進程使用。
請求和保持:一個進程因請求資源而阻塞時,對已獲得資源保持不放。
不剝奪條件:進程獲得的資源,在未完全使用之前,不能強行剝奪。
循環等待條件:若干進程之間形成一種頭尾相接的環形等待資源關系。
6. 進程有哪幾種狀態?
就緒狀態:進程已獲得除處理機以外的所需資源,等待分配處理機資源。
運行狀態:占用處理機資源運行,處於此狀態的進程數小於等於CPU數。
阻塞狀態:進程等待某種條件,在條件滿足之前無法執行。
7. 分頁和分段有什么區別?
段是信息的邏輯單位,它是根據用戶的需求划分的,因此段是對用戶可見的;頁是信息的物理單位,是為了管理主存的方便而划分的,對用戶是透明的。
段的大小不固定,由它所完成的功能決定;頁的大小固定,由系統決定。
段向用戶提供的是二維地址空間;頁向用戶提供的是一維地址空間。
段是信息的邏輯單位,便於存儲保護和信息的共享,頁的保護和共享收到限制。
8. 操作系統中進程調度策略有哪幾種?
FCFS(先來先服務),優先級,時間片輪轉,多級反饋。
9. 進程同步有哪幾種機制?
原子操作、信號量機制、自旋鎖管程、會合、分布式系統。
10. 死鎖的處理基本策略和常用方法:
解決死鎖的基本方法如下:
預防死鎖、避免死鎖、檢測死鎖、解除死鎖
解決死鎖的常用策略如下:
鴕鳥策略、預防策略、避免策略、檢測與解解除死鎖。
