Skip to content
Sukant Pal edited this page Jan 17, 2018 · 11 revisions

Silcos Kernel

The silcos kernel aims to build a platform for running highly modular and secure systems. Its design allows extensions and modules to be configured in a highly secure and controlled manner, going to the extent of building a in-kernel JIT-framework (in the future). It was and is designed for being compatible with the linux kernel from the user-space, and therefore, compatible with most linux-based applications. It’s main goal is to provide a robust and stable platform for building a operating system, and also giving a common application-framework for all OS software built on top it, therefore, a OS-independent software environment.

This documentation is for developers who have slight knowledge of system programming and the IA32/64 architectures. For in-depth explanation of these techniques refer to osdev.org because here we focus on what makes the kernel unique.

Composition

The kernel is composed of various modules which unify to provide executive services. The following modules are (built-in) required for a complete in-kernel environment -

KernelHost - This module initializes the kernel and links all other modules. It essentially hosts the kernel environment and provides the most basic services - memory management facilities. The whole kernel infrastructure is dependent on a reliable memory allocation system and care is taken to remove 99% bugs in it as they will easily take the whole system down. It is the largest module and is the only one to be implemented as a position-independent executable (other modules are shared libraries).

HAL - This module abstracts the underlying architectural differences on different machines. It allows other modules to use low-level services of hardware without compromising their platform-independent nature. It generally covers the area of processor-topology, inter-processor interrupts, symmetric multiprocessing & application processor bootup, etc. It was earlier a part of the Microkernel which was split into KernelHost, HAL & ExecutionManager.

ModuleFramework (com.silcos.circuit.mdfrwk.*) - This module provides basic software utilities like data-structures, Object, new & delete, memory heap and many other abstractions for kernel-applications.

ObjectManager (com.silcos.circuit.obmgr.*) - This module provides high-level object abstractions and organizes active-state objects into a hierarchy allowing them to be accessed by name & automatically destroy them, when no user-space handles exist towards them. It also helps user-space services to communicate through objects & their names.

ResourceManager (com.silcos.circuit.rsmgr.*) - This module is responsible for resource-tracking and allocation techniques like demand-paging, PFRA, page-level management, memory-caches, allocators above KPage & Slab, etc. It also manages the lifecycle of processes and gives various forms of IPC.

ExecutionManager (com.silcos.circuit.exemgr.*) - This module is responsible for high-level task management, threading, deferred interrupts, thread-groups, virtual processors, kernel-to-userspace communication, etc. Prior to Silcos 2.05 versions, this module was actually a part of the Microkernel which has been split into three parts (KernelHost & HAL also included).

NOTES

1. The kernel relies on the multiboot specification for getting into its environmental state. For more information, http://download-mirror.savannah.gnu.org/releases/grub/phcoder/multiboot.pdf is link for its documentation.

2. The kernel uses the ELF ABI for loading & linking its modules. Other binary formats are strictly prohibited for specific reasons.

Clone this wiki locally