- 在分時操作系統中,進程調度采用()算法
時間片輪轉 - 某系統中有 3 個并發進程,都需要同類資源 4 個,試問該系統不會發生死鎖的最少資源數是:9
有n個進程,共享的同類資源數為m,則避免死鎖的最少資源數是n .(m-1)+1。
3個進程需要各需要占用3個資源,因此當有9個資源時,剛好夠分別分給這3個進程,但是這3個進程都還需要第4個資源,因此至少需要10個資源,才不會使其陷入死鎖。有n個進程,共享的同類資源數為m,則避免死鎖的最少資源數是n *(m-1)+1。3個進程需要各需要占用3個資源,因此當有9個資源時,剛好夠分別分給這3個進程,但是這3個進程都還需要第4個資源,因此至少需要10個資源,才不會使其陷入死鎖。 - 假設下面的函數foo會被多線程調用,那么讓i、j、k三個變量哪些因為線程間共享訪問需要加鎖保護.()
int i = 0;
void foo()
{static int j = 0;int k = 0;i++; j++; k++;
}
多線程調用時要進行保護時,主要是針對全局變量和靜態變量的,函數內的局部變量不會受到影響。
這里i是全局變量,j是局部靜態變量,所以 要進行保護。
4. 一個全局變量tally,兩個線程并發執行(代碼段都是ThreadProc),問兩個線程都結束后,tally取值范圍為 [50,100]
int tally=0;//全局變量void ThreadProc(){for(int i=1;i<=50;i++)tally+=1;
}
-
多個線程可同時操作一個數據,為了保證該數據的準確性,可將操作該數據的部分改為:
同步 -
下列關于輪詢任務調度和可搶占式調度區別描述錯誤的是?
搶占式調度優點是其簡潔性,它無需記錄當前所有連接的狀態
輪詢調度不利于后面的請求及時得到響應
搶占式調度有利于后面的高優先級的任務也能及時得到響應
搶占式調度實現相對較復雜且可能出現低優先級的任務長期得不到調度 -
下面關于并行和并發的區別,說法錯誤的是?
并發計算是一種程序計算的形式,在系統中,至少有兩個以上的計算在同時運作,計算結果可能同時發生
并行計算指許多指令得以同時進行的計算模式。在同時進行的前提下,可以將計算的過程分解成小部份,之后以并發方式來加以解決
并行是同時發生的多個并發事件,并發事件之間一定要同一時刻發生
并發是邏輯上的同時發生(simultaneous),而并行是物理上的同時發生 -
下列哪種操作可能帶來死鎖?
lock(m1) lock(m2) unlock(m1) unlock(m2)
lock(m1) lock(m2) unlock(m2) lock(m2) unlock(m1) unlock(m2)
lock(m1) lock(m2) unlock(m1) lock(m1) unlock(m2) unlock(m1)
lock(m1) lock(m2) unlock(m1) unlock(m2) lock(m1) unlock(m1)
假設有兩個線程,線程1執行到lock(m1),lock(m2),unlock(m1),此時線程1持有鎖m2,想要獲取鎖m1;線程2執行到lock(m1),此時線程2持有鎖m1,想要獲取鎖m2。兩個線程都拿著對方想要得到的鎖,造成死鎖。
- 列關于多線程,多進程,多任務的區別與關系描述正確的有?
線程是指進程內的一條執行線路,或者說是進程中可執行代碼的單獨單元,它是操作系統的基本調度單元。
一個進程至少有一個線程,即主線程,也可以有多個線程協同工作。
進程從主線程開始執行,進而可以創建一個或多個附加線程來執行該進程內的并發任務,這就是基于線程的多任務
上述描述都是錯誤的
10.輪詢任務調度與搶占式任務調度的區別?
搶占式調度優點是其簡潔性,它無需記錄當前所有連接的狀態,所以它是一種無狀態調度
輪詢調度優點是其簡潔性,它無需記錄當前所有連接的狀態,所以它是一種無狀態調度
輪詢調度實現相對較復雜
搶占式調度實現相對較復雜
11.有兩個線程,最初 n=0,一個線程執行 n++; n++; 另一個執行 n+=2; 問,最后可能的 n 值?
1
2
3
4
第一種可能情況:現在假設兩個線程沒有并行順序執行的那么結果顯然是 4。
第二種可能情況:再假設現在第一個n++ 已經執行完了 但是結果還沒有寫回內存 這個時候 n+=2 已經全部執行完 2 寫進了內存 結束 然后回到n++的寫回操作 這個時候內存就從2被改回1了,后面再來一次n++ 結果就為2。
第三種可能情況:第n+=2 先讀取n的值到寄存器 即0入寄存器 這個時候被中斷 第一個n++開始執行 并直到結束 內存被改成了1 ,然后 n+=2 繼續執行 結束后內存變為2 第二個n++再執行 結果就是3了
12.數據庫以及線程發生死鎖的原理是什么?
資源分配不當
進程運行推進的順序不合適
系統資源不足
進程過多
13.同步機制應該遵循哪些基本準則?
空閑讓進
忙則等待
有限等待
讓權等待
14.關于進程和線程,下面說法正確的是?
線程是資源分配和擁有的單位
線程和進程都可并發執行
在linux系統中,線程是處理器調度的基本單位
線程的粒度小于進程,通常多線程比多進程并發性更高
不同的線程共享相同的棧空間
15.兩個線程并發執行以下代碼,假設a是全局變量,初始為1,那么以下輸出______是可能的?(都有可能)
3 2
2 3
3 3
2 2
16.產生系統死鎖的原因是由于()
進程釋放資源
一個進程進入死循環
多個進程競爭,資源出現循環等待
多個進程競爭共享型設備