在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

淺談Linux kernel中的同步機(jī)制

嵌入式悅翔園 ? 來(lái)源:嵌入式悅翔園 ? 2023-05-04 17:06 ? 次閱讀

前言

同步就是進(jìn)程與進(jìn)程之間,進(jìn)程與系統(tǒng)資源之間的交互。由于 Linux內(nèi)核采用的是多任務(wù),所以在多個(gè)進(jìn)程之間,必須要有同步機(jī)制來(lái)保證彼此協(xié)調(diào)。

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

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

kernel中的同步機(jī)制,本質(zhì)上就是線程間的通信機(jī)制,它們之間的通信就是通過(guò)同步機(jī)制來(lái)實(shí)現(xiàn)的。

一、進(jìn)程間的通信

為了保證系統(tǒng)的正確性和一致性, Linux內(nèi)核會(huì)在進(jìn)程間通信的過(guò)程中使用阻塞隊(duì)列來(lái)處理進(jìn)程間的通信。阻塞隊(duì)列是指在消息隊(duì)列中的某個(gè)元素在消息發(fā)出時(shí)就被創(chuàng)建,但并不是所有的消息都會(huì)被發(fā)送出去,只有當(dāng)某一條消息的等待隊(duì)列滿了才會(huì)被發(fā)送出去。如果接收方等待隊(duì)列中沒(méi)有消息,則會(huì)接收到通知,如果接收方等待隊(duì)列中有消息,則不會(huì)收到通知。

在內(nèi)核中,對(duì)阻塞隊(duì)列進(jìn)行了抽象,即當(dāng)某個(gè)進(jìn)程發(fā)出了一個(gè)消息后,它就被阻塞了。因此,阻塞隊(duì)列實(shí)際上是一種同步機(jī)制。阻塞隊(duì)列通過(guò)一個(gè)特定的函數(shù)來(lái)創(chuàng)建一個(gè)新的對(duì)象,該對(duì)象包含一個(gè)等待隊(duì)列指針(Push/Pop)。當(dāng)?shù)却?duì)列滿了之后,系統(tǒng)將把該等待隊(duì)列指針指向的對(duì)象作為第一個(gè)發(fā)出通知的進(jìn)程的線程。也就是說(shuō),該進(jìn)程會(huì)收到通知后才能繼續(xù)執(zhí)行它的任務(wù)。

二、信號(hào)

信號(hào)量可以用來(lái)發(fā)送或接收消息。當(dāng)一個(gè)進(jìn)程擁有了一個(gè)信號(hào)量,就意味著他已經(jīng)擁有了一個(gè)屬于自己的信號(hào)量,這個(gè)信號(hào)量是他自己的一個(gè)私有變量。這個(gè)私有變量是不能被其它進(jìn)程拿到的。信號(hào)量用來(lái)表示一個(gè)進(jìn)程所擁有的信號(hào)量數(shù)量,當(dāng)這個(gè)進(jìn)程擁有了這個(gè)信號(hào)量之后,就可以向其它進(jìn)程發(fā)送消息。這個(gè)私有變量只允許這個(gè)進(jìn)程自己使用,不可以把它拿到其它進(jìn)程的進(jìn)程中去。

當(dāng)一個(gè)線程擁有了自己的信號(hào)量之后,就可以通過(guò)共享變量來(lái)與其它線程進(jìn)行通信了。共享變量也是在其它線程中進(jìn)行使用的,其它線程使用共享變量來(lái)和自己進(jìn)行通信。

三、互斥量

互斥量主要是針對(duì)系統(tǒng)資源來(lái)說(shuō)的。Linux內(nèi)核中的互斥量又可以分為兩種:共享資源和全局互斥資源。

共享資源就是進(jìn)程之間共享的,比如一個(gè)進(jìn)程有多個(gè)線程,那么每個(gè)線程都可以訪問(wèn)這個(gè)共享的內(nèi)存空間。全局互斥資源就是進(jìn)程和線程之間只能訪問(wèn)到自己所在的全局內(nèi)存空間。在一個(gè)系統(tǒng)中,可以使用互斥量來(lái)實(shí)現(xiàn)多個(gè)進(jìn)程同時(shí)在內(nèi)存中執(zhí)行。但是如果要實(shí)現(xiàn)多個(gè)進(jìn)程同時(shí)執(zhí)行,就需要使用同步機(jī)制,這樣才能保證所有的進(jìn)程都能夠在同一個(gè)內(nèi)存中運(yùn)行。使用互斥量,一個(gè)進(jìn)程只能訪問(wèn)到自己所在的全局內(nèi)存空間,而無(wú)法訪問(wèn)其它內(nèi)存空間。但是互斥量有一個(gè)很大的好處,那就是不會(huì)出現(xiàn)進(jìn)程阻塞等情況。

四、消息隊(duì)列

消息隊(duì)列的出現(xiàn),對(duì)進(jìn)程間通信進(jìn)行了很大的擴(kuò)展。在 kernel中,除了同步機(jī)制外,還有另外一種異步機(jī)制,那就是消息隊(duì)列。我們都知道, Linux內(nèi)核是支持消息隊(duì)列的。雖然在內(nèi)核中也有關(guān)于消息隊(duì)列的詳細(xì)信息,但是由于內(nèi)核是不支持用戶態(tài)的消息隊(duì)列的,所以我們還是要從應(yīng)用層入手來(lái)了解一下消息隊(duì)列。

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

消息隊(duì)列是一種特殊的隊(duì)列,它能夠滿足多個(gè)應(yīng)用線程之間的同步需要。消息隊(duì)列用于提供應(yīng)用程序與其他進(jìn)程或線程之間的異步通信。如果我們需要進(jìn)行異步通信,那么就可以通過(guò)使用消息隊(duì)列來(lái)進(jìn)行。比如當(dāng)我們調(diào)用 clear ()函數(shù)時(shí),我們就可以直接使用一個(gè)已注冊(cè)的消息隊(duì)列。

那么如何創(chuàng)建一個(gè)消息隊(duì)列呢?當(dāng)我們使用ext2. json時(shí),可以在 JAR. json. clear ()中使用 semaphore命令創(chuàng)建一個(gè)消息隊(duì)列。

五、共享內(nèi)存

在共享內(nèi)存中,我們使用的是共享鎖,但因?yàn)楣蚕礞i是與某個(gè)進(jìn)程共享內(nèi)存,所以當(dāng)你想要獲取共享鎖的時(shí)候,你需要向其他進(jìn)程請(qǐng)求。

就像在上面的例子中,我們通過(guò) volatile關(guān)鍵字來(lái)訪問(wèn)共享內(nèi)存。此時(shí)你并沒(méi)有向其他進(jìn)程請(qǐng)求,所以當(dāng)你想要獲取這個(gè)共享鎖時(shí),只需要向其他進(jìn)程請(qǐng)求。這樣就避免了兩個(gè)進(jìn)程之間的互相競(jìng)爭(zhēng),同時(shí)還能實(shí)現(xiàn)數(shù)據(jù)的同步。

由于共享鎖是與某個(gè)進(jìn)程共享內(nèi)存,所以你必須向該進(jìn)程請(qǐng)求訪問(wèn)它的地址。對(duì)于這種情況來(lái)說(shuō),最簡(jiǎn)單的解決方案就是使用線程池。

在線程池中有一個(gè)叫做“byte”的對(duì)象,它也是一個(gè)共享鎖。當(dāng)你想要獲取這個(gè)鎖時(shí),只需要向 byte對(duì)象發(fā)送請(qǐng)求就可以了。這時(shí)候 byte對(duì)象會(huì)將你的請(qǐng)求發(fā)送到該線程的隊(duì)列中,當(dāng)該線程收到請(qǐng)求時(shí),它就會(huì)給你返回一個(gè)響應(yīng)消息。

六、線程池

線程池是一個(gè)非常好的線程管理工具,它可以讓多個(gè)線程同時(shí)運(yùn)行,還可以減少線程之間的死鎖和沖突。它還有一個(gè)最重要的特點(diǎn)就是,可以有效地利用系統(tǒng)的內(nèi)存,達(dá)到提高效率的目的。

線程池的使用非常簡(jiǎn)單,就是把要執(zhí)行的任務(wù)分配到相應(yīng)的線程池中。當(dāng)要執(zhí)行的任務(wù)分配到相應(yīng)線程池后,就可以執(zhí)行了。使用線程池會(huì)給我們帶來(lái)很多好處:

可以更快地完成任務(wù)。當(dāng)一個(gè)任務(wù)被分配到了線程池中,就會(huì)被循環(huán)執(zhí)行下去,直到執(zhí)行完成或者是線程重新創(chuàng)建完成。

提高了資源利用效率。當(dāng)一個(gè)任務(wù)需要很多資源時(shí),例如 CPU、內(nèi)存等,我們就可以使用線程池來(lái)管理這些資源,使每個(gè)線程都有足夠的 CPU和內(nèi)存來(lái)執(zhí)行這個(gè)任務(wù)。

七、內(nèi)核態(tài)的同步機(jī)制

上面介紹了兩種同步機(jī)制,那么我們來(lái)看看內(nèi)核態(tài)的同步機(jī)制,在內(nèi)核態(tài)有四種同步方式:

信號(hào)量:它是用來(lái)操作鎖的,當(dāng)一個(gè)線程占用了一個(gè)鎖時(shí),它會(huì)向系統(tǒng)發(fā)送一個(gè)信號(hào)量。

信號(hào)量傳遞:這個(gè)機(jī)制是由操作系統(tǒng)提供的,在調(diào)用sys_thread函數(shù)后,會(huì)進(jìn)入中斷狀態(tài),此時(shí)調(diào)用sys_thread函數(shù)時(shí),就會(huì)將信號(hào)量傳遞給系統(tǒng)。

互斥鎖:這種方式主要是通過(guò)優(yōu)先級(jí)的高低來(lái)控制對(duì)資源的訪問(wèn)。

互斥鎖和信號(hào)量都是用來(lái)解決進(jìn)程之間的同步問(wèn)題的。

還有一種同步方式是通過(guò)線程池來(lái)實(shí)現(xiàn)的。在這個(gè)過(guò)程中,線程池會(huì)創(chuàng)建一個(gè)線程,通過(guò)這個(gè)線程來(lái)跟其他線程進(jìn)行交互,從而達(dá)到同步效果。

八、總結(jié)

通過(guò)上面的分析我們了解到,同步是一個(gè)復(fù)雜的問(wèn)題,在內(nèi)核態(tài)是如何完成同步的呢?

首先,在內(nèi)核態(tài)有三個(gè)進(jìn)程:這三個(gè)進(jìn)程都可以互相訪問(wèn)對(duì)方的資源,也可以在資源被其他進(jìn)程請(qǐng)求時(shí)進(jìn)行同步。

當(dāng)某個(gè)進(jìn)程被阻塞時(shí),它的所有子進(jìn)程會(huì)從等待隊(duì)列中取出一個(gè)子進(jìn)程(或者其它子進(jìn)程),并把它加到阻塞隊(duì)列中。當(dāng)所有子進(jìn)程都被阻塞時(shí),阻塞隊(duì)列中就沒(méi)有子進(jìn)程了。這時(shí),等待隊(duì)列中的其他子進(jìn)程就會(huì)把當(dāng)前線程加到等待隊(duì)列中。這三個(gè)進(jìn)程在等待過(guò)程中不會(huì)互相影響,三個(gè)線程可以通過(guò)設(shè)置自己的優(yōu)先級(jí)和其他線程進(jìn)行同步。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5082

    文章

    19126

    瀏覽量

    305201
  • 內(nèi)核
    +關(guān)注

    關(guān)注

    3

    文章

    1372

    瀏覽量

    40290
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11304

    瀏覽量

    209503
  • 同步機(jī)制
    +關(guān)注

    關(guān)注

    0

    文章

    10

    瀏覽量

    7608
  • Kernel
    +關(guān)注

    關(guān)注

    0

    文章

    48

    瀏覽量

    11173

原文標(biāo)題:作為嵌入式開(kāi)發(fā)工程師,關(guān)于Linux kernel同步機(jī)制你不得不知道

文章出處:【微信號(hào):嵌入式悅翔園,微信公眾號(hào):嵌入式悅翔園】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Linux內(nèi)核同步機(jī)制

    在現(xiàn)代操作系統(tǒng)里,同一時(shí)間可能有多個(gè)內(nèi)核執(zhí)行流在執(zhí)行,因此內(nèi)核其實(shí)象多進(jìn)程多線程編程一樣也需要一些同步機(jī)制來(lái)同步各執(zhí)行單元對(duì)共享數(shù)據(jù)的訪問(wèn)。尤其是在多處理器系統(tǒng)上,更需要一些同步機(jī)制來(lái)同步
    發(fā)表于 08-06 07:08

    設(shè)計(jì)時(shí)間同步機(jī)制關(guān)注的主要性能參數(shù)

    在瞬間是同步的。無(wú)線傳感器網(wǎng)絡(luò)本質(zhì)上是一個(gè)分布式協(xié)同工作的網(wǎng)絡(luò)系統(tǒng),很多具體應(yīng)用都要求網(wǎng)絡(luò)各個(gè)節(jié)點(diǎn)存在相互的協(xié)同配合,因此時(shí)間同步是無(wú)線傳感器網(wǎng)絡(luò)同步管理機(jī)制的重要內(nèi)容。  傳統(tǒng)無(wú)線網(wǎng)
    發(fā)表于 12-31 17:09

    Vulkan同步機(jī)制和圖形轉(zhuǎn)換的風(fēng)險(xiǎn)

    Vulkan同步機(jī)制和圖形-計(jì)算-圖形轉(zhuǎn)換的風(fēng)險(xiǎn)(一)
    發(fā)表于 01-21 06:17

    關(guān)于CAN總線位定時(shí)和同步機(jī)制的簡(jiǎn)要分析

    關(guān)于CAN總線位定時(shí)和同步機(jī)制的簡(jiǎn)要分析
    發(fā)表于 05-28 06:05

    RTT的消息同步機(jī)制是如何實(shí)現(xiàn)的?

    RTT的消息同步機(jī)制是如何實(shí)現(xiàn)的
    發(fā)表于 11-02 07:00

    域一致性新型鎖同步機(jī)制的實(shí)現(xiàn)

    域一致性新型鎖同步機(jī)制的實(shí)現(xiàn)將軟件分布式共享存儲(chǔ)系統(tǒng)所使用的基于域一致性協(xié)議鎖機(jī)制以新的方式加以實(shí)現(xiàn)。它充分利用SMP 結(jié)構(gòu)所具有的特點(diǎn),以多級(jí)方式實(shí)現(xiàn)鎖同步機(jī)制
    發(fā)表于 09-02 10:27 ?12次下載

    用于無(wú)線網(wǎng)絡(luò)MMORPG的同步機(jī)制

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

    連接SQL的遠(yuǎn)程數(shù)據(jù)庫(kù)同步機(jī)制

    數(shù)據(jù)同步是實(shí)現(xiàn)異地雙活數(shù)據(jù)中心的關(guān)鍵技術(shù),但現(xiàn)有遠(yuǎn)程數(shù)據(jù)庫(kù)同步機(jī)制效率較低,并且不能滿足異構(gòu)數(shù)據(jù)庫(kù)之間的同步要求。針對(duì)上述問(wèn)題,設(shè)計(jì)一種新的遠(yuǎn)程數(shù)據(jù)庫(kù)同步機(jī)制。分析應(yīng)用程序操作數(shù)據(jù)庫(kù)的
    發(fā)表于 01-24 17:11 ?1次下載
    連接SQL的遠(yuǎn)程數(shù)據(jù)庫(kù)<b class='flag-5'>同步機(jī)制</b>

    混合式數(shù)據(jù)同步機(jī)制

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

    你知道linux 同步機(jī)制的complete?

    Linux內(nèi)核,completion是一種簡(jiǎn)單的同步機(jī)制,標(biāo)志"things may proceed"。 要使用completion,必須在文件包含,同時(shí)創(chuàng)建一個(gè)類型為st
    發(fā)表于 04-24 11:45 ?1286次閱讀

    你了解Linux內(nèi)核的同步機(jī)制?

    在現(xiàn)代操作系統(tǒng)里,同一時(shí)間可能有多個(gè)內(nèi)核執(zhí)行流在執(zhí)行,因此內(nèi)核其實(shí)象多進(jìn)程多線程編程一樣也需要一些同步機(jī)制來(lái)同步各執(zhí)行單元對(duì)共享數(shù)據(jù)的訪問(wèn)。
    發(fā)表于 05-12 08:26 ?636次閱讀

    可以了解并學(xué)習(xí)Linux 內(nèi)核的同步機(jī)制

    Linux內(nèi)核同步機(jī)制,挺復(fù)雜的一個(gè)東西,常用的有自旋鎖,信號(hào)量,互斥體,原子操作,順序鎖,RCU,內(nèi)存屏障等。
    發(fā)表于 05-14 14:10 ?705次閱讀

    Linux內(nèi)核的同步機(jī)制

    在現(xiàn)代操作系統(tǒng)里,同一時(shí)間可能有多個(gè)內(nèi)核執(zhí)行流在執(zhí)行,因此內(nèi)核其實(shí)像多進(jìn)程多線程編程一樣也需要一些同步機(jī)制來(lái)同步各執(zhí)行單元對(duì)共享數(shù)據(jù)的訪問(wèn),尤其是在多處理器系統(tǒng)上,更需要一些同步機(jī)制來(lái)同步
    的頭像 發(fā)表于 09-22 09:46 ?2291次閱讀
    <b class='flag-5'>Linux</b>內(nèi)核的<b class='flag-5'>同步機(jī)制</b>

    基于有限狀態(tài)機(jī)的FlexRay時(shí)鐘同步機(jī)制

    工作的能力,其信息傳輸?shù)拇_定性離不開(kāi)其內(nèi)部的時(shí)鐘同步機(jī)制的支持。時(shí)鐘同步機(jī)制可根據(jù)該節(jié)點(diǎn)啟動(dòng)的不同工作階段,定義成不同的工作狀態(tài),如初始化、等待接收同步幀等。考慮到傳統(tǒng)的FSM方法建立模型存在代碼難以復(fù)用、維護(hù)困難等問(wèn)題,本文基
    的頭像 發(fā)表于 03-31 10:22 ?3551次閱讀
    基于有限狀態(tài)機(jī)的FlexRay時(shí)鐘<b class='flag-5'>同步機(jī)制</b>

    關(guān)于Linux kernel同步機(jī)制的這些知識(shí)點(diǎn)你不得不知道

    同步就是進(jìn)程與進(jìn)程之間,進(jìn)程與系統(tǒng)資源之間的交互。由于 Linux內(nèi)核采用的是多任務(wù),所以在多個(gè)進(jìn)程之間,必須要有同步機(jī)制來(lái)保證彼此協(xié)調(diào)。
    的頭像 發(fā)表于 04-21 14:42 ?824次閱讀
    主站蜘蛛池模板: 亚洲成年网| 日本黄色www| 8050网| 97涩涩涩| 最近2018中文字幕免费视频 | 午夜刺激爽爽视频免费观看 | 免费国产午夜高清在线视频| 久久精品美女| 好大好硬好深好爽的视频| 亚洲春色www| 中日韩在线视频| 加勒比综合| 夜夜cao| 久热福利| 日本一区不卡在线观看| 婷婷色天使在线视频观看| 拍拍拍美女黄色1000视频| 国产98色在线| 欧美在线bdsm调教一区| 黄色hd| 欧美资源在线| 爽天天天天天天天| 男操女视频在线观看| 最新激情网| 国产天堂网| 哪里可以看免费毛片| 中文字幕有码视频| 国产高清美女一级a毛片| 久草在线资源网| 五月天精品在线| 午夜在线观看视频| 亚洲女人小便| 亚洲九色| 九色综合九色综合色鬼| 天天摸天天做天天爽在线| 69日本xxxxhd| 四虎影院在线网址| 国产精品美乳在线观看| 看黄网站在线| 久久夜色tv网站免费影院| 欧洲亚洲国产精华液|