TWO-LINES DEV

'두줄 개발자'의 코딩 연구기지

NO GOOGLE, ONLY LOGIC

카테고리 없음

[임베디드시스템] VM에서 기기 연결 시 TFTP / PXE 문제를 겪으며 정리한 기록

컴퓨터 공학(CS)

리눅스 역사 요약: 리차드 스톨만, 리누스 토발즈, MS의 30년 전쟁

카테고리 없음

임베디드 시스템) 임베디드 시스템 구조, 메모리 맵, MCU/SoC, MMIO, 그리고 크로스 컴파일 파이프라인

카테고리 없음

어셈블리어란 무엇인가? 기계어와의 차이점과 공부해야 하는 이유

카테고리 없음

어셈블리어(assembly language)

카테고리 없음

assembly language

카테고리 없음

‘답하는 AI’에서 ‘일하는 AI’로: 최근 AI 프로젝트들의 기술 구조: RAG 이후의 AI 설계: SLM, Graph, Agent

카테고리 없음

Wikidocs - Ai 딥 러닝 파이토치 교과서 - 입문부터 LLM

카테고리 없음

Computer Architecture: Reading the Blueprint of the Digital World

카테고리 없음

AI) 컴퓨터와 구조 : 개발한 블로그 작성 자동화 봇으로 작성

[임베디드시스템] VM에서 기기 연결 시 TFTP / PXE 문제를 겪으며 정리한 기록

카테고리 없음  ·  2026. 1. 15. 09:23

 

기기를 연결하면 이런것들이 뜬다. 

시리얼 포트 디버그 포트 

 

                                             부트로더 

 

두개를 설치해야한다. 

Virtual Machine Setting

 

파일을 간접 서버에 전송하는걸 하는거

 

계속 연결이 안돼서 T가 뜨다가 
로컬 서버를 터미널에 입력하고 나서 Done이 되었다.

 

VM에서 기기 연결 시 TFTP / PXE 문제를 겪으며 정리한 기록

기기를 가상 머신(VM)에 연결하면 다음과 같은 요소들이 등장한다.

  • Serial Port / Debug Port
  • Bootloader 환경

이는 단순히 Ubuntu를 실행하는 환경이 아니라,
하드웨어 장비 + 부트로더 + 디버그 콘솔이 함께 동작하는 구조라는 뜻이다.

이 환경에서는 두 가지가 동시에 맞아야 한다.

  1. VMware 가상 머신 자체
  2. 해당 장비와 통신하기 위한 VM 설정
    (Serial Port, Network, Boot Option)

즉, 단순히 Ubuntu만 설치하면 끝나는 구조가 아니다.
Virtual Machine Settings에서 장비와 연결되는 포트와 네트워크, 부팅 방식까지 함께 설정되어야 한다.

TFTP from server 192.168.20.90
Filename: HDS2450.bin
Loading: T T T T ...
Retry count exceeded; starting again

이 상태는 Ubuntu가 로컬 디스크로 부팅되지 못하고,
PXE(Network Boot) 모드로 전환되어 외부 서버에서
HDS2450.bin이라는 부트 이미지를 TFTP로 받아오려다 실패하는 상황이다.

처음에는 “파일을 서버로 전송하는 과정인가?”라고 오해했지만,
실제로는 그 반대였다.

  • 내가 파일을 보내는 것이 아니라
  • VM이 서버에서 부트 이미지를 받으려는 상태였다.

서버가 응답하지 않으니 T T T T ...만 반복되었다.

 

done은

  • Ubuntu 설치 완료가 아니라
  • “네트워크 부트용 바이너리 로딩 완료”를 의미한다.

그 이후 실제로 Ubuntu가 올라오면서
root@ubuntu-vm 프롬프트가 나타났고,
결과적으로는 Ubuntu가 정상 동작하는 상태가 되었다.

 

핵심 정리

  1. 기기를 VM에 연결하면
    • Serial / Debug Port
    • Bootloader 환경이 함께 활성화된다.
  2. 이 구조에서는
    • 가상 머신
    • 통신 포트
    • 부팅 방식
      이 세 가지가 동시에 맞아야 정상 동작한다.
  3. T T T ...는
    • PXE(Network Boot)가 실패하며 재시도 중인 상태였다.
  4. 로컬 서버를 지정한 후
    • TFTP 전송이 성공
    • done 출력
    • 이후 Ubuntu가 정상 기동되었다.
  5. 현재는 Ubuntu가 정상 실행 중이지만,
    • 부팅 순서가 잘못되면 다시 PXE가 먼저 시도될 수 있다.
    • 따라서 Network Boot를 비활성화하고
      Hard Disk를 1순위 부팅으로 고정하는 것이 안정적이다.

이 경험을 통해,
VM 환경에서 “부팅이 안 된다”는 문제는
OS 자체보다 부트 경로와 네트워크 설정 문제인 경우가 훨씬 많다는 것을 체감하게 되었다.

리눅스 역사 요약: 리차드 스톨만, 리누스 토발즈, MS의 30년 전쟁

컴퓨터 공학(CS)  ·  2026. 1. 14. 10:56

1. 리차드 스톨만과 GNU 프로젝트 (자유의 시작)

https://ko.wikipedia.org/wiki/GNU_%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8

 

리눅스 역사의 뿌리는 1983년 리차드 스톨만(Richard Stallman)이 시작한 GNU 프로젝트에 있습니다.

  • 철학: 스톨만은 소프트웨어를 누구나 자유롭게 실행, 복사, 수정, 배포할 수 있어야 한다는 '자유 소프트웨어' 정신을 제창했습니다.
  • 성과: 그는 컴파일러(GCC), 에디터(Emacs), 디버거(GDB) 등 운영체제에 필요한 거의 모든 도구를 만들었습니다.
  • 남은 과제: 하지만 운영체제의 핵심인 '커널(Kernel)'인 GNU Hurd의 개발이 지연되면서 시스템이 완성되지 못한 상태였습니다.

https://ko.wikipedia.org/wiki/%EB%A6%AC%EB%88%84%EC%8A%A4_%ED%86%A0%EB%A5%B4%EB%B0%9C%EC%8A%A4

2. 헬싱키의 리누스 토발즈와 리눅스 탄생

1991년, 핀란드 헬싱키 대학교의 학생이었던 리누스 토발즈(Linus Torvalds)가 등장하며 퍼즐의 마지막 조각이 맞춰집니다.

  • 계기: 당시 교육용 유닉스 시스템인 '미닉스(MINIX)'의 기능에 만족하지 못한 토발즈는 자신의 386 PC에서 동작하는 새로운 커널을 직접 만들기 시작했습니다.
  • 공개: 1991년 9월, 그는 헬싱키 대학교 서버를 통해 리눅스 커널 0.01 버전을 공개했습니다.
  • 결합 (GNU/Linux): 토발즈가 만든 커널(Linux)과 스톨만이 만든 자유 소프트웨어 도구들(GNU)이 합쳐지면서 우리가 오늘날 사용하는 완성된 형태의 '리눅스' 운영체제가 탄생했습니다.

3. 리눅스와 마이크로소프트 (적대에서 협력으로)

리눅스의 성장은 당시 독점 소프트웨어의 제왕이었던*마이크로소프트(MS)에게 큰 위협이었습니다.

  • 적대 관계 (90년대~2000년대 초):
    • 전 CEO 빌 게이츠와 스티브 발머는 리눅스를 "지적 재산권을 파괴하는 암(Cancer)과 같은 존재"라고 비난하며 공격했습니다.
    • 당시 MS는 윈도우라는 폐쇄형 소프트웨어 모델을 고수했고, 오픈 소스인 리눅스와 정반대의 길을 걸었습니다.
  • 전략적 변화 (2010년대 이후):
    • 클라우드(Azure) 시장이 중요해지면서 리눅스를 수용하지 않고는 살아남을 수 없음을 깨달았습니다.
    • 현 CEO 사티아 나델라는 "Microsoft Loves Linux"를 외치며 리눅스 재단에 가입하고 윈도우 내부에 리눅스 커널을 포함시키는 WSL(Windows Subsystem for Linux)을 발표하기에 이르렀습니다.

4. 요약: 리눅스 생태계의 발전 과정

https://namu.wiki/w/%EB%A6%AC%EC%B2%98%EB%93%9C%20%EC%8A%A4%ED%86%A8%EB%A8%BC

리눅스는 리차드 스톨만이 만든 컴파일러 기술과 리누스 토발즈의 커널 기술이 만나 탄생한 거대한 오픈 소스 혁명입니다.

리눅스의 역사는 단순히 소프트웨어의 탄생을 넘어, '공유'와 '협업'이 세상을 어떻게 바꿀 수 있는지를 보여주는 증거입니다. 리차드 스톨만의 고집스러운 철학이 씨앗이 되고, 리누스 토발즈의 유연한 기술력이 줄기가 되어 오늘날 전 세계를 지탱하는 거대한 IT 생태계라는 열매를 맺었습니다. 독점보다는 공유를 선택한 이들의 도전이 없었다면, 지금 우리가 누리는 클라우드와 스마트폰의 시대는 훨씬 늦게 왔을지도 모릅니다.

 

여러분이 매일 쓰는 안드로이드폰과 웹사이트 뒤에는 리차드 스톨만과 리누스 토발즈의 철학이 숨 쉬고 있다는 사실, 흥미롭지 않으신가요?

 

감사합니다. 두줄 개발자입니다. 

임베디드 시스템) 임베디드 시스템 구조, 메모리 맵, MCU/SoC, MMIO, 그리고 크로스 컴파일 파이프라인

카테고리 없음  ·  2026. 1. 14. 10:43

메모리 랩(메모리 지도) 임베디드 

 

Rom

 Embedded System 구조 및 기본 구성

Chap 1. Embedded System 구조 및 이해

임베디드 시스템은 **'특정 목적(Specific Purpose)'**을 위해 설계되었다는 점이 핵심입니다.

  • 1.1 구조 및 구성: 하드웨어(CPU, Memory, I/O)와 소프트웨어(Firmware, OS, App)가 어떻게 계층적으로 쌓여 있는지 파악합니다.
  • 1.2 Processor vs Memory: 데이터가 이동하는 통로인 Bus 구조와 데이터를 저장하는 Flash(비휘발성) 및 **RAM(휘발성)**의 역할을 구분합니다.
  • 1.3 & 1.4 개발 환경: 임베디드는 타겟 보드와 개발 PC가 다르기 때문에 Cross-Compiler 환경 구축이 필수입니다.

 

Embedded System(임베디드 시스템, 내장형 시스템)은 특정 기능을 수행하기 위해 하드웨어(Hardware)와 소프트웨어(Software)를 밀접하게 통합한 장치를 의미한다. 즉 특정한 기능을 수행하기 위해 전용 하드웨어에 소프트웨어가 내장된 시스템입니다. PC처럼 범용적인 목적이 아니라, 냉장고, 자동차 제어기, 스마트워치처럼 목적이 명확합니다.

특정되지 않는 일반적인 목적을 수행하는 PC(Personal Computer)와 대조되나 스마트 폰(Smart Phone)의 대중화로 경계가 모호한 상태이다. 

하드웨어(Hardware) 

- 프로세서
- 메모리 장치(ROM, RAM)

- 기타 수행하기 위한 특정기능에 맞는 주변장치(Peripheral Device)

소프트웨어(Software)

- 부트로더(Bootloader), 운영체제(Operating System), 응용 Software

1. Embedded System의 H/W 기본 구성

  • 임베디드 하드웨어는 연산을 담당하는 프로세서, 데이터를 저장하는 메모리, 그리고 외부와 상호작용하는 주변장치로 이루어집니다.
    • Processor: 시스템의 두뇌로 Core, Co-processor, MMU, Cache 등을 포함합니다. SoC(System-on-a-chip)의 경우 프로세서 내부에 ROM/RAM 및 주변장치 컨트롤러까지 통합된 형태를 띱니다.
      • Core의 구성: 실제 연산이 일어나는 핵심부로 레지스터(Register), 산술 논리 연산 장치(ALU), 제어 장치(CU), 그리고 이들을 연결하는 **버스(BUS)**로 구성됩니다.
    • RAM (Random Access Memory): 전원을 끄면 데이터가 지워지는 휘발성 메모리입니다. SRAM, SDRAM, DDR 계열 및 모바일용 LPDDR 등이 있습니다.
    • ROM (Read-Only Memory): 전원을 꺼도 데이터가 유지되는 비휘발성 메모리입니다. 펌웨어, 부트로더, OS, 응용 프로그램 저장에 사용되며 Nor/Nand Flash, SD card, eMMC 등이 대표적입니다.
    • Peripheral (주변장치): 특정 기능을 수행하기 위한 장치들로 LCD, 터치, 카메라, 오디오, 통신 모듈(WIFI/BT/NFC), 각종 센서 등이 포함됩니다.

2. 주요 장치 개념 이해 (MCU, ECU, SoC)

자료에서는 시스템의 집적도와 활용 목적에 따라 다음과 같이 구분하고 있습니다.

MCU (Microcontroller Unit)

단일 칩 내에 프로세서와 주변장치를 통합한 장치입니다.

  • Core: 메인 연산 유닛.
  • Coprocess: 성능 보조를 위한 Cache, FPU(부동소수점 연산), MPU(메모리 보호) 등.
  • Peripheral: 외부와 연결되는 GPIO, 통신(UART/SPI 등), ADC(아날로그-디지털 변환) 등.

ECU (Electronic Control Unit)

주로 자동차 전자 제어에 사용되는 단위로, 하드웨어와 소프트웨어의 결합체입니다.

  • 구성: Microcontroller + Peripherals + 소프트웨어 및 설정값.
  • 즉, MCU 하드웨어에 특정 기능을 수행하는 소프트웨어가 탑재된 하나의 완성된 제어 모듈을 의미합니다.

SoC (System on Chip)

기술의 집약체로, 단일 칩에 시스템의 거의 모든 기능이 집적된 회로입니다. 프로세서뿐만 아니라 메모리, 주변장치 컨트롤러 등이 모두 하나로 합쳐져 있어 고성능 임베디드 기기(스마트폰 등)의 핵심이 됩니다.

Embedded System의 H/W는 다음과 같이 구성될 수 있다.

Core의 구성
 레지스터(Register) § 산술 논리 연산 장치 (ALU : Arithmetic Logic Unit) § 제어 장치 (CU : Control Unit) § 버스(BUS)

1. MCU (Microcontroller Unit)

컴퓨터의 CPU 역할을 하는 Core뿐만 아니라, 시스템 구동에 필요한 부가 기능을 하나의 칩에 넣은 것입니다.

  • Core: 연산을 담당하는 핵심 장치입니다.
  • Coprocess: 성능 향상을 위한 보조 프로세서로 Cache, FPU(부동소수점 연산 장치), MPU(메모리 보호 장치) 등이 포함됩니다.
  • Peripheral (주변장치): 외부 세계와 소통하기 위한 도구들입니다.
    • GPIO: 일반 목적 입출력 핀.
    • Communication: UART, SPI, I2C 등의 통신 프로토콜.
    • ADC: 아날로그 신호를 디지털로 변환하는 장치.

2. ECU (Electronic Control Unit)

주로 자동차 분야에서 많이 쓰이는 용어로, MCU 하드웨어와 이를 구동하는 소프트웨어가 합쳐진 제어 모듈을 의미합니다.

  • 구성: 마이크로컨트롤러(MCU) + 주변장치(Peripherals) + 소프트웨어 및 설정값.
  • 특징: 단순한 칩 단위를 넘어, 특정 기능을 수행하기 위해 완전히 구성된 '제어 장치' 전체를 일컫습니다.

3. SoC (System on Chip)

기술의 발전으로 CPU, 메모리, GPU, 통신 모듈 등 시스템의 거의 모든 구성 요소를 단일 칩에 집적한 형태입니다.

  • 특징: MCU보다 훨씬 복잡하고 고성능인 경우가 많으며, 스마트폰의 AP(Application Processor)가 대표적인 SoC 예시입니다.
  • 장점: 크기를 획기적으로 줄이고 전력 효율을 높일 수 있습니다.

 

Microprocessor (MPU) 동작 원리

마이크로프로세서는 기본적으로 Fetch - Decode - Execute 단계를 반복하며 동작합니다.

  1. Fetch (인출): 메모리(Flash/RAM)로부터 실행할 명령어를 가져옵니다.
  2. Decode (해독): 가져온 명령어가 무엇을 의미하는지 해석합니다.
  3. Execute (실행): 해석된 결과에 따라 ALU(산술논리장치)를 통해 연산하거나 데이터를 이동시킵니다.

3. 디바이스 제어의 핵심: Memory Mapped I/O (MMIO)

대부분의 임베디드 프로세서(ARM, PowerPC 등)는 하드웨어를 제어하기 위해 Memory Mapped I/O 방식을 사용합니다.

디바이스 제어 방식: Memory Mapped I/O

ARM, PowerPC 등 대부분의 임베디드 프로세서는 Memory Mapped I/O (MMIO) 방식을 사용하여 주변장치를 제어합니다.

MMIO의 원리 및 특징

    • 개념: 메모리 번지(Address)의 일부를 I/O 장치에 할당하여 사용합니다.
    • 동작: CPU는 일반 메모리에 접근하는 것과 동일한 명령어로 I/O 장치를 제어합니다. 각 영역은 주소(Address)로 구분됩니다.
    • Memory Map: 칩(SoC, MCU)마다 고유한 주소 할당 지도가 있으며, 이는 Chip Manual에서 확인할 수 있습니다.
      • 예시: 0x00000000 부근은 ROM, 중간은 RAM, 0x50000000 이후는 UART나 Timer 같은 주변장치(SFR 영역)에 할당됩니다.

        SoC / MCU 메모리 맵 구조 (사진)
         바이너리가 어디에 배치되고, CPU가 어떻게 해석하는가” 를 설명

두 번째 이미지는 프로세서가 인식하는 주소 공간과 하드웨어 자원 배치 구조를 설명합니다.

주소 공간 특성 - 예시: 32bit 시스템

        • 주소 범위: 0x00000000 (최소) / 0xFFFFFFFF (최대)
        • Address Extension 미지원

이 전체 주소 공간을 CPU는 하나의 연속된 메모리처럼 인식합니다.

  • SFR (Special Function Register)
    → 메모리처럼 접근하지만 실제로는 하드웨어 레지스터
    → *(volatile uint32_t*)0x50000024 = 값;
    과 같은 방식으로 UART 제어

SoC 내부 구조 개념

  • Core (ARM Core)
  • Cache / MMU / TCM
  • i-ROM / i-RAM
  • Peripheral (PWM, UART, DMC 등)
  • 외부 메모리: E-DRAM, NAND, eMMC, SDCard

이 모든 자원이 하나의 주소 공간에 매핑되어 있으며,
CPU는 “메모리 접근”이라는 동일한 방식으로:

  • 코드 실행
  • 데이터 접근
  • 하드웨어 제어 를 수행합니다.

소프트웨어가 하드웨어를 지배하는 구조”  를 완전히 설명하는 핵심 도식

 

즉,

  • 컴파일 & 링크 단계에서 → 코드와 데이터는 특정 주소(메모리 맵 기준) 에 맞게 배치되고
  • 최종 바이너리는 → MCU의 Flash / ROM (0x00000000 등)에 기록되며
  • 실행 시 → CPU는 메모리 맵을 통해
    • 코드 실행
    • RAM 접근
    • UART, PWM 같은 하드웨어 제어
      를 모두 “주소 접근”으로 처리합니다.

이 두 그림은 임베디드 시스템에서 “소프트웨어가 하드웨어를 지배하는 구조” 를 완전히 설명하는 핵심 도식입니다.

 

주의사항

  1. Non-cacheable: I/O 영역은 캐시를 사용하지 않도록 설정해야 합니다. 하드웨어 상태가 실시간으로 변하기 때문입니다.
  2. volatile 선언: C언어 프로그래밍 시 I/O 영역 변수는 volatile 키워드를 사용하여 컴파일러의 최적화를 방지해야 합니다.

프로그램 

  1. 프로세서를 통하여 어떤 결과를 얻기 위하여 프로세서가 받아 들일 수 있
    는 형태로 구성된 명령(instruction)을 나열하여 구성된 문장다.
  2. 하이레벨 언어: 어셈블리어의 까다로운 점들을 개선하고 프로그래머의 생산성을 높이기 위해 보다 ' 상위'에 존재하는 언어. 
    프로그래머가 사용/이해하기 쉬운 언어

어셈블리어 (Assembly language)

기계어 보다 편리하게 프로그램 작성자가 이해 할 수 있도록 pseudo 명령 (instruction)을 첨부한 것.
프로세서(Processor)별로 어셈블리어(Assembly language)가 다르며 Low-Level 
Language로 분류된다.

- 장점: 기계어에 비해 이해가 쉽다.

- 프로긂의 오류 수정과 보관이 쉽다.

- 단점: 하이 레벨 언어에 비하면 생산성이 매우 떨어짐. 

- 프로세서마다 어셈블리어가 서로 다르다. 

임베디드 시스템 전체 파이프 라인 
소스 코드 → Object → Library → Linker(주소 결정) → ELF → Binary → ROM → CPU 실행

크로스 컴파일 파이프라인

“코드가 어떻게 바이너리로 변환되는가” 를 설명

첫 번째 그림은 소스 코드가 실행 가능한 바이너리(ROM 이미지) 로 변환되는 전체 과정을 나타냅니다.

입력 단계

  • Assembly (.s) → Assembler (armasm, gas)
  • C (.c) → C Compiler (armcc, gcc)
  • C++ (.cpp) → C++ Compiler (armcpp, g++)

각 컴파일러는 소스 코드를 Object 파일(.o) 로 변환합니다. 이 Object 파일은 다음 정보를 포함합니다.

  • 기계어 코드
  • 심볼 테이블
  • DWARF2 디버그 정보

중간 단계

  • 여러 Object 파일(.o) → Librarian (armar, ar)
  • 결과물 → Static Library (.a)

라이브러리는 여러 모듈을 하나의 묶음으로 관리하기 위한 중간 산출물입니다.


링크 단계

  • Object 파일(.o) + Library(.a)
  • Linker (armlink, ld)
  • 결과물 → 실행 파일 (.axf / ELF)

이 단계에서:

  • 코드와 데이터가 실제 메모리 주소에 배치됨
  • 심볼 해석
  • 실행 가능한 구조 완성

최종 변환

  • ELF / AXF → fromelf, objcopy
  • Binary File (ROM format)

이 바이너리가 실제로 MCU의 Flash / ROM에 기록됩니다.

즉,소스 코드 → Object → Library → ELF → Binary(ROM) 라는 일관된 파이프라인이 형성됩니다.



다음은 파이프라인에 대해 정리해보겠습니다!
감사합니다.

VM ware 

Virtual Box

어셈블리어란 무엇인가? 기계어와의 차이점과 공부해야 하는 이유

카테고리 없음  ·  2026. 1. 13. 17:19

BreakPoint 
Dibugging Mode
programming mode 

 

어셈블리를 작성해보기 위해서 ARM7 Emulator를 설치한다. 

 

 

Online-Simulater - cpu 시뮬레이터 
https://cpulator.01xz.net/?sys=arm

 

 

아래의 명령어  MoV는 이동해라는 뜻이고, MSR은 값을 변환하여 더하라는 뜻이다. 

 

exception 예외처리 

 

Exception
IRQ, FIQ를 비롯한 대부분의 Operating 모드는 외부에서 발생되는 조건에 의해서
ARM 프로세서가 하드웨어적으로 변경한다.


외부에서 발생되는 물리적인 조건에 의해서 정상적인 프로그램의 실행을 미루고 예
외적인 현상을 처리하는 것을 Exception이라 한다.

Operating 모드의 변경은 소프트웨어에 의하여 제어 할 수도 있다.

 

ARM 레지스터 종류

CPSR(Current : ARM에서 가지고 있는 Register 

1개의 CPSR(Current Program Status Register): 프로세서가 수행하고 있는 현재의 동작 상태를 나타낸다.
- 30개의 범용(General Purpose) 레지스터
- 대부분 데이터 연산 등에 사용
- 프로세서의 동작(Operating) 모드에 따라 사용되는 레지스터가 제한된다.
- 1개의 프로그램 카운터(PC : Program Counter)
- 프로그램을 읽어올 메모리의 위치를 나타낸다.
- 1개의 CPSR(Current Program Status Register)
- 프로세서가 수행하고 있는 현재의 동작 상태를 나타낸다.
- 5개의 SPSR(Saved Program Status Register)
- 이전 모드의 CPSR의 복사본으로 Exception이 발생하면 ARM이 하드웨어적으로 이전 모드의 CPSR 값을 각각의 모드에 해당하는 SPSR에 복사
- User, System 모드를 제외한 모든 privilege 모드에 각각 하나씩 존재

 

16진수 / 4바이트 / 4비트 

글자 하나는 4비트임

ARM 어셈블리어 코드 해석 표

1. 초기화 및 데이터 이동 (MOV, MSR)

  • MOV R0, #0x00000002: 숫자 2를 R0 레지스터에 대입합니다.
  • MOV R1, R0: R0에 있는 값(2)을 R1으로 복사합니다.
  • MSR CPSR_c, R0: R0의 값을 상태 레지스터(CPSR)의 제어 필드에 씁니다. 주로 프로세서의 모드(User, Supervisor 등)를 변경할 때 사용합니다.

2. 비트 연산 및 시프트 (LSL, LSR, ASR, ROR)

ARM 어셈블리의 특징은 명령과 동시에 비트 이동(Shift)이 가능하다는 점입니다.

  • MOV R0, R0, LSL #1: R0를 왼쪽으로 1비트 밉니다 (값에 2를 곱하는 효과).
  • MOV R1, R1, LSR #1: R1을 오른쪽으로 1비트 밉니다 (2로 나누는 효과, 부호 비트 무시).
  • MOVS R2, R2, ASR #1: R2를 산술적 오른쪽 시프트합니다. S가 붙어 있어 연산 결과에 따라 플래그(Zero, Negative 등)를 업데이트합니다.
  • MOVMI R2, R2, ROR #1: 조건부 실행입니다. 이전 연산 결과가 마이너스(MI)일 때만 R2를 오른쪽으로 회전(Rotate) 시킵니다.

3. 논리 부정 및 하이라이트 줄 (MVN, LSR)

  • MVN R2, #0x0000000F: 비트 반전(NOT) 연산입니다. 0xF를 반전시킨 값을 R2에 넣습니다.
  • MOV R4, R3, LSR #1 (하이라이트 부분): R3 레지스터의 값을 오른쪽으로 1비트 밀어서(Logical Shift Right) 그 결과를 R4에 저장하라는 뜻입니다.

4. 레지스터 간 시프트량 결정

  • MOV R3, R3, LSL R4: R3를 왼쪽으로 밀되, 몇 칸 밀지를 숫자가 아닌 R4 레지스터에 들어있는 값만큼 결정합니다.

Program Status Register (PSR) : 프로그램 상태 레지스터 

ARM의 Program Status Register
- 1개의 CPSR(Current Program Status Register) - 상태 레지스터
- 5개의 SPSR(Saved Program Status Register) - 상태 레지스터

- PSR 레지스터의 정보

  Condition code flag
• ALU의 연산 결과 정보를 가지는 flag 정보를 가지고 있다.

- Control bits
• 프로세서를 제어하기 위한 비트로 구성되어 있다

 

Fast Inturrupt 모드  / Supervisor모드 (계속 변화함) 

PSR 레지스터 – control bits :프로세서의 모드, 동작 state 와 인터럽트를 제어

- I/F 비트
• IRQ(‘I’ 비트) 또는 FIQ(‘F’ 비트)를 disable(set) 또는 enable(clear)

 

- T 비트
• ARM Architecture xT 버전인 경우 Thumb state 임을 나타낸다.
• 상태를 나타낼 뿐 프로세서는 이 비트에 강제로 값을 write 할 수 없다.
• BX 명령에 의해서만 제어된다

 

- Mode bits
• ARM의 7 가지의 동작 모드를 나타낸다.

 

User모드 > 비특권모드 
exception(제외 모드)를 주면 특권모드로 다시 변경된다. 

1. 특권 모드 (Privileged Mode)

특권 모드는 자동차로 치면 '정비사 모드'와 같습니다. 시스템의 모든 자원에 접근할 수 있는 강력한 권한을 가집니다.

  • 권한 범위: 시스템 제어 레지스터(CPSR 등)를 직접 수정하거나, 하드웨어 설정을 바꿀 수 있습니다.
  • 해당 모드: 이미지에 나온 SVC, FIQ, IRQ, Abort, Undefined, System 모드가 여기에 속합니다.
  • 특징: 운영체제(OS) 커널이나 드라이버가 동작할 때 이 모드를 사용합니다.

2. 비특권 모드 (Non-privileged Mode)

비특권 모드는 '운전자 모드'입니다. 정해진 길로만 다닐 수 있고, 엔진 내부를 마음대로 건드릴 수 없습니다.

  • 권한 범위: 시스템에 치명적인 영향을 줄 수 있는 설정 변경이 금지됩니다.
  • 해당 모드: User 모드가 유일합니다.
  • 특징: 우리가 사용하는 일반 앱(카카오톡, 게임 등)이 동작하는 환경입니다. 만약 앱이 실수로 시스템을 망가뜨리려 해도, 비특권 모드이기 때문에 CPU가 이를 차단하여 전체 시스템을 보호합니다.

3. 모드 전환의 핵심: Exception (예외)

비특권(User)에서 특권 모드로 돌아가려면 반드시 'Exception(예외)'이 발생해야 합니다.

작성하신 코드의 흐름을 보면 이 원리가 명확히 보입니다:

  1. swi 0x80 실행: User 모드에서 "나 특권 권한이 필요한 일을 하고 싶어!"라고 CPU에 요청(Software Interrupt)을 보냅니다.
  2. Exception 발생: CPU가 이 요청을 받고 즉시 **SVC 모드(특권 모드)**로 변신합니다.
  3. 작업 수행: 특권 모드에서 필요한 시스템 작업을 처리한 후, 다시 User 모드로 내려옵니다.

swi = 소프트웨어 인터럽트 모드임 

1. SWI의 역할: "특권 모드로의 관문"

비특권 모드인 User 모드에서 실행 중인 프로그램은 하드웨어를 직접 제어할 수 없습니다. 이때 하드웨어 제어가 필요하면 SWI 명령어를 실행합니다.

  • 동작: SWI 명령어가 실행되면 CPU는 즉시 SVC(Supervisor) 모드로 전환됩니다.
  • 권한 상승: SVC 모드는 특권 모드이므로, 이때부터 운영체제(OS)가 시스템 자원을 관리하거나 장치를 제어할 수 있게 됩니다.

2. 코드에서의 흐름 

  1. swi 0x80: 프로그램이 실행되다가 이 줄을 만나면 "소프트웨어 인터럽트"가 발생합니다.
  2. 벡터 테이블 점프: CPU는 사전에 약속된 주소(벡터 테이블)에 있는 B SWI 명령을 찾아 실행합니다.
  3. SWI: 레이블로 이동: 코드 하단에 정의하신 SWI: 레이블 위치로 점프하여 그 아래의 명령들(모드 변경 등)을 수행하게 됩니다.

3. 왜 사용하나요?

일반 사용자 앱이 마음대로 시스템 설정을 바꾸면 컴퓨터가 망가질 수 있습니다. 그래서 "중요한 일(특권 작업)은 반드시 SWI를 통해 운영체제에게 허락을 받고 수행해라"라는 규칙을 만든 것입니다.

를 현대 컴퓨터 공학에서는 시스템 콜(System Call)이라고 부릅니다.

어셈블리어(assembly language)

카테고리 없음  ·  2026. 1. 13. 16:04

어셈블리어(Assembly Language)는 기계어와 일대일로 대응되는 프로그래밍의 저급 언어(Low-level Language)입니다.

컴퓨터는 본래 '전류가 흐르는 상태(1)'와 '흐르지 않는 상태(0)'만 이해합니다. 이 이진수로 이루어진 기계어는 컴퓨터가 즉각 실행할 수 있다는 장점 외에는 인간의 관점에서 가독성과 효율성이 매우 떨어집니다. 이러한 기계어의 한계를 보완하기 위해,

복잡한 이진수 명령어를 인간이 이해할 수 있는 단어(Mnemonic)로 1:1 매칭하여 만든 언어가 바로 어셈블리어입니다.

저급 언어만의 독보적인 가치

Python이나 Java 같은 고급 언어는 인간의 언어와 유사해 생산성이 높지만, 기계어로 번역(Compile)하는 과정이 복잡하고 자원 소모가 큽니다. 반면, 컴퓨터의 구조에 밀착된 저급 언어인 어셈블리어는 다음과 같은 강력한 특징을 가집니다.

  • 압도적인 실행 속도: 복잡한 변환 과정 없이 최소한의 명령으로 실행되기에 시스템 성능을 극한까지 끌어올릴 수 있습니다.
  • 하드웨어 정밀 제어: CPU의 레지스터와 메모리 주소에 직접 접근하여 하드웨어를 완벽하게 통제합니다.

왜 현대에도 어셈블리어를 배워야 하는가?

배우기 어렵고 유지보수가 까다롭다는 이유로 현대 소프트웨어 개발에서 주류는 아니지만, 특정 분야에서는 여전히 대체 불가능한 필수 지식입니다.

  1. 시스템의 심장부를 다루는 기술: 임베디드 시스템, 운영체제(OS) 커널 프로그래밍, 장치 드라이버 개발에는 어셈블리 지식이 필수적입니다.
  2. 최후의 디버깅 수단: 소스 코드가 없는 라이브 서비스 환경이나 보안 사고 분석 시, 실행 파일의 기계어를 역으로 분석(Reverse Engineering)하여 문제의 본질을 파악하게 해줍니다.
  3. 컴퓨터 구조의 깊은 이해: 레지스터의 활용, 스택(Stack)의 동작 원리, 메모리 관리 체계 등 어셈블리를 배우는 과정에서 컴퓨터 과학의 근간을 체득할 수 있습니다.

결론: 해석할 수 있는 능력이 곧 실력이다

모든 개발자가 어셈블리어로 직접 코딩할 필요는 없습니다. 하지만 기술적 한계에 부딪혔을 때 구글링을 통해 코드를 해석하고 시스템의 동작 원리를 이해할 수 있는 능력은, 평범한 개발자와 숙련된 엔지니어를 가르는 한 끗 차이가 될 것입니다.

 

assembly language

카테고리 없음  ·  2026. 1. 13. 16:00

         /* 프로그램 시작 */
        .text              /* 프로그램 정의 */
        .arm               /* ARM 프로세서 */
RESET:  B       MAIN        /* MAIN으로 점프 */
B UNDI
B SWI
B PA
B DA
B RES
B IRQ
B FIQ

/* 메인 프로그램 */
        .org    0x100
MAIN:   MOV     R0,#2          /* R0 <- 2 */
        MOV     R1,R0          /* R1 <- R0 */

MOV R0, #3
swi 0x80


SWI: MOV R0, #4
        mov     r0, #0x00000011  /* fiq */
        msr     cpsr_c, r0
UNDI: mov r0, #0x00000012 /* irq */
msr cpsr_c, r0
PA: mov r0, #0x00000013 /* svc */
msr cpsr_c, r0
DA: mov r0, #0x00000017 /* abort */
msr cpsr_c, r0
RES: mov r0, #0x0000001b /* Undefined */
msr cpsr_c, r0
IRQ: mov r0, #0x0000001f /* System */
msr cpsr_c, r0
FIQ: mov r0, #0x00000010 /* user */
msr cpsr_c, r0

mov r0, #0x00000013 /* svc */
msr cpsr_c, r0

swi 0x80

        MOV     R0,R0,LSL #1   /* R0 <- R0*2 */
        MOV     R1,R1,LSR #1   /* R1 <- R1/2 */
        MVN     R2,#0xF        /* R2 <- FFFFFFF0(-16) */
        MOVS    R2,R2,ASR #1   /* R2 <- R2/2 */
        MOVMI   R2,R2,ROR #1   /* N=1이면 로테이트 */
        
        MOV     R3,#4          /* R3 <- 4 */
        MOV     R4,R3,LSR #1   /* R4 <- 2 */
        MOV     R3,R3,LSL R4   /* R3 <- R3*16 */
        MOV     R3,R3,LSR R4   /* R3 <- R3/16 */
        MVN     R5,R3          /* R5 <- NOT R3 */
        MOV     R4,R4,LSR #1   /* R4(1) <- R4/2 */
        MOVS    R5,R5,ASR R4   /* R5 <- R5/16  */
        MOVCS   R5,R5,ROR R4
        MOV     R5,R5,RRX
        .end

Wikidocs - Ai 딥 러닝 파이토치 교과서 - 입문부터 LLM

카테고리 없음  ·  2026. 1. 13. 15:09

https://wikidocs.net/217237

Computer Architecture: Reading the Blueprint of the Digital World

카테고리 없음  ·  2026. 1. 13. 14:41

Introduction

Computers exist everywhere in modern society—from the smartphones we use daily to massive data centers powering the global internet. Yet, understanding how these machines fundamentally operate is far from simple.

This is precisely where Computer Architecture becomes essential.

Computer architecture is the discipline that defines how a computer system is designed and organized. It determines how hardware and software interact to execute tasks. In this post, we explore the core concepts of computer architecture—from foundational principles and major models to performance optimization techniques and future trends—so you can better understand the hidden blueprint of the digital world.


1. Fundamental Concepts of Computer Architecture

1.1 Definition and Importance

Computer architecture is the study of how computer systems are structured and how they operate. It encompasses components such as the CPU, memory, and I/O devices, as well as the interactions among them. Understanding computer architecture is central to computer science and engineering, as it directly influences system performance, efficiency, and scalability.

1.2 Computer Architecture vs. Computer Organization

  • Computer Architecture: Refers to characteristics visible to programmers—features that directly affect the logical execution of programs. Examples include the instruction set, data type bit widths, I/O mechanisms, and memory addressing modes.
  • Computer Organization: Describes how those architectural features are actually implemented in hardware. It includes control signals, interfaces between the computer and peripherals, and memory technologies—details invisible to programmers.

2. Core Components of a Computer System

A computer consists of hardware and system software, each indispensable for efficient operation.

2.1 Central Processing Unit (CPU)

The CPU is the “brain” of the computer, responsible for executing instructions and performing computations.

  • ALU (Arithmetic Logic Unit): Performs arithmetic and logical operations.
  • Control Unit: Manages system resources and coordinates operations according to instructions.
  • Registers: Small, extremely fast storage locations inside the CPU for temporary data.

2.2 Memory Hierarchy

Data storage is organized hierarchically by speed and capacity.

  • Registers: The fastest and smallest storage, inside the CPU.
  • Cache Memory: Located close to the CPU; stores frequently used data to improve performance.
  • Main Memory (RAM): Temporary storage for running programs and data.
  • Secondary Storage: Permanent storage such as HDDs and SSDs.

2.3 Input/Output Devices

These provide the interface between the computer and the external world (e.g., keyboard, mouse, monitor, printer).

2.4 Bus

A communication mechanism connecting internal CPU components and major system elements such as the CPU, memory, and I/O devices.


3. Major Computer Architecture Models

3.1 Von Neumann Architecture

The foundational structure used in most modern computers.

  • Concept and Characteristics: Instructions and data are stored together in a single memory. The CPU executes one instruction at a time in a Fetch → Decode → Execute → Store cycle. By simply changing the program, the same machine can perform entirely different tasks.
  • Advantages and Limitations: This design is cost-effective and flexible, but storing instructions and data in the same memory leads to a bottleneck on the memory bus—known as the Von Neumann bottleneck.

3.2 Harvard Architecture

Developed to overcome the limitations of the Von Neumann model.

  • Concept and Characteristics: Instructions and data are stored in separate memories, allowing parallel access. The CPU can fetch instructions and data simultaneously, improving speed.
  • Advantages: Reduces memory bottlenecks and provides an optimal environment for pipelining.

3.3 Modern Implementations

Most contemporary CPUs adopt a hybrid approach, such as separating instruction and data caches, incorporating Harvard-style ideas while maintaining Von Neumann compatibility.


4. Instruction Set Architecture (ISA)

4.1 Definition and Role

ISA defines the set of instructions a computer can execute. It is the interface between hardware and software, bridging programming languages and physical processors.

4.2 CISC (Complex Instruction Set Computer)

  • Characteristics: Supports complex, variable-length instructions capable of performing multiple operations at once. This reduces program size and simplifies programming, but increases decoding complexity and may impact performance.
  • Example: Intel and AMD’s x86 architecture.

4.3 RISC (Reduced Instruction Set Computer)

  • Characteristics: Uses simple, fixed-length instructions that execute quickly and efficiently. Designed for rapid execution and effective pipelining. It may require more registers and exhibit lower hardware compatibility.
  • Example: ARM architecture.

4.4 CISC vs. RISC

RISC focuses on executing simple instructions quickly with high energy efficiency, while CISC emphasizes powerful, multi-step instructions. Each reflects a distinct design philosophy.


5. Performance Enhancement Techniques

5.1 Pipelining

Divides instruction execution into stages, allowing multiple instructions to be processed simultaneously in different stages. This maximizes throughput and reduces idle time.

5.2 Parallel Processing and Multicore Systems

Using multiple CPUs or multiple cores within a CPU to handle tasks concurrently, dramatically improving performance.

5.3 Caching and Memory Hierarchy Optimization

Placing cache between the processor and main memory reduces access latency and improves overall system speed.

5.4 Prediction

Techniques such as branch prediction anticipate upcoming instructions to minimize stalls.

5.5 Out-of-Order Execution

Allows the processor to dynamically reorder independent instructions, improving utilization and performance even when program order is not strictly followed.


6. Future Trends in Computer Architecture

6.1 AI and Machine Learning Accelerators

Specialized hardware for AI workloads is rapidly emerging. Platforms such as NVIDIA’s Rubin are designed for data center optimization and AI acceleration, while AMD is also developing AI-focused processors.

6.2 Processing-in-Memory (PIM) and Neuromorphic Computing

  • PIM: Integrates computation within memory to reduce data movement, enabling low-power, high-performance systems.
  • Neuromorphic Computing: Mimics the structure of the human brain, integrating computation, memory, and communication through networks of artificial neurons.

6.3 Quantum Computing

Uses quantum mechanical principles to surpass the limitations of classical computing, representing a major future pillar of computing architecture.

6.4 Hybrid and Heterogeneous Architectures

Combines diverse processors—CPU, GPU, FPGA—within a single system to optimize different workloads and maximize performance and efficiency.


Conclusion

Computer architecture is more than a hardware blueprint—it is the foundation enabling every technological innovation of the digital age. From the contrast between Von Neumann and Harvard architectures to the philosophical divide between CISC and RISC, and from pipelining to caching, these concepts define the power and efficiency of modern computers.

In the era of AI, big data, and IoT, computer architecture continues to evolve through AI accelerators, PIM, and neuromorphic computing. Understanding how computers work is not merely academic—it provides insight into the future of technology and empowers us to create the next wave of innovation.

 

Want to dive deeper and read the complete version for free?
You can find it here—I highly recommend it.
https://www.geeksforgeeks.org/computer-organization-architecture/computer-organization-and-architecture-tutorials/

AI) 컴퓨터와 구조 : 개발한 블로그 작성 자동화 봇으로 작성

카테고리 없음  ·  2026. 1. 13. 13:57

 

[user]: 컴퓨터와 구조에 대해 정리해줘
[blog_planner]: 컴퓨터와 구조: 디지털 세계의 설계도를 읽다

서론
컴퓨터는 현대 사회의 모든 곳에 존재하며, 우리가 매일 사용하는 스마트폰부터 복잡한 데이터 센터에 이르기까지 그 형태는 다양합니다. 하지만 이 모든 컴퓨터가 어떻게 작동하는지에 대한 근본적인 원리를 이해하는 것은 쉽지 않습니다.

 

바로 이 지점에서 컴퓨터 아키텍처(Computer Architecture)가 중요한 역할을 합니다.

컴퓨터 아키텍처는 컴퓨터 시스템의 설계와 구성 방식을 다루는 학문으로, 하드웨어와 소프트웨어가 어떻게 상호작용하여 작업을 수행하는지를 결정합니다. 이 블로그 포스트에서는 컴퓨터 아키텍처의 기본적인 개념부터 주요 유형, 성능 향상 기법, 그리고 미래 동향까지 심도 있게 탐구하여 디지털 세계의 숨겨진 설계도를 이해하는 데 도움을 드릴 것입니다.

1. 컴퓨터 아키텍처의 기본 개념
 1.1. 정의 및 중요성
컴퓨터 아키텍처는 컴퓨터 시스템의 구조와 동작 방식을 설계하는 학문입니다. 이는 CPU, 메모리, 입출력 장치 등의 구성 요소 및 이들 간의 상호 작용을 다룹니다. 컴퓨터 아키텍처를 이해하는 것은 컴퓨터 과학 및 공학 분야에서 핵심적인 역할을 하며, 시스템의 성능, 효율성, 확장성을 결 정하는 중요한 요소입니다.

1.2. 컴퓨터 아키텍처 vs. 컴퓨터 구성 (Computer Organization)
*   컴퓨터 아키텍처: 프로그래머가 바라보는 특성에 관한 것으로, 프로그램의 논리적인 실행에 직접적인 영향을 주는 특성을 일컫습니다. 명령어 집합(Instruction Set), 다양한 데이터 타입을 표현하는 데 사용되는 비트 수, I/O 메커니즘, 메모리 주소 지정 방식 등이 예시입니다.      
*   컴퓨터 구성: 컴퓨터 아키텍처에서 정의한 특성들을 실제로 어떻게 '구현'할 것인가에 관한 것입니다. 컨트롤 시그널, 컴퓨터와 주변 장치들 사이의 인터페이스, 메모리 기술 등 프로그래머에게는 보이지 않는 하드웨어 세부 사항들을 포함합니다.

2. 컴퓨터의 핵심 구성 요소
컴퓨터는 크게 하드웨어와 시스템 소프트웨어로 구성되며, 효율적인 동작을 위해 각 구성 요소가 필수적입니다.

2.1. 중앙 처리 장치 (CPU: Central Processing Unit)컴퓨터의 두뇌로서 모든 연산과 명령어 처리의 중심입니다.
*   산술 논리 장치 (ALU: Arithmetic Logic Unit): 덧셈, 뺄셈과 같은 산술 연산과 논리 연 산을 수행합니다.
*   제어 장치 (Control Unit):컴퓨터의 자원을 관리하고, 명령어에 따라 각 자원들의 동작 을 조정합니다.
*   레지스터 (Register): CPU 내에 존재하는 임시 저장장치로, 크기가 작지만 매우 빠릅니다.

2.2. 메모리 계층 구조 (Memory Hierarchy)
데이터를 저장하는 장치로, 속도와 용량에 따라 계층적으로 구성됩니다.


*   레지스터: CPU 내 가장 빠른 임시 저장 공간.

*   캐시 메모리 (Cache Memory): CPU에 가까울수록 빠르고 용량이 작으며, 자주 사용될 가능성이 높은 데이터를 저장하여 성능을 향상시킵니다.


*   주 기억 장치 (RAM: Random Access Memory): 임시 데이터 저장 공간으로, 컴퓨터가 작동 중인 프로그램의 데이터를 빠르게 읽고 쓸 수 있도록 돕습니다.


*   보조 기억 장치 (Secondary Storage): 데이터를 영구적으로 보관하는 공간 (예: HDD, SSD).

2.3. 입출력 장치 (I/O Devices)
컴퓨터와 외부 환경 사이의 인터페이스 역할을 합니다. (예: 키보드, 마우스, 모니터, 프린터)   


2.4. 버스 (Bus)
제어 장치, ALU, 레지스터와 같은 CPU 내부 구성 요소 간, 또는 CPU, 메모리, 입출력 장치 등 컴 퓨터의 주요 구성 요소 간의 통신 메커니즘입니다.

3. 주요 컴퓨터 아키텍처 유형


3.1. 폰 노이만 아키텍처 (Von Neumann Architecture)
오늘날 대부분의 컴퓨터에 적용되는 핵심적인 구조입니다.

* 개념 및 특징: 단일 저장장치(메모리)에 연산 수행과 관련된 일련의 명령어와 연산에 필 요한 데이터를 함께 수용하는 Computing Machine 모델입니다. CPU는 한 번에 하나의 명령어만 실 행 가능하며 ("Fetch -> Decode -> Execute -> Stored" 사이클), 프로그램만 교체하면 다른 프로 그램을 실행할 수 있어 범용성이 크게 향상됩니다.

* 장점 및 한계: 공용 메모리 사용으로 구현 비용이 저렴하지만, 명령어와 데이터를 하나의 메모리에 저장하므로 메모리 버스에서 병목 현상이 발생하여 성능 향상에 어려움이 있을 수 있습니다 (폰 노이만 병목).

 3.2. 하버드 아키텍처 (Harvard Architecture)
폰 노이만 구조의 문제점을 극복하기 위해 등장했습니다.
* 개념 및 특징:명령어와 데이터 메모리가 분리되어 병렬적으로 작업이 처리되도록 구현된 아키텍처입니다. CPU는 명령어와 데이터를 동시에 사용할 수 있어 속도가 더 빠를 수 있습니다. 
* 장점: 명령어와 데이터를 분리하여 메모리 병목 현상을 완화하고, 파이프라이닝 기술 사 용 시 최적의 환경을 제공하여 CPU를 효율적으로 활용할 수 있습니다.

3.3. 현대 컴퓨터에서의 적용
최신 CPU나 마이크로프로세서 대부분은 명령어/데이터 캐시를 분리하여 처리 속도를 높이는 방법 을 채용하는 등, 하버드 아키텍처의 아이디어를 활용한 하이브리드 접근 방식을 사용합니다.     

4. 명령어 집합 아키텍처 (ISA: Instruction Set Architecture)


4.1. ISA의 정의 및 역할
ISA는 컴퓨터가 이해하고 실행할 수 있는 명령어 집합을 정의하는 인터페이스입니다. CPU와 소프 트웨어 간의 상호 작용을 정의하며, 프로그래밍 언어와 하드웨어 사이의 다리 역할을 합니다.    

4.2. CISC (Complex Instruction Set Computer)
*   **특징 및 장단점:** 복잡하고 다양한 길이의 명령어를 지원하여 하나의 명령어로 여러 단계 를 수행할 수 있습니다. 이로 인해 메모리 사용을 절약하고 프로그래밍의 편리성을 제공하지만,  명령어 디코딩과 실행이 복잡해질 수 있어 성능 저하를 일으킬 수 있습니다.
*   예시: 인텔(Intel) 및 AMD의 x86 아키텍처가 대표적입니다.

4.3. RISC (Reduced Instruction Set Computer)
*   **특징 및 장단점:** 단순하고 고정된 길이의 명령어를 사용하여 디코딩과 실행이 빠르고 효 율적입니다. 각 명령어가 하나의 단계로 처리되는 것을 지향하여 빠른 명령어 실행과 효율적인 파이프라이닝이 가능합니다. 단점으로는 명령어가 하드웨어적으로 호환성이 낮고, 더 많은 레지스터가 필요할 수 있습니다.
*   **예시:** ARM 아키텍처가 대표적입니다.

4.4. CISC와 RISC 비교
RISC는 간단한 명령어를 빠르게 실행하는 방식이고, CISC는 복잡한 명령어를 한 번에 처리하는 방식입니다. RISC는 속도와 전력 효율을 중시하며, CISC는 기능과 연산의 복잡성을 중시하는 구조입니다.

5. 컴퓨터 아키텍처 성능 향상 기법


5.1. 파이프라이닝 (Pipelining)
명령어 실행을 여러 단계로 나누고 각 단계에서 서로 다른 명령어를 동시에 실행할 수 있도록 하 여 명령어 처리량을 최대화하는 기술입니다. 프로세서 내의 유휴 시간을 줄여 전반적인 효율성을 향상시킵니다.

 5.2. 병렬 처리 (Parallel Processing) 및 멀티코어
여러 CPU를 사용하거나 하나의 CPU 안에 여러 개의 코어(멀티코어)를 두어 여러 작업을 동시에 처리함으로써 컴퓨터의 성능을 최대화합니다.

5.3. 캐싱 (Caching) 및 메모리 계층 구조 최적화
프로세서와 주기억 장치 사이에 캐시를 두어 데이터 접근 속도를 높이고, 메모리를 계층적으로 사용하여 컴퓨터 성능을 향상시킵니다.

5.4. 예측 (Prediction)
컴퓨터가 다음에 실행할 명령어를 예측하여 처리 속도를 높이는 기술입니다.

5.5. 비순차적 실행 (Out-of-Order Execution)
프로세서가 실행 단위의 활용도를 최적화하기 위해 명령을 동적으로 재정렬하는 기술입니다. 프로그램에서 순차적 순서가 아니더라도 독립적인 명령을 병렬로 실행하여 성능을 향상시킬 수 있습니다.

6. 미래 컴퓨터 아키텍처 동향
기술의 발전과 함께 컴퓨터 아키텍처는 지속해서 발전하고 있습니다.


6.1. AI/머신러닝 가속기 (AI/ML Accelerators)
인공지능 및 기계 학습을 위한 특수한 하드웨어 가속기가 중요한 연구 분야로 부상하고 있습니다. 엔비디아의 루빈(Rubin) 플랫폼과 같은 차세대 AI 플랫폼은 데이터센터 최적화를 위해 설계되며 AI 가속에 중점을 둡니다. AMD 또한 AI 성능에 특화된 프로세서를 선보이고 있습니다.

6.2. PIM (Processing-in-Memory) 및 뉴로모픽 컴퓨팅 (Neuromorphic Computing)
*   PIM: 메모리 반도체 업체들이 가장 빠르게 진입 가능한 영역이자 미래 성장동력으로써,  저전력 고성능 시스템 구현을 위한 필수 아이템으로 전망됩니다.
*   **뉴로모픽 컴퓨팅:** 인간의 뇌를 닮은 구조로, 인공 뉴런으로 구성된 병렬 네트워크를 통해 연산, 메모리, 통신 기능을 융합한 형태입니다.

6.3. 양자 컴퓨팅 (Quantum Computing)
전통적인 컴퓨터의 한계를 넘어서는 양자역학적 원리를 활용하는 컴퓨팅 방식으로, 미래 아키텍처의 한 축을 담당할 잠재력이 있습니다.

6.4. 하이브리드 및 이기종 아키텍처 (Hybrid and Heterogeneous Architectures)
다양한 종류의 프로세서(CPU, GPU, FPGA 등)를 하나의 시스템에 통합하여 특정 작업에 최적화된  하드웨어를 활용하는 방식으로, 전반적인 성능과 효율성을 극대화합니다.

결론
컴퓨터 아키텍처는 단순히 하드웨어의 설계도를 넘어, 디지털 시대의 모든 기술 혁신을 가능하게 하는 근본적인 토대입니다. 폰 노이만과 하버드 아키텍처의 비교부터 CISC와 RISC의 철학적 차이, 그리고 파이프라이닝과 캐싱과 같은 성능 향상 기법에 이르기까지, 이 모든 개념은 우리가 사용 하는 컴퓨터의 효율성과 강력함을 결정합니다. 인공지능, 빅데이터, IoT 등으로 대표되는 4차 산 업혁명 시대에 컴퓨터 아키텍처는 AI 가속기, PIM, 뉴로모픽 컴퓨팅 등 끊임없이 진화하며 새로운 패러다임을 제시하고 있습니다. 컴퓨터의 작동 원리를 이해하는 것은 단순한 지식을 넘어, 미래 기술의 흐름을 읽고 새로운 혁신을 만들어낼 수 있는 중요한 통찰력을 제공할 것입니다.