[운영체제(OS)] 프로세스와 컨텍스트 스위칭(Context Switching)이란?

resilient

·

2021. 12. 15. 21:17

728x90
반응형

이번 시간에는 운영체제, 그리고 개발자의 상식에서 빼놓을 수 없는 프로세스에 대해서 알아보려고 합니다.

사실 일상생활에서도 많이 쓰이는 단어이기도 하죠.

 

0. 그럼 프로세스(Process)란 뭘까요?

 

프로세스는 아주아주 간단하게 설명하자면 '현재 실행 중인 프로그램'입니다.

또한 운영체제에서 일의 단위라고도 할 수 있죠.

 

프로세스의 구성은 아래와 같습니다.
더 자세한 내용은 제가 최근에 프로세스 메모리 구조를 다루면서 작성한 글을 참고하시면 좋을 것 같습니다.

 

[CS & Network/운영체제(OS) & 컴퓨터 구조] - 프로세스 메모리 구조 에서의 스택(Stack) 이란?

 

프로세스 메모리 구조 에서의 스택(Stack) 이란?

2021.12.04 - [자료구조 & 알고리즘/자료구조] - 자료구조에서의 스택(Stack) 이란? 자료구조에서의 스택(Stack) 이란? 최근 친구와 카공을 하고 있었는데 친구가 갑자기 저에게 '야 스택이 뭐야?' 라는

resilient-923.tistory.com

원래 이 정도 악필은 아닌데 말이죠...

 

1. PCB(Process Control Block 프로세스 제어블록)

 

 

위에서 설명했던 프로세스들은 어떤 방식으로 여러 개가 동시에 실행될까요? 사실 여러개가 동시에 실행되는 것은 아닙니다. TIME SHARING을 통해서 굉장히 빠른 속도로 왔다갔다 하면서 프로세스들을 처리해주고 여러개가 동시에 돌아가는 것처럼 보이는 것이죠!

 

그렇다면, 프로세스들이 교체되고, 실행되는 과정에서 다음 프로세스, 이전 프로세스들을 빨리빨리 가져와야 할 텐데요,

어떻게 다른 프로세스들의 작업을 기억하고 가져올까요? 바로 PCB를 이용해서 작업을 처리합니다.

 

PCB의 구조는 아래와 같습니다.

PCB

 

  • ProcessID (PID) 는 프로세스 고유 번호를 의미합니다.
  • Process State 에는 생성, 준비, 실행, 대기, 완료의  상태 정보를 담고 있습니다.
  • Program Counter(Pointer) 는 프로세스가 다음에 실행할 명령어의 주소를 가리킵니다.
  • CPU Register는 CPU옆에 붙어있는 가장 작은 단위의 임시 메모리 저장 공간입니다.
  • CPU Scheduling information는 CPU스케쥴링에서 어떤 우선순위를 가지고 있는지에 대한 정보입니다.  
  • Memory-management information 에는 메모리가 할당된 자원의 정보를 가지고 있습니다.
  • Accounting information 에는 최종 실행 시각, CPU를 점유하고 있는 시간 등의 데이터를 가지고 있습니다.
  • I/O status information 에는 프로세스에 할당된 입출력 장치 목록, 열린 파일 목록 등의 정보를 가지고 있습니다.

 

쭉 나열해 보니까 굉장히 복잡해 보이지만 그냥 PCB는 프로세스 하나하나를 다루는 하나의 큰 블록이구나! 정도로 자연스럽게 이해하면 될 것 같습니다.

 

 

2. 그럼 이번엔 프로세스 상태(Process State)에 대해서 알아보겠습니다.

 

프로그램을 실행 시키면 일단 프로세스가 하나 만들어지는데, 실행 중인 프로그램이 종료되기 까지 프로세스들의 상태가 어떻게 변화하는지 살펴보겠습니다.

 

  • New : 프로세스가 생성되고 시작됩니다.
  • Running : 프로세스가 동작 중인 상태로, 프로세스 명령어를 로딩해서 CPU에 옮기는 상태입니다.
  • Waiting : 프로세스 1이 프로세스 2가 동작되는 동안 기다리고 있는 상태입니다.
  • Ready : 프로세스가 Ready queue에 들어가서, 차례를 기다리고 있는 상태입니다.
  • Terminated : 모든 걸 끝낸 프로세스 상태입니다.

Process state

 

3. Context Switching

 

그렇다면 프로세스가 작동되는 과정을 자세히 한번 살펴보겠습니다.

실행 중인 running 상태의 프로세스 정보( 여기서 말하는 정보는 PID나 어떤 동작을 하는 프로세스 인지 등등입니다.)는 CPU 내부의 레지스터에 저장하고 있습니다. 지금까지의 과정에서는 레지스터라는 저장공간이 있기 때문에 PCB가 굳이 필요 없겠죠? 마저 설명을 해보겠습니다.

 

Context Switching 과정

 

현재 process P0가 실행이 되고 있습니다. 그렇다면 CPU 내부의 레지스터 안에는 P0의 정보가 저장이 된 상태로 실행이 되고 있겠죠? 엇, 그러다가 interrupt 나 system call이 걸렸습니다. 이 때! 운영체제는 현재 running 중인 process P0을 먼저 저장을 합니다.

 

위의 프로세스 상태에서 봤듯이, 현재 실행 중이었던 procress P0이 waiting 상태로 되면 CPU는 process P1을 running으로 변경해줍니다. 이 과정과 동시에, 레지스터 안에 있는 저장 값도 process P1과 관련된 정보로 교체를 해야겠죠?

그럼 procress P0에 있던 정보들을 어딘가에 저장을 해놓고 나가야 할 텐데요.... 


이때 CPU에서 실행되던 P0와 관련된 레지스터 값들이 PCB에 저장되게 됩니다. 저장되는 정보들은 process P0이 어디까지 실행이 되었는지, stack pointer의 위치가 어디인지 등의 정보가 되겠죠?

 

위 사진을 보면 P0가 executing 되다가 P1을 실행시키기 위해서 PCB0에 process P0 정보를 저장합니다. 그리고 레지스터의 PCB1에 저장되어 있던 process P1의 정보를 가져와서 process P1을 실행시키는 것이죠.

 

정리하면 Context Switching 이란 CPU가 이전에 실행 중이던 프로세스 상태 및 정보를 PCB에 저장하고, 다음에 실행할 프로세스의 상태 및 정보를 PCB에서 읽어 레지스터에 옮기는 과정이라고 할 수 있습니다.

 

 

그렇다면, Context Switching은 제일 효율적인 방법일까? 단점은 없나? 를 생각해 볼 수 있는데요,

정답은 Context Switching 도 Overhead가 발생합니다.

그래도! Overhead를 감수하면서 Context Switching을 작동시키는 것이 CPU를 가장 효율적으로 사용하는 방법이다. 

라고 할 수 있겠네요.

 

 

 

 

이번 시간에는 Process가 뭔지, PCB가 뭔지, Context Switching이 뭔지에 대해서 알아봤습니다.

다음 운영체제 정리 시간에는 그렇다면 프로세스끼리는 어떻게 통신하는지? 에 대해서 정리해보겠습니다.

감사합니다.

 

반응형