FreeNOS
Todo List
Global __cxa_atexit (void(*func)(void *), void *arg, void *dso_handle)
Actually invoke the list of static destructors
Class API
System calls currently do not verify whether a process has permission to use it. Possible solution is to add a capability based mechanism, that defines whether a Process is allowed to execute the system call. Capabilities can describe any resource owned by the Process. For example, a virtual or physical memory range. Capabilities may be transferred between core local and remote processes.
Class ChannelClient
Intra-core communication is not yet supported by this client. For intra-core channels, the local CoreServer should be contacted which communicates with the remote CoreServer to properly setup the channel between cores.
Global cpu_shutdown ()
FreeNOS does not yet have a full ACPI implementation. Shutdown now has a bit naive implementation.
Global ELF::regions (Region *regions, Size *count) const
Rework executables to avoid giving all mapped regions read, write and execute permissions.
Global ExecutableFormat::find (const u8 *image, const Size size, ExecutableFormat **fmt)
Invoke Lz4Decompressor inside this function so that the various callers do not need to anymore
Class IntelKernel
Debugging the kernel under GDB 9.2 on Ubuntu 20.04 seems to give a malformed/corrupted stacktrace It only happens with intel/pc on compilers g++-8 and g++-9 and g++-10.
Class IntelProcess
IntelProcess currently has a per-process kernel stack, while the ARMProcess does not. The kernel stack should not be needed anymore, and can be removed to reduce overhead.
Global IOBuffer::setMessage (const FileSystemMessage *msg)
Only allow direct-mapping if the remote buffer size is a multiple of PAGESIZE. If the size isnt a full page, the rest of the page might contain other data.
Class LinnFileSystem
Currently the LinnFileSystem is read-only and does not support writing.
Class MemoryBlock
Add architecture specific implementations for extra speed. The alternative implementations should be placed in libarch without creating a new dependency in libstd, for example using weak symbols.
Class MemoryMap
Currently the total supported system memory is limited to 1GiB
Class MpiProxy

This server might be able re-use the MpiTarget class by inheritance or as a member instance

MpiProxy protocol currently uses UDP which does not protect against packet loss or corruption. A simple solution can be implemented by using retransmissions and acknowledge packets

Global MpiProxy::processExec (const Header *header, const u8 *packet, const Size size, const struct sockaddr &addr)
Check if a computation is already running and reject the request if so
Class MpiTarget
Currently only supports communication between the master and slaves. Direct communication between slave cores is not implemented.
Global PageAllocator::release (const Address addr)
Currently this function does not actually release memory back to the system. A potential problem with the current implementation is that releasing memory may result in fragmented virtual memory that may break higher-level allocators.
Module Point-to-Point Communication
MPI_Scatter, MPI_Gather not yet supported.
Module Point-to-Point Communication
MPI_Scatter, MPI_Gather not yet supported.
Class PoolAllocator
While this Allocator works well, its performance can be improved. The BitAllocator contains a BitArray that scans its internal array for "free bits". If the caller is unfortunate, the whole array needs to be scanned, adding overhead. The Linux kernel uses a buddy allocator, that basically combines a bit array and a linked list for optimal performance.
Class RecoveryServer

Support automatic restart of a process when a CPU exception occurs

Pro-actively send ping/pong requests to processes to verify they are still running properly and are not inside an infinite loop.

Modify FileSystemServer to use new peek() and seek() functions of MemoryChannel to support mid-transaction recovery.

Update various servers to actually use the DatastoreServer for storing persistent data that needs to be preserved on restart. For example, the block cache in TmpFileSystem.

Add a fault injection tester that modifies the memory of running programs to introduce/simulate software errors and verify that the system keeps running while the programs are restarted.