Digital Recipe

컴파일과 링킹, 그리고 로더 본문

컴퓨터 공학/컴퓨터 공학의 이해

컴파일과 링킹, 그리고 로더

노리터 2012. 3. 30. 23:32


1. 프로그램 개발을 위한 코드 작성부터 실행까지의 과정

컴퓨터 프로그램의 개발은 코드 작성(프로그래밍)부터 시작된다.

이렇게 작성된 코드는 사용자(개발자)가 컴퓨터가 수행해 주기를 원하는 내용을 기술한 것이지만, 컴퓨터가 이해할 수 있는 문법(언어)이 아닌 사용자가 이해할 수 있는 문법이다.

따라서 작성된 코드는 '컴파일(Compile)' 과정을 거쳐 컴퓨터가 이해할 수 있는 언어로 변환되며, 컴파일된 파일을 '오브젝트 파일(Object File)'이라고 부른다. 

일반적으로 하나의 프로그램은 여러 개의 오브젝트 파일과 공용 라이브러리로 조합이 되며, 하나의 컴퓨터가 실행할 수 있는 프로그램을 완성하기 위한 작업을 '링킹(Linking)'이라고 부른다. 결국 코드를 컴파일 과정과 링킹 과정을 거치면 사용자가 실행할 수 있는 '실행 파일(ex. EXE파일)'이 생성된다.

완성된 실행파일을 사용자가 실행(Execute)하게 되면 컴퓨터는 해당 프로그램의 내용을 메모리에 적재(Load)시키고 내용에 따라 프로그램을 수행하게 된다. 이러한 일을 수행하는 프로그램을 '로더(Loader)'라고 한다.



2. 코드 작성부터 실행까지의 과정 정리

위 내용을 정리해 보면 아래와 같다.

코드 작성 -- (컴파일) --> 오브젝트 파일 -- (링킹) --> 실행 파일 -- (로드) --> 메모리 적재 및 수행.



3. 컴파일 과정에 대한 자세한 고찰

컴파일 과정은 다시 컴파일 및 어셈블리로 자세하게 나눠 질 수 있다. 이렇게 자세히 구분하는 경우 코드를 컴파일 하면 해당 아키텍처(ex. INTEL)에 맞는 어셈블리어로 변환된다. 이후 어셈블리를 통해 0과 1로 이루어진 완벽한 컴퓨터를 위한 문법(오브젝트 파일)으로 다시 변환된다.

하지만 일반적으로 컴파일 과정이라 하면 컴파일+어셈블리 과정을 합쳐 말하며 한번 더 통합적으로 컴파일 과정이란 컴파일+어셈블리+링킹이라고 말하기도 한다.

                                   


4. 오브젝트 파일이란?

오브젝트 파일이란 컴파일과 어셈블리 과정을 거친 파일로서 0과 1로 이루어져 있다. 컴퓨터 아키텍처에 의존적인 파일이기 때문에 변환한 환경이 달라지는 경우 다시 컴파일과 어셈블리 과정을 거쳐야 한다. 오브젝트 파일만으로는 실행할 수 없으며 링킹 과정을 거쳐야 비로서 실행이 가능하다.

정리하여,

1) 오브젝트 파일이란 0과 1로 이루어진 파일이다.

2) 오브젝트 파일은 컴퓨터 아키텍처에 의존적이다. (아키텍처마다 달라진다.)

3) 실행 파일을 만들기 위해 링킹 과정을 거쳐야 한다.


5. 왜 프로그램은 실행하기 위해 메모리에 적재되어야 하는가?

우리가 코드를 작성하고 변환 작업을 거친 파일들이 저장되는 곳은 흔히 말하는 스토리지(ex. HDD, SSD..)이다. CPU와 스토리지가 직접 데이터를 주고 받기에는 너무 느리기 때문에 CPU가 처리하기 위한 모든 프로그램은 최소 메모리(ex. RAM)에 적재되어야 한다. (최소라고 말하는 이유는 메모리 종류에는 순차적으로 여러 개가 존재하기 때문이다.)     흔히 우리가 사용하는 RAM은 휘발성이기 때문에 평소에는 스토리지에 저장해 두었다가 필요한 부분만 메모리에 적재시켜서 사용하게 된다.



6. 어셈블리어란?

사용자, 컴퓨터 모두 이해할 수 있는 저수준(Low-Level)의 언어이다. 간단히 소개하자면 코드로 '직진할 것'이라고 기술했다면 어셈블리어는 '왼쪽 발을 앞으로 내밀고 오른쪽 발을 앞으로 내밀어라'식의 저수준 언어이다. 이러한 직접적인 내용을 0과 1로 표현한 것이 오브젝트 파일과 실행 파일이 될 것이다.



참고자료.

[01] http://ethobis.tistory.com/49

[02] http://cafe.naver.com/koreandev.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=6&

[03] http://cafe.naver.com/cafec.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=244226&

[04] http://rootfriend.tistory.com/entry/링크Linkers-와-로더Loaders



2012. 03. 30

Written By HoSeok Seo

Comments