(3) 컴퓨터 계층 모델

탱구리·2025년 4월 12일

Computer System

목록 보기
3/10

컴퓨터 시스템


컴퓨터는 복잡하고 여러 계층으로 구성되어 있다.

ISA(Instruction Set Architecture)

ISA란 소프트웨어(앱, OS 등)와 하드웨어(CPU 등) 사이의 인터페이스로, 하드웨어가 이해할 수 있는 명령어의 집합을 정의하는 약속 또는 규약이다.

SW와 HW 간의 약속 🤙🏻

ISA가 왜 필요한데?

  1. SW와 HW 간의 연결 고리
    System software와 Hardware 계층 사이에 Interface 역할을 수행함
  1. 호환성 유지
    서로 다른 하드웨어라도 같은 ISA를 지원하면 동일한 소프트웨어가 실행됨
  1. 독립적 발전 가능
    하드웨어와 소프트웨어가 서로 영향을 덜 받고 발전할 수 있음
  1. HW 저장 위치 및 실행 연산에 대한 기능적인 정의
    저장 위치: registers, memory
    실행 연산(Operations): add, multiply, branch, load, store, ⋯
  • Machine Language
    하드웨어가 직접 이해하는 언어
    2진수(0과 1)로 구성되어 있으며, 보통은 16진수로 표현한다.

  • Assembly Language
    사람이 보기 쉬운 기호 형태의 언어

  • Assembler
    Assembly → Machine Language로 번역해주는 프로그램

  • ISA의 주요 속성들

    • Instruction Encoding (명령어 인코딩)
      명령어가 메모리/CPU 내부에 어떤 방식으로 저장되느냐?

      방식설명예시
      Fixed length모든 명령어가 고정된 길이MIPS: 32비트
      Variable length명령어마다 길이가 다름x86: 1~16바이트 (평균 3바이트)
      Limited variability일부 명령어만 짧게 사용ARM: 16비트 또는 32비트 명령어 존재
    • Register의 개수와 종류
      Register = CPU 내부의 아주 빠른 저장소

      ISA정수 레지스터 (Integer)부동소수점 레지스터 (Floating-point)
      MIPS32개32개
      x8616개16개
      ARM16개16개

    (참고)

    • MIPS 구조 : 교육용으로 많이 쓰이며, 구조가 단순하고 명확함
    • x86 : PC에서 흔히 사용하는 복잡한 명령어 구조를 가진 ISA
    • ARM : 모바일, 임베디드 기기에서 많이 사용. 전력 효율이 뛰어나고 명령어 구조도 단순함
  • ISA와 소프트웨어의 관계
    소프트웨어(컴파일러/어셈블리)가 ISA 형식에 맞춰 기계어 생성

    1. 프로그래머는 C/C++ 같은 고급 언어로 프로그램을 작성한다.
    2. 컴파일러는 이를 해당 ISA에 맞는 어셈블리 코드 또는 기계어(binary)로 번역한다.
    3. 이 기계어는 특정 ISA를 이해하는 CPU에서만 실행될 수 있다.
  • ISA와 하드웨어의 관계
    CPU는 ISA에 정의된 명령어들을 해석하고 실행(덧셈, 분기, 메모리 읽기 등)한다. 즉, ISA는 CPU가 어떤 기능을 할 수 있는지를 결정한다.
    서로 다른 ISA를 가진 CPU는 내부 구조도 다르고, 실행 방식도 다르다.

    호환성 & 최적화 측면에서 매우 중요 ✨

    • 호환성
      동일한 ISA를 사용하는 CPU에서는 동일한 바이너리 프로그램 실행 가능
    • 최적화
      컴파일러는 특정 ISA의 특성에 맞춰 더 빠르고 효율적인 기계어 생성 가능

하드웨어 계층

  • 컴퓨터 하드웨어의 핵심 3요소
    CPU가 중심이 되어 메모리와 I/O 장치를 제어

    • CPU
      연산 및 제어
    • 메모리
      프로그램/데이터 저장
    • I/O 장치
      입출력
  • 이들을 상호 연결하는 Bus 구조

Memory

  • 메인 메모리 (RAM)

    • 프로그램과 데이터를 저장
    • CPU가 직접 접근 (읽기/쓰기)
    • 휘발성(volatile) 저장장치 → 전원 끄면 데이터 날아감
  • 보조 기억장치 (스토리지)
    컴퓨터에서 데이터를 장기적으로 저장하는 장치
    주기억장치(RAM)과 달리 전원이 꺼져도 데이터가 유지된다.
    CPU와는 직접 연결되지 않고, 운영체제를 통해 간접적으로 사용된다.

    HDD(Hard Disk Drive), SSD(Solid State Drive) 등

  • Cache (캐시)
    CPU와 메모리 사이에 위치
    CPU가 메모리에 접근하는 시간 (느릿느릿) > CPU의 연산 속도
    → 이를 극복하기 위해 캐시 메모리가 필요

I/O 장치

키보드, 마우스, 모니터, 네트워크 등

속도 및 인터페이스가 다양하다.
(ex) 키보드는 느리고, 네트워크는 빠르다.
(ex) 인터페이스: USB, HEMI, Bluetooth ⋯

CPU가 직접 I/O 장치와 통신하기보다는, I/O 컨트롤러와 버스를 통해 간접적으로 수행한다.

운영체제가 제공하는 소프트웨어 인터페이스인 드라이버로 애플리케이션에서 쉽게 사용 가능하다. (앱이 복잡한 하드웨어 동작을 알 필요 없이, 간단하게 I/O를 사용할 수 있도록 도와줌)

(ex) 우리가 마우스를 움직이면, 드라이버가 그 신호를 받아 운영체제에 전달하고, 운영체제는 커서를 움직인다.

Bus 구조

CPU, 메모리, I/O 장치 등을 연결하는 공유 데이터 경로
컴퓨터는 CPU를 중심으로 버스를 통해 구성 요소들과 연결되어 있다.
일종의 고속도로처럼 생각하면 이해하기 쉽다. 모든 장치들이 이 도로를 통해 정보를 주고받는다.

  • 시스템 버스 종류

    • Address Bus
      주소 정보를 전달 (어디에 데이터를 쓸지/읽을지 지정)

      "이 메모리 주소로 가라!"

    • Data Bus
      실제 데이터를 전달
      (ex) 네트워크

      "여기로 42라는 데이터를 보내라!"

    • Control Bus
      읽기/쓰기, interrupt 등 제어 신호를 전달

고전적 구조는 3가지 버스가 하나로 통합된 구조였으나, 현대적 계층 버스 구조는 Northbridge, Southbridge로 나뉘어 있다. 이렇게 계층적으로 나누는 이유는 고속 장치와 저속 장치의 속도 차이를 효율적으로 관리하기 위함이다.

         CPU
          |
     [Northbridge]
     /     |      \
 RAM    GPU    [Southbridge]
                 |   |   |
              HDD USB Audio...
  • CPU는 Northbridge를 통해 빠른 장치(RAM, GPU)와 직접 통신
  • 느린 장치(HDD, USB)는 Southbridge를 통해 간접적으로 연결

CPU

컴퓨터의 역할 🧠
산술 및 논리 연산, 명령어 해석과 실행을 담당한다.

속도(클록 주파수, (ex) GHz 단위), 코어 수(싱글코어, 듀얼코어, 쿼드코어 등)가 성능에 큰 영향을 준다.

  • 제어장치(Control Unit)
    명령어를 해석해 어떤 연산을 수행할지 제어

  • ALU(산술논리연산장치)
    덧셈, 뺄셈, 비교 등 실제 연산을 수행

  • Register
    CPU 내부의 초고속 작업 메모리
    연산에 필요한 데이터나 결과를 일시적으로 저장한다.

  • CPU 성능

    • Latency (지연 시간)
      프로그램을 실행하는 데 걸리는 시간

      seconds / program
      = (instructions / program) × (cycles / instruction) × (seconds / cycle)

      • instructions / program
        프로그램이 실행하는 명령어 개수 (동적 명령어 수)
      • cycles / instruction (CPI)
      • seconds / cycle
        하나의 클록 사이클이 걸리는 시간 = 1 / Clock frequency
    • 클록 주파수 (Clock Frequency)
      단위: GHz (1 GHz → 109 cycles/초)
      초당 몇 번의 Clock cycle을 발생시키는지?

      ⚠️ 단순히 클록이 높다고 빠른 건 아님

      ✅ CPU 내부 구조가 어떻게 명령어를 병렬 처리하느냐,
      ✅ 캐시가 얼마나 잘 작동하느냐,
      ✅ 파이프라인 설계는 어떤 방식이냐 등도 성능을 좌우함

    • CPI(Cycles Per Instruction)
      명령어 하나당 걸리는 평균 클록 사이클 수

    🚀 예제

    명령어비율Cycle
    Integer ALU50%1
    Load20%5
    Store10%1
    Branch20%2

    CPI = (0.5 × 1) + (0.2 × 5) + (0.1 × 1) + (0.2 × 2) = 2

    ⚖️ 성능 향상 비교

    1. Branch prediction으로 Branch 비용을 1 cycle로 줄일 경우
      CPI = (0.5 × 1) + (0.2 × 5) + (0.1 × 1) + (0.2 × 1) = 1.8
    2. Load 비용을 3 cycle로 줄일 경우
      CPI = (0.5 × 1) + (0.2 × 3) + (0.1 × 1) + (0.2 × 2) = 1.6

    ⇒ 2번이 1번보다 성능에 더 큰 영향!
    최적화 전략: 어떤 명령어를 줄이는 것이 성능 향상에 더 효과적인지 분석 필요

    • IPC(Instructions Per Cycle) = 1 / CPI
      사이클당 실행 가능한 명령어 수
      CPI보다 자주 사용한다. "클수록 좋다"는 이유로 선호되나, 계산하기 어렵다.

OS(운영체제)

OS의 역할

  • 하드웨어 자원 관리
    CPU 스케줄링, 메모리 관리, 디바이스 드라이버 등

  • Process/Thread 관리
    여러 프로그램이 동시에 실행될 수 있도록 CPU 스케줄링, context switching 등 수행

  • 파일 시스템

  • 보안 및 권한 관리

사용자/앱 ↔ 하드웨어 사이에서 중재자 역할
계층 모델 상, ISA 위에서 동작 → OS가 ISA를 인터페이스로 씀

🫱🏻‍🫲🏻 OS와 하드웨어의 상호작용

  • System Call
    사용자 모드의 프로그램이 커널 모드 기능을 요청할 때 사용하는 인터페이스
    (ex) 파일 열기, 네트워크 전송, 프로세스 생성 등

    💡 사용자 모드와 커널 모드

    • 사용자 모드(User mode)
      애플리케이션이 실행
      제한된 권한, 직접 자원 접근 X
    • 커널 모드(Kernel mode)
      운영체제 커널이 실행
      최고 권한, 모든 자원 접근 가능, 제한 없음

    즉, 사용자 모드에서는 직접적으로 하드웨어 자원(I/O, 메모리 등)에 접근할 수 없고, 반드시 시스템 콜을 통해 운영체제의 도움을 받아야 한다.

    사용자 모드에서는 운영체제의 직접 자원 관리를 받기 때문에, 자원 요청 및 해제는 모두 시스템 콜을 통해 커널이 처리한다.
    하지만 자원 요청이 적절히 관리되지 않으면, deadlock이 사용자 모드에서 실행되는 애플리케이션들 사이에서도 발생할 수 있다.

    하드웨어가 mode bit를 두어 실행 중인 코드가 어디 소속인지 구분
    system call이나 interrupt 발생 시 커널 모드로 전환

  • 드라이버
    특정 하드웨어 장치를 제어하기 위한 SW 모듈
    OS는 하드웨어 직접 제어 대신 드라이버를 사용한다.

    • OS가 CPU의 메모리 보호 기법(MMU, paging 등)을 사용

      • MMU(Memory Management Unit)를 통해 메모리를 격리 및 보호
        MMU를 활용해 프로세스마다 독립된 메모리 공간 부여

🚀 계층 모델 – 소프트웨어 예시

(ex) 간단한 파일 읽기 동작

  1. 사용자 앱(텍스트 에디터)
  2. OS에게 “파일 열기” 요청 (시스템 콜)
  3. OS의 파일 시스템 모듈이 HDD/SSD 드라이버 호출
  4. 드라이버가 하드웨어 디바이스와 통신
  5. CPU-버스-디스크 간 데이터 전송
  6. 데이터를 메모리에 적재 → 사용자 앱으로 전달

0개의 댓글