Linux 프로세스 "스케줄링"

Linux 프로세스 "스케줄링"

나는 Linux 스케줄러 스케줄링 프로세스에 대해 여러 번 읽었습니다. 저는 다중 스레드 프로그래밍 과정을 가르치고 있는데 용어를 알고 싶습니다. 나는 (아래에 적힌) 한 가지를 말하고 싶습니다. 누군가가 내가 최악의 오류를 해결하는 데 도움을 줄 수 있기를 바랍니다.

이는 스케줄러가 예약한 프로세스가 아닙니다.철사 프로세스와 관련이 있습니다. 프로세스는 단지 메모리 매핑된 세그먼트의 묶음이므로 정적입니다. 우리 pthread_create()또는 (대부분은 정확하지는 않지만) 프로세스에 여러 스레드가 있고 예약된 스레드 일 때 이를 명확하게 볼 수 있습니다 clone(). 그렇지 않으면 다른 것보다 프로세스 스레드(PID =TID)를 예약하면 됩니다. 모호성은 모든 프로세스에 최소한 하나의 실행 스레드가 있다는 사실로 인해 발생합니다.

이것이 올바른(간단하긴 하지만) 그림인가요?

답변1

다음과 같이 시도해 보세요.


모든 프로세스는 하나의 스레드로 시작하며 pthread_create. (이 방법으로 생성된 모든 프로세스의 스레드는 동일한 주소 공간을 공유합니다.) 커널의 스케줄러는 프로세스의 "기본"/초기 스레드이든 다른 스레드이든 상관없이 이러한 스레드에서 작동합니다. 본질적으로 스케줄러와 동일합니다. 차이가 없습니다. 의견.

Linux에는 원래 스레드가 전혀 없고 프로세스만 있었습니다. 따라서 역사적인 이유로 "CPU 작업"을 예약하는 운영 체제 부분을 종종 프로세스 스케줄러라고 합니다. (이것은 Linux에만 국한된 것이 아니며 대부분의 (모든?) Unix 유형 시스템에 해당됩니다. 스레드 스케줄러는 전혀 일반적인 용어가 아닙니다.)


전체 네임스페이스 비즈니스를 이미 설명하지 않은 이상 이 시점에서는 언급조차 하지 않겠 clone습니다 .vfork

답변2

Linux 커널에서는 Linux가 모든 스레드를 표준 프로세스로 구현하기 때문에 스레드 개념이 없습니다.

Linux 커널은 스레드를 나타내는 특별한 스케줄링 의미나 데이터 구조를 제공하지 않습니다.

반면에 스레드는 특정 리소스를 다른 프로세스와 공유하는 프로세스일 뿐입니다. 각 스레드는 고유한 task_struct를 가지며 일반 프로세스처럼 커널에 나타납니다. 스레드는 주소 공간과 같은 리소스를 다른 프로세스와 공유하는 일이 발생합니다.

Linux의 경우 스레드는 프로세스 간에 리소스를 공유하는 방법일 뿐입니다. 예를 들어, 4개의 스레드로 구성된 프로세스가 있다고 가정합니다. Linux에는 프로세스가 4개뿐이므로 일반 task_struct 구조도 4개가 있습니다. 이 네 가지 프로세스는 특정 리소스를 공유하도록 설정됩니다.

커널 스레드(커널 공간에만 존재)의 경우, 커널 스레드와 일반 프로세스/스레드의 유일한 차이점은 커널 스레드에 주소 공간이 없다는 것입니다. 커널 공간에서만 실행되며 사용자 공간으로 컨텍스트 전환하지 않습니다.

관련 정보