본문 바로가기

컴퓨터 사이언스/운영체제

[공룡책] 프로세스 개념 (Process Concept)

프로세스란? (Process)

- 프로세스란 실행중인 프로그램을 말한다.

- 프로세스는 현대 컴퓨팅 시스템에서 작업의 단위가 된다.

 

왜 프로세스 개념이 생기게 되었을까?

- 초기의 컴퓨터 시스템은 한 번에 하나의 프로그램만을 실행하도록 허용하였고, 이 프로그램은 시스템을 완전히 제어하고 시스템의 모든 자원에 접근할 수 있었다.

- 하지만, 오늘날의 컴퓨터 시스템은 메모리에 다수의 프로그램을 적재시켜 병행 실행할 수 있게 되었고,

- 때문에, 다양한 프로그램을 보다 견고하게 제어하고 보다 구획화해야 했으므로 프로세스의 개념을 낳게되었다.

 

프로세스의 메모리 배치

  • text section - 실행 코드
  • data section - 전역 변수
  • heap section - 프로그램 실행 중, 동적으로 할당되는 메모리
  • stack section - 함수 호출 시, 임시 데이터 저장장소 (함수 매개변수, 복귀 주소 및 지역 주소)

- text section과 data section의 크기는 고정 되어 있다.

- 하지만, heap과 stack section의 크기는 프로그램 실행 중, 동적으로 줄어들거나 늘어날 수 있다.

어떻게 생각하면 당연하다.

text section과 data section은 실행 코드와 전역 변수이므로, 프로그램 실행 시,

그 것이 유지되며, 더 늘어나거나 줄어들지 않지만,

함수가 호출되면 임시 데이터를 담은 활성화 레코드(activation record)는 stack에 pop되고

함수가 제어에서 돌아오면, stack에서 pop되고,

heap section 또한, 메모리가 동적으로 할당, 반환 될 때 마다 동적으로 커지기 때문이다.

- 이렇게 두 영역은 동적으로 그 크기가 변하기 때문에, 운영체제는 두 영역이 겹치지 않도록 해야한다.

 

프로그램과 프로세스

- 절대 프로그램과 프로세스는 같은 것이 아니다.

프로그램은 수동적 존재(passive entity)이며, 프로세스는 능동적 존재(active entity)이다.

- 실행 파일이 메모리에 적재되었을 때, 프로그램이 프로세스가 되는 것이다.

- 동일한 프로그램을 실행한다고 해서 (예를 들어, 복사본) 같은 프로세스라고 할 수 없다.

- 그 둘의 텍스트 영역은 같을지어도, 데이터/힙/스택 영역은 다를 수 있다.

- 프로세스가 실행되는 과정에서 다른 많은 프로세스를 생성하는 일은 흔하며,

이는 프로세스가 다른 프로세스를 실행시키는 환경이 될 수 있다는 것 또한 의미할 수 있다.

그 좋은 예가 바로 Java의 JVM이다.

- JVM은 Java 코드를 해석하고 그 코드를 대신하여 원 기계어를 이용해 행동을 취하는 프로세스로서 프로그램을 실행한다.

 

프로세스 상태 (Process State)

  • new : 프로세스가 생성 중 이다.
  • running: 명령어들이 실행되고 있다.
  • waiting: 프로세스가 어떤 이벤트를 기다린다.
  • ready: 프로세스가 프로세서에 할당되기를 기다린다.
  • terminated: 프로세스의 실행이 종료되었다.

- 어느 한 순간 (at any instance), 하나의 프로세서 코어에서는 오직 하나의 프로세스만이 실행될 수 있다(running state).하지만, 다수의 프로세스들이 ready, waiting 상태에 있을 수 는 있다.

 

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

- 운영체제에서 각 프로세스는 PCB에 의해 표현된다.

- PCB는 특정 프로세스와 연관된 다음과 같은 정보들을 수록한다.

  • 프로세스 상태 : 위에서 설명한 new, running, waiting ... 
  • 프로그램 카운터 : 해당 프로세스가 다음 실행할 명령어의 주소를 가리킨다.
  • CPU 레지스터들: accumulator, index register 등등..
    이 레지스터들과 프로그램 카운터는 프로세스가 다시 스케줄 될 때, 올바르게  실행되기 위해
    인터럽트 발생 시 저장되어야 한다. (프로세스 스케줄링에 대해 공부하면 더 잘 이해될 것이다.)
  • CPU-스케줄링 정보: 프로세스 우선순위, 스케줄 큐에 대한 포인터, 다른 스케줄 매개변수
  • 메모리 관리 정보: base register, limit register의 값과 페이지 테이블 또는 세그먼트 테이블 등
  • 회계(accounting) 정보: CPU 사용 시간, 경과된 실시간, 시간 제한, 계정 번호, 프로세스 번호 등
  • 입출력 상태 정보: 프로세스에 할당된 입출력 장치들, 열린 파일 목록 

- PCB는 약간의 accounting data와 프로세스를 시작, 다시 시작할 때 필요한 데이터들의 저장소 역할을 한다.

 

스레드 (Thread)

- 위 프로세스 모델은 프로세스가 단일  스레드(single thread)를 실행하는 프로그램임을 가정하고 논의하였다.

예를 들어, 사용자가 문자를 입력하면서 동시에 철자 검사기를 실행할 수 없다. (한 프로그램에 두 가지 기능이 있다.)

- 하지만, 현대 운영체제는 한 프로세스가 다수의 실행 스레드를 가질 수 있다.

예를 들어, 문자 입력, 철자 검사기가 같이 가능하다.

- 이런 특징은 여러 스레드를 병렬로 실행시킬 수 있는 멀티 코어 시스템에서 특히 이득을 얻을 수 있다.

- 스레드를 지원하는 시스템에서 PCB는 위 항목에 각 스레드에 관한 정보를 포함하도록 확장되어야 한다.

 

 

참조)

Abraham Silberschats, Greg Gagne, Peter B. Galvin. (2018). Operating System Concepts (10/E)