Compile Time binding
Load Time Binding
프로그램이 시작하고 메모리에 로드될 때, 물리적 메모리 주소 결정(컴파일 타임까지는 논리적 메모리 주소만 결정)
비어있는 메모리 주소부터 매겨짐
Loader의 책임하에 물리적 메모리 주소 부여
컴파일러가 재배치가능코드를 생성한 경우 가능(재실행 후 비어있는 메모리 주소에 재배치 가능)
Execution Time Binding(=Run Time Binding)
logical address를 physical address로 매핑해주는 하드웨어 장치
내부의 relocation register(=Base Register)와 limit register를 이용해 주소변환을 함
Base Register: 들어온 논리적 메모리 주소에 실제 프로세스가 메모리에 로드된 주소 값을 더함
limit register: 프로그램의 크기를 담고 있음(논리적 주소의 범위. 위 예의 경우 3000. base register 계산 이전에 검사)
악의적인 프로그램에 대비하기 위함.
예를 들어 프로그램이 3000크기의 프로그램인데 메모리 4000에 있는 값을 달라고 한다?
악의적인 프로그램
Dynamic Loading
Overlays
Swapping
Dynamic Linking
Linking: 여러 곳에 존재하는 컴파일된 파일들을 묶어 하나의 실행파일을 만드는 과정
Static Linking: 라이브러리가 프로그램의 실행 파일 코드에 포함됨.
동일한 라이브러리를 각각의 프로세스가 메모리에 올리므로 메모리 낭비
Dynamic Linking: 라이브러리가 실행 시 연결됨.
라이브러리가 이미 메모리에 있으면, 그 루틴이 주소로 가고 없으면 디스크에서 읽어옴
메모리는 일반적으로 OS 상주 영역(interrupt vector와 함께 낮은 주소 영역 사용)과 사용자 프로그램 영역(높은 주소 영역 사용)으로 나뉨
사용자 프로그램 영역 할당 방법
Contiguous Allocation(연속적 할당 방법. 프로그램 통째로 올림. 주소변환 간단)
각각의 프로그램이 통째로 메모리에 올라감
Fixed Partition Allocation
프로그램이 들어갈 영역을 미리 나눠놓음
외부 조각(프로그램의 크기보다 작은 영역이 남음), 내부 조각(프로그램의 크기보다 큰 영역에서 남은 영역)
Variable Partition Allocation
프로그램이 들어갈 영역을 미리 나눠놓지 않음(B가 수행을 끝내고 나가서 빈 자리가 남음. Hole 발생)
어느 hole에 후속 프로그램을 넣을까에 대한 문제
Compaction
외부 조각 문제를 해결하는 한 가지 방법
사용 중인 메모리 영역을 한군데로 몰고 hole들을 다른 곳으로 몰아 큰 block을 만듦
매우 비용이 많이 듦
Noncontiguous Allocation
https://core.ewha.ac.kr/publicview/C0101020140307151724641842?vmode=f