Systems programming — Domain map

Systems programming main domains:

CPU/PC

Digital circuits:

CPU Architecture:

PC Hardware:

Digital circuits terms

In this context:

  • CPU is logical component («idea» of instruction performing machine)
  • microprocessor is physical chip with actual CPU

Terms:

  • Microprocessor — physical chip with CPU
  • Microcontroller — physical chip with CPU, memory and IO-interface
  • FPGA
  • ASIC

CPU terms

CPU (Central Processing Unit) — “brain” of a computer

  • ALU (Arythmetic Logic Unit) — CPU component used for calculations
  • Instructions decoder — component that transforms opcodes to CPU instructions
  • Opcode (Operation Code) — enumerated value (like 11100011 00001010) that specifies operation to be performed
  • Clock — component that synchronizes all CPU components

Memory:

  • Registers — fast and small memory directly integrated into CPU
  • Volatile memory — one that requires power to store data
  • Non-volatile memory — persistent data storage
  • Cache — small fast memory (slower than registers, faster than RAM) that stores copies of frequently used data from main memory (which is slow to access)

Input/Output — communication between CPU and external peripherals to send and receive data

ISA and real-life architectures:

  • x86: 80+ ISA for 8086, 1000+ modern
  • x86 / AMD = same ISA, different hardware
  • RISC-V: core 47, additional 100+
  • ARM

BIOS terms

Firmware — software embeded into hardware.

BIOS:

  • microcode — software layer inside cpu, stored and loaded from bios
  • BIOS/UEFI:
    • firmware/software that runs on main CPU
    • CPU starts on hardwired «reset vector» that points to BIOS location
    • BIOS loads microcode into CPU
    • BIOS is stored in EEPROM (non-volatile memory)
  • CMOS — stores some BIOS info (date-time, boot order), volatile memory depending on battery

OS

Main stems:

Parts:

Systems programming:

Code levels

Levels:

  • machine code (11001100 00101011 …)
  • object code (machine code + linking info)
  • assembly (specific for every CPU or at least CPU Architecture)
  • C/C++ and higher-level languages