본문 바로가기
운영체제

컴퓨터 구조 (Computer Architecture) 개요

by oobw 2023. 10. 18.

컴퓨터 구조는 컴퓨터 과학 전공자들이 반드시 이해해야 하는 핵심 개념 중 하나입니다. 따라서 대부분의 대학에서 컴퓨터 구조는 기본 과목으로 1, 2학년 학생들에게 제공됩니다. 이 글을 통해 컴퓨터 구조의 기본적인 개념들을 간략히 소개하겠습니다.

컴퓨터의 기본 요소

컴퓨터는 크게 하드웨어와 시스템 소프트웨어로 구성되어 있습니다. 그 위에서 응용 소프트웨어가 동작하며 사용자와 상호작용하고 여러 작업을 처리합니다. 이러한 구성 요소 각각은 컴퓨터의 효율적인 동작을 위해 필수적입니다.

하드웨어 (Hardware)

하드웨어는 컴퓨터의 물리적 구성 요소를 의미합니다. 이러한 구성 요소들은 다음과 같습니다.

  1. 중앙 처리 장치 (CPU): 컴퓨터의 두뇌로, 모든 연산과 명령어 처리의 중심입니다.
    메모리 (RAM): 임시 데이터 저장 공간으로, 컴퓨터가 작동 중인 프로그램의 데이터를 빠르게 읽고 쓸 수 있도록 도와줍니다.
  2. 저장장치: 데이터를 영구적으로 보관하는 공간. 대표적으로 하드 드라이브, SSD 등이 있습니다.
  3. 입출력 장치: 컴퓨터와 외부 환경 사이의 인터페이스 역할. 키보드, 마우스, 모니터, 프린터 등이 여기에 속합니다.
  4. 통신 장치: 다른 컴퓨터나 네트워크와 데이터를 주고받는 역할. 네트워크 카드나 무선 어댑터가 대표적입니다.

시스템 소프트웨어

시스템 소프트웨어는 컴퓨터의 하드웨어와 응용 소프트웨어 사이에서 중재자 역할을 합니다.

  1. 운영체제: 하드웨어 자원을 관리하고 응용 소프트웨어가 하드웨어를 효과적으로 사용할 수 있도록 도와주는 소프트웨어. Windows, macOS, Linux 등이 여기에 속합니다.
  2. 드라이버: 특정 하드웨어와 운영체제가 서로 상호 작용할 수 있도록 해주는 중간 소프트웨어.
  3. 유틸리티: 시스템의 성능을 최적화하거나 관리하는 작은 프로그램들. 디스크 정리, 압축, 백업 등의 기능을 가진 소프트웨어가 여기에 포함됩니다.

응용 소프트웨어

사용자가 직접 사용하는 프로그램을 의미합니다. 워드 프로세서, 브라우저, 게임, 그래픽 편집 프로그램 등 다양한 목적으로 설계된 소프트웨어가 여기에 속합니다.

컴퓨터의 이러한 구성 요소들은 서로 복잡하게 연결되어 있어서, 하나의 작은 변화도 전체 시스템에 영향을 미칠 수 있습니다. 따라서 이들의 작동 원리와 상호작용을 이해하는 것은 컴퓨터의 전반적인 성능과 안정성을 높이는 데 중요한 역할을 합니다.

컴퓨터 구조와 명령어의 집합 구조

컴퓨터 구조는 크게 네 가지 주요 분야로 나뉩니다.

첫째, '컴퓨터의 기능 구조에 대한 설계'입니다. 이는 컴퓨터가 효율적으로 데이터를 처리하고 연산을 수행하기 위한 기본적인 기능들을 결정하고 설계하는 작업을 포함합니다. 이를 대표하는 구조로는 폰 노이만 구조, 하버드 구조 및 수정된 하버드 구조가 있습니다.

둘째, '명령어 집합구조(Instruction Set Architecture)'입니다. CPU는 다양한 명령어를 처리하며, 이 명령어들은 사전에 정의된 규칙과 구조에 따라 설계됩니다. 여기서 말하는 명령어는 CPU가 수행할 수 있는 기본적인 연산이나 작업을 의미하며, 대표적으로 ARM, MIPS, AVR, 인텔의 x86 및 x86-64 아키텍처가 있습니다.

셋째, '마이크로 아키텍처'는 CPU 내부의 물리적 구성에 초점을 맞춘 분야입니다. 이는 앞서 언급한 명령어 집합구조가 실제로 하드웨어에서 어떻게 구현되는지를 다루며, CPU의 회로 설계와 관련된 기술적 측면을 포함합니다.

마지막으로, 컴퓨터 구조는 다양한 하드웨어와 컴퓨팅 방법에 대한 설계도 포함하고 있습니다. 이를 통해 컴퓨터가 효율적으로, 빠르게, 그리고 안정적으로 작동할 수 있는 구조를 만들어낼 수 있습니다.

위의 구조 중에서 현대 컴퓨터의 발전에 큰 영향을 미친 현대 컴퓨터의 핵심 구조 중 하나인 폰 노이만 구조와 x86-64 아키텍처에 대해 자세히 알아보겠습니다.

폰 노이만 구조

컴퓨터의 핵심적인 구조를 이해하기 위해서는 1940년대 초반에 존 폰 노이만이 제시한 폰 노이만 구조를 알아야 합니다. 이 구조는 오늘날의 대부분의 컴퓨터에 적용되며, 연산, 제어, 저장의 세 가지 핵심 기능을 중심으로 설계되었습니다.

중앙처리장치 (CPU)

컴퓨터의 핵심이라 할 수 있는 CPU는 프로그램의 지시에 따라 연산을 수행하고 전체 시스템을 관리합니다. CPU 내부에는 다양한 부품이 있으며, 이 중 산술논리장치(ALU)는 연산을 담당하며, 제어장치는 CPU의 동작을 제어합니다. 또한, 레지스터는 CPU가 바로 접근할 수 있는 매우 빠른 저장공간으로, CPU의 연산에 필요한 데이터를 일시적으로 저장합니다.

기억장치: 모든 데이터와 프로그램은 컴퓨터의 기억장치에 저장됩니다. 주기억장치는 프로그램의 실행 도중 필요한 데이터를 일시적으로 저장하는 장소로, RAM이 대표적입니다. 반면 보조기억장치는 데이터를 장기적으로 저장하는 공간으로, HDD나 SSD와 같은 디스크 드라이브가 이에 해당됩니다.

버스: 컴퓨터 내의 여러 장치들 사이에서 데이터와 제어 신호를 전송하는 통로를 버스라고 합니다. 데이터 버스는 데이터의 전송을, 주소 버스는 데이터의 위치를, 제어 버스는 데이터의 읽기와 쓰기 같은 연산을 제어합니다.

명령어 집합 구조

CPU가 이해하고 해석할 수 있는 명령어 집합이 있습니다. 이를 "명령어 집합 구조(Instruction Set Architecture, ISA)"라 부릅니다. ISA는 프로그램이 어떻게 CPU에 의해 실행될 것인지를 정의하는 규격으로, 프로그램이 기계어로 쓰이게 되면, CPU는 이를 해석하여 프로그램을 실행합니다. 이런 ISA는 여러 가지 종류가 있습니다. 대표적으로 IA-32, x86-64(x64), MIPS, AVR 등이 있습니다. 이러한 명령어 집한은 컴퓨터와 디바이스의 다양한 요구 사항과 환경에 따라 다르게 설계되었습니다.

예를 들어, x86-64 아키텍처는 고성능의 연산을 목표로 설계되었습니다. 따라서 이를 기반으로 한 CPU는 많은 전력을 필요로 하고, 높은 발열 문제도 동반됩니다. 이러한 특성 때문에 대형 냉각 장치가 필요한 데스크톱이나 랩톱에서 주로 사용됩니다. 그러나 배터리를 주 동력원으로 사용하는 스마트폰이나 드론, 그리고 크기가 작아야 하는 인공지능 스피커나 공유기와 같은 임베디드 기기들은 전력 소모와 발열 문제를 심각하게 고려해야 합니다. 이러한 장치들은 x86-64와 같은 고성능 프로세서의 사용이 어려워, 대신 ARM, MIPS, AVR과 같은 효율적인 프로세서를 선택합니다.

이러한 다양한 명령어 집합은 다음의 구성 요소들에 대해서 어떻게 동작할지 정의해야 합니다.

  1. 명령어 형식 및 바이트 순서: 어떻게 명령어가 구성되는지, 그리고 데이터의 바이트 순서(big-endian 또는 little-endian)를 정의합니다.
  2. 레지스터 집합: CPU 내에서 빠른 접근을 위해 사용되는 저장 공간을 나타냅니다.
  3. 주소 모드: 메모리에 저장된 데이터에 접근하기 위한 다양한 방법을 제시합니다.
  4. 명령어 집합: CPU가 실행할 수 있는 모든 기본 연산들을 나열합니다.
  5. 데이터 형식: 정수, 부동소수점, 벡터 등 다양한 데이터 유형을 정의합니다.
  6. 예외 및 인터럽트 처리: 예외 상황 발생 시 CPU가 어떻게 반응할지, 그리고 외부 인터럽트에 어떻게 대응할지를 설명합니다.

많은 아키텍처 중에서 x86-64는 특히 주목받을 만한 아키텍처입니다. 왜냐하면 현재 시장에서 x86 기반의 CPU 점유율이 압도적이기 때문입니다. 따라서 x86-64 아키텍처를 이해하는 것이 컴퓨터 구조를 이해하는 데 있어 큰 도움을 주기에 더 자세히 소개하겠습니다.

x86-64 구조

x86-64(또는 x64, AMD64, Intel 64)는 64비트 마이크로프로세서 아키텍처로, x86 아키텍처를 기반으로 합니다. 이 아키텍처는 원래 AMD에서 개발되었으며, 이후 인텔에서도 채택하게 되었습니다. x86-64는 기존의 32비트 x86 아키텍처를 확장하여 더 큰 메모리 주소 공간과 더 많은 레지스터를 지원하게 되었습니다.

주요 특징

  1. 64비트 메모리 주소 지원: 이로 인해 16 엑사바이트(EB)까지의 메모리 주소를 지원하게 되어, 더 큰 데이터 세트를 처리할 수 있게 되었습니다.
  2. 추가된 레지스터: x86-64는 기존 x86 아키텍처보다 더 많은 일반 목적 레지스터를 갖습니다. 이는 프로그램의 성능을 향상하는 데 중요한 요소입니다.
  3. SIMD(단일 명령 스트림, 다중 데이터 스트림) 확장: x86-64는 다양한 벡터 연산을 위한 확장 명령어 집합을 지원합니다, 예를 들면, SSE, SSE2, AVX 등이 있습니다.
  4. 호환성: x86-64는 기존의 32비트 x86 코드와 호환되게 설계되었습니다. 이는 소프트웨어의 이전 버전과의 호환성을 보장하는 중요한 특징입니다.

x86-64 구조에서의 레지스터

레지스터는 CPU 내에서 데이터를 빠르게 저장하고 사용하기 위한 저장공간으로, 산술 연산에 필요한 데이터의 저장 및 주소 참조와 같은 다양한 용도로 활용됩니다. x86-64 아키텍처에서는 다음의 레지스터들이 존재합니다: 범용 레지스터(General Register), 세그먼트 레지스터(Segment Register), 명령어 포인터 레지스터(Instruction Pointer Register, IP) 및 플래그 레지스터(Flag Register).

x86-64 아키텍처: 레지스터

레지스터는 CPU 내에서 데이터를 빠르게 저장하고 사용하기 위한 저장공간으로, 산술 연산에 필요한 데이터의 저장 및 주소 참조와 같은 다양한 용도로 활용됩니다. x86-64 아키텍처에서는 다음의 레지스터들이 존재합니다: 범용 레지스터(General Register), 세그먼트 레지스터(Segment Register), 명령어 포인터 레지스터(Instruction Pointer Register, IP) 및 플래그 레지스터(Flag Register).

범용 레지스터

범용 레지스터는 주된 용도가 있지만 다른 다양한 목적으로도 활용될 수 있습니다. x86-64에서 범용 레지스터는 8바이트의 데이터를 저장할 수 있으며, 부호 없는 정수를 기준으로 최대 2^64 - 1까지의 값을 표현할 수 있습니다. 자주 사용되는 범용 레지스터 외에도 r8부터 r15까지의 범용 레지스터가 있습니다.

세그먼트 레지스터

x86-64 아키텍처는 cs, ss, ds, es, fs, gs와 같은 6개의 세그먼트 레지스터를 포함하며, 각 레지스터는 16비트 크기를 가집니다. 세그먼트 레지스터는 x86-64 아키텍처로의 확장 과정에서 큰 변화를 겪었습니다. 과거 IA-32 및 IA-16에서는 메모리 주소 영역을 확장하기 위해 세그먼트 레지스터를 사용했으나, x86-64에서는 이미 충분한 메모리 주소 영역이 있기 때문에 이러한 용도로는 거의 사용되지 않습니다. 현대 x86-64에서는 cs, ds 및 ss가 코드, 데이터 및 스택 메모리 영역을 가리키는 데 사용되며, 나머지 레지스터는 운영 체제에 따라 다양한 목적으로 활용될 수 있습니다.

명령어 포인터 레지스터

프로그램은 일련의 기계어 코드로 구성되며, 어떤 부분의 코드를 CPU가 실행할지를 지정하는 것이 명령어 포인터 레지스터의 역할입니다. x86-64에서는 이를 rip라고 부르며, 8바이트 크기를 가집니다.

플래그 레지스터

플래그 레지스터는 CPU의 현재 상태 정보를 저장합니다. x86-64에서는 RFLAGS라는 64비트 플래그 레지스터를 사용하며, 이는 과거 16비트 플래그 레지스터의 확장 버전입니다.

레지스터 호환성

x86-64는 기존 IA-32 아키텍처의 64비트 확장 버전으로 호환성을 유지합니다. IA-32의 레지스터는 32비트 크기를 가지며 eax, ebx, ecx, edx, esi, edi, esp, ebp와 같은 명칭을 사용합니다. 이 레지스터들은 x86-64에서도 사용 가능하며, rax, rbx, rcx, rdx, rsi, rdi, rsp, rbp는 이들의 64비트 확장 버전입니다.

이상으로 컴퓨터 구조의 기본 개념들에 대해 알아보았습니다. 컴퓨터의 작동 원리를 이해하는 데 필수적인 분야입니다. 이를 통해 우리는 효율적인 프로그래밍, 최적화 및 시스템 설계를 위한 근본적인 지식을 얻을 수 있습니다. 기본적인 개념부터 시작하여, 컴퓨터의 깊은 내부로의 여정을 계속해보시길 바랍니다.