엔지니어가 되고 싶은 공돌이

03. C언어 동작 과정과 개념 본문

C Language/Base C

03. C언어 동작 과정과 개념

Geca 2021. 2. 11. 17:19


3. 1 고급언어, 어셈블리어, 기계어

  C언어를 포함한 다양한 프로그래밍 언어를 공부하다 보면 컴파일러, 어셈블러, 링커, 빌드, 로더,  고급언어, 저급언어, 어셈블리어, 기계어라는 용어들을 들어보실 수 있을겁니다. 해당 글에서는 위 개념들에 대하여 쉽게 이해하실 수 있도록 설명드리도록 하겠습니다.

 

 

3. 1. 1 컴퓨터가 이해하는 언어: 기계어

  기계어는 컴퓨터가 이해할 수 있는 언어, 즉 1(on)과 0(off)으로 구성된 언어를 말합니다. 컴퓨터는 오직 1과 0의 조합으로 이루어진 문장만을 이해할 수 있습니다. 그래서 아주 옛날에는 0과 1로 코딩을 작성했는데요. 하지만 이 방법은 저희 같은 사람들이 작성하기에 너무나 어렵고 생산성도 떨어진다는 문제점이 있었습니다.  그래서 이런 문제점을 타파하고자 그 다음으로 나온 언어가 어셈블리어 입니다.

 

 

3. 1. 2 기호로 작성된 언어: 어셈블리어

 

  위 기계어를 어셈블리어로 바꿔보았습니다. 어셈블리어는 위 이미지를 보시는 것처럼 사람이 직관적으로 볼 때 이해가 되도록 기호를 사용하는 언어입니다. 저희는 위 언어를 보고 A와 B를 더하면 되겠구나라고 생각할 수 있습니다. 하지만 어셈블리어도 복잡한 수학, 과학적 연산을 표기하기에는 여전히 어려우며, 명령어를 한 줄에 하나만 지정할 수 있어서 다차원적인 코딩이 어렵다는 단점을 가지고 있습니다. 그래서 선대 프로그래밍 언어 개발자분들은 이러한 문제를 해결하고자 고급언어라는 걸 개발하였습니다.

 

 

3. 1. 3 사람의 언어와 유사한 프로그래밍 언어: 고급 언어

 

A+B

 

  고급 언어는 저희가 익히 들어온 모든 언어들이 포함됩니다. C언어, C++, Java, Python, ... 등 사람이 이해하기 쉽도록 작성하는 모든 언어를 비롯해 고급 언어(High-level programming Language)라고 칭합니다. 영어와 비슷한 구문으로 작성할 수 있고, 따라서 프로그래머가 이해하기가 매우 쉽습니다. system을 전문적으로 다루는 개발자가 아닌 이상 저희들은 고급언어만을 사용해서 수 많은 종류의 프로그램을 작성할 수 있습니다!

 

 

3. 1. 4 기계어 + 어셈블리어: 저급 언어

 

    고급 언어와 대비되는 기계어와 어셈블리어를 합쳐서 저급 언어라고 부릅니다.(C언어는 하드웨어를 전문적으로 다를 수 있어서 저급 언어라고 부르시는 분들도 몇 분 계십니다. 그리고 저급 언어와 고급언어의 특성을 모두 가지고 있어 중급 언어라고 칭하고 합니다.)


3. 2  C언어 번역 과정 (컴파일러, 어셈블러)

3. 2. 1 컴파일러와 어셈블러

 

  저희는 시스템 개발자가 아닌 이상 고급언어로 대부분의 프로그램을 작성 할 수 있다고 말씀을 드렸습니다. 하지만 컴퓨터는 0과 1만을 이해하는데 A+B를 어떻게 컴퓨터가 이해할 수 있도록 바꿀 수 있을까요? 바로 컴파일러와 어셈블러를 사용하면 됩니다.

 

컴파일러(Compiler): 고급언어 -> 어셈블리어로 해석

어셈블러(Assembler): 어셈블리어 -> 기계어로 해석

 

 

위 이미지처럼 컴파일러와 어셈블러를 사용해 사람이 이해할 수 있는 고급언어를 기계가 이해할 수 있는 기계어로 변경시킵니다.


3. 3  C언어 실행 과정 (링커, 빌드, 로더)

3. 3. 1 object file  

 

더 나아가서 0과 1로 구성된 기계어가 어떻게 컴퓨터에서 실행되는지 확인해 봅시다.

기계어로 번역된 파일을 저희는 object file 이라고 부릅니다. '.obj' 포맷을 가지고 있습니다.

 

 

 

3. 3. 2 링커 (Linker)

 

링커(Linker)는 기계어 파일과 라이브러리 파일을 합쳐주는 역할을 합니다. 링커가 수행되는 것을 'build 한다'라고 말하며, 이렇게 합쳐진 파일을 'executable file(실행가능한 파일)'이라고 부릅니다. 이렇게 만들어진 파일은 저희 컴퓨터의 HDD, SSD(다른 말로 보조기억장치 라고 부릅니다)에 저장이 됩니다.

 

3. 3. 3 로더(Loader)

 

그리고 저희가 실행가능한 파일을 실행시키면 로더(Loader)가 보조기억장치에 있는 실행파일을 저희의 Main Memory(주 기억 장치)에 가져오게 됩니다. 이후 CPU가 Main Memory에 있는 실행파일의 명령어를 한줄 씩 읽어오며 프로그램을 실행하게 됩니다.


References

[1] Computer Organization and Design: The Hardware/Software Interface 15pp.

[2] Computer Organization and Design: The Hardware/Software Interface 124pp.

 

'C Language > Base C' 카테고리의 다른 글

06. C Operation  (0) 2021.02.15
05. Printf, Scanf & Format String &Escape Sequence  (0) 2021.02.14
04. C언어의 자료형  (0) 2021.02.14
02. Hello World! 설명 (C언어)  (0) 2021.02.11
01. C 언어 프로그램(Dev C++) 설치 및 소개  (0) 2021.02.11
Comments