구형 리눅스 커널의 비선 점적 이유는 무엇입니까?


15

첫 번째 Linux 개발자가 비선 점형 커널을 구현하기로 선택한 이유는 무엇입니까? 동기화를 저장합니까?

내가 아는 한 리눅스는 PC에 단일 프로세서가 있던 90 년대 초반에 개발되었습니다. 비선 점형 커널이 그러한 PC에서 어떤 이점을 제공합니까? 그러나 멀티 코어 프로세서로 이점이 줄어드는 이유는 무엇입니까?

답변:


25

Linux 커널과 관련하여 사람들이 선점에 대해 이야기 할 때, 종종 커널 코드를 실행하는 동안 작업을 전환하여 자체적으로 인터럽트 할 수있는 커널의 기능을 말합니다. 이를 허용하는 것은 상당히 복잡합니다. 아마도 커널을 선점하기까지 오랜 시간이 걸렸을 것입니다.

처음에는 대부분의 커널 코드가 큰 커널 잠금으로 보호되어 있기 때문에 중단 될 수 없었습니다. 이 잠금은 점점 더 많은 커널 코드에서 점진적으로 제거되어 커널에 대한 여러 개의 동시 호출을 병렬로 허용합니다 (SMP 시스템이 점점 일반화됨에 따라 더욱 중요 해짐). 그러나 여전히 커널 자체를 선점 할 수는 없습니다. 그 결과 더 많은 개발 이 필요 했고 PREEMPT_RT결국 메인 라인 커널에 합쳐진 패치 세트를 완성했습니다 (어쨌든 BKL을 선점 할 수있었습니다). 오늘날 커널은 처리량과 지연 시간 특성에 따라 선점 가능하도록 구성 할 수 있습니다. 자세한 내용은 관련 커널 구성 을 참조하십시오.

커널 구성의 설명에서 알 수 있듯이 선점은 동시성이 아니라 처리량과 대기 시간에 영향을줍니다. 단일 CPU 시스템에서 선점은 이벤트가 더 짧은 반응 시간으로 처리 될 수 있기 때문에 여전히 유용합니다. 그러나 커널이 작업을 전환하는 데 시간을 소비하기 때문에 처리량이 줄어 듭니다. 선점을 사용하면 단일 또는 여러 CPU 시스템에서 지정된 CPU가 다른 작업으로보다 빠르게 전환 할 수 있습니다. 다중 CPU 시스템의 제한 요소는 선점이 아니며 잠금이거나 크거나 그렇지 않은 경우입니다. 타임 코드가 잠금을 사용하면 다른 CPU가 동일한 작업을 수행 할 수 없습니다.


11

선점 커널은 Big Kernel Lock 이 없음을 의미합니다 .

리눅스는 첫 순간부터 선점 형 멀티 태스킹 (즉, 사용자 코드가 선점 가능)을 가졌다 (리누스가 funet ftp 서버에 업로드 한 최초의 리눅스 0.0.1은 이미 선점 형 멀티 태스킹이었다). 예를 들어 여러 압축 또는 컴파일 프로세스를 실행 한 경우 첫 번째 순간부터 병렬로 실행되었습니다.

반대로 당시에 널리 사용되는 Win31. Win31에서 작업이 "커널"에서 CPU를 가져 오면 기본적으로 OS (또는 다른 작업)에 제어권을 부여 할시기를 결정해야합니다. 프로세스에이 기능에 대한 특별한 지원이없는 경우 (추가 프로그래밍 작업이 필요함) 프로세스를 실행하는 동안 다른 모든 작업이 일시 중단되었습니다. Win31에 통합 된 대부분의 기본 앱도 그렇게 작동했습니다.

선점 형 멀티 태스킹이란 작업이 원하는대로 CPU를 할당 할 수있는 방법이 없음을 의미합니다. 대신 시간 슬롯 이 만료되면 커널은 CPU를 CPU에서 가져옵니다. 따라서 선제 적 운영 체제에서 잘못 작성되었거나 제대로 작동하지 않는 프로세스는 OS를 정지 시키거나 다른 프로세스가 실행되지 않도록 할 수 없습니다. 리눅스는 항상 사용자 공간 프로세스를 선점했습니다.

Big Kernel Lock은 경우에 따라 커널 공간 내에 여전히 잠금이있어 다른 프로세스가 보호 된 코드를 실행하지 못하게 할 수 있음을 의미합니다. 예를 들어, 여러 파일 시스템을 동시에 마운트 할 수 없었 습니다. 여러 마운트 명령을 제공 한 경우 Big Kernel Lock을 할당하는 데 필요한 마운트 작업으로 인해 계속 실행되었습니다.

커널을 선점 적으로 만들려면이 큰 커널 잠금을 제거해야했습니다. 즉, 마운트와 다른 작업을 동시에 실행할 수 있어야합니다. 큰 일이었습니다.

역사적으로 이것은 SMP (멀티 CPU 지원)의 지원이 증가함에 따라 정말 시급했습니다. 처음에는 실제로 여러 개의 CPU 메인 보드가있었습니다. 나중에 여러 개의 CPU ( "코어")가 단일 칩에 통합되었으므로 오늘날 실제로는 여러 개의 CPU 메인 보드는 거의 사용되지 않습니다 (일반적으로 값 비싼 서버 시스템에 있음). 또한 실제로 단일 코어 시스템 (단일 코어가있는 단일 CPU 만있는 경우)은 거의 없습니다.

따라서 귀하의 질문에 대한 대답은 항상 선점했기 때문에 "비 선점의 이유는 무엇입니까"가 아닙니다. 실제 질문은 선점 커널 실행이 실제로 필요한 이유 입니다. 이에 대한 대답은 많은 CPU, 많은 코어 시스템의 비율이 증가한다는 것입니다.


나는 실제로 이해하지 못했습니다 : (커널 버전 2.4까지는 사용자 프로세스 만 선점 적이었고 커널은 선점하지 않았습니다. 전에 누군가에게 대답했듯이, 그 이유는 선점으로 발생할 수있는 동기화 교착 상태에 대한 작업을 저장하는 것이라고 생각합니다 싱글 코어 프로세스에 대한 구현-어떻게 생각하십니까?
Narden

@Narden 나는 당신이 그것을 읽었는지 모른다. 대략 1.3 또는 2.0까지는 여러 프로세스가 실행 중이더라도 단일 프로세스 만 커널 공간에있을 수 있습니다. 이 제한은 2.0에서 거의 제거되었습니다. 약 2.4까지 Big Kernel Lock이있었습니다 (즉, 여러 파일 시스템을 동시에 마운트하는 것은 작동하지 않았습니다).
peterh-Reinstate Monica

@Narden 협력적인 멀티 태스킹은 아니지만 CPU를 작업 스케줄러에 의도적으로 되돌릴 수있는 프로세스가 필요하지 않았습니다. BKL의 이유는이 작업을 올바르게 수행하는 데는 많은 작업이 필요했을 것입니다. 1) 잠금을 분리해야합니다. 2) 잠금이없는 데이터 구조를 사용해야합니다. livelocks는 일반적으로 더럽고 수정하기 어려운 버그이며, 모두 버그를 찾아 수정해야합니다. 4) 모든 드라이버는 커널 코어 API의 변경 사항으로 이식되어야합니다.
peterh-Reinstate Monica

답변을 검색하는 동안 읽었으며 운영 체제라는 과정에서 정보로 제공됩니다.
Narden

1
Big Kernel Lock은 다른 스레드가 커널에서 실행될 때 다른 스레드가 커널에 들어 가지 못하게했습니다. 커널은 대칭 멀티 프로세싱을 염두에두고 처음부터 설계되지 않았기 때문에 하나의 스레드 만 허용되었습니다. 그러나 선제 커널은 다른 것을 의미합니다. 전통적으로 실행 컨텍스트는 커널이 사용자 공간으로 돌아 왔을 때만 변경되었습니다. 선점 형 커널에서는 커널 코드 실행 중에 스레드를 선점 할 수 있습니다.
Johan Myréen

3

이것은 기술적 인 답변이 아니라 OP가 제기 한 특정 질문 에 대한 역사적 답변입니다 . "오래된 Linux 커널의 비선 점적 이유는 무엇입니까?"

(나는 그의 대답과 의견에서 @peterh가 설명했듯이 OP는 "비 선점"에 의해 하나의 사용자 프로세스 만 (API에서) 커널 내부에 (API에서) 하나의 사용자 프로세스 만있을 수 있다는 사실을 언급한다고 가정합니다. 시간 및 / 또는 큰 커널 잠금.)

Linus Torvalds는 운영 체제의 작동 방식을 배우는 데 관심이 있었고, 배우는 방식은 운영 체제를 작성하는 것이 었습니다. 그의 모델, 기본 및 초기 개발 환경은 교육 목적을위한 기존 OS (예 : 프로덕션 OS가 아님) 인 Minix였으며, 당시에는 오픈 소스에서와 같이 비어 있지 않았습니다. 어느 한 쪽).

그래서 그는 선점없이 커널을 작성했습니다 (다른 답변에서 언급 된 Big Kernel Lock). 새로운 OS를 교육 목적으로 빠르게 시작하고 실행하려면 원하는 방식으로 수행하십시오. 그 방식은 훨씬 간단합니다. 사용자 프로그램과 장치의 동시 멀티 프로그래밍을 지원하는 커널은 충분히 어렵습니다. 커널 자체를 동시에 만드는 것은 매우 어렵습니다.

만약 그가 대중적 / 유용한 / 중요한 리눅스가 어떻게 될지 알았다면 아마도 같은 방식으로했을 것이다. (IMO 만, 그가 실제로 어떻게 생각하는지 모르겠습니다.) 달리기 전에 걸어야하기 때문입니다.

a) 오늘날 리눅스를 만드는 데있어서 다른 많은 작업이 있었으며 (또는 그 당시의 상황까지도) b) 그것을 바꾸는 것이 큰 어려움을 겪었 기 때문에 오랫동안 그렇게 유지했습니다. (다른 답변에서 설명한 바와 같이).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.