[CSAPP 1.4: 프로세서가 메모리에서 명령어를 읽고 해석하는 과정]
[Introduction]
CSAPP(Computer Systems: A Programmer's Perspective) 책의 1.4 섹션은 컴퓨터 시스템의 기본 작동 원리를 설명합니다. hello.c 프로그램을 예로 들어 소스 코드가 컴파일되어 실행 파일로 변환된 후, 쉘이 이를 로드하고 CPU가 메모리에서 명령어를 읽어 실행하는 과정을 다룹니다. 이 포스트는 해당 섹션을 읽고 하드웨어 구조, 소프트웨어 요소 등에 관해 개인적으로 정리한 글입니다.
[1. 컴퓨터 하드웨어 구조 / Computer Hardware Organization]
컴퓨터 시스템은 CPU, 메모리, 버스, I/O 장치로 구성됩니다. CPU는 ALU(산술/논리 연산 장치), PC(프로그램 카운터), 레지스터 파일을 포함하며, 명령어를 순차적으로 실행합니다. 버스는 부품 간 데이터 전송 통로로, 시스템 버스와 I/O 버스를 구분합니다. 메인 메모리(RAM)는 프로그램과 데이터를 임시 저장하며, 디스크(SSD/HDD)는 영구 저장을 담당합니다. I/O 장치는 키보드, 디스플레이, 디스크 등으로, 컨트롤러나 어댑터를 통해 버스에 연결됩니다.
컴퓨터 하드웨어 조직 다이어그램 (CPU, 버스, 메모리, I/O 연결)

CPU가 중앙에 위치하고, 버스를 통해 메인 메모리와 I/O 장치(USB 컨트롤러, 그래픽스 어댑터, 디스크 컨트롤러)가 연결된 구조.
The hardware includes CPU (with ALU and PC), buses for data transfer, main memory for temporary storage, and I/O devices connected via controllers.
[2. 명령어 실행 과정 / Instruction Execution Process]
프로세서는 PC가 가리키는 메모리 주소에서 명령어를 읽고(Fetch), 해석(Decode), 실행(Execute)한 후 PC를 업데이트합니다. 기본 연산으로는 Load(메모리에서 레지스터로 복사), Store(레지스터에서 메모리로 복사), Operate(ALU 연산), Jump(PC 변경)이 있습니다. 이 과정은 명령어 집합 아키텍처(ISA)에 기반하며, 실제 구현은 마이크로아키텍처에서 최적화됩니다.
Processors follow a fetch-decode-execute cycle: read instruction from memory via PC, interpret bits, perform operation, and update PC.
[3. 쉘과 명령어 처리 / Shell and Command Processing]
쉘은 명령줄 해석기로, 프롬프트를 출력하고 사용자 입력을 기다린 후 명령을 수행합니다. 내장 명령(built-in command, e.g., cd, echo)이 아니면 실행 파일로 간주해 로드하고 실행합니다. hello 프로그램 예시에서 쉘이 파일을 메모리로 로드한 후 종료를 기다립니다.
The shell interprets commands; if not built-in, it loads and runs executables, waiting for termination before prompting again.
[4. 커널과 쉘의 관계 / Kernel and Shell Relationship]
커널은 OS의 핵심으로 하드웨어를 직접 제어하며, 쉘은 사용자 인터페이스로 명령을 해석해 시스템 콜로 커널에 전달합니다. 내장 명령은 쉘이 직접 처리하고, 시스템 콜(e.g., open, fork)은 모드 전환(User Mode to Kernel Mode)을 통해 커널에서 실행됩니다.



Kernel manages hardware; shell interprets user input and invokes kernel via system calls with mode switches for security.
+ System Call: 프로그램(또는 쉘)이 커널에 부탁하는 함수 호출. User Mode 에서 Kernel Mode로 전환
역할: 하드웨어/시스템 자원 접근(파일 읽기, 프로세스 생성 등). 쉘이 내장 아닌 명령 처리할 때 사용.
(Why? 보안 - 사용자 프로그램이 직접 하드웨어 만지면 위험. 커널이 게이트키퍼 같은 역할.)
예시:
- open(): 파일 열기.
- fork(): 새 프로세스 생성.
- read(): 데이터 읽기.
- 과정: 프로그램이 시스템 콜 호출 → 인터럽트(Interrupt) 발생 → 커널 처리 → 결과 반환.


[내장 명령 vs. 시스템 콜]
| 위치 | 쉘 안에 내장 (Built-in Command) | 커널 API(함수) |
| 처리자 | 쉘이 직접 | 쉘이 커널에 요청 |
| 예시 | cd, echo, exit | open, fork, exec |
| 속도 | 빠름 (내부) | 느림 (모드 전환) |
| 목적 | 쉘 환경 관리 | 시스템 자원 접근 |
| 관계 | 쉘이 내장 먼저 체크, 아니면 시스템 콜 기반 외부 명령 실행 | 많은 쉘 명령(예: ls)이 내부적으로 시스템 콜 씀 |
[5. Unix와 Linux 관계 / Unix and Linux Relationship]
Unix는 1969년 Bell Labs에서 개발된 원조 OS로, System V와 BSD 계열로 분기되었습니다. Linux는 1991년 Linus Torvalds가 Unix-like으로 만든 무료 오픈소스 OS로, Unix 철학을 따르지만 별도 구현입니다. Ubuntu는 Linux의 배포판(distribution)입니다.

Unix(System V, BSD)에서 Linux(Debian 기반 Ubuntu 등)로 분기된 트리.
Unix is the original OS; Linux is a Unix-like open-source clone, with distributions like Ubuntu.
[6. 메모리와 운영 체제 / Memory and Operating System]
메모리는 하드웨어(RAM: 휘발성, 디스크: 비휘발성)로 데이터 저장 장치입니다. OS는 소프트웨어로 하드웨어를 관리하며, 커널이 자원 할당을 담당합니다. 메모리 계층은 Registers > Cache > RAM > Disk 순으로 속도와 용량이 균형됩니다.

Memory is hardware for storage; OS is software managing resources, with kernel handling allocation.
[7. PCB, API, 모드 전환 / PCB, API, Mode Switch]
PCB는 프로세스 정보를 저장하는 구조체입니다. API는 소프트웨어 간 인터페이스로 시스템 콜을 추상화합니다. 모드 전환은 시스템 콜 시 User Mode에서 Kernel Mode로 변경되어 보안을 유지합니다.
PCB tracks process state; API abstracts calls; mode switch ensures secure kernel access.
[8. 병렬 처리 개념 / Parallel Processing Concepts]
스레드는 프로세스 내 실행 단위로, 멀티스레드는 여러 스레드를 하나의 프로세스에서 공유합니다. 코어는 CPU의 처리 단위로, 멀티코어는 여러 코어를 하나의 칩에 배치합니다. 병렬성은 진짜 동시에, 동시성은 번갈아 실행입니다. Latency는 지연 시간, Mutex는 공유 자원 잠금, Condition Variable은 스레드 신호, Race Condition은 접근 순서 오류입니다.
import threading
shared_var = 0
lock = threading.Lock()
def increment():
global shared_var
for _ in range(100000):
with lock:
shared_var += 1
t1 = threading.Thread(target=increment)
t2 = threading.Thread(target=increment)
t1.start()
t2.start()
t1.join()
t2.join()
print("Mutex result:", shared_var)
Code Example: Python threading으로 Mutex 사용 (race condition 방지)
Mutex - Mutual Exclusion. 공유 자원(변수)에 한 thread만 접근 - lock / race condition 방지
Threads enable multitasking; multicore for parallelism; concurrency manages tasks; mutex/conditions synchronize; race conditions are timing bugs.
[9. SSD와 HDD 위치 / SSD and HDD Location]
SSD와 HDD는 하드웨어 저장 장치로 motherboard의 SATA/NVMe 슬롯에 연결됩니다. 드라이브는 논리적 단위로 디스크(물리 매체)를 포함합니다. 소프트웨어에서 OS가 드라이버를 통해 접근합니다.
SSD vs HDD 내부 구조 비교 다이어그램: 칩 기반 vs. 플래터 기반

SSD/HDD are storage hardware on motherboard slots; drives are logical abstractions managed by OS drivers.
[10. 캐시 구조 / Cache Structure]
캐시는 하드웨어(SRAM in CPU: L1~L3)와 소프트웨어(OS/app managed)로 데이터 지연을 줄입니다. 하드웨어 캐시는 CPU-RAM 간 버퍼, 소프트웨어 캐시는 앱 수준 최적화입니다.

Cache is fast buffer in hardware (CPU levels) and software (app/OS) to reduce access latency based on locality.
'CSAPP' 카테고리의 다른 글
| CSAPP 1.6 메모리 계층 (Memory Hierarchy) 정리 (0) | 2026.02.02 |
|---|