학습 목표 
- 프로세스가 생성된 후 어떤 상태 변화를 거치는지 알아본다.
- 프로세스 제어 블록의 구성과 문맥 교환 시 동작 과정을 알아본다.
- 프로세스의 생성과 복사, 전환 과정을 알아본다.
- 스레드의 개념을 이해하고 멀티스레드 시스템의 장점을 알아본다.
 

목차

  • 프로세스의 개념
  • 프로그램에서 프로세스로의 전환
  • 프로세스의 상태

 


프로세스의 개념

프로세스의 프로그램의 차이

 

폰노이만 구조에 의하면 프로그램저장장치에 저장되어 있는 정적인 상태이고, 프로세스실행을 위해 메모리에 올라온 동적인 상태이다.

 

  • 프로그램이란, 어떤 데이터를 사용하여 작성할 지 그 절차를 적어놓은 것이다.
  • 프로세스는 '실행한다'라고 표현하는데, 이는 프로그램으로 작성된 작업 절차를 실제 실행에 옮긴다는 의미이다.
  • 정적인 상태 = 프로그램(저장장치에 저장된 상태)
    동적인 상태 = 프로세스(저장된 데이터를 실행하는 상태)

 

 


 

프로그램에서 프로세스로의 전환

현대의 운영체제는 시분할 방식을 기본으로 사용하기 때문에 프로세스가 여러 상태를 오가며 실행된다.

 

task(태스크)

task는 컴퓨터 시스템의 작업 단위를 뜻한다.

 

 

프로그램이 프로세스로 전환되는 과정
  1. 운영체제가 프로그램을 메모리의 적당한 위치로 가져온다.
  2. 프로그램의 동작을 나타내는 작업 지시서, 프로세스 제어 블록(Process Control Block, PCB)을 만든다.
    (= 프로세스 제어 블록이 없으면 프로그램이 프로세스로 전환되지 못한다.)
    프로세스 제어 블록에 담긴 정보는 다음과 같다.
    - 프로세스 구분자: 메모리는 여러개의 프로세스를 다루므로 각 프로세스를 구분하는 구분자(IDentification, ID)의 정보를 가진다.
    - 메모리 관련 정보: CPU는 실행하려는 프로세스가 메모리 어디에 위치해있는지 알아야하므로 메모리 주소가 담겨있다.
    - 각종 중간값: 프로세스 제어 블록에는 프로세스가 사용했던 중간값이 저장된다. 시분할로 처리되기 때문에 중간에 작업이 중단됐을 경우 해당 프로세스 작업이 어디까지 진행되었는지 중간값을 저장해둔다. 
    (= 다음에 작업해야할 코드의 위치가 레지스터;프로그0램 카운터에 저장된다.)
  3. 프로그램이 프로세스가 되려면 메모리에 올라오는 것과 동시에 프로세스 제어 블록이 생성되어야한다.
  4. 프로세스 제어 블록운영체제가 프로세스를 관리하는 데이터 구조이므로 운영체제 영역에 만들어지며, 프로세스 종료시 제어블록과 메모리를 소멸시킨다.
  5. 운영체제또한 프로그램이므로 프로세스 형태로 실행되어야 한다
    부트스트랩운영체제 관련 프로세스를 실행한 후 일반 프로세스가 실행된다. 그러므로 컴퓨터에는 일반 사용자의 사용자 프로세스(user process)와 커널 프로세스(kernel process)가 섞여서 실행된다.

 


 

프로세스의 상태

 

  • 일괄 작업 시스템:
    일괄 작업 시스템의 프로세스의 상태는 생성(create), 실행(run), 완료(teminate) 이다.
  • 시분할 시스템:
    시분할 시스템에서의 프로세스 상태는 일괄 작업 시스템보다 복잡하다. 실행중 프로세스가 다른 프로세스에 CPU를 넘겨주는 일이 빈번하기 때문이다.
    시분할 시스템에는 생성(create) 준비(ready) 실행(running) 완료(teminate) 대기(blocking) 이다.

 

 

프로세스의 다섯 가지 상태

간단한 프로세스의 상태를 나타낸다. 이 5가지 상태활성 상태(active status)라고 한다.

 

  • 생성 상태(create status)
    프로세스가 메모리에 올라와 실행 준비를 완료한 상태이다. 프로세스 제어 블록이 생성된다.
  • 준비 상태(ready status)
    생성된 프로세스가 CPU를 얻을때까지 준비하는 상태이다. 다음에 실행할 프로세스를 고르는 일CPU 스케줄러(CPU scheduler)가 담당한다. CPU 스케줄러가 프로세스를 준비 상태에서 실행 상태로 바꾸는 것디스패치(dispatch)라 한다.(= dispact(PID) 준비->실행) CPU 스케줄러에 의해 선택되어 실행이 완료된 프로세스는 일정 시간 작업 시간이 주어지게 되는데, 이를 타임 슬라이스 또는 타임 퀀텀이라 한다. 타임 퀀텀동안 작업을 완료하지 못하면 다시 준비 상태로 돌아가게 되는데 이를 타임 아웃(time out)이라 한다. 타임 퀀텀이 다 흐르면 인터럽트를 사용하여 CPU에게 알린다.
  • 실행 상태(running status)
    준비 상태에 있는 프로세스 중 하나가 CPU를 얻어 실제 작업을 수행하는 상태'excute status'라고도 표현한다.
    주어진 시간에 작업이 완료되지 않으면 준비 상태로 돌아가 차례를 기다리게 된다.(= 타임 퀀텀이 끝나면 timeout(PID) 실행 -> 준비)
  • 완료 상태(teminate status)
    실행 상태의 프로세스가 주어진 시간 동안 작업을 완료하면 완료 상태로 진입한다. 완료 상태에서는 프로세스 제어 블록이 사라진 상태를 의미한다. (= 작업 완료시 exit(PID) 실행->완료)
  • 대기 상태(blocking status)
    효율성을 고려해 새로 도입한 상태이다. 프로세스에서 입출력을 요구할 경우 CPU가 아닌 입출력 관리자가 처리하게 되는데 처리되는 동안 CPU가 다른 작업을 할 수 있도록 프로세스가 입출력이 완료 될때까지 대기상태에 두는 것을 의미한다. 입출력이 완료되면 입출력 관리자로부터 인터럽트를 수신하게 되며, 원래라면 본래 있던 실행 상태로 돌아가야하지만, 작업의 복잡성을 줄이기 위해 준비 상태로 돌아가 다시 기다리게 된다. (=프로세스가 입출력 요청시 block(PID) 실행->대기 // 완료시 wakeup(PID) 대기->준비 ) 

 

코어 덤프(core dump)
완료 상태에서 만약 오류나 다른 프로세스에 의해 비정상적으로 종료되는 강제 종료 (abort)를 만나면 디버깅을 하기 위해 강제 종료 직전의 메모리 상태를 저장장치로 옮기는데 이를 코어 덤프라고 한다. 코어 덤프는 종료 직전의 메모리 상태를 확인함으로써 오류를 수정할 수 있게 해준다.

 

 

휴식상태와 보류상태

위에 5가지 프로세스 상태가 활성 상태라면 휴식 상태와 보류 상태도 있다. 

 

  • 휴식 상태(pause status)
    프로세스가 작업을 일시적으로 쉬는 상태
  • 보류 상태(suspend status)
    프로세스가 메모리에서 잠시 쫒겨난 상태
    - 메모리가 꽉 차서 일부 프로세스를 메모리 밖으로 내보낼 때
    - 프로그램에 오류가 있어서 실행을 미루어야 할 때
    - 바이러스같은 악성 프로세스라 판단될 때
    - 매우 긴 주기로 실행되는 프로세스라 메모리 밖으로 쫒아내도 큰 문제가 없을 때
    - 입출력을 기다리는 프로세스의 입출력이 계속 지연될 때

 

swap area 스왑 영역

보류 상태로 쫒겨난 프로세스는 메모리 밖 스왑 영역에 보관된다. 

 

보류 대기 상태, 보류 준비 상태

보류 상태는 대기 상태에서 옮겨진 보류 대기 상태(block suspend status)준비 상태에서 옮겨진 보류 준비 상태(ready suspend status)로 구분 된다.