Little Jay

[CS] Exceptional Control Flow : Process - Computer System 3rd Edition by Bryant 본문

Univ/System Programming

[CS] Exceptional Control Flow : Process - Computer System 3rd Edition by Bryant

Jay, Lee 2022. 5. 18. 22:43

Process

 프로세스에 대한 정의는 다양하다. OS를 다루는 부분에서도 설명을 또 할것이지만, 여기서도 정의를 해보겠다. Process는 프로그램이 실행 준비가 되어 메모리에 올라가있는 상태이다. 이를 반대로 말하자면 Program은 아직 Code의 형태로 Disk에 존재하는 것이다. 조금더 상세히 명세를 하자면, Program의 Code와 Data가 Memory에 저장된 상태이다. 이때 OS는 PCB라는 Data Structure을 활용해서 Process를 나타낸다. 

 Process는 각 Program에게 두 가지 Key Abstraction을 제공한다. 이는 Independent Logical Control Flow, Private Address Space인데, Independent Logical Control Flow는 각 프로그램이 CPU를 Exclusively하게 사용하고 있다는 Illusion을 제공해준다. 이는 Context Switching이라는 Kernel Mechanism으로 동작한다. Private Address Space는 마찬가지로 Program이 Memory를 독점적으로 사용하고 있다는 Illusion을 제공한다. 이 역시 Virtual Memory라는 Kernel Mechanism으로 동작한다. 

 우리가 일반적으로 컴퓨터를 사용할 때 Chrome을 켜놓고 공략집을 보면서 컴퓨터 게임을 하거나, 노래를 들으면서 코딩을 한다. 이 행위들을 각각 Process라고 본다면, 상식적으로 Process는 하나만 처리가 되는데 우리는 어떻게 이를 동시에 수행할 수 있을까? Processor와 Memory에게 동시에 Exclusively하게 사용하고 있다는 Illusion을 제공하기 때문이다. 이러한 Illusion을 제공하는 것은 Multiprocessing이 가능하기 때문이다. 수많은 Application을 켜놓았을 때 우리는 각 Application 각각이 CPU와 Memory를 가지고 동작하듯이 사용하고 있지만, 실제로는 Processor가 다수의 Process를 Concurrently하게 수행하고 있는 것이다. 사실상 CPU는 한 번에 하나의 task만 처리할 수 있기 때문에 Process의 실행은 계속해서 Interleaving되면서 동작을 하는 것이다. 그렇다면 이 Interleaving은 어떻게 동작하는 것일까? 앞서서 잠깐 언급한적이 있지만 Context Switch를 활용한다. 

Context Switch

 수업에서 Context Switch를 이정도만 설명하고 있고, 2학년 수업이었기에 이를 추후 OS에서 제대로 다뤄보도록 하자.  

 

 문맥 교환이라고 직역을 하기도 하지만 Context Switch라고 계속 이야기를 하겠다. Interleave되면 Processor는 다른 Process를 수행하러 가야한다. 그러나 뒷정리나 인수인계정도는 해줘야 할 것이다. Uni-Processor 상황, 즉 Processor가 한개라는 상황을 가정하겠다. A라는 Process를 위해서는 Processor가 사용하고 있는 Current Register들을 Memory에 저장을 해줘야한다. 그 다음에 Scheduler에 의해 다음의 B라는 Process를 수행하러 간다고 하자.그러면 Processor는 전에 B에서 수행했던 Register 정보다던지, Address 주소등이 필요할 것이다. 이를 다시 Processor에 로드해주는 이러한 반복적인 작업을 Context Switch라고 한다. Multi-Processor환경에서도 이는 마찬가지이다. 다수의 Processor가 Main Memory를 공유하는데, 계속해서 Context를 바꾸면서 Process를 반복적으로 수행한다. 

 

 앞서서 우리는 Mode Switch에 대해 간단히 배운 적이 있다. 이 Context Switch를 하기 위해서는 Mode Switch의 발생이 수행되어야한다. Context는 Process를 바꾸는 작업이기 떄문에 User Level에서 수행되기에는 Risky하다. 따라서 이를 안전한 Kernel Mode에서 수행이 되야하는 것이다. 그러나 기억해야 할 것은 Mode Switch는 Context Switch가 일어나기 위한 필요조건일 뿐이다. 필요충분조건이 아니기 때문에 Mode Switch가 Context Switch를 보장해주지는 않는다. 강조하고 싶은 부분은 결국 Kernel이 Process와 뗼레야 뗄 수 없는 관계에 있다는 것이다. 즉, Context Switch는 Kernel Code를 활용해 Control Flow를 바꾸는 것이다. 

Concurrency

 앞서서 각각의 Process는 Logical Control Flow를 가지며, 이에 따라 Switching이 발생하기도 하고, 선택당하기를 기다리기도 한다. 이제는 Concurrency는 말그래도 '병행성, 동시성'이라는 의미인데, 시스템을 공부하면서 이 Concurrency는 아주 중요하게 사용이된다. 각설하고, 그렇다면 Concurrency의 반대말은 무었일까? Parralell이라고 생각할 수도 있겠지만, 여기서는 Sequential, 즉 '순차적'이라는 의미기 더 어울릴 것 같다. 이 강의에서 Concurrency는 Process에서 Instruction이 Interleave된 상태인 것을 말한다. 이것이 말이 되는 것이, 만약 Process가 수행중이었고, 다 끝나고 다음 Process가 수행되고, 계속 이런식이면 이는 Process를 Schedule시키는 것만 Random이지 Sequntial하게 Process를 처리하고 있는 것이다. 따라서 아래의 그림을 보면 Process A와 B, A와 C는 Concurrently하게 수행되고 있지만, Process B, C는 Sequential하게 처리되고 있다는 것을 볼 수 있다. 이때, User Level에서는 병행적으로 Process가 처리되고 있다는 Illusion이 제공이 된다. 오히려 Concurrent는 Process입장이고 Parallel하게 처리되고 있다는 생각이 들 수 있다. 그러니 실제로는 아니다. CPU를 하나만 사용하고 있다고 가정을 했을 때 CPU는 그 Control Flow에 의해 Process를 처리하고 있는 것이지 실제로 병렬적으로 수행하고 있는 것은 아니다. 

 

Reference

Randal E. Bryant, & David R. O’Hallaron. (2016). Computer Systems A Programmer’s Perspective Third edition. Carnegie Mellon University: Pearson.

Comments