regx64

트랜지스터부터
컴파일러까지.

컴퓨터가 실제로 어떻게 돌아가는지,
아래층부터 하나씩 직접 만들어 보며 배우고 있습니다.

아래층부터 보기

컴퓨팅 스택

다섯 개의 층.
열세 개의 프로젝트.

서로 다른 프로젝트처럼 보이지만, 모두 한 대의 컴퓨터를 위아래로 가로지릅니다. 위 모형의 층과 같은 색입니다.

  1. L5 응용 Percentagemusic.playerMUXIC.jsKSCAliner-notes기지국chespediaboj-cli
  2. L4 언어 Cotton
  3. L3 운영체제 Hobby OSSqimp
  4. L2 보안 KDAA
  5. L1 컴퓨터 구조 시스톨릭 배열

L1 · 컴퓨터 구조

폰 노이만 병목과 시스톨릭 배열

아두이노 네 대로
만든 행렬 곱셈기.

아두이노 나노 4대로 2×2 시스톨릭 배열을 만들고, 폰 노이만식 순차 처리와 같은 행렬곱을 돌려 비교했습니다. PE끼리는 비트뱅잉으로 통신하고, 처리 시간과 데이터 이동 횟수를 쟀습니다.

프로세서
ATmega328P × 5
클럭
16 MHz
배열
2 × 2, 출력 고정형(OS)
연결
GPIO 비트뱅잉
클럭 반주기
50 µs
스큐
4,000 µs
게시
Zenodo, 2026
  1. 행렬 A · B2×K · K×2
  2. PE(0,0) 주입마스터
  3. 가로 · 세로 전달단계당 6회 이동
  4. 스큐 대기4,000 µs
  5. MAC부분합 누산
  6. C2×2

실험 결과 · 5회 반복 측정

이동은 25% 줄었습니다.
그런데 300배 느려졌습니다.

25%
더 적은 데이터 이동. 격자 6K회, 단일 보드 8K회.
295–326×
격자가 단일 보드보다 느렸던 정도.
417×
이동 한 번의 비용 차이. 3.23 µs 대 1,346.9 µs.
1.0%
처리 시간 중 실제 계산에 쓰인 비율.
K가 1 늘 때 늘어나는 8,081.1 µs는 어디에 쓰였나
  • 보드 간 통신4,000 µs · 49.5%
  • 스큐 대기4,000 µs · 49.5%
  • 연산 등81 µs · 1.0%

데이터 재사용은 이론대로 일어났지만, PE 사이 전달이 칩 내부 배선이 아니라 보드 사이 핀 통신이 되자 이동 한 번이 약 417배 비싸졌습니다. PE를 왜 한 칩 안에 모아야 하는지를 거꾸로 보여 준 결과입니다.

L2 · 보안

KDAA

타건음만 듣고
한글을 읽을 수 있을까.

키보드 소리로 입력을 알아내는 음향 사이드채널 공격을 한글 두벌식 자판에 적용하는 팀 연구입니다. 영문과 달리 한글은 초성·중성·종성이 음절로 합쳐지는 규칙이 있어서, 분류기가 틀린 자모도 오토마타가 걸러 낼 수 있습니다. 저는 타건음 하나를 38개 기호로 분류하는 음향 프런트엔드(CNN)를 맡았습니다.

대상
두벌식
녹음
48 kHz · mono
입력
log-mel 64 × 48
분류
38개 (자모 33 + 특수키 5)
시나리오
근접 · 원거리 · 소음
배포 목표
ESP32-S3, int8
  1. 타건음 녹음48 kHz · 키로거 라벨
  2. 세그멘테이션onset · 100 ms
  3. log-mel64 × 48
  4. CNNtop-N · 38개 기호
  5. 오토마타 빔두벌식 조합
  6. 한글복원 문장

L3 · 운영체제

Hobby OS

부트섹터부터
VGA 드라이버까지.

x86-64 어셈블리로 만드는 운영체제입니다. 커널 로드, 32비트 보호 모드, 페이징, 64비트 롱 모드를 지나 지금은 freestanding C 커널에서 VGA 드라이버가 돌아갑니다. 테스트는 QEMU로 합니다.

부트섹터
512 B
페이지
2 MB, 항등 매핑
EFER
0x500
VGA 버퍼
0xB8000, 80×25
에뮬레이터
QEMU
  1. 부트섹터16-bit 리얼 모드
  2. 보호 모드32-bit
  3. 페이징2 MB 페이지
  4. 롱 모드64-bit
  5. C 커널kmain()
  6. VGA텍스트 모드

L4 · 언어

Cotton

마음에 드는 것만
골라 만드는 언어.

Rust, JavaScript, Python에서 좋았던 부분을 섞은 식 중심 언어입니다. 설계한 문법 전체를 실행하는 레퍼런스 인터프리터를 C++17로 만들었고, 다음은 바이트코드와 LLVM입니다.

구현
C++17, 4,134줄
외부 의존성
0개
구성
렉서 · 파서 · 인터프리터
예제
5개
다음
바이트코드 · LLVM
  1. 소스.cot
  2. 렉서토큰
  3. 파서AST
  4. 인터프리터트리 워킹
  5. 실행값

L5 · 응용

Percentage

쌓으면,
보입니다.

나무위키 같은 한국어 개방형 위키입니다. 문서는 직접 만든 위키 문법 PerMark로 쓰고, Next.js와 Supabase로 만들었습니다.

코드
TypeScript 7,471줄
PerMark
1,980줄
테스트
Vitest 약 200개
마이그레이션
7개
스택
Next.js · Supabase
  1. PerMark위키 문법
  2. 렉서토큰
  3. 파서트리
  4. 렌더러화면
  5. 문서Supabase

L5 · 응용

music.player

제가 들으려고
만드는 플레이어.

곡을 검색하면 YouTube에서 음원을 찾아 재생하는 개인용 뮤직 플레이어입니다. 인프라를 네 번 옮긴 끝에 지금은 Oracle Cloud 무료 VM 두 대에서 돌아갑니다.

커밋
18일간 49개
서버
VM 2대
상시 비용
$0
배포 구조 변경
4번
스택
Next.js 14 · Docker
  1. 검색iTunes Search API
  2. 매칭YouTube Data API
  3. 추출확장 → Companion
  4. 재생Range · IndexedDB

L5 · 응용

MUXIC.js

mp3를 받아 오는
라이브러리.

URL을 넣으면 이미 열린 mp3 오디오 스트림을 돌려주는 라이브러리입니다. music.player의 오디오 추출 계층으로 쓰려고, URL 해석과 실제 추출을 두 층으로 나눠 다시 설계했습니다.

소스
TypeScript 514줄
테스트
bun test 14개
추출 엔진
2개
빌드
0단계
라이선스
MIT
  1. URLyoutube.com/…
  2. resolver순수 함수
  3. { site, id }식별자
  4. engineytdlp-ffmpeg
  5. streamaudio/mpeg

L5 · 응용

KSCA

학생 논문에도
영구 주소를.

전국 청소년 컴퓨터 사이언스 학회용 웹 서비스입니다. Zenodo 같은 논문 아카이브에 영구 식별자, APA·BibTeX 인용, 버전 관리를 넣고, 게시판을 붙입니다. 지금 구현을 시작했습니다.

식별자
KSCA-YYYY-NNNNNN
인용
APA · BibTeX
자동 비공개
신고 3건
스택
Next.js · Supabase
상태
구현 중
  1. 업로드PDF · 초록
  2. 식별자 발급원자적 카운터
  3. 새 버전concept_id 유지
  4. 인용APA · BibTeX

더 만든 것들

작게 시작한 것들도
전부 스택 위에 있습니다.

  • L5 · 응용

    liner-notes

    인디 밴드 가사의 한 구절과 그 해석을 나누는 커뮤니티. 앨범 → 트랙 → 구절 순으로 데이터를 묶고, 가사 전문 검색을 붙였습니다.

    스택
    Next.js · Supabase
    검색
    Postgres tsvector
    데이터
    iTunes · lrclib
    GitHub
  • L5 · 응용

    기지국

    수능·평가원 국어 기출 지문을 원문 단위로 모아 연도·출처·분야로 찾아보는 아카이브. 지문마다 7자리 ID를 붙이는 체계를 따로 설계했습니다.

    수록
    평가원 지문 239개
    범위
    2011–2026
    ID
    26K1111 형식
    GitHub
  • L5 · 응용

    boj-cli

    백준 온라인 저지를 터미널에서 쓰는 도구. 문제를 받아 폴더와 템플릿을 만들고, 예제 입력으로 채점까지 돌립니다.

    구현
    Rust 1,016줄
    명령
    init · login · add · run · submit
    템플릿
    C · C++ · Java · JS · Python · Rust
    GitHub
  • L3 · 운영체제

    Sqimp

    QEMU를 명령줄 대신 창에서 다루는 GUI. 여러 시스템 에뮬레이션과 디스크 이미지 생성을 목표로 두 명이 함께 만들고 있고, 아직 릴리스 전입니다.

    스택
    Tauri · Next.js · Rust
    개발
    2인, 2024–2025
    상태
    UI 단계
    GitHub
  • L5 · 응용

    chespedia

    체스 규칙과 지식을 MDX 문서로 쌓는 사이트. 프런트는 Next.js, 서버 함수는 Vercel 위의 Rust로 시작했습니다.

    스택
    Next.js · MDX · Rust
    배포
    Vercel
    상태
    초기 단계
    GitHub

소개

아래층부터
직접 만들어 봅니다.

방정훈입니다. 컴퓨터공학을 공부하는 학생이고, 컴퓨터가 실제로 어떻게 돌아가는지 아래층부터 하나씩 만들어 보며 배우고 있습니다. CPU 구조, x86-64, 컴파일러, 하드웨어 보안에 관심이 있고, 회로이론과 미적분은 기초부터 따로 공부하는 중입니다.

  • 한국코드페어 해커톤 부문 본선 진출
  • 임베디드SW 경진대회 세종대학교 총장상
  • 부산광역시교육청 정보영재교육원 3년 과정
  • 같은 교육원 학업 우수상

x86-64 ASMCC++17RustTypeScriptNext.jsSupabaseArduinoKiCadQEMUDockerOracle Cloud