230904 프로세스 생명주기와 메모리

나윤빈·2023년 9월 5일
0

TIL

목록 보기
46/55

프로세스 생명주기

1. 대기 큐 (Waiting Queue)

  • Job Queue : HDD(하드디스크)에 있던 프로그램들이 메모리에 올라올 때, 만약 메인 메모리가 가득 찼거나 CPU가 다른 작업을 수행중이라면 메모리에 올라오기 전에 어느정도 기다려야 하는데, 이때 HDD의 프로그램들이 잠시 기다리는 곳을 Job Queue라고 한다.

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

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

2. 스케줄링 (Scheduling)

  • Job Scheduler : Job Queue의 프로그램들을 어떤 순서로 메모리에 올릴 것인지 결정한다. 이러한 과정은 프로그램이 새로 시작될 때 메인메모리가 가득찬 경우 등의 상황에만 발생하므로 자주 일어나진 않는데, 이처럼 긴 간격으로 동작하는 스케줄러를 Long Term Scheduler라고 한다.

  • CPU Scheduler : Ready Queue의 프로세스들을 어떤 순서로 서비스 할 것인지에 대한 스케줄러이다. 모든 스케줄링 중에서 CPU 스케줄링이 가장 중요하다. 시공유 시스템의 경우 이러한 과정은 1초에도 수십번에서 수백번 일어나기 때문에 이러한 스케줄러를 Short Term Scheduler라고 한다.

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

3. 주-보조 교환 (Swapping)

  • Swapping : 서버와 같이 여러 사용자가 하나의 메모리를 공유하는 경우에 만약 한 사용자가 자리를 비우면 그 사용자가 돌아올 때까지 해당 프로세스에 메모리를 할당 할 필요가 없다. 따라서 PCB(Process Control Block)의 CPU Time 등을 확인해서 오랫동안 동작이 없는 프로세스는 잠시 HDD로 내려놓고, 다른 프로세스를 실행하거나 기존 프로세스에 메모리를 더 할당하는 등 메모리를 더 효율적으로 활용해야 한다. 이때 동작이 없던 프로세스가 사용자가 돌아와서 작업을 수행하면 다시 HDD에서 메모리로 프로세스를 올린다.

  • 메모리에서 HDD로 내리는 작업을 Swap Out, HDD에서 다시 메모리를 올리는 작업을 Swap In이라고 하며 이렇게 임시 메모리의 목적으로 사용되는 HDD 공간을 Backing Store 혹은 Swap Device라고 한다.

  • Swapping 역시 여러 프로세스들이 HDD로 내려가고 다시 메모리로 올라오기 때문에 어떤 순서로 프로세스를 먼저 내리고 올릴지 결정해야 한다. 이러한 스케줄링 작업은 Short Term Scheduling 보다는 적게 일어나지만 Long Term Scheduling 보다는 자주 일어난다. 따라서 이러한 스케줄링 작업을 Midium Term Scheduling이라고 한다.

4. 문맥 교환 (Context Switching)

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

  • Context Switching을 전문적으로 담당하는 스케줄러는 CPU 스케줄러이다.

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

프로세스 메모리

1. Code 영역

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

2. Data 영역

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

3. Stack 영역

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

앞의 세 영역은 컴파일 할 때, data 영역과 stack 영역의 크기를 계산해 메모리 영역을 결정한다.

4. Heap 영역

  • 동적 데이터 영역이다.
  • 메모리 주소 값에 의해서만 참조되고 사용되는 영역이다. 따라서 런타임 시 크기가 결정된다.

5. 커널 (kernel)

  • 커널은 대부분의 운영체제의 주요 구성요소로 컴퓨터 하드웨어와 프로세스를 잇는 핵심 인터페이스이다.
  • 메모리 관리, 프로세스 관리, 하드웨어와 프로세스 사이에서 명령을 즉시 실행할 수 있는 역할을 수행하거나 시스템의 호출이나 보안 등의 기능을 수행한다.
  • OS에서 응용 프로그램을 조회, 강제 종료할 수 있는 기능도 커널 프로세스의 역할이다.

✔️ 프로세스 : 메모리에 올라온 프로그램
✔️ 프로세스 생명주기 : 신규 - 준비 - 수행 - 대기 - 종료
✔️ PCB : 프로세스의 실행 정보와 상태 정보를 저장하는 자료구조 (PID, PC, Register, MMU 등)
✔️ 대기 큐 (Queue) : Job, Ready, Device Queue 등
✔️ Scheduler : Job, CPU, Device Schduler 등
✔️ Swapping : 안 쓰는 프로세스 HDD로 내리고, 다시 쓰이면 메모리로 올리는 작업
✔️ Context Switching : Running 프로세스를 Ready로 만들고 다른 프로세스로 전환
✔️ Dispatcher : 컨텍스트 스위칭할 때 필요한 정보(PCB를 저장하고 꺼내는 프로그램)
✔️ CPU 시간공유 시스템 : (대부분의)OS에서 프로세스(스레드)가 시간단위로 나누어서 CPU를 사용할 수 있도록 관리해주는 시스템
✔️ 프로세스 메모리 공간 : 프로세스 주소 공간은 Code, Data, Stack, Heap 으로 구성됨
✔️ 커널 : 커널은 대부분의 운영 체제(OS)의 주요 구성 요소이며 컴퓨터 하드웨어와 프로세스를 잇는 핵심 인터페이스
✔️ PCB : 프로세스의 실행 정보와 상태 정보를 저장하는 자료구조로 커널 프로세스에 존재

profile
프론트엔드 개발자를 꿈꾸는

0개의 댓글