컴퓨터 구조

컴구 translation and startup

cheesecrust1008 2022. 9. 30. 18:01

위는 프로그램이 실행되는 과정을 나타낸 구조이다. 

 

처음에는 프로그램이 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