linux裝置驅動歸納總結(四):3.搶佔和環境切換

來源:互聯網
上載者:User

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

上一節介紹了進程調度的一些基本概念,並簡單介紹了在沒有搶佔的情況下,CFS調度的是如何分配進程的優先順序和時間片。但是,核心並不會只是單一地分配時間片讓進程運行。

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

一、什麼是環境切換

環境切換,是指從一個可執行檔進程切換到另外一個可執行檔進程。在linux核心中,內容相關的切換有兩種方式:第一種是進程主動讓出CPU,這樣的操作成為“讓步”。第二種是由核心發送器決定進程已耗用時間,在在已耗用時間結束(如時間片耗盡)或者需要切換高優先順序進程時強制掛起進程,這樣的操作叫“搶佔”。

搶佔是我一直誤解的概念,我一直以為搶佔是一個進程強制切換到另一進程。最近才知道,執行搶佔的是核心,並不是進程。

搶佔分為兩種:使用者搶佔和核心搶佔。下面將一一介紹。

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

二、使用者搶佔

如果只是靠每個進程主動放棄CPU,這是相當不明智的做法,所以,核心使用need_resched標誌(在每個進程對應的thread_info結構體內)來表示進程是否需要被調度。當一個進程的時間片耗盡,或者有更高優先順序的進程進入可執行隊列,當前啟動並執行進程對應的need_reched標誌會被設定。

在核心即將要返回使用者空間的時候,如果need_resched標誌被設定,核心會在繼續執行原來的進程之前調用發送器,此時就會發生使用者搶佔。

要注意,使用者搶佔是發生在即將返回使用者空間前,核心調用發送器,重新選擇一個更加合適的進程來運行(如高優先順序),當然也可以是原來的程式。

總的來說,在以下情況下會發生使用者搶佔:

1、從系統調用返回使用者空間。

2、從中斷處理常式返回使用者空間。

類比一下生活,其實這個很容易理解。如有人佔用著廁所解大手時,有人進來需要解小手,或者允許他解大手的時間已經用完了,管廁所的人兄就會做個標記。等解大手的人兄沖完廁所了,管廁所的人兄看到自己做的標記,馬上把解大手的人兄趕出來,把廁所讓給解小手的人兄。

使用者搶佔並不是2.6核心的新特徵,它只是一種進程調度的策略。核心返回使用者空間後,每個進程有獨立的4G虛擬空間,這時的進程調度並不會出現核心資源的爭奪。

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

三、核心搶佔

核心搶佔是2.6核心的新特徵,在之前的核心中,發送器是不能調度正在運行在核心中的進程,即使時間片已經用完,只有在進程返回使用者空間或者阻塞,才能進行進程的調度。

在2.6核心中,核心提供了為高優先順序進程搶佔正在核心啟動並執行進程的機會。但是,對於多個同時啟動並執行進程,核心空間的資源的共用的。所以,核心在搶佔並且調度進程的時候,必須要保證調度是安全的。所謂的安全,就是不會因為新進程的調度導致一些共用資源的錯亂,這就是下一節要討論的核心同步。

核心進程可以調用函數來禁止核心搶佔,在禁止這段時間內,搶佔是不允許的,這樣也是保護核心共用資源的一種方法。

所以,核心搶佔發生在以下時候:

1、當終端處理常式將要執行完畢,返回核心空間之前。

2、執行在可以搶佔的代碼的時候。

3、核心進程讓出CPU後,如阻塞。

生活上的例子我就不舉了,描述拉到一半的過程實在噁心,有興趣的自己聯想。

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

四、總結

今天介紹了搶佔的概念,這些都是我的理解,並不能確保一定正確,同時我把書上這麼長的介紹壓縮成短短的幾句話,必然有很多不足的地方,希望大家能夠指正。

在很多的書籍中描述的搶佔大多數都是多核心搶佔,並不是說使用者搶佔,使用者搶佔可以理解為一種進程調度的方式。

而由於核心搶佔的出現,核心用共用資源的保護顯得尤為重要,這是因為所有的進程都進入核心運行,稍不留神就會把另一個進程的資源更改掉,下節就是要介紹如何?核心資源的保護。

同時需要強調的是,進程調度的介紹並沒有涉及中斷,一般的,只要中斷產生,核心就會馬上相應,不管進程在核心還是使用者空間,所以這也是核心資源保護的內容之一。

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.