CSAPP 독서 내용 정리 1-1 ~ 1-3

이형준·2023년 4월 30일
0

CSAPP

목록 보기
1/10

정보는 비트와 컨텍스트로 이루어진다.

우리가 작성한 C언어 파일들은(예를 들어 hello.c) 텍스트 파일로 저장된다. 이는 0 or 1로 이루어진 비트들의 연속으로, 이는 *바이트(Byte)라는 8비트 단위로 구성된다. 각각의 바이트가 텍스트 문자들을 나타내는 식.

이러한 바이트들은 *컨텍스트에 따라 구분된다. 일례로, 컨텍스트에 따라 어떠한 바이트들은 정수를 의미할 수도 있고, 부동소수를 의미할수도, 문자열 혹은 기계어를 의미할 수도 있다.

프로그램은 다른 프로그램에 의해 다른 형태로 번역된다.

우리가 작성한 hello.c 파일을 시스템에서 실행하기 위해서는, 저급 기계어 *인스트럭션들로 번역되어야 한다. 번역된 인스트럭션들은 실행가능 목적 프로그램 or 파일이라고 하는 형태로 합쳐져 바이너리 디스크 파일로 저장된다.

이렇게 hello.c를 실행파일 hello로 번역하는 과정은 전처리기, 컴파일러, 어셈블러, 링커를 거쳐 진행된다. 이를 컴파일 시스템이라 부른다. 이들을 하나하나 뜯어보면,

전처리기(Preprocessor)는 이름에 걸맞게 소스 코드를 컴파일하기 전에 소스 코드의 특정한 부분을 변경하는 역할을 해 준다. 일반적으로 #으로 시작하는 지시어를 사용하여 코드를 수정하는데, 예를 들어 hello.c파일 첫줄의 #include<stdio.h>를 읽어들여, 시스템 헤더파일인 stdio.h을 프로그램 문장에 직접 삽입하라고 지시해주는 식이다.

컴파일러(Compiler)는 소프트웨어 개발의 핵심과도 같은 녀석으로, 소스 코드를 저급 언어인 어셈블리어로 변환해준다. 소스 코드를 변환하는 과정에서 오류를 찾아내기도 하며, 오류가 발생하면 오류 메세지를 출력한다. 실행 시간을 단축시키기 위한 다양한 최적화 기법이 사용되는 녀석이기도 하다.

어셈블러(Assembler)는 컴파일러와 유사한 기능을 가진 녀석으로, 컴파일러가 만들어 준 어셈블리어 프로그램을 기계어로 번역하여 이진 형태의 목적 파일을 생성해준다.

링커(Linker)는 어셈블러가 생성해 준 목적 파일과 라이브러리 파일 등 여러 개의 오브젝트 파일을 하나로 묶어서 메모리에 로드하고, 운영체제가 할당한 메모리 공간에 할당해준다. 이후 프로그램이 실행되면, 할당된 메모리를 사용하여 데이터를 읽고 쓰며, 코드를 실행한다.

컴파일 시스템이 어떻게 동작하는지 이해하는 것은 중요하다.

컴파일러의 내부 동작까지는 알 필요 없지만, 기계어 수준 코드에 대한 기본적인 이해가 있다면 C프로그램 작성 시 올바론 판단을 내리는 데에 도움이 된다. 이를테면 아래와 같은 부분에서.

  • 프로그램 성능 최적화
  • 링크 에러 이해
  • 보안 약점 피하기

바이트(Byte): 이진 정수(Binary Digit)에서 유래된 비트를 나타내는 단위이다. 2**8 = 256가지의 데이터를 표헌할 수 있고, 상술했듯 아스키 코드가 그 대표적인 예이다. 바이트는 컴퓨터에서 다루는 가장 작은 단위의 데이터로서, Bit가 더 작은 데이터 단위이기는 하나, 이는 비트시프트 등으로 간접적으로만 접근할 수 있다.

인스트럭션(instruction): 컴퓨터가 수행해야 할 작업을 나타내는 기본적인 명령어. CPU가 처리하는 작업의 최소 단위이며, CPU가 실행할 수 있는 명령어 형태로 작성된다.

컨텍스트(Context): 프로세스가 현재 어떤 상태에서 수행되고 있는지 정확히 규명하기 위해 필요한 정보. 실행 중인 프로그램에서 현재 작업 중인 파일의 위치, 프로그램이 사용하는 메모리 공간, CPU 시간 등이 컨텍스트 정보에 포함되고, 프로그램 인터럽트 발생 시, 컨텍스트를 저장해놓고 다른 작업을 수행하다가 인터럽트가 끝나면 저장한 컨텍스트 정보를 사용하여 중단된 작업을 다시 시작할 수 있게 한다.

바이너리 디스크 파일(Binary Disk File): 컴퓨터에서 사용되는 가장 낮은 수준(Low-Level) 의 데이터 중 하나로, 이진 형태의 데이터로 구성돠어 컴퓨터가 이해할 수 있는 형태로 구성된다. 컴파일러나 링커와 같은 고급 개발 도구를 사용하여 생성된다.

profile
저의 미약한 재능이 세상을 바꿀 수 있을 거라 믿습니다.

0개의 댓글

관련 채용 정보