Static Linking 부터 로드까지

내가 듣는 강의에서는 Linking부터 로드까지 간단하게 설명했지만... 자세하게 들여다 보면 정말정말 복잡한 과정이다. 과정을 자세히 알고 싶다면 이 링크를 타고 보면 된다. 정말 상세하게 정리해두셨다.

https://it-eldorado.tistory.com/49#comment9843287

 

[CSAPP] Linking

※ 링킹은 워낙 복잡한 과정이어서 CSAPP 서적에서도 아주 세부적인 내용까지는 설명하지 않고 있다. 그래서 분명 필자처럼 책을 다 읽고도 찝찝한 감정이 사라지지 않는 사람들이 있을 것이다.

it-eldorado.tistory.com

 

Object Module 생성

어셈블러는 프로그램을 기계 명령어로 변환.

코드를 가지고 프로그램을 만들기 위해 Object Module을 생성한다.

Object Modue은 다음과 같은 구조를 가지고 있다.

  • 헤더: Object Module에 대한 기본 정보에 대해 설명하는 섹션
  • Text segment(code): 변환된 명령어가 저장되있는 섹션
  • Static data segment: 프로그램에 사용되는 전역 변수나 정적 변수들이 저장되는 섹션
  • relocation info segment: 실행 주소를 결정하기 위한 정보가 저장 되있는 섹션. 상대 위치 (예를 들면 분기 명령어의 offset)
  • Symbol table: 프로그램에 사용되는 심볼(변수, 함수, 레이블)의 메모리 주소간의 매핑 정보가 저장되있는 섹션
  • debug info: 디버깅을 위한 소스코드 정보

실행 가능한 이미지 생성

  1. 여러 object module의 segment 병합
  2. Label의 주소값 결정
  3. location 종속 및 외부 라이브러리 및 모듈 참조 해결

이때 relocating loader의해 location dependencies의 주소가 재배치 되는데, 가상 메모리 방식을 사용하기에 이것을 할 필요가 없다.

MMU라고 불리는 메모리 관리 유닛이 이를 관리해주므로 우리는 일일히 물리 주소를 재배치할 필요가 없다.

프로그램 로딩(메모리 적재)

  1. 헤더를 읽고 각 세그먼트 사이즈 파악
  2. 가상 주소 공간 생성
  3. 코드와 데이터를 메모리에 적재 (페이징 기법이 적용될 경우, 페이지 테이블에 페이징 테이블 엔트리를 적재)
  4. 스택에 argument 할당
  5. 레지스터 초기화
  6. startup routine으로 점프 (메인함수 콜)

'컴퓨터 구조' 카테고리의 다른 글

실수의 표현과 연산  (0) 2023.07.06
사칙연산 원리  (0) 2023.07.05
명령어 addressing  (0) 2023.06.30
함수 호출 작동 방식  (0) 2023.06.28
ISA, ABI, 명령어의 구조  (0) 2023.06.28