본문 바로가기
5장 컴퓨터 과학/Computer Architecture

[컴퓨터 구조] 프로그램 번역과 실행

2021. 6. 1.

C 언어의 번역 계층

컴파일러

컴파일러는 C 프로그램을 어셈블리 언어 프로그램으로 바꾼다. 어셈블리 언어 프로그램은 컴퓨터가 이해할 수 있는 심벌 형태이다. 상위 수준 언어 프로그램은 어셈블리 언어보다 문장 수가 훨씬 적으므로 프로그래머의 생산성이 높아진다.

어셈블리 언어는 이진 기계어로 번역할 수 있는 기호화된 언어이다.

어셈블러

어셈블러는 어셈블리 프로그램을 기계어로 번역하므로 어셈블리 언어 프로그램을 목적 파일(object file)로 바꾼다. 목적 파일에는 기계어 명령어, 데이터, 명령어를 메모리에 적절히 배치하기 위해 필요한 각종 정보들이 혼합되어 있다.

어셈블리 언어는 상위 수준 소프트웨어와의 인터페이스이므로 원래는 없는 명령어를 어셈블러가 독자적으로 제공할 수도 있다. 이 명령어들은 하드웨어로 구현이 되어 있지 않더라도, 어셈블러가 알아서 처리하여 번역과 프로그래밍을 간편하게 해 준다. 이런 명령어들을 의사명령어(pseudoinstruction)라 한다.

링커

링크 에디터(link editor) 또는 링커(linker)는 따로 어셈블된 기계어 프로그램을 하나로 연결해 주는 일을 한다. 링커가 유용한 이유는 코드를 수정할 때 재컴파일하고 재어셈블하는 것보다 더 빠르기 때문이다. 링커는 컴퓨터에서 실행될 수 있는 실행 파일(executable file)을 생성한다.

로더

실행파일은 디스크에 있으므로 운영체제가 이를 읽어서 메모리에 넣고 시작시킨다. 로더는 목적 프로그램을 메인 메모리에 적재해서 실행할 수 있게 하는 시스템 프로그램이다.

동적 링크 라이브러리

전통적인 방식의 링크는 라이브러리 루틴이 실행 코드의 일부가 된다. 따라서 새로운 라이브러리가 나오더라도 정적으로 링크된 프로그램은 옛날 라이브러리를 사용해야 한다. 그리고 실행 파일에서 호출되는 라이브러리 루틴들은 호출의 실행 여부와 상관없이 전부 적재해야 한다. 따라서 프로그램에 비해 라이브러리가 클 수 있다.

이러한 단점을 개선하기 위해 동적 링크 라이브러리(dynamically linked library, DLL)가 등장하였다. 동적 링크 라이브러리는 실행 시에 프로그램과 링크되는 라이브러리 루틴이다.

반응형

댓글