OS - Main Memory

Bomin Seo·2022년 8월 5일
0
post-thumbnail

Memory Management

Goals

  • 프로그래밍을 편리하게 하기 위하여 추상화 기능을 제공한다.
    • 개발자가 실제 물리적인 메모리 주소를 모르더라도 쉽게 사용할 수 있게 한다.
  • overhead가 작은 메모리 할당 방식을 택함으로써 메모리 효율을 높인다.
  • 프로세스 간에 isolation을 제공한다(memory protection)

Batch programming

  • Monitor라는 관리 소프트웨어가 프로그램을 메모리로 올리고, 작업이 끝나면 새로운 프로그램을 올린다.
  • 프로그램 하나가 메모리 전체를 다 사용한다.
  • 프로그램이 physical address(실제 RAM의 주소)를 직접 사용한다

Multiprogramming

  • 하나의 메모리에 여러 개의 프로세스가 실행되면서 메모리 관리의 개념이 등장하였다.

    필요조건
  • Protection : 프로세스가 사용할 수 있는 메모리 영역을 제한해야 한다
  • Fast translation : 보호 체계가 있어도 메모리 조회는 빨라야 한다.
  • Fast context switching : 메모리 hardware update는 빨라야 한다.

Issues

  • multiple process를 지원해야 한다.
    • 각각의 프로세스는 Logically contiguous space를 가져야 한다.
  • 실제 메모리보다 큰 영역을 사용하는 프로세스도 실행가능해야 한다.
  • Protection / Sharing / Support for multiple regions per process / Performance

Solution : Virtual Memory(VM)

  • Virtual address / Logical Address : 프로세스 내부에서 사용하는 메모리 주소
  • Physical address : 실제 RAM에 존재하는 물리적인 주소

Key point

  • Virtual address와 physical address를 isolate한 뒤 어떻게 mapping하여 관리하는지
  • 실제 RAM의 크기보다 더 큰 메모리 요구량을 가진 프로세스도 실행 가능하게 하는지
VM은 전체 메모리 주소를 Physical memory에 할당하지 않고 실행 가능하게 한다.
  • 더 적은 RAM을 사용하여 프로세스를 실행시킬 수 있다.
VM은 프로세스 간을 isolate한다.
  • 각 프로세스는 isolated address를 가지며 다른 프로세스가 볼 수 없다.

Binding of instructions and Data to Memory

Binding

  • 명령어에 쓰인 메모리 주소를 실제 RAM의 주소와 Mapping한다.
  • 메모리 주소는 명령어를 실행할 때 사용된다.
  • Load : 메모리에서 데이터를 읽어가는 명령어 (메모리에서 CPU 레지스터에 데이터 저장)
  • Store : 메모리에 데이터를 쓰는 명령어 (CPU레지스터에서 메모리로 데이터 저장)
  • Binding 시점 : Compile time / Load time / Execution time

Binding of Memory Address

  • store # 198000, 10 의 명령어 compile

    • 198000주소에 10의 값을 저장하라.
  • store명령어를 compile하면 그에 대응되는 실제 RAM의 주소에 Binding

  • 문제점 : memory 주소를 결정 후 compile을 했다면, 실제 해당 RAM의 주소에 저장되어야 한다.

  • 다른 주소를 사용하지 못한다.

    • 하나의 프로그램이 메모리 전체를 다 쓰는 경우에 사용된다. (Arduino 등)

  • 프로그램이 사용할 메모리의 첫 주소를0번지로
    설정한다.
  • 실제 RAM에 Binding될 때 프로세스의 메모리 주소에 base address를 더한다.
  • 메모리에 Loading될 때 주소 전체를 바꾼다.
  • 장점 : 프로세스에서 설정한 메모리 뿐만 아니라 다른 메모리 주소에도Binding될 수 있다.
  • 문제점 : Loading시에 주소를 전부 수정해야 하므로 Load의 시간이 오래 걸린다.
    • overhead가 너무 크기 때문에 사용되지 않는다.

  • load time과 유사하게 메모리에 binding시킨 후 명령어 실행 시간에 base address를 더함으로써 data에 접근하는 방법
  • translation 또는 mapping
  • 현재 사용하는 방법

Virtual Memory Management

MMU

  • 명령어가 실행될 때, Virtual address를 physical address로 빠르게 translation해주는 CPU의 레지스터

SWAP

  • 실제 존재하는 RAM의 일부분을 Secondary storage에 일시적으로 저장함으로써 RAM을 개념적으로 무한대만큼 사용할 수 있게 한다.
프로그램 내에서 사용하는 변수의 주소는 여러 번 실행하든, 멀티 프로세스가 사용하든 logical address 상에 같은 위치에 존재한다.
#include <stdio.h>
int n = 0;
int main ()
{
	printf (“&n = 0x%08x\n”, &n);
}
% ./a.out
&n = 0x08049508
% ./a.out
&n = 0x08049508

Address mapping 방법

Contiguous Allocation

  • logically contiguous address를 physically contiguous address하게 할당하는 방법
  • Physical address = logical address + relocation register(base address)
  • Memory protection : Limit register를 사용함으로써 접근 불가 메모리 접근 제한

  • exception/fault로 메모리 보호

hole

  • 사용가능한 메모리의 블록
  • 다양한 크기로 메모리에 흩뿌려져 있다.

hole 할당 방법

  • First-fit : 크기가 충분한 처음 hole에 할당한다.
  • Best-fit : 크기가 충분한 hole 중 가장 작은 hole에 할당한다.
    • 정렬되어 있지 않은 상태에서라면 전체를 검사해야 하며 가장 작은 leftover hole을 발생시킨다.
  • Worst-fit : 가장 큰 hole에 할당한다.
    • 모든 list를 검사해야 하며 가장 큰 leftover hole을 발생시킨다.

문제점 : Fragmentation ( 사용되지 않는 이유)

  • 더 이상 사용될 수 없는 작은 hole들을 발생시킨다 : external fragmentation
  • compaction(재조직)을 통해서 다룰 수 있다
    • 동적으로 relocation이 가능하고 실행 시간에만 사용할 수 있다.
    • I/O overhead가 매우 커진다.

Paging

  • external fragmetation의 해결 방법
  • Logical memory를 일정 크기의 page로 분할하고, physical memory도 일정 크기의 frame으로 분할한 뒤, page를 frame에 순서에 상관없이 할당한다. (page와 frame의 일반적인 크기는 4KB)
  • 일부분의 page의 메모리를 다 사용하지 않아 공간이 남을 수 있다 → Internal fragmentation

Paging 의 문제점

  • Page mapping의 절차가 복잡해진다. (Table 형태로 관리한다)

Translating address

  • Logical address : page number :: offset → (p, d)
  • Physical address : frame number :: offset → (f, d)
  • OS가 관리하는 Page table이 필요하다.
  • Page table은 process마다 필요하다.

Implementation of page table

  • Page table은 메인 메모리에 상주한다.
  • Page-table base register(PTBR)은 Page table를 가리킴
  • Page-table length register(PTLR)은 Table size를 지칭.
  • 2번의 메모리 접근이 필요하다.
profile
KHU, SWCON

0개의 댓글