프로그램의 주소 할당

이찬영·2021년 9월 1일
0

OS

목록 보기
25/35

프로그램의 주소 할당

프로그램은 평상시 이진 실행 파일로 존재하다 메모리에 올라가는 순간 프로세스가 된다. 그러면 프로세스는 어떤 주소에 할당되며 프로그램 내 필요한 변수 주소를 어떻게 찾아야할까? 이러한 문제는 아래와 같이 해결할 수 있다.

  1. 프로그램 내 count 변수가 있다고 하자.
  2. 컴파일러는 count 심볼 주소를 재배치 가능한 주소(첫 주소로 부터 14번째 바이트)로 바인딩한다.
  3. 링커나 로더가 재배치 가능 주소를 절대 주소(예를 들어 74014번지)로 바인딩한다.

명령어와 데이터의 바인딩 시점

메모리 주소 공간에서 명령어와 데이터의 바인딩은 발생 시점에 따라 구분된다.

  1. Compile Time
    프로세스가 메모리 내에 들어갈 위치를 컴파일 시간에 미리 알 수 있으면 컴파일러는 절대 코드( absolute code)를 생성할 수 있다. 예를 들면 사용자 프로세스가 R번지로부터 시작한다는 것을 미리 알 수 있으면 컴파일러는 번역할 코드를 그 위치에서 시작한다. 만일 이 위치가 바뀌면 재 컴파일 되어야 한다.

  2. Load Time
    만일 프로세스가 메모리 올라오게 될지를 컴파일 시점에 알지 못하면 컴파일러는 일단 이진 코드를 재배치 가능 코드로 만들어야 한다. 이 경우 심볼과 진짜 번지수와의 바인딩은 프로그램이 메인 메모리로 실제로 적재되는 시간에 이루어지게 된다. 이렇게 만들어진 재배치 가능 코드는 시작 주소가 변경되면 아무 때나 사용자 코드를 다시 적재하기만 하면 된다.

  3. Execution Time
    만약 프로세스가 실행하는 중간에 메모리 내의 한 세그먼트로부터 다른 세그먼트로 옮겨질 수 있다면 우리는 바인딩이 실행 시간까지 허용되었다고 이야기 한다. 이것을 가능캐 하려면 특별한 하드웨어가 필요한다.

0개의 댓글