이것은 내가 전에 해본 적이없는 것들로 놀리는 작은 취미 OS입니다. 기능적, 유용, 안전 또는 신뢰할 수있는 것은 아닙니다. 구현하는 것이 거의 재미 있어야합니다.
내가하고있는 최신 것들을보고 싶다면이 저장소의 dev Branch를 확인하십시오. 일반적으로 master 컴파일하고 실행해야합니다.
librs 에서 시작하십시오 (이 프로젝트의 LIBC와 동일).
user/src/main.rs 예제로 사용자 공간 프로그램을 참조하십시오.cargo xbuild --target target.json 사용하여 사용자 공간 프로그램을 컴파일하십시오페이징
memory::paging::map_regionIPC에 전달되는 제로 카피 메시지. 메시지를 보내려면
나는 프로세스가 전혀 없다는 아이디어를 가지고 놀고 있습니다.
현재 1500 LOC가 약간 넘습니다 (주석 + 공백 + 종속성 포함). 나쁘지 않다!
커널 자체는 Kthreads와 같은 것을 사용하기보다는 연속 기반입니다. 첫 번째 패스에서 나는 단지 일을 작동시키고 있습니다. 나중에 돌아가서 효율적으로 만들 수 있습니다.
커널 스페이스 또는 사용자 공간에서 타이머 기반 선점은 없지만 타이머가 작동하여 타이머가 작동 할 수 있습니다). 잠금 장치, 사용자 공간에서 멀티 스레딩이 없습니다. 모든 프로세스는 단일 스레드 및 연속 기반입니다. 각 Continuation 순서, 오류 또는 아무것도 실행될 추가 연속 세트를 반환 할 수 있습니다. 연속화는 또한 I/O 또는 다른 프로세스 종료와 같은 이벤트를 기다릴 수 있습니다.
단일 주소 공간. 모든 것은 같은 주소 공간에 살고 있습니다. 페이지 테이블 입력 비트는 일부 연속을 위해 주소 공간의 특정 부분을 비활성화하는 데 사용됩니다.
동적 메모리 할당을위한 작은 커널 힙.
물리적 프레임 할당을위한 버디 할당.
가상 주소 우주 지역에 대한 버디 할당 자.
메모리 영역과 같은 시스템의 리소스 액세스를 관리하기위한 간단한 기능 시스템.
Usermode 및 뒤로 전환.
syscall 및 sysret 지침을 통해 시스템 호출.
위치 독립적 인 ELF 바이너리를 사용자 모드 작업으로로드하고 실행하고 SYSCALL을 통해 종료합니다.
이제 대부분 기능하는 기본 커널이 있으므로 물건을 가지고 놀 수 있습니다!
녹슬고 밤마다
rustc 1.45.0-nightly (99cb9ccb9 2020-05-11) llvm-tools-preview rustup component add llvm-tools-preview
화물을 통한 cargo xbuild 및 cargo bootimage cargo install cargo-xbuild bootimage
build-essentials 및 표준 Utils : gcc , make , ld , objcopy , dd
qemu 실행
구축 및 실행
$ cd os2/user
$ cargo xbuild --target x86_64-unknown-elf.json --release
$ cd ../kernel
$ bootimage run bootimage 선택적으로 전달 될 수 있습니다 --release 최적화 된 빌드의 경우 RELEASE.