歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> 關於Linux

Linux 內核中的同步 知識

Q1.        什麼是臨界區?什麼是競爭狀態?什麼是同步?

A:

1)        臨界區(critical regions)就是訪問和操作共享數據的代碼段,多個內核任務並發訪問同一個資源通常是不安全的;

2)        如果兩個內核任務可能處於同一個臨界區,就是一種錯誤現象;如果確實發生了這種情況,就稱它為競爭狀態

3)        避免並發和防止競爭狀態稱為同步(synchronization)。

 

Q2.        簡要介紹一下死鎖及避免死鎖的方法。

答:死鎖包括自死鎖和ABBA死鎖,

1)        產生死鎖有四個原因:互斥使用不可搶占請求和保持,以及循環等待

2)        避免死鎖的方法有:破壞“不可剝奪”條件、破壞“請求和保持”條件、破壞“循環等待”條件。

 

Q3.        內核中造成並發執行的原因是什麼?

A:“並發”分為“偽並發”和“真並發”兩種,內核中造成並發執行的原因有以下幾種:

1)        中斷:它可能隨時打斷當前正在執行的代碼;

2)        內核搶占:內核中的任務可能會被另一個任務搶占;

3)        睡眠及其與用戶空間的同步:在內核執行的進程可能會睡眠,這就會喚醒調度程序,調度一個新的用戶進程執行;

4)        對稱多處理:兩個或多個處理器可以同時執行代碼。

 

Q4.        給出信號量的定義,並說明down()和up()的含義。

A:

1)        Linux中的信號量是一種睡眠鎖,它是1968年由Dijkstra提出的,如果一個任務試圖獲得一個已被持有的信號量,信號量會將其推入等待隊列,然後讓其睡眠;當持有信號量的進程將信號量釋放後,在等待隊列中的一個任務將被喚醒,從而可以獲得這個信號量;

2)        信號量支持兩個原子操作P()V(),前者叫做測試操作,後者叫做增加操作;後來的系統把這兩種操作分別叫做down()和up();

3)       down()操作通過對信號量計數減1來請求獲得一個信號量;up()操作用來釋放信號量,該操作也被稱作“提升”(upping)信號量,因為它會增加信號量的計數值。

Copyright © Linux教程網 All Rights Reserved