티스토리 뷰
CS:APP Ch01. A Tour of Computer Systems - 1
초리 2021. 3. 26. 20:571.1 Information Is Bits + Context
정보는 비트와 컨텍스트이다.
소스 프로그램(source program)은 0과 1로 이루어져 있는 비트들의 시퀀스이다. (8bits = 1byte)
대부분의 프로그램은 ASCII 표준을 사용하여 텍스트 문자(text character)로 표현한다.
#include <stdio.h>
int main() {
printf("hello, world\n");
return 0;
}
위의 hello.c 프로그램 역시 바이트 시퀀스 파일(file as a sequence of bytes)로 저장이 된다.
각각의 바이트는 문자와 대응되는 정수 값을 가지고 있다.
예를 들어 '#'은 35, 'i'는 105로 대응된다.
코드 한 줄 마다 개행 문자인 '\n'으로 종료된다.
시스템에 있는 정보는 비트들의 모음(bunch of bits)으로 표현된다.
다른 데이터 오브젝트들을 구별하는 것은 컨텍스트(context)이다.
동일한 바이트 시퀀스는 정수, 실수, 문자열 또는 기계어로 표현될 수 있다.
프로그래머로서, 숫자의 기계 표현을 이해해야 한다. 숫자는 정수나 실수와 같지 않기 때문이다.
1.2 Programs Are Translated by Other Programs into Different Forms
프로그램은 다른 형태로 다른 프로그램에 의해 번역된다.
hello 프로그램은 고수준 언어(high-level)로 사람이 읽을 수 있고 이해할 수 있다.
hello.c 프로그램을 실행시키려면, 각각의 C 명령어가 저수준 기계 언어(low-level machine language)로 번역된다.
이러한 과정을 거치면 실행 가능한 파일 혹은 프로그램 형태로 만들어진 후에 이진 디스크 파일에 저장된다.
- 전처리 (Preprocessor)
전처리 구간에서는 '#' 문자로 시작하는 지시문에 따라 원래 C 프로그램를 수정한다.
예를 들어, #include <stdio.h>의 첫 번째 명령줄이 전처리기에게 말해 전처리기가 시스템 헤더 파일인 stdio.h의 내용을 읽는다.
내용을 읽은 후에 프로그램 텍스트에 직접 삽입(insert)하도록 지시한다.
전처리 구간을 거치면 hello.i 파일의 결과를 만든다.
- 컴파일 (Compilation)
컴파일 구간에서는 hello.i 파일을 hello.s 텍스트 파일로 바꾼다.
hello.s는 어셈블리어 프로그램(assembly-language program)이다.
어셈블리어는 다른 고수준 언어를 위한 다른 컴파일러들에 대해 같은 출력 언어를 제공해주기 때문이다.
ex) C 컴파일러와 Fortran 컴파일러는 같은 어셈블리어 언어 출력 파일을 생성한다.
- 어셈블리 (Assembly)
어셈블러는 hello.s를 기계어 명령어로 번역하고, 재배치 가능한 오브젝트 프로그램(relocatable object program)으로 만든 후에
hello.o 오브젝트 파일을 만든다.
- 링킹 (Linking)
hello 프로그램은 모든 C 컴파일러에서 제공되는 표준 C 라이브러리의 printf 함수를 호출한다.
printf 함수는 printf.o라고 이미 컴파일된 오브젝트 파일에 있으며 hello.o 프로그램에 합쳐진다.
링커가 이 합쳐지는 과정을 핸들링 하며 hello라는 파일을 만든다.
1.3 It Pays to Understand How Compilation Systems Work
프로그래머가 컴파일 시스템이 어떻게 작동되어야 하는 지 이해해야 하는 이유:
- 프로그램 성능 최적화
현대 컴파일러들은 좋은 코드를 만드는 정교한 도구이다.
C 프로그램에서 좋은 코드를 만드려면, 기계 수준 코드의 기본적인 이해와 어떻게 컴파일러가 다른 C 명령어들을 기계 코드로 바꾸는 지 이해해야 한다.
- 링크 타임(link-time) 에러 이해
프로그래밍을 하면서 대부분의 어이 없는 에러는 링커와 관련되어 있다.
- 보안 허점 피하기
네트워크와 인터넷 서버에서 버퍼 오버플로우 취약성은 많은 보안 허점을 보여주었다.
보안 프로그래밍을 배우려면 데이터 및 정보가 프로그램 스택에 저장되는 방식의 결과를 이해해야 한다.
'Computer Science > Computer Architecture' 카테고리의 다른 글
CS:APP Ch02. Representing and Manipulating Information - 3 (0) | 2021.04.01 |
---|---|
CS:APP Ch02. Representing and Manipulating Information - 2 (0) | 2021.03.31 |
CS:APP Ch02. Representing and Manipulating Information - 1 (0) | 2021.03.30 |
CS:APP Ch01. A Tour of Computer Systems - 3 (0) | 2021.03.27 |
CS:APP Ch01. A Tour of Computer Systems - 2 (0) | 2021.03.27 |