what is an OS ?
big question, good question, one basic definition is: "you can call OS the program that runs all the time enabling other programs to be launched without any conflicts"
maybe think about what kinds of things it mean:
- providing environment for other programs to operate in
- control access to system resources
- allocate system resources
- promotes efficient use of system resources
- provides convenient interface for interactive users
Safety Critical Products
The INTEGRITY®-178B operating system is the most secure operating system in the world having been certified by the NSA-managed NIAP lab to EAL6+ High Robustness. No other commercial operating system has attained his level of security. No other commercial operating system has entered into an evaluation at EAL6+ High Robustness.
In the past, Safety Critical software systems with multiple levels of safety criticality have been deployed on federated systems, where each function executes on a dedicated processor. The need to lower maintenance costs and reduce the size/weight/power of older embedded computer systems, combined with the availability of modern processor technology, has created the demand for a commercial run-time system that permits multiple programs at different safety levels to execute on a single processor. In addition, the run-time system must be certifiable to a level of criticality as high or higher than that of any program running on the processor.
The cost to test and certify safety critical software is directly proportional to the level of safety criticality. The higher the safety level, the more complex and expensive the certification process. The most economical and architecturally ideal single processor solution is to certify only those programs that operate at the highest level of safety criticality to the highest level of certification. The programs or functions that operate at lower levels of criticality would then be certified to lower levels of safety. This method is valid as long as the run-time system guarantees that any failure resulting from a defect in a program operating at a lower safety level CAN NOT, under any circumstance, disrupt the operation of the higher safety level functions. The run-time system must guarantee protection in both the space and time domains. In other words, a commercial real-time operating system must be securely partitioned so that it provides both memory protection and real-time scheduling protection.
Practice: where can i see a good kernel ?
mips, xinu is a picokernel
XINU (MIPS oriented) http://xinu.mscs.mu.edu/Main_Page
- shark is POSIX/PSE51
- ucosII has its custom API
- ERIKA is OSEK/VDX
Prex is an open source, royalty-free, real-time operating system for embedded systems. It is designed and implemented for resource-constrained systems that require predictable timing behavior. The highly portable code of Prex is written in 100% ANSI C based on traditional microkernel architecture.
Prex Design The Prex microkernel provides only fundamental features for task, thread, memory, IPC, exception, and synchronization. The other basic OS functions - process, file system, application loading, and networking, are provided by the user mode servers. In addition, Prex provides a POSIX emulation layer in order to utilize existing *NIX applications. This design allows the system to perform both of the native real-time task and the generic POSIX process simultaneously without degrading real-time performance. It also helps platform designers to construct OS by choosing suitable system servers for their target requisition.
Si tratta sostanzialmente di un sistema operativo Real Time, compatibile POSIX, multithreaded, molto leggero (gira addirittura su un GameBoy) e adatto per i processori ARM, PowerPC e x86.
La particolarità di questo sistema è il doppio memory model, funziona in pratica con e senza MMU.
Funzionamento con MMU Ogni processo ha il suo address space separato, ad ogni context switch avviene anche la riprogrammazione della MMU e il flush del TLB. Non implementa memoria virtuale e/o paginazione, ma sarebbe abbastanza triviale implementarlo data la struttura del kernel.
Funzionamento senza MMU Ogni processo viene rilocato ad un indirizzo fisico come se fosse una libreria, non essendoci MMU ogni processo può influire sugli altri, simile per certi versi al memory model di AROS / AmigaOS.
- Task & Thread Control: preemptive priority scheduling with 256 priority levels
- Memory Management: memory protection, virtual address mapping, shared memory, MMU or MMU-less configuration
- IPC: object name space, synchronous message passing between threads
- Exception: fault trapping, framework for POSIX signal emulation
- Synchronization: semaphores, condition variables, and mutexes with priority inheritance
- Timers: sleep timers, one-shot or periodic timers
- Interrupt: nested interrupt service routines, and prioritized interrupt service threads
- Device I/O: minimum synchronous I/O interface, DPC (Deferred Procedure Call)
- Security: task capability, pathname-based access control, I/O access permission.
- Real-time: low interrupt latency, high resolution timers and scheduling priority control
- Power Management: power policy, idle thread, DVS (Dynamic Voltage Scaling)
- Debugging Facility: event logging, kernel dump, GDB remote debug
- File Systems: multi-threaded, VFS framework, buffer cache, ramfs, fatfs, arfs, etc.
- POSIX Emulation: pid, fork, exec, file I/O, signal, pipe, tty, pthread, etc.
- Libc: C library fully optimized to generate a small executable file
- CmdBox: a small binary that includes tiny versions of many UNIX utilities.
- Networking: (plan) TCP/IP stack, BSD socket interface
- x86-pc MMU-less
- arm-gba/ARM7TDMI/Game Boy Advance
- ppc-prep/PowerPC/PReP (MMU-less)/QEMU