Address Binding은 어떤 프로그램이 메모리의 어느 위치에, 즉 어떤 물리적 주소에 load 될지를 결정하는 과정이다. 프로세스의 주소(Address)는 논리적 주소(Logical address)와 물리적 주소(Physical address)로 나뉜다.
논리적 주소는 가상 주소(Virtual address)라고도 하며, CPU가 생성하는 주소이다. 프로세스마다 독립적으로 가지는 주소 공간이기 때문에 프로세스의 내부에서 사용하고, 각 프로세스마다 0부터 시작한다. 물리적 주소는 프로세스가 실행되기 위해 실제로 메모리(RAM)에 올라가는 위치이다.
Run-time(실행 시간) 동안 가상 주소를 물리적 주소로 변환해주는 하드웨어이다.
논리적 주소는 반드시 사용되기 전에 물리적 주소로 변환되어야 한다.
런타임에 필요한 부분을 그때그때 메모리에 올리는 것을 Dynamic loading이라고 한다.
Dynamic linking이란 실행 가능한 목적 파일을 만들 때 프로그램에서 사용하는 모든 라이브러리 모듈을 복사하지 않고 해당 모듈의 주소만을 가지고 있다가, 런타임에 실행 파일과 라이브러리가 메모리에 위치될 때 해당 모듈의 주소로 가서 필요한 것을 들고 오는 방식이다.
Contiguous Allocation 시스템은 말 그대로, 각 프로세스들이 연속적인 메모리 공간을 차지하게 되는 것이다. 각 프로세스를 메모리에 담기 위해 메모리는 미리 공간을 분할해두는데, 고정된 크기로 나누는 고정 분할 방식과 프로세스의 크기를 고려해서 나누는 가변 분할 방식이 있다.
First-fit: 가장 최초로 발견된 hole에 할당한다.
Best-fit: 가장 작은 hole을 찾아 할당한다. 거의 딱 맞는 크기를 할당하기 때문에 아주 작은 hole들이 많이 생성된다.
Worst-fit: 가장 큰 hole에 할당한다.
프로세스들이 메모리에 적재되고 제거되는 일이 반복되면 프로세스들이 차지하는 메모리 틈 사이에 사용하지 못할 만큼의 작은 공간들이 늘어나게 되는 현상을 fragmentation이라 한다.
Internal fragementation - 프로세스가 사용하는 메모리보다 쪼개진 공간이 더 큰 경우
External fragmentation - 남은 공간을 다 했을 프로세스가 들어갈 수 있는 공간은 있지만 연속된 공간이 없어 사용을 못하는 경우
Segmentation는 프로세스를 논리적 내용을 기반으로 나눠서 메모리에 배치하는 것을 말한다. 최대의 장점은 공유가 쉽다.
Segment table: 2차원적 물리적 주소를 매핑해준다.
Base: 물리적 주소
Limit: 세그먼트 길이
Paging은 프로세스가 차지하는 물리적 메모리 공간이 비연속적이 되도록 허용하는 메모리 관리 기법이다. 쉽게 말해 fixed-size. 즉, 크기를 다 같게 하는 것이다. 크기가 같기 때문에 똑같이 할당을 하여 External fragmentation은 발생하지 않지만 메모리 크기가 딱 맞아 떨어지지는 않기 때문에 internal fragmentation은 발생한다.