[운영체제] 공룡책 - 메모리 관리 Memory Management 요약

728x90
반응형

메모리(기억 장치 종류)

  • 레지스터 -> 캐시 -> 메인 메모리 -> 보조기억장치 (계층 구조)
  • 왼쪽으로 갈수록 비싸지고 용량이 작고 빠르다
  •  I/O 병목현상 해결하기 위한 계층구조이다
  • 레지스터와 캐시는 CPU 내부에 존재하여 HW가 관리하고 나머지 메모리 종류는 SW(OS)가 관리한다.
  • Block단위
    • 하드디스크 (보조 기억장치)에서 메모리로 데이터를 올릴 때 1비트를 읽더라도 효율성을 위해 해당 1비트만 가가져오는 것이 아니라 block단위로 데이터를 읽어온다. (보통 1~ 4kb)
  • word 단위
    • 메인 메모리에서 레지스터로 데이터를 word 단위로 읽어온다.
    • 컴퓨터에서 32비트, 64비트 시스템은 워드 단위이다.

Address Binding

  • 프로그램의 논리 주소(cpu가 생성하는 주소)를 실제 메모리의 물리주소로 매핑하는 작업이다.
  • binding 시점에 따라
    • compile time binding
    • load time binding
    • run time binding 으로 구분한다
  1. compile time binding
    • 컴파일러가 프로세스가 메모리 어느 위치에 들어갈 지 미리 알고 있다.
    • 한 번 정해진 위치를 계속 쓴다.
    • 프로그램 전체가 메모리에 올라가야 한다.
    • MS-DOS.COM
  2. load time binding
    • 컴파일 단계에서 메모리 적재 위치를 모르면 상대주소를 생성한다.
    • 적재시점에 시작 주소 + 상대 주소를 반영하여 사용장의 주소를 재설정한다.
    • 시작주소가 400이고 상대주소가 300이면 700으로 재설정한다.
    • 프로그램 전체가 메모리에 올라가야 한다.
  3. run time binding
    • 수행시간까지 address binding을 연기한다.
    • 컴파일타임, 로드 타임 바인딩에서는 논리주소와 물리주소가 같게 생성되는데 실행시간 바인딩은 다르게 생성된다. 이 때 논리 주소가 가상 주소라고 하는데 일대일 매칭을 하드웨어 디바이스인 mmu가 담당한다.
    • hw의 도움이 필요하다 (MMU: memory management unit)
    • 대부분의 OS가 사용한다

Dynamic Loading

  • 모든 루틴을 교체가능한 형태로 디스크에 저장한다
  • 실제 호출 전까지 루틴을 적재하지 않는다. (메인 프로그램만 메모리 적재)
  • 루틴의 호출 시점에 address binding 을 수행한다.
  • 메모리 공간을 효율적으로 쓸 수 있다

Swapping

  • 프로세서 할당이 끝나고 수행 완료된 프로세스는 swap-device로 보냄 (swap out)
  • 새롭게 시작하는 프로세스는 메모리에 적재 (swap-in)

Memory Allocation

  • Continuous memory allocation (연속할당)
  • Non-continuous memory allocation(비연속 할당)

연속 할당 (고정 분할 방식, 가변 분할 방식)

  • 프로세스를 하나의 연속된 메모리 공간에 할당하는 정책
  • 코드, 데이터, 스택
  • Uni-programming
    • 문제 발생하는 경우 : 프로그램크기 > 메모리 크기 일때
    • 해결법: overlay 구조 적용 
      • 메모리에 현재 필요한 영역만 적재
      • 통째로 올리기 때문에 os가 잘라주지 못해 사용자가 해줘야 한다.
      • 문제점: 커널 보호 (프로그램 공간을 자르다가 다른 메모리 공간 침범할 수 있다)
      • 해결방법: 경계 레지스터로 메모리를 보호한다.
    • 단점 
      • 시스템, 자원 활용도가 낮다
    • 해결법 
      • 멀티 프로그래밍
  • Multi-Programming
  1.  Fixed Partition Multiprogramming 고정분할(FPM)
    • 메모리 공간 고정된 크기로 분할 
    • 각 프로세스는 하나의 partition에 적재된다
    • 멀티프로그래밍 정도 = 파티션의 수 = K (분할하는 만큼 프로세스 넣을 수 있다)
    • 단편화 발생 
    • 내부 단편화
      • 파티션의 크기 > 프로세스 크기
      • 메모리가 낭비된다
    • 외부 단편화 
      • 남은 메모리크기> 프로세스 크기지만 남은 메모리들이 연속된 공간이 아님
      • 메모리가 낭비된다
    • 요약
      • 고정된 크기로 메모리를 미리 분할한다
      • 메모리 관리가 간편 (low overhead)
      • 시스템 자원이 낭비된다
      • 내부/외부 단편화 발생
  2. Variable Partition Multiprogramming 가변 분할 방식
    • 초기에는 전체가 하나의 영역
    • 프로세스 처리하는 과정에서 메모리 공간이 동적으로 분할된다
    • 필요한 만큼 잘라주기 때문에 내부 단편화 없음
    • 끝난 프로세스가 메모리에서 나가면서 중간중간 메모리가 비며 외부 단편화 발생
    • 이후 다른 프로세스가 들어올 때 프로세스를 어떻게 배치할 것인가? => 배치 전략

배치 전략 Placement Strategies

First-fit 최초 적합

  • 들어갈 수 있는 최초 파티션을 선택한다
  • 단순하고 오버헤드 적다
  • 공간 활용률이 떨어진다

 

Best-fit 최적 적합

  • 프로세스가 들어갈 수 있는 파티션 중 가장 작은 곳을 선택한다
  • 적합한 곳을 찾으므로 탐색시간이 오래 걸린다 => 오버헤드
  • 크기가 큰 파티션 유지 가능, 작은 크기의 파티션 너무 많이 발생

Worst-fit 최악 적합

  • 프로세스가 들어갈 수 있는 파티션 중 가장 큰 곳 선택
  • 모든 파티션 살펴보므로 탐색 시간 오래걸림 => 오버헤드
  • 작은 크기의 파티션 발생 줄일 수 있다
  • 큰 크기의 파티션 확보 어렵다

Next-fit 순차 최초 적합

  • state table에서 마지막으로 탐색한 위치부터 탐색한다
  • 메모리 사용빈도 균등화 전략
  • 오버헤드 적다

외부 단편화 발생시 새로운 프로세스 위해 메모리 공간을 확보하는 방법

공간 통합 Coalescing holes

  • 인접한 빈 영역을 하나의 파티션으로 통합하는 방법
  • 기존 프로세스가 메모리를 release하고 나가면 새로운 프로세스가 들어올 수 있다
  • 오버헤드 적다

메모리 압축 Storage Compaction

  • 띄엄 띄엄있는 빈 공간들을 하나로 통합
  • 오버헤드 높다 
    • 기존의 프로세스들을 중지하고 재배치해야된다
    • 많은 시스템 자원 소비

요약

  • Address Binding: cpu가 생성하는 논리 주소를 실제 메모리의 물리주소로 매핑하는 작업. OS 대부분 runtime address binding을 사용하며 hw의 mmu가 담당한다.
  • 메모리 연속 할당: 연속된 메모리를 할당하는 방법. 분할 방식은 고정분할 방식과 가변분할 방식이 있다.
  • 내부 단편화 현상을 막을 수 있는 방법 : VPM 가변 분할 방식
    • 교체 전략: first fit, best fit, worst fit
  • 외부 단편화 문제: 공간 통합 (오버헤드 적음), 메모리 압축 (오버헤드 큼)

 

 

 


출처

유튜브 운영체제 강의 

www.youtube.com/watch?v=W8q3TKB9Lbo&list=PLBrGAFAIyf5rby7QylRc6JxU5lzQ9c4tN&index=32

728x90
반응형
TAGS.

Comments