인프런 커뮤니티 질문&답변

11 1님의 프로필 이미지
11 1

작성한 질문수

곰책으로 쉽게 배우는 최소한의 운영체제론

멀티스레딩과 동기화 기본

운영체제 스레드 공부 중 궁금한 점 있습니다.

해결된 질문

작성

·

292

0

안녕하세요. 강의 잘 듣고 있습니다. 몇 가지 궁금한 내용이 있습니다.

 

1)

운영체제 책 170p(강의 9분 40초에 나온 사진)을 보면 스레드 내부에 레지스터라고 써져 있는데

스레드에 레지스터가 있는 게 아니라 Core의 레지스터 정보를 스레드에 저장해 둔다고 보면 되나요?(문맥 교환을 위해)

스레드 그림 내부에 레지스터라고 써져 있어서 스레드에 레지스터가 있다고 말하는 건지 궁금했습니다.

 

2)

PCB와 TCB가 따로 있다고 배웠는데, 만약 1개의 프로세스 내부에 스레드가 여러 개 있다고 할 때, 하나의 스레드는 실행 중인데 다른 스레드는 대기 상태, 또 다른 스레드는 준비 상태, 또 다른 스레드는 보류 상태일 수 있는 건가요?

그럼 이 상황에서 그 스레드들이 속한 PCB의 상태는 어떤 상태를 말하고 있나요?

 

3)

sleep() 함수에 대해 궁금한 점이 있습니다.

프로세스 상태를 말할 때 생성, 준비, 실행, 대기, 종료, 휴식(sleep), 보류(suspend) 이런 상태들을 배웠는데

아래 코드에서의 Sleep()은 휴식 상태를 말하는 게 맞나요? 아니면 대기 상태인가요? 주석에선 대기 상태라고 적혀 있어서 혹시 프로세스 상태에서의 대기를 의미하는 건지 궁금했습니다.

 

1.jpg

답변 3

1

널널한 개발자님의 프로필 이미지
널널한 개발자
지식공유자

작업 관리자에서 프로세스 상태에 '응답 없음'이라는 표시가 나오는 경우는 GUI 이벤트 처리를 담당하는 스레드가 멈춘 경우입니다. 그러나 내부 다른 작업자 스레드는 작동 중일 수 있습니다. GUI가 없는 경우는 이 '응답 없음'과 아무 관련이 없으며 프로세스 수준에서에서는 내부 스레드들 상태와 상관 없이 실행 상태가 됩니다. 다만 메인 스레드가 종료될 경우 프로그램이 종료되는 것이기 때문에 메인 스레드는 무조건 실행 중일 것이라 봐야 합니다. 그러나 메인 스레드가 작업자 스레드의 신호를 대기하면서 Wait 상태로 존재한다면 정상적인 실행 상태라 할 수 있겠습니다. 참고하시기 바랍니다.

11 1님의 프로필 이미지
11 1
질문자

자세한 답변 감사합니다.

1

널널한 개발자님의 프로필 이미지
널널한 개발자
지식공유자

윈도우 환경을 기준으로 답변을 드리자면...실행의 최소 단위는 스레드 입니다. 프로세스는 1개 이상의 스레드를 가지는 집합체로 이해할 수 있습니다. 프로세스 내부 스레드 중 하나라 정상 작동 중이라면 프로세스는 실행 중인 상태가 됩니다.

그런데 이것이 조금 더 깊이 들여다 보면 UI처리 및 사용자 이벤트에 대응하는 Event loop를 가진 main thread가 실행 중이면 프로세스 자체는 실행 중인 것으로 표시 됩니다. 다른 작업자 스레드가 suspended 상태가 되었다 하더라도 실행 중인 상태로 작업 관리자에 표시 됩니다.

참고하시기 바랍니다. :)

11 1님의 프로필 이미지
11 1
질문자

답변 감사합니다

1

널널한 개발자님의 프로필 이미지
널널한 개발자
지식공유자

  1. 레지스터를 갖는 것은 CPU core 입니다. 각 스레드는 실행 될 때 CPU core의 각종 레지스터를 본인 상황에 맞는 값으로 갱신합니다. 그러니까 스레드를 관리하는 자료구조에 CPU 레지스터 값이 백업되어 저장되어 있다고 생각하면 되겠습니다.

  2. 네, 그렇습니다. 만일 프로세스 내부 모든 스레드가 전부 Sleep 상태가 된다면 프로세스도 사실 상 Suspended 상태가 되는 것으로 판단할 수 있습니다.

  3. 휴식 상태가 됐다가 100ms 이후 실행 대기 상태가 됩니다. 이후 다시 실행 상태로 전환 되겠습니다. 실행 대기는 휴식이 끝났음을 의미하는 정도로 이해하시면 되겠습니다. 참고하시기 바랍니다. :)

11 1님의 프로필 이미지
11 1
질문자

답변 감사합니다. 2번 질문은 아직 확신이 안 드는데, 하나의 프로세스 내부에 스레드가 2개 있는 상태에서 스레드1은 실행 상태, 스레드2는 휴식 상태라면

2개의 스레드를 가지고 있는 이 프로세스의 상태는 어떤 상태인 건가요? 2개의 스레드의 상태가 다른데, 프로세스는 어떤 상태를 말하고 있을지 궁금합니다.

11 1님의 프로필 이미지
11 1

작성한 질문수

질문하기