컴파일 순서 및 하드웨어 시스템

추성결·2024년 1월 15일
0

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

컨텍스트란?

  • 정보를 이해하고 해석하는데 필요한 전반적인 조건, 상황 또는 프레임워크(C언어 포인트와 유사)

텍스트 파일

  • hello.c처럼 '아스키 문자'로 이루어진 파일을 텍스트 파일이라 한다. 나머지는 바이너리 파일이라 부른다.

정보 표시 방법

  • 모든 시스템 내부 정보(디스크 파일, 메모리상의 프로그램, 데이터, 네트워크를 통해 전송되는 데이터 등)는 전부 비트들로 표시된다.
  • 서로 다른 객체들을 구분하는 유일한 방법은 이들을 바라보는 컨텍스트에 의해서 구분된다.
  • hello.c를 시스템에서 실행시키려면, 각 C 문장들은 다른 프로그램에 의해 '저급 기계어 인스트럭션'들로 번역되야한다. 이를 "실행가능 목적 프로그램"이라 한다.

2. 컴파일 시스템 순서

1. 전처리

  • 전처리기(cpp)는 #문자로 시작하는 derective에 따라 수정 및 확장자 ".i" 프로그램 생성 단계
    => #include <stdio.h>는 전처리기에게 프로그램 문장 첫줄에 직접 삽입 지시한다.

2. 컴파일

  • 컴파일(ccl)은 텍스트 파일(hello.i)을 hello.s로 번역하며, 이 파일에 어셈블리어 프로그램 저장한다.

3. 어셈블리

  • hello.s를 기계어 인스트럭션으로 번역하고, 이들을 재배치 가능 목적 프로그램의 형태로 묶어서 hello.o라는 목적 파일에 저장한다.

4. 링크

  • 여러개의 '.o' 확장자를 가진 목적 파일을 결합하며 최종 실행 파일 생성한다. 이후 메모리에 로드한다.

이 과정을 알아놔야 나중에 '프로그램 최적화', '링크 에러 이해', '보안 약점'등의 문제를 이해할 수 있다.

3. 하드웨어 시스템

버스(buses)

  • 컴포넌트들 간 바이트 정보들을 전송 "word"라는 고정 크기의 바이트 단위로 전송하도록 설계. 요즘은 4byte(32bit)또는 8byte(64bit)의 크기를 가짐

입출력 장치(I/O Operation)

  • 시스템과 외부세계와의 연결한다.(책의 예제로는 키보드, 마우스, 디스플레이, 디스크 드라이브 장치)
  • 입출력 버스와 입출력 장치 간 정보를 주고 받도록 한다.

메인 메모리

  • 프로세서가 프로그램을 실행하는 동안 데이터와 프로그램을 모두 저장하는 임시 저장장치.
  • 메모리는 고유의 주소를 가진다.

프로세서

  • 주 처리 장치(CPU) 또는 간단히 프로세서라고 하며, 메인 메모리에 저장된 인스트럭션들을 해독(실행)하는 엔진
  • 인스트럭션이란 CPU가 실행하는 기본적인 작업을 나타내는 명령어이며, CPU가 어떤 동작을 해야 하는지를 지시하는 명령어이다.

프로세서 작업 예
  1. Load:

    1-1. 메모리에서 데이터를 DPU의 레지스터로 이동시키는 것
    1-2. 주소 계산 -> 주소 전달 -> 데이터 로드 -> 데이터 활용
    1-3. 프로그램이 실행되는 동안 계속 발생
  2. Store:

    1-1. 레지스터에서 메모리로 데이터 저장
    1-2. 주소 계산 -> 주소 전달 -> 데이터 저장 -> 완료
    1-3. 변수 값을 할당하거나 배열의 특정 인덱스에 값을 저장하는 경우에 수행
  3. Operate:

    1-1. 연산을 수행하는 행위
    1-2. 산술(+,-), 논리(and, or)연산을 ALU가 담당
    1-3. 데이터를 메모리에 저장하거나, 메모리에서 읽어오는 역할도 수행
  4. Jump:

    1-1. 목적지 주소로 레지스터 값 변경하는 것
    1-2. 무조건적인 Jump와 조건부 Jump 유형이 있다.

0개의 댓글

관련 채용 정보