Design of an OS depends on a lot of things, and a lot of variations exist. Some important design aspects are discussed below.
Factors affecting the design of OS:
Policy
Defines what needs to be done.
Mechanism
Defines how something is done at the low-level implementation.
Examples:
- CPU scheduling
- Mechanism
The context-switch routine that saves/restores registers. - Policy
Which process to run next (FCFS, Round Robin, Priority).
- Mechanism
- Memory management
- Mechanism
Page table structures, page replacement hooks. - Policy
Which page replacement strategy (LRU, FIFO).
- Mechanism
- I/O
- Mechanism
Device driver interface to queues requests. - Policy
Which request to serve first (SCAN, SSTF).
- Mechanism
Computing Environments
Traditional
Standalone computers, networked nowadays.
Mobile
Smartphones/tablets with sensors and wireless networks.
Client-Server
Servers respond to client requests.
Peer-to-Peer
All nodes act as both client and server.
Cloud Computing
Computing delivered as services (SaaS, PaaS, IaaS). Uses virtualization heavily.
Real-Time Embedded
Perform tasks within strict timing constraints (automotive, medical).
Goals
User Goals
Characteristics of an OS expected by a user.
Examples: easy to use, fast, safe.
System Goals
Characteristics of an OS expected by its developers.
Examples: easy to design, maintain, reliable.
Implementation Languages
A system goal. Usually kernel is implemented using a language that is closer to the hardware. Examples: C and assembly. System programs are built using C, C++ or scripting languages.