작성자 없음
작성자 정보가 삭제된 글입니다.
해결된 질문
작성
·
364
1
안녕하세요.
강의 학습 + 커뮤니티 질문 읽어보다가 궁금한 내용이 있어 올리게 되었습니다.
보조기억장치 (ex. HDD) 에 저장된 프로그램이 메모리에 적재되어 커널 영역에 PCB가 생성되면서 프로세스가 되고 커널 스레드가 1개 이상 생성되는 걸로 알게 되었는데요.
Java의 JVM이나 Nginx 등 Linux 에서 "ps -ef" 커맨드로 찍어보니 커널 스레드가 여러 개 생성되어 있는 경우에 궁금한 게 하나 있습니다.
해당 강의 질문 중에 멀티 스레드 모델에 관한 감자님의 답변을 읽어보니 User-Level Thread, Kernel-Level Thread, Multi-Level Thread (Combined) 있다고 답변하셨는데
User-Level Thread는 커널 스레드 1개와 다수의 유저 스레드가 연결되어 사용되어 한 개의 스레드가 입출력 I/O로 Block 되면 다른 유저 스레드도 Block이 되어 프로세스 상태가 대기 상태로 바뀌고 해당 프로세스 PCB가 대기 큐로 이동하는 걸로 이해했습니다.
User-Level Thread를 제외한 Kernel-Level, Multi-Level Thread에서는 커널 스레드 1개가 입출력 I/O로 Block 되어도 다른 커널 스레드로 사용자 스레드가 연결되어 모든 스레드가 Block 되지 않는다. --> 여기에서 그럼 입출력 I/O로 특정 커널 스레드가 Block 되면 입출력 대기 큐에 해당 프로세스 PCB가 있고 Block 되지 않은 커널 스레드도 있으니 실행을 마치면 준비 큐에도 해당 프로세스가 PCB가 중복으로 있다고 이해해야 할까요?
질문을 조금 어렵게 해서 죄송합니다...
답변 2
1
0
안녕하세요 akgkfk3님!
스레드에 관해서 궁금증이 생기셨나보군요 ㅎㅎ
이 글을 읽어보셨다고 생각하고 설명드리겠습니다!
링크에서 말한 JVM의 스레드 모델은 One to One, Many to One, Many to Many이 있습니다.
여기서 One to One 모델은 유저 스레드와 커널 스레드가 1:1 매핑되므로 따로 설명이 필요 없을 것 같고
Many to One은 다수의 유저 스레드가 하나의 커널 스레드에 매핑되므로 하나의 유저 스레드가 Block 되면 나머지 모든 스레드가 Block 된다는 문제가 있습니다.
저는 akgkfk3님 질문의 마지막 문단에서 Many to Many를 말씀하신걸로 이해했습니다.
Many to Many 모델은 여러 사용자 스레드가 여러 커널 스레드와 매핑됩니다.
여기서 여기에서 그럼 입출력 I/O로 특정 커널 스레드가 Block 되면 입출력 대기 큐에 해당 프로세스 PCB가 있고 Block 되지 않은 커널 스레드도 있으니 실행을 마치면 준비 큐에도 해당 프로세스가 PCB가 중복으로 있다고 이해해야 할까요?
라는 질문이 나올 수 있는데
오라클 문서에 따르면 Many to Many 모델에서 커널은 활성화된 스레드만 관리한다고 합니다.
커널 스레드는 운영체제가 관리하므로 PCB가 대기 큐와 준비 큐에 동시에 존재하는 일은 없습니다.
다만 JVM 내부에서 적절하게 사용자 스레드와 커널 스레드를 매핑했으므로 하나의 유저 스레드로 인해 어떤 커널 스레드가 Block이 됐을 때 또 다른 유저 스레드는 Block되지 않은 다른 커널 스레드를 이용하는 방식으로 성능을 향상시킨 것 같습니다!
궁금증이 해결되셨나요? 😊
찾아보신 정보가 맞습니다!
정확해서 더 드릴 말씀이 없네요 ㅎㅎ
멋지십니다. 👍