[CS] 컴퓨터 시스템으로의 여행 ch. 1

참새·2024년 4월 22일
0

컴퓨터 시스템

목록 보기
1/5

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

#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단계를 실하는 프로그램들(전처리기, 컴파일러, 어셈블러, 링커)을 합쳐서 컴파일 시스템이라고 부른다.

  • 전처리 단계
    • #으로 시작하는 지시어(directive)에 의해 헤더파일을 소스파일로 삽입하라고 지시.
    • 이후 일반적으로 '.i'로 끝나는 새로운 C 프로그램이 생성.
    • 자바에서는 C와는 달리 전처리기 디렉티브가 없지만, 이러한 제어문이나 주석, 애노테이션을 사용하여 코드의 동작을 제어하고 설정.
  • 컴파일 단계
    • 넘겨받은 소스파일을 ‘.i’로 끝나는 파일로 수정하면 확장자는 “소스파일이 전처리가 완료되었다”라고 알려주고 컴파일러에게 해당파일을 넘겨주게 된다.
    • 이후, 컴파일러는 해당 파일을 작성된 코드에 맞게 어셈블리어로 번역하고 ‘ .s ’로 끝나는 어셈블리 파일로 바꾸게 된다.
    • 이 파일 또한 아직 텍스트 파일이다.

      컴파일 단계에서 바로 기계어로 번역하지 않고 어셈블리어로 번역하는 이유

      • 컴파일러 또한 사람이 제작한 프로그램이기 때문에 프로그래밍 언어로 작성한 파일을 바로 기계어로 번역하기는 쉽지 않고 컴파일러는 최적화도 진행하기 때문.
      • 어셈블리어로 번역이 되면 다른 고급언어들과의 호환이 가능한데, C언어로 작성된 코드와 Fortran으로 작성된 파일은 동일한 어셈블리어로 번역된다.
  • 어셈블리 단계
    • 넘겨받은 ‘ .s ’파일을 어셈블러를 통해 기계어 인스트럭션으로 번역하고 이들을 재배치가능 목적 파일로 묶어서 ‘ .o ’파일로 바꾸게 된다.
    • 이 파일은 기계어로 번역된 파일이다.
  • 링크 단계
    • 해당 파일은 소스파일과 이미 컴파일된 별도의 목적파일인 printf.o(외부 라이브러리)와 결합이 되어야 한다.
    • 링커 프로그램(ld)이 결합작업을 수행하고 이 과정을 거치고 나면 비로소 C 프로그램은 실행파일로 메모리에 적재되어 시스템에 의해 실행된다.


📑  참고

Bryant O'Hallaron 컴퓨터 시스템(제 3판)

profile
응애 나 아기 개발자

0개의 댓글

관련 채용 정보