본문 바로가기
운영체제/프로세스

운영체제) 프로세스(Process)

by Dev.Andy 2023. 4. 9.

수정일: 2023-12-27 (수)

목차

    머리말

    들어가기 전에

    이전 내용 - 운영체제의 구조

    이전 포스팅에서 운영체제의 전체적인 구조에 대해서 알아 보았다면, 이제는 프로세스에 대해 배울 차례다.

    포스팅 개요

    프로세스의 정의와 배치, 상태에 대해 살펴 보고 프로세스 제어 블록이 무엇인지 알아 보자.

    프로세스(Process)

    1. 프로세스의 정의

    A process is a program in execution.
    프로세스는 실행 중인 프로그램을 의미한다.

    프로세스는 디스크에 있던 프로그램이 메모리에 올라가 실행되는 것을 의미한다. 메모리 시간에 보다 더 자세히 배우겠지만, 메모리로 바로 올라가지는 않고, 가상 메모리에서 매핑하는 과정을 거쳐서 물리 메모리로 올라간다.

    2. 프로세스의 메모리 구조

    프로세스의 메모리 구조
    프로세스의 메모리 구조

    하나의 프로세스에 대한 메모리 구조는 아래와 같다.

    1. 텍스트(Text): 실행 가능한 코드, 코드(Code)라고도 한다.
    2. 데이터(Data): 전역 변수
    3. 힙(Heap): 프로그램이 실행하는 동안 동적으로 할당된 메모리
    4. 스택(Stack): 함수를 실행할 때 생성되는 일시적인 데이터 공간(함수의 매개변수와 반환 주소, 지역 변수)
    • 여기서 텍스트와 데이터는 프로그램이 실행하는 동안 크기가 변하지 않지만,
    • 스택과 힙은 프로그램의 실행 동안 동적으로 크기가 줄거나 늘어날 수 있다.
    • 이 중 스택(Stack)은 재귀(Recursion)에 대해 다루었을 때 자세히 다루었다.

    (이미지 출처:

    Silbershatz, Abraham, Peter B. Galvin, and Greg Gagne. Operating System Concepts. 10th ed.,

    (New Jersery: John Wiley & Sons, 2018), 106.)

    3. 프로세스의 상태(Process State)

    프로세스가 실행이 되면 상태(state) 또한 바뀌게 되는데, 프로세스의 상태는 현재 프로세스의 상황에 따라 분류할 수 있다.

    프로세스의 5가지 상태
    700프로세스의 상태는 크게 5가지로 나뉜다.

    (이미지 출처: Silbershatz, Galvin, and Gagne. Operating System Concepts. 10th ed.,

    (New Jersery: John Wiley & Sons, 2018), 109.)

    5가지 종류의 프로세스 상태

    상태 내용
    생성(new) 프로세스가 생성된 상태.
    준비(ready) 프로세서(흔히 CPU)를 할당 받기 위해 기다리는 상태.
    실행(running) 프로세서를 차지하여 실제로 명령어를 실행하는 상태.
    대기(waiting) 프로세스가 실행 중에 입출력이나 이벤트가 발생하여 이것이 완료되기를 기다리는 상태.
    종료(terminated) 프로세스가 실행을 모두 완료한 상태.

     

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

    각 프로세스의 상태 정보를 저장하는 곳

    운영체제는 프로세스를 실제로 제어(control) 할 때 해당 프로세스의 여러 상태 정보를 프로세스 제어 블록(이후 PCB)에 저장한다.

    프로세스 제어 블록(PCB)의 정보
    프로세스 제어 블록(PCB)가 담고 있는 정보

    • 프로세스 상태(process state): 위에서 살펴 본 프로세스의 상태(생성과 준비, 실행, 대기, 종료 등)에 대한 정보가 여기에 들어 간다.
    • 프로그램 카운터(program counter): 현재 프로세스에서 다음에 실행될 명령어의 주소를 표시한다.
    • CPU 레지스터(CPU registers): 레지스터는 컴퓨터 구조에 따라 수나 형태가 모두 다르다. 일반적으로는 누산기(accumulator), 인덱스 레지스터(index registers), 스택 포인터(stack pointers) 등을 포함한다. 인터럽트가 발생할 경우, 추후에 다시 스케줄링에 의해 프로세스가 실행될 때 잘 작동할 수 있도록, 프로그램 카운터와 같이 상태 정보를 저장한다.

    (이미지 출처:

    Silbershatz, Galvin, and Gagne. Operating System Concepts. 10th ed.,

    (New Jersery: John Wiley & Sons, 2018), 109.)

    꼬리말

    스레드(Threads)

    스레드에 대한 내용은 여기서는 간단하게 다룰 것이다.

    • 스레드(thread)는 프로세스의 실행 단위이다. 따라서 하나의 프로세스는 최소 하나의 스레드를 갖고 있다.
    • 하지만 오직 하나의 스레드로는 프로세스에서 한 번에 하나의 작업만 수행할 수 있다.
    • 대부분의 현대 운영체제는 한 번에 두 개 이상의 작업 수행을 위해, 하나의 프로세스에 멀티 스레드(multi-threading)의 실행을 하도록, 프로세스의 개념을 확장했다.
    • 멀티 스레드의 환경을 가능하도록 하기 위해 PCB에서도 각 스레드의 정보를 저장하도록 했다.
    • PCB 말고도 멀티 스레드의 실행을 위하여, 운영체제의 전체적인 부분에서 개편이 필요하다.

    댓글