컴파일된 실행가능한 목적파일 은 실행하기 위하여 쉘이라는 응용프로그램에 그 이름을 입력한다
- 쉘은 사용자로부터 명령어를 입력받아 처리하는 프로그램
- 프롬프트를 출력하고 명령어 라인을 입력받아 그 명령을 실행
- 명령어 라인이 내장 쉘 명령어가 아닐 경우 그 파일을 로딩해서 실행
- 자체 명령어가 아니기 때문에 외부프로그램을 실행하고 종료를 기다림
쉘 명령어
- 내장 쉘 명령어(Built-in Commands)
- 쉘 자체에 내장되어있는 명령어, - 쉘 자체에 내장되어 있는 명령어로, 별도의 파일 없이 내부의 코드로 바로 처리
- ex) cd(디렉토리 변경), echo, export, alisas 등
- 사용자가 입력하면, 쉘은 새 프로세스를 생성하지 않고 내부 함수를 호출, 명령수행
- 외부 명령어 (External Commands)
- 쉘에 내장되어 있지 않은 명령어로, 실행 파일 형태로 저장되어 있음.
- ls, grep, cp 등 유틸리티 명령어가 이에 해당
- 사용자가 입력하면, 쉘은 해당 명령어를 실행 파일의 이름으로 인식하고, 시스템 경로에 등록된 디렉토리에서 해당 파일을 찾아 새로운 프로세스를 생성하여 실행
- 쉘과 별도의 메모리 공간에서 실행되며, 쉘 내부 상태에 직접 영향주지않음
- 쉘에 내장되어 있지 않은 명령어로, 실행 파일 형태로 저장되어 있음.
1.4.1 시스템의 하드웨어 조직
- 용어 설명
- 인스트럭션 집합 구조 (Instruction set architecture)
- ISA는 CPU가 실행할 수 있는 기계어 명령어들의 집합과, 이 명령어들이 작동하기 위한 하드웨어 자원의 구조와 동작방식을 정의한 설계 규격
- 즉, 개발자와 컴파일러, 하드웨어 설계자가 CPU와 소프트웨어 간 인터페이스를 이해하고 활용할 수 있도록 해주는 일종의 계약(contract)
- 하드웨어 자체 동작 뿐 아닌 소프트웨어가 하드웨어를 어떻게 제어하고 활용할지를 명시하여 시스템의 설계와 개발간 중요한 역할을 함
- 주요 요소
- 명령어 집합 : CPU가 인식하고 실행할 수 있는 모든 기계어 명령어들의 목록과 그 형식, 기능을 정의
- 레지스터 집합 : CPU 내부에 존재하는 다양한 레지스터(ex. 일반 목적 레지스터, 특수 목적 레지스터 등)의 수, 크기, 역할을 규정
- 메모리 주소 지정 방식 : 명령어에서 메모리 위치를 어떻게 참조하는지(직접 주소 지정, 간접 주소 지정, 인덱스 방식 등) 다양한 주소 지정방식을 정의
- 데이터 형식 : 정수, 부동 소수점, 문자 등 CPU가 지원하는 데이터 타입 및 그 크기를 규정
- 입출력 메커니즘 : CPU와 주변 장치 간의 데이터 교환 방식, 인터럽트 처리 방법 등을 포함
- 수식/논리 처리기 (ALU; Arithmetic Logic Unit)
- CPU 내 산술 및 논리 연산을 담당
- 산술 연산 : 덧셈, 뺄셈, 곱셈, 나눗셈 등 수치 계산 수행
- 논리 연산 : AND, OR, NOT, XOR 등 비트 단위 논리 연산을 처리하여 조건 판단과 제어 흐름에 기여
- CPU 내 산술 및 논리 연산을 담당
- 인스트럭션 집합 구조 (Instruction set architecture)

- 버스 (Buses)
- 시스템 내를 관통하는 전기적 배선군
- 워드 word 라고 하는 고정 크기의 바이트 단위로 컴포넌트 간 데이터를 전송
- 바이트 수는 시스템마다 다른 시스템 변수임 (대부분은 4바이트;32비트, 또는 8바이트;64비트)
- 입출력 장치 (I/O)
- 도표 내의 Mouse, Keyboard, Display, Disk
- 각 입출력 장치는 I/O bus와 Controller, Adapter를 통해 연결
- Controller는 디바이스 자체가 칩셋이거나 마더보드에 장착
- Adapter는 마더보드 슬롯에 장착되는 카드
- 메인 메모리
- 데이터와 프로그램을 모두 저장하는 임시 저장장치이다
- 물리적구성 : DRAM(Dynamic Random Access Memory) 칩들
- 논리적구성 : 0부터 시작해서 고유의 인덱스를 보유한 연속적인 바이트들의 배열
- 각 기계어 인스트럭션은 다양한 바이트 크기를 보유
(short 2byte, int,float 4byte, long,double 8byte…)
- 각 기계어 인스트럭션은 다양한 바이트 크기를 보유
- 데이터와 프로그램을 모두 저장하는 임시 저장장치이다
- 프로세서 (Processor)
- CPU라고도 하며, 메인 메모리에 저장된 인스트럭션들을 실행(해독)하는 엔진
- 프로세서 중심에는 워드 크기의 저장장치(Register)인 프로그램 카운터(PC)가 있다
- CPU는 클럭 사이클에 따라 작동하는데, 매 사이클마다 PC는 메인 메모리의 한 주소를 가리키게됨
- 전원이 끊어질 때 까지 매 사이클에 가리킨 주소의 인스트럭션들을 반복적으로 실행하고, PC값이 다음 위치를 가리키도록 함
- 인스트럭션 집합구조(ISA) 로 정의되는 모델을 따라 작동하는 것처럼 보인다
- 인스트럭션은 규칙적인 순서(여러단계를 수행함으로써)로 실행
- 프로세서는 PC가 가리키는 메모리로부터 인스트럭션을 호출, 해석 및 실행, PC를 다음 위치로 업데이트
- 이는 연속적일 수도 있고, 그렇지 않을 수도 있다.
- 메인 메모리 ↔ 레지스터 파일 ↔ 수식/논리 처리기(ALU)를 순환
- 작업 예시
- 적재(Load) : 메인 메모리 → 레지스터 한 바이트 또는 워드를 이전 값에 덮어쓰는 방식으로 복사
- 저장(Store) : 레지스터 → 메인 메모리 한 바이트 또는 워드를 이전 값에 덮어쓰는 방식으로 복사
- 작업(Operate) : 두 레지스터의 값을 ALU로 복사, 두 개의 워드로 수식연산 수행, 결과를 덮어쓰기 방식으로 레지스터에 저장
- 두 개의 레지스터(복사) → ALU(수식연산 수행) → 레지스터(덮어쓰기)
- 점프(Jump) : 인스트럭션(한개의 워드 추출) → PC(덮어쓰기)
- 작업 예시
- 레지스터 파일은 고유의 이름을 가진 워드 크기의 레지스터 집합으로 구성
- ALU는 새 데이터와 주소 값을 계산
1.4.2 hello 프로그램의 실행

- hello 입력 시 각각의 문자를 레지스터에 읽어들인 후 메모리에 저장
- Keyboard (”hello” 입력) → I/O bridge → Bus interface → Register file → I/O bridge → Main memory

- Enter키를 눌러 명령 입력을 마칠 때 파일 내의 코드와 데이터를 복사하는 인스트럭션을 실행, hello(실행파일)를 디스크에서 메인메모리로 로딩
- 로딩되는 데이터 내에는 최종 출력문자 str “hello, world\n”이 포함

- hello 목적파일의 코드와 데이터가 메모리에 도착, 프로세서는 hello 프로그램의 기계어 인스트럭션 실행
- 인스트럭션 : “hello, world\n” 스트링을 메모리 → 레지스터 파일(복사) → 디스플레이 장치(전송)
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.2 프로그램은 다른 프로그램에 의해 다른 형태로 번역된다 (0) | 2025.03.20 |
| 1.1 정보는 비트와 컨텍스트로 이루어진다 (ASCII, Text/non-Text file, Context) (0) | 2025.03.17 |