본문 바로가기

Operating system

프로세스 (process)

프로그램

  • 저장장치에 저장되어 있는 정적인 상태

프로세스

  • 실행을 위해 메모리에 올라온 동적인 상태

 

프로세스와 프로그램이 관계

  • 프로그램이 프로세스가 된다는 것은 운영체제로부터 프로세스 제어 블록는 얻는다는 뜻
  • 프로세스가 종료된다는 것은 해당 프로세스 제어 블록이 폐기된다는 뜻
더보기

프로세스 = 프로그램 + 프로세스 제어 블록

프로그램 = 프로세스 - 프로세스 제어 블

프로세스 제어 블록 (PCB)

  • 프로세스를 실행하는 데 필요한 정보를 보관하는 자료 구조
  • 프로세스는 고유의 프로세스 제어 블록을 가짐 ( 프로그램 + 프로세스 제어 블록 = 프로세스)
  • 프로세스 생성 시 만들어져서 프로세스가 실행을 완료하면 폐기 ( 프로세스 - 프로세스 제어 블록 = 프로그램 )

문맥 교환

  • CPU를 차지하던 프로세스가 나가고 새로운 프로세스를 받아들이는 작업
  • 실행 상태에서 나가는 프로세스 제어 블록에는 지금까지의 작업 내용을 저장하고, 반대로 실행 상태로 들어오는 프로세스 제어 블록의 내용으로 CPU가 다시 세팅

 

프로세스의 네 가지 상태

  • 생성 상태 : 프로세스가 메모리에 올라와 실행 준비를 완료한 상태
  • 준비 상태 : 생성된 프로세스가 CPU를 얻을 때까지 기다리는 상태
  • 실행 상태 : 준비 상태에 있는 프로세스 중 하나가 CPU를 얻어 실제 작업을 수행하는 상태
  • 완료 상태 : 실행 상태의 프로세스가 주어진 시간 동안 작업을 마치면 진입하는 상태
  • 디스패치 : 준비 상태의 프로세스 중 하나를 골라 실행 상태로 바꾸는 CPU 스케줄러의 작업
  • 타임아웃 : 프로세스가 자신에게 주어진 하나의 타임 슬라이스 동안 작업을 끝내지 못하면 다시 준비 상태로 돌아감

 

프로세스의 다섯 가지 상태

생성 상태

  • 프로그램이 메모리에 올라오고 운영체제로부터 PCB를 할당받은 상태

준비 상태

  • 실행 대기 중인 모든 프로세스가 자기 순서를 기다리는 상태
  • PCB는 준비 큐에서 기다리며 CPU 스케줄러에 의해 관리
  • CPU 스케줄러는 준비 상태에서 큐를 몇 개 운영할지, 큐에 있는 어떤 프로세스의 프로세스 제어 블록을 실행 상태로 보낼지 결정
  • CPU 스케줄러가 어떤 프로세스 제어 블록을 선택하는 작업은 dispatch(PID) 명령으로 처리
  • CPU 스케줄러가 dispatch(PID)를 실행하면 해당 프로세스가 준비 상태에서 실행 상태로 바뀌어 작업이 이루어짐

실행 상태

  • 프로세스가 CPU를 할당 받아 실행되는 상태
  • 자신에게 주어진 시간, 타임 슬라이스 동안만 작업 가능
  • 시간을 다 사용하면 timeout(PID)가 실행되어 준비 상태로 옮겨짐
  • 실행 상태 동안 작업이 완료되면 exit(PID)가 실행되며 종료
  • 입출력을 요청하면 CPU는 입출력 관리자에게 입출력을 요청하고 block(PID)를 실행
  • block(PID)는 입출력이 완료될 때까지 작업을 진행할 수 없기 때문에 해당 프로세스를 대기 상태로 옮기고 CPU 스케줄러는 새로운 프로세스를 실행 상태로 가져

대기 상태

  • 실행 상태에 있는 프로세스가 입출력을 요청하면 입출력이 완료될 때까지 기다리는 상태
  • 대기 상태의 프로세스는 입출력장치별로 마련된 큐에서 기다리다가 완료되면 인터럽트가 발생하고, 대기 상태에 있는 여러 프로세스 중 해당 인터럽트로 깨어날 프로세스를 찾는데 이것이 wakeup(PID)
  • wakeup(PID)로 해당 프로세스 제어 블록이 준비 상태로 이동

완료 상태

  • 프로세스가 종료되는 상태
  • 코드와 사용했던 데이터를 메모리에서 삭제하고 프로세스 제어 블록을 폐기
  • 정상적인 종료는 간단히 exit()로 처리
  • 오류나 비정상적으로 종료되는 강제 종료를 만나면 디버깅하기 위해 종료 직전의 메모리 상태를 저장 장치로 옮기는데 이를 코어 덤프(core dump)라고 
상태 설명 직업
생성 상태 프로그램을 메모리에 가져와 실행 준비가 완료된 상태 메모리 할당, 프로세스 제어 블록 생성
준비 상태 실행을 기다리는 모든 프로세스가 자기 차례를 기다리는 상태 dispatch(PID) : 준비 -> 실행
실행 상태 프로세스가 타임 슬라이스를 얻어 CPU를 사용하는 상태 (문맥 교환이 일어남) timeout(PID) : 실행 -> 준비
exit(PID) : 실행 -> 완료
block(PID) : 실행 -> 대기
대기 상태 실행 상태에 있는 프로세스가 입출력을 요청하면 입출력이 완료될 때까지 기다리는 상태.  wakeup(PID) : 대기 -> 준비
완료 상태 프로세스가 종료된 상태, 사용하던 모든 데이터가 정리되며 정상 종료 exit와 비정상 정료 abort를 포함 메모리 삭제, 프로세스 제어 블록 삭

 

쉽게 배우는 운영체제 | 조성호 - 교보문고 (kyobobook.co.kr)

 

'Operating system' 카테고리의 다른 글

스레드 (thread)  (0) 2023.04.23
프로세스의 구조 , 복사 (fork), 전환(exec)  (0) 2023.04.23
인터럽트  (0) 2023.04.22
캐시  (1) 2023.04.22
메모리 (Memory)  (0) 2023.04.20