TL;DR

  • Jinn OS는 Rust로 처음부터 구축한 x86_64 선점형 마이크로커널로, 최소한의 커널 기능과 사용자 공간 실행을 지향함.
  • APIC 타이머 100Hz와 매 주기 작동하는 라운드로빈 스케줄러로 작업이 CPU를 독점하지 못하게 함.
  • 숨겨진 할당과 런타임상의 예기치 않은 동작을 피하고, 자원 획득을 명시적으로 처리하는 설계임.
  • 부팅, 인터럽트, 메모리, 키보드, 셸, IPC, 시스템 호출, VFS 등 핵심 기능이 구현돼 있으며 사용자 공간은 개발 중임.
  • 네트워크 스택과 Ext2/FAT32 드라이버는 계획 단계이며, 브라질 기술 커뮤니티에서 개발자와 운영체제 애호가의 기여를 찾고 있음.

Jinn OS

  • Jinn OS는 처음부터 구축한 최소형 선점형 x86_64 마이크로커널이며, Rust로 작성됨.
  • 자원을 낭비하는 추상화와 타협을 배제하는 설계임.

철학

  • Jinn OS의 설계는 세 가지 핵심 원칙을 기반으로 함.
  • 낭비 없는 선점: 커널은 작업이 CPU를 독점하도록 허용하지 않으며, APIC 타이머는 100Hz로 작동하고 스케줄러는 매 주기 실행됨.
  • 암묵성보다 명시성: 숨겨진 할당과 런타임상의 예기치 않은 동작이 없으며, 모든 자원 획득이 의도적이고 투명함.
  • 최소 커널, 최대 역량: 커널은 스케줄링, 프로세스 간 통신(IPC), 메모리, 시스템 호출(syscall)만 처리하고 나머지는 사용자 공간(Ring 3)에서 실행됨.

기능

  • 부트로더 Limine(BIOS + UEFI) — 완료
  • 프레임버퍼 텍스트 렌더러(사용자 지정 글꼴) — 완료
  • x86_64 IDT(48개 벡터) — 완료
  • 로컬 APIC + 타이머(100Hz) — 완료
  • 선점형 라운드로빈 스케줄러 — 완료
  • 물리 프레임 할당자(비트맵) — 완료
  • 4단계 페이징(PML4) — 완료
  • 자체 커널 힙(Bump + Free List) — 완료
  • PS/2 키보드 드라이버 — 완료
  • 대화형 셸 — 완료
  • IPC(락프리 메시지 큐) — 완료
  • 시스템 호출 인터페이스(10개 호출) — 완료
  • VFS + ramfs(/dev/) — 완료
  • 사용자 공간(Ring 3) — 진행 중
  • 네트워크 스택 — 계획됨
  • Ext2 / FAT32 드라이버 — 계획됨

아키텍처

  • 사용자 공간(Ring 3): 애플리케이션 A, 애플리케이션 B, 셸이 실행됨.
  • 시스템 호출 계층(syscall.rs): exit, write, read, yield, getpid, ipc_send, spawn 호출을 포함함.
  • IPC(ipc.rs): 락프리 메시지 큐로 구성됨.
  • 스케줄러(scheduler.rs): 선점형 라운드로빈 스케줄링과 우선순위를 관리함.
  • 메모리 관리자(memory/): 물리 할당자, PML4 페이징, 사용자 지정 힙을 포함함.
  • VFS(vfs/): ramfs와 devfs를 포함함.
  • 인터럽트 하위 시스템(interrupts/): IDT, 로컬 APIC, PS/2 키보드, 비활성화된 PIC로 구성됨.
  • 하드웨어 추상화: limine.rs, cpu.rs, vga.rs로 구성됨.

빌드 방법

사전 요구 사항

  • x86_64-unknown-none 타깃을 사용하는 Rust nightly와 -Zbuild-std를 지원하는 Cargo가 필요함.
  • Rust nightly 툴체인과 해당 타깃을 설치하고, rust-src 구성 요소를 추가해야 함.

빌드 및 ISO 생성

  • Jinn OS는 외부 C/C++ 도구에 의존하지 않고 기본 PowerShell 스크립트를 사용함.
  • scripts/build.ps1로 빌드하고 scripts/make_iso.ps1로 ISO를 생성함.
  • 생성된 ISO의 파일명은 jinn.iso이며, VirtualBox 또는 QEMU에서 부팅 가능함.

QEMU에서 실행

  • qemu-system-x86_64 -cdrom jinn.iso -m 128M -serial stdio 명령으로 QEMU에서 실행함.

셸 명령

  • 시스템이 시작되면 대화형 셸 프롬프트 jinn>에서 다음 명령을 사용할 수 있음.
  • help: 사용 가능한 명령 목록 표시
  • uname: 커널 이름과 버전 표시
  • meminfo: 물리 메모리 및 힙 통계 표시
  • clear: 화면 지우기

라이선스

  • MIT 라이선스이며, 자세한 내용은 LICENSE 파일에 있음.

연락 및 기여

  • 이 프로젝트는 브라질 기술 커뮤니티의 참여를 중요하게 여기며, 운영체제 개발자와 애호가의 기여를 찾고 있음.
  • 시작 방법은 CONTRIBUTING.md 파일에서 확인할 수 있음.