observe_db

[OS] 8. Memory Management(메모리 관리) 본문

학교 공부/운영체제(OS)(3-1)

[OS] 8. Memory Management(메모리 관리)

쩡윤 2023. 5. 12. 00:27

Part 1.

메모리 관리자(memory manager)

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

메모리 관리 전략

  1. 적재(fetch): 
    • 요구 적재(deman fetch)vs 예측 적재(anticipatory fetch)
    • 다음 적재할 데이터 결정
  2. 배치(placement)
    • 데이터를 배치할 위치 결정
  3. 교체(replacement)
    • 공간 확보를 위해 메모리에서 방출할 데이터 결정

 

메모리 할당

연속할당(continuous allocation)

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

불연속 할당(non-continuous allocation)

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

단일 사용자 환경 메모리 할당(연속 할당)

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

 

오버레이(Overlay: 위에 놓다)

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

메모리 보호 하드웨어- 경계 레지스터(boundary register)

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

스와핑(Swapping)

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

고정분할 다중 프로그래밍(fixed partition multiprogramming)

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

 

가변 분할 다중 프로그래밍(variabble partition multiprogramming)

  • 고정된 분할(partition)의 경계를 없애고 각 작업에 필요한 만큼의 메모리 할당
  • 외부 단편화(external fragmentation): 작업을 배치할 수 없는 작업 빈 공간 발생
    • 빈공간 강제 통합(coalescing): 이웃된 빈 공간을 통합해 하나의 큰 공간을 만드는 것
    • 빈공간 집약(compaction): 산재하는 빈공간을 모아서 하나의 큰 공간으로 만드는 것.(접근시간+변경까지의 비용 발생)
  • 프로세스 배치 전략
    • 최초 적합 전략(first-fit strategy): 가용공간 중 첫번째 공간에 배치
    • 최적 적합 전략(best-fit strategy): 가용공간 중 배치할 때 남는 공간이 가장 작은 곳에 배치
    • 최악 적합 전략(worst-fit strategy): 가용공간 중 배치할 때 남는 공간이 가장 큰 곳에 배치. 남는 곳에 다시 프로세스 할당 가능성.

 

Part 2.

가상메모리(virtual memory)

  • 프로세스 전체가 메모리에 존재하지 않아도 실행될 수 있게 하는 메모리 관리 기법
  • 프로세스가 사용하는 주소 공간(가상주소공간, virtual address space)과 실제 메모리 주소 공간(물리 주소 공간, physical address space) 분리
  • 실행 중에 CPU내의 하드웨어인 MMU(memory management unit)가 자동으로 가상 주소를 물리 주소로 변환(매핑)
  • 가상주소(virtual address)
    • 프로세스에서 사용하는 주소
    • 가상주소공간 V: 가상주소의 전체 집합
    • 프로세스 일부는 보조기억장치에 저장
  • 물리주소(physical address/real address)
    • 메모리에서 사용가능한 주소
    • 물리주소공간 P: 메모리 주소 공간
  • 주소 변환 사상(address translation mapping)
    • MMU(memory management unit)에 의해 수행
    • 블록 단위 관리

가상메모리 블럭 종류

  • page: 일정 크기의 블록. paging 기법
  • segment: 블록 크기가 가변적. segmetation 기법

 

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

- b는 블록번호. d는 변위

- b의 블록 사상표에 해당위치에 실제 블록 b의 위치 정보 저장

- d는 블록 내에 위치

가상 주소 변환: 블록 사상 테이블에 블록별 메모리 내 대응 위치 정보 포함

 

 

페이징(paging)

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

페이지 테이블(page table)

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

페이징 주소 변환

-직접 사상(direct mapping)

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

-연관 사상(associative mapping)

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

-혼합방법

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

 

다단계 페이지 테이블(multilevel page table)

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

역페이지 테이블(inverted page table)

  • 메모리의 페이지 프레임당 하나의 항목 포함
  • 해시(hash) 함수를 사용하여 페이지 번호에 대응하는 역 페이지 테이블 위치 결정
    • 충돌시 chaining
  • 주소 변환 과정에서 (프로세스 번호, 페이지 번호) 사용 해싱
  • 역 페이지 테이블의 각 항목(프로세스 번호, 페이지 번호, 체이닝 포인터 등)
  • 메모리에 없는 페이지에 대한 정보는 운영체제가 별도의 자료구조로 관리
  • 해시 앵커 테이블 이용한 역 페이지 테이블 방법 개선
    • 해싱할 때 collision을 줄이기 위해 해싱 함수의 주소공간 확대 필요
    • 역 페이지 테이블 방법에서 범위는 페이지 프레임 개수로 고정
    • 별도 해시 앵커 테이블 사용하여 해시 공간 확대

페이지 공유(sharing)

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

 

Part 3.

세그먼테이션(segmentation)

  • 프로세스의 메모리 공간에 대한 프로그래머의 관점
    • 크기가 일정하지 않은 함수, 메인 프로그램, 스택, 힙, 전역변수 등의 개체(세그먼트)의 모임
  • 세그먼트 단위로 메모리에 적재하여 실행
  • 세그먼트: 프로그램에서 의미적인 단위가 되는 부분 포함. 연속된 메모리 공간. 크기는 일정하지 않음.
  • 프로세스는 현재 실행되는 명령어 및 참조되는 데이터의 세그먼트가 메모리에 있으면 실행 가능
  • 주소표현
    • 컴파일 할 때 세그먼트별 번호를 부여하고, 번호 s와 변위 d를 사용하여 가상주소 표현(v = (s,d))
  • 주소변환은 세그먼트 테이블 이용

세그먼테이션 사상 테이블(segmentation map table)

  • r: 세그먼트 적재 비트
  • a: 보조기억장치 주소
  • l: 세그먼트 전체 길이
  • s': 세그먼트 시작 주소
  • 보호비트(protection bit): R/W/E/A

세그먼테이션 공유(sharing)

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

세그먼트 접근 제어(access control): 접근 제어 모드(사진 추가)

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

 

 

 

페이징 세그먼테이션 혼용

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

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

-주소변환

  • 프로세스별 세그먼트 테이블&페이지 테이블
  • v=(s,p,d)

-테이블 구성

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

-프로세스간 세그먼트/페이지 공유

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