CS/운영체제

Process(Process, Multi-Process, Context, Process State, PCB, Context Switching)

devculture309 2024. 12. 18. 11:58
반응형

1. 프로세스의 개념

  • Program이 Memory에 적재되어 CPU에 의해 실행(연산)되는 것 ⇒ 프로세스 = 실행중인 프로그램

 

 

 

2. Multi-Process

1) 정의

  • 2개 이상의 프로세스가 동시에 실행되는 것
  • 이때 프로세스들은 CPU와 메모리를 공유하게 되며 이를 자원 공유라 함
  • ‘동시에’라는 말은 동시성(Concurrency)과 병렬성(Parallelism) 두 가지를 의미함
    • 동시성(Concurrency)
      • CPU core가 1개
      • 여러 process가 짧은 시간동안 번갈아 가면서 연산을 하게되는 시분할 시스템(time sharing system)으로 실행되는 것
    • 병렬성(Parallelism)
      • CPU core가 여러개
      • 각각의 CPU core가 각각의 Process를 연산함으로써 Process가 동시에 실행되는 것

 

 

2) 메모리 공유

  • 각자의 메모리 영역
    • 여러 프로세스들은 각자의 메모리 영역을 차지하여 동시에 메모리에 적재됨

 

 

3) CPU의 역할

  • 하나의 CPU는 매 순간 하나의 프로세스만 연산할 수 있음
  • CPU의 처리 속도가 매우 빠르기 때문에, 수 밀리초(ms) 이내의 짧은 시간 동안 여러 프로세스들이 번갈아 가며 CPU에서 실행할 수 있음 → 사용자 입장에서는 여러 프로그램이 동시에 실행되는 것 처럼 보임
  • 이처럼 여러 프로세스들이 CPU의 작업 시간을 조금씩 나누어 사용하는 것을 시분할 시스템이라 함

 

 

4) 프로세스와 메모리

  • 프로세스는 실행 중인 프로그램이며, 여러 프로세스가 동시에 실행되면서 메모리(RAM)에 적재됨
  • 각 프로세스는 고유의 메모리 공간을 가지고 있으며, 운영체제가 각 프로세스의 메모리 공간을 관리하여 프로세스 간의 간섭이 발생하지 않도록 보호

 

 

5) 메모리 보호(Memory Protection)

  • 운영체제는 각 프로세스의 메모리 접근을 제어하여, 프로세스가 자신에게 할당된 메모리 공간 외 다른 공간은 접근하지 못하게 함
  • 운영체제가 메모리를 보호하는 방법 중 하나는 메모리 관리 장치(Memory Management Unit, MMU)를 사용하는 것임
  • MMU는 각 프로세스의 메모리 주소를 관리하고, 해당 프로세스가 접근할 수 잇는 메모리 영역을 설정해줌

 

 

6) Multi Process에서 CPU의 연산과 PC Register

  • 프로세스 전환
    • Process 1 실행: Process1이 진행될 때는 PC Register가 Process1의 code 영역을 가리킴
    • Process 2 실행: Process2가 진행될 때는 PC Register가 Process2의 code 영역을 가리킴

        ⇒ CPU는 PC 레지스터가 가리키는 주소에 따라 해당 프로세스의 명령어를 읽어들이고 연산을 수행

 

 

 

2. 프로세스의 문맥(Context)

1) 프로세스 문맥의 정의

  • 프로세스 문맥은 프로세스의 현재 상태를 정의하는 요소들의 집합으로, 다음과 같은 정보를 포함함
    • 코드 실행 상태: 프로그램 코드의 어느 부분까지 실행되었는가
    • 메모리 상태: 프로세스 메모리에 어떤 데이터가 저장되어 있는가
    • 레지스터 상태: CPU 레지스터에 어떤 값이 저장되어 있는가

 

 

2) 문맥(Context)의 구성 요소

  1. CPU와 관련된 하드웨어 문맥
    • Program Counter: 현재 실행 중인 프로세스의 코드에서 다음 실행할 명령어(어디까지 실행했고, 다음은 어딘지)를 가리킴
    • 레지스터 값: 연산 결과 및 프로세스 실행 상태가 저장된 CPU 레지스터
  2. 프로세스의 주소 공간
    • 코드 영역: 실행할 명령어가 저장된 영역
    • 데이터 영역: 전역 변수와 초기화된 데이터가 저장된 영역
    • 스택 영역: 함수 호출 및 지역 변수가 저장되는 영역
  3. 운영체제와 관련된 정보
    • PCB (Process Control Block)
      • 운영체제가 프로세스 정보를 관리하기 위해 사용하는 자료구조
      • 프로세스 ID, 우선순위, 스케줄링 상태 등 포함
    • Kernel Stack
      • 프로세스가 커널 함수 호출 시 사용하는 스택 공간으로 프로세스 별로 관리함

 

 

3) 문맥의 역할

  • CPU에서의 실행 상태 파악: 현재 프로세스가 어디까지 실행되었는지 추적
  • 문맥 전환(Context Switching)
    • CPU가 다른 프로세스로 전환될 때 기존 프로세스의 문맥을 저장하고, 새 프로세스의 문맥을 복구하여 실행 재개

 

 

 

3. 프로세스의 상태 (State)

1) 프로세스 상태의 정의

  • 상태는 프로세스의 현재 실행 상황을 나타탬
  • 프로세스는 실행 중 상태가 변화하며, 운영체제가 이를 관리함

 

 

2) 주요 프로세스 상태

  1. Running (실행 중)
    • 프로세스가 CPU를 점유하고 명령어를 실행 중인 상태
  2. Ready (준비 상태)
    • 프로세스가 CPU를 사용하기 위해 대기 중인 상태
    • 필요한 데이터는 메모리에 올라와 있으며, CPU가 할당되면 즉시 실행 가능한 상태
    • 주로 Timer Interrupt로 인해 CPU를 다른 프로세스에 양보하면서 발생
  3. Blocked (대기 상태, Wait/Sleep)
    • 프로세스가 CPU를 받더라도 즉시 실행 불가능한 상태
    • 자신이 요청한 이벤트(I/O 완료, 디스크 데이터 로드 등)가 충족될 때까지 기다림
    • 특징
      • 프로세스가 자진해서 CPU를 반환
      • 예시: 파일 읽기, I/O 작업 대기, 데이터가 메모리에 없어서 스왑 영역에서 가져와야 하는 경우
  4. New (생성 중)
    • 프로세스가 생성 중이며, 아직 준비 상태(Ready)로 전환되지 않은 상태
  5. Terminated (종료):
    • 프로세스의 실행이 완료되어 정리 중인 상태

 

 

3) 프로세스 상태도 (Suspended 미반영)

  • New (생성 중)
    • 프로세스가 생성된 초기 상태
    • Admitted: 프로세스가 생성된 후, 메모리에 적재되어 Ready 상태로 전환됨
  • Ready (준비 상태)
    • 프로세스가 메모리에 적재되어 CPU 할당을 기다리는 상태
    • Scheduler Dispatch에 의해 CPU가 할당되면 Running 상태로 전환됨
  • Running (실행 중)
    • 프로세스가 CPU를 점유하여 실행 중인 상태
    • Timer Interrupt(할당 시간 만료) 시 Ready 상태로 돌아가며, I/O 또는 이벤트 대기가 필요할 경우 Waiting 상태로 전환됨
    • 실행이 완료되면 Exit 상태로 전환됨
  • Waiting (대기 상태, Blocked)
    • 프로세스가 I/O 작업이나 특정 이벤트를 기다리는 상태
    • I/O 또는 이벤트 완료Ready 상태로 돌아가 CPU 할당을 기다림
  • Terminated (종료 상태)
    • 프로세스의 실행이 완료되어 시스템에서 제거되는 상태

 

 

 

4. PCB (Process Control Block)

1) PCB란?

  • 운영체제가 각 프로세스를 관리하기 위해 프로세스당 유지하는 정보의 집합(Context)
  • 각 프로세스의 현재 상태와 필요한 자원 정보를 저장하는 구조체 형태로 관리

 

 

2) PCB의 주요 구성 요소

(1) 운영체제 관리 정보

  • Process State: 프로세스의 현재 상태 (Ready, Running, Blocked 등)
  • Process ID: 각 프로세스를 고유하게 식별하는 ID
  • Scheduling Information: 스케줄링 관련 정보, 프로세스의 우선순위(Priority)

(2) CPU 수행 관련 하드웨어 값

  • Program Counter: 프로세스가 실행 중인 명령어의 위치를 가리킴
  • Registers: CPU 레지스터에 저장된 현재 값들

(3) 메모리 관련 정보

  • Code, Data, Stack의 메모리 위치: 프로세스의 코드, 데이터, 스택이 저장된 메모리 주소 정보

(4) 파일 관련 정보

  • Open File Descriptions: 프로세스가 열어둔 파일에 대한 정보

 

 

 

5. 문맥 교환 (Context Switching)

1) 문맥 교환(Context Switching) 이란?

  • CPU를 한 프로세스에서 다른 프로세스로 넘겨주는 과정
  • 다중 프로세스 환경에서 CPU가 효율적으로 여러 프로세스를 처리할 수 있도록 하는 핵심적인 메커니즘

 

 

2) 문맥 교환 과정

  • 현재 프로세스의 상태 저장
    • CPU를 내어주는 프로세스의 현재 상태를 해당 프로세스의 PCB(Process Control Block)에 저장함
    • 이 상태에는 Program Counter, 레지스터 값, 메모리 정보 등이 포함됨
  • 새로운 프로세스의 상태 로드
    • CPU를 새롭게 할당받는 프로세스의 PCB에 저장된 Context를 불러와 CPU의 레지스터와 Program Counter에 로드
    • 이를 통해 새 프로세스는 마지막으로 중단된 지점에서 실행을 재개할 수 있습니다.

 

 

3) System Call과 Interrupt에 따른 Context Switch 여부

  • System Call이나 하드웨어 Interrupt가 발생하면 CPU가 사용자 모드에서 커널 모드로 전환됨
    • 이는 단지 프로세스가 운영체제의 기능을 요청하거나 하드웨어로부터의 신호를 처리하기 위해 커널 모드로 넘어가는 것이기 때문에 Context Switch가 아님

(1) Context Switch가 발생하지 않는 경우

  • InterruptSystem Call이 발생하여 사용자 프로세스 A가 커널 모드로 전환됨
  • 운영체제의 기능을 수행한 후, 문맥 교환 없이 사용자 모드로 복귀하여 다시 사용자 프로세스 A가 실행을 이어감
  • 이 경우에도 CPU 수행 정보 등 일부 Context는 PCB에 저장되지만, 실제 Context Switch가 발생하지는 않음

 

(2) Context Switch가 발생하는 경우

  • 타이머 인터럽트I/O 요청 System Call로 인해 사용자 프로세스 A가 커널 모드로 전환된 후, 운영체제가 A 대신 다른 사용자 프로세스 B를 실행하기로 결정함
  • 이때는 Context Switch가 발생하여, 사용자 프로세스 A의 상태를 PCB에 저장하고, 프로세스 B의 상태를 로드하여 실행이 전환됨
  • 하지만, 문맥 교환 부담이 (1)에 비해 훨씬 큼
    • 이는 A의 실행 상태를 저장하고, B의 상태를 불러와야 하기 때문(eg. cache memory flush)
반응형