System Software
1. Definition
System software is the set of programs that manage the hardware resources of a computer and provide the environment in which application programs run. It works close to the machine, is loaded at start-up, runs mostly in the background, and is written for a particular machine family (hence machine dependent). The operating system is the most important member of this family.
2. Functions of System Software
- Resource management — allocate CPU time, memory, storage and devices among competing programs.
- Process management — create, schedule, suspend and terminate processes; handle inter-process communication.
- Memory management — allocate and reclaim memory, keep track of free space, support virtual memory.
- File and storage management — create, read, write, delete files; organise them in directories; control access.
- Device management — communicate with hardware through device drivers, handle interrupts and buffering.
- Abstraction / service provision — present system calls and APIs so application programmers never touch registers or ports.
- Program translation and loading — convert source code to machine code and bring it into memory for execution.
- Error detection and security — detect hardware/software errors, prevent unauthorised access, enforce protection between programs.
- Booting and initialisation — run POST and start the OS.
- Performance monitoring and housekeeping — job accounting, logging, utilities for formatting, backup and recovery.
3. Main Components of System Software
| Component | Responsibility | Examples |
|---|---|---|
| Operating system | Overall control; process, memory, file and device management | Windows, Linux, macOS, Android, RTOS |
| Device drivers | Device-specific code that converts OS requests into hardware operations | Printer, display, Wi-Fi, audio drivers |
| Firmware / BIOS / UEFI | Hardware self-test and boot of the OS | BIOS on the motherboard, router firmware |
| Assembler | Assembly language → machine code (two-pass) | MASM, NASM, GNU as |
| Compiler | High-level language → object code | GCC, javac, cl.exe |
| Interpreter | Executes high-level source line by line | Python, Node, BASIC |
| Preprocessor / macro processor | Expands #include, #define, macros before compilation | cpp |
| Linker | Combines object modules and library code into one executable, resolves symbols | ld, link.exe |
| Loader | Places the executable into memory and transfers control to it | OS loader, bootloader |
| Debugger | Traces program execution, sets breakpoints, inspects variables | gdb, WinDbg |
| Utilities | Maintenance tasks | Format, chkdsk, defragmenter, backup, antivirus |
| System libraries / shell | Reusable services and command interface | libc, bash, PowerShell |
4. Booting: How System Software Comes to Life
POWER ON ─► CPU reads the RESET VECTOR in BIOS/UEFI flash
─► POST (Power-On Self-Test) checks CPU, RAM, keyboard, disk
─► BIOS/UEFI locates the boot device (HDD/SSD/USB/network)
─► loads the BOOT LOADER (GRUB, Windows Boot Manager)
─► boot loader loads the OS KERNEL into RAM
─► kernel initialises drivers, starts system services and the shell/GUI
─► LOGIN PROMPT / DESKTOP appears
This chain explains why a corrupted BIOS or missing boot loader stops the machine before the OS can help.
5. Linker and Loader
- Linker — takes the object modules produced by the compiler/assembler plus library code and joins them into a single executable, resolving external symbol references (a call in one module to a function defined in another). It supports static linking (library code copied into the executable — bigger file, no dependencies) and dynamic linking (library loaded at run time — smaller file, shared by many processes; DLLs and .so files).
- Loader — brings the executable from disk into memory, performs relocation (adjusting addresses to where the program was actually loaded), sets up the stack and heap, and passes control to the entry point. Loading schemes: compile-time (absolute addresses, no relocation), load-time (relocatable at load), run-time (address translation while running, requires hardware support such as a base/limit register or MMU).
6. Translators and Related Processors
| Tool | Input → Output | Notes |
|---|---|---|
| Preprocessor | Source with directives → pure source | #include, #define expansion |
| Assembler | Assembly → machine code | Two passes for forward references |
| Compiler | High-level → object code | Whole program; linked later |
| Interpreter | High-level → direct execution | No object file |
| Cross compiler / assembler | Source → code for a different machine | Used in embedded development (host PC → ARM target) |
| Decompiler / disassembler | Binary → source/assembly (approximate) | Reverse engineering |
| Linker / loader | Object → executable → running process | Section 5 above |
7. Why System Software is Machine Dependent
It manipulates machine-specific structures — register sets, interrupt vectors, page tables, device registers and instruction formats. Portable parts (70-90% of an OS) are written in C/C++, with assembly confined to the hardware-dependent kernel pieces. Application software, by contrast, talks only to the OS API and so moves between machines with the same OS.
8. Exam Points
- Define system software and explain its functions — 5 marks, very frequent.
- List the components of system software with one example each — 5 marks.
- Differentiate system software and application software — 5 marks, almost certain.
- Explain the role of linker and loader with static vs dynamic linking — 5-7 marks, frequent.
- Explain the boot process from power-on to login — 5 marks.
- Why is system software machine dependent while application software is not? — 3 marks.