OS Concepts 10th

[OS] 3-1. 프로세스 개념

patrick-star 2023. 9. 4. 08:39
728x90

OS를 논의할 때 모든 CPU 활동어떻게 지칭해야 하는지가 항상 문제가 된다.

  • 초창기 컴퓨터 ⇒ 작업(job)을 실행하는 일괄처리 시스템
  • 시분할 시스템 ⇒ 사용자 프로그램 또는 태스크(task)를 실행하는 시스템
  • 단일 사용자 시스템 ⇒ 워드 프로세서, 웹 브라우저와 같은 여러 프로그램을 한 번에 실행할 수 있다.
  • 임베디드 장치 ⇒ 멀티 태스킹을 지원하지 않아서 한 번에 하나의 프로그램만 실행할 수 있다.

여러 측면에서 이러한 모든 활동들은 유사하므로 이러한 모든 활동을 프로세스(process)라고 한다.

대부분은 프로세스라는 용어도 사용할 것이지만 작업(job)이라는 단어가 사용될 때 많은 OS 이론 및 용어가 개발되었기 때문에 적절한 경우에는 작업(job)이라는 단어를 사용할 것이다.

1. 프로세스

비공식적으로 프로세스실행 중인 프로그램이다. 프로세스의 현재 활동 상태는 프로그램 카운터(Program Counter, PC) 값과 프로세서 레지스터의 내용으로 나타낸다.

  • 프로세스의 메모리 배치

1) 스택(stack) : 함수를 호출할 때 사용하는 임시 데이터 저장장소 (ex. 함수 매개변수, return 주소, 지역 변수 ⇒ 이 정보들을 모두 갖고 있는 걸 활성화 레코드(activation record)라고 다)
2) 힙(heap) : 프로그램 실행 중에 동적으로 할당되는 메모리
3) 데이터(data) : 전역 변수
4) 텍스트(text) : 실행 코드

3), 4)은 크기가 고정되어 있기 때문에 프로그램 실행 시간(runtime) 동안 크기가 변하지 않는다.
1), 2)는 프로그램 실행 중에 동적으로 줄거나 커질 수있다.

1)은 함수가 호출될 때 마다 활성화 레코드가 스택에 저장되고 함수 동작이 완료되면 스택에서 삭제된다.
2)는 메모리가 동적으로 할당됨에 따라 에 저장되는 데이터가 늘어나고 동적 할당이 해제되면 힙에 저장된 데이터가 줄어든다.

그리고 1)과 2)는 서로의 방향으로 커지더라도 OS는 절대 이 두 영역이 겹치도록 하면 안 된다.

실행 파일이 메모리에 적재(load)될 때 프로그램은 프로세스가 된다.

또한, 각각의 프로세스들이 동일한 프로그램과 연관될 수 있지만, 각 프로세스들은 별도로 실행하는 걸로 간주된다.
이에 대해서는 3.4에서 자세하게 다룬다.

2. 프로세스 상태

프로세스의 상태는 그 프로세스의 현재 활동에 따라서 정의된다.

  • New : 프로세스 생성 중
  • Running : 명령어들이 실행되고 있음
  • Waitiing : 프로세스가 어떤 이벤트가 일어나길 대기
  • Ready : 프로세스가 processor(처리기)에 할당되기를 대기
  • Terminated : 프로세스 실행 종료

OS에 따라서 명칭을 다르게 표현할 수는 있겠지만 대체적으로 이러한 상태들을 모든 시스템에서 찾아볼 수 있다.
하나의 processor 코어한 번에 하나의 프로세스만 실행된다는 것을 알고 있어야 한다. 그리고 여러 개의 프로세스가 Ready 또는
Waiting 상태에 있을 수 있다.

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

각각의 프로세스는 OS에서 PCB에 의해 표현된다. 아래 그림은 PCB를 나타내는 그림이다.

PCB는 특정 프로세스와 연관된 여러가지 정보를 갖고 있다.

  • process state : 2절에서 다룬 프로세스 상태를 저장한다.
  • process counter : 이 프로세스가 다음에 실행할 명령어의 주소를 가리킨다.
  • CPU registers : 컴퓨터의 구조에 따라 CPU 레지스터는 다양한 수와 유형을 갖는다. accumulator, 인덱스 레지스터, 스택 레지스터, 범용 레지스터, 상태 코드(condition code) 정보가 포함된다. 이후에 프로세스가 다시 스케줄 될 때 지속적으로 올바르게 실행하기 위해서 인터럽트 발생 시 저장되어야 한다.
  • CPU 스케쥴링 정보 : 프로세스 우선순위, 스케줄 큐에 대한 포인터와 다른 스케줄 매개변수를 포함 (5장에서 자세히 다룸)
  • 메모리 관련 정보 : OS가 사용하는 메모리 시스템에 따라 base 레지스터, limit 레지스터의 값, 페이지 테이블 등과 같은 정보를 포함한다. (9장 참조)
  • accounting 정보 : CPU 사용 시간과 경과된 실시간, 시간 제한, 계정 번호, job 또는 process 번호 등을 포함한다.
  • 입출력 상태 정보 : 이 프로세스에 할당된 입출력 장치들과 열린 파일(open file)의 목록 등을 포함한다.

요약하면, PCB는 어느 정도의 accounting 정보와 함께 프로세스를 시작시키거나 재시작할 때 필요한 모든 데이터를 위한 저장소 역할을 한다.

4. 쓰레드 (Thread)

지금까지 논의한 프로세스 모델은 단일 쓰레드를 실행하는 프로그램에 대해서 다뤘다.

예를 들면, 하나의 쓰레드Word 프로그램을 실행하고 있다면 실행되는 명령어의 단일 쓰레드가 존재한다.
이 단일 제어 쓰레드는 프로세스가 한 번에 단 한 가지 일만 실행하도록 허용한다. 때문에 문자를 입력하면서 오타 검사를 동시에 실행할 수 없다.

현대 OS는 프로세스의 개념을 확장해서 하나의 프로세스다수의 쓰레드를 실행할 수 있도록 허용했다.
즉, 문자를 입력하면서 오타 검사를 동시에 실행할 수 있다.

이와 관련된 내용은 4장에서 자세히 살펴보자.

'OS Concepts 10th' 카테고리의 다른 글

[OS] 3-3. 프로세스에 대한 연산  (0) 2023.09.06
[OS] 3-2. 프로세스 스케쥴링  (0) 2023.09.05
[OS] Chapter 3. Process  (0) 2023.09.03
[OS] 2-8. OS 구조  (0) 2023.09.02
[OS] 2-5. 링커와 로더(Linker and Loader)  (0) 2023.09.02