JavaBookStudy / JavaBook

책읽기 스터디
https://javabookstudy.github.io/
Apache License 2.0
19 stars 2 forks source link

Thread Context Switch의 질문에 대한 답변 #46

Closed taxol1203 closed 3 years ago

taxol1203 commented 3 years ago

지난 세미나의 질문 중에서

멀티 프로세싱에서 Cpu 1개당 프로세스가 한개 할당되는지 or 스레드 단위로 할당 되는지 궁금합니다. 에 대하여 질문이 나왔습니다.

우선 질문에 대한 대답은, 멀티 프로세싱은 한 코어마다 한 프로세스가 할당 되어 동작합니다.
따라서, 프로세스 하나당 cpu에 할당되어 작업을 수행하되, 그 작업 내에서 스레드들이 서로 switching 되어 thread context switch가 일어나게 됩니다.

그런데, 위 내용을 찾아보다 보니 리눅스 소스에 의하면 프로세스나 스레드나 다 같은 구조체로 인식하고 동작한다고 합니다.
따라서, os 스케쥴러 따라서 프로세스든 스레드든 정해진 스케쥴링 따라서 컨텍스트 스위칭이 일어납니다.

이것이 가능한 이유는 상위 레이어에서는 추상화를 잘 해놓아 스레드든 프로세스든 구분하지 않고 쓸 수 있게 되어 관계 없이 스위칭이 일어나게 됩니다.

무책임한 답변일 것이라 예상됩니다. 현재 운영체제에 대한 지식이 짧아 정확한 답변을 못드린 것이 죄송하네요 ㅠㅠ 나중에 계속적으로 이에 관련된 내용을 공부하면 추가로 기제하겠습니다

daebalprime commented 3 years ago

좀 더 자세한 내용은 task_struct 구조체를 참고하시면 좋습니다.

https://m.blog.naver.com/PostView.nhn?blogId=eldkrpdla121&logNo=220696668120&proxyReferer=https:%2F%2Fwww.google.com%2F

https://sonseungha.tistory.com/243

kjsu0209 commented 3 years ago

코어에 할당되는 프로세스도 최소한 하나의 스레드를 가지고 있으니 별 차이가 없겠네요! 이해 잘 되었습니다👍

이해를 돕기 위해 한 번 정리해 봤습니다.

=> 스레드의 작업을 task_struct로 캡슐화