女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

淺談Linux kernel中的同步機制

嵌入式悅翔園 ? 來源:嵌入式悅翔園 ? 2023-05-04 17:06 ? 次閱讀

前言

同步就是進程與進程之間,進程與系統資源之間的交互。由于 Linux內核采用的是多任務,所以在多個進程之間,必須要有同步機制來保證彼此協調。

在 Linux內核中,有很多種同步機制。今天我們主要講一下 kernel中的異步和同步機制,其中重點介紹一下 kernel中的異步機制,kernel中的異步機制分為兩種:一種是應用層的同步機制,也就是應用層線程之間的通信,另一種是內核的同步機制。

當一個線程進入到內核態后,就可以直接跟內核溝通了, kernel中有兩個線程是這樣的:一個是線程A,它進入內核態后,會直接跟內核溝通,告訴它我要去干啥了,等我干完了就會通知你。(這個操作我們叫它 semi)當一個線程進入到內核態后,會先去跟內核溝通一次,然后就可以直接去執行了。

kernel中的同步機制,本質上就是線程間的通信機制,它們之間的通信就是通過同步機制來實現的。

一、進程間的通信

為了保證系統的正確性和一致性, Linux內核會在進程間通信的過程中使用阻塞隊列來處理進程間的通信。阻塞隊列是指在消息隊列中的某個元素在消息發出時就被創建,但并不是所有的消息都會被發送出去,只有當某一條消息的等待隊列滿了才會被發送出去。如果接收方等待隊列中沒有消息,則會接收到通知,如果接收方等待隊列中有消息,則不會收到通知。

在內核中,對阻塞隊列進行了抽象,即當某個進程發出了一個消息后,它就被阻塞了。因此,阻塞隊列實際上是一種同步機制。阻塞隊列通過一個特定的函數來創建一個新的對象,該對象包含一個等待隊列指針(Push/Pop)。當等待隊列滿了之后,系統將把該等待隊列指針指向的對象作為第一個發出通知的進程的線程。也就是說,該進程會收到通知后才能繼續執行它的任務。

二、信號

信號量可以用來發送或接收消息。當一個進程擁有了一個信號量,就意味著他已經擁有了一個屬于自己的信號量,這個信號量是他自己的一個私有變量。這個私有變量是不能被其它進程拿到的。信號量用來表示一個進程所擁有的信號量數量,當這個進程擁有了這個信號量之后,就可以向其它進程發送消息。這個私有變量只允許這個進程自己使用,不可以把它拿到其它進程的進程中去。

當一個線程擁有了自己的信號量之后,就可以通過共享變量來與其它線程進行通信了。共享變量也是在其它線程中進行使用的,其它線程使用共享變量來和自己進行通信。

三、互斥量

互斥量主要是針對系統資源來說的。Linux內核中的互斥量又可以分為兩種:共享資源和全局互斥資源。

共享資源就是進程之間共享的,比如一個進程有多個線程,那么每個線程都可以訪問這個共享的內存空間。全局互斥資源就是進程和線程之間只能訪問到自己所在的全局內存空間。在一個系統中,可以使用互斥量來實現多個進程同時在內存中執行。但是如果要實現多個進程同時執行,就需要使用同步機制,這樣才能保證所有的進程都能夠在同一個內存中運行。使用互斥量,一個進程只能訪問到自己所在的全局內存空間,而無法訪問其它內存空間。但是互斥量有一個很大的好處,那就是不會出現進程阻塞等情況。

四、消息隊列

消息隊列的出現,對進程間通信進行了很大的擴展。在 kernel中,除了同步機制外,還有另外一種異步機制,那就是消息隊列。我們都知道, Linux內核是支持消息隊列的。雖然在內核中也有關于消息隊列的詳細信息,但是由于內核是不支持用戶態的消息隊列的,所以我們還是要從應用層入手來了解一下消息隊列。

首先我們先了解一下消息隊列是什么?

消息隊列是一種特殊的隊列,它能夠滿足多個應用線程之間的同步需要。消息隊列用于提供應用程序與其他進程或線程之間的異步通信。如果我們需要進行異步通信,那么就可以通過使用消息隊列來進行。比如當我們調用 clear ()函數時,我們就可以直接使用一個已注冊的消息隊列。

那么如何創建一個消息隊列呢?當我們使用ext2. json時,可以在 JAR. json. clear ()中使用 semaphore命令創建一個消息隊列。

五、共享內存

在共享內存中,我們使用的是共享鎖,但因為共享鎖是與某個進程共享內存,所以當你想要獲取共享鎖的時候,你需要向其他進程請求。

就像在上面的例子中,我們通過 volatile關鍵字來訪問共享內存。此時你并沒有向其他進程請求,所以當你想要獲取這個共享鎖時,只需要向其他進程請求。這樣就避免了兩個進程之間的互相競爭,同時還能實現數據的同步。

由于共享鎖是與某個進程共享內存,所以你必須向該進程請求訪問它的地址。對于這種情況來說,最簡單的解決方案就是使用線程池。

在線程池中有一個叫做“byte”的對象,它也是一個共享鎖。當你想要獲取這個鎖時,只需要向 byte對象發送請求就可以了。這時候 byte對象會將你的請求發送到該線程的隊列中,當該線程收到請求時,它就會給你返回一個響應消息。

六、線程池

線程池是一個非常好的線程管理工具,它可以讓多個線程同時運行,還可以減少線程之間的死鎖和沖突。它還有一個最重要的特點就是,可以有效地利用系統的內存,達到提高效率的目的。

線程池的使用非常簡單,就是把要執行的任務分配到相應的線程池中。當要執行的任務分配到相應線程池后,就可以執行了。使用線程池會給我們帶來很多好處:

可以更快地完成任務。當一個任務被分配到了線程池中,就會被循環執行下去,直到執行完成或者是線程重新創建完成。

提高了資源利用效率。當一個任務需要很多資源時,例如 CPU、內存等,我們就可以使用線程池來管理這些資源,使每個線程都有足夠的 CPU和內存來執行這個任務。

七、內核態的同步機制

上面介紹了兩種同步機制,那么我們來看看內核態的同步機制,在內核態有四種同步方式:

信號量:它是用來操作鎖的,當一個線程占用了一個鎖時,它會向系統發送一個信號量。

信號量傳遞:這個機制是由操作系統提供的,在調用sys_thread函數后,會進入中斷狀態,此時調用sys_thread函數時,就會將信號量傳遞給系統。

互斥鎖:這種方式主要是通過優先級的高低來控制對資源的訪問。

互斥鎖和信號量都是用來解決進程之間的同步問題的。

還有一種同步方式是通過線程池來實現的。在這個過程中,線程池會創建一個線程,通過這個線程來跟其他線程進行交互,從而達到同步效果。

八、總結

通過上面的分析我們了解到,同步是一個復雜的問題,在內核態是如何完成同步的呢?

首先,在內核態有三個進程:這三個進程都可以互相訪問對方的資源,也可以在資源被其他進程請求時進行同步。

當某個進程被阻塞時,它的所有子進程會從等待隊列中取出一個子進程(或者其它子進程),并把它加到阻塞隊列中。當所有子進程都被阻塞時,阻塞隊列中就沒有子進程了。這時,等待隊列中的其他子進程就會把當前線程加到等待隊列中。這三個進程在等待過程中不會互相影響,三個線程可以通過設置自己的優先級和其他線程進行同步。

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 嵌入式
    +關注

    關注

    5136

    文章

    19519

    瀏覽量

    314533
  • 內核
    +關注

    關注

    3

    文章

    1406

    瀏覽量

    41068
  • Linux
    +關注

    關注

    87

    文章

    11450

    瀏覽量

    212705
  • 同步機制
    +關注

    關注

    0

    文章

    10

    瀏覽量

    7639
  • Kernel
    +關注

    關注

    0

    文章

    48

    瀏覽量

    11535

原文標題:作為嵌入式開發工程師,關于Linux kernel同步機制你不得不知道

文章出處:【微信號:嵌入式悅翔園,微信公眾號:嵌入式悅翔園】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    Linux內核同步機制

    在現代操作系統里,同一時間可能有多個內核執行流在執行,因此內核其實象多進程多線程編程一樣也需要一些同步機制同步各執行單元對共享數據的訪問。尤其是在多處理器系統上,更需要一些同步機制同步
    發表于 08-06 07:08

    設計時間同步機制關注的主要性能參數

    在瞬間是同步的。無線傳感器網絡本質上是一個分布式協同工作的網絡系統,很多具體應用都要求網絡各個節點存在相互的協同配合,因此時間同步是無線傳感器網絡同步管理機制的重要內容。  傳統無線網
    發表于 12-31 17:09

    Vulkan同步機制和圖形轉換的風險

    Vulkan同步機制和圖形-計算-圖形轉換的風險(一)
    發表于 01-21 06:17

    關于CAN總線位定時和同步機制的簡要分析

    關于CAN總線位定時和同步機制的簡要分析
    發表于 05-28 06:05

    RTT的消息同步機制是如何實現的?

    RTT的消息同步機制是如何實現的
    發表于 11-02 07:00

    域一致性新型鎖同步機制的實現

    域一致性新型鎖同步機制的實現將軟件分布式共享存儲系統所使用的基于域一致性協議鎖機制以新的方式加以實現。它充分利用SMP 結構所具有的特點,以多級方式實現鎖同步機制
    發表于 09-02 10:27 ?12次下載

    用于無線網絡MMORPG的同步機制

    針對手機和 無線網絡 的限制條件,設計了一套可行的應用在手機多人在線角色扮演類游戲上的網絡游戲同步機制. 分析了同步技術的延時問題及其對游戲交互性和公平性的影響以及影
    發表于 06-10 15:51 ?13次下載
    用于無線網絡MMORPG的<b class='flag-5'>同步機制</b>

    連接SQL的遠程數據庫同步機制

    數據同步是實現異地雙活數據中心的關鍵技術,但現有遠程數據庫同步機制效率較低,并且不能滿足異構數據庫之間的同步要求。針對上述問題,設計一種新的遠程數據庫同步機制。分析應用程序操作數據庫的
    發表于 01-24 17:11 ?1次下載
    連接SQL的遠程數據庫<b class='flag-5'>同步機制</b>

    混合式數據同步機制

    分發策略,根據移動終端綜合處理能力值來建立SOD樹分發路徑,實現同步數據的高效分發;還提出了基于軌跡變更的增量捕獲策略,采用觸發器捕獲操作日志,用凈化方法合并操作日志得到凈增量數據。實驗結果表明,混合式數據同步機制能更好地維護移動計算環境
    發表于 02-08 16:35 ?0次下載
    混合式數據<b class='flag-5'>同步機制</b>

    你知道linux 同步機制的complete?

    Linux內核,completion是一種簡單的同步機制,標志"things may proceed"。 要使用completion,必須在文件包含,同時創建一個類型為st
    發表于 04-24 11:45 ?1419次閱讀

    你了解Linux內核的同步機制

    在現代操作系統里,同一時間可能有多個內核執行流在執行,因此內核其實象多進程多線程編程一樣也需要一些同步機制同步各執行單元對共享數據的訪問。
    發表于 05-12 08:26 ?702次閱讀

    可以了解并學習Linux 內核的同步機制

    Linux內核同步機制,挺復雜的一個東西,常用的有自旋鎖,信號量,互斥體,原子操作,順序鎖,RCU,內存屏障等。
    發表于 05-14 14:10 ?807次閱讀

    Linux內核的同步機制

    在現代操作系統里,同一時間可能有多個內核執行流在執行,因此內核其實像多進程多線程編程一樣也需要一些同步機制同步各執行單元對共享數據的訪問,尤其是在多處理器系統上,更需要一些同步機制同步
    的頭像 發表于 09-22 09:46 ?2501次閱讀
    <b class='flag-5'>Linux</b>內核的<b class='flag-5'>同步機制</b>

    基于有限狀態機的FlexRay時鐘同步機制

    工作的能力,其信息傳輸的確定性離不開其內部的時鐘同步機制的支持。時鐘同步機制可根據該節點啟動的不同工作階段,定義成不同的工作狀態,如初始化、等待接收同步幀等。考慮到傳統的FSM方法建立模型存在代碼難以復用、維護困難等問題,本文基
    的頭像 發表于 03-31 10:22 ?3849次閱讀
    基于有限狀態機的FlexRay時鐘<b class='flag-5'>同步機制</b>

    關于Linux kernel同步機制的這些知識點你不得不知道

    同步就是進程與進程之間,進程與系統資源之間的交互。由于 Linux內核采用的是多任務,所以在多個進程之間,必須要有同步機制來保證彼此協調。
    的頭像 發表于 04-21 14:42 ?1009次閱讀