프로세스란?

?에서 !로·2022년 1월 5일
0

CS(Computer Science)

목록 보기
2/14
post-thumbnail

프로세스

개념


프로세스는 디스크에 있는 프로그램이 실행되서 운영체제에 의해 독립된 메모리 영역을 할당받고, CPU 의 할당을 받을 수 있는 상태를 의미합니다. 최소 하나의 스레드를 포함하며 PCB를 가진 프로그램입니다.

  • 프로세스들은 독립적인 주소 공간에서 실행되기 때문에 자원에 접근하기 위해서는 IPC를 사용

프로세스 메모리 구조


  • Code 영역 : 컴파일된 소스 코드가 저장되는 영역
  • Data 영역 : 전역변수, static 변수들이 위치하는 공간
  • Heap 영역 : 동적할당을 위한 메모리 영역( malloc(), new 등)으로 런타임시 크기가 결정된다. 메모리의 낮은 주소에서 높은 주소의 방향으로 할당된다.
  • Stack 영역 : 지역 변수, 매개변수(함수에 전달되는 인자)같은 임시 데이터가 위치하는 공간으로 컴파일시 크기가 결정된다. 메모리의 높은 주소에서 낮은 주소의 방향으로 할당된다.

각 프로세스는 독립된 메모리 영역을 가진다.

데이터 영역을 나눈 이유?
최대한 데이터를 공유하여 메모리 사용량을 줄이기 위해서!

프로세스 상태 전이


상태

  • 생성 (New) : 프로세스 생성 상태
  • 실행 (Running) : 프로세스가 CPU에 할당되어 실행 중인 상태
  • 준비 (Ready) : 프로세스가 CPU에 할당되기를 기다리는 상태
  • 대기 (Waiting) : 보류(Block)라고도 하며, 프로세스가 입출력이나 이벤트를 기다리는 상태
  • 종료 (Terminated) : 프로세스 종료 상태
  • Suspended Ready
    필요한 자원은 모두 얻었지만 주기억장치에 적재되지 못한 상태
  • Suspended Blocked
    필요한 자원도 없고 주기억장치에도 적재되지 못한 상태

상태 전이

  • 승인 (Admitted) : 프로세스 생성이 가능하여 승인됨.
  • 스케줄러 디스패치 (Scheduler Dispatch) : 준비 상태에 있는 프로세스 중 하나를 선택하여 실행시키는 것.
  • Time Run Out : 예외, 입출력, 이벤트 등이 발생하여 현재 실행 중인 프로세스를 준비 상태로 바꾸고, 해당 작업을 먼저 처리하는 것.
  • Block : 실행 중인 프로세스가 입출력이나 이벤트를 처리해야 하는 경우, 입출력/이벤트가 모두 끝날 때까지 대기 상태로 만드는 것.
  • Wake Up : 입출력/이벤트가 끝난 프로세스를 준비 상태로 전환하여 스케줄러에 의해 선택될 수 있도록 만드는 것.
  • Swap in
    프로세스가 주기억장치에 적재 되는 상태
  • Swap out
    프로세스가 주기억장치에서 해제 되는 상태

프로세스 제어 블록


PCB(Process Control Block)이란?

운영체제가 프로세스를 제어하기 위해 프로세스의 상태 정보를 저장하는 자료구조다. 프로세스가 생성될 때마다 고유의 PCB가 생성되고 메인 메모리에 유지되며, 프로세스가 완료되면 PCB는 제거된다.

프로세스는 CPU가 처리하던 작업의 내용들을 자신의 PCB에 저장하고, 다음에 다시 CPU를 점유하여 작업을 수행해야 할 때 PCB로부터 해당 정보들을 CPU에 넘겨와서 계속해서 하던 작업을 진행한다.

운영체제에 따라 PCB에 포함되는 항목이 다를 수 있지만, 일반적으로 다음과 같은 정보가 포함된다.

  • 포인터 :
    프로세스가 준비상태나 대기 상태일 경우에 큐로 운영이 되는데, 프로세스 제어 블록을 연결 시 큐로 구현하기 위해 포인터를 사용

  • 프로세스 상태 :
    생성, 준비, 실행, 대기 , 완료, 보류 등 프로세스가 현재 어떠한 상태에 있는지를 나타낸다.

  • 프로세스 식별자 :
    프로세스 ID 또는 PID라는 고유 한 ID가 할당

  • 프로그램 카운터 :
    프로세스가 준비상태에서 실행상태 갈 경우 프로그램 카운터를 통해 다음 실행될 명령어의 위치를 알 수 있다. 실행상태에서 준비상태로 갈 경우 프로그램 카운터에 저장하여 다음 실행될 명령어 위치를 저장한다.

  • 프로세스 우선순위 :
    CPU 스케줄러가 준비 상태에 있는 프로세스 중 실행 상태로 옮겨야 할 프로세스의 우선순위를 저장한다.

  • 레지스터 정보 :
    프로세스가 실행 중에 사용했던 레지스터 정보( 누산기(Accumulator), 색인 레지스터, 스택 포인터 등)들이 저장되고 다시 실행될때 복귀할 수 있다.

  • 메모리 관리 정보 :
    프로세스의 메모리 위치 정보가 필요하고 메모리 보호를 위해 사용되는 경계 레지스터, 한계 레지스터 값 등이 저장된다. 이외 세그먼테이션 테이블, 페이지 테이블 등의 정보도 포함된다.

  • 할당된 자원 정보 :
    프로세스를 실행하기 위해 사용되는 입출력 자원, 오픈 파일 등에 대한 정보가 포함된다.

  • 계정 정보 :
    계정 번호, CPU 할당 시간, CPU 사용 시간 등이 저장된다.

프로세스 큐(queue)

프로세스는 수행하면서 상태가 여러번 변한다. 그리고 프로세스는 일반적으로 여러 개가 한 번에 수행되므로 이러한 순서를 대기하는 곳을 프로세스 큐라 한다. 각 큐 내부에 저장된 실제 데이터는 각 프로세스의 PCB가 저장되어 있다.

  • Job Queue: 하드디스크에 있는 프로그램이 실행되기 위해 메인 메모리의 할당 순서를 기다리는 큐이다.
  • Ready Queue: CPU 점유 순서를 기다리는 큐이다.
  • Device Queue: I/O를 위한 여러 장치가 있는데, 각 장치를 기다리는 큐가 각각 존재한다.

문맥 교환(Context Switching)


CPU를 차지하던 프로세스가 나가고 새로운 프로세스에 할당하는 경우 CPU에서 나가는 프로세스는 지금까지의 작업 내용을 저장하고 새로 들어오는 프로세스는 PCB의 내용으로 CPU가 다시 세팅된다. 이와 같이 두 프로세스의 PCB 교환하는 작업이 문맥 교환이다.

문맥교환하는데 필요한 시간, 메모리 등을 오버헤드라 부른다.

문맥 교환 발생 시점

  • 비 자발적 교환 : 타임 슬라이스(Time Slice) 소진 시 스케쥴링으로 다른 프로세스에게 선정되거나 인터럽트로 CPU가 선점 당했을 경우
  • 자발적 교환 : 입출력 요구

0개의 댓글