www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁(yè) > 公眾號(hào)精選 > 程序員小哈
[導(dǎo)讀]Linux內(nèi)核的信號(hào)量在概念和原理上和用戶態(tài)的System V的IPC機(jī)制信號(hào)量是相同的,不過(guò)他絕不可能在內(nèi)核之外使用,因此他和System V的IPC機(jī)制信號(hào)量毫不相干。如果有一個(gè)任務(wù)想要獲得已經(jīng)被占用的信號(hào)量時(shí),信號(hào)量會(huì)將其放入一個(gè)等待隊(duì)列(它不是站在外面癡癡地等待而是將自己的名字寫(xiě)在任務(wù)隊(duì)列中)然后讓其睡眠。

概念

Linux內(nèi)核的信號(hào)量在概念和原理上和用戶態(tài)的System V的IPC機(jī)制信號(hào)量是相同的,不過(guò)他絕不可能在內(nèi)核之外使用,因此他和System V的IPC機(jī)制信號(hào)量毫不相干。

如果有一個(gè)任務(wù)想要獲得已經(jīng)被占用的信號(hào)量時(shí),信號(hào)量會(huì)將其放入一個(gè)等待隊(duì)列(它不是站在外面癡癡地等待而是將自己的名字寫(xiě)在任務(wù)隊(duì)列中)然后讓其睡眠。

當(dāng)持有信號(hào)量的進(jìn)程將信號(hào)釋放后,處于等待隊(duì)列中的一個(gè)任務(wù)將被喚醒(因?yàn)殛?duì)列中可能不止一個(gè)任務(wù)),并讓其獲得信號(hào)量。這一點(diǎn)與自旋鎖不同,處理器可以去執(zhí)行其它代碼。

應(yīng)用場(chǎng)景

由于爭(zhēng)用信號(hào)量的進(jìn)程在等待鎖重新變?yōu)榭捎脮r(shí)會(huì)睡眠,所以信號(hào)量適用于鎖會(huì)被長(zhǎng)時(shí)間持有的情況;相反,鎖被短時(shí)間持有時(shí),使用信號(hào)量就不太適宜了,因?yàn)樗摺⒕S護(hù)等待隊(duì)列以及喚醒所花費(fèi)的開(kāi)銷可能比鎖占用的全部時(shí)間表還要長(zhǎng)。

舉2個(gè)生活中的例子:

  1. 我們坐火車(chē)從南京到新疆需要2天的時(shí)間,這個(gè)'任務(wù)'特別的耗時(shí),只能坐在車(chē)上等著車(chē)到站,但是我們沒(méi)有必要一直睜著眼睛等,理想的情況就是我們上車(chē)就直接睡覺(jué),醒來(lái)就到站(看過(guò)《異形》的讀者會(huì)深有體會(huì)),這樣從人(用戶)的角度來(lái)說(shuō),體驗(yàn)是最好的,對(duì)比于進(jìn)程,程序在等待一個(gè)耗時(shí)事件的時(shí)候,沒(méi)有必須要一直占用CPU,可以暫停當(dāng)前任務(wù)使其進(jìn)入休眠狀態(tài),當(dāng)?shù)却氖录l(fā)生之后再由其他任務(wù)喚醒,類似于這種場(chǎng)景采用信號(hào)量比較合適。

  2. 我們有時(shí)候會(huì)等待電梯、洗手間,這種場(chǎng)景需要等待的時(shí)間并不是很多,如果我們還要找個(gè)地方睡一覺(jué),然后等電梯到了或者洗手間可以用了再醒來(lái),那很顯然這也沒(méi)有必要,我們只需要排好隊(duì),刷一刷抖音就可以了,對(duì)比于計(jì)算機(jī)程序,比如驅(qū)動(dòng)在進(jìn)入中斷例程,在等待某個(gè)寄存器被置位,這種場(chǎng)景需要等待的時(shí)間往往很短暫,系統(tǒng)開(kāi)銷甚至遠(yuǎn)小于進(jìn)入休眠的開(kāi)銷,所以這種場(chǎng)景采用自旋鎖比較合適。

關(guān)于信號(hào)量和自旋鎖,以及死鎖問(wèn)題,我們后面會(huì)再詳細(xì)討論。

使用方法

一個(gè)任務(wù)要想訪問(wèn)共享資源,首先必須得到信號(hào)量,獲取信號(hào)量的操作將把信號(hào)量的值減1,若當(dāng)前信號(hào)量的值為負(fù)數(shù),表明無(wú)法獲得信號(hào)量,該任務(wù)必須掛起在 該信號(hào)量的等待隊(duì)列等待該信號(hào)量可用;若當(dāng)前信號(hào)量的值為非負(fù)數(shù),表示能獲得信號(hào)量,因而能即時(shí)訪問(wèn)被該信號(hào)量保護(hù)的共享資源。

當(dāng)任務(wù)訪問(wèn)完被信號(hào)量保護(hù)的共享資源后,必須釋放信號(hào)量,釋放信號(hào)量通過(guò)把信號(hào)量的值加1實(shí)現(xiàn),如果信號(hào)量的值為非正數(shù),表明有任務(wù)等待當(dāng)前信號(hào)量,因此他也喚醒所有等待該信號(hào)量的任務(wù)。

內(nèi)核信號(hào)量的構(gòu)成

內(nèi)核信號(hào)量類似于自旋鎖,因?yàn)楫?dāng)鎖關(guān)閉著時(shí),它不允許內(nèi)核控制路徑繼續(xù)進(jìn)行。然而,當(dāng)內(nèi)核控制路徑試圖獲取內(nèi)核信號(hào)量鎖保護(hù)的忙資源時(shí),相應(yīng)的進(jìn)程就被掛起。只有在資源被釋放時(shí),進(jìn)程才再次變?yōu)榭蛇\(yùn)行。

只有可以睡眠的函數(shù)才能獲取內(nèi)核信號(hào)量;中斷處理程序和可延遲函數(shù)都不能使用內(nèi)核信號(hào)量。

內(nèi)核信號(hào)量是struct semaphore類型的對(duì)象,在內(nèi)核源碼中位于include\linux\semaphore.h文件

struct?semaphore{
????raw_spinlock_t????????lock;
????unsigned?int????????count;
????struct?list_head????wait_list;
}
成員 描述
lock 在2.6.33之后的版本,內(nèi)核加入了raw_spin_lock系列,使用方法和spin_lock系列一模一樣,只是參數(shù)spinlock_t變?yōu)榱藃aw_spinlock_t
count 相當(dāng)于信號(hào)量的值,大于0,資源空閑;等于0,資源忙,但沒(méi)有進(jìn)程等待這個(gè)保護(hù)的資源;小于0,資源不可用,并至少有一個(gè)進(jìn)程等待資源
wait_list 內(nèi)核鏈表,當(dāng)前獲得信號(hào)量的任務(wù)會(huì)與該成員一起注冊(cè)到等待的鏈表中

信號(hào)量的API

初始化

DECLARE_MUTEX(name)

該宏聲明一個(gè)信號(hào)量name并初始化他的值為1,即聲明一個(gè)互斥鎖。

DECLARE_MUTEX_LOCKED(name)

該宏聲明一個(gè)互斥鎖name,但把他的初始值設(shè)置為0,即鎖在創(chuàng)建時(shí)就處在已鎖狀態(tài)。因此對(duì)于這種鎖,一般是先釋放后獲得。

void?sema_init?(struct?semaphore?*sem,?int?val);

該函用于數(shù)初始化設(shè)置信號(hào)量的初值,他設(shè)置信號(hào)量sem的值為val。

注意:

val設(shè)置為1說(shuō)明只有一個(gè)持有者,這種信號(hào)量叫二值信號(hào)量或者叫互斥信號(hào)量。

我們還允許信號(hào)量可以有多個(gè)持有者,這種信號(hào)量叫計(jì)數(shù)信號(hào)量,在初始化時(shí)要說(shuō)明最多允許有多少個(gè)持有者也可以把信號(hào)量中的val初始化為任意的正數(shù)值n,在這種情況下,最多有n個(gè)進(jìn)程可以并發(fā)地訪問(wèn)這個(gè)資源。

void?init_MUTEX?(struct?semaphore?*sem);

該函數(shù)用于初始化一個(gè)互斥鎖,即他把信號(hào)量sem的值設(shè)置為1。

void?init_MUTEX_LOCKED?(struct?semaphore?*sem);

該函數(shù)也用于初始化一個(gè)互斥鎖,但他把信號(hào)量sem的值設(shè)置為0,即一開(kāi)始就處在已鎖狀態(tài)。

PV操作

獲取信號(hào)量(P)

void?down(struct?semaphore?*?sem);

該函數(shù)用于獲得信號(hào)量sem,他會(huì)導(dǎo)致調(diào)用該函數(shù)的進(jìn)程睡眠,因此不能在中斷上下文(包括IRQ上下文和softirq上下文)使用該函數(shù)。該函數(shù)將把sem的值減1,如果信號(hào)量sem的值非負(fù),就直接返回,否則調(diào)用者將被掛起,直到別的任務(wù)釋放該信號(hào)量才能繼續(xù)運(yùn)行。

int?down_interruptible(struct?semaphore?*?sem);

該函數(shù)功能和down類似,不同之處為,down不會(huì)被信號(hào)(signal)打斷,但down_interruptible能被信號(hào)打斷,因此該函數(shù)有返回值來(lái)區(qū)分是正常返回還是被信號(hào)中斷,如果返回0,表示獲得信號(hào)量正常返回,如果被信號(hào)打斷,返回-EINTR。

int?down_trylock(struct?semaphore?*?sem);

該函數(shù)試著獲得信號(hào)量sem,如果能夠即時(shí)獲得,他就獲得該信號(hào)量并返回0,否則,表示不能獲得信號(hào)量sem,返回值為非0值。因此,他不會(huì)導(dǎo)致調(diào)用者睡眠,能在中斷上下文使用。

int?down_killable(struct?semaphore?*sem);
int?down_timeout(struct?semaphore?*sem,?long?jiffies);
int?down_timeout_interruptible(struct?semaphore?*sem,?long?jiffies);

釋放內(nèi)核信號(hào)量(V)

void?up(struct?semaphore?*?sem);

該函數(shù)釋放信號(hào)量sem,即把sem的值加1,如果sem的值為非正數(shù),表明有任務(wù)等待該信號(hào)量,因此喚醒這些等待者。

補(bǔ)充

int?down_interruptible(struct?semaphore?*sem)

這個(gè)函數(shù)的功能就是獲得信號(hào)量,如果得不到信號(hào)量就睡眠,此時(shí)沒(méi)有信號(hào)打斷,那么進(jìn)入睡眠。但是在睡眠過(guò)程中可能被信號(hào)打斷,打斷之后返回-EINTR,主要用來(lái)進(jìn)程間的互斥同步。

下面是該函數(shù)的注釋:

/**
*?down_interruptible?-?acquire?the?semaphore?unless?interrupted
*?@sem:?the?semaphore?to?be?acquired
*
*?Attempts?to?acquire?the?semaphore.?If?no?more?tasks?are?allowed?to
*?acquire?the?semaphore,?calling?this?function?will?put?the?task?to?sleep.
*?If?the?sleep?is?interrupted?by?a?signal,?this?function?will?return?-EINTR.
*?If?the?semaphore?is?successfully?acquired,?this?function?returns?0.
*/

一個(gè)進(jìn)程在調(diào)用down_interruptible()之后,如果sem<0,那么就進(jìn)入到可中斷的睡眠狀態(tài)并調(diào)度其它進(jìn)程運(yùn)行, 但是一旦該進(jìn)程收到信號(hào),那么就會(huì)從down_interruptible函數(shù)中返回。并標(biāo)記錯(cuò)誤號(hào)為:-EINTR。

一個(gè)形象的比喻:傳入的信號(hào)量為1好比天亮,如果當(dāng)前信號(hào)量為0,進(jìn)程睡眠,直到(信號(hào)量為1)天亮才醒,但是可能中途有個(gè)鬧鈴(信號(hào))把你鬧醒。

又如:小強(qiáng)下午放學(xué)回家,回家了就要開(kāi)始吃飯嘛,這時(shí)就會(huì)有兩種情況:情況一:飯做好了,可以開(kāi)始吃;情況二:當(dāng)他到廚房去的時(shí)候發(fā)現(xiàn)媽媽還在做, 媽媽就對(duì)他說(shuō):“你先去睡會(huì),待會(huì)做好了叫你?!?小強(qiáng)就答應(yīng)去睡會(huì),不過(guò)又說(shuō)了一句:“睡的這段時(shí)間要是小紅來(lái)找我玩,你可以叫醒我?!?小強(qiáng)就是down_interruptible,想吃飯就是獲取信號(hào)量,睡覺(jué)對(duì)應(yīng)這里的休眠,而小紅來(lái)找我玩就是中斷休眠。

使用可被中斷的信號(hào)量版本的意思是,萬(wàn)一出現(xiàn)了semaphore的死鎖,還有機(jī)會(huì)用ctrl+c發(fā)出軟中斷,讓等待這個(gè)內(nèi)核驅(qū)動(dòng)返回的用戶態(tài)進(jìn)程退出。而不是把整個(gè)系統(tǒng)都鎖住了。在休眠時(shí),能被中斷信號(hào)終止,這個(gè)進(jìn)程是可以接受中斷信號(hào)的!

比如你在命令行中輸入# sleep 10000,按下ctrl + c,就給上面的進(jìn)程發(fā)送了進(jìn)程終止信號(hào)。信號(hào)發(fā)送給用戶空間,然后通過(guò)系統(tǒng)調(diào)用,會(huì)把這個(gè)信號(hào)傳給遞給驅(qū)動(dòng)。信號(hào)只能發(fā)送給用戶空間,無(wú)權(quán)直接發(fā)送給內(nèi)核的,那1G的內(nèi)核空間,我們是無(wú)法直接去操作的。

內(nèi)核信號(hào)量的使用例程

場(chǎng)景1

在驅(qū)動(dòng)程序中,當(dāng)多個(gè)線程同時(shí)訪問(wèn)相同的資源時(shí)(驅(qū)動(dòng)中的全局變量時(shí)一種典型的共享資源),可能會(huì)引發(fā)“競(jìng)態(tài)“,因此我們必須對(duì)共享資源進(jìn)行并發(fā)控制。Linux內(nèi)核中

解決并發(fā)控制的最常用方法是自旋鎖與信號(hào)量(絕大多數(shù)時(shí)候作為互斥鎖使用)。

在這里插入圖片描述

場(chǎng)景2

有時(shí)候我們希望設(shè)備只能被一個(gè)進(jìn)程打開(kāi),當(dāng)設(shè)備被占用的時(shí)候,其他設(shè)備必須進(jìn)入休眠。

信號(hào)處理示意圖

在這里插入圖片描述

如上圖:

  1. 進(jìn)程A首先通過(guò)open()打開(kāi)設(shè)備文件,調(diào)用到內(nèi)核的hello_open(),并調(diào)用down_interruptible(),因?yàn)榇藭r(shí)信號(hào)量沒(méi)有被占用,所以進(jìn)程A可以獲得信號(hào)量;

  2. 進(jìn)程A獲得信號(hào)量之后繼續(xù)處理原有任務(wù),此時(shí)進(jìn)程B也要通過(guò)open()打開(kāi)設(shè)備文件,同樣調(diào)用內(nèi)核函數(shù)hello_open(),但此時(shí)信號(hào)量獲取不到,于是進(jìn)程B被阻塞;

  3. 進(jìn)程A任務(wù)執(zhí)行完畢,關(guān)閉設(shè)備文件,并通過(guò)up()釋放信號(hào)量,于是進(jìn)程B被喚醒,并得以繼續(xù)執(zhí)行剩下的任務(wù),

  4. 進(jìn)程B執(zhí)行完任務(wù),釋放設(shè)備文件,通過(guò)up()釋放信號(hào)量

代碼如下:

#include?
#include?
#include?
#include?
#include?
#include?
#include?

static?int?major?=?250;
static?int?minor?=?0;
static?dev_t?devno;
static?struct?cdev?cdev;


static?struct?class?*cls;
static?struct?device?*test_device;

static?struct?semaphore?sem;
static?int?hello_open?(struct?inode?*inode,?struct?file?*filep)
{
????
????if(down_interruptible(&sem))//p
????{
????????return?-ERESTARTSYS;
????}
??????return?0;
}
static?int?hello_release?(struct?inode?*inode,?struct?file?*filep)
{
????up(&sem);//v
????return?0;
}
static?struct?file_operations?hello_ops?=
{

????.open?=?hello_open,
????.release?=?hello_release,
};
static?int?hello_init(void)
{
????int?result;
????int?error;????
????printk("hello_init?\n");
????result?=?register_chrdev(?major,?"hello",?&hello_ops);
????if(result?0)
????{
????????printk("register_chrdev?fail?\n");
????????return?result;
????}
????devno?=?MKDEV(major,minor);
????cls?=?class_create(THIS_MODULE,"helloclass");
????if(IS_ERR(cls))
????{
????????unregister_chrdev(major,"hello");
????????return?result;
????}
????test_device?=?device_create(cls,NULL,devno,NULL,"test");
????if(IS_ERR(test_device?))
????{
????????class_destroy(cls);
????????unregister_chrdev(major,"hello");
????????return?result;
????}
????sem_init(&sem,1);
????return?0;
}
static?void?hello_exit(void)
{
????printk("hello_exit?\n");
????device_destroy(cls,devno);????
????class_destroy(cls);
????unregister_chrdev(major,"hello");
????return;
}
module_init(hello_init);
module_exit(hello_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("daniel.peng");


測(cè)試程序 test.c

#include?
#include?
#include?
#include?
main()
{
????int?fd;
????
????printf("before?open\n?");????
????fd?=?open("/dev/test",O_RDWR);??//原子變量??0
????if(fd<0)
????{
????????perror("open?fail?\n");
????????return;
????}
????printf("open?ok?,sleep......\n?");????
????sleep(20);
????printf("wake?up?from?sleep!\n?");????????
????close(fd);???//加為1
}

編譯步驟

1 make 生成 hello.ko

2 gcc test.c -o a

3 gcc test.c -o b

測(cè)試步驟

  1. 安裝驅(qū)動(dòng)
insmod?hello.ko
  1. 先運(yùn)行進(jìn)程A,在運(yùn)行進(jìn)程B

可見(jiàn)進(jìn)程A成功打開(kāi)設(shè)備,在進(jìn)程A sleep期間會(huì)一直占有該字符設(shè)備,進(jìn)程B由于無(wú)法獲得信號(hào)量,進(jìn)入休閑,結(jié)合代碼可知,進(jìn)程B被阻塞在函數(shù)open()中。

  1. 進(jìn)程A 結(jié)束了sleep,并釋放字符設(shè)備以及信號(hào)量,進(jìn)程B被喚醒獲得信號(hào)量,并成功打開(kāi)了字符設(shè)備。
  1. 進(jìn)程B執(zhí)行完sleep函數(shù)后退出,并釋放字符設(shè)備和信號(hào)量。

讀-寫(xiě)信號(hào)量

跟自旋鎖一樣,信號(hào)量也有區(qū)分讀-寫(xiě)信號(hào)量之分。

如果一個(gè)讀寫(xiě)信號(hào)量當(dāng)前沒(méi)有被寫(xiě)者擁有并且也沒(méi)有寫(xiě)者等待讀者釋放信號(hào)量,那么任何讀者都可以成功獲得該讀寫(xiě)信號(hào)量;否則,讀者必須被掛起直到寫(xiě)者釋放該信號(hào)量。如果一個(gè)讀寫(xiě)信號(hào)量當(dāng)前沒(méi)有被讀者或?qū)懻邠碛胁⑶乙矝](méi)有寫(xiě)者等待該信號(hào)量,那么一個(gè)寫(xiě)者可以成功獲得該讀寫(xiě)信號(hào)量,否則寫(xiě)者將被掛起,直到?jīng)]有任何訪問(wèn)者。因此,寫(xiě)者是排他性的,獨(dú)占性的。

讀寫(xiě)信號(hào)量有兩種實(shí)現(xiàn),一種是通用的,不依賴于硬件架構(gòu),因此,增加新的架構(gòu)不需要重新實(shí)現(xiàn)它,但缺點(diǎn)是性能低,獲得和釋放讀寫(xiě)信號(hào)量的開(kāi)銷大;另一種是架構(gòu)相關(guān)的,因此性能高,獲取和釋放讀寫(xiě)信號(hào)量的開(kāi)銷小,但增加新的架構(gòu)需要重新實(shí)現(xiàn)。在內(nèi)核配置時(shí),可以通過(guò)選項(xiàng)去控制使用哪一種實(shí)現(xiàn)。

讀寫(xiě)信號(hào)量的相關(guān)API:

DECLARE_RWSEM(name)

該宏聲明一個(gè)讀寫(xiě)信號(hào)量name并對(duì)其進(jìn)行初始化。

void?init_rwsem(struct?rw_semaphore?*sem);

該函數(shù)對(duì)讀寫(xiě)信號(hào)量sem進(jìn)行初始化。

void?down_read(struct?rw_semaphore?*sem);

讀者調(diào)用該函數(shù)來(lái)得到讀寫(xiě)信號(hào)量sem。該函數(shù)會(huì)導(dǎo)致調(diào)用者睡眠,因此只能在進(jìn)程上下文使用。

int?down_read_trylock(struct?rw_semaphore?*sem);

該函數(shù)類似于down_read,只是它不會(huì)導(dǎo)致調(diào)用者睡眠。它盡力得到讀寫(xiě)信號(hào)量sem,如果能夠立即得到,它就得到該讀寫(xiě)信號(hào)量,并且返回1,否則表示不能立刻得到該信號(hào)量,返回0。因此,它也可以在中斷上下文使用。

void?down_write(struct?rw_semaphore?*sem);

寫(xiě)者使用該函數(shù)來(lái)得到讀寫(xiě)信號(hào)量sem,它也會(huì)導(dǎo)致調(diào)用者睡眠,因此只能在進(jìn)程上下文使用。

int?down_write_trylock(struct?rw_semaphore?*sem);

該函數(shù)類似于down_write,只是它不會(huì)導(dǎo)致調(diào)用者睡眠。該函數(shù)盡力得到讀寫(xiě)信號(hào)量,如果能夠立刻獲得,就獲得該讀寫(xiě)信號(hào)量并且返回1,否則表示無(wú)法立刻獲得,返回0。它可以在中斷上下文使用。

void?up_read(struct?rw_semaphore?*sem);

讀者使用該函數(shù)釋放讀寫(xiě)信號(hào)量sem。它與down_read或down_read_trylock配對(duì)使用。

如果down_read_trylock返回0,不需要調(diào)用up_read來(lái)釋放讀寫(xiě)信號(hào)量,因?yàn)楦揪蜎](méi)有獲得信號(hào)量。

void?up_write(struct?rw_semaphore?*sem);

寫(xiě)者調(diào)用該函數(shù)釋放信號(hào)量sem。它與down_write或down_write_trylock配對(duì)使用。如果down_write_trylock返回0,不需要調(diào)用up_write,因?yàn)榉祷?表示沒(méi)有獲得該讀寫(xiě)信號(hào)量。

void?downgrade_write(struct?rw_semaphore?*sem);

該函數(shù)用于把寫(xiě)者降級(jí)為讀者,這有時(shí)是必要的。因?yàn)閷?xiě)者是排他性的,因此在寫(xiě)者保持讀寫(xiě)信號(hào)量期間,任何讀者或?qū)懻叨紝o(wú)法訪問(wèn)該讀寫(xiě)信號(hào)量保護(hù)的共享資源,對(duì)于那些當(dāng)前條件下不需要寫(xiě)訪問(wèn)的寫(xiě)者,降級(jí)為讀者將,使得等待訪問(wèn)的讀者能夠立刻訪問(wèn),從而增加了并發(fā)性,提高了效率。

讀寫(xiě)信號(hào)量適于在讀多寫(xiě)少的情況下使用,在linux內(nèi)核中對(duì)進(jìn)程的內(nèi)存映像描述結(jié)構(gòu)的訪問(wèn)就使用了讀寫(xiě)信號(hào)量進(jìn)行保護(hù)。


-THE END-



推薦閱讀


【1】 SPI轉(zhuǎn)can芯片CSM300詳解、Linux驅(qū)動(dòng)移植調(diào)試筆記? 必讀
【2】 到底什么是Cortex、ARMv8、arm架構(gòu)、ARM指令集、soc?一文幫你梳理基礎(chǔ)概念【科普】?必讀
【3】搞懂進(jìn)程組、會(huì)話、控制終端關(guān)系,才能明白守護(hù)進(jìn)程干嘛的?
【4】快速掌握TCP協(xié)議
【5】Linux庫(kù)概念,動(dòng)態(tài)庫(kù)和靜態(tài)庫(kù)的制作,如何移植第三方庫(kù)
【6】I2C基礎(chǔ)知識(shí)入門(mén)? 必讀


本公眾號(hào)全部原創(chuàng)干貨已整理成一個(gè)目錄,點(diǎn)擊干貨即可獲得。


后臺(tái)回復(fù)進(jìn)群」,即可加入技術(shù)交流群,進(jìn)群福利:免費(fèi)贈(zèng)送Linux學(xué)習(xí)資料。


免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場(chǎng),如有問(wèn)題,請(qǐng)聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車(chē)的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車(chē)技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車(chē)工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車(chē)。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車(chē) 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉