본문 바로가기

CS/운영체제

[운영체제] 3. Process (1)

더보기

kocw 반효경 교수님의 운영체제 강의를 수강 후 작성한 글입니다.

1. 프로세스의 개념

"Process is a program in execution"

 

프로세스의 문맥(context)

  •  CPU의 수행 상태를 나타내는 하드웨어 문맥
    • Program Counter(현재 수행 중인 코드의 instruction을 가리킴)
    • 각종 register  
  • 프로세스의 주소 공간
    • code, data, stack
  • 프로세스 관련 커널 자료 구조
    • PCB
    • Kernel stack

2. 프로세스의 상태

  • Running : CPU를 잡고 instruction을 수행 중인 상태
  • Ready : CPU를 기다리는 상태
  • Blocked(wait, sleep) : CPU를 주어도 당장 instruction을 수행할 수 없는 상태. Process가 자신이 요청한 event가 만족되지 않아 이를 기다리고 있는 상태.
    • 공유 데이터를 사용해야 하거나 I/O 요청에 의해 Blocked 상태가 되면, 각자 상황에 맞게 Resource queue, Disk I/O queue 등의 큐에서 처리를 기다린다. 처리가 완료되면 다시 Ready queue에 들어가 CPU를 할당받기를 기다리는 상태가 된다.
  • New : 프로세스가 생성 중인 상태
  • Terminated : 수행이 끝난 상태

3. Process Control Black (PCB)

운영체제가 각 프로세스를 관리하기 위해 프로세스당 유지하는 정보로 kernel address space의 data 영역에 존재한다.

구조체로 유지하며, 다음의 구성요소를 가진다.

  • (1) OS가 관리상 사용하는 정보
    • Process state, Process ID
    • scheduling information, priority(우선순위)
  • (2) CPU 수행 관련 하드웨어 값
    • PC, registers
  • (3) 메모리 관련
    • Code, data, stack의 위치 정보
  • (4) 파일 관련 ex) Open file descriptors

4. 문맥 교환 (Context Switch)

CPU를 한 프로세스에서 다른 프로세스로 넘겨주는 과정

(1) CPU를 내어주는 프로세스의 상태를 그 프로세스의 PCB에 저장한다. (save)

(2) CPU를 새롭게 얻는 프로세스의 상태를 PCB에서 읽어와 CPU에 복원한다. (load)

 

※ System call이나 Interrupt 발생 시 반드시 context switch가 일어나는 것은 아니다.

 

Interrupt나 system call에 의해 A process가 user mode -> kernel mode 로 바뀌어 실행 후, 다시 user mode로 실행한다면 CPU context 등 일부 문맥은 PCB에 저장을 해야하지만 문맥 교환이 일어나는 것은 아니다. 

하지만 A process가 user mode -> kernel mode 실행 후 문맥 교환이 일어나 B process가 user mode 수행 시 문맥 교환으로 인한 오버헤드가 상당히 크다. (eg. cache memory flush)

5. 프로세스를 스케줄링하기 위한 큐

  • Job queue : 현재 시스템 내에 있는 모든 프로세스의 집합
  • Ready queue : 현재 메모리 내에 있으면서 CPU를 잡아서 실행되기를 기다리는 프로세스의 집합
  • Device queue : I/O Device의 처리를 기다리는 프로세스의 집합

각 PCB에 있는 pointer를 통해 연결된다. 

6. 스케줄러 (Scheduler)

  • Long-term scheduler(장기 스케줄러 or job scheduler)
    • 시작 프로세스 중 어떤 것들을 ready queue로 보낼 지 결정
    • 프로세스에 memory를 주는 문제
    • degree of multiprogramming(매모리에 올라가는 program의 수) 을 제어 -> 성능을 결정하는 중요한 이슈
    • time sharing system에서는 보통 장기 스케줄러가 사용되지 않음 (무조건 메모리를 줘서 ready 임)
  • Short-term scheduler(단기 스케줄러 or CPU scheduler)
    • 어떤 프로세스를 다음번에 running 시킬지 결정 (priority에 따라서)
    • 프로세스에 CPU를 주는 문제 
    • 충분히 빨라야 함 (millisecond 단위)
  • Medium-term scheduler(중기 스케줄러 or Swapper)
    • 프로세스에게서 memory를 뺏는 문제
    • 프로세스를 통째로 메모리에서 디스크로 쫓아냄
    • 장기 스케줄러를 사용하지 않기 때문에, 중기 스케줄러에서 degree of multiprogramming을 제어

7. 프로세스의 상태 (Suspended 추가)

  • Suspended(stopped)
    • 외부적인 이유로 프로세스의 수행이 정지된 상태 
    • 프로세스는 통째로 디스크에 swap out 됨 (중기 스케줄러에 의해 메모리를 통째로 빼앗김)
    • ex) 사용자가 프로그램을 일시 정지시킨 경우, 시스템이 여러 이유로 프로세스를 잠시 중단시킨 경우(메모리에 너무 많은 프로세스가 올라와 있을 때)

Blocked : I/O 등의 event를 스스로 기다리는 상태로써, 자신이 요청한 event가 만족되면 Ready

Suspended : 외부에서 resume해 주어야 active