컴퓨터/운영체제

[OS] Context Switch와 레지스터 셋의 관계

xeskin 2020. 4. 15. 14:32
반응형

운영체제 수업 들으면 context switch가 오버헤드라는 이야기를 한다. 왜냐하면 context switch를 하는동안에는 프로세서가 하는 일을 멈추고 pcb를 바꾸기 때문이다. 이 오버헤드를 줄이려면 하드웨어단에서 개선을 해주어야 하는데, CPU의 레지스터셋을 늘려주어야 줄이는 것이 가능하다고 한다. 

 

예를 들어서, CPU의 레지스터 셋이 두개인 경우에는 프로세스1에 대한 PCB1을 레지스터 셋1에 두고 연산을 한다고 생각해보자. 이때 인터럽트가 들어와서 프로세스1에서 프로세스2로 context switch를 수행하라고 하면, 레지스터 셋1에서 돌아가던 걸 잠깐 멈추고 미리 프로세스2에 대한 PCB2를 레지스터 셋2에 넣고 돌리면 된다. 그리고 프로세스2에 대해서 할 일을 다했으면 바로 프로세스1을 돌리면 되고.

 

CPU의 레지스터 셋이 한개인 경우에는 어떻게 될까? 위와 같은 상황을 똑같이 가정하자. (프로세스1 > 프로세스2 context switch) 그러면 PCB1을 메모리에 복사한 뒤에, 프로세스2에 대한 PCB2를 레지스터 셋에 복사하여 돌려야 한다. 그리고 프로세스2가 할 일을 다 했다면 이를 다시 램에 복사하고, 프로세스1에 대한 PCB를 레지스터셋에 복사하여 돌린다.

 

위에 것과 비교했을 때, '레지스터셋에서 램에 프로세스1을 복사하는 시간'+'램에서 레지스터 셋에 프로세스2를 카피하는 시간' + '레지스터 셋에서 램에 프로세스2를 카피하는 시간' + '램에서 레지스터셋에 프로세스1을 복사하는 시간' 만큼 오버헤드가 생기는 것이다. 그래서 하드웨어단에서 레지스터 셋을 늘려주면 context switch에 대한 오버헤드를 줄일 수 있는 것이다.

 

교수님께서 레지스터 셋이 한개인 경우를 설명하실 때, 위와 같이 설명해주셨는데 한가지 의문이 생겼다. 레지스터 셋에 있는 걸 램에 복사하지 않고 프로세스1에서 프로세스2로 context switch를 할 때, 프로세스2의 것으로 프로세스1을 덮어버리면 안되나? 답은 'NO'다. 왜냐하면, context switch를 할 때 CPU의 레지스터셋에서 램으로 복사해주는 것은 CPU의 레지스터 셋에 있는 값이 연산하고 난 뒤이기 때문에 레지스터 셋에 있는 PCB1에 대한 정보와, 램에 있는 PCB1에 대한 정보가 서로 다르기 때문이다. 그래서 복사하는 과정이 필요하다.

반응형

'컴퓨터 > 운영체제' 카테고리의 다른 글

[OS] Thread (1)  (0) 2020.04.16
[OS] Inter Process Communication (IPC)  (1) 2020.04.15
[OS] Interrupt  (0) 2020.04.03
[OS] Operating System Structures (part2)  (0) 2020.03.25
[OS] Operating System Structures (part1)  (0) 2020.03.23