위는 프로그램이 실행되는 과정을 나타낸 구조이다.
처음에는 프로그램이 compiler를 통해서 어셈블리 프로그램으로 바뀐다.
그 후 어셈블러를 통하여 object 로 바뀐다. 그 후 linker 를 통해서 executable 로 변환되고, loader를 통해서 메모리로 간다.
object module 구성요소 :
위는 object module 을 간단하게 나타낸 것이다.
위에서 볼 수 있듯이 구성요소는 object file header/ text segment / data segment / roelocation information/ stmbol table 이 있다.
text segment 는 명령어가 저장 되어 있는 주소와 instruction 이 쓰여 있다.
data segment 는 data가 저장되어 있는 곳이다.
relocation information 은 text segment 등에서 branch를 할 수 있는 곳이 있다면 이의 dependency 를 저장해 두는 것이다.
symbol table 은 위의 relocation 의 dependency 의 주소를 쓰는 공간이다.
그리고 위와 같은 object 들을 합쳐서 executable 을 만들게 된다.
한편, 위애서의 $gp + 8000을 계산 해 보자.
위와 같이 계산이 되는데, 그 이유는 8을 이진수로 나타내게 된다면 1000 이 된다. 따라서 msb가 1 이므로 앞의 자리가 모두 1로 채워지게 되고, 이는 모두 f가 된다.
그리고 이렇게 만들어진 executable 은 loader를 통해서 memory로 loading 이 되는데, 이때에 virtual address 를 사용하게 된다. 그 이유는 위의 executable에 작성된, 메모리 주소가 정확하게 할당된지 않을 수 있는데, virtual address를 활용한다면 그대로 사용할 수 있기 때문이다.
dynamic linking
다인믹 링킹은 외부 라이브러리를 가져올 때에 이 object 자체를 executable로 합는 것 보다는 linking 하여 바뀌었을 때 피헤를 최소화 합니다.
'컴퓨터 구조' 카테고리의 다른 글
컴퓨터 구조 (0) | 2022.10.11 |
---|---|
컴퓨터 구조 (1) | 2022.10.04 |
컴퓨터 구조 (07) (0) | 2022.09.29 |
컴퓨터 구조(06) (1) | 2022.09.23 |
컴퓨터 구조(05) (0) | 2022.09.20 |