[컴퓨터시스템] 내용정리2 (4~5page)

SeHoony·2022년 4월 3일
1

컴퓨터시스템

목록 보기
2/5

"컴퓨터 시스템 (김형신 옮김)" 책을 바탕으로 정리한 내용이다.

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

1-1. 컴파일 시스템

1) GCC 컴파일러 드라이버

: 소스파일(hello.c)을 실행파일(hello)로 번역

linux> gcc -o hello hello.c

2) 컴파일 시스템(전처리기, 컴파일러, 어셈블러, 링커)

: 위에서 언급한 번역은 네 단계에 거쳐 실행된다. 각 단계를 실행하는 프로그램들을 합쳐 컴파일 시스템이라고 한다.

#include <stdio.h>
int main()
{
	printf("hello, world\n")
    return 0;
}

[컴파일 4단계]

  • 전처리기(cpp)
    : '#'으로 시작하는 문장 처리 -> '~.i'로 끝나는 C프로그램 생성
    : #include <stdio.h> - 시스템 헤더파일 stdio.h를 프로그램 문장에 직접 삽입해라!
  • 컴파일러(ccl)
    : 저수준 기계어 명령어들이 어셈블리어로 저장된다.
    ** 어셈블리어 : 여러 상위 언어의 컴파일러를 위한 공통의 출력 언어 제공
    : '~.i' 파일 -> '~.s'파일로 번역
int main()
{
	printf("hello, world\n")
    return 0;
}

> 어셈블리어화
main : 
	subq $8, %rsp
    movl $.LCO, $edi
    call puts
    movl $0, %eax
    addq $8, %rsp
    ret
  • 어셈블러(as) >>> 뭔말이야??
    : '~.s' -> 기계어 인스트럭션으로 번역 -> '~.o'(재배치 가능 목적프로그램 형태의 목적파일)로 저장
    : 위의 목적파일은 함수의 인스트럭션을 인코딩하기 위한 17바이트 바이너리 파일이다

  • 링커
    : '~.o'에 포함된 또다른 목적파일(가령 'printf.o')과 결합
    : 그 결과 '~.o'는 실행파일로 메모리에 쌓이고 실행된다.

profile
두 발로 매일 정진하는 두발자, 강세훈입니다. 저는 '두 발'이라는 이 단어를 참 좋아합니다. 이 말이 주는 건강, 정직 그리고 성실의 느낌이 제가 주는 분위기가 되었으면 좋겠습니다.

0개의 댓글