시스템 튜토리얼 리눅스 리눅스의 아버지는 마침내 설득당했다: 30년 된 리눅스 커널 C 언어가 C11로 업그레이드될 것이다

리눅스의 아버지는 마침내 설득당했다: 30년 된 리눅스 커널 C 언어가 C11로 업그레이드될 것이다

Feb 14, 2024 pm 09:36 PM
linux 리눅스 튜토리얼 리눅스 시스템 리눅스 명령 쉘 스크립트 리눅스 시작하기 리눅스 학습

최근에 사용하던 C언어 리눅스 커널의 1989년 버전이 드디어 대대적인 업그레이드를 했다는 소식이 있습니다. 현대 기술의 속도는 멈출 수 없습니다. 오늘날 Linux 오픈 소스 커뮤니티는 커널의 C 언어 버전을 C11 표준으로 업그레이드하려는 강력한 계획을 발표했습니다. 이번 대대적인 개편은 오는 5월인 리눅스 버전 5.18 이후부터 적용될 것으로 예상된다. 이 중요한 움직임은 Linux 커널에 무한한 잠재적 기회를 제공하고 최신 기술의 요구 사항에 더 잘 적응하는 데 도움이 될 것입니다.

이 결정은 질문을 시작한 후 공식 성명을 발표하는 데 불과 일주일이 걸렸습니다. Linux의 완고한 아버지 인 Linus Torvalds를 설득하는 것은 쉽지 않습니다. 문제의 이유는 약간 우연한 것 같습니다. Linux 之父终于被劝动:用了 30 年的 Linux 内核 C 语言将升级至 C11

벌레의 연쇄반응

이 문제는 지난주 Linux 커뮤니티 토론에서 발생했습니다.

Jakob Koschel이라는 박사과정 학생이 커널 연결 목록 프리미티브와 관련된 추측 실행 취약점을 방지하는 방법을 연구하던 중 이러한 문제를 발견했습니다.

Linux 커널은 struct list_head에 의해 정의된 이중 연결 목록을 광범위하게 사용합니다.

: 으아악 이 구조는 종종 다른 구조에 포함됩니다. 이러한 방식으로 관련 구조 유형을 사용하여 연결된 목록을 만들 수 있습니다.

또한 커널은 연결된 목록을 탐색하고 조작하는 데 사용할 수 있는 수많은 함수와 매크로도 제공합니다. list_for_each_entry()는 그 중 하나이며 제어 구조로 위장한 매크로입니다. 문제는 이 매크로에 있습니다. 커널에 다음 구조가 포함되어 있다고 가정합니다.

으아악

list의 요소는 foo 구조의 이중 연결 목록을 만드는 데 사용할 수 있습니다. 이러한 연결 목록의 선두로 선언된 foo_list라는 구조가 있다고 가정해 보겠습니다. 이 연결 목록은 다음 코드를 사용하여 탐색할 수 있습니다. 으아악

list 인수는 foo 구조 내의 list_head 구조 이름을 매크로에 알려줍니다. 이 루프는 목록의 각 요소에 대해 한 번 실행되며 반복자는 해당 요소를 가리킵니다. 이로 인해 USB 하위 시스템에 버그가 발생했습니다. 매크로에 전달된 반복자는 매크로를 종료한 후에도 계속 사용할 수 있습니다.

이것은 위험한 것이므로 Koschel은 루프 후 반복자 사용을 중지하여 버그를 수정한 수정 사항을 제출했습니다.

리누스를 설득하세요Linux 之父终于被劝动:用了 30 年的 Linux 内核 C 语言将升级至 C11

그러나 Linus Torvalds 자신은 이 패치를 별로 좋아하지 않으며 투기 실행 취약점과의 관계를 보지 않습니다. Koschel이 이에 대해 자세히 설명한 후 Linus는 이것이 단지 일반적인 버그일 뿐임을 인정했습니다.

그러나 상황은 그리 간단하지 않았고 Linus는 곧 실제 근본 원인을 깨달았습니다. 링크된 목록 순회 매크로에 전달된 반복자는 루프 자체 외부의 범위에서 선언되어야 합니다. 이 예측할 수 없는 버그는 C89에 "루프에 변수 선언"이 없기 때문에 발생합니다.

list_for_each_entry()와 같은 매크로는 루프 자체에서 반복자 변수를 선언할 수 없기 때문에 본질적으로 항상 루프 외부의 마지막 HEAD 항목을 누출합니다.

자신을 선언할 수 있는 반복자 목록 순회 매크로를 작성할 수 있다면 반복자는 루프 외부에 표시되지 않으며 그러한 문제도 발생하지 않습니다. 그러나 커널은 C89 표준을 따르기 때문에 루프 내에서 변수를 선언할 수 없습니다.

Linus는 업그레이드하기로 결정했습니다. 아마도 C99 표준으로 전환해야 할 때일 것입니다. 20년이 넘었지만 적어도 C89보다 최신 버전이며 루프 내에서 변수를 선언할 수 있습니다.

C89는 너무 오래됐는데 왜 그렇게 오랜 세월이 지나도 변하지 않았나요? Linus는 일부 고대 gcc 컴파일러 버전에서 이상한 문제가 발생하여 쉽게 업그레이드할 수 없었기 때문이라고 말했습니다.

그러나 이제 Linux 커널은 gcc에 대한 최소 요구 사항을 버전 5.1로 높였으므로 과거의 이상한 버그는 사라져야 합니다.

Linux 之父终于被劝动:用了 30 年的 Linux 内核 C 语言将升级至 C11또 다른 핵심 개발자인 Arnd Bergmann은 우리가 확실히 C11 이상으로 업그레이드할 수 있다고 믿습니다. 그러나 C17 또는 C2x로 업그레이드하면 gcc-5/6/7에 대한 지원이 중단되므로 C11로 업그레이드하는 것이 더 쉽습니다.

결국 Torvalds는 "알겠습니다. 5.18 병합 창 초기에 시도해 보겠습니다."라는 아이디어를 내놓았습니다. C11로 이동하면 예상치 못한 버그가 발생할 수 있지만 모든 것이 순조롭게 진행된다면 다음 Linux는 커널 버전은 공식적으로 C11로 이동됩니다.

위 내용은 리눅스의 아버지는 마침내 설득당했다: 30년 된 리눅스 커널 C 언어가 C11로 업그레이드될 것이다의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Linux 터미널에서 Python 버전을 볼 때 발생하는 권한 문제를 해결하는 방법은 무엇입니까? Linux 터미널에서 Python 버전을 볼 때 발생하는 권한 문제를 해결하는 방법은 무엇입니까? Apr 01, 2025 pm 05:09 PM

Linux 터미널에서 Python 버전을 보려고 할 때 Linux 터미널에서 Python 버전을 볼 때 권한 문제에 대한 솔루션 ... Python을 입력하십시오 ...

Docker 환경에서 PECL을 사용하여 확장자를 설치할 때 오류가 발생하는 이유는 무엇입니까? 그것을 해결하는 방법? Docker 환경에서 PECL을 사용하여 확장자를 설치할 때 오류가 발생하는 이유는 무엇입니까? 그것을 해결하는 방법? Apr 01, 2025 pm 03:06 PM

Docker 환경을 사용할 때 Docker 환경에 Extensions를 설치하기 위해 PECL을 사용하여 오류의 원인 및 솔루션. 종종 일부 두통이 발생합니다 ...

APSCHEDULER 타이밍 작업을 MACOS의 서비스로 구성하는 방법은 무엇입니까? APSCHEDULER 타이밍 작업을 MACOS의 서비스로 구성하는 방법은 무엇입니까? Apr 01, 2025 pm 06:09 PM

Apscheduler 타이밍 작업을 MacOS 플랫폼의 서비스로 구성하십시오. Ngin과 유사한 APSCHEDULER 타이밍 작업을 서비스로 구성하려면 ...

C 언어로 멀티 스레딩을 구현하는 4 가지 방법 C 언어로 멀티 스레딩을 구현하는 4 가지 방법 Apr 03, 2025 pm 03:00 PM

언어의 멀티 스레딩은 프로그램 효율성을 크게 향상시킬 수 있습니다. C 언어에서 멀티 스레딩을 구현하는 4 가지 주요 방법이 있습니다. 독립 프로세스 생성 : 여러 독립적으로 실행되는 프로세스 생성, 각 프로세스에는 자체 메모리 공간이 있습니다. 의사-다일리트 레딩 : 동일한 메모리 공간을 공유하고 교대로 실행하는 프로세스에서 여러 실행 스트림을 만듭니다. 멀티 스레드 라이브러리 : PTHREADS와 같은 멀티 스레드 라이브러리를 사용하여 스레드를 만들고 관리하여 풍부한 스레드 작동 기능을 제공합니다. COROUTINE : 작업을 작은 하위 작업으로 나누고 차례로 실행하는 가벼운 다중 스레드 구현.

Linux 시스템에서 Python 통역사를 삭제할 수 있습니까? Linux 시스템에서 Python 통역사를 삭제할 수 있습니까? Apr 02, 2025 am 07:00 AM

Linux 시스템과 함께 제공되는 Python 통역사를 제거하는 문제와 관련하여 많은 Linux 배포판이 설치 될 때 Python 통역사를 사전 설치하고 패키지 관리자를 사용하지 않습니다 ...

Web.xml을 열는 방법 Web.xml을 열는 방법 Apr 03, 2025 am 06:51 AM

Web.xml 파일을 열려면 다음 방법을 사용할 수 있습니다. 텍스트 편집기 (예 : 메모장 또는 문자 메시지)를 사용하여 통합 개발 환경 (예 : Eclipse 또는 NetBeans)을 사용하여 명령을 편집하십시오 (Windows : Notepad Web.xml; Mac/Linux : Open -A Texted web.xml).

가장 잘 사용되는 Linux는 무엇입니까? 가장 잘 사용되는 Linux는 무엇입니까? Apr 03, 2025 am 12:11 AM

Linux는 서버 관리, 임베디드 시스템 및 데스크탑 환경으로 사용되는 것이 가장 좋습니다. 1) 서버 관리에서 Linux는 웹 사이트, 데이터베이스 및 응용 프로그램을 호스팅하는 데 사용되어 안정성과 안정성을 제공합니다. 2) 임베디드 시스템에서 Linux는 유연성과 안정성으로 인해 스마트 홈 및 자동차 전자 시스템에서 널리 사용됩니다. 3) 데스크탑 환경에서 Linux는 풍부한 응용 프로그램과 효율적인 성능을 제공합니다.

See all articles