리눅스의 아버지는 마침내 설득당했다: 30년 된 리눅스 커널 C 언어가 C11로 업그레이드될 것이다
최근에 사용하던 C언어 리눅스 커널의 1989년 버전이 드디어 대대적인 업그레이드를 했다는 소식이 있습니다. 현대 기술의 속도는 멈출 수 없습니다. 오늘날 Linux 오픈 소스 커뮤니티는 커널의 C 언어 버전을 C11 표준으로 업그레이드하려는 강력한 계획을 발표했습니다. 이번 대대적인 개편은 오는 5월인 리눅스 버전 5.18 이후부터 적용될 것으로 예상된다. 이 중요한 움직임은 Linux 커널에 무한한 잠재적 기회를 제공하고 최신 기술의 요구 사항에 더 잘 적응하는 데 도움이 될 것입니다.
이 결정은 질문을 시작한 후 공식 성명을 발표하는 데 불과 일주일이 걸렸습니다. Linux의 완고한 아버지 인 Linus Torvalds를 설득하는 것은 쉽지 않습니다. 문제의 이유는 약간 우연한 것 같습니다.
이 문제는 지난주 Linux 커뮤니티 토론에서 발생했습니다.
Jakob Koschel이라는 박사과정 학생이 커널 연결 목록 프리미티브와 관련된 추측 실행 취약점을 방지하는 방법을 연구하던 중 이러한 문제를 발견했습니다.
Linux 커널은 struct list_head에 의해 정의된 이중 연결 목록을 광범위하게 사용합니다.: 으아악 이 구조는 종종 다른 구조에 포함됩니다. 이러한 방식으로 관련 구조 유형을 사용하여 연결된 목록을 만들 수 있습니다.
또한 커널은 연결된 목록을 탐색하고 조작하는 데 사용할 수 있는 수많은 함수와 매크로도 제공합니다. list_for_each_entry()는 그 중 하나이며 제어 구조로 위장한 매크로입니다. 문제는 이 매크로에 있습니다. 커널에 다음 구조가 포함되어 있다고 가정합니다.
으아악list의 요소는 foo 구조의 이중 연결 목록을 만드는 데 사용할 수 있습니다. 이러한 연결 목록의 선두로 선언된 foo_list라는 구조가 있다고 가정해 보겠습니다. 이 연결 목록은 다음 코드를 사용하여 탐색할 수 있습니다. 으아악
list 인수는 foo 구조 내의 list_head 구조 이름을 매크로에 알려줍니다. 이 루프는 목록의 각 요소에 대해 한 번 실행되며 반복자는 해당 요소를 가리킵니다. 이로 인해 USB 하위 시스템에 버그가 발생했습니다. 매크로에 전달된 반복자는 매크로를 종료한 후에도 계속 사용할 수 있습니다.이것은 위험한 것이므로 Koschel은 루프 후 반복자 사용을 중지하여 버그를 수정한 수정 사항을 제출했습니다.
리누스를 설득하세요

그러나 Linus Torvalds 자신은 이 패치를 별로 좋아하지 않으며 투기 실행 취약점과의 관계를 보지 않습니다. Koschel이 이에 대해 자세히 설명한 후 Linus는 이것이 단지 일반적인 버그일 뿐임을 인정했습니다.
그러나 상황은 그리 간단하지 않았고 Linus는 곧 실제 근본 원인을 깨달았습니다. 링크된 목록 순회 매크로에 전달된 반복자는 루프 자체 외부의 범위에서 선언되어야 합니다. 이 예측할 수 없는 버그는 C89에 "루프에 변수 선언"이 없기 때문에 발생합니다.list_for_each_entry()와 같은 매크로는 루프 자체에서 반복자 변수를 선언할 수 없기 때문에 본질적으로 항상 루프 외부의 마지막 HEAD 항목을 누출합니다.
자신을 선언할 수 있는 반복자 목록 순회 매크로를 작성할 수 있다면 반복자는 루프 외부에 표시되지 않으며 그러한 문제도 발생하지 않습니다. 그러나 커널은 C89 표준을 따르기 때문에 루프 내에서 변수를 선언할 수 없습니다.
Linus는 업그레이드하기로 결정했습니다. 아마도 C99 표준으로 전환해야 할 때일 것입니다. 20년이 넘었지만 적어도 C89보다 최신 버전이며 루프 내에서 변수를 선언할 수 있습니다.
C89는 너무 오래됐는데 왜 그렇게 오랜 세월이 지나도 변하지 않았나요? Linus는 일부 고대 gcc 컴파일러 버전에서 이상한 문제가 발생하여 쉽게 업그레이드할 수 없었기 때문이라고 말했습니다.
그러나 이제 Linux 커널은 gcc에 대한 최소 요구 사항을 버전 5.1로 높였으므로 과거의 이상한 버그는 사라져야 합니다.

결국 Torvalds는 "알겠습니다. 5.18 병합 창 초기에 시도해 보겠습니다."라는 아이디어를 내놓았습니다. C11로 이동하면 예상치 못한 버그가 발생할 수 있지만 모든 것이 순조롭게 진행된다면 다음 Linux는 커널 버전은 공식적으로 C11로 이동됩니다.
위 내용은 리눅스의 아버지는 마침내 설득당했다: 30년 된 리눅스 커널 C 언어가 C11로 업그레이드될 것이다의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

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

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

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

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

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

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

뜨거운 주제











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

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

Linux 터미널에서 Python 사용 ...

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

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

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

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

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