인프런 커뮤니티 질문&답변
컨텍스트 스위칭 관련...
해결된 질문
작성
·
226
2
안녕하세요
컨텍스트 스위칭 관련해서 궁금한 것들이 있습니다
1. 프로그램 카운터 레지스터도 레지스터의 종류 중 1개인데 PCB의 구조에서나, 컨텍스트 스위칭이 일어날 때 변경되는 값들에서 따로 분리되어 언급되는 이유가 있을까요?
2. 프로그램 카운터가 컨텍스트 스위칭으로 변경될 때 바뀐다는 것은 프로그램 카운터에 저장된 다음 실행할 명령어의 주소가 프로세스 실행 중에는 갱신이 안된다는 의미인가요?
3. PCB를 참조해서 이전 프로세스의 상태로 CPU의 레지스터 값을 설정할 때 레지스터 값만 언급하신 것은 PCB 구조 중 CPU에 있는 것이 레지스터 뿐이라서 인가요? 만약 그렇다면 이 경우에 레지스터 값에는 프로그램 카운터 레지스터도 포함이 되는지, 그리고 다른 구조 값들은 어디에서 새로 설정되는지 궁금합니다!
답변 1
1
안녕하세요 온수옴님.
1. 프로그램 카운터 레지스터도 레지스터의 종류 중 1개인데 PCB의 구조에서나, 컨텍스트 스위칭이 일어날 때 변경되는 값들에서 따로 분리되어 언급되는 이유가 있을까요?
컨텍스트 스위칭이 일어날 때 설명을 위해 따로 분리해서 언급했습니다.
다른 레지스터는 CPU가 프로세스를 실행시키면서 계산에 쓰이지만 프로그램 카운터는 조금 특별하기 때문에 따로 설명드렸습니다. 메모리 관련 정보도 마찬가지입니다. 전부 레지스터입니다.
2. 프로그램 카운터가 컨텍스트 스위칭으로 변경될 때 바뀐다는 것은 프로그램 카운터에 저장된 다음 실행할 명령어의 주소가 프로세스 실행 중에는 갱신이 안된다는 의미인가요?
명령어가 하나 실행될 때마다 프로그램 카운터의 값이 1증가 됩니다. 즉 프로세스가 실행중 일때 갱신됩니다.
여기서 컨텍스트 스위칭으로 변경된다는 것은 PCB에 저장할 프로그램 카운터값을 말합니다.
3. PCB를 참조해서 이전 프로세스의 상태로 CPU의 레지스터값을 설정할 때 레지스터값만 언급하신 것은 PCB 구조 중 CPU에 있는 것이 레지스터 뿐이라서인가요? 만약 그렇다면 이 경우에 레지스터값에는 프로그램 카운터 레지스터도 포함이 되는지, 그리고 다른 구조값들은 어디를 통해 새로 설정되는지 궁금합니다
프로그램 카운터도, 메모리 정보를 나타내는 경계레지스터, 스택 포인터등도 전부 레지스터입니다.
다른 구조값들이라고 CPU의 다른 구조값을 말씀하시는건가요?
이 의미였다면 CPU의 다른 값들도 전부 레지스터이기 때문에 레지스터로 저장되는 것입니다!
앗 CPU 스케쥴링 정보와 같은 것들을 말한 것이었는데 이것 역시도 레지스터인가요?
스케줄링 정보는 레지스터에 있는 값들이 아닙니다.
프로세스 실행 중에, PCB의 프로그램 카운터 값은 고정되어있지만 CPU의 프로그램 카운터 값은 증가하기 때문에 변경된다는 의미가 맞을까요?
네 맞습니다!
그리고 프로세스의 상태 중, 준비 상태에서 각각의 프로세스들이 할당받는 CPU와 실행상태에서 할당받고 부여된 시간이 초과되면 뺏기는 CPU는 서로 다른 것들인가요?
할당받은 CPU가 뺏기는 것이니 같은 것을 말하는 것입니다.
CPU는 한 순간에는 하나의 프로세스만 실행할 수 있습니다.
그렇다면 스케쥴링 정보와 같은 것들은 컨텍스트 스위칭이 일어났을 때 어디에서 새로 설정되는 것인가요?
그리고 준비상태는 CPU 스케쥴러에 의해 CPU가 할당된 것이고 대부분의 프로세스가 준비상태에 있는 것으로 알고 있는데 그럼 프로세스들이 CPU를 각각 조금씩 할당받은 상태인 것인가요?
실행상태에 있는 프로세스가 부여된 시간을 초과하게 되어 준비상태 때 할당받은 CPU를 뺏기게 되면 해당 프로세스는 준비상태의 정의(CPU가 할당된 상태)와 맞지 않게 되는 게 아닌지 궁금합니다...
스케쥴링 정보와 같은 것들은 컨텍스트 스위칭이 일어났을 때 어디에서 새로 설정되는 것인가요?
스케줄링 정보는 PCB에 저장됩니다. PCB = 레지스터가 아닙니다.
레지스터에 있는 정보도 PCB에 저장되는 것이고 스케줄링 정보도 PCB에 저장되는 것입니다!
준비상태는 CPU 스케쥴러에 의해 CPU가 할당된 것이고 대부분의 프로세스가 준비상태에 있는 것으로 알고 있는데 그럼 프로세스들이 CPU를 각각 조금씩 할당받은 상태인 것인가요?
프로세스가 CPU를 할당받아서 실행되는 상태를 "실행 상태"라고 부릅니다.
"준비 상태"는 CPU가 할당된 상태가 아닙니다.
CPU는 한 순간에는 하나의 프로세스만 실행시킬 수 있습니다.
만약 운영체제에 100개의 프로세스가 존재한다면 CPU가 할당되어 실행되고있는 프로세스는 단 1개의 프로세스입니다.
그럼 나머지 99개는 준비상태 또는 대기상태에 있게되겠죠?
만약 실행상태에 있는 프로세스 1개가 CPU를 너무 오래사용하면 불공평하기 때문에 일정 시간이 지나면 강제로 빼앗고 99개의 프로세스 중 우선순위가 높은 순서대로 CPU를 할당(실행 상태)받습니다.
이런 작업을 컨텍스트 스위칭이라고 하는데 컨텍스트 스위칭은 사람눈에는 매우 빠르게 보여서 마치 모든 프로세스가 동시에 실행되고있는 것 처럼 보이는 것입니다!
사실 프로세스 상태 강의에서 '준비 상태'에 대한 설명을 들을 때
'준비상태에 있는 프로세스는 이후에 배울 CPU 스케쥴러에 의해 CPU가 할당된다'라고 들어서.... 오해를 했던 것 같습니다 감사합니다!
1. 그러면 프로세스 A가 점유시간을 초과해 여러 값들을 PCB A에 저장할 때 뿐만 아니라
PCB B를 참조해 이전 프로세스 B의 상태대로 CPU의 레지스터값을 설정할 때도 스케쥴링 정보는 그대로 PCB B에 있게 되는 것인가요?
2. 인터넷을 검색하니 컨텍스트 스위칭은 실행->준비, 준비->실행, 실행->대기일 때 발생한다고 하는데 대기->준비로 바뀔 때에는 발생하지 않는 것인가요?
3. 마지막으로, 컨텍스트 스위칭에 의해 PCB에 있는 프로세스의 상태가 변경된다면, 실행 상태->준비 상태로 돌아가는 프로세스의 경우 저장된 프로세스의 상태가 실행->준비로 변경되고 준비->실행 상태로 이동하는 프로세스의 경우에는 준비->실행으로 PCB가 변경되는 것인가요?
텍스트를 보니 오해가 생길 수도 있었겠네요.ㅎㅎ
1. 그러면 프로세스 A가 점유시간을 초과해 여러 값들을 PCB A에 저장할 때 뿐만 아니라 PCB B를 참조해 이전 프로세스 B의 상태대로 CPU의 레지스터값을 설정할 때도 스케쥴링 정보는 그대로 PCB B에 있게 되는 것인가요?
네 PCB B에 계속 저장되어있습니다.
2. 인터넷을 검색하니 컨텍스트 스위칭은 실행->준비, 준비->실행, 실행->대기일 때 발생한다고 하는데 대기->준비로 바뀔 때에는 발생하지 않는 것인가요?
네 발생하지 않습니다!
대기상태에서 준비상태로 바뀔때는 단순히 준비 큐에 들어가게되고 준비 큐에서 실행상태로 바뀔 때 발생합니다.
3. 마지막으로, 컨텍스트 스위칭에 의해 PCB에 있는 프로세스의 상태가 변경된다면, 실행 상태->준비 상태로 돌아가는 프로세스의 경우 저장된 프로세스의 상태가 실행->준비로 변경되고 준비->실행 상태로 이동하는 프로세스의 경우에는 준비->실행으로 PCB가 변경되는 것인가요?
네 맞습니다!
실제로 프로세스의 상태는 PCB에서 상태값을 말하는 것입니다.






앗 CPU 스케쥴링 정보와 같은 것들을 말한 것이었는데 이것 역시도 레지스터인가요?
프로세스 실행 중에, PCB의 프로그램 카운터 값은 고정되어있지만 CPU의 프로그램 카운터 값은 증가하기 때문에 변경된다는 의미가 맞을까요?
그리고 프로세스의 상태 중, 준비 상태에서 각각의 프로세스들이 할당받는 CPU와 실행상태에서 할당받고 부여된 시간이 초과되면 뺏기는 CPU는 서로 다른 것들인가요?