프로세스(Process)란?

남우진·2025년 1월 24일

프로세스

목록 보기
1/6

Operating System Concepts, 10th Edition을 읽고 정리하기 위해 작성하는 글입니다.


운영 체제에서의 작업(Job)과 프로세스(Process)


초기 컴퓨터는 작업을 실행하는 일괄 시스템(batch system)이었고, 시간이 지나면서 사용자 프로그램이나 작업을 실행하는 시간 공유 시스템(time-shared system)이 등장했다.

운영 체제는 주요 활동이 작업 처리 시기에 개발되었기에 현대에는 프로세스(process)라는 용어를 사용하지만 작업(job)이라는 용어는 역사적으로 의미가 있다. 그렇기에 운영 체제의 역할을 설명할 때 작업이라는 용어를 사용하기도 한다.



프로세스(Process)란?


프로세스실행 중인 프로그램을 나타내며 프로세스의 현재 활동 상태프로그램 카운터프로세서의 레지스터로 표현된다.

위의 그림은 메모리 속 프로세스의 레이아웃을 나타낸다.

  • 텍스트(text) 섹션은 실행 가능한 코드를 나타낸다.
  • 데이터(data) 섹션은 전역 변수를 나타낸다.
  • 힙(heap) 섹션은 프로그램 실행 시간 동안에 동적으로 할당되는 메모리를 나타낸다.
  • 스택(stack) 섹션은 함수를 호출할 때 사용되는 임시 데이터 저장소이다.
    • ex) 함수 매개변수, 반환 주소, 로컬 변수

예시) 메모리에 있는 C 프로그램의 레이아웃

  • 데이터 영역은 초기화된 데이터와 초기화되지 않은 데이터로 나뉜다.

텍스트 및 데이터 섹션은 프로그램 실행 시간 동안 크기가 변경되지 않고 고정되지만, 스택 및 힙 섹션은 프로그램 실행 중에 동적으로 축소 및 확장될 수 있다.

함수가 호출되면 함수 매개변수, 로컬 변수 및 반환 주소가 포함된 활성화 레코드(activation record)가 스택에 푸시(push)되고, 반환되면 활성화 레코드가 스택에서 팝(pop)된다. 마찬가지로 은 메모리가 동적으로 할당되면 커지고, 반환되면 축소된다.

운영 체제는 스택 및 힙 섹션이 서로를 향해 커질 때 서로 겹치지 않게 조정해야 한다.


프로그램과 프로세스


프로그램 자체는 프로세스가 아니다. 프로그램은 디스크에 저장된 명령어 목록을 포함하는 파일(실행 파일)과 같은 수동적(passive) 엔터티이지만, 프로세스는 다음에 실행할 명령어를 지정하는 프로그램 카운터와 연관된 리소스 집합이 있는 활성(active) 엔터티이다.

보통 실행 파일이 메모리에 로드되면 프로그램은 프로세스가 된다.

두 프로세스가 동일한 프로그램과 연관될 때 프로세스는 별도의 실행 시퀀스로 간주된다. 이때 텍스트 섹션은 동일하지만 데이터, 힙, 스택 섹션은 다르다.

또, 프로세스 자체가 다른 코드의 실행 환경이 될 수 있다.

  • ex) Java 프로그램은 JVM 내에서 실행되고, JVM은 로드된 Java 코드를 해석하고 해당 코드를 대신 작업하는 프로세스로 실행된다.

프로세스의 상태(Process State)


프로세스가 실행되면 상태가 변경되고, 프로세스의 상태는 부분적으로 해당 프로세스의 현재 활동에 의해 정의된다.

위의 그림은 프로세스의 상태를 나타내는 다이어그램이다.

  • new프로세스가 생성되고 있음을 나타낸다.
    • admitted되면 운영 체제가 프로세스를 ready 상태로 옮긴다.
  • ready는 프로세스가 프로세서에 할당되기를 기다리고 있다.
    • 스케줄러 디스패치(scheduler dispatch)프로세스를 CPU에 할당하여 running 상태로 옮긴다.
  • running명령어가 실행되고 있음을 나타낸다.
    • 인터럽트(interrupt)가 발생하면 실행 중인 프로세스가 강제로 중단되어 ready 상태로 돌아간다.
    • 프로세스가 특정 이벤트나 I/O 작업을 기다리는 경우 waiting 상태로 이동한다.
    • 작업이 완료되면 terminated 상태로 이동한다.
  • waiting는 프로세스가 특정 이벤트를 기다리고 있음을 나타낸다.
    • 기다리던 작업이 완료되면 ready 상태로 이동한다.
  • terminated는 프로세스가 실행을 완료했음을 나타낸다.

가장 중요한 점은 프로세서의 코어단 하나의 프로세스만을 실행할 수 있다는 점이다.

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


프로세스는 운영 체제에서 프로세스 제어 블록(process control block, PCB)로 표현된다.

위의 그림은 PCB를 나타낸다.

  • 프로세스 상태(process state)
    • new, ready, running, waiting, halted 등이다.
  • 프로그램 카운터(program counter)
    • 프로세스에 대해 다음 실행될 명령어의 주소를 나타낸다.
  • CPU 레지스터(register)
    • 누산기(accumulator), 인덱스 레지스터, 스택 포인터, 범용 레지스터 및 모든 조건(condition) 코드 정보가 포함된다.
    • 인터럽트가 발생하면 프로그램 카운터와 함께 상태 정보가 저장되어야 한다.
  • CPU 스케줄링(scheduling) 정보
    • 프로세스 우선 순위, 스케줄링 큐에 대한 포인터 및 스케줄링 매개변수가 포함된다.
  • 메모리 관리 정보
    • 기본 및 제한되는 레지스터 값페이지 테이블이나 세그먼트 테이블이 포함된다.
  • 회계(accounting) 정보
    • 사용된 CPU 양과 실제 시간, 시간 제한, 계정 번호, 작업 또는 프로세스 번호 등이 포함된다.
  • I/O 상태(status) 정보
    • 프로세스에 할당된 I/O 장치 목록, 열려 있는 파일 목록 등이 포함된다.

PCB프로세스를 다시 시작하거나 다시 시작하는데 필요한 모든 데이터와 일부 회계 데이터저장소 역할을 수행한다.

0개의 댓글