단일처리기상의 스레드에 관한 질문입니다.
글쓴이: win2212 / 작성시간: 금, 2015/02/06 - 11:56오후
1. 일반적인 OS책들을 보면
스케줄링을 설명할 때(FCFS, 라운드 로빈, ...)
단일 처리기 단일 스레드를 기본으로 놓고 하는것 같은데
맞는지 궁금합니다.
그렇다면 위에 스케줄링 알고리즘을
단일처리기 다중 스레드로 확장해도 되는지 알고싶습니다.
예를 들어
단일 처리기에서 다중 스레드를 FCFS로 스케줄링 가능하다던지...
2. 단일 처리기에서 멀티 스레드를 사용한다면
다중 처리기 처럼 각 스레드를 줄 수 없지만
장점을 찾아본다면
"만약 한 프로세스 내에서 한 스레드가 블락이 되었을 때
단일 스레드처럼 블락되지 않고
다른 스레드가 스케줄링 될 수도 있다."
이것이 장점이 될 수 있을까요...?
Forums:
'처리기'가 CPU를 말씀하시는 것이라고 보고 답글
'처리기'가 CPU를 말씀하시는 것이라고 보고 답글 답니다.
1. 싱글CPU에 단일쓰레드라면 스케쥴링을 할 필요가 없겠죠. 스케쥴링은 다중 쓰레드에 자원을 어떻게 분배하는가에 대한 정책입니다.
2. 그럴수도, 그렇지 않을 수도 있습니다. 유저 레벨 쓰레드의 경우 한 스레드가 블락되면 다른 스레드도 동작하지 못할 수 있습니다.
1번에 대한 추가적인 질문입니다.
질문을 좀 부족하게 했던것 같습니다. 죄송합니다...
1번에서의 상황은
Operating system concepts에서 FCFS같은 알고리즘을 설명할 때
싱글 CPU에서 단일 쓰레드를 가진 여러개의 프로세스가 있을 경우를 기본으로
스케줄링 알고리즘을 설명하는 것 같았는데,
여기서 확장해서 싱글 CPU에서 다중 쓰레드를 가진 여러개의 프로세스에서도
기존 FCFS나 라운드로빈 같은 알고리즘이 적용되는지의 질문이었습니다.
프로세서가 아니라, 프로세스를 처리기라고 번역한듯한
프로세서가 아니라, 프로세스를 처리기라고 번역한듯한 문맥입니다.
"일반적인 os"라는것은 없습니다. *nix와 bsd, linux도 다 스케쥴링이나 커널쓰레드를 처리하는데 차이가 있습니다.
리눅스도 옛날버젼과 최근버젼의 스케쥴링이 다릅니다.
2.6이후의 리눅스커널을 기준으로 답변하겠습니다.
문맥을 보아하니, 아마도 단일 프로세스안에 여러개의 쓰레드가 종속되어있고,
커널 스케쥴링은 프로세스를 기준으로 한다고 생각하시는것 같습니다.
리눅스에서 만큼은, 이것은 잘못된 생각입니다.
단일 프로세스안에 여러개의 다중 쓰레드가 종속되어있다는것은, 유저영역에서의 가상의 컨셉일뿐입니다.
리눅스커널은 프로세스가 아닌, 쓰레드들만 스케쥴링합니다.
예를들어, 프로세스를 만들면 메인 쓰레드가 생성됩니다.
그 메인쓰레드를 스케쥴하는것이죠. 물론, 메인쓰레드는 pid와 tid가 동일한 쓰레드를 가리킵니다.
다시말하지만, 단일 프로세스가 단일혹은 여러개의 쓰레드를 갖고, 커널 스케쥴러는 프로세스들을 스케쥴링한다는것은
잘못된 이해입니다. 리눅스에서는 프로세스를 스케쥴링하지 않습니다.
답변 감사합니다!!
다음에도 좀 더 배워가겠습니다.!!
우와
우와
댓글 달기