스레드와 프로세스의 차이점은 무엇입니까? [폐쇄]

스레드와 프로세스의 차이점은 무엇입니까? [폐쇄]

제가 수강한 운영 체제 과정(이 과정에서 다룬 운영 체제는 Linux였습니다)에서 다음과 같은 말을 들었습니다.

  1. 프로세스에는 어떤 프로세스가 실행될지 결정하는 우선순위 값이 있습니다.

  2. 우선순위 값은 프로세스 스케줄링 알고리즘에 의해 결정됩니다.

  3. 스레드에는 우선순위 값이 없으며 알고리즘에 의해 예약되지 않습니다.

반면에 각 스레드에는 스레드 우선순위, 식별자, 예약 매개변수 및 스택 크기와 같은 속성이 있다는 것을 알게 되었습니다. 또한 멀티스레드 시스템에는 스레드 스케줄링 알고리즘이 존재합니다.

어느 것이 사실인가요?

답변1

글쎄요, 정의에 따라 다릅니다. 서로 다른 시스템은 서로 다른 규칙을 가질 수도 있고, 동일한 것이 서로 다른 이름을 가질 수도 있습니다.

이것POSIX 정의는 프로세스입니다주소 공간(프로세스에 표시되는 메모리)으로 식별되며 대부분의 운영 체제 리소스가 프로세스에 속합니다. (프로세스 ID(당연히), 사용자 ID, 작업 디렉터리, 파일 설명자...)

반면에,스레드를 정의합니다런타임 환경(CPU 레지스터, 부동 소수점 상태)을 포함한 프로세스 내의 "제어 흐름"으로서,그리고예를 들어, 예약 우선순위입니다.

따라서 일반적으로 프로세스<->리소스, 스레드<->스케줄링입니다.


하지만 꼭 그럴 필요는 없습니다. Linux에서는 프로세스와 해당 하위 프로세스가 공유하는 리소스에 다음을 통해 액세스할 수 있습니다.clone(2)시스템 호출, 따라서 적어도 파일 설명자를 공유하지만 주소 공간이 다른 두 개의 프로세스가 있는 것처럼 보입니다. 혹은 그 반대로도.

또한 과거에는 Linux가 실제로 프로세스와 스레드를 정확하게 구분하지 못했고 커널 수준 프로세스만 구분했습니다. (기술적으로 우리가 일반적으로 스레드라고 생각하는 것을 커널에서는 여전히 "프로세스"라고 하며 일반적인 의미의 프로세스를 "프로세스 그룹"이라고 합니다.)


특정 유형의 스레드는 운영 체제 지원 없이 사용자 공간에서만 구현할 수 있습니다. 이 경우 운영 체제 스케줄러는 스레드가 존재하는지조차 모르기 때문에 스레드는 프로세스와 동일한 시스템에 의해 예약되지 않습니다. 그러나 이 경우에도 사용자 공간 구현에는 실행할 스레드를 결정하는 방법이 필요합니다. (사용자 공간 스레딩 구현은 적절한 스레딩을 구현하는 시스템에서는 더 이상 사용되지 않지만 이것이 제가 생각할 수 있는 유일한 경우이며 세 번째 요점에 가깝습니다.)

관련 정보