본문 바로가기

운영체제

프로세스(Process)

728x90
반응형

Goal

  • 프로세스란 무엇인지 설명할 수 있다.
  • 메모리 관점에서 프로세스를 그리고 설명할 수 있다.
  • 프로세스 제어 블록에 대한 이해
  • 문맥 교환(context switching)에 대해 설명할 수 있다.
  • 프로세스 상태(state)에 대해 설명할 수 있다.

프로세스(Process)란?

프로세스는 '실행중인 프로그램'을 의미한다 

 

프로그램 vs 프로세스

  • 프로그램 : 보조기억장치(하드 디스크, SSD)에 저장되어 있는 실행 코드(명령어)와 정적인 데이터의 묶음
  • 프로세스 : 실행 중인 프로그램으로, 프로그램을 더블 클릭하여 실행하면 해당 프로그램이 메모리에 적재되어 프로세스 형태로 실행된다. 즉, 프로그램을 인스턴스화 한 것이 프로세스라고 할 수 있다.

 

가상 메모리 관점에서 본 프로세스 구조

 

메모리 관점에서 보면 프로세스는 데이터 덩어리이다.

 

이러한 프로세스는 다음과 같이 크게 4가지 영역으로 구분된다.

  • 코드 영역(Code/Text Segment) : 함수 정의와 같은 코드가 실행 가능한 명령어 형태로 저장되어 있는 영역
    • 명령어 수정을 방지하기 위해 읽기 전용(Read Only)이다.
    • 프로그램 끝날 때까지 메모리에 상주
  • 데이터 영역(Data Segment) : 전역 변수(global), 정적 변수(static), 문자열 상수 등의 데이터를 보관하는 영역
  • 스택 영역(Stack Segment) : 지역변수, 매개변수 등이 저장되는 영역
    • 스택 프레임에 저장되는 값, 즉 함수 호출에 필요한 데이터를 저장하는 영역
  • 힙 영역(Heap Segment) : 동적 메모리 할당된 값들이 저장되는 영역
    • 컴파일 타임에 변수 크기를 알 수 없고 런타임 시간에 변수 크기가 결정된다.

 

코드, 데이터 영역은 프로세스 실행 직전에 위치와 크기가 결정되기 때문에 정적 할당 영역이라고 부른다.

 

반면, 스택과 힙 영역은 자유롭게 할당하고 해제할 수 있어 그 크기가 가변적이기 때문에 동적 할당 영역이라고 한다.

스택과 힙 두 영역 사이에는 빈 공간이 있으며 서로 반대방향으로 확장해 나가면서 빈 공간을 사용한다.
이때 서로의 영역을 침범해 두 공간 사이의 메모리 부족할 경우 오버플로우(stack overflow / heap overflow)가 발생하게 된다.

 

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

프로세스가 생성될 때 될 때, 운영체제는 프로세스를 제어하기 위해 필요한 정보들을 생성하는데 이러한 정보들을 담은 블록을 프로세스 제어 블록(PCB)이라고 한다.

 

특징

  • 프로세스마다 고유의 PCB를 갖는다.
  • 프로세스 실행 중에 프로세스 상태값과 같은 PCB 정보들이 갱신된다.
  • 프로세스 생성시 PCB가 할당되고, 프로세스 종료시 PCB가 풀로 반환 된다.

 

PCB에는 다음과 같은 정보들을 포함 하고 있다. (운영체제마다 포함 정보가 다를 수 있음)

  • 프로세스 식별자(PID, Process ID)
  • 프로세스 상태(Process State) : create, ready, running, waiting, terminated와 같은 프로세스 상태
  • 프로그램 카운터(PC, Program Counter) : 다음에 실행할 명령어의 주소
  • CPU 레지스터 : 실행 중이던 Register Set 정보 등을 저장
  • CPU 스케줄링 정보 : 우선 순위, 최종 실행시각, CPU 점유시간 등
  • 메모리 관리 정보 : 세그먼트 테이블(segment table), 페이지 테이블(page table), 메모리 보호 관련 정보(베이스, 경계, 한계 레지스터 관련 정보)
  • 프로세스 계정 정보 : 페이지 테이블, 스케줄링 큐 포인터, 소유자, 부모 등
  • 입출력 상태 정보 : 프로세스에 할당된 입출력장치 목록, 열린 파일 목록 등

PCB

 

멀티 태스킹(multi tasking)과 문맥 교환(context switching)

하나의 CPU 즉 프로세서는 특정 순간에 하나의 작업(task, 프로세스 또는 스레드)만 처리할 수 있다. 그런데 컴퓨터나 스마트폰을 사용할 때 동시에 여러개의 프로그램을 사용할 수 있다. 어떻게 이런 것이 가능할까?
물위를 떠가는 오리가 물속에서 발을 엄청 빠르게 움직이고 있듯이, 프로세스가 동시에 여러개가 실행될 수 있는 이유는 운영체제가 엄청나게 빠르게 CPU가 실행할 작업(task)을 교체하고 있기 때문이다. 그렇기 때문에 사람 눈에는 동시에 여러개의 프로세스가 실행되고 있다고 느껴지는 것이다.

 

이때, 하나의 CPU로 여러개의 Task(프로세스 또는 스레드)을 처리하는 것을 멀티 태스킹(multi tasking) 이라고 하며,

Task가 교체되는 것을 문맥 교환(컨텍스트 스위칭, context switching)이라고 한다.

 

context switching시 현재 진행하고 있는 Task(Process, Thread)의 상태를 저장하고 다음 진행할 Task의 상태 값을 읽어 적용시킨다.

 

process context switching

 

프로세스 상태(state)

커널 내에는 준비 큐, 대기 큐, 실행 큐 등의 자료 구조가 있으며 커널은 이것들을 이용하여 프로세스의 상태를 관리한다.

  • 생성(create) : 프로세스가 생성되는 중이다. (PCB 생성)
  • 실행(running) : 프로세스가 CPU를 차지하여 명령어들이 실행되고 있다.
  • 준비(ready) : 프로세스가 CPU를 사용하고 있지는 않지만 언제든지 사용할 수 있는 상태로, CPU가 할당되기를 기다리고 있다. 일반적으로 준비 상태의 프로세스 중 우선순위가 높은 프로세스가 CPU를 할당받는다.
  • 대기(waiting) : 보류(block)라고 부르기도 한다. 프로세스가 입출력 완료, 시그널 수신 등 어떤 사건을 기다리고 있는 상태를 말한다.
  • 종료(terminated) : 프로세스의 실행이 종료되었다. (PCB 제거)

 

프로세스 상태 전이

 

  • dispatch : ready -> running
    • 준비 상태에서 실행을 기다리던 Task가 실행 상태로 바뀌어 CPU를 점유하게 되는 것
  • block : running -> blocked
    • 실행 상태에 있던 Task가 허가된 CPU 시간을 다 쓰기 전에 입출력 동작을 필요로 하는 경우 CPU를 스스로 반납하고 대기 상태로 전이된다.
  • wakeup : block -> ready
    • 입출력 작업 종료 등 기다리던 이벤트가 발생하여 보류 상태에서 대기 상태로 전이된다.
  • timeout : running -> ready
    • 실행 중이던 Task가 작업이 할당된 CPU시간을 다 소진하여 준비 상태로 전이된다.
  • exit : running -> terminated
    • 실행 중에 Task가 작업을 완료하여 종료 상태로 전이된다.
  • swap-in : suspended ready -> ready / suspended blocked -> blocked
    • 지연 상태(지연 준비, 지연 대기)에 있다가 ready, blocked와 같은 활동 상태로 재개(resume)되는 과정
    • swap-out으로 인해 메모리에서 잠시 해제 되었던 Task를 다시 메모리에 다시 적재하는 과정
  • swap-out : ready -> suspended ready / blocked -> suspended blocked / running -> suspended ready
    • running, ready, blocked 와 같이 활동 상태(active)에 있다가 지연 상태(suspended)로 전이되는 과정
    • Task를 메인 메모리에서 쫒아내 swap file 형태로 secondary memory에 저장

 

<참고> 스왑 영역

더보기

메모리는 크기가 크지 않기 때문에 프로세스를 임시로 디스크에 보냈다가 다시 메모리에 로드해야 하는 상황이 생긴다. 이처럼 메모리로부터 쫒겨난 프로세스가 저장되는 영역을 스왑 영역(swap space / swap area)이라고 한다.

 

이 때, 스왑 영역으로 내보내는 것을 swap out, 메모리로 들여보내는 것을 swap in이라고 하며, 우선 순위에 따라 어떤 프로세스를 swap in/out할지 결정한다.

 

*swapping : swap-in / swap-out 을 하는 과정

시스템 용량 확보, 시스템 성능 확보, 시스템 안정성 확보 등의 목적으로 swapping이 발생하여 지연 상태(suspended)가 발생할 수 있다.

 

 

References

프로세스가 뭐지?

728x90
반응형

'운영체제' 카테고리의 다른 글

스케줄링(Scheduling)  (0) 2020.11.03
스레드(Thread)  (0) 2020.10.24
메모리(memory)  (0) 2020.10.06
중앙처리장치(CPU) - 5 (병렬 컴퓨팅, 병렬 컴퓨터)  (0) 2020.09.30
중앙처리장치(CPU) - 4 (명령어 파이프라인)  (0) 2020.09.28