#include <stdio.h>
int main()
{
printf("hello wolrd")
return 0;
}
hello 프로그램은 프로그래머가 에디터로 작성한 소스 프로그램(또는 소스파일)으로 생명을 시작하며, hello.c라는 텍스트 파일로 저장한다.
소스 프로그램은 0 또는 1로 표시되는 비트들의 연속이며, 바이트라는 8비트 단위로 구성되며, 각 바이트는 프로그램의 텍스트 문자를 나타낸다
hello.c처럼 오로지 아스키 문자들로만 이루어진 파일들은 텍스트 파일이라고 부르며, 다른 모든 파일들은 바이너리 파일이라 부른다.
모든 시스템 내부의 정보(디스크 파일, 메모리상의 프로그램, 데이터, 네트워크를 통해 전송되는 데이터)는 비트들로 표시되는데, 서로 다른 객체들을 구분하는 유일한 방법은 이들을 바라보는 컨텍스트에 의함.
컨텍스트(Context) 란?
현재 실행 중인 프로세스나 스레드의 상태를 나타내는 정보.
해당 프로세스나 스레드의 레지스터 값, 메모리 상태, 실행 위치 등을 포함 가능.
hello.c를 시스템에서 실행 시키려면, 각 C 문장들은 다른 프로그램들에 의해 저급 기계어 인스트럭션들로 번역되어야 한다.
기계어(Machine Code) 란?
컴퓨터가 직접 이해하고 실행할 수 있는 가장 낮은 수준의 언어.
0과 1로 이루어진 이진 코드로 표현되며, 각각의 코드는 컴퓨터에서 특정한 작업을 수행하는 명령어에 해당.인스트럭션(Instruction) 이란?
컴퓨터에게 일을 시키는 단위로서, 컴퓨터가 알아들을 수 있는 기계어로 이루어져 있는 명령.
프로그래밍 언어에서 작성된 코드가 컴파일러(compiler)를 통해 기계어로 변환될 때 생성된다.
이 인스트럭쳐들은 실행가능 목적 프로그램이라고 하는 형채로 합쳐져서 바이너리 디스크 파일로 저장된다.
번역은 위 그림과 같이 4단계를 거쳐 실행되며, 이 4단계를 실하는 프로그램들(전처리기, 컴파일러, 어셈블러, 링커)을 합쳐서 컴파일 시스템이라고 부른다.
컴파일 단계에서 바로 기계어로 번역하지 않고 어셈블리어로 번역하는 이유
- 컴파일러 또한 사람이 제작한 프로그램이기 때문에 프로그래밍 언어로 작성한 파일을 바로 기계어로 번역하기는 쉽지 않고 컴파일러는 최적화도 진행하기 때문.
- 어셈블리어로 번역이 되면 다른 고급언어들과의 호환이 가능한데, C언어로 작성된 코드와 Fortran으로 작성된 파일은 동일한 어셈블리어로 번역된다.
Bryant O'Hallaron 컴퓨터 시스템(제 3판)