Post

CS - 3. 프로세스 생명주기와 프로세스 메모리

CS - 3. 프로세스 생명주기와 프로세스 메모리

Sparta 내일배움캠프 학습으로, CS강의에 대한 공부를 위한 필기입니다.

01. 프로그램과 프로세스


  • 프로그램이 저장되어 있는 곳 = 보조기억장치 ex) HDD

  • 프로그램이 로딩되는 곳 = 주기억장치 -> OS에서 켜져있는 프로그램

  • 프로그램을 실행해주는 주체 = 프로세스

    프로세스 : 컴퓨터에서 실행 중인 프로그램

  • 작업을 처리해 주는 주체 = 쓰레드

    카카오톡에서 메시지 발생을 처리하는 작업 : 쓰레드 , 카카오톡 : 프로세스


02. 프로세스 생명주기


2-1. 프로세스 상태 (Status)

📌 신규(New) :

  • 프로세스가 이제 막 메인 메모리에 올라온 상태

  • 아직 실행 불가능
  • 수용 동작을 거쳐야 준비 단계로 넘어감

1


📌 준비(Ready)

  • 변수 초기화 등 기초 준비작업을 모두 끝나고 실행을 할 수 있는 상태

  • 스케줄러를 통해 발송(dispatch)되어야 수행 상태가 됨.

  • 준비상태 - 신규 프로세스가 수용됨. - 대기 프로세스의 입출력/이베트가 완료됨 - 수행 프로세스가 중단됨.

1


📌 수행(Running)

  • CPU가 실제로 프로세스를 수행하고 있는 상태

  • 선점 스케줄링에 의해 중단되면 준비상태로
  • 입출력/이벤트가 필요하면 대기상태로
  • 수행이 완료되면 종료상태로

1

1
2
3
4
5
6
7
💡 수행상태 해제되는 경우
- 수행 -> 준비(중단) 
	- CPU의 과부하가 판단되는 경우

- 수행 -> 대기
	- I/O event wait가 있을 경우 
	- 이후 I/O나 event가 끝나면 ready 상태로 복구


📌 대기(Watinig)

  • 프로세스 도중에 I/O 작업이 필요하여 I/O 작업을 수행하는 상태

  • CPU는 I/O를 기다리며 다른 프로세스를 수행
  • 대기 상태가 끝나면 프로세스는 다시 준비 상태가 되고, 잠시 후 다시 수행 상태가 됨.

1


📌 종료(Terminated)

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

1


2-2. 대기큐(Waiting Queue)

  • 1️⃣ Job Queue

    • HDD에 있던 프로그램들이 메모리에 올라올 때, 메인 메모리가 가득 찼거나 CPU가 다른 작업을 수행 중이라면 메모리에 올라오기 전에 어느정도 기다려야 하는데 HDD의 프로그램들이 잠시 기다리는 곳을 Job Queue라고 함.
  • 2️⃣ Ready Queue

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

    • I/O장치를 이용하려면 기존 I/O 작업이 끝나기를 기다렸다가 밀려있던 모든 작업이 끝나면 I/O 장치를 사용할 수 있음.
    • 각각 I/O 장치들(프린터는 프린터큐, 마우스는 마우스 큐 둥)은 각자의 대기 큐를 가지고 있는데 이러한 I/O 장치들을 통틀어서 Device Queue라고 함.
1
2
❓ Terminated는 왜 대기큐가 없을까?
	: 프로세스가 종료될 때는 기다릴 필요 없이 바로 종료되기 때문에


2-3. 스케줄링(Scheduling)

  • 1️⃣ Job Scheduler

    • Job Queue의 프로그램들은 어떤 순서로 메모리에 올릴 것인지 결정함.
    • 프로그램이 새로 시작될 때, 메인 메모리가 가득찬 경우 등의 상황에만 발생해서 자주 일어나지 않고 어쩌다 한번 일어남.
    • Long Term Scheduler
  • 2️⃣ CPU Scheduler
    • Ready Queue의 프로그램들을 어떤 순서로 서비스 할 것인지에 대한 스케줄러
    • 모든 스케줄러 중에 가장 중요
    • Short Term Scheduler : 이러한 과정은 1초에도 수십번, 많게는 수백번도 일어남
  • 3️⃣ Device Scheduler
    • Device Queue의 프로세스들을 어떤 순서로 I/O장치를 처리할 것인지에 대한 스케줄러


2-4. 주-보조 교환 (Swapping)

  • Swapping
    • 서버와 같이 여러 사용자가 하나의 메모리를 공유하는 경우, 만약 한 사용자가 자리를 비우면 그 사용자가 돌아올 때까지 해당 프로세스에 메모리를 할당할 이유가 없음

    • PCB의 CPU Time등을 확인해 오랫동안 동작이 없는 프로세스는 잠시 HDD로 내려놓고, 다른 프로세스를 실행하거나 기존 프로세스에 메모리를 더 할당하는 등 메모리를 더 효율적으로 활용

    • 동작이 없던 프로세스 사용자가 돌아와서 작업을 수행하면 다시 HDD에서 메모리로 프로세스를 올림

    • Swap Out
      • 메모리에서 HDD로 내리는 작업
    • Swap In
      • HDD에서 다시 메모리로 올리는 작업
    • 임시 메모리의 목적으로 사용되는 HDD 공간을 Backing Store 혹은 Swap Device 라고 함.
1
2
3
4
💡 Midium Term Sheduler
	- Swapping 역시 여러 프로세스들이 HDD로 내려가고 
	다시 메모리로 올라오고 하기 때문에 어떤 순서로 프로세스를
    먼저 내리고 올릴지 결정해야 함.


2-5. 문맥 교환 (Context Switching)

  • 1️⃣ Context Switching :

    • CPU 시간공유 시스템의 경우 일정 시간이 지나면 기존 프로세스를 준비 상태로 만들고 다른 프로세스를 수행 상태로 만들어서 실행함.
    • 이렇게 실행하는 프로세스를 Switch 하는 것을 통틀어서 Context Switching 이라고 함.
  • 2️⃣ Scheduler
    • Context Switching을 전문적으로 담당하는 스케줄러는 CPU Scheduler
  • 3️⃣ Dispatcher
    • 만일 프로세스 A의 코드 중 100번 라인까지 실행했고 작업 중에 10개의 데이터를 레지스터에 저장했었다면, 스위치 할 때 이 정보들을 보존해야 A의 차례가 돌아왔을 때 이전에 수행하던 작업이 끊기지 않고 수행될 수 있음.

    • 프로세스 A를 수행하다가 B로 넘어가면 그러한 정보를 저장하고 다시 A의 차례가 왔을 때 정보를 다시 꺼내서 PC, SP, Register 등에 할당함. 이러한 작업을 수행하는 프로그램을 Dispatcher라고 함


03. 프로세스 메모리


3-1. 프로세스 메모리 구조

1

위에서부터 아래로 갈수록 높은 메모리 주소로 감

  • 1️⃣ Code 영역

    • 실행할 프로그램의 코드가 저장, CPU는 명령어를 하나씩 가져와 처리
  • 2️⃣ Data 영역
    • 전역변수와 정적변수가 저장, 이 변수들을 프로그램이 시작될 때 할당되어 프로그램 종료 시 소멸

    • BSS 영역

      • 초기화 되지 않은 전역변수가 저장
      • 초기화된 전역변수는 Data영역에 저장되어 비휘발성 메모리인 ROM에 저장되는데 이 부분은 비용이 많이 들기 때문에 RAM, ROM 영역을 구분해 사용
  • 3️⃣ Stack 영역
    • 호출된 함수의 수행을 마치고 복귀할 주소 및 데이터를 임시로 저장하는 공간

    • 함수 호출시 기록, 함수 수행이 완료되면 사라짐, 메커니즘은 자료구조(stack)에서 배운 LIFO 방법으로 저장/출력
    • 컴파일 시 stack 영역의 크기가 결정되기 때문에 무한정 할당 할 수 없음
    • 재귀함수가 반복해서 호출하거나 함수가 지역변수 메모리를 초과할 정도로 너무 많이 가지고 있다면 stack overflow 발생
  • 4️⃣ Heap 영역
    • 동적 데이터 영역

    • 메모리 주소 값에 의해서만 참조되고 사용되는 영역으로 프로그램 동작 시에 크기가 결정
    • heap 영역은 런타임에 결정되고 자바에서는 객체가 heap 영역에 생성되고 GC에 의해 정리됨.

      GC(Garbage Collector) : 안쓰는 heap영역을 치움


3-2. 커널 프로세스 메모리

📌 커널(Kernel)

  • 커널은 OS의 주요 구성 요소로 컴퓨터 하드웨어와 프로세스를 잇는 핵심 인터페이스, 두가지 관리 리소스에서 최대한 효과적으로 통신함

    커널 != 운영체제로, 커널은 운영체제의 주요 구성요소임

  • 커널은 메모리 관리, 프로세스 관리, 하드웨어와 프로세스 사이에서 명령을 즉시 실행할 수 있는(인터프리터) 역할을 수행하거나 시스템의 호출이나 보안 등의 기능 수행

  • 대부분 OS에서 커널은 하나의 프로세스가 아니라 컴퓨터 하드웨어와 프로세스를 잇는 인터페이스로 봐야 함.


  • 1️⃣ Code 영역

    • 시스템 콜, 중단(인터럽트) 처리 코드

    • CPU, 메모리 등 자원관리를 위한 코드
    • 편리한 인터페이스 제공을 위한 코드
  • 2️⃣ Data 영역
    • CPU, Memory 등 HW 자원을 관리하기 위한 자료구조가 저장

    • PCB(Process Controll Block) 자료구조가 저장

      • 현재 수행 중인 프로세스 상태, CPU 사용 정보 등을 유지하기 위한 자료구조

      • OS가 프로세스에 대한 정보를 담고있는 구조체
      • 중요한 정보들이 담겨있기 때문에 OS-> 커널 내부에 담겨짐
  • 3️⃣ Stack 영역
    • 각 프로세스의 커널 스택을 저장
      • 프로세스는 함수 호출시 자신의 복귀 주소를 저장하지만, 커널 내의 주소가 됨
1
2
3
4
5
6
❓ 커널은 힙메모리가 없는가?
- 커널은 힙메모리를 사용하지 않음.

- 커널은 OS에서 동적메모리 할당을 위해 필요한 기능들을 커널이 
제공하는데 OS는 커널에서 제공하는 기능을 사용해서 메모리 풀
(memory pool)을 관리함
This post is licensed under CC BY 4.0 by the author.