[OS] CH3-2 Memory Abstraction을 사용하는 Memory Management

김우경·2020년 11월 17일
0

운영체제

목록 보기
9/12
post-thumbnail

Physical Memory Exposure의 문제점

No protection

: 사용자의 실수, 의도로 OS 파괴 가능

→ 남의 program이 내 program으로 침범

→ mov, ld 등 명령어 있으면 data까지 접근 가능

Relocation is needed

∵ loading되는 위치가 process마다 다름

→ function call (instruction 주소), pointer(data 주소) 등 주소에 관련된 모든 명령어 relocation

Address Spaces

: a set of addresses that a process can use to address memory

→ process가 사용할 수 있는 주소값의 범위

→ 각 process는 독립적인 addr space 가짐

① Physical address space

: address space supported by the HW

→ 0~MAXsys

➁ Virtual/logical address space

: a process's view of its own memory

→ 0~MAXprog

e.g. MOV R0, @0xfffa620e
-> 0xfffa620e: virtual address→ relocation에 따라 DRAM의 physical address로

Virtual Addresses

  • to make it easier to manage memory of multiple process

  • independent of location in physical memory
    → OS가 physical memory 속 위치 결정
    → DRAM의 주소와 전혀 상관이 없어짐

  • CPU가 처리하는 모든 instruction의 주소는 virtual
    e.g. pointers, arguments to ld/st, pc, ect

  • MMU 통해서 virtual→physical 매핑

  • Address space
    : 한 process가 사용할 수 있는 virtual address의 범위

** Intel에서 일반적인 CPU는 부팅시 physical address 사용하다가 setting 후 virtual로

➃ Base Registers & Limit registers

base register

: 프로그램이 실제 DRAM의 어느 위치에 있는자?
→이때 base register의 값은 program의 로딩 위치에 따라 다름
OS가 → program이 CPU 사용할 때 base register의 값 변환

limit register

: 이 program의 크기
virtual address의 허용 범위를 넘어섰는지?

-32bit window : process가 사용가능한 공간 (virtual) 0~2^32(4G)
-64bit window : 0~2^64(8G)


Swapping

① Base, Limit Reg 사용시에도 발생하는 문제점

  • 일반적으로 virtual >>> physical
    → not enough memory to hold all active process
    → 나머지는 disk에 (CPU 사용 불가능)

  • Two approaches
    Swapping
    : 각 프로세스의 전체를 갖고와서 동작 후 다시 disk에

    Virtual Memory
    : 프로그램의 일부를 main memory에서 동작할 수 있게

Swapping이란?

  • Disk에서 통째로 옮겼다가 다시 DRAM에 통째로 옮김
    ∵ base, limit register 사용

    → 쪼개서 DRAM에 넣으면?
    여러 base, limit register 사용해야해서 복잡함

➂ Swapping 사용 이유

  • function call 등을 했을때 program이 늘어날 자리가 x
    → 옮기면? read/write 계속해서 시간 오래걸림

  • compaction : process 위치 조작해서 하나의 큰 공간으로
    → read/write의 반복으로 시간 오래걸림


Memory Management

① Bit map

: 메모리를 가상의 단위allocation unit으로 나누어서 관리
→ OS의 design에 따라 1k, 4k, ...

  • allocation unit이 작으면 bit map의 크기가 커짐

  • allocation unit이 크면 더 많은 memory 낭비
    internal fragmentation

    → allocation unit을 byte로?
    : fragmentation x ∵ byte가 최소 단위

  • searching a bitmap to find k consecutive 0 bits
    → slow operation

  • Bit map의 사이즈는 고정

→ 새 process 들어오면 쭉 훑으면서 빈 공간 있는지?
→ 앞에서부터 배치(first fit)하면 작은 fragmentation들이 계속 생김

➁ Linked List

  • double linked list로 구현
    : 현재 entry의 이전 entry를 찾고 통합하기 편함

  • P와 H를 주소값으로 정렬
    → 새로 생성하는 process, swap-in process를 위한 메모리 할당 쉬움

  • 전체 Linked list가 DRAM에 위치
    : 공간 증가시 node의 개수 많아짐 → 유동적

  • 장점
    : allocation unit 작아도 node의 개수는 일정
    → 1B로 잡아서 internal fragmentation 없앨 수 있음

  • Procee X 종료시의 가능한 경우

➂ Allocating Memory for a newly created process

  • First Fit → 제일 빠름
    : scans along the list until it finds a hole that is big enough

  • Nest Fit
    : 지난번에 기억한 위치부터 검색

  • Best Fit
    : searches the entire list & takes the smallest hole available
    → 느리고 남은 fragment가 계속 많아짐

  • Worst Fit
    : takes the largest hole available

  • Quick Fit
    : 같은 size의 hole node를 링크

➃ Fragmmentation Problems

  • External Fragmentation
    : if the memory hole is too small to usable by any process
    → allocation unit 밖

  • Internal Fragmentation
    : unused memory in allocation unit that is not available to other processes
    → allocation unit 안

  • Memory Compaction
    : shift processes to make a big free memory hole

  • Partition size
    : no size if appropriate for all process

profile
Hongik CE

0개의 댓글