우리 집에서 만든 CPU와 C 컴파일러로 Xv6 유닉스 계열 OS를 구동한 경험
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
DevOps
대상자
하드웨어-소프트웨어 통합, 임베디드 시스템, 저수준 프로그래밍에 관심 있는 학생 및 개발자.
핵심 요약
- GAIA CPU와 Ucc 컴파일러를 기반으로 Xv6 운영체제 포팅 성공
- 인터럽트, 가상 메모리, 캐시 버그 등의 난관을 Page Coloring 기법으로 해결
- 인터랙티브 앱(SL, Minesweeper, 2048) 및 레이 트레이싱 실행으로 교육적·기술적 성취 달성
- 자체 설계 ISA 기반 FPGA 구현 및 C89 컴파일러 개발 경험 제공
섹션별 세부 요약
1. 프로젝트 개요
- 직접 설계한 RISC ISA 기반 CPU(GAIA)와 자체 제작 C 컴파일러(Ucc)로 Xv6 포팅 시도
- 하드웨어 설계, 컴파일러 개발, OS 이식 모든 요소 직접 구현
- 인터럽트, 가상 메모리, 캐시 등 핵심 기능 설계에 도전
2. 기술적 난관과 해결
- Xv6 이식성 문제:
char
/int
크기 차이로 인한 포인터 연산 오류 →char
을 8비트로 강제 조정 - 캐시 알리아스 이슈: Page Coloring 기법 도입으로 해결
- 디버깅 도구: 시뮬레이터에 분해기, 상태 덤프 도입
3. 구현 과정
- HDL(Verilog/VHDL)로 CPU 설계 → Vivado/Quartus로 FPGA 구현
- Primitive Linker 및 디버그 도구 직접 개발
- OCaml 서브셋 컴파일러 → 레이 트레이싱 프로그램 실행까지 성공
4. 교육적 영향
- 하드웨어-소프트웨어 통합 경험 제공
- 알고리즘, 저수준 구조 이해 증진
- RISC-V ISA 채택, Linux 구동 등 후속 프로젝트 확장
결론
- Page Coloring과 자체 디버깅 도구 개발이 캐시 및 인터럽트 문제 해결의 핵심
- 자체 ISA 기반 FPGA 구현 및 C89 컴파일러 개발은 실무 시스템 설계에 직접적 적용 가능
- "직접 만드는 것만큼 배우는 것은 없다"는 교훈을 통해 하드웨어-소프트웨어 통합의 중요성 강조