프로세스와 컨텍스트 스위칭

컨텍스트 스위칭 정의

멀티프로세스 환경에서 CPU가 어떤 프로세스를 실행하고 있는 상태에서, interrupt 요청에 의해 다음 우선쉰위으 프로세스가 실행되야 할 때, 기존 프로세스의 상태 또는 레지스터 값을 저장하고 cpu가 다음 프로세스를 수행하도록 상태 또는 레지트서 값을 교체하는 작업이다. 컨텍스트 스위칭 작업간에 cpu는 아무 작업을 할 수 없다. 따라서 잦은 컨텍스트 스위칭으로 오버헤드가 발생해 효율이 낮아질 수 있다.

컨텍스트 스위칭의 원리

프로세스 A가 실행이 될려면 스케쥴러에 프로세스가 들어가게 된다. 스케쥴러아 해당 status를 running으로 변경한다. 프로세스 A가 실행을 하다가 스케쥴러가 프로세스 B를 running status로 변경하는 것을 컨택스트 스위칭이라고 한다. (pc와 stack pointer가 핵심이다 !!)

[process A]

image.png

[process B]

image.png

[context]
image.png

[PCB]
image.png

process A에서 process B로넘어갈때 현재의 컨텍스트를 PCB라는 별도의 저장공간을 만들어서 저장하고 운영체제가 관리한다. 프로세스 B실행중 스케쥴러에 의해 다시 Process A로 넘어오면 PCB를 읽어서 Context를 불러 와서 프로세스를 실행한다.

PCB (Process Control Block)

  • 특정한 프로세스를 관리할 필요가 있는 정보를 포함하는, 운영체제 커널의 자료구조

  • 운영체제가 프로세스를 표현한 것

  • 운영체제가 프로세스 스케쥴링을 위해 프로세스에 관한 모든 정보를 가지고 있는 데이터베이스

  • 운영체제에서 프로세스는 PCB로 나타내어지며, PCB는 프로세스에 대한 중요한 정보를 가지고 있는 자료입니다. 각 프로세스가 생서오딜 때마다 고유의 PCB가 생성되고, 프로세스가 완료되면 PCB는 제거됩니다.

  • Process Context Block 이라고도 함

  • Process ID

  • Register 값(pc,sp)

  • scheduling info (Porcess State)

  • memoery Info(메모리 사이즈 limit)

PCB : 프로세스가 실행중인 상태를 캡쳐/구조화 해서 저장

image.png

컨텍스트 스위칭 (Context Switching)

  • CPU에 실행할 프로세스를 교체하는 기술 (Context Switching)
  • 실행 중지할 프로세스 정보를 해당 프로세스의 PCB에 업데이트해서, 메인 메모리에 저장
  • 다음 실행할 프로세스 정보를 메인 메모리에 있는 해당 PCB 정보를 CPU에 넣고, 실행
  • 실행 중지할 프로세스 정보를 해당 프로세스의 PCB에 업데이트해서, 메인 메모리에 저장
  • 다음 실행할 프로세스 정보를 메인 메모리에 있는 해당 PCB정보(PC,SP)를 CPU의 레지스터에 넣고, 실행
    • dispatch : ready상태의 프로세스를 running 상태로 바꾸는 것
  • 컨텍스트 스위칭 시간이 오래 걸리면 운영체제 속도가 느려진다
  • 실제로는 굉장히 짧은시간(ms) 단위로, 프로세스 스위칭이 일어남

image.png

프로세스간 커뮤니케이션 (InterProcess Communication)

프로세스간 통신을 하는 직접적인 방법은 없다. 하지만, 프로세스간에 통신할일이 있는 이때는 어떻게 해야할까? 이때는 IPC기법을 이용해서 프로세스간에 통신을 할 수 있다.

프로세스간 통신이 된다는 것은 프로세스들이 서로의 공간에 접근해서 다른 프로세스의 데이터코드를 변경할 수 있다는 말이 된다. 이는 매우 위험한 행위 이므로 기본적으로 프로세스는 다른 프로세스의 공간을 접근할 수 없다.

image.png
image.png

프로세스간 통신은, 성능 향상을 위해 여러 프로세스를 만들어서 동시에 실행하는 경우가 있다. 이때, 프로세스간 상태 확인 및 데이터 송수신이 필요하다.

예를들어. fork를 통해서 프로세스를 복제해서 새로운 프로세스를 만들 수 있다(부모 프로세스, 자식 프로세스) 이때, CPU가 한 개일때만 생각하지만, 최근에는 CPU안에 코어가 8개된느 경우도 많고, 각 프로세스를 각 코어에 동시 실행이 가능하다(병렬처리)

1부터 10000까지 더하는 프로그램이 있을때, 11000, 10012000 각각을 10개의 프로세스로 생성해서 각가 더한 값을 모두 합하면 더욱 빠르게 처리가 가능하다. 단, 이 때 각 프로세스가 더한 값을 수집해야 하므로, 프로세스간 통신이 필요하게 된다

image.png

이때, 프로세스는 저장매체(file)에 접근할 수 있는데 저장매체를 이용해서 프로세스간 통신이 가능하게 된다. 하지만 file을 사용하면 실시간으로 직접 원하는 프로세스에 데이터 전달이 어렵다.

이때, 프로세스간 커널 공간은 공유하기 때문에 커널을 통해서 Process A가 Process B의 영역에 접근할 수 있게 된다.

image.png

다양한 IPC 기법

프로세스의 커널 공간은 메모리의 물리공간에 있기 때문에, 프로세스간 공유가 가능하기 때문에 message Queue ~ socket은 커널 공간을 사용해서 ipc를 한다.

  • file 사용
  • message queue
  • shared memory
  • pipe
  • signal
  • semaphore
  • socket

정리

  • 여러 프로세스 동시 실행을 통한 성능 개선, 복잡한 프로그램을 위한 프로세스간 통신 필요
  • 프로세스간 공간이 완전 분리
  • 프로세스간 통신을 위한 특별한 기법 필요 (IPC)
  • 대부분의 IPC기법은 결국 커널 공간을 활용하는 것 이다. (커널 공간은 공유하기 때문)