본문 바로가기

STUDY/운영체제

[2019.07.01] Memory Management

memory 할당 및 할당 후 보호

요구사항
- Relocation : 프로세스는 실행하는 동안 다른 메모리 위치를 점령한다. 프로그램이 실행되는 동안 디스크로 swap 되고 다른 위치의 main memory로 반환된다.
- Sharing :  몇몇 process들이 memory의 같은 부분에 접근하는 걸 허용

Memory Partitioning
- Equal-size Paritioning : 모든 process의 memory를 똑같이 할당한다. 하지만 이러면 안쓰게 되는 부분(internal fragmentation)있다. 메모리 낭비.
- Unequal-size Partitioning : memory 공간을 효율적으로 할당할 수 있지만 시간, OS가 낭비 된다.
- Dynamic Partitioning : process 크기만큼만 할당한다. -> Internal fragmentation이 없어진다. 하지만 시간이 지날수록 빈공간이 생긴다. 빈공간의 합이 10M라고 프로세스 크기가 9M이 넋을 사용 못한다. -> external fragmentation이 발생한다. -> relocation (빈공간을 위로 올린다.) 하지만 관리가 복잡해지고 쓰고 안쓰는 공간을 알고 있어야 한다.

Buddy System
  Buddy System은 2^n 단위이다.
  요청 크기가 2^(u-1)초과 2^u이하이면 2^u만큼을 다 할당해준다. 해당 조건을 만족시키지 못하면 두 가족으로 나눈다. 이때 한
 조각이 buddy. 또, 두 조각 중 한조각만 나누어질 수 있음. Release될 때 해당 공간 회수하고 buddy가 비었으면 합치고 아니면
 그냥 끝남.

memory 주소의 타입
- Physical address : 실제 main memory 주소
- Logical address : memory가 사용하는 주소가 아니라 process가 사용하는 주소
- Relative address : 시작번지부터 얼마나 떨어져있는 지를 기준으로 이동.
- Virtual address : 32bit (1GB 커널, 3GB stack heap bss data code)

Instruction과 data의 memory binding
- Address binding : logical address를 physical address로 바꾼다. 세 단계에 걸쳐 발전함.
   1. compile time Binding : 컴파일 하고나면 시작 주소가 바로 있고 컴파일 한 process를 memory에 올리면
    Logical address == Physical address. 컴파일하는 user가 main memory의 상태를 다 알아야 한다. relocation이 안된다.
   2. Load time Binding : 컴파일 하고나면 프로그램 시작 주소가 $BA로 정의되어 있다. memory에 올리면 $BA의 값이
    지정되면서 Logical address == Physical address. relocation이 안된다.
   3. Execution time Binding : memory에 올리고 나서도 프로그램 시작 주소가 정해지지 않고 $BA이다. 실행할 때 binding된다.
    따라서 $BA값만 바꾸면 relocation도 가능하다. Logical address != Physical address

Paging : memory에 생기는 빈공간들에 Process를 조각내어 넣자. process의 조각들이 page
- Page Table
  각 PCB마다 page table 가지고 있다. Index와 Content가 있는데 main memory에 몇 번 frame에 각 process 조각 순서가
 있는지 저장되어 있다.

Segmentation
 program의 모든 segment는 똑같은 길이가 아니다. paging은 equal size fixed partitioning와 비슷한 방법이고 segmentation은 dynamic partitioning과 비슷.
 얘도 process를 조각내어 segment table에 size, 시작 주소를 저장하는 것이다.