[CS] 프로세스 메모리

말랑이·2025년 2월 15일

CS

목록 보기
6/10

1. 프로세스 메모리

1️⃣ 프로세스 메모리 구조

📌 Code 영역

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

📌 Data 영역

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

📌 Stack 영역

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

📌 Heap 영역

  • 동적 데이터 영역
  • 메모리 주소 값에 의해서만 참조되고 사용되는 영역
    → 프로그램 동작 시(Runtime), 크기가 결정됨
    • ex) Stack에서 pointer 변수를 할당하면 pointer가 가리키는 heap 영역의 임의 공간부터 원하는 크기만큼 할당해 사용함
  • Java에서는 객체가 Heap 영역에 생성되고 GC에 의해 정리됨
    • GC : Garbage Collector (= heap 영역을 치우는 청소부)

2️⃣ 커널 (kernel)

  • 대부분의 운영체제의 주요 구성요소
  • 컴퓨터 하드웨어와 프로세스를 잇는 핵심 인터페이스
    • (커널 == 운영체제)가 아니라 커널은 운영체제의 주요 구성요소
  • 커널의 역할
    • ① 메모리 관리
    • ② 프로세스 관리
    • ③ 하드웨어와 프로세스 사이에서 명령을 즉시 실행할 수. ㅣㅆ는 역할 수행
    • ④ 시스템 호출 및 보안

3️⃣ 커널 프로세스의 메모리

📌 Code 영역

  • 시스템 콜, 중단(interrupt) 처리코드
  • CPU, 메모리 등 자원관리를 위한 코드
  • 편리한 인터페이스 제공을 위한 코드

📌 Data 영역

  • CPU, Memory 등 하드웨어 자원을 관리하기 위한 자료구조가 저장됨
  • PCB(Process Control Block) 자료구조가 저장됨
    → 해당 프로세스의 실행정보 + 상태정보를 저장하는 자료구조로 커널 프로세스에 존재함
    • 운영체제가 프로세스에 대한 정보를 담고 있는 구조체
    • 현재 수행중인 프로세스의 상태, CPU 사용정보 등을 유지하기 위한 자료구조
    • 프로세스 제어블록이란 특정한 프로세스를 관리할 필요가 있는 정보를 포함하는 운영체제 커널의 자료구조
    • PCB는 각 프로세스에 대한 다양한 정보를 담고 있는 데이터
    • 각 프로세스의 PCB는 OS 내부의 Process Management 부서에서 관리하고
      PC/Register/MMU정보/Process 상태/CPU Time/PID 등의 정보가 포함됨
    • 중요한 정보들이 담겨있기 때문에 운영체제 → 커널 내부에 담겨짐

📌 Stack 영역

  • 각 프로세스의 커널 스택을 저장함
  • 프로세스는 함수 호출 시, 자신의 복귀주소를 저장하지만 커널은 커널 내의 주소가 됨
  • 각각의 프로세스마다 별도의 스택을 두어 관리함
  • 커널은 힙메모리를 사용하지 않음
    • 운영체제(리눅스)에서 동적메모리 할당을 위해 필요한 기능을 커널이 제공하기 때문에 운영체제는 이 기능을 사용하여 메모리풀을 관리함

2. 정리하기

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

참고

profile
🐰 I'm Sunyeon-Jeong, mallang

0개의 댓글