TIL 2024/7/25

Sung Joo Lee·2024년 7월 25일

원래 정글 끝나고부터 다시 CSAPP 책을 읽으면서 정리 해보려했는데 게으름 때문에 지금에서야 다시 시작한다...ㅠㅠ. 얼른 읽고 정리해보면서 CS를 다시 공부 해보도록 하겠다.

CSAPP 1.1 ~ 1.3

컴퓨터 시스템은 H.W system 과 S.W system 이들이 함계 작동하여 .exe 파일을 만들어 낸다.
모든 컴퓨터 시스템들은 유사한 S.W, H.W 시스템들을 가지고 있고 프로그래머들로 하여금 이 컴포넌트들이 어떤 동작을 하는지, 프로그램의 성능과 정확성에 어떤 영향을 주는지 이해하도록 돕니다. 즉, 이 책의 목적은 hello 프로그램을 실행하면 무슨일이 이러나고 그 이유를 이해하는 것을 도와주기 위해 집필 되었다.

#include <stdio.h>

int main()
{
		printf("Hello\n");
		
		return 0;
}

이제 위의 코드가 작성 되고 실제로 실행 프로그램이 되어 “Hello”라고 출력이 되는 과정을 자세히 알아보자.

  1. 프로그래머가 작성한 source program으로 시작후 hello.c로 저장
    1. source file과 source program의 차이점은 source program은 작성한 코드를 말하는 것이고 source file은 source program을 저장한 파일을 말하는 것

    2. source program은 0 혹은 1로 표시되는 비트들의 연속이고 1바이트 단위로 저장된다.

    3. 각 바이트는 프로그램의 텍스트를 문자를 ASCII 표준으로 텍스트 문자를 표시한다. 이때 각 문자를 바이트 길이의 정수값으로 나타냄, 이는 특정 문자와 대응된다.

    4. 오로지 ASCII로만 이루어진 문자들을 Text file이라고 하며 다른 파일들은 Binary File이라고 한다.

    5. 모든 시스템의 내부 정보는 비트들로 표시되고, 서로 다른 객체들을 구분하는 유일한 방법은 이들을 바라보는 Context ( 코드가 실행되는 환경)에 의해 구분된다.

      ex)

      int num = 3;
      
      printf("%d",&num);
      printf("%c",&num);

      위 둘의 출력 값은 다르다!

  2. hello.c를 시스템에서 실행 시키기 위해서는 다른 프로그램들에 의해서 저급(Low - Level) 인스트럭션들로 번역되어야 함.
  3. 이들은 실행 가능한 목적 파일로 합쳐져서 Binary disk 파일로 저장된다.

그림으로 한번 모든 과정을 봐 보자

하나씩 설명을 해보겠다.

전처리

hello.c 소스 프로그램 안에 작성된 #include <stdio.h>의 코드들 불러와 소스 파일에 추가해 준다. 이 결과물이 hello.i 이며 이는 변경된 소스 프로그램이라고 말한다.

컴파일

변경된 소스 프로그램 hello.i 컴퓨터가 이해 할 수 있는 어셈블리어로 번역 시켜준다.

어셈블러

어셈블리어로 번역된 hello.s를 한 곳에 묶어서 재배치 가능 목적 프로그램인 hello.o로 변경 변경 시켜준다.

링커

말 그대로 ‘연결’을 해준다. 하나의 프로젝트에는 여러개의 소스 프로그램이 존재 한다. 이들은 각각 별도로 컴파일되어 별도의 목적 파일로 존재하는데 이들을 모두 연결시켜 실행 가능 프로젝트 파일로 만들어준다. 이것이 우리가 흔히 알고 있는 .exe 파일이다.

profile
개발로그

0개의 댓글