自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

內(nèi)核系統(tǒng)調(diào)用的實(shí)現(xiàn)和互斥機(jī)制

系統(tǒng)
操作系統(tǒng)本質(zhì)上是對(duì)底層的資源進(jìn)行管理并封裝了底層的能力,對(duì)上層提供服務(wù)。這種服務(wù)好比是實(shí)現(xiàn)了一個(gè)排序算法,但是是否使用多線程,這個(gè)是由上層決定的,內(nèi)核本身不會(huì)在底層實(shí)現(xiàn)多線程排序這種能力。

[[403398]]

本文轉(zhuǎn)載自微信公眾號(hào)「編程雜技」,作者theanarkh。轉(zhuǎn)載本文請(qǐng)聯(lián)系編程雜技公眾號(hào)。

有感于最近在知乎看到了兩個(gè)問題,分享一下對(duì)內(nèi)核系統(tǒng)調(diào)用的實(shí)現(xiàn)和互斥機(jī)制的認(rèn)識(shí)。

下面是這兩個(gè)問題:

https://www.zhihu.com/question/462048846/answer/1919407185

https://www.zhihu.com/question/460985657/answer/1912146181

系統(tǒng)調(diào)用的實(shí)現(xiàn)

兩個(gè)問題分別是問了TCP/IP協(xié)議和epoll的實(shí)現(xiàn)中,內(nèi)核是否使用了多線程。這個(gè)問題的角度挺有意思的,內(nèi)核雖然在內(nèi)部使用進(jìn)程/線程實(shí)現(xiàn)了某些功能(比如pdflush線程定時(shí)回寫硬盤、kswapd進(jìn)程周期回收內(nèi)存、處理工作隊(duì)列的線程)。但是系統(tǒng)調(diào)用的實(shí)現(xiàn)中,是不涉及多線程的概念的。

操作系統(tǒng)本質(zhì)上是對(duì)底層的資源進(jìn)行管理并封裝了底層的能力,對(duì)上層提供服務(wù)。這種服務(wù)好比是實(shí)現(xiàn)了一個(gè)排序算法,但是是否使用多線程,這個(gè)是由上層決定的,內(nèi)核本身不會(huì)在底層實(shí)現(xiàn)多線程排序這種能力。

互斥機(jī)制

但是因?yàn)樵诙嗪说那闆r下,多個(gè)CPU上會(huì)執(zhí)行多個(gè)線程,如果多個(gè)線程同時(shí)請(qǐng)求內(nèi)核訪問同一個(gè)內(nèi)核數(shù)據(jù)結(jié)構(gòu),那么就會(huì)引起競(jìng)態(tài)情況。所以內(nèi)核需要實(shí)現(xiàn)訪問資源的互斥機(jī)制。這樣才能保證多個(gè)CPU中同時(shí)只有一個(gè)CPU會(huì)操作共享的數(shù)據(jù)結(jié)構(gòu)。比如自旋鎖,保證多個(gè)CPU只有其中一個(gè)CPU拿到這個(gè)鎖,然后操作共享的數(shù)據(jù)。另外,內(nèi)核還實(shí)現(xiàn)了原子操作,比如內(nèi)核里提供的atomic原子操作,可以對(duì)整形變量進(jìn)行原子性操作,其具體實(shí)現(xiàn)原理根據(jù)CPU架構(gòu)而不同,比如i386 CPU提供了Lock指令,保證同時(shí)只有一個(gè)CPU可以鎖住總線,對(duì)內(nèi)存進(jìn)行互斥訪問,下面是i386原子操作的實(shí)現(xiàn)。

  1. static __inline__ void atomic_add(int i, atomic_t *v) 
  2.   __asm__ __volatile__( 
  3.     LOCK "addl %1,%0" 
  4.     // 輸出到v->counter所在內(nèi)存 
  5.     :"=m" (v->counter) 
  6.     // %1和0%對(duì)應(yīng)下面兩個(gè)值,i是整形,隨便存到一個(gè)寄存器,m表示表示從v->counter的內(nèi)存讀取 
  7.     :"ir" (i), "m" (v->counter)); 

如果單核的情況下,非搶占式的則不需要這種機(jī)制,因?yàn)樵趫?zhí)行系統(tǒng)調(diào)用的時(shí)候,進(jìn)程調(diào)度器是不會(huì)調(diào)度其他進(jìn)程執(zhí)行的,這就保證了系統(tǒng)調(diào)用的原子性。如果在搶占式模式下并且支持在執(zhí)行系統(tǒng)調(diào)用時(shí)被搶占,那么還是需要互斥和原子機(jī)制的,總而言之,存在競(jìng)態(tài)情況的,都需要保證共享數(shù)據(jù)的互斥訪問。

 

內(nèi)核實(shí)現(xiàn)的功能雖然沒有使用多線程,但是通常底層是多核,上層是使用多進(jìn)程/多線程的,所以內(nèi)核為了保證互斥訪問共享數(shù)據(jù),需要實(shí)現(xiàn)一些原子操作和互斥機(jī)制。

 

責(zé)任編輯:武曉燕 來源: 編程雜技
相關(guān)推薦

2011-01-14 13:50:37

2024-07-25 11:53:53

2021-03-15 15:18:16

鴻蒙HarmonyOS應(yīng)用

2009-10-29 09:41:01

Linux內(nèi)核DeviceMappe

2022-04-11 08:42:09

TypeScript子類型定義

2024-12-27 09:46:10

2016-09-20 15:21:35

LinuxInnoDBMysql

2019-04-10 13:43:19

Linux內(nèi)核進(jìn)程負(fù)載

2021-01-29 13:29:53

系統(tǒng)調(diào)用

2023-12-15 15:55:24

Linux線程同步

2020-12-28 08:51:06

操作系統(tǒng)微內(nèi)核Dubbo

2024-06-28 08:45:58

2021-10-25 09:53:52

鴻蒙HarmonyOS應(yīng)用

2021-05-10 08:30:59

CentosUbutun運(yùn)維

2017-08-16 16:20:01

Linux內(nèi)核態(tài)搶占用戶態(tài)搶占

2024-01-09 09:40:23

2020-09-04 10:14:02

Linux驅(qū)動(dòng)7內(nèi)核

2015-03-26 13:14:53

javascriptjs callback實(shí)現(xiàn)調(diào)用

2009-06-19 20:32:00

Linux

2025-04-18 04:05:00

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)