[CS:APP] 시스템의 하드웨어 조직(Hardware Organization)

Laska·2025년 3월 15일
post-thumbnail

📌 시스템의 하드웨어 조직 (Hardware Organization)

컴퓨터 시스템의 하드웨어는 여러 구성 요소로 이루어져 있으며, 각각의 역할과 상호작용을 통해 프로그램이 실행된다.

주요 구성 요소는 버스(Bus), 프로세서(CPU), 입출력 장치(I/O), 메인 메모리(Main Memory)로 나눌 수 있다.

1. 버스 (Bus)

🛠 버스란?

  • 버스(Bus)는 컴퓨터 내부에서 데이터, 주소, 제어 신호를 전송하는 통로(회선)이다.
  • 하나의 버스를 통해 여러 장치가 데이터를 주고받는다.

🛠 버스의 종류

버스 종류역할
데이터 버스CPU ↔ 메모리 ↔ I/O 장치 간 데이터를 전송
주소 버스메모리나 I/O 장치의 위치(주소)를 지정
제어 버스CPU가 데이터 읽기/쓰기 명령을 제어

🛠 버스의 특징

  • 병렬 전송 방식: 여러 개의 신호선을 사용하여 동시에 데이터를 전송함.
  • 공유 자원: 여러 장치가 하나의 버스를 공유하기 때문에 충돌 방지가 필요함.
  • 버스 폭(Bus Width): 버스의 크기가 크면 한 번에 더 많은 데이터를 전송할 수 있음 (예: 32-bit vs 64-bit).

💡일반적으로 버스워드(word)라고 하는 고정 크기의 바이트 단위로 데이터를 전송하도록 설계됨.

한 개의 워드를 구성하는 바이트 수는 시스템마다 보유하는 기본 시스템 변수이다.

(오늘 날 대부분의 컴퓨터들은 4바이트(32비트) 또는 8바이트(64비트)이다.)

컴포넌트가 서로 워드를 교환하는 과정 :


2. 프로세서 (Processor, CPU)

🛠 프로세서란?

  • *중앙처리장치(CPU, Central Processing Unit)는 컴퓨터의 두뇌** 역할을 하며, 연산과 제어를 수행한다.
  • 프로그램의 명령어를 실행하고, 메모리 및 입출력 장치와 상호작용한다.

🛠 CPU의 주요 구성 요소

구성 요소역할
연산 장치 (ALU, Arithmetic Logic Unit)덧셈, 뺄셈, 논리 연산 등의 연산 수행
제어 장치 (CU, Control Unit)명령어 해석 및 실행 흐름 제어
레지스터 (Register)CPU 내부의 초고속 메모리 (명령어, 주소, 연산 결과 저장)
캐시 메모리 (Cache)자주 사용하는 데이터를 저장하는 고속 메모리
파이프라이닝 (Pipelining)명령어를 분할하여 동시에 실행해 성능 향상
프로그램카운터(ProgramCounter)메인 메모리의 기계어 인스트럭션을 가르킴

3. 입출력 장치 (I/O Devices)

🛠 입출력 장치란?

  • 컴퓨터와 외부 환경 간의 데이터를 주고받는 장치.
  • 키보드, 마우스, 모니터, 프린터, 저장장치(SSD, HDD) 등이 포함된다.

🛠 I/O 장치의 동작 방식

1️⃣ 직접 메모리 접근(DMA, Direct Memory Access)

  • CPU 개입 없이 메모리와 I/O 장치 간 데이터 전송.
  • 대량의 데이터를 빠르게 전송할 때 사용됨.

2️⃣ 인터럽트(Interrupt) 기반 입출력

  • I/O 장치가 CPU의 작업을 중단시키고 특정 작업을 수행하도록 요청.
  • 키보드 입력, 마우스 클릭 등의 이벤트 발생 시 사용됨.

3️⃣ 프로그램 I/O 방식

  • CPU가 직접 I/O 장치를 제어하고 데이터 송수신을 담당.
  • 간단하지만 CPU가 계속 대기해야 하므로 비효율적.

4. 메인 메모리 (Main Memory, RAM)

🛠 메인 메모리란?

  • RAM(Random Access Memory): CPU가 프로그램을 실행할 때 데이터를 임시로 저장하는 기억 장치.
  • 실행 중인 프로그램과 운영체제(OS)의 일부가 로드됨.

🛠 메모리 계층 구조

계층속도크기특징
레지스터🟢 매우 빠름🔴 매우 작음CPU 내부에 있음
캐시 메모리🟢 빠름🔴 작음CPU와 RAM 간 속도 차이 해결
RAM (주기억장치)🟡 보통🟡 중간실행 중인 프로그램이 위치
HDD/SSD (보조기억장치)🔴 느림🟢 매우 큼비휘발성 데이터 저장

🛠 메모리의 종류

메모리특징
RAM휘발성(전원 끄면 데이터 삭제), 프로그램 실행 시 사용
ROM비휘발성, 부팅 시 필요한 기본 데이터 저장 (BIOS)
캐시(Cache)CPU와 RAM 간 속도 차이를 줄이기 위한 고속 메모리
가상 메모리RAM이 부족할 때 하드디스크 일부를 임시 메모리로 사용

5. 전체적인 동작 과정

1️⃣ 프로그램 실행

  • 프로그램(소프트웨어)이 보조기억장치(SSD, HDD)에 저장됨.
  • 실행 요청 시 운영체제가 해당 프로그램을 RAM으로 로드함.

2️⃣ CPU 처리

  • CPU는 버스(Bus)를 통해 RAM에서 명령어를 가져옴.
  • 명령어를 해석하고 연산 수행 (ALU, CU 활용).

3️⃣ I/O 장치 연동

  • 사용자가 키보드, 마우스, 프린터 등을 사용하면 I/O 컨트롤러CPURAM과 연결하여 작업 수행.

4️⃣ 결과 저장 및 출력

  • 연산 결과RAM 또는 저장장치(SSD, HDD)에 저장됨.
  • 모니터, 스피커 등으로 결과를 사용자에게 출력함.

📌 중간 정리

🔹 버스: 데이터, 주소, 제어 신호를 주고받는 회선.

🔹 CPU: 컴퓨터의 두뇌, 연산 수행 (ALU, CU, 레지스터 포함).

🔹 I/O 장치: 외부와 데이터 교환 (키보드, 마우스, 프린터 등).

🔹 메인 메모리(RAM): 실행 중인 프로그램 저장, 빠른 데이터 접근 가능.

💡 컴퓨터의 모든 하드웨어는 서로 연결되어 데이터를 주고받으며 동작함!

💡 CPU의 기본 작업: 적재(Load), 저장(Store), 작업(Execute), 점프(Jump)

CPU는 프로그램을 실행할 때 명령어(Instruction) 를 받아서 처리하는데, 그 과정에서 가장 기본적으로 수행하는 작업이 적재(Load), 저장(Store), 작업(Execute), 점프(Jump) 입니다.


1️⃣ 적재 (Load) - 데이터를 불러오는 작업

💬 "메모리에서 데이터를 가져와 레지스터에 저장하는 과정"

💾 ➡️ 🏗 (RAM → CPU 레지스터)

📌 예제

📍 "엄마가 냉장고에서 우유를 꺼내 컵에 따른다."

  • 냉장고 (RAM)컵 (레지스터)
  • CPU도 데이터를 메모리에서 가져와야 연산할 수 있음.

📍 컴퓨터에서

LOAD R1, [0x1000]  ; 메모리 주소 0x1000에서 값을 가져와 R1에 저장

→ 메모리에 저장된 데이터를 CPU 레지스터로 불러옴.


2️⃣ 저장 (Store) - 데이터를 메모리에 저장하는 작업

💬 "레지스터에 있던 데이터를 다시 메모리로 저장하는 과정"

🏗 ➡️ 💾 (CPU 레지스터 → RAM)

📌 예제

📍 "컵에 따른 우유를 다시 냉장고에 넣는다."

  • 컵 (레지스터)냉장고 (RAM)
  • CPU도 연산한 데이터를 다시 메모리에 저장할 필요가 있음.

📍 컴퓨터에서

STORE [0x1000], R1  ; R1에 있는 값을 메모리 주소 0x1000에 저장

→ CPU가 처리한 결과를 RAM이나 저장장치에 저장.


3️⃣ 작업 (Execute) - 실제 연산을 수행하는 작업

💬 "불러온 데이터를 바탕으로 연산하는 과정"

🧠 ➡️ 🔢 (CPU 내부 연산 수행)

📌 예제

📍 "우유에 초코 가루를 섞는다."

  • 가져온 데이터를 활용해 새로운 작업 수행

📍 컴퓨터에서

ADD R1, R2, R3  ; R2와 R3의 값을 더해서 R1에 저장

→ CPU가 연산(덧셈, 뺄셈, 논리 연산 등)을 수행.


4️⃣ 점프 (Jump) - 특정 코드로 이동하는 작업

💬 "특정 위치의 명령어로 이동하는 과정"

↪️ 🏃 (현재 실행 중인 코드 → 다른 코드 위치)

📌 예제

📍 "요리 중 우유가 없으면, 슈퍼마켓으로 간다."

  • 특정 조건에서 다른 위치로 이동
  • CPU도 특정 조건을 만족하면 코드 실행 흐름을 변경함.

📍 컴퓨터에서

assembly
복사편집
JUMP 0x2000  ; 주소 0x2000으로 실행 흐름 변경
JZ 0x3000    ; 결과가 0이면 주소 0x3000으로 이동

→ 프로그램의 흐름을 변경하는 역할 (if문, 반복문 등).


🔍 정리!

동작역할예제 (일상)예제 (컴퓨터)
적재 (Load)메모리 → CPU 레지스터냉장고에서 우유를 꺼내 컵에 따른다LOAD R1, [0x1000]
저장 (Store)CPU 레지스터 → 메모리컵의 우유를 다시 냉장고에 넣는다STORE [0x1000], R1
작업 (Execute)CPU에서 연산 수행우유에 초코 가루를 섞는다ADD R1, R2, R3
점프 (Jump)코드 실행 위치 변경우유가 없으면 슈퍼마켓으로 간다JUMP 0x2000

profile
똑똑해지고 싶어요

0개의 댓글