운영체제 - 프로세스 개념 ( 프로세스 메모리 레이아웃 / 생명주기 / 스케쥴링 큐( Job, Ready, Wait ) )

TopOfTheHead·2025년 7월 18일

운영체제

목록 보기
5/24

프로세스 ( Process )
。RAM에 적재되어 실행중이거나 대기 중인 프로그램
▶ CPU에서 실행되기위한 프로그램을 보조기억장치에서 찾아 RAM으로 복사된 프로그램을 의미
▶ 프로그램은 비실행된 프로그램으로서 보조기억장치에 저장된 프로그램으로 프로세스와 차이가 존재

。OS의 작업단위
▶ 운영체제는 프로그램 단위로 실행하므로

。한번에 하나의 스레드를 처리하는 프로그램
▶ 프로세스 내 복수의 스레드들의 동시실행이 불가능

。소프트웨어 스레드는 프로세스의 경량판
▶ A thread is a lightweight process : 스레드 ∈\in 프로세스

。OS는 프로세스를 Create하고 Terminate하는 Mechanism이 존재해야한다.

  • 프로세스가 필요로하는 자원
    。프로세스는 명령을 처리하기 위해 다음 Resource들을 관리할 수 있어야함.
    ▶ 프로세스에서 OS를 통해 시스템 콜을 호출하여 다음 자원에 접근하여 처리

    CPU time / Memory / Files / I/O Devices

  • 프로세스의 주소공간 주기억장치
    。프로세스가 실행 중 사용하는 주기억장치 영역
    ▶ 프로세스 마다 독립적인 주소공간을 가지며 다른 프로세스와 공유하지않음

프로세스 메모리 레이아웃 ( Process Memory Layout )

。보조기억장치에서 RAM으로 복사된 각 프로세스는 RAM 상에서 다음 영역으로 구분되어 저장되어 있으며 이러한 메모리 영역 구성을 메모리 레이아웃이라고 한다.
▶ RAM 상 높은 주소영역에 위치
▶ Text / Data / Heap / Stack

。멀티 스레딩의 프로세스의 경우 프로세스 내 스레드들은 동일한 Text Section / Data Section / Heap Section의 프로세스 주기억장치 영역을 공유하며 각 스레드들은 고유한 스레드ID / Stack / 프로그램 카운터 / 레지스터 집합를 가진다.
▶ 멀리스레딩을 통해 동일한 프로세스 자원을 공유하면서 서로 스레드 별로 독립적으로 Concurrently하게 함수를 실행


메모리 레이아웃 구조

  • Text Section :
    。프로세스의 실행가능한 명령어 코드들이 저장되는 영역
    ▶ CPU는 프로세스의 text 영역에 저장된 명령어를 FETCH

    。CPU 스케쥴러 및 CPU 스케쥴링은 Text Section 내에서 코드로 구현

    。외부에 의해 쉽게 변경되지 않도록 READ Only 속성을 지님.

  • Data Section
    。프로세스의 전역 변수 / Static 변수가 저장되는 영역

    。스케쥴링 큐의 Ready Queue와 Wait Queue는 Data Section에 저장

    。Text Section과 달리 Read Only가 아니므로 변수값은 프로그램 실행 중 동적으로 변경이 가능

    Initialized Data Section
    。초기화된 전역 변수 / Static 변수이 저장되는 영역

    Uninitialized Data Section
    。bss영역이라고 하며, 초기화되지 않은 전역 변수 / Static 변수이 저장되는 영역

  • Heap Section
    。프로세스의 런타임에서 동적으로 할당되는 메모리 공간을 저장하는 영역
    ▶ 동적 메모리 할당에 사용되는 영역

    。Java의 new keyword를 통해 객체 생성 시 저장되는 영역

  • Stack Section
    。함수 호출 시 함수의 지역변수와 매개변수가 저장되는 임시저장공간

메모리 레이아웃 예시

좌측 소스코드( a.c )를 컴파일하여 프로그램( a.out ) 생성 후 실행할 경우 프로세스로서 RAM에 적재되어 다음 메모리 레이아웃으로 구성
▶ 소스코드는 Text Section에 기계어로 컴파일 되어 저장되어 CPU에서 한줄씩 FETCH

。변수 x는 초기화가 되지않으므로 uninitialized data 영역에 저장
。변수 y는 초기화가 되므로 initialized data 영역에 저장
。argc , argv[] : 외부에서 전달되는 값
。values , i : main() 호출 시 생성되는 지역변수이므로 stack 영역에 저장
。values의 경우 malloc을 통해 Stack영역에서 Heap영역으로 저장됨
。for문의 경우 기계어 컴파일 시 명령어이므로 text영역에 저장됨

프로세스의 생명주기( Life Cycle )

。프로세스 실행 시의 Life Cycle은 5단계Queue 의 Process State로 구성

。I/O 작업 등에 의한 State 변화 시
Running ▶ Waiting ▶ Ready ▶ Running

。Process 작업시간이 초과하여 Interrupt 발생 시
Running ▶ Ready ▶ Running

  • New :
    。프로세스가 생성되고있는 상태
    ▶ 보조기억장치의 프로그램이 주기억장치로 복사되는 단계

  • Ready :
    。프로세스가 프로세서( = CPU )에게 CPU 제어권을 할당받기를 대기중인 상태
    ▶ 프로그램이 프로세스로서 주기억장치로 복사 및 CPU를 기다리는 상태

    。 Context Switching이 수행되기전에 우선 CPU에 할당 준비가 되었음을 지시하는 단계
    ▶ Running 전 반드시 거쳐가야함

    디스패치 ( Dispatch ) : CPU 디스패처
    。CPU 스케쥴러에게 선택된 프로세스를 실제로 CPU에 할당하는 과정

  • Running :
    。디스패치를 통해 선택된 프로세스가 CPU를 점유하여 명령어를 실행하고 있는 상태

  • Suspended :
    。주기억장치에 너무 많은 프로세스가 존재하여 중기 스케쥴러에 의해 선별되어 보조기억장치로 이동( = swap out )된 프로세스 상태

  • Waiting :
    。프로세스가 특정 Event의 발생을 기다리는 중인 상태

    ex ) I/O 완료 , 신호수신 등
    ▶ I/O 인터럽트가 발생 시 Context Switching에 의해 다른 프로세스로 교체되어 CPU 제어권이 회수되고 I/O가 완료될 때까지장치컨트롤러로 부터의 인터럽트 발생을 대기중일때

  • Terminated :
    。프로세스의 실행이 종료된 상태

프로세스 스케쥴링( Process Scheduling )
。RAM에서 생명주기 상 Ready 상태에 있는 프로세스 중 CPU 스케쥴링 정책에 따라 프로세스에게 CPU를 할당하는 과정
▶ 멀티프로그래밍 환경에서 시분할을 구현하기 위해 스케쥴링 큐을 사용해서 CPU 제어권을 어떤 프로세스에게 줄지 결정

멀티프로그래밍 : Multi Programming : 멀티프로그래밍
。RAM에서 적재중인 프로세스들을 단일 CPU에 의해 Context Switching을 통해 Interleaving하면서 CPU 유휴시간을 최소화하는 OS기법
▶ 프로세스가 입출력 작업 시 다른 프로세스에게 CPU 제어권을 전달하는 등 항상 CPU에서 프로세스가 실행되도록 하여 CPU 사용률을 극대화

  • Interleaving
    。'끼워넣기'라는 뜻으로서 여러 프로세스 / 스레드가 서로 번갈아 Execute 되는것을 의미
    ▶ 멀티프로그래밍을 구현

시분할 : Time Sharing :
。여러 프로세스가 단일 코어를 매우 짧은 시간( quantum )단위를 기준으로 처리하여 매우 높은 빈도로 Context Switching가 발생하도록 하여 프로세스를 교체하는 비중이 많아지게하여 작업응답시간을 최소화
▶ 시분할을 통해 Concurrency에 의해 사용자 입장에서 복수의 프로그램들이 동시에 실행되는것처럼 보이게된다.

스케쥴링 큐 ( Scheduling Queues )

。 CPU에 의해 CPU 스케쥴링에 따라 처리될 프로세스들을 관리 및 저장하는 Queue 자료구조

。Queue 자료구조는 보통 PCB로 구성된 Linked List로 구현한다

。스케쥴링 큐의 Ready Queue와 Device Queue는 프로세스 메모리 레이아웃 상 Data Section에 저장

  • 스케쥴링 큐 종류

    Job Queue
    。실행되지않은 프로그램을 저장하는 Queue 자료구조

    。보조기억장치에 저장된 New 이전 상태로 주기억장치로 복사하기 전 단계
    ▶ 프로그램이 주기억장치로 복사 시 Ready Queue로 이동

    Ready Queue :
    。프로세스가 Ready 상태로서 CPU의 코어에 의해 Execute되도록 대기하는 Queue 자료구조
    ▶ 프로세스가 시스템에 진입하거나 Waiting 상태에서 Ready로 변환된 경우 대기

    。CPU 스케쥴러를 통해 Ready Queue에서 대기중인 프로세스를 선택하여 디스패처를 통해 CPU에게 할당

    Wait Queue
    。특정 인터럽트( 장치 컨트롤러에 의한 입출력 작업 완료 )의 발생을 기다리는 Waiting 상태의 프로세스를 저장하는 Queue 자료구조
    ▶ 실행중인 프로세스가 I/O 작업을 접할 경우 작업이 오래걸리므로 Waiting 상태로 Wait Queue에서 대기

    。I/O 작업이 완료되어 인터럽트 발생 시 Wait Queue에서 Ready Queue로 프로세스를 Ready 상태로 변경 후 전달

  • 스케쥴링 큐 원리 ( Queueing Diagram )

    I/O Request :
    。실행중인 프로세스가 입출력 I/O 작업 으로 인해 CPU 반납하면서 Wait Queue로 이동
    ▶ 입출력 I/O 작업 완료되어 인터럽트 발생 시 Ready Queue로 이동

    Time Slice Expired :
    。실행중인 프로세스가 시분할을 통한 Time Slice 만료가 발생하여 CPU 점유시간이 종료된 경우 즉시 CPU 반납 및 Ready Queue로 이동

    fork a child
    。프로세스가 fork를 통한 자식 프로세스를 생성 시 CPU 반납 및 Wait Queue에서 대기
    ▶ 자식 프로세스가 Ready Queue로 이동 후 실행되어 종료된 경우 Ready Queue로 이동

    wait for an interrupt
    。프로세스가 Wait Queue에서 인터럽트 발생을 기다리다가 인터럽트 발생 시 Ready Queue로 이동

출처
。운영체제 공룡책 강의

profile
공부기록 블로그

0개의 댓글