컴퓨터 프로그래밍 공부/컴퓨터 구조 + 운영체제

주소 바인딩

게임 개발 2024. 4. 16. 15:30

 

 

주소 바인딩이란?

 

프로세스는 실행을 위해 메모리에 적재되면 프로세스를 위한 독자적인 주소공간이 생긴다.

이 주소를 논리적 주소라고 한다.

 

논리적 주소는 각 프로세스마다 독립적으로 할당된다.

 

그렇다면 프로세스는 왜 논리적 주소를 사용할까?

 

CPU가 프로세스의 작업을 수행하기 위해서 프로세스의 논리적 주소를 참조하게 된다.

논리적 주소만으로는 실제 메모리의 주소를 알 수 없기 때문에

논리 주소를 물리적 메모리로 연결시키는 작업이 필요하다.

이 작업을 주소 바인딩이라고 한다.

 

주소 바인딩의 종류로는

  • 컴파일 타임 바인딩
  • 로드 타임 바인딩
  • 실행 시간 바인딩

이렇게 세 가지의 바인딩 방식이 있다.

세 바인딩의 기준은 물리적 주소가 언제 결정되느냐에 따라 결정된다.

 

 

컴파일 타임 바인딩
Compile time binding

 

 컴파일 타임 바인딩은 말 그대로 컴파일 할 때 바인딩이 되는 것이다.

컴파일러가 물리적 주소 (절대주소) 를 생성할 때, 시작 위치가 변경 시 재 컴파일이 되는 것이다.

즉, 프로그램의 물리적 주소를 변겨하고 싶으면 다시 컴파일 해야한다는 말이 된다.

 

프로세스가 기억 장치 내에 적재될 위치가 컴파일 과정에 결정된다.

컴파일러는 절대코드 (Absolute Code) 생성(논리 주소의 위치가 물리주소와 같다)된다.

이 방법은 os도 없고 프로세스가 딱 하나 있을 때 주로 사용되는 방법이다. ex) 임베디드 시스템

 

 

 

 

적재 시간 바인딩
Load time binding

 

 프로그램의 실행이 시작될 때 물리적 주소가 결정된다.

이 바인딩에서는 로더가 메모리 주소를 부여하고 프로그램이 종료될 때 까지 물리주소가 고정된다.

 

해당 설명을 조금 더 풀어내자면,

실행이 시작될 때 적재될 위치가 컴파일 과정에 알려지지 않으면

컴파일러는 재배치 가능 상대 주소가 포함된 코드를 생성한다 라는 뜻이 된다.

 

즉 로드 타임 바인딩은 Loaderd의 책임하에 물리적 메모리 주소를 부여하는 것을 뜻한다.

 

상대 주소란?

상대주소 : 프로그램의 시작 주소를 0이라고 생각하고 생성하는 것

 

 

실행(수행) 시간 바인딩
Run time binding

 

 프로그램이 실행한 후에도 물리적 주소가 변경될 수 있는 바인딩 방식이다.

런타임 바인딩에서는 CPU가 주소를 참조할 때마다

해당 데이터가 물리적 메모리의 어느 위치에 존재하는지

주소 매핑 테이블을 이용해 주소 바인딩을 점검한다.

그리고 주소 매핑 테이블 뿐 만 아니라 기준 레지스터, 한계 레지스터, MMU가 필요하다.

 

런타임에 바인이이 이루어지는 것이 현대 운영체계로,

수행이 시작된 이후에 프로세스의 메모리 상 위치를 옮길 수 있는 것을 말한다.

하드웨어적인 지원이 필요하다 (MMU, 레지스터)

 

기준 레지스터란?

프로세스의 물리적 메모리의 시작 주소를 가지고 있다.

 

한계 레지스터란?

현재 CPU에서 수행중인 프로세스의 논리적 주소의 최대값,

프로세스의 크기를 가지고 있다.

 

 

중첩(Overlay)

 실제 기억장치의 크기는 작은데, 수행해야 할 프로그램이 큰 경우 해결하는 방식이다.

프로세스의 크기 < 실제 기억장치의 크기 일 때는 해당 프로세스가 기억장치 내에 적재된다.

프로세스의 크기 > 실제 기억장치의 크기 일 때는 중첩 기법을 이용하여 해결 한다.

 

MMU (MemotyManagement Unit)

 

MMU는 논리적 주소를 물리적 주소로 매핑해주는 하드웨어이다.

( = Logical Address를 Physical Address로 매핑해주는 Hardware Device이다.)

 

사용자 프로세스가 CPU에서 수행되며 생성해 내는 모든 주소값에 대해

Base register(= 기준 레지스터)의 값을 더해준다.

 

Logical Address가 실제 개발자가 사용하는 주소이며,

Physical Address는 볼 수 없으며 알 필요 없게 해주는 것이다.

 

런타임 바인딩은

프로그램이 실행한 후에도 물리적 주소가 변경될 수 있는 바인딩 방식이다.

런타임 바인딩에서는 CPU가 주소를 참조할 때마다 해당 데이터가

물리적 메모리의 어느 위치에 존재하는 지 주소 매핑 테이블을 이용해 주소 바인딩을 점검한다.

 

그리고 주소 매핑 테이블 뿐 만 아니라 기준 레지스터, 한계 제리스터, MMU가 필요하다.

런타임 바인딩은 메모리에 프로세스의 주소공간이 연속적으로 적재되어 있음을 가정한다.