Rust로 만드는 OS, 기본 원리부터 가상 메모리까지!
AI/ML 개발자가 OS의 기본 원리를 이해하기 위해 Rust로 마이크로커널을 구축
AArch64 QEMU virt 환경에서 부팅, IPC, 선점형 스케줄링, 가상 메모리 지원
5부작 시리즈로 구성, 각 단계별 구현 과정을 상세히 설명
댓글에서는 IPC의 실제 사용 시 문제점과 큐(Queue)의 필요성에 대한 논의가 진행
Rust를 활용한 OS 개발의 장점
게시물에서는 Rust가 C 언어의 안전성 문제(Safety Issues)를 해결하고, 어셈블리 언어의 유지보수성 문제를 보완한다고 설명한다. 특히, Rust의 소유권 시스템(Ownership System)은 컴파일 타임에 메모리 관련 버그를 방지하며, `unsafe` 키워드를 통해 필요한 경우 저수준 제어를 가능하게 한다. 또한, `no_std` 환경에서 OS 개발에 필요한 다양한 크레이트(Crate)를 활용할 수 있다는 점을 강조한다.
마이크로커널 아키텍처와 IPC
게시물은 마이크로커널(Microkernel) 디자인의 핵심인 메시지 전달 IPC(Message-Passing IPC)를 설명한다. 이는 태스크(Task) 간의 통신을 위해 메모리를 직접 공유하는 대신, 고정 크기의 메시지를 라우터(Router)를 통해 전달하는 방식이다. 이러한 아키텍처는 데이터 격리(Data Isolation)를 강화하여 시스템 안정성을 높이지만, 메시지 전달 오버헤드로 인해 성능 저하를 초래할 수 있다.
선점형 스케줄링(Preemptive Scheduling) 구현
게시물은 인터럽트(Interrupt)를 활용한 선점형 스케줄링 구현을 다룬다. 이는 타이머 인터럽트(Timer Interrupt)를 통해 CPU를 강제로 다른 태스크로 전환하는 방식으로, 협력적 스케줄링(Cooperative Scheduling)의 단점을 보완한다. 문맥 전환(Context Switch) 과정에서 모든 레지스터를 저장하고 복원하는 작업이 필요하며, 이는 시스템 성능에 영향을 미칠 수 있다.
가상 메모리(Virtual Memory) 관리
게시물은 가상 메모리(Virtual Memory)의 핵심 개념인 페이지 테이블(Page Table)과 MMU(Memory Management Unit) 설정을 설명한다. 4단계 페이지 테이블을 구축하고 MMU를 구성하여 가상 주소를 물리 주소로 변환하는 과정을 보여준다. 이를 통해 각 프로세스는 독립된 메모리 공간을 가지며, 시스템의 안정성과 보안성을 확보할 수 있다.
커뮤니티의 IPC(Inter-Process Communication) 관련 논의
댓글에서는 IPC(Inter-Process Communication)의 실제 사용 시 버퍼링(Buffering) 부재로 인한 문제점을 지적하며, 큐(Queue)의 필요성을 강조한다. 특히, 데모 환경에서는 잘 작동하던 IPC가 실제 환경에서는 데이터 손실이나 성능 저하를 유발할 수 있다는 점을 언급한다. 이는 IPC 구현 시 고려해야 할 중요한 트레이드오프(Trade-offs)를 시사한다.