JSIX 는 처음부터 구축하는 맞춤형 멀티 코어 X64 운영 체제입니다. 완료되거나 사용 가능하지는 않지만 (아래 상태 및 로드맵 섹션 참조) 현재 계획된 모든 주요 커널 기능은 이제 적어도 통과 가능한 수준으로 구현됩니다.
프로젝트의 설계 목표는 다음과 같습니다.
현대성 - 레거시 시스템을 설계하거나 모든 하드웨어에서 실행하는 데 관심이 없습니다. 내 목표는 64 개의 비트 아키텍처와 최신 상품 하드웨어입니다. 현재 Nehalem 또는 Newer CPU 및 UEFI 펌웨어가있는 X64 시스템을 의미합니다. (현재 필요한 CPU 기능은이 목록을 참조하십시오.) 결국 Aarch64 포트에서 작업하고 싶습니다.
모듈 식 - 마이크로 커널 방식으로 시스템의 대부분을 가능한 한 별도의 프로세스로 끌어 당기고 싶습니다. 이것의 하위 골은 이러한 마이크로 넬의 병목 현상이 현재 위치를 탐색하는 것입니다. 레거시 하드웨어를 피하면 기존의 마이크로 커널 문제에 의해 덜 쇠퇴하는 시스템을 설계 할 수 있는지 여부입니다.
탐사 - 저는 주로 재미있게 배우고 현대식 OS 개발을 탐구하기 위해이 일을하고 있습니다. 초기 기능 구현은 관련 하드웨어를 탐색 할 수 있도록 모듈 식 설계를 일시적으로 버릴 수 있습니다.
이름에 대한 메모 :이 커널은 원래 Popcorn이라는 이름을 지었지만 Popcorn Linux 프로젝트 가이 프로젝트와 동시에 시작된 커널을 개발하고 있음을 발견했습니다. 그래서 나는이 커널 JSIX (항상 Styled JSIX 또는 j6 , Never Capitalized)를 L4, XV6 및 나의 멋진 아내에게 경의로 바 꾸었습니다.
다음 주요 기능 영역은 JSIX 개발 대상입니다.
완료. 부트 로더는 커널 및 초기 사용자 공간 프로그램을로드하고 메모리 맵 및 EFI GOP 프레임 버퍼에 대한 필요한 커널 인수를 설정합니다. 가능한 미래 아이디어 :
가상 메모리 : 충분합니다. 커널은 전체 가상 메모리 공간을 나타내는 하나 이상의 vm_space 객체에 속할 수있는 매핑 된 영역을 나타내는 여러 종류의 vm_area 객체를 가진 가상 메모리를 관리합니다. (각 프로세스에는 vm_space 가 있으며 커널 자체도 있습니다.)
해야 할 일 :
물리적 페이지 할당 : 충분합니다. 현재 물리적 페이지 할당 자 구현은 부트 로더에 의해 정의 된대로 사용 가능한 메모리의 최신 영역을 나타내는 블록 그룹을 사용합니다. 각 블록에는 무료/중고 페이지를 나타내는 3 단계 비트 맵이 있습니다.
미래의 작업 :
충분한. 글로벌 스케줄러 객체는 코어 당 별도의 준비/차단 목록을 유지합니다. 코어는 주기적으로 작업 도둑질을 통해 부하의 균형을 유지하려고 시도합니다.
사용자 공간 작업은 다른 프로세스뿐만 아니라 스레드를 생성 할 수 있습니다.
SYSCALLS : 충분합니다. 사용자 공간 작업은 빠른 SYSCALL/SYSRET 지침을 통해 커널에 SYSCALL을 만들 수 있습니다. libj6 통해 만들어진 syscalls는 Callee와 발신자 모두 표준 SYSV ABI 기능 호출을 모두보고 있습니다. 구현은 구현 함수를 호출하기 전에 요청을 검증하고 기능을 확인하고 적절한 커널 객체 또는 핸들을 찾는 생성 된 래퍼 기능으로 래핑됩니다.
IPC : 작업, 최적화가 필요합니다. 현재 IPC 프리미티브는 다음과 같습니다.
JSIX는 Ninja 빌드 도구를 사용하고 configure 스크립트로 빌드 파일을 생성합니다. 이 빌드는 또한 맞춤형 도구 체인 Sysroot에 의존하며 JSIX-OS/Toolchain의 스크립트를 사용하여 다운로드하거나 구축 할 수 있습니다.
기타 빌드 종속성 :
configure 스크립트에는 일부 파이썬 종속성이 있습니다. PITHON 가상 환경에서는 pip 통해 설치할 수 있습니다. pip 를 통해 설치하면 ninja 도 설치됩니다.
Debian 11 (Bullseye) 시스템은 JSIX 저장소 루트에서 다음 명령을 실행하여 필요한 빌드 종속성으로 구성 할 수 있습니다.
sudo apt install clang lld nasm mtools python3-pip python3-venv
python3 -m venv ./venv
source venv/bin/activate
pip install -r requirements.txt
peru sync JSIX-OS/Toolchain으로 위에서 언급 한대로 도구 체인 Sysroot를 빌드 또는 다운로드 하고이 프로젝트의 루트에서 구축 된 도구 체인 디렉토리를 sysroot 로 Symlink.
# Example if both the toolchain and this project are cloned under ~/src
ln -s ~ /src/toolchain/toolchains/llvm-13 ~ /src/jsix/sysroot 도구 체인이 설정되면 ./configure 스크립트를 실행하면 (사용 가능한 옵션은 ./configure --help 참조)가 빌드 구성을 설정하고 닌자 ninja -C build (또는 빌드 디렉토리를 넣을 때는 실제로 빌드가 실행됩니다. qemu-system-x86_64 가 설치된 경우 qemu.sh 스크립트는 QEMU- -nographic 모드에서 jsix를 실행합니다.
나는 개인적으로 실제 Debian AMD64 Bullseye Machine 또는 Windows WSL Debian Bullseye 설치에서 이것을 실행합니다. 마일리지는 다른 설정 및 배포판에 따라 다를 수 있습니다.
JSIX에는 이제 다양한 자동 테스트를 실행하는 test_runner Userspace 프로그램이 있습니다. 기본 빌드에는 포함되어 있지 않지만 test.yml manifest를 사용하면 구축 될 것이며 test.sh 스크립트 또는 qemu.sh 스크립트로 실행할 수 있습니다.
./configure --manifest=assets/manifests/test.yml
if ./test.sh ; then echo " All tests passed! " ; else echo " Failed. " ; fi