Unix에서 프로세스, 커널 스레드, 경량 프로세스 및 사용자 스레드 간의 관계는 무엇입니까? [닫은]


12

Vahalia의 Unix Internal에는 프로세스, 커널 스레드, 경량 프로세스 및 사용자 스레드 간의 관계를 보여주는 그림이 있습니다. 이 책은 SVR4.2에 가장 많은 관심을 기울이고 있으며 4.4BSD, Solaris 2.x, Mach 및 Digital UNIX에 대해서도 자세히 설명합니다. Linux에 대해서는 묻지 않습니다.

  1. 각 프로세스마다 프로세스의 기본 프로세스가 항상 하나 이상 있습니까? 그림 3.4는 그렇습니다.

    그림 3.5 (a)는 왜 중간에 가벼운 프로세스없이 CPU 위에서 직접 프로세스를 보여줍니까?

  2. 각 경량 프로세스에 대해 항상 경량 프로세스의 기본에 정확히 하나의 커널 스레드가 있습니까? 그림 3.4는 그렇습니다.

    왜 그림 3.5 (b)가 프로세스 사이에 커널 스레드없이 가벼운 프로세스를 직접 보여줍니까?

  3. 커널 스레드가 유일한 엔티티를 예약 할 수 있습니까?

  4. 기본 커널 스레드를 예약하여 경량 프로세스를 간접적으로 만 예약합니까?

  5. 기본 경량 프로세스를 예약하여 프로세스를 간접적으로 만 예약합니까?

그림 3-4.  경량 프로세스

그림 3-5.  사용자 스레드 구현


최신 정보:

Linux와 비슷한 질문을했습니다. Linux 의 커널 스레드에 간단한 프로세스가 연결되어 있습니까? 운영 체제 개념 책에 Unix를 사용하는 개념을 암시 적으로 소개하고 Unix와 Linux가 다를 수 있기 때문에 Unix 커널에 대해 읽었을 것입니다.

현재 답장을 보내 주셔서 감사하지만 다른 답글을 수락 할 수 있도록 게시물을 다시 열려고합니다.


왜 그런 질문이 너무 보드로 표시됩니까? 실제로 Linux 개념에 대한 좋은 질문입니다. 문서는 일반적으로하지 상세 충분 explaination는 좋은 해답이 될 것이다있다
炸鱼薯条德里克

재조정 자 : 순수한 질문 수는 아니지만 질문의 본질이 중요합니다. 나는 밀접하게 관련된 몇 가지 혼란스러운 개념 사이의 관계를 묻고 있습니다. 이해하지 못하는 사람들은 질문의 수가 중요하다고 생각할 수 있습니다.
Tim

답변:


12

참고 : Daniel P. Bovet, Marco Cesati 의 Linux 커널 이해 , 3 판

  • 출판사 : O'Reilly
  • 출판 일 : 2005 년 11 월
  • ISBN : 0-596-00565-2
  • 페이지 : 942

Daniel P. Bovet과 Marco Cesati는 다음과 같이 소개했습니다.

기술적으로 말하자면 Linux는 파일 시스템 유틸리티, 윈도우 시스템 및 그래픽 데스크탑, 시스템 관리자 명령, 텍스트 편집기, 컴파일러 등과 같은 모든 응용 프로그램을 포함하지 않기 때문에 전체 Unix 운영 체제는 아니지만 진정한 Unix 커널입니다. 의 위에. 이 책에서 읽고 Linux 커널에서 보는 내용은 다른 Unix 변형도 이해하는 데 도움이 될 수 있습니다.

다음 단락에서는 "리눅스 커널 이해하기"에 제시된 사실에 대한 나의 이해를 바탕으로 당신의 관점을 다루려고 노력할 것입니다.

프로세스는 무엇을 의미합니까? :

프로세스는 인간과 같으며, 생성되고, 다소 중요한 수명을 가지며, 선택적으로 하나 이상의 자식 프로세스를 생성하고 결국 죽습니다. 프로세스에는 코드 ( "텍스트"), 데이터 (VM), 스택, 파일 I / O 및 신호 테이블의 5 가지 기본 부분이 있습니다.

커널에서 프로세스의 목적은 시스템 자원 (CPU 시간, 메모리 등)이 할당되는 엔티티로 작동하는 것입니다. 프로세스가 생성되면 부모 프로세스와 거의 동일합니다. 부모 주소 공간의 (논리적) 사본을 수신하고 프로세스 작성 시스템 호출 다음에 나오는 다음 명령에서 시작하여 부모와 동일한 코드를 실행합니다. 부모와 자식은 프로그램 코드 (텍스트)가 포함 된 페이지를 공유 할 수 있지만 별도의 데이터 복사본 (스택 및 힙)을 가지므로 자식이 메모리 위치로 변경 한 내용은 부모에게 보이지 않으며 그 반대도 마찬가지입니다. .

프로세스는 어떻게 작동합니까?

실행 프로그램에는 컴퓨터에 수행 할 작업을 알려주는 이진 코드 이상의 것이 필요합니다. 프로그램을 실행하려면 메모리와 다양한 운영 체제 리소스가 필요합니다. "프로세스"는 작동에 필요한 모든 리소스와 함께 메모리에로드 된 프로그램을 말합니다. 스레드는 프로세스 내에서 실행 단위입니다. 프로세스는 하나의 스레드에서 많은 스레드까지 어디든 가질 수 있습니다. 프로세스가 시작되면 메모리와 리소스가 할당됩니다. 프로세스의 각 스레드는 해당 메모리와 리소스를 공유합니다. 단일 스레드 프로세스에서 프로세스에는 하나의 스레드가 포함됩니다. 프로세스와 스레드는 동일하며 한 가지만 발생합니다. 다중 스레드 프로세스에서 프로세스는 둘 이상의 스레드를 포함하며 프로세스는 동시에 여러 가지 작업을 수행합니다.

다중 처리 시스템의 역학에는 다음과 같은 경량 및 중량 공정이 포함됩니다.

헤비급 프로세스에서는 여러 프로세스가 동시에 실행됩니다. 각각의 헤비급 프로세스에는 자체 메모리 주소 공간이 있습니다. 프로세스마다 다른 메모리 주소가 있으므로 프로세스 간 통신이 느립니다. 프로세스 간 컨텍스트 전환이 더 비쌉니다. 프로세스는 다른 프로세스와 메모리를 공유하지 않습니다. 이러한 프로세스 간의 통신에는 소켓 또는 파이프와 같은 추가 통신 메커니즘이 필요합니다.

가벼운 프로세스에서 스레드라고도합니다. 스레드는 워크로드를 공유하고 나누는 데 사용됩니다. 스레드는 자신이 속한 프로세스의 메모리를 사용합니다. 동일한 프로세스의 스레드가 자신이 속한 프로세스와 메모리를 공유하므로 스레드 간 통신이 프로세스 간 통신보다 빠를 수 있습니다. 결과적으로 스레드 간의 통신은 매우 간단하고 효율적입니다. 동일한 프로세스의 스레드 간 컨텍스트 전환은 비용이 적게 듭니다. 스레드는 동일한 프로세스의 다른 스레드와 메모리를 공유

사용자 레벨 스레드와 커널 레벨 스레드의 두 가지 스레드 유형이 있습니다. 사용자 수준 스레드는 커널을 피하고 자체적으로 작업을 관리합니다. 사용자 수준 스레드는 단일 스레드가 시간 조각을 독점하여 작업 내 다른 스레드를 고갈시킬 수 있다는 문제가 있습니다. 사용자 수준 스레드는 일반적으로 사용자 공간에서 커널 위에서 지원되며 커널 지원없이 관리됩니다. 커널은 사용자 수준 스레드에 대해 전혀 모르고 마치 단일 스레드 프로세스 인 것처럼 관리합니다. 따라서 사용자 수준 스레드는 매우 빠르며 커널 스레드보다 100 배 빠르게 작동합니다.

커널 수준 스레드는 종종 여러 작업을 사용하여 커널에서 구현됩니다. 이 경우 커널은 각 프로세스의 타임 슬라이스 내에 각 스레드를 예약합니다. 여기에서 클럭 틱이 스위칭 시간을 결정하기 때문에 작업이 작업 내의 다른 스레드에서 시간 조각을 호그 할 가능성이 적습니다. 커널 수준 스레드는 운영 체제에서 직접 지원하고 관리합니다. 사용자 수준 스레드와 커널 수준 스레드 간의 관계는 완전히 독립적 인 것은 아니며 실제로이 두 수준간에 상호 작용이 있습니다. 일반적으로 사용자 수준 스레드는 다 대일, 일대일, 다 대다 및 2 단계 모델의 4 가지 모델 중 하나를 사용하여 구현할 수 있습니다. 이 모든 모델은 사용자 수준 스레드를 커널 수준 스레드에 매핑하고 두 수준간에 서로 다른 수준의 상호 작용을 유발합니다.

여기에 이미지 설명을 입력하십시오

스레드와 프로세스

  1. 프로그램은 프로그래밍 코드의 텍스트 파일로 시작합니다.
  2. 프로그램은 바이너리 형태로 컴파일되거나 해석됩니다.
  3. 프로그램이 메모리에로드되고
  4. 프로그램은 하나 이상의 실행중인 프로세스가됩니다.
  5. 프로세스는 일반적으로 서로 독립적입니다.
  6. 스레드는 프로세스의 하위 집합으로 존재합니다.
  7. 스레드는 프로세스보다 더 쉽게 서로 통신 할 수 있습니다.
  8. 그러나 스레드는 동일한 프로세스에서 다른 스레드로 인한 문제에 더 취약합니다.

참고 문헌 :

Linux 커널, 3 판 이해

추가 1 2 3 4 5

...............................................

이제이 모든 용어를 단순화 해 보겠습니다 ( 이 단락은 저의 관점에서 왔습니다 ). 커널은 소프트웨어와 하드웨어 사이의 인터페이스입니다. 다시 말해, 커널은 두뇌처럼 행동합니다. 그것은 유전 물질 (즉, 코드와 그 파생 소프트웨어)과 신체 시스템 (즉, 하드웨어 또는 근육) 사이의 관계를 조작합니다.

이 뇌 (즉, 커널)는 그에 따라 작동하는 프로세스에 신호를 보냅니다. 이러한 과정 중 일부는 근육 (예 : 실)과 유사하며 각 근육에는 고유 한 기능과 작업이 있지만 모두 함께 작동하여 작업을 완료합니다. 이 실들 (즉, 근육들) 사이의 의사 소통은 매우 효율적이고 간단하므로 매끄럽고 빠르고 효과적으로 업무를 수행합니다. 일부 실 (예 : 근육)은 사용자의 통제하에 있습니다 (예 : 손과 다리의 근육). 다른 사람들은 우리가 통제하지 않는 우리의 뱃속, 눈, 심장의 근육과 같은 뇌 통제하에 있습니다.

사용자 공간 스레드는 커널을 피하고 작업 자체를 관리합니다. 종종 이것을 "협업 멀티 태스킹"이라고하며 실제로 상지 및하지와 같으며, 우리 자신의 통제하에 있으며 작업 (예 : 운동 또는 ...)을 달성하기 위해 모두 함께 작동하며 직접 주문이 필요하지 않습니다. 뇌. 반면 커널 공간 스레드는 커널과 해당 스케줄러에 의해 완전히 제어됩니다.

...............................................

귀하의 질문에 대한 답변으로 :

  1. 프로세스는 항상 하나 이상의 경량 프로세스를 기반으로 구현됩니까? 그림 3.4는 그렇습니다. 그림 3.5 (a)는 왜 CPU 위에서 직접 프로세스를 보여줍니까?

    예, 스레드라고하는 가벼운 프로세스와 무거운 프로세스가 있습니다.

    헤비급 프로세스 (신호 스레드 프로세스라고 부를 수 있음)는 프로세서 자체에서 실행을 주문하기 위해 더 많은 작업을 수행해야하므로 그림 3.5 (a)는 CPU 위에 직접 프로세스를 표시합니다.

  2. 경량 프로세스는 항상 커널 스레드를 기반으로 구현됩니까? 그림 3.4는 그렇습니다. 왜 그림 3.5 (b)가 공정 위에 직접 경량 공정을 보여줍니까?

    경량 프로세스는 위에서 언급 한대로 사용자 레벨 프로세스와 커널 레벨 프로세스의 두 가지 범주로 나뉩니다. 사용자 수준 프로세스는 자체 라이브러리를 사용하여 작업을 처리합니다. 커널 자체는 커널 수준 프로세스를 예약합니다. 사용자 수준 스레드는 다 대일, 일대일, 다 대다 및 2 단계의 4 가지 모델 중 하나를 사용하여 구현할 수 있습니다. 이러한 모델은 모두 사용자 수준 스레드를 커널 수준 스레드에 매핑합니다.

  3. 커널 스레드가 유일한 엔티티를 예약 할 수 있습니까?

    커널 수준 스레드는 커널 자체에 의해 생성됩니다. 커널 수준 스레드에는 제한된 주소 공간이 없다는 점에서 사용자 수준 스레드와 다릅니다. 그것들은 오직 커널 공간에서만 살며 절대 사용자 영역으로 전환하지 않습니다. 그러나 일반적인 프로세스와 마찬가지로 완전히 예약 가능하고 선점 가능한 엔티티입니다 (참고 : 중요한 커널 작업에 대해 거의 모든 인터럽트를 비활성화 할 수 있습니다). 커널 자체 스레드의 목적은 주로 시스템에서 유지 관리 업무를 수행하는 것입니다. 커널 만이 커널 스레드를 시작하거나 중지 할 수 있습니다. 다른 한편으로, 사용자 수준 프로세스는 자체 라이브러리를 기반으로 자체 일정을 계획 할 수 있으며 동시에 2 단계 및 다 대다 모델 (위에서 언급 한)을 기반으로 커널에서 예약 할 수 있습니다.

  4. 기본 커널 스레드를 예약하여 경량 프로세스를 간접적으로 만 예약합니까?

    커널 스레드는 커널 스케줄러 자체에 의해 제어됩니다. 사용자 수준에서 스레드를 지원한다는 것은 응용 프로그램과 연결된 사용자 수준 라이브러리가 있으며 CPU가 아닌이 라이브러리는 런타임에 스레드를 지원하는 모든 관리 기능을 제공한다는 것을 의미합니다. 스레드 추상화를 구현하는 데 필요한 데이터 구조를 지원하고 이러한 스레드에 대한 자원 관리 결정을 내리는 데 필요한 모든 스케줄링 동기화 및 기타 메커니즘을 제공합니다. 이제 일부 사용자 수준 스레드 프로세스를 기본 커널 수준 스레드에 매핑 할 수 있으며 여기에는 일대일, 일대 다 및 다 대다 매핑이 ​​포함됩니다.

  5. 기본 경량 프로세스를 예약하여 프로세스를 간접적으로 만 예약합니까?

    무거운 프로세스인지 가벼운 프로세스인지에 따라 다릅니다. 커널 자체에 의해 예약 된 프로세스는 무겁습니다. 가벼운 프로세스는 커널 수준과 사용자 수준에서 관리 할 수 ​​있습니다.


감사. (1) unix.stackexchange.com/questions/472354/… (2) 나는 특별히 리눅스에 매우 유용한 회신에 감사하지만 LInux 대신 Unix에 대해 특별히 물었다.
Tim

1
"커널 자체 스레드의 목적은 주로 시스템에서 유지 관리 업무를 수행하는 것입니다"
-Goro

@iruva "유지 관리 의무"는 정확한 용어가 아니라고 생각합니다. 예를 들어, 전원 관리는 커널 스레드에 의해 제어되며 유지 관리 의무와 관련이 없습니다. 실제로이 게시물과 함께 제공된 참조에는 커널 스레드에 대한 풍부한 정보가 있습니다. 내가 자세히 설명하고 싶다면 커널 스레드와 그 기능 / 유형 / 어떻게 만들어 졌는지 등에 대한 새로운 질문을 게시하십시오. 이 답변은 충분히 길며 추가 정보를받을 수 없습니다!

@Tim : 어떤 버전의 Unix를 요청하셨습니까? 특히 책에서 논의한 고대 시스템은 무엇입니까? 최신 BSD가 포함되어 있습니까? Solaris 11이 포함되어 있습니까? MacOS X Leopard (인증 된 UNIX)가 포함되어 있습니까?
user1686

@grawity 나는 책에 대해 물었다. 다른 버전을 알고 있다면 그것도 아는 것이 좋습니다.
Tim
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.