티스토리 뷰

Study/OS

[OS] Context Switch

생각많은 소심남 2013. 6. 29. 14:54

요즘 공부하는 부분이 Core Migration 부분이다. 뭔가 신기하지 않나? Core Migration이면 Core간에 Data를 이식시켜서 어디서든 자신이 하고 있던 작업을 계속 할 수 있다. 물론 Core에서 Process를 수행하므로 다르게는 Process Migration이라고도 할 수 있겠다. 그런데 사실 Process Migration은 이미 리눅스 내에서 구현되어 있는 부분이다. 요즘에 나오는 컴퓨터들이 거의다 멀티코어 형태로 나오고 있고, 무언가 작업을 효율적으로 수행하기 위해서는 여러개의 코어가 동시에 Process를 수행하는 형태를 지향할 것이다.

 이 상태에서는 코어끼리 Process를 Migration한다는 의미는 우리가 알고 있는 통째로 옮기는 방식이 아니라 간단하게 말해서 일을 분산해서 처리하기 위해 이뤄지는 작업이다. 다른 말로는 Load Balancing을 위해서 필요한 Process의 정보를 전달한다는 의미가 될 것이다. 어차피 Process의 정보를 담고 있는 OS내의 객체는 Task Struct라는 Process Control Block 일테니까 이 걸 전달하면 각 코어에서 해당 Process에 접근할 수 있을 것이다. 그래서 거진 CPU내에서 Migration이 수행되는 주요 이유 중 하나가 바로 Load Balancing을 통해서 코어의 부하를 줄이고 결과적으로 Power Consumption을 줄여나가는 방향으로 나아가는 것이다.

 그런데 생각해볼 이슈가 있다. 지난 포스트중에서 Process를 설명하던 중에 이런 내용을 다룬 적이 있다.


 이 그림에 따르면 여러가지 과정을 통해서 생겨난 Process Control Block들은 일종의 Queue에 들어가고 어떤 알고리즘에 의해서 차례대로 수행되는 과정을 거친다고 했다. 하지만 위에 동그라미 쳐진 부분을 주의깊게 보자면 CPU내에서 Process를 전환할 때는 반드시 이전 Process의 정보를 저장한 후 다음 Process를 불러오는 작업을 거쳐야 한다. 기본적으로 CPU와 Memory간의 전달보다는 CPU와 CPU내에 있는 Register와의 전달이 빠르므로 일차적으로 Memory에서 Register로 PCB를 전달하는 과정을 거치게 된다. 그런데 Register는 일반적인 Memory에 비해서 용량이 매우 작기 때문에 위와 같이 저장하고 불러오는 과정을 수행하는 것이다. 이 과정을 보통 Context Switch 라고 한다. 간단히 위의 예제를 통해서 설명하자면 i/o에 의해서 시작된 Process를 수행하고 있다가 갑자기 interrupt가 걸려서 Process가 시작된 이후에는 Program Control Flow 가 i/o에서 Interrupt handling방향으로 전환이 될 것이다. 

 그럼 이때 바뀌는 Context들이 뭘까? 당연히 해당 Process가 수행될 때 가지고 있던 모든 정보가 될 것이다. Integer, floating pointer, stack, heap data도 가지고 이어야 하겠고, 그 때의 status를 나타내는 cpu 내의 register 값도 가지고 있어야 할 것이다. 물론 CPU에 대한 status만 가지고 있는게 아니라 memory의 status, 예를 들어서 cache memory 에 들어있던  Data,라던가 virtual Memory를 썼으면 해당 ddress를 구하는 데 썼을 lookuptable 같은 정보들도 가지고 있었어야 한다. 그래서 사실 초점을 맞춘 부분이 여기다. 어차피 해당 core가 Process를 수행하는데 있어야 할 Data나 Context Switching할 때 필요한 Data가 같기 때문에 이 때 여차저차 하면 Core Migration할 때도 활용할 수 있지 않을까 하고 말이다. 뭐 아무튼 그렇다.

'Study > OS' 카테고리의 다른 글

[Process] What is a process?  (2) 2014.08.29
[Process] Exceptional Control  (0) 2014.08.28
[Memory] Memory Consideration in OS  (0) 2013.11.26
[OS] POSIX Thread  (0) 2013.06.25
[Process] Inter Process Communication (IPC)  (5) 2013.06.21
[Process] Process Creation  (0) 2013.06.20
[Memory] Memory Addressing  (2) 2013.06.20
댓글