Ghost Kernel

Multiprocessing works! 2014/10/13, 16:25:59

The kernel now supports multiple cores. This required some changes in the scheduling model and the use of locks for critical kernel sections; next will be some optimizations regarding these locking mechanisms to improve overall performance. Then I guess shared libraries will be the next major ToDo.

1 comment

ACPI, APIC & I/O APIC 2014/10/13, 16:00:00

Today I started implementing multiprocessor support for Ghost. I'm switching from the older 8259 PIC to the new APIC and its counterpart, the I/O APIC. This included writing some logic to read the ACPI tables and get the necessary information from there - bad luck by now if you don't have a computer with ACPI tables or an APIC. I'll have to check if a PIC fallback makes sense.

The BSP's APIC and its timer are already working fine and the I/O APIC setup information is stored. Next I'll configure the I/O APIC so that it lets keyboard/mouse interrupts through, once this is done theres only the wonderful step of making the entire kernel reentrancy-safe left to actually get multiprocessor support. That's gonna be interesting!


Capri & some eye candy 2014/09/29, 16:00:00

Quite some stuff happened in the last month. My development mostly focused on Capri, the build tool used for Ghost (will soon create a subpage here to allow everyone to use it). As it basically has all the features that you would want from a simple script language, the decision was made to publish it as a multi-purpose scripting language, not only as a build tool. More info comes soon.

I rewrote some parts of the window manager, that gives much better performance now. Each windows has its own buffer now, and may request when it needs to be repainted. The log output was reduced and seperated in debug, info and error levels. This makes booting even faster and less verbose, except you need the information. The text rendering was also cleant up a little, and I wrote the first usable text component:

Once the basic components like buttons, combo-boxes, scrollbars and more are implemented, I'll write a UI programming interface to allow programs to create their own interaces. Stay tuned!


First window manager attempts 2014/08/25, 16:00:00

Lately I've been reworking the input & windowing system. A bug that caused the PS/2 driver to send wrong mouse coordinates in movement messages when overflow packets were received is also fixed.

Mouse input is now dispatched into different types of events which then are dispatched and can be handled by the affected components (by now only from within the window manager itself). Currently there are some windows implemented which handle drag events and thereby allow resizing/moving:

The next steps regarding the window manager will be creating an API, so programs can create, manipulate components and draw on the screen.

1 comment

VFS uses shared memory 2014/08/20, 15:51:25

The virtual filesystem is a central application that handles any file-related requests from other applications. It registers itself at the port distributor using the name "vfs".

Absolute paths to files on any device are formatted in the way deviceIdentifier://path/to/file. I decided for this style because I neither like the idea of mountpoints, nor the drive-letter stuff that Windows does. This makes it very clear which device you access using an absolute path, like cdrom0://docs/hello.txt would lead you a file which is then loaded by the VFS by for example contacting the responsible ATA driver. Currently there is an implementation for reading files from the ramdisk, using "ramdisk" as the device identifier.

Data was previously transferred using streams, but now is implemented via shared memory. This allows much higher transfer rates and better performance in general. Detailed information will be added to the documentation pages.