프로세스 생명주기, 프로세스 메모리

김민재·2024년 12월 28일
0

프로세스 생명주기

프로세스 상태변화 = 프로세스 생명주기

프로세스의 상태 정리

1.신규(New):

  • 프로세스가 이제 막 메인메모리에 올라온 상태입니다.
  • 아직, 실행하는 것은 불가능합니다.
  • 수용 동작을 거쳐야 준비단계로 넘어갑니다

2.준비(Ready):

  • 변수 초기화 등 기초 준비작업을 모두 끝나고 실행을 할 수 있는 상태입니다.
  • 스케쥴러를 통해 발송(dispatch)되어야 수행상태가 됩니다.
  • 아래 케이스를 통해 준비상태가 됩니다.
    • 신규 프로세스가 수용됨
    • 대기 프로세스의 입출력/이벤트가 완료됨
    • 수행 프로세스가 중단됨

3.수행(Running):

  • CPU가 실제로 프로세스를 수행하고 있는 상태입니다.
  • 선점 스케쥴링에 의해 중단되면 준비상태로
  • 입출력/이벤트가 필요하면 대기상태로
  • 수행이 완료되면 종료상태가 됩니다.
  • 아래 케이스를 통해 수행상태가 됩니다.
    • 준비 프로세스가 스케쥴러를 통해 발송됨

4.대기(Waiting):

  • 프로세스 도중에 I/O 작업이 필요하여 I/O 작업을 수행하는 상태입니다.
  • 이 때 CPU는 I/O를 기다리며, 다른 프로세스를 수행합니다.
  • 대기 상태가 끝나면 프로세스는 다시 준비 상태가 되고, 잠시 후 다시 수행 상태가 됩니다.

5.종료(Terminated):

  • 최종적으로 프로세스가 종료된 상태입니다.
  • 사용하던 메모리 영역이 해제됩니다.

예외:
시공유 시스템에서는 수행 상태에서 할당된 시간이 종료(Expired)되면, 대기 상태를 거치지 않고 바로 준비 상태로도 변할 수 있다. 중단(inturrept)과 같이 동작

대기 큐(Waiting Queue)

큐 종류 정리

1.Job Queue:

  • HDD에 있던 프로그램들이 메모리에 올라올 때, 메인 메모리가 가득 찼거나 CPU가 다른 작업을 수행중이라면 대기를 해야하는데 HDD의 프로그램들이 잠시 대기하는 곳을 Job Queue라고 한다.
  1. Ready Queue :
  • 메인메모리에 프로그램이 올라왔다고 하더라도 바로 CPU의 서비스를 받을 수 있는 것은 아닙니다.
  • 다른 프로그램이 수행 중이면 기다렸다가, 해당 프로그램이 I/O를 시작하거나, 시공유시스템의 경우 기존 프로세스가 시간초과되면 실행됩니다.
  • 이렇게 이미 메모리에 올라온 프로세스들이 실행을 위해 대기하는 곳을 Ready Queue라고 합니다.

3) Device Queue :

  • I/O장치 (e.g. 프린터, 키보드, 마우스 등)을 이용하려면 기존 I/O 작업이 끝나기를 기다렸다가 밀려있던 모든 작업이 끝나면 비로소 I/O장치를 사용할 수 있습니다.
  • 프린터는 프린터큐, 마우스는 마우스큐, 키보드는 키보드큐와 같이 각각 I/O 장치들은 각자의 대기 큐를 가지고 있는데, 이러한 I/O 장치들의 큐들을 통틀어서 Device Queue라고 부릅니다.

스케줄링

1.Job Scheduler:

  • Job Queue의 프로그램들을 어떤 순서로 메모리에 올릴 것인지 결정합니다.
  • 이러한 과정은 프로그램이 새로 시작될 때, 메인메모리가 가득찬 경우 등의 상황에만 발생하므로 자주 일어나지 않고 어쩌다 한번(수분 ~ 수십분) 일어납니다.

긴 간격에 동작하는 스케줄러를 Long Term Scheduler라고 함

2.CPU Scheduler:

  • Ready Queue의 프로세스들을 어떤 순서로 서비스 할 것인지에 대한 스케줄러입니다.
  • 모든 스케줄링 중에서 CPU 스케줄링이 가장 중요합니다.

시공유 시스템(하나의 메모리에 다수의 사용자가 연결하여 각 사용자당 일정시간 동안 CPU를 점유할 수 있게 하는 시스템)의 경우, 1초에 수십,수백번도 일어나기에 Short Term Scheduler라고도 한다.

3.Device Scheduler:

  • Device Queue의 프로세스들을 어떤 순서로 I/O 장치를 이용하게 할 것인지에 대한 스케줄러입니다.
  • 이는 Disk Scheduler, Printer Scheduler, Mouse Scheduler 등 I/O, 보조기억 장치 스케줄러를 통틀어 가리키는 말입니다.

I/O Bound Process VS CPU Bound Process

  • I/O Bound Process
    • 대부분의 시간을 I/O하는데 쓰는 프로세스들을 의미합니다.
  • CPU Bound Process
    • 대부분의 시간을 CPU로 연산하는데 쓰는 프로세스를 의미합니다.

✅ 운영체제(Job Scheduler)는 이들을 적절하게 배합하여 I/O 장치와 CPU 모두 너무 오랫동안 쉬게하지 않아야합니다. (성능을 위해)

주-보조 교환(Swapping)

서버에서 다수의 사용자가 하나의 메모리를 공유하는 경우(시공유 시스템)에는 만약 한 사용자가 자리를 비우면 사용자가 돌아올 때 까지 해당 프로세스에 메모리를 할당할 이유가 없다.
==> PCB(Process Control Block)의 CPU Time등을 확인해서 오랫동안 동작이 없는 프로세스는 잠시 HDD로 보내고, 다른 프로세스를 실행하거나 기존 프로세스에 메모리를 더 할당하는 등으로 메모리를 효율적으로 활용한다.

Swap Out - 메모리 -> HDD
Swap In - HDD -> 메모리
임시 메모리 목적으로 사용되는 HDD 공간을 Backing Store, Swap Device라고 한다.

Swapping은 여러프로세스들이 HDD -> 메모리, 메모리 -> HDD가 반복되끼 때문에 어떤 순서로 프로세스를 먼저 내리고 올릴지 결정해야한다.
이런 반복은 Short보단 적지만 Long Scheduling보다 자주 일어나므로 Midium Term Scheduling이라고 한다.

문맥 교환 (Context Swithing)

1.Context Switching:

  • CPU 시간공유 시스템의 경우 일정 시간이 지나면 기존 프로세스를 준비 상태로 만들고 다른 프로세스를 수행 상태로 만들어서 실행합니다.
  • 이렇게 실행하는 프로세스를 Switch 하는 것을 통틀어서 Context Switching 이라고 합니다.

2.Scheduler:

  • Context Switching을 전문적으로 담당하는 스케줄러는 위에서 배운 CPU 스케줄러 입니다.
  • CPU 스케줄러는 Ready Queue에 대기 중인 프로세스를 어떤 순서로 실행시킬 것인지에 대한 스케줄러입니다.

3.Dispatcher:

  • 만일 프로세스 A의 코드 중 100번 라인까지 실행했고 작업 중에 10개의 데이터를 레지스터에 저장했었다면, 스위치할 때 이 정보들을 보존해야 A의 차례가 돌아왔을 때 이전에 수행하던 작업이 끊기지 않고 수행될 수 있습니다.
  • 때문에 프로세스 A를 수행하다가 B로 넘어가면 그러한 정보를 저장하고, 다시 A의 차례가 왔을 때, 정보를 다시 꺼내서 PC, SP, Register 등에 할당합니다.
  • 이러한 작업을 수행하는 프로그램을 Dispatcher라고 합니다.

프로세스 메모리


1.Code 영역

  • 실행할 프로그램의 코드가 저장, CPU는 Code 영역에서 명령어를 하나씩 가져와 처리한다.

2.Data 영역

  • 전역변수와 정적변수가 저장
  • 이 변수들은 프로그램이 시작될 때 할당되어 프로그램 종료 시 소멸된다.
  • BSS(Block Stated Symbol) 영역
    • BSS 영역에는 초기화 되지 않은 전역변수가 저장됩니다.
    • 초기화 된 전역변수는 Data 영역에 저장되어 비휘발성 메모리인 ROM에 저장되는데 이 부분은 비용이 많이 들어 RAM에 저장될 것과 ROM에 저장될 것을 구분하기 위해 영역을 구분해 사용합니다.

3.Stack 영역

  • 호출된 함수의 수행을 마치고 복귀할 주소 및 데이터(지역변수,매개변수,리턴값 등)를 임시로 저장하는 공간
  • 이 영역은 함수 호출시 기록하고 함수의 수행이 완료되면 사라진다.
    (자료구조 - LIFO(Last In First Out) 방법으로 저장/출력)
  • 컴파일 시 stack 영역의 크기가 결정되 때문에 무한정 할당 할 수 없다.
  • 재구함수가 반복해서 호출되거나 함수가 지역변수를 메모리를 초과할 정도로 너무 많이 가지고 있다면 stack overflow가 발생한다.

4.Heap 영역

  • 동적 데이터 영역이다.
  • 메모리 주소 값에 의해서만 참조되고 사용되는 영역입니다. 따라서, 프로그램 동작 시(런타임)에 크기가 결정됩니다.
    • 예를 들어, stack에서 pointer 변수를 할당하면 pointer가 가리키는 heap 영역의 임의의 공간부터 원하는 크기만큼 할당해 사용하게 됩니다.
  • heap 영역은 런타임에 결정된다. 자바에서는 객체가 heap영역에 생성되고 GC에 의해 정리됩니다.
    • GC 는 Garbage Collector 의 약자로, 안쓰는 heap 영역을 치우는 쓰레기 청소부👷‍♀️입니다.
profile
ㅇㅇ

0개의 댓글