새소식

인기 검색어

컴퓨터공학/운영체제

프로세스(Process)

  • -

프로세스 개요

  • 운영체제는 프로그램을 메모리에 적재하고 이를 프로세스라고 부른다
  • 운영체제는 프로세스에게 별도의 메모리 공간을 할당하고 이곳에 코드와 데이터 등을 적재한다
    • CPU는 하드디스크에 저장된 상태에서 코드를 실행하지 않고 메모리에 적재된 코드들만 실행하기 때문
  • 프로세스는 서로 독립적인 메모리 공간을 가지므로 다른 프로세스의 영역에 접근 할 수 없다
    • 다른 프로세스와의 데이터를 주고 받으려면 커널을 통해야 함
  • 커널은 프로세스마다 고유한 번호를 할당한다
  • 프로세스에 관한 정보는 커널에 의해 관리된다
  • 프로세스의 모든 관리는 커널에 의해 수행된다.

프로세스 관리

  • 프로세스는 운영체제가 응용프로그램의 실행을 위해 생성한 것으로 운영체제의 커널은 프로세스의 생성에서 종료까지 모든것을 관리한다.
  • 커널은 프로세스를 위해 사용자 공간에 메모리를 할당하고 고유한 번호를 부여하고 프로세스의 모든 행동을 처리한다.
  • 커널영역에 프로세스 테이블을 만들고 이 테이블을 이용하여 실행 중인 모든 프로세스의 정보를 관리한다.

프로세스의 구성

  • 불변
    • 코드 영역 - 프로세스 코드가 적재되는 영역. 텍스트 영역으로도 불린다.
    • 데이터 영역 - 프로세스의 전역 변수들과 정적 변수들이 적재되는 영역
  • 가변
    • 힙 영역 - 프로세스가 실행 중에 동적 할당받는 영역
    • 스택 영역 - 함수가 호출될 때 지역변수, 매개변수, 함수의 리턴값 등이 저장된다.

프로세스 테이블과 프로세스 제어 블록

  • 운영체제 커널은 시스템 전체에 하나의 프로세스 테이블을 두고 모든 프로세스들의 정보를 관리한다.
  • 커널은 프로세스를 생성할 때 마다 프로세스 제어 블록(Process Control Block)을 생성하여 프로세스의 정보를 저장한다.
  • 프로세스 테이블의 비어 있는 항목에 PID(프로세스번호)와 함께 PCB를 연결한다.
  • 프로세스 테이블과 PCB는 커널 공간에 생성되며 커널만이 액세스 할 수 있다.

프로세스 제어 블록(Process Control Block)

  • 프로세스 번호 PID(Process Identification Number)
    • PID는 프로세스를 식별하는 고유한 번호이다.
  • 부모 프로세스 번호 PPID(Parent Process Identification Number)
    • 최상위 프로세스를 제외하고 모든 프로세스는 부모 프로세스를 가진다.
  • 프로세스 상태 정보 (Process State)
    • 커널은 프로세스의 상태가 바뀔 때 마다 PCB에 상태 정보를 저장한다.
  • CPU 컨텍스트 정보 (Process Context)
    • 커널은 현재 CPU가 실행 중인 프로세스를 중단시키고 다른 프로세스를 실행시킬 때 현재 프로세스가 실행 중이던 상황 정보 즉 프로세스 컨텍스트를 PCB에 저장한다.
    • 프로세스 컨텍스트는 현재의 프로세스의 실행상태를 나타네는 PC, SP 등 CPU에 들어 있는 레지스터 값이다.
  • 종료 코드 (exit Code)
    • 프로세스가 종료할 때 종료 이유를 부모 프로세스에게 전달하기 위한 정수값이다.
    • 종료한 프로세스의 PCB에 저장된다.
  • 프로세스의 오픈 파일 테이블(Open File Table)
    • 프로세스가 실행 중에 열어 놓은 파일들에 관한 정보이다.
    • 프로세스가 종료할 때 커널이 오픈 파일 테이블에 기록된 파일을 모두 닫아준다

프로세스의 생명주기와 상태변이

New

  • 프로세스의 코드와 데이터를 메모리에 적재하고 PCB(프로세스 제어 블록)를 만들어 프로세스 테이블의 빈 항목에 등록한다.
  • PCB에는 프로세스 상태를 New로 기록한다.
  • 프로세스가 완료시한내에 처리 가능하다고 판단될 때 Ready 상태로 만든다.

Ready

  • 프로세스가 스케줄링을 기다리는 준비상태이다. Ready 상태의 프로세스들은 커널에 있는 준비 큐 (Ready Queue)에 들어간다.
  • 현재 실행중인 프로세스가 종료되거나 중단되는 경우 커널은 준비 큐에서 프로세스를 선택하여 CPU에게 실행시킨다.
  • 프로세스를 선택하는 과정을 프로세스 스케줄링 혹은 CPU 스케줄링이라고 부른다
  • 스케줄링 정책이 잘못되면 준비 큐에 오래 머무르는 기아 프로세스가 생기기도 한다
  • 프로세스가 Ready상태로 되는 경우는
    1. New 상태에서 준비 큐에 삽입될 때
    2. Running 상태에서 프로세스에게 할당된 CPU 시간이 경과되거나 스스로 다른 프로세스에게 CPU를 양보할 때
    3. 입출력 장치나 저장 장치로부터 요창한 작업이 완료될 때 이다

Running

  • 프로세스가 CPU에 의해 실행되고 있는 상태이다.
  • 프로세스에게 할당된 CPU 시간이 경과되거나 스스로 다른 프로세스에게 CPU를 양보할 때 커널은 프로세스를 Ready 상태로 만든다.
  • 프로세스의 실행이 완료되면 Terminated 상태로 만든다.
  • 커널은 프로세스를 Running 상태에서 다른 상태로 바꿀 때 스케줄링을 시행하고 Running 상태였던 프로세스의 컨텍스트를 PCB에 저장하고 스케줄링된 프로세스의 PCB에서 컨텍스트를 CPU로 복귀시킨다.(컨텍스트 스위칭)

Blocked / Wait

  • Blocked 상태는 프로세스가 자원을 요청하거나 입출력을 요청하고 완료를 기다리는 상태이다.
  • 프로세스가 Running 상태에서 시스템 호출을 일으킬 경우 커널은 현재 프로세스를 Blocked/wait 상태로 만든다.
  • 그리고 스케줄링을 통해 Ready 상태의 프로세스를 하나 선택하고 현재 프로세스와 컨텍스트를 스위칭한다.

Terminated / Zombie

  • 프로세스가 종료하면 커널은 프로세스가 차지하고 있던 메모리와 할당받았던 자원을 모두 반환하고 열어 놓은 파일들도 모두 닫는다.
  • 이 상태는 프로세스가 완전히 소멸된 상태가 아니다.
  • 프로세스는 종료할 때 종료코드를 남기는데 종료코드는 PCB에 저장된 채 남아 있게 된다.
  • 커널은 부모 프로세스가 자식 프로세스의 종료코드를 읽어 갈 때 까지 Terminated/Zombie 상태에서 해제 하지 않고 PCB도 프로세스 테이블에 그대로 남겨 둔다.
  • 이 상태의 프로세스를 좀비 프로세스라고 부른다.

Terminated / Out

  • 부모 프로세스가 좀비 상태인 자식 프로세스의 PCB에서 종료코드를 읽어 갈때 커널은 좀비 상태의 PCB를 시스템에서 제거하고 프로세스 테이블의 항목도 제거한다.
  • 이로서 좀비 프로세스는 시스템에서 완전히 사라진다.

'컴퓨터공학 > 운영체제' 카테고리의 다른 글

11장 파일 시스템 관리  (0) 2023.05.28
10장 가상 메모리  (0) 2023.05.28
9장 페이징 메모리  (0) 2023.05.28
7장 교착상태  (0) 2023.05.28
6장 스레드 동기화  (0) 2023.05.28
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.