成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Linus終于被勸動(dòng):用了30年的Linux內(nèi)核C語言將升級(jí)

系統(tǒng) Linux 后端
根據(jù) Linux 內(nèi)核郵件列表的消息,社區(qū)近日討論了是否要為內(nèi)核采用現(xiàn)代 C 語言標(biāo)準(zhǔn)。

雖然 Linux 內(nèi)核在快速發(fā)展,但它同時(shí)依賴著一些非常古老的工具,其中之一就是內(nèi)核代碼仍在使用 1989 年版本的 C 語言標(biāo)準(zhǔn)——此標(biāo)準(zhǔn)在 30 多年前內(nèi)核項(xiàng)目啟動(dòng)之前就已經(jīng)編寫完成。從討論結(jié)果來看,這一情況有望在 5.18 版本內(nèi)核中改變。

Jakob Koschel 在向 Linus Torvalds 遞交的補(bǔ)丁 (https://lkml.org/lkml/2022/2/17/1032) 中修復(fù)了內(nèi)核鏈表相關(guān)的預(yù)測(cè)執(zhí)行漏洞。

起因是 Jakob 發(fā)現(xiàn)了一個(gè)問題,Linux 內(nèi)核廣泛使用由 struct list_head 定義的雙向鏈表:

struct list_head {

struct list_head *next, *prev;

};

這種結(jié)構(gòu)體通常被嵌入到其他結(jié)構(gòu)體中,通過這種方式,開發(fā)者可以使用任何感興趣的結(jié)構(gòu)類型制作鏈表。除此之外,內(nèi)核還提供了大量可用于遍歷和操作鏈表的函數(shù)和宏。其中之一是 list_for_each_entry(),這是一個(gè)偽裝成控制結(jié)構(gòu)的宏。要了解如何使用此宏,請(qǐng)假設(shè)內(nèi)核包含如下結(jié)構(gòu):

struct foo {

int fooness;

struct list_head list;

};

list 成員可用于創(chuàng)建 foo 結(jié)構(gòu)體的雙向鏈表,假設(shè)我們有一個(gè)叫做 foo_list 的結(jié)構(gòu)聲明作為此類鏈表的頭,使用以下代碼可以遍歷此列表:

struct foo *iterator;

list_for_each_entry(iterator, &foo_list, list) {

do_something_with(iterator);

}

/* Should not use iterator here */

list 參數(shù)告訴宏在 foo 結(jié)構(gòu)中 list_head 結(jié)構(gòu)體的名稱。此循環(huán)將為列表中的每個(gè)元素執(zhí)行一次,迭代器指向該元素。由此導(dǎo)致了 USB 子系統(tǒng)中的一個(gè) bug:傳遞給該宏的迭代器在退出宏后還能被使用。

Koschel 通過重新編寫有問題的代碼,以在循環(huán)后停止使用迭代器來解決問題。

不過 Linus 卻對(duì)補(bǔ)丁修復(fù)的問題表示不解,也沒有看到它與預(yù)測(cè)執(zhí)行漏洞的關(guān)系。Koschel 對(duì)此進(jìn)行了進(jìn)一步解釋,對(duì)此 Linus 認(rèn)為這只是一個(gè)普通的 bug。但不久之后 Linus 發(fā)現(xiàn)了問題的根源所在:傳遞給列表遍歷宏的迭代器,必須在循環(huán)本身之外的范圍內(nèi)聲明。

隨后,Linus 認(rèn)為也許可以采用更直接的修復(fù)如塊級(jí)變量聲明。但 C89 不支持,而 1999 年發(fā)布的 C99 標(biāo)準(zhǔn)支持。所以 Linux 內(nèi)核也許是時(shí)候轉(zhuǎn)向使用 C99 標(biāo)準(zhǔn)了。

Linus 說到,內(nèi)核代碼一直停留在 C89 的原因之一是編譯器 gcc 的舊版本會(huì)出現(xiàn)奇怪的問題,導(dǎo)致初始化程序被破壞。不過現(xiàn)在內(nèi)核要求的 GCC 最低版本已經(jīng)提高到了 v5.1,那些 bug 可能不再相關(guān)了。

另一位密切關(guān)注架構(gòu)編譯器問題的內(nèi)核開發(fā)者 Arnd Bergmann 提議直接升級(jí)到 C11 甚至 C2x,盡管他不確定 C11 是否會(huì)帶來任何對(duì)內(nèi)核有用的新內(nèi)容。不過如果升級(jí)到 C17 或 C2x,會(huì)破壞對(duì) gcc-5/6/7 的支持,因此升級(jí)到 C11 更容易實(shí)現(xiàn),而且跨越太大內(nèi)核社區(qū)未必接受。

Linus 贊成了這個(gè)想法,在 Bergmann 確認(rèn)應(yīng)該可以這樣做之后,Linus 宣布將在下一個(gè)內(nèi)核版本 v5.18 中嘗試使用 C11 標(biāo)準(zhǔn)。如果一切順利,下一個(gè)內(nèi)核版本使用的 C 語言標(biāo)準(zhǔn)有望升級(jí)到 C11。

責(zé)任編輯:龐桂玉 來源: C語言與C++編程
相關(guān)推薦

2022-02-25 14:51:39

LinuxC語言Linux 內(nèi)核

2022-08-26 09:02:57

代碼庫編程語言

2023-01-03 15:47:09

Linux內(nèi)核C語言

2014-03-05 09:39:42

Linus TrovaLinux內(nèi)核開發(fā)

2023-07-26 08:54:39

2021-09-21 16:48:36

LinuxTorvalds虛擬機(jī)

2021-07-29 20:29:36

Linux c 代碼Java

2021-12-27 10:54:06

Linus演講錄音錄音帶

2020-10-26 19:20:08

Linux國密算法加密

2022-02-25 14:13:28

LinuxC語言開發(fā)

2022-02-25 15:49:08

Linux開源社區(qū)C語言C11

2012-07-31 16:11:25

Linux內(nèi)核系統(tǒng)運(yùn)維

2013-04-08 16:19:46

Linux內(nèi)核內(nèi)核升級(jí)

2023-02-21 08:55:47

Linux操作系統(tǒng)

2024-01-02 14:12:03

LinuxAITorvalds

2025-04-11 09:37:31

2023-12-11 10:31:58

LinuxRustAI

2014-05-22 10:10:36

Linux內(nèi)核Linus Torva

2010-03-02 16:13:56

Linux升級(jí)

2020-11-11 14:48:41

Linux內(nèi)核代碼
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 久久噜噜噜精品国产亚洲综合 | 日韩国产欧美 | 国产精品久久久久一区二区三区 | 国产日韩欧美一区二区 | av看片网站| 2020亚洲天堂| 久久久久久免费看 | 精品亚洲二区 | 一区欧美| 亚洲精品一区二区久 | 国产一级在线观看 | 亚洲精品乱码久久久久久9色 | 少妇一区在线观看 | 精品久久久久香蕉网 | 中国av在线免费观看 | a免费视频 | 亚洲狠狠爱 | 2018天天干天天操 | 91免费版在线观看 | 久久精品一区二区三区四区 | 色综合色综合网色综合 | 亚洲高清视频在线观看 | 99这里只有精品视频 | 亚洲精品中文字幕中文字幕 | 国产精品日日摸夜夜添夜夜av | 国产精品免费观看视频 | 欧美成人精品欧美一级 | 一区二区视频在线观看 | 国产欧美在线一区二区 | 久久99精品久久久久久国产越南 | 可以免费观看的av片 | 免费国产视频 | 亚洲高清免费视频 | 欧美成人免费 | 中文字幕在线三区 | 日韩视频精品在线 | 中文在线a在线 | 欧美中文一区 | 九九综合 | 国产三级一区二区 | 国产精品视频二区三区 |