내가 듣는 강의에서는 Linking부터 로드까지 간단하게 설명했지만... 자세하게 들여다 보면 정말정말 복잡한 과정이다. 과정을 자세히 알고 싶다면 이 링크를 타고 보면 된다. 정말 상세하게 정리해두셨다.
https://it-eldorado.tistory.com/49#comment9843287
Object Module 생성
어셈블러는 프로그램을 기계 명령어로 변환.
코드를 가지고 프로그램을 만들기 위해 Object Module을 생성한다.
Object Modue은 다음과 같은 구조를 가지고 있다.
- 헤더: Object Module에 대한 기본 정보에 대해 설명하는 섹션
- Text segment(code): 변환된 명령어가 저장되있는 섹션
- Static data segment: 프로그램에 사용되는 전역 변수나 정적 변수들이 저장되는 섹션
- relocation info segment: 실행 주소를 결정하기 위한 정보가 저장 되있는 섹션. 상대 위치 (예를 들면 분기 명령어의 offset)
- Symbol table: 프로그램에 사용되는 심볼(변수, 함수, 레이블)의 메모리 주소간의 매핑 정보가 저장되있는 섹션
- debug info: 디버깅을 위한 소스코드 정보
실행 가능한 이미지 생성
- 여러 object module의 segment 병합
- Label의 주소값 결정
- location 종속 및 외부 라이브러리 및 모듈 참조 해결
이때 relocating loader의해 location dependencies의 주소가 재배치 되는데, 가상 메모리 방식을 사용하기에 이것을 할 필요가 없다.
MMU라고 불리는 메모리 관리 유닛이 이를 관리해주므로 우리는 일일히 물리 주소를 재배치할 필요가 없다.
프로그램 로딩(메모리 적재)
- 헤더를 읽고 각 세그먼트 사이즈 파악
- 가상 주소 공간 생성
- 코드와 데이터를 메모리에 적재 (페이징 기법이 적용될 경우, 페이지 테이블에 페이징 테이블 엔트리를 적재)
- 스택에 argument 할당
- 레지스터 초기화
- 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 |