CPU가 프로세스의 작업을 실행하기 위해서는 논리적 주소만으로는 실제 메모리의 주소를 알 수 없기 때문에 논리주소와 위에서 언급했던 물리적 주소를 매핑해주는 작업이 필요한데 이 작업을 주소 바인딩이라고 합니다.
CPU에 의해서 가상으로 생성되는 주소체계를 논리적 주소라고 한다.
이 논리적 주소를 물리적 주소와 매핑해서 사용하게 되죠.
여기서 논리적 주소와 물리적 주소를 매핑해주는 장치가 바로 아래에서 공부해볼 MMU
주소 바인딩 방식은 아래와 같이 세가지가 있다.
위 세가지 주소 바인딩의 차이는 물리적 주소가 언제 결정 되느냐 차이
컴파일 타임 바인딩은 말 그대로 컴파일 할때 물리적 메모리 주소가 결정 되는 주소 바인딩 방식.
논리적 주소와 물리적 주소가 같을때.
1-2. 로드 타임 바인딩
로드 타임 바인딩은 프로세스의 실행이 시작될때 물리적 주소가 결정.
프로세스 내부의 메모리 시작을 0번지부터해서 상대 주소라고 한다.
프로세스 안에서 사용하는 메모리 주소를 프로세스 전체를 로딩할때 이 프로세스가 로딩되는 위치에 따라서 물리적 주소를 매핑해주는 것.
프로세스가 실행 될 때마다 물리적 주소를 매핑해주는데, 바꿀때 마다 매핑을 새로 해주면 메모리를 로딩할 때 시간이 오래 걸리는 문제가 발생합니다. 프로그램을 실행 할 때 코드 명령어를 저장하는 세그먼트가 굉장히 많은데, 하나하나 실행 될때 마다 계싼
위 두가지 방식을 보완한게 런타임 바인딩.
1-3 실행 시간 (런타임) 바인딩
실행 시간 바인딩이란 말 그대로 프로그램이 실행한 후에도 물리적 주소가 변경될 수 있는 바인딩 방식입니다.
런타임 바인딩은 CPU가 주소를 참조할 때 마다 해당 데이터가 물리적 주소의 어느 위치에 있는 지 주소 매핑 테이블을 이용해서 바인딩을 확인한다.
또한 위의 로드 타임 바인딩에서 설명했었듯이 세그먼트가 굉장히 많고 하나하나 실행할때마다 계산을 해줄 경우 Software가 아닌 hardware 가 작업을 수행해준다.
연속 메모리 할당.
운영체제는 메모리 양 끝에 위치할수 있지만 보통 낮은 메모리에 위치.
보통 여러 프로세스가 동시에 메모리에 적재되어 있는 것이 효율적이기 때문에 우리는 입력 큐에서 대기 중인 프로세스들에게 메모리를 어떻게 효율적으로 할당 해야 하는 가에 대한 고민을 계속 해야 한다. 위와 같은 연속 메모리 할당 시스템에서 프로세느는 연속된 메모리 공간을 차지하게 된다.
논리적 주소가 연속적이면 물리적 주소도 연속적으로 할당 된다.
그렇다면 왜 요즘은 연속 메모리 할당을 쓰지 않을까?
이유는 Fragmentation에 과한 건데 Paging 기법이 나온 이유이기도 한다.
위에서 언급했듯이, 프로세스의 논리적 주소는 실행 시점에 어떠한 하드웨어에 의해 물리적인 주소 공간으로 매핑
이때, Relocation Register와 Limit Register라는 하드웨어가 논리적 주소와 물리적 주소 매핑에 사용되며, MMU register는 CPU 코어 안에 탑재 되어 이 두가지 레지스터의 값을 더하여 논리적 주소로 부터 물리적 주소 공간을 지정해주는 레지스토
MMU 방식에서는 기준 레지스터값 + 논리적 주소 값을 통해서 주소 바인딩을 합니다.
단편화 문제

Compaction이란?

-> 문제가 아직 남아 있다.
Page 기법
Pages: 논리 메모리를 일정한 사이즈로 분할한 블록.
Frames : 물리 메모리를 일정한 사이즈로 분할한 블록.

논리적 메모리 특정 주소값을 페이징1의 첫번째 Offset으로 표현 가능, 물리적 특정 주속밧 또한 프레임 1의 첫번째 Offset 으로 표현 가능.
-> 내부 단편화 존재
요건 무시
4-1

