용어설명
- Instruction (인스트럭션 = 명령어)
- 컴퓨터 프로그램이 실행되는 과정에서 **CPU에 의해 직접 해석되고 실행** 되는 **기계 명령어**
- 기본 구성 (opcode + operand)
- Opcode (연산코드)
- 인스트럭션이 수행할 작업을 지정하는 코드
- 예시 : 산술 연산, 데이터 이동, 분기지정 등
- Operand (피연산자)
- 연산에 사용될 데이터나 주소 정보를 포함
- 하나 이상의 피연산자가 있을 수 있음
- 예시 : 레지스터, 메모리주소, 상수 등
- Instruction Format (인스트럭션 포맷)
- 인스트럭션은 고정 길이 또는 가변 길이의 포맷을 가짐
- 포맷에 따라 opcode와 operand의 위치와 크기가 결정
- 실행 과정
- CPU 내 하드웨어와 제어유닛이 협력하여 수행되는 전체적인 처리 과정
- Fetch (페치): CPU의 제어 유닛이 메모리에서 다음 실행할 인스트럭션을 가져옴
- Decode (디코드) : 가져온 인스트럭션을 해석하여 어떤 작업을 수행할지 결정. 이 단계에서 Opcode와 Operand를 구분
- Execute (실행) : 실제 연산이 수행되며, 연산 결과가 레지스터나 메모리에 저장
- 메모리 접근 : 필요한 경우 인스트럭션은 추가적으로 메모리에서 데이터를 읽거나 씀
- Write-back (쓰기) : 연산 결과를 다시 저장하는 단계
- Opcode (연산코드)
- 기본 구성 (opcode + operand)
- 컴퓨터 프로그램이 실행되는 과정에서 **CPU에 의해 직접 해석되고 실행** 되는 **기계 명령어**
내용
- 시스템에서 실행하기 위해서는 다른 프로그램들에 의해 저급(low level) 기계어 인스트럭션 들로 번역되어야 한다
- 번역 과정
- 인스트럭션은 실행가능 목적 프로그램 (또는 목적 파일)으로 합쳐져, 바이너리 디스크파일로 저장
- 컴파일러 드라이버 는 유닉스 시스템에서 아래와 같이 소스파일에서 오브젝트 파일로 번역
linux> gcc -o hello hello.c - GCC 컴파일러 드라이버는 소스파일 hello.c를 실행파일인 hello로 번역
- 이는 총 4개의 단계를 거쳐 실행 (컴파일 시스템)
- 컴파일 시스템
- 전처리 단계 : cpp(전처리기)에 의해 C 프로그램(hello.c)을 # 문자로 시작하는 디렉티브에 따라 수정
- 결과 : hello.i 로 끝나는 새로운 C 프로그램(전처리된 소스코드)
- 컴파일 단계 : cc1(컴파일러)에 의해 hello.s로 번역(어셈블리어)
- 어셈블리 단계 : as(어셈블러)에 의해 기계어로 번역, 재배치 목적프로그램 으로 묶어 목적프로그램 (hello.o, 바이너리파일)으로 저장
- 링크 단계 : ld(링커 프로그램)에 의해 어셈블리단계를 거쳐온 바이너리파일과, 표준 C 라이브러리의 호출된 함수의 목적파일을 불러와 통합작업을 수행
- 결과 : 실행가능 목적파일(실행파일)로 메모리 적재, 실행
- 전처리 단계 : cpp(전처리기)에 의해 C 프로그램(hello.c)을 # 문자로 시작하는 디렉티브에 따라 수정
- 컴파일 시스템
- 번역 과정

728x90
'CS:APP' 카테고리의 다른 글
| GCC는 C를 어떻게 기계어로 짜깁기할까? - CS:APP 3.2 요약과 인사이트 (0) | 2025.04.07 |
|---|---|
| 암달의 법칙 (Amdahl's law) (0) | 2025.04.07 |
| 캐시와 저장장치의 상관관계 (0) | 2025.03.21 |
| 1.4 프로세서는 메모리에 저장된 인스트럭션을 읽고 해석한다 (0) | 2025.03.20 |
| 1.1 정보는 비트와 컨텍스트로 이루어진다 (ASCII, Text/non-Text file, Context) (0) | 2025.03.17 |