본문 바로가기
CS/Operating System

[OS] 프로세스

by 안녕나는현서 2021. 11. 2.
728x90

프로그램 vs 프로세스

- 프로그램

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

 

- 프로세스

  • 실행을 위해 메모리에 올라온 동적인 상태
  • 프로그램으로 작성된 작업 절차를 실행에 옮김
  • 하나의 작업 단위 (=태스크, task)

 

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

  • 프로그램이 운영체제로부터 프로세스 제어 블록 (PCB, Process Control Block)을 받으면 프로세스가 됨
  • 프로세스 = 프로그램 + 프로세스 제어 블록

 

 

프로세스 상태

- 생성 상태 (create status)

  • 프로그램이 메모리에 올라오고 운영체제로부터 프로세스 제어 블록 할당받은 상태
  • 메모리 할당, 프로세스 제어 블록 생성

 

- 준비 상태 (ready status)

  • 프로세스가 CPU를 얻을 때까지 기다리는 상태
  • 프로세스 제어 블록은 준비 큐 (ready queue)에서 대기
  • 디스 패치 (dispatch) : CPU 스케줄러가 준비 상태의 프로세스 중 하나를 골라 실행 상태로 바꾸는 작업

 

- 실행 상태 (runnig/execute status)

  • 준비 상태에 있는 프로세스 중 하나가 CPU 스케줄러에 의해 CPU를 얻어 실제 작업을 수행하는 상태
  • 실행 상태에 들어가는 프로세스 수 = CPU의 개수
  • 주어진 시간(=타임 슬라이스, 타임 퀸텀) 안에 작업이 끝나면 완료상태로 진입 (exit)
  • 끝나지 않았다면 프로세스는 준비 상태로 돌아와(=타임 아웃) 다음 차례를 기다림 (timeout)
  • 실행 상태에 있는 프로세스가 입출력을 요청하면 입출력이 완료될 때까지 대기상태로 옮김 (block)

 

- 대기 상태 (blocking/wait status)

  • 실행 상태에 있는 프로세스가 입출력을 요청하면 입출력이 완료될 때까지 기다리는 상태
  • 프로세스는 입출력장치별로 마련된 큐에서 대기하다 입출력이 완료되면 인터럽트가 발생하고, 인터럽트가 프로세스를 찾아서 준비 상태로 이동 (wakeup)

 

- 완료 상태 (terminate status)

  • 프로세스가 종료되는 상태
  • 코드, 사용했던 데이터를 메모리에서 삭제하고 프로세스 제어 블록 폐기

+) 

- 휴식 상태 (pause status)

  • 프로세스가 작업을 일시적으로 쉬고 있는 상태
  • 프로세스가 메모리에 있으나 멈춘 상태

 

- 보류 상태 (suspend status)

  • 프로세스가 메모리에서 잠시 쫓겨난 상태
  • 스왑 영역에 있는 상태

 

 

프로세스 제어 블록

  • 프로세스를 실행하는 데 필요한 중요한 정보를 보관하는 자료구조

 

- 프로세스 제어 블록의 구성

  • 포인터 : 프로세스 제어 블록을 연결하여 준비 상태나 대시 상태의 큐를 구현할 때 사용
  • 프로세스 상태 : 생성, 준비, 실행, 대기, 보류 준비, 보류 대기 등
  • 프로세스 구분자 (PID, Process IDentification)
  • 프로그램 카운터 : 다음에 실행될 명령어의 위치
  • 프로세스 우선순위
  • 각종 레지스터 정보 : 이전 실행 시 사용한 레지스터 값을 보관해야 다음에 실행할 수 있기 때문에 중간값 보관
  • 메모리 관리 정보
  • 할당된 자원 정보
  • 계정 정보 : 계정 번호, CPU 할당 시간, CPU 사용 시간 등
  • 부모 프로세스 구분자, 자식 프로세스 구분자

 

 

문맥 교환 (context swiching)

  • CPU를 차지하던 프로세스가 나가고 새로운 프로세스를 받아들이는 작업
  • 두 프로세스의 PCB 및 이와 관련된 값들을 교환하는 작업
  • 타임 아웃이나 메모리 범위를 넘어선 프로세스가 생길 경우 등에 일어남
  • 문맥 교환 절차
    1. 실행 상태의 프로세스 P1이 타임아웃
    2. P1의 PCB에 현재까지의 작업 결과 저장
    3. P1은 준비상태로 쫓겨남
    4. 준비 상태에 있던 프로세스 P2가 실행 상태로 바뀜
    5. CPU의 레지스터가 P2의 PCB 값으로 채워져서 작업

 

 

프로세스 구조

- 정적 할당 영역

  • 코드 영역 : 프로그램의 본문이 기술된 곳, 프로그램의 본체가 있는 곳
  • 데이터 영역 : 코드가 실행되면서 사용하는 변수나 파일 등의 각종 데이터를 모아놓은 곳
  • 프로세스가 실행되기 직전에 위치와 크기가 결정되고 실행되는 동안 변하지 않음

 

- 동적 할당 영역

  • 스택 영역 : 운영체제가 프로세스를 실행하기 위해 부수적으로 필요한 데이터를 모아놓은 곳
  • 힙 영역
  • 프로세스가 실행되는 동안 만들어지는 영역, 크기가 변화함

 

 

프로세스의 연산

- fork() 시스템 호출

  • 실행 중인 프로세스로부터 새로운 프로세스를 복사하는 함수
  • 기존의 프로세스가 부모 프로세스, 새로 생긴 프로세스가 자식 프로세스 (부모-자식 관계)
  • 부모 프로세스 영역을 복사하지만 PCB의 다음 부분이 변경됨
    • 프로세스 구분자(PID)
    • 메모리 관련 정보 : 메모리의 위치가 다르므로
    • 부모프로세스 구분자, 자식 프로세스 구분자 (자식 프로세스는 자식이 없으므로 -1)
  • 장점
    • 프로세스 생성 속도가 빠름
    • 추가 작업 없이 자원 상속 가능 : 부모가 파일A를 쓰기 위해 초기화했다면, 자식은 파일A를 바로 사용가능
    • 시스템 관리의 효율성 : 자식 프로세스를 종료하면 자식이 사용하던 자원을 부모 프로세스가 정리

 

- exec() 시스템 호출

  • 기존의 프로세스를 새로운 프로세스로 전환하는 함수
  • 프로세스는 그대로 둔 채 내용만 바꾸는 시스템 호출
  • 프로세스의 구조체를 재활용하기 위함
  • 동작 과정
    1. 코드 영역에 있는 기존의 내용 지우고 새로운 코드로 전환
    2. 데이터 영역이 새로운 변수로 채워짐
    3. 스택 영역 리셋
    4. PCB의 프로세스 구분자, 부모/자식 프로세스 구분자, 메모리 관련 사항은 바뀌지 않으나 프로그램 카운터 레지스터 값을 비롯한 각종 레지스터와 사용한 파일 정보가 리셋됨 (프로세스를 처음 시작하는 것처럼)

 

- 프로세스 계층 구조

  • 부모 프로세스를 복사하여 자식 프로세스를 만드는 방법으로 프로세스끼리 계층 구조를 갖는 것
  •  장점
    • 여러 작업의 동시 처리
    • 자원 회수 용이
  • 고아/좀비 프로세스 : 프로세스가 종료된 후에도 비정상적으로 남아있는 프로세스
    • 고아 프로세스 : 부모 프로세스가 자식보다 먼저 죽는 경우 발생
    • 좀비 프로세스 : 자식 프로세스가 종료했음에도 부모가 뒤처리를 하지 않을 때 발생
728x90

'CS > Operating System' 카테고리의 다른 글

[OS] 프로세스 간 통신  (0) 2021.12.05
[OS]CPU 스케줄링 알고리즘  (0) 2021.12.02
[OS] CPU 스케줄링  (0) 2021.12.02
[OS] 스레드  (0) 2021.11.02
[OS] 운영체제 개요  (0) 2021.11.02

댓글