Hardware & Software


A collection of physical elements that ensemble the device and enable the software to run its logic. The main component in the computer is the motherboard that connects and integrates between the following components:

  1. CPU (Central Processing Unit) – Principal components of a CPU includes:
    • arithmetic logic unit (ALU) that performs arithmetic and logic operations
    • processor registers that supply operands to the ALU and store the results of ALU operations
    • a control unit that fetches instructions from memory and “executes” them by directing the coordinated operations of the ALU, registers, and other components.
  2. Data storage
    • Primary storage – directly connected to the CPU, works very fast but lose the data when the device is powered down (volatile). The types of primary storage are:
      • processor registers that hold data for the ALU
      • Main Memory like RAM (Random Access Memory) that store the code and the data related to it
      • ROM (Read-only memory) the stores the software to boot the computer
    • Secondary storage – not connected to the CPU, does not lose the data when the device is powered down (non-volatile) but significantly slower. the computer uses Input/output channels (I/O) to transfer data from the secondary to the Primary. Hard drive, CDs, SSD, Flash memory are the most common use as secondary storage.
  3. Other Hardware devices – there is also a wide range of hardware devices connected to the motherboard to support different functionality such as a keyboard, monitor, printer, external hard drive, battery, power supply, GPS, GPU and etc. Each one of them can be connected physically (BUS, USB, HDMI, VGA and etc.) or wireless (Wifi, Bluetooth and etc.
Computer hardware diagram


Operating systems (OS)

System software that manages computer hardware and software resources and provides common services for computer programs.

The OS components and services:

  1. Kernel – using firmware and drivers, the kernel provides a basic level of control over all of the computer’s hardware devices. It manages memory access for programs in the RAM, it determines which programs get access to which hardware resources.
  2. Program execution – The OS provides an interface between an application program and the computer hardware so that an application program can interact with the hardware only by obeying rules and procedures programmed into the operating system.
  3. Interrupts handled by the operating system’s kernel, when the interrupt is received, the computer’s hardware automatically suspends whatever program is currently running, saves its status, and runs computer code previously associated with the interrupt.
  4. Memory management – The kernel must be responsible for managing all system memory which is currently in use by programs. This ensures that a program does not interfere with memory already in use by another program.
  5. Virtual memory – The use of virtual memory addressing (such as paging or segmentation) means that the kernel can choose what memory each program may use at any given time, allowing the operating system to use the same memory locations for multiple tasks.
  6. Multitasking – A concept of running multiple independent computer programs on the same computer. the kernel contains a scheduling program which determines how much time each process spends executing, and in which order execution control should be passed to programs. Control is passed to a process by the kernel, which allows the program access to the CPU and memory (context switch).
  7. Disk access and file systems Computers store data on disks using files, which are structured in specific ways in order to allow for faster access, higher reliability, and to make better use of the drive’s available space. The specific way in which files are stored on a disk is called a file system, it enables files to have names and attributes and allows them to be stored in a hierarchy of directories or folders arranged in a directory tree.
  8. Device drivers – A device driver is a specific type of computer software developed to allow interaction with hardware devices.


A part of a computer system that consists of encoded information or computer instructions, there are 3 common software levels:

  1. High-level language – the easiest and most efficient for writing software by humans. The High-level languages are translated into Assembly language using a compiler or an interpreter or a combination of the two.
  2. Assembly languagelow-level, Assembly language uses a mnemonic to represent each machine language instruction or operation, Assembly language is converted into executable machine language with an assembler
  3. machine language – instructions specific to an individual processor (CPU), consists of groups of binary values signifying processor instructions that change the state of the computer from its preceding state (aka changing value in register).