2. 프로세스와 스레드


우선, 프로세스

프로세스 = 실행 중인 프로그램 = 메모리에 적재됨

프로세스 A가 OS로부터 CPU를 할당받아 실행되다가, 타이머 인터럽트가 발생해 프로세스 B로 CPU 사용을 양보해야하는 상황

프로세스 A가 OS로부터 CPU를 할당받아 실행되다가, 타이머 인터럽트가 발생해 프로세스 B로 CPU 사용을 양보해야하는 상황

프로세스 A 입장에서는 잘 실행되고 있다가, 갑자기 할당받은 자원을 빼앗기는 상황 → 나중을 위해 각종 레지스터 값, 메모리 정보, 실행을 위해 열었던 파일, 사용한 입출력장치 등 지금까지의 중간 정보를 백업 필요

이때, 백업 대상이 되는 중간 정보(= 프로세스 수행을 재개하기 위해 기억해야 할 정보)를 **문맥(Context)**이라 함

그럼 문맥을 어디에 저장(백업)하나요?

<aside> 🥕

참고) 하나의 프로세스를 구성하는 메모리 내 정보

커널 영역

사용자 영역

프로세스의 문맥해당 프로세스의 PCB에 명시 프로세스의 CPU 사용 시간이 다 되거나 인터럽트가 발생하면 운영체제는 해당 프로세스의 PCB에 문맥을 백업하고, 뒤이어 실행할 프로세스의 문맥을 복구

그럼 PCB란?

프로세스는 하나만 실행되지 않음. 운영체제는 메모리에 적재된 다수의 프로세스를 관리하기 위해서 프로세스를 식별 가능한 커널 영역 내 정보(= PCB)를 이용

PCB(프로세스 제어 블록)은 프로세스와 관련된 다양한 정보를 내포하는 구조체의 일종 :

<aside> 🥕

보통 다음과 같은 정보들이 PCB에 담겨있음(운영체제마다 약간의 차이 존재) :

  1. PID(프로세스 ID) : 프로세스 식별 번호
  2. 프로세스 실행 과정에서 사용한 레지스터 값
  3. 프로세스 상태 : 프로세스의 현재 상태
  4. CPU 스케줄링(우선순위) 정보 : CPU를 할당받는 순서
  5. 메모리 관련 정보 : 프로세스의 메모리상 적재 위치
  6. 프로세스가 사용한 파일 및 입출력장치 관련 정보 </aside>

문맥 교환(Context Switching)

프로세스의 CPU 사용 시간이 다 되거나 인터럽트가 발생하면 운영체제는 해당 프로세스의 PCB에 문맥을 백업하고, 뒤이어 실행할 프로세스의 문맥을 복구

IMG_5813.heic

이처럼 기존 프로세스의 문맥을 PCB에 백업하고, PCB에서 문맥을 복구해 새로운 프로세스를 실행하는 것이 문맥 교환(즉, 문맥 교환이란, 여러 프로세스가 끊임없이 빠르게 번갈아 가며 실행되는 원리)