1. 시스템 프로그래밍이란?
시스템 프로그래밍은 컴퓨터 시스템을 활용하는 소프트웨어를 개발하는 것을 의미한다.
시스템의 범위는 하드웨어 + 운영체제로 구성된다.
시스템 프로그래밍의 특징은 Windows 같은 OS의 자체 기능을 최대한 활용.
시스템 프로그래밍은 모든 응용 프로그램에 포함되는 요소이다.
2. 컴퓨터 시스템의 주요 구성 요소
컴퓨터 시스템은 크게 아래와 같이 구성됨.
- 컴퓨터 하드웨어 구조
- CPU
- 캐시
- 운영체제(OS) 구조
- 메인 메모리 -> 메모리 관리 기법
- 하드디스크 -> 파일 I/O
3. 컴퓨터 하드웨어 구성
컴퓨터 하드웨어는 아래와 같은 구조로 이루어져 있다.
각 구성 요소의 역할은 다음과 같다.

- CPU : 중앙처리장치. 컴퓨터 전체를 총괄하며, 연산이 이루어지는 핵심 장치.
- 메인 메모리 : RAM. 프로그램 실행 방식을 이해하는 데 핵심적인 요소.
- 입출력 버스 : 데이터 송/수신 경로.
4. CPU
CPU는 내부적으로 아래 4가지로 구성됨.
- ALU (Arithmetic Logic Unit) : 실제 연산을 진행하는 장치.
- 컨트롤 유닛 (Control Unit) : CPU 전체를 총괄.
- 레지스터 : CPU 내부의 초고속 임시 저장 공간.
- 버스 인터페이스 : 외부와 데이터를 주고받는 통로.
5. 클럭 신호 (Clock Pulse)
클럭 신호는 CPU를 비롯한 컴퓨터 각 요소의 동작 타이밍을 결정하는 신호.
클럭이 높아지면 연산 수가 늘어나지만, 동시에 발열도 증가해 시스템이 불안정해질 수 있음.

ex) 오버클럭 : 클럭을 강제로 높여 성능을 끌어올리는 방식. 발열과 불안정의 위험이 있음.
동기 요소들은 가장 낮은 클럭 속도에 맞춰 동기화해야 하며, 클럭이 너무 높으면 발열로 인해 시스템이 불안정해질 수 있음.
6. 프로그램 실행 과정
소스 코드가 실행 파일이 되기까지의 과정은 아래와 같음.

- 전처리기 : #으로 시작하는 지시자(ex. #include)를 해석하고 치환 작업 수행.
- 컴파일러 : 고급 언어(C, C++ 등)를 CPU가 이해할 수 있는 어셈블리어로 번역.
- 어셈블러 : 어셈블리어를 바이너리 코드(0과 1)로 변환.
- 링커 : 바이너리 코드와 라이브러리를 연결하여 최종 실행 파일 생성.
7. Stored Program Concept
프로그램은 실행 전에 메모리에 적재(Fetch) 된 후, CPU가 명령어를 하나씩 가져와 처리하는 방식으로 동작함.
CPU의 명령어 처리 과정은 아래 3단계로 이루어짐.

- Fetch : CPU가 메모리에서 명령어를 가져옴.
- Decode : 명령어를 해석하고 컨트롤 유닛이 제어 신호를 생성.
- Execution : ALU가 실제 연산을 수행.
이 과정이 반복되면서 프로그램이 실행됨.
8. 데이터 이동의 기반, 버스 시스템
버스는 CPU와 메모리, 입출력 장치 사이에서 데이터를 주고받는 통로.
버스는 역할에 따라 3가지로 나뉨.

- 데이터 버스 : 실제 데이터를 이동시키는 버스.
- 어드레스 버스 : 메모리 주소를 이동시키는 버스.
- 컨트롤 버스 : 컨트롤 신호를 이동시키는 버스.



















