Hello Computer Vision

비전공생의 컴퓨터 구조 5주차 강의 기록 본문

컴퓨터구조

비전공생의 컴퓨터 구조 5주차 강의 기록

지웅쓰 2022. 11. 8. 23:01

이번 강의에서는 링커(Linker)에 대해서 자세히 설명하셨는데요,

 

Linker

Object 파일들을 merge 한다, 각 파일들에 대해 메모리 주소를 배치한다.(주소 결정)

컴파일 때의 효율성, 디스크의 효율성, 다른 사람의 파일을 재활용하기 쉽게 해준다(Modularity)

이러한 장점들이 있으며 object 파일들을 연결해서 실행파일을 만드는 컴파일러 드라이버이다.

 

Object 파일은 실행파일이 아닌 머신코드와 데이터 파일이다. 연결되기 전에는 다른 파일에서 참조한 코드들에

대해서는 ?로 되기도 하는데 이러한 것들을 심볼(symbol)이라고 한다. (후에 더 이야기가 나온다.)

Object 파일들은 불완전한 조각들이다. 

이러한 조각들을 링커를 활용해 연결한다면 실행파일을 만들며 virtual 메모리에 할당되는 것이다.

(그전에는 단순히 데이터와 코드의 모음)

 

링커는 2가지 작업을 한다.

1. symbol resolution : 외부에 참조된 변수들을 정확히 어떤 변수인지 명시

2. relocation : 코드와 데이터를 각각 묶는다 -> 주소를 결정한다.

 

Why Linker 사용?

한번에 파일을 크게 만들고 컴파일하면 고칠 때 처음부터 끝까지 컴파일을 다시 해야하므로 불편하며

효율적이지 않다.

-> 작은 조각들을 합치는 것(Modularity) + 시간적, 공간적 효율성(Efficiency)

 

Object 파일의 format은 각 os마다 조금씩 다르다.

파일들이 메모리로 올 때 한번에 오는 것이 아니라 os에 정의된 페이지 형태로 온다.(4byte, 4kb..)

 

전역변수 : 함수 밖에서 정의된 함수이다. 어디서든 접근이 가능하다.

지역변수 : 함수 안에서 정의된 변수이다. 함수 안에서만 사용 가능하다.

 

Object 파일에서 2가지 요소가 있는데

Life : 로컬 변수들을 불러오면 life이고 return 하면 dead이다.

scope : 함수의 scope은 전역이다.(어디서든 사용 가능)

메모리 스택의 static공간에 local변수를 가져오면 계속 가지고 있을 수 있다.
(static 공간은 항상 live)

 

오늘은 5주차 강의를 들어봤는데요, object file에 대해서도 다양한 종류들이 있었는데 이 부분은

가볍게 들으면서 넘어갔습니다.

 

해당 필기는 최린 교수님 강의를 필기한 것입니다.

https://www.youtube.com/watch?v=NI1nrmKMH6g