해결된 질문
작성
·
571
10
안녕하세요.
강의를 보다가 Context switch에 대해 의문이 들어 질문드립니다.
멀티 프로세스를 설명하는 강의에서 'Context switch가 한 프로세스에서 다른 프로세스로 제어권을 넘겨주는 것'이라고 설명해주셨는데요.
이후 멀티 쓰레드 강의에서 쓰레드 간에 CPU 할당이 전환될 때도 똑같이 Context switch가 일어난다고 말씀해주셨습니다.
- 그러면 Context switch의 개념이 '프로세스 간의 전환'과 '쓰레드 간의 전환' 두 개의 개념이 있는걸로 보면 되는걸까요?
- 만약 그렇다면, 프로세스 간에 Context switch가 일어날 때는 PCB에 기존 프로세스 정보를 저장하고, 이후 프로세스 정보를 불러오는 작업이 일어나는데, 쓰레드 전환에서는 하나의 프로세스 내에서 일어나기 때문에 PCB에 저장, 조회 하는 작업이 생략되는건지 궁금합니다.
- 쓰레드가 프로세스 내에 개별적으로 Stack 영역을 할당 받고 이들 간에 교환된다고 하셨는데, 이들 사이에서는 어떤 방법으로 Context switch가 동작하는지 궁금합니다.(PCB와 동일하게 프로세스 마다 쓰레드 정보를 보관하는 곳이 있나요?)
답변 4
6
수준 높은 질문 해주셔서 감사합니다. 정말 집중해서 듣고 계신게 느껴지네요!!
1. '프로세스간의 전환'으로써의 context switch와 '쓰레드간의 전환'으로써의 context switch 두 가지 종류가 있는 것인가?
- 이를 설명하기 앞서, 프로세스와 쓰레드에 대해서 좀 더 설명드리면 좋을 것 같아요. 사실 두 개념이 굉장히 겹치는게 많고 애매한 부분들이 많아서, 상황에 따라서 프로세스와 쓰레드를 동일시 여길 때도 종종 있어요. 그 이유는 아래 그림을 보시면
보라색 얇은 선을 쓰레드를 표현한 것입니다. 오른쪽은 1개의 process안에 3개의 thread가 있네요. 하지만 때에 따라서 왼쪽의 경우와 같이 하나의 process에 하나의 thread가 있을 수 있어요. 그런 경우 process와 thread를 동일시 하기도 한답니다. 경계가 애매모호한 거에요!
그래서 위의 그림처럼 하나의 process에 하나의 thread만 있는 상황에서는 어떻게 보면 process의 context switch와 thread의 context switch가 동일한 것입니다.
하지만 위와 같은 상황(multi-thread)에서는 "한 process 내에 있는 thread만 변경되는 context switch"와 "다른 process에 있는 thread로 변경되는 context switch"가 약간은 다르게 작동합니다.
결과만 말씀드리자면 "한 process 내에 있는 thread만 변경되는 context switch"의 경우에는 운영체제 입장에서 좀더 간편하게 실행할 수 있게 됩니다. 이는 PCB(process control block)과 TCB(thread control block)의 구조도 같이 설명드려야 하기 때문에 다음 질문에 대한 답에서 더 설명드릴게요.
결론: 보통은 두 종류의 context switch를 나누어 생각하지 않고 통틀어서 하나의 context switch를 지칭합니다. 하지만 multi-thread상황에서 '프로세스간의 전환(다른 두 프로세스의 쓰레드로의 전환)'과 '쓰레드간의 전환(한 프로세스 내의 다른 쓰레드로의 전환)'은 운영체제의 동작에도 엄연히 차이가 있기 때문에 엄밀히 말하자면 조금 다르다고 할 수 있습니다.
2. 쓰레드 전환에서는 하나의 프로세스 내에서 일어나기 때문에 PCB에 저장, 조회 하는 작업이 생략되는건지 궁금합니다.
PCB(process control block)내부에 TCB(thread control block)에 대한 정보가 저장이 됩니다. 보통 single thread라면 TCB가 하나만 있겠죠. multi thread라면 하나의 PCB에 연결된 TCB가 여러 개 연결이 되어있습니다.
그러면 의문이 좀 풀리시죠!! 하나의 process내에서 thread 전환이 일어나게 되면 TCB만 변경해주면 되기 때문에 말씀해주신 것처럼 PCB에 저장, 조회 하는 작업이 생략되어 속도가 더 빠릅니다.
3. 2번 질문에 대한 답으로 해결이 됐다고 생각합니다. 혹시 아니라면 다시한번 질문 남겨주세요~
제가 multi-process와 multi-thread에 대한 강의를 만들 때, 포함하지 못한 내용들이 정말 많아요. 그 이유는 CS 면접 강의이기 때문이였어요. 모든 내용을 넣다보면 중요한 걸 놓칠 수 있다고 생각해서 내용을 줄이기 위해 정말 많이 노력했습니다. TCB에 대한 내용이 그 중에 하나였어요.
그래도 이렇게 강의를 열심히 보시고 질문 해주시니 이런 깊은 내용을 설명할 수 있는 기회가 생기게 되어서 좋네요 :)
해결되지 않은 궁금한 것들은 더 남겨주세요 ~! 감사합니다.
4
2
꼼꼼히 답변해주셔서 의문점이 모두 풀렸습니다!
번거로우셨을텐데 중간중간에 사진까지 첨부해주셔서 명확하게 이해할 수 있었습니다.
강사님의 좋은 강의 덕분에 평소 비전공자로서 이해하기 힘들었던 CS지식의 퍼즐이 하나씩 맞춰지고 있습니다 ㅎㅎ.
면접 요약 강의이지만 전체적인 CS 내용을 정말 많이 알아가고 있습니다.
꼼꼼하고 친절한 답변 감사합니다.
1