운영체제 - 프로세스 개념 ( 프로세스 메모리 레이아웃 / 생명주기 / 스케쥴링 큐( 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 QueueWait QueueData Section에 저장

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

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

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

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

    Javanew 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단계QueueProcess State로 구성

I/O 작업 등에 의한 State 변화 시
RunningWaitingReadyRunning

Process 작업시간이 초과하여 Interrupt 발생 시
RunningReadyRunning

  • 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 QueueDevice 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개의 댓글