메모리 관리

이정민·2022년 6월 2일
0

메모리 관리자

  • 메모리를 관리하는 OS 부분
  • 메모리의 사용부분 및 가용부분 관리
  • 프로세스 요구에 따라 메모리 할당
  • 사용이 끝난 메모리 공간 회수
  • 메모리 공간 부족 시에 디스크를 사용한 프로세서 실행 지원
    • 가상 메모리

메모리 관리 전략

적재(fetch) 전략

  • 요구 적재 vs 예측 적재
  • 다음 적재할 데이터 결정

배치(placement) 전략

  • 데이터를 배치할 위치 결정

교체 전략

  • 공간 확보를 위해 메모리에서 방출할 데이터 결정

메모리 계층구조(memory hierachy)

  • 주기억 장치는 프로세서에서 직접 접근 가능한 최하단

CPU
프로세서, 레지스터

CPU 캐시
L1 캐시
L2 캐시
L3 캐시

물리적 메모리
주기억 장치

SOLID STATE 메모리
비휘발성 플래시 메모리

가상메모리
블록기반 메모리

메모리 할당

연속 할당

  • 프로그램을 연속인 메모리 한 곳에 배치
  • 충분히 큰 연속된 공간이 없으면 프로그램 할당 불가
  • 구현 단순

불연속 할당

  • 프로그램을 여러 조각(segment, page)으로 분할
  • 각 조각을 메모리에 임의로 배치 가능
  • 많은 프로세서의 메모리 적재 가능

단일 사용자 환경 메모리 할당

  • 초기 컴퓨터 환경
  • 한번에 사용자 한 명만 컴퓨터 사용
  • 운영체제 부재
  • 입출력 장치를 관리하기 위한 라이브러리 Input-Output Control System(IOCS) 사용

오버레이

  • 프로그램을 논리적 단위로 분할
  • 현재 실행하는 부분만 메모리에 적재
  • 프로그래머가 오버레이 구조 설계 및 구현
  • 큰 프로그램 실행 가능

메모리 보호 하드웨어

경계 레지스터

  • 사용자 프로그램 시작주소 포함
  • 프로그램에서 접근하는 주소가 경계 레지스터의 값을 벗어나는지 하드웨어적으로 검사

스와핑

  • 프로세서를 일시적으로 메모리에서 보조기억장치로 이동시켰다가 계속 실행시키려고 할 때 다시 메모리에 적재
  • 작은 메모리 공간에서 여러 프로세스 실행 가능
  • 한번에 하나의 프로세서만 메모리 차지
  • 많은 OS에서 스와핑 변형 형태 지원

고정 분할 다중 프로그래밍

  • 메모리를 고정된 크기로 분할
  • 분할별로 대기열 보유
  • 컴파일할 때, 미리 특정 분할에 적재될 수 있도록 절대주소 지정
  • 다른 분할이 비어있어도 적재 및 실행 불가
  • 초창기 IBM OS/360 등에서 사용
  • 재배치 가능 컴파일 및 적재 지원 방법
    • 모든 작업을 하나의 대기열에 넣어서 어느 분할에서든 실행 가능
    • 적재 시 주소 변환
  • 메모리 보호
    • 경계 레지스터
      • 하한
      • 상한
    • 내부 단편화
      • 하나의 분할에 작업을 할당하고 남은 공간

가변 분할 다중 프로그래밍

  • 고정된 분할의 경계를 없애고 각 작업에 필요한 만큼의 메모리 할당
  • 외부 단편화
    • 작업을 배치할 수 없는 작업 빈 공간 발생
  • 빈 공간 강제 통합(coalescing)
    • 이웃한 빈 공간을 통합해 하나의 큰 공간으로 만드는 것
  • 빈 공간 집약
    • 산재하는 빈 공간을 모아서 하나의 큰 공간으로 만드는 것

가변 분할 다중 프로그래밍에서 프로세스 배치 전략

  • 최초 적합 전략(first-fit strategy)
    • 가용공간 중 첫 번째 분할에 배치
  • 최적 적합 전략(best-fit strategy)
    • 가용공간 중 배치할 때 남는 공간이 가장 작은 곳에 배치
  • 최악 적합 전략(worst-fit strategy)
    • 가용공간 중 배치할 때 남는 공간이 가장 큰 곳에 배치
    • 남은 공간에 나중에 다른 프로세스 할당 가능성

가상 메모리

  • 프로세스 전체가 메모리에 존재하지 않아도 실행될 수 있게 하는 메모리 관리 기법
  • 프로세스가 사용하는 주소 공간(가상 주소 공간, virtual address space)과 실제 메모리의 주소 공간(물리 주소 공간, physical address space) 분리
  • 실행 중에 CPU내의 하드웨어인 MMU(memory management unit)가 자동으로 가상 주소를 물리 주소로 변환

가상 주소

  • 프로세서에서 사용하는 주소
  • 가상 주소 공간: 가상주소의 전체 집합
  • 프로세서의 일부는 보조기억장치에 저장

물리 주소

  • 메모리에서 사용가능한 주소
  • 물리주소 공산
    • 메모리 주소 공간

주소 변환 사상

  • MMU(memory management unit)에 의해 수행
  • 블록 단위로 관리

가상 메모리 블록 종류

페이지

  • 일정 크기의 블록
  • 페이징
    • 페이지를 사용하는 가상 메모리 기법

세그먼트

  • 블록 크기가 가변적
  • 세그먼테이션
    • 세크먼트를 사용하는 가상 메모리 기법

가상 주소 표현 v=(b,d)

  • b: 블록 번호

    • 블록 사상표(block map table)
      • 블록의 실제 메모리 위치에 대한 정보
      • b의 블록 사상표에 해당 위치에는 실제 블록 b의 위치 정보 저장
  • d: 블록 내에서 위치, 변위

가상 주소 변환

  • 블록 사성 테이블에 블록별 메모리 내 대응위치 정보 포함

페이징

  • 일정 크기의 블록 이용
  • 프로그램이 페이지 단위로 분할
  • 메모리도 페이지 크기 단위로 분할
    • 페이지 프레임: 분할된 단위 크기의 공간
  • 가상 주소 표현: v=(p,d) p: 페이지 번호 d: 변위

가상 주소의 물리주소 변환
1. 프로세서에서 참조하는 가상 주소를 페이지 사상 체계에 의해 대응되는 페이지 프레임
2. 가상 주소에 대응하는 주기억 장치 위치 찾음

페이지 테이블

  • 각 프로세스 별로 보유
  • 가상 메모리 페이지 개수에 대응하는 항목 포함
  • 페이지별 정보 관리
    • r: 페이지 존재 비트(page resident bit)
      • 부재: 0, 존재: 1
    • s: 보조기억장치 내 위치 정보(secondary storage address)
      • 페이지가 메모리에 없는 경우
    • p': 페이지 프레임 번호(page frame number)
      • 페이지가 메모리에 있는 경우

직접 사상(direct mapping)

  • 페이지 테이블 시작주소 레지스터
  • 페이지 테이블
    • 프로세스 별로 메모리에 저장
    • 메모리 접근: 실제 2번의 메모리 접근 발생

연관 사상(associative mapping)

  • 변환 속도의 개선을 위해 연관메모리 사용
    • 내용에 따른 메모리 접근 지원
    • 동시 검색 수행
    • 페이지번호 별 프레임 번호 저장
  • 일반 캐시보다 고가이므로 채택 곤란
  • 페이징을 위해 사용되는 연관 메모리를 Translation Look-aside Buffer(TLB)라고 함

연관 사상/직접 사상 혼합 방법

  • 최근 사용된 페이지 정보만 연관메모리에 저장
  • 나머지는 page table에 저장
  • 동적 변환 과정
    • 먼저 연관메모리 탐색
    • 없으면 메모리 상의 페이지 테이블 탐색
      • 페이지번호와 대응 프레임 번호 정보를 연관메모리에 저장
      • 연관메모리에 공간 확보가 필요하면 최근 사용되지 않은 항목 제거

다단계 페이지 테이블

  • 가상 주소 공간이 크면 페이지 테이블의 크기도 증가
  • 페이지 테이블을 여러 단계의 페이지 테이블로 나누는 저장
    • 하위 단계에는 필요한 만큼만 페이지 테이블 생성 -> 저장공간 절약

역 페이지 테이블

  • 메모리의 페이지 프레임당 하나의 항목 포함
  • 해시 함수를 사용하여 페이지 번호에 대응하는 역 페이지 테이블 위치 결정
    • 충돌시 체이닝(chaining)
  • 주소 변환 과정에서 (프로세스 번호, 페이지 번호) 사용 해싱
  • 역 페이지 테이블의 각 항목 (프로세스 번호, 페이지 번호, 체이닝 포인터 등 포함)
  • 메모리에 없는 페이지에 대한 정보는 운영체제가 별도의 자료구조로 관리
  • Intel IA-64, HP PA-RISC, PowerPC 구조에서 구현

해시 앵커 테이블 이용한 역 페이지 테이블 방법 개선

  • 해싱할 때 충돌을 줄이기 위해서는 해싱 함수의 주소 공간 확대 필요
  • 역 페이지 테이블 방법에서 범위는 페이지 프로임 개수로 고정
  • 별도 해시 앵커 테이블 사용하여 해싱 공간 확대

페이징 시스템에서 공유

  • 페이지 공유(sharing)
    • 텍스트 편집기, 컴파일러 등 읽기 전용 코드(reentrant code)는 공유 가능
    • 공유된 페이지는 복사본 한 부만 존재
    • 페이지 테이블을 통해 동일한 페이지 프레임 지정

세그먼테이션

  • 프로세스의 메모리 공간에 대한 프로그래머의 관점
    • 크기가 일정하지 않은 함수, 메인 프로그램, 스택, 힙, 전역변수 등의 개체(세그먼트)들의 모임
    • 세그먼트 단위로 메모리에 적재하여 실행
  • 세그먼트
    • 프로그램에서 의미적인 단위가 되는 부분 포함
    • 연속된 메모리 공간에 해당
    • 크기가 일정하지는 않음
  • 프로세서는 현재 실행되는 명령어 및 참조는 되는 데이터의 세그먼트가 메모리에 있으면 실행 가능

세그먼테이션 주소표현

  • 컴파일할 때, 세그먼트별로 세그먼트 번호를 부여하고, 세그먼트 번호 s와 세그먼트 내 변위 d를 사용하여 가상주소 표현
  • 가상 메모리 주소: v= (s,d)
    • s: 세그먼트 번호
    • d: 세그먼트 내에서의 위치, 변위

주소 변환

  • 세그먼트 테이블 이용

세그먼테이션 사상 테이블

  • r: 세그먼트 적재 비트(0: 메모리내 부재, 1: 적재)
  • a: 보조기억장치 주소(메모리내 부재시 검색할 위치)
  • l: 세그먼트의 전체 길이
  • s': 세그먼트 시작 주소
    보호비트
  • R(읽기), W(쓰기), E(실행), A(추가 쓰기)

세그먼테이션 공유(sharing)

  • 세그먼트 테이블에서 메모리의 동일한 위치 지정
  • 페이징에서 공유보다 단순

세그먼트 접근 제어

  • 보호 비트의 종류
    • R(read), W(write), E(execute), A(append)

보호 및 접근제어

  • 보호비트는 세그먼트 사상 테이블에 저장
    • 프로세스가 메모리를 접근할 때 확인
  • 접근하려는 세그먼트가 메모리 상에 부재시
    • 세그먼트 부재(segment-missing fault) 트랩 발생
  • 변위 d가 세그먼트 길이 l보다 클 때 (d>l)
    • 세그먼트 오버플로 예외(segment-overflow exception) 발생
  • 허용되지 않은 연산 (read,write,execute,append)이 요구되는 경우
    • 세그먼트 보호 예외(segment-protection exception) 발생

페이징 세그먼테이션 혼용

페이지화된 세그먼테이션(paged segmentation)

  • 세그먼트가 1개 이상의 페이지로 구성
  • 세그먼트의 모든 페이지가 동시에 메모리에 있을 필요 없음
  • 가상 주소 v= (s,p,d) s: 세그먼트 번호 p: 페이지 번호 d: 변위

주소 변환

  • 프로세서별 세그먼트 테이블 (segment table)
  • 세그먼트 별 페이지 테이블 (page table)

프로세스/세그먼트/페이지 테이블 구성

  • 프로세스 테이블
    • 전체 프로세스 정보 포함
  • 세그먼트 테이블
    • 프로세스별로 세그먼트 정보 포함
  • 페이지 테이블
    • 세그먼트별 페이지 정보 포함

세그먼트/페이지 공유

  • 세그먼트를 공유하려면 페이지 테이블을 공유
  • 페이지 프레임을 공유하려면 페이지 테이블에 같은 프레임 지정

IA-32 Intel Architecture Virtual Memory

  • 순서 세그먼테이션과 페이지된 세그먼테이션 방법
profile
으악

0개의 댓글