[OS] Memory

🧠·2022년 6월 14일
0

OS

목록 보기
5/5

Background

  • 프로세스: 프로그램이 실행중인 상태 (메인 메모리에 명령어가 적재되어 있는 상태)
  • 메모리: 각자 자신의 주소를 가지고, 여러 바이트로 이루어져있는 배열
    - cpu는 메모리에서 명령어를 하나 fetch한 후 실행
  • 메모리 공간은 base/limit 레지스터로 각 프로세스의 공간을 구분한다

Address Binding

  1. Symbolic Address >> Relocatable Address (Compiler)
  2. Relocatable Address >> Absolute Address (Loader)
  • Logical Address: CPU에 의해 결정되는 주소
  • MMU (Memory Management Unit)
    - Logical >> Physical (MMU가 해줌)

MMU

  • Dynamic Loading
    - 프로그램을 실행시킬 때 메인메모리에 프로그램과 관련 데이터를 모두 적재하는 것이 아니라 필요한 부분만 호출하는 것이 메모리를 효율적으로 사용하는 것
  • Static Loading
  • Dynamic Linking and Shared Libraries
    - DLLs: Dynamically Linked Libraries
    - system 라이브러리는 프로그램이 실행될 때 링크된다.
    - Static Linking: 프로그램이 로드될 때 함께 링크
    - Dynamic Linking: 프로그램이 실행될 때까지 기다렸다가 링크
    • Shared Library: 여러 프로세스에 공유된다 (Window: .dll / Linux: .so)

Contiguous Memory Allocation (연속 메모리 할당)

  • 프로그램 전체를 메모리에 할당하기 때문에 연속적이다.
  • Memory Protection:
    - base <= (접근 주소) < base + limit
    - base 레지스터는 메모리상의 프로세스 시작주소를 물리 주소로 저장 (limit 레지스터는 사이즈를 저장)
    - 해당 프로세스의 영역이 아닌 곳에 접근하려고 할 때 trap을 발생시킴

Dynamic Storage Allocation

  • 각 프로세스의 크기가 다르기 때문에 여러 크기의 파티션으로 나누어 프로세스를 할당시켜야 됨

  • 메모리 할당 요청이 왔을 때 어느 free hole에 할당할지 정해야 하는데 3가지 방법이 있음

  1. First-Fit: 만족하는 첫번째 free 영역
  2. Best-Fit: 만족하는 free 영역 중 가장 작은 영역
  3. Worst-Fit: 만족하는 free 영역 중 가장 큰 영역

First-Fit, Best-Fit 방법이 Worst-Fit 보다 효율적인 방법

Fragmentation

https://velog.io/@supssson/메모리-단편화

Paging

  • 프로세스의 물리 주소를 연속적이지 않게 쪼개는 방법

  • 외부 단편화를 피할 수 있음 (내부 단편화는 존재)

  • free hole을 압축시킬 필요가 없다.

  • OS와 하드웨어의 도움이 필요한 메모리 관리 기법

  • physical 메모리를 고정된 사이즈로 나눈 블록: frame (프레임)

  • logical 메모리를 고정된 사이즈로 나눈 블록: page (페이지)

  • 이 둘을 맵핑 시킨다 (Logical Address와 Physical Address를 Binding 시킬 필요가 없음)

  • Page = 4KB
  • Page Table은 각 프로그램마다 별도로 존재, 수만개의 페이지가 존재하기 때문에 메모리에 저장 (Main Memory)
  • 모든 메모리 접근 연산에 2번의 메모리 access가 필요함 (Page Table에 접근, Page Table로부터 얻은 주소로 실제 메모리에 접근)
  • Page-table base register (PTBR)은 페이지 테이블 시작 주소를 가리킴
  • Page-table length register (PTLR)은 테이블 크기를 보관
  • 메모리에 항상 2번 접근하는 것은 매우 비효율적, 따라서 일종의 캐시인 TLB 사용
  • TLB는 페이지 테이블 정보의 일부를 가지고 있음

ref: https://youtu.be/0BQwhwlz5qs

profile
: )

0개의 댓글