케네스로그

컴퓨터의 동작 과정 본문

Dev

컴퓨터의 동작 과정

kenasdev 2021. 9. 23. 22:08
반응형

컴퓨터는 어떻게 동작하나?

전기적 신호부터..

컴퓨터는 연산을 수행할 수 있는 전기적 장치를 말한다. 여기서, '전기적'이라는 의미는 전기적인 신호를 인식할 수 있다는걸 뜻한다. 전기적 신호를 시각화하면 위와와 같이 표현할 수 있다.

 

0~5volt의 전류가 흐르고, 컴퓨터는 0volt일때 전기가 흐르지 않는다, 5volt일때 전기가 흐른다고 인식한다. 이렇게 전기가 흐르거나 흐르지 않는 두 가지의 상태(binary)는 0 또는 1로 표현되며, 컴퓨터 세계에서의 가장 작은 단위가 된다.

1개의 전기적 신호는 bit라는 단위를 가지며, 8개의 연속적인 전기적 신호를 묶어 1 byte라고 부른다. 이런 단위를 통해 컴퓨터는 문자, 숫자, 명령을 인식한다.

  • 문자: '#'라는 문자는 10101010으로 표현하기로 약속함.
  • 명령: 두 숫자를 더하라는 명령은 10000011로 약속함.

 

 

 

 

 

기계어, 그리고 어셈블리어

기계어(Machine code)는 CPU가 이해하고 직접 실행할 수 있는 컴퓨터언어를 말한다. 1과 0으로 구성된 비트 단위로 구성된 언어이기때문에 사람이 이해할 수 없다.

기계어로 Hi를 출력하는 프로그램.

 

 

사람이 1과 0만으로 코드를 작성하고 컴퓨터를 조작하는 것은 매우 힘든 일이 될것이다. 사람들은 기계어에 대응되는, 사람이 이해할 수 있는 상위 언어를 만들었다. 이 언어를 어셈블리어(Assembly Language)라고 하며, 이는 기계어와 1:1 대응된다. AMD, Intel등과 같은 CPU 제조사들은 메뉴얼을 통해 어셈블리어 사용법을 제공한다. 컴퓨터 구조, 프로세서의 모델에 따라 기계어가 달라지며, 이에 대응되는 어셈블리어도 달라진다. 

 

 

 

C언어로 작성된 간단한 출력 프로그램.

위의 C언어로 작성된 프로그램은 인간이 충분히 이해할 수 있는 고급수준의 언어(high-level)이다. 이는 컴파일러에 의해 컴파일되어 어셈블리어로 변환된다. 아래는 위의 코드를 어셈블리어로 변환시킨 예제이다.

 

 

위의 C언어 코드를 변환한 예시.

 

 

 

 

전통적인 컴파일과 실행 과정

기계와 가까워질수록 저급언어, 인간에게 친숙할수록 고급언어라고 한다. 일반인 고급 프로그래밍 언어가 기계어로 변환되는 과정에 대해 알아보자.

 

 

C/C++로 작성된 소스코드가 기계어로 변환되는 과정.

C/C++로 작성된 소스코드는 컴파일러를 통해 어셈블리어로 변환된다. 이 어셈블리어는 어셈블러를 통해 프로세서에서 직접 실행 가능한 기계어로 변환된다.

 

 

C 프로그램이 컴퓨터에서 실행되기까지의 과정

대부분의 언어는 컴파일러가 특정 기계에서 동작할 수 있는 코드를 직접 생성한다. C/C++ 프로그램을 윈도우에서 컴파일해서 실행파일을 생성한다면 해당 파일은 윈도우 머신에서만 실행가능하다. 윈도우를 위한 컴파일러와 윈도우라는 OS를 묶어서 플랫폼(platform)이라고 부른다. Windows 플랫폼, Mac플랫폼, Linux플랫폼 등 여러개의 플랫폼이 존재하며, 개발자는 모든 플랫폼을 위한 각자의 어셈블러를 만들어야만 한다. 이러한 문제를 착안하여 등장하는 언어가 Java이다.

 

다음 포스팅에서는 자바가 전통적인 컴파일/실행과정과 어떻게 다른지 알아보도록 하겠다.

반응형