[운영체제] 메모리 관리

메모리 계층 구조와 메모리 핵심 관리

1) 메모리 계층 구조

  • 메모리는 컴퓨터 시스템 여러 곳에 계층적으로 존재
  • cpu 레지스터 - cpu 캐시 - 메인 메모리 - 보조기억장치 보조기억장치로 갈수록 용량 증가, 가격 저렴, 속도 저하가 있음
  • 메모리 계층화의 목적 : CPU의 메모리 엑세스 시간을 줄여 빠른 프로그램 실행

CPU 레지스터 L1/L2 캐시 L3 캐시 메인 메모리 보조기억장치

용도 몇 개의 명령과 데이터 저장 한 코어에서 실행되는 명령과 데이터 저장 멀티 코어에 의해 공유, 명령과 데이터 저장 실행 중인 전체 프로세스들의 코드와 입출력 중인 파일 블록 저장 파일이나 데이터베이스, 메모리에 적재된 프로세스의 코드와 데이터 일시 저장
용량 바이트 단위 KB 단위 MB 단위 GB 단위 TB 단위
타입   SRAM SRAM DRAM 마그네틱 필드나 플래시 메모리
속도 <1ns <5ns <5ns <50ns <20ms
가격   고가 고가 보통 저가
휘발성 휘발성 휘발성 휘발성 휘발성 비휘발성

2) 계층화 과정

  • cpu 성능 향상 → 더 빠른 메모리 요구 → 작지만 빠른 off-chip 캐시 등장 → 더 빠른 엑세스를 위한 on-chip 캐시 등장 → 멀티코어에 적합한 L1/L2/L3 캐시 등장 ( 메모리 계층화 과정 )
  • 컴퓨터 성능 향상 → 처리할 데이터 양 증가 → 저장 장치의 대형화 → 빠른 저장 장치 요구 → SSD 등장
  • 계층화의 성공 이유 ( 참조의 지역성 )
  • 코드나 데이터, 자원 등이 아주 짧은 시간 내에 다시 사용되는 프로그램 특성
  • cpu의 작은 캐시 메모리에 로딩된 코드와 데이터로 한동안 실행
  • 캐시를 채우는 시간의 손해보다 빠른 캐시를 이용하는 이득이 큼
  • 계층화의 미래
  • 메모리와 하드디스크 사이에 또 다른 형태의 메모리 구현 중

3) 메모리 관리

#1 메모리의 역할

  • 메모리는 실행하고자 하는 프로그램 코드와 데이터 적재
  • cpu는 메모리에 적재된 코드와 데이터만 처리

#2 메모리 관리가 필요한 이유

  1. 메모리는 공유 자원
  2. 메모리 보호
  3. 메모리 용량 한계 극복
  4. 메모리 효율성 증대

메모리 주소

1) 물리 주소와 논리 주소

  • 메모리는 오직 주소로만 접근

#1 물리 주소

  • 물리 메모리에 매겨진 주소, 하드웨어에 의해 고정된 메모리 주소
  • 0부터 시작하여 연속된 주소 체계
  • 메모리는 시스템 주소 버스를 통해 물리 주소의 신호를 받음

#2 논리 주소

  • 개발자나 프로세스가 프로세스 내에서 사용하는 주소, 코드나 변수 등에 대한 주소
  • cpu가 프로세스를 실행하는 동안 다루는 모든 주소
  • 프로세스 내에 매겨진 상대 주소
  • 컴파일러와 링커에 의해 매겨진 주소
  • 사용자나 프로세스는 물리 주소를 알 수 없음

#3 MMU(Memory Management Unit)

  • 논리 주소를 물리 주소로 바꾸는 하드웨어 장치
  • 오늘날 MMU는 CPU안에 내장

#4 ASLR(Address Space Layout Randomization)

  • 해커들의 메모리 공격에 대한 대비책, 오늘날의 대부분 운영체제가 활용
  • 주소 공간의 랜덤 배치
  • 프로세스 주소 공간 내에서 스택이나 힙, 라이브러리 영역의 랜덤 배치
  • 코드나 전역 변수가 적재되는 데이터 영역의 논리 주소는 변경되지 않음

물리 메모리 관리

1) 메모리 할당

  • 운영체제가 새 프로세스를 실행시키거나 실행 중인 프로세스가 메모리를 필요로 할 때, 물리 메모리 할당
  • 프로세스의 실행은 할당된 물리 메모리에서 이루어짐

2) 메모리 할당 기법

#1 연속 메모리 할당 기법

  • 프로세스별로 연속된 한 덩어리의 메모리 할당
  • 고정 크기 할당 시
  • 메모리를 고정 크기의 파티션으로 나누고 프로세스당 하나의 파티션 할당
  • 가변 크기 할당 시
  • 가변 크기의 파티션으로 나누고 프로세스당 하나의 파티션 할당

#2 분할 메모리 할당 기법

  • 프로세스를 여러 덩어리로 나눈 후, 각 덩어리 별로 메모리 할당
  • 고정 크기 할당 시
  • 고정 크기의 동일한 덩이리 메모리 분산 할당 : 세그먼테이션
  • 가변 크기 할당 시
  • 가변 크기의 동일한 덩어리 메모리 분산 할당 : 페이징

연속 메모리 할당

1) 연속 메모리 할당

  • 각 프로세스의 영역을 연속된 메모리 공간에 배치
  • 초기 운영체제에서 사용

2) 단편화

  • 프로세스에게 할당할 수 없는 조각 메모리들이 생기는 현상, 조각 메모리를 홀이라고 부름
  • 내부 단편화
  • 할당된 메모리 내부에 사용할 수 없는 홀이 생기는 현상 → 고정 크기 할당에서 발생
  • 외부 단편화
  • 할당된 메모리들 사이에 사용할 수 없는 홀이 생기는 현상 → 가변 크기 할당에서 발생

3) 연속 메모리 할당의 장단점

  • 장점
  • 논리 주소를 물리 주소로 바꾸는 과정이 단순, cpu 엑세스 속도 빠름
  • 운영체제가 관리할 정보량이 적어서 부담이 덜함
  • 단점
  • 메모리 할당의 유연성이 떨어짐, 작은 홀들을 합쳐 충분한 크기의 메모리가 있음에도 메모리를 할당하지 못하는 경우 발생

4) 홀 선택 알고리즘 / 동적 메모리 할당

  • 운영체제는 할당 리스트 유지
  • 할당 요청이 발생하였을 때 홀 선택 전략 3가지
    1. 최초 적합 : 비어 있는 파티션 중 맨 앞에 요청 크기보다 큰 파티션 선택 할당 속도 빠름 / 단편화 발생 가능성
    2. 최적 적합 : 비어 있는 파티션 중 요청을 수용하는 가장 작은 파티션 선택 크기 별로 파티션이 정렬되어 있지 않을 경우 전부 검색 가장 작은 홀 생성
    3. 최악 적합: 비어 있는 파티션 중 요청을 수용하는 가장 큰 파티션 선택 가장 큰 홀 생성

세그먼테이션 메모리 관리

1) 세그먼테이션

  • 세그먼트 : 개발자의 관점에서 보는 프로그램의 논리적 구성 단위
  • 프로그램을 구성하는 일반적인 세그먼트 종류 (코드/데이터/스택/힙 세그먼트)
  • 세그먼테이션 기법
  • 프로세스를 논리 세그먼트 크기로 나누고, 각 논리 세그먼트를 한 덩어리의 물리 메모리에 할당하고 관리하는 메모리 관리 기법
  • 외부 단편화 발생 : 세그먼트들의 크기가 같지 않기 때문에 세그먼트와 세그먼트 사이에 발생하는 작은 크기의 홀