Rust로 작성된 Linux 호환 커널, moss-kernel의 등장!

by DD
3개월 전
조회수 16

Rust로 작성된 Linux 호환 커널(Linux-compatible kernel) moss-kernel이 등장하여, Aarch64 어셈블리어를 지원하며, Linux userspace 애플리케이션과의 이진 호환성(Binary Compatibility)을 제공한다.

비동기 커널 코어(Asynchronous Kernel Core), 모듈형 아키텍처(Modular Architecture)를 특징으로 하며, Arch Linux aarch64 userspace를 실행할 수 있다.

커뮤니티에서는 드라이버 부족 문제를 주요 과제로 지적하며, 향후 개발 방향에 대한 기대감을 표명한다.

비동기 프로그래밍(Asynchronous Programming) 기반 커널 설계

moss-kernel은 Rust의 async/await 모델을 커널 내에서 활용하여, 모든 시스템 콜(System Call)을 비동기 함수로 구현했다. 특히, sleep-able 함수에 `.await`를 적용하여 데드락(Deadlock) 발생 가능성을 줄였다. 또한, `.interruptable()` combinator를 통해 신호(Signal)에 의한 인터럽트(Interrupt) 처리를 지원하여, 비동기 I/O(Asynchronous I/O)의 효율성을 높였다.

메모리 관리(Memory Management) 및 아키텍처 지원

moss-kernel은 Aarch64 아키텍처를 완벽하게 지원하며, HAL(Hardware Abstraction Layer)을 통해 x86_64, RISC-V 등 다른 아키텍처로의 이식성을 확보했다. 메모리 관리 측면에서는 MMU(Memory Management Unit) 활성화 및 페이지 테이블(Page Table) 관리를 지원하며, Copy-on-Write(CoW) 페이지, 커널 및 유저스페이스 페이지 폴트(Page Fault) 관리, 커널 스택 오버플로우(Stack Overflow) 감지 기능을 제공한다.

Linux Userspace 호환성 확보

moss-kernel은 Arch Linux aarch64 userspace에서 동적으로 연결된 ELF 바이너리(ELF Binary)를 실행할 수 있도록 설계되었다. 현재 105개의 Linux 시스템 콜(System Call)을 구현했으며, fork(), execve(), clone() 등의 프로세스 라이프사이클(Process Lifecycle) 관리 기능을 제공한다. 또한, ptrace 지원을 통해 strace와 같은 디버깅 도구(Debugging Tool)를 사용할 수 있다.

드라이버(Driver) 및 파일 시스템(Filesystem) 지원

moss-kernel은 VFS(Virtual File System)를 통해 파일 시스템을 추상화하고, 비동기 I/O를 지원한다. Ramdisk, FAT32, Ext2/3/4, devfs, tmpfs, procfs 등 다양한 파일 시스템 드라이버를 제공하며, libkernel 라이브러리를 사용하여 아키텍처에 독립적인 로직 테스트를 지원한다. 향후에는 완전한 읽기/쓰기 기능을 갖춘 파일 시스템 드라이버 개발이 진행될 예정이다.

moss-kernel: Rust Linux-compatible kernel