I am glad to announce you that i finaly managed to evolve my os kernel to an (almost) true MicroKernel in freebasic (yes yes):
* Now there is a interface API that allow the user process to handle interrupts. they tell the kernel the address of the method to call. then they should wait for an event.
* When an user handled interrupt occurs, the kernel put the request to a queue for that irq number. it will wake the owner thread up if it was waiting, (else it will left the request to the queue, and will be dequeued when the thread will be "waiting")
* When the kernel wakes the thread up, it pass the general registers to the stack of the thread, to pass them as function parameters, and changes the eip of the thread , so the method will run in the next schedule
* the user process can then do his job , and eventually modify the value of his stack (the kernel will then copy them to the "caller" thread, so he can receive returns value)
* there is also a concept of "user mode device" wich are like the interrupt handler: the thread says the kernel to create a "device" and give it an name and a descriptor (an integer wich is mainingfull only for that thread). he also give to the kernel the address of the method to call when an invoke on that device is done.
* when a process want to comunicate with the device driver, it first ask the kernel to find descriptor of the device (using its name). then it can ask the kernel to invoke the device driver by giving it the descriptor and the parameters.
* the kernel will then make the caller "waiting for reply" and wake up the device thread at the correct address
with that two concepts i managed to implement:
* user mode GUI server: it exposes it services by handling an interrupt number
* user mode driver for the keyboard and the mouse (in the GUI Server, there is 2 thread that handle the interrupt 0x20 and 0x2C to get signals from the keyboard and the mouse)
* user mode driver for the hard drive: it exposes it services using the user mode device driver interface
* user mode VFS and FAT file system: it exposes it services trought another interrupt
* Note : the kernel also provide a mechanism for the called process to map memory from/to the caller into/From his address space, in this way it can easyly copy strings (to get a button text, or a file name to open), map a buffer to the client (so he can draw on it), copy data to the client (when FileRead is called by example)
* To launch a program, the process should first load the executable into his memory, then call the kernel to create a new process using that address (the kernel will then copy it to this address space, and create a new process from it)
* i cleaned them the kernel code to remove everyting about the gui, the devices drivers, the virtual file system (and the fat file system implementation)
* the only things that remains are : the GDT initialization, the IDT initialisation, the Interrupt management , the thread management and scheduling
* the hard disk , the virtual system, and the init process are loaded by grub , and the kernel will use that to create the first processes
* to enter in graphic mode, i prepared an embedded module who is moved into the lower memory, and the kernel will use it to jump into realmode to initialize the graphic mode; this is almos the only execption to the "microkernel" structure i thing
Note: Everything is done using FreeBasic, i used my previous OS as base and made it evolved little to little to achive this. i shoud thank the creator of the Frost OS (wich is also in freebasic) from wich i took the Virtual memory management
the sources codes are on github at https://github.com/stephaneweg/onyx-kernel
New MicroKernel in FreeBasic
-
- Member
- Posts: 425
- Joined: Tue Apr 03, 2018 2:44 am
Re: New MicroKernel in FreeBasic
Documentation looks a bit sparse, so I'll start you off with some potential FAQ entries. (Genuine questions):trolly wrote:I am glad to announce you that i finaly managed to evolve my os kernel to an (almost) true MicroKernel in freebasic (yes yes):
Why FreeBASIC?
Does it confer any advantages over C/C++?
What did you find easier or more difficult compared to more traditional system implementation languages?
Re: New MicroKernel in FreeBasic
I second the question of "Why FreeBasic?" From what I've seen, FreeBasic is just C with a new syntax. But I haven't used it in years so...thewrongchristian wrote:Documentation looks a bit sparse, so I'll start you off with some potential FAQ entries. (Genuine questions):trolly wrote:I am glad to announce you that i finaly managed to evolve my os kernel to an (almost) true MicroKernel in freebasic (yes yes):
Why FreeBASIC?
Does it confer any advantages over C/C++?
What did you find easier or more difficult compared to more traditional system implementation languages?
-
- Posts: 9
- Joined: Wed Aug 05, 2020 3:38 pm
Re: New MicroKernel in FreeBasic
I never expected to see BASIC render anything that's not squares and lines in 16 colors. Good work!
- Combuster
- Member
- Posts: 9301
- Joined: Wed Oct 18, 2006 3:45 am
- Libera.chat IRC: [com]buster
- Location: On the balcony, where I can actually keep 1½m distance
- Contact:
Re: New MicroKernel in FreeBasic
It's the opposite: FreeBasic is based on quickbasic (and can actually compile quickbasic with the appropriate command line flags) with the addition of pointer types, so you still get memory safety with native strings and bounds-checked arrays when you write normal BASIC code. These features obviously don't come for free, so you end up using raw pointers initially in a "c-style" kernel until at least the point where you have a working memory allocator. So of course in every FreeBasic kernel project you are going to see the awkward version of the language first, before you get to the point where you can support the standard library and go back to idiomatic code.Ethin wrote:I second the question of "Why FreeBasic?" From what I've seen, FreeBasic is just C with a new syntax. But I haven't used it in years so...
Re: New MicroKernel in FreeBasic
Oh, I didn't know that. I thought it was something like PureBASIC, which is essentially C with a bloated standard library and an almost non-existent community.
Re: New MicroKernel in FreeBasic
Just because i like this language, i learned programing with QBASIC, in the past i did somme gui with it (look by example at http://q-step.theguiblog.com)thewrongchristian wrote:Why FreeBASIC?
The toolchain was also easy to set-up in windows (it is included in the github repository)
i use also FASM for the asm part (the mutliboot header ,and the interrupts stubs)
BTW i am a c# developer, and in the past i already made a kernel in ASM and another in C .
The next step would be to port the FreeBasic Compiler to my os, but for that i have to port GCC, GAS, LD, etc....
i already ported FASM to my os