operating system concepts 9판(공룡책) 유저 스레드, 커널 스레드 질문 있습니다.

유저 스레드가 이해가 잘 안돼서 질문 드립니다.

  1. 책의 4.3.1 Many-to-One Model 내용입니다.

'Thread management is done by the thread library in user space, so it is efficient'

'because only one thread can access the kernel at a time, multiple threads are unable to run in parallel on multicore systems'

이렇게 나와있습니다. 2개 이상의 코어에서 실행될 수 없으면 성능 향상은 없는 것 아닌가요?? 첫 번째 문장의 'efficient'는 어떤 의미로 쓰였나요??

2.'The one-to-one model (Figure 4.6) maps each user thread to a kernel thread'

'The many-to-one model (Figure 4.5) maps many user-level threads to one kernel thread'

이 두 문장에서 쓰인 map의 의미가 뭔가요? 유저 스레드의 내용을 커널 스레드로 복사한다 이런 의미인가요??

1답변

  • 좋아요

    2

    싫어요
    채택취소하기

    첫번째 질문에서는요, 이것은 concurrency와 parallelism의 차이라고 보시면 될듯 합니다.

    concurrency는 멀티코어가 나오기 전부터 있었던 개념입니다. 이건 한 마디로 여러가지 작업을 동시에 처리하는 건데요, 코어 하나를 시간으로 쪼개서 여러 작업을 번갈아 가며 실행하는 거죠. 당연한 이야기이지만 작업의 속도는 변함이 없지만 빨라 보이는 겁니다.

    반면, parallelism은 멀티코어와 밀접한 관련이 있습니다. 이건 여러 작업들을 여러 개의 코어에 분배하는 거죠. 따라서 동시에 실행되는 것처럼 보이는 concurrency와 달리 진짜로 동시에 작업을 처리합니다.

    many-to-one 모델을 사용하면 concurrency는 달성할 수 있지만 parallelism은 불가능합니다. 아시다시피 한번에 한가지 작업만 가능하니까요.

    하지만 one-to-one 모델을 사용하면 concurrency는 물론이고 parallelism도 가능하게 됩니다. 멀티코어를 쓸 경우 실제로 직업들이 동시에 실행되니까요.

    두번째 질문에서 map이라는 건 유저 모드의 thread가 kernel thread에게 실행해 달라고 요청하는 겁니다. 이렇게 하는 이유는 kernel thread는 꽤 무거워서 유저 thread만큼 많이 만들 수 없어서입니다. kernel thread는 귄한 설정, 우선순위처럼 여러 속성을 갖고 있고, 그것 때문에 동작이 복잡해지거든요. 이렇게 하면 새로 kernel thread를 만드는 대신 놀고 있는 kernel thread를 쓸 수 있기 때문입니다.

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

작성한 답변에 다른 개발자들이 댓글을 작성하거나 댓글에 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.