프로세스 메모리

최수민·2023년 8월 25일
0

정리

목록 보기
3/3
post-thumbnail

프로세스의 메모리 구조

Code 영역

  • 개발자가 작성한 프로그램 함수들이 존재합니다.

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

data 영역

  • 실제 프로그램이 사용하는 데이터 공간인데 전역변수, 정적변수, static변수등이 저장되는 부분으로 처리과정에서 쓰이거나 모든 함수에서 사용하거나 정적으로 관리되는 변하지않는 변수들을 의미합니다.

  • 이 변수들은 프로그램이 시작될 때 할당되어 프로그램 종료 시 소멸됩니다.

BSS(Block Stated Symbol) 영역? - BSS 영역에는 초기화 되지 않은 전역변수가 저장됩니다.

- 초기화 된 전역변수는 Data 영역에 저장되어 비휘발성 메모리인 ROM에 저장되는데 이 부분은 비용이 많이 들어 RAM에 저장될 것과 ROM에 저장될 것을 구분하기 위해 영역을 구분해 사용합니다.

stack 영역

  • heep에서의 수행이 끝났을때 어느곳으로 복귀해야하는지 복귀할 주소, 데이터(지역변수, 매개변수, 리턴값)등을 저장해두는 곳이라고 생각하면 됩니다.

  • 이 영역은 함수 호출시 기록하고 함수의 수행이 완료되면 사라지는데 메커니즘은 자료구조(stack)에서 배운 LIFO(Last In First Out) 방법으로 저장/출력 합니다.

  • 컴파일 시 stack 영역의 크기가 결정되기 때문에 무한정 할당 할 수 없습니다.

  • 따라서 재귀함수가 반복해서 호출되거나 함수가 지역변수를 메모리를 초과할 정도로 너무 많이 가지고 있다면 stack overflow가 발생합니다. (알고리즘 시험풀때 많이 발생!)

위 세 영역은 컴파일 할 때 data, stack 영역의 크기를 계산해 메모리 영역을 결정합니다!

heep 영역

  • 실제 프로그래머가 필요할때 사용하는 공간으로 스레드에 프로세스 작업등이 필요할때, 작업에 필요한 데이터를 저장하거나 삭제하거나 연산을 하기위해 전역적이거나 static하지 않은 변수들 즉 동적 데이터를 저장하는곳을 말합니다.

  • 이 공간은 프로그래머가 당장 사용하는 공간을 가리킵니다.

  • 메모리 주소 값에 의해서만 참조되고 사용되는 영역입니다. 따라서, 프로그램 동작 시(런타임)에 크기가 결정됩니다.

  • heap 영역은 런타임에 결정된다. 자바에서는 객체가 heap영역에 생성되고 GC에 의해 정리됩니다.

    • GC 는 Garbage Collector 의 약자로, 안쓰는 heap 영역을 치우는 쓰레기 청소부👷‍♀️입니다.

커널 프로세스의 메모리

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

Code 영역

  • 운영체제가 가지고 있는 코드들이 해당영역에 들어가게 됩니다.
  • 시스템 콜, 중단(인터럽트) 처리 코드
  • CPU, 메모리 등 자원 관리를 위한 코드
  • 편리한 인터페이스 제공을 위한 코드

Data 영역

  • 리소스들을 관리하기 위한 자료구조가 저장되어있습니다.

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

    • 현재 수행 중인 프로세스의 상태, CPU 사용 정보 등을 유지하기 위한 자료구조
    • 프로세스 제어 블록이란, 특정한 프로세스를 관리할 필요가 있는 정보를 포함하는 운영체제 커널의 자료구조 이다.
    • PCB는 각 프로세스에 대한 다양한 정보를 담고 있는 데이터로써 사람으로 따지면 주민등록증과 유사하다.
    • 각 프로세스의 PCB는 OS내부의 Process Management 부서에서 관리되며, PC, Register, MMU 정보, Process의 상태, CPU Time, PID(Process ID)등 많은 정보들이 포함된다. 구조체와 같이 구성된다.
    • 즉 간단히 말해서 운영체제가 프로세스에 대한 정보를 담고있는 구조체이다.
    • PCB는 중요한 정보들이 담겨있기 때문에 운영체제->커널 내부에 담겨진다.

Stack 영역

  • 각 Process의 커널 스택을 저장합니다.
    • 프로세스는 함수 호출시 자신의 복귀 주소를 저장하지만, 커널은 커널 내의 주소가 된다.
    • 각각의 프로세스마다 별도의 스택을 두어 관리한다.
📌 커널은 힙메모리가 없는건가요?
  • 커널은 힙메모리를 사용하지 않습니다.
  • 커널은 운영체제(리눅스)에서 동적메모리 할당을 위해 필요한 기능들을 커널이 제공하는데,
    운영체제는 커널에서 제공하는 기능을 사용해서 메모리 풀(memory pool)을 관리합니다.

✅ 정리하기

1) 프로세스 : 메모리에 올라온 프로그램

2) 프로세스 생명주기 : 신규 - 준비 - 수행 - 대기 - 종료

3) PCB : 프로세스의 실행 정보와 상태 정보를 저장하는 자료구조 (PID, PC, Register, MMU 등)

4) 대기 큐 (Queue) : Job, Ready, Device Queue 등

5) Scheduler : Job, CPU, Device Schduler 등

6) Swapping : 안쓰는 프로세스 HDD로 내리고, 다시 쓰이면 메모리로 올리는 작업

7) Context Switching : Running 프로세스를 Ready로 만들고 다른 프로세스로 전환

8) Dispatcher : 컨텍스트 스위칭할 때 필요한 정보(PCB를 저장하고 꺼내는 프로그램)

9) CPU 시간공유 시스템 : (대부분의)OS에서 프로세스(스레드)가 시간단위로 나누어서 CPU를 사용할 수 있도록 관리해주는 시스템

10) 프로세스 메모리 공간 : 프로세스 주소 공간은 Code, Data, Stack, Heap 으로 구성됨

11) 커널 : 커널은 대부분의 운영 체제(OS)의 주요 구성 요소이며 컴퓨터 하드웨어와 프로세스를 잇는 핵심 인터페이스

12) PCB : 프로세스의 실행 정보와 상태 정보를 저장하는 자료구조로 커널 프로세스에 존재

0개의 댓글