KOS Jaguar is a based on the hybrid kernel design using ring 0 for kernel and ring 3 for user mode. It's design is similar to Windows NT in many aspects. Check the Kernel Section below to get more details about the kernel design and implementation.
Our Kernel Development Interfaces will also be very similar to Windows NT. We will try to follows all and similar syntax and semantics as that of Windows kernel APIs. Our plans are also to have Linux emulation layer in Kernel so we can run the Linux Modules.
For user mode we are planning to implement POSIX sub system first, because I think it will be simpler to implement and will provide us lots of resources for our OS.
Following is the status of the development. This list might not get updated with every check in, but we will try to keep it updated with each major release.
1. Boot Loader
2. Memory Manager - Support flat 4 GB virtual address space, 2GB Kernel, 2GB User.
3. Process and threads - The kernel is designed to be multi-thread safe. Threads can preempt in Kernel.
4. Interrupts - IDT and interrupt assignment is done. Currently we are using PIC for interrupts, but soon will shift to APIC for MP.
5. IRQLs - We are using our interrupts priority levels much similar to Windows using PIC masking. See more details under kernel section.
6. DPC - Per processor DPC queues are ready. It is being used by Scheduler. The concept is similar to Bottom Half of Linux.
7. MP - Our implementation is mostly ready for MP, the only thing blocking us to go there is PIC. We will implement APIC handling module and start out MP.
8. Spinlock - Spinlocks are acquired at DISPATCH_LEVEL and higher. For a UP version we just raise the IRQL to DISPATH_LEVEL.
9. Wait Locks - Mutants, Semaphore, events and other kernel Objects which are based on DISPATCHER_HEADER.
10. Scheduler is Round robin, priority based scheduler - not yet fully implemented but works great.
11. Object manager is implemented to provide a central control place for all the resourced being used. Every resource in our OS is an Object like :- Process, Threads, Mutex, Semaphore, Shared Memory, device, driver etc. Object manager is also responsible for providing access to FS and devices. FS can also be mounted on some path using Object manager.
Except Boot Loader, I am using GCC and GAS for the compilation of the kernel. boot.S is assembled using NASM.
Under Linux variants we should be able to compile the sources as it is. Just comment out the GCCPREFIX from the main Makefile.
You will need to download binutils and gcc. The version I am using is gcc 3.4.1 and gas 2.15 and the follow these steps
$ cd binutils-2.15
$ ./configure --target=i386-jaguar-elf
$ make
$ make install
$ cd ../gcc-3.4.1
$ ./configure --target=i386-jaguar-elf
$ make
$ make install
For debugging I am currently using GDB with Bochs and Qemu. I have written some of the debugger extensions helpful for debugging KOS Jaguar. They are like !thread, !process, !idt, !irql etc...
I will release the here soon. If anyone need them right now, please contact me directly.
Please follow this link for further kernel Specific documents.
Work under progress.