Instruction Set Architecture (ISA) is an abstract model of a computer that defines how the CPU is controlled by software
ISA acts as an interface between hardware and software, specifying what the processor can do and how it's done
ISA defines supported data types, registers, memory management, key features like virtual memory, instructions a microprocessor can execute, and input/output models
Some virtual machines like Smalltalk, Java virtual machine, and Microsoft's Common Language Runtime support bytecode as their ISA
ISA is an abstract model of a computer in computer science, also known as computer architecture
ISA realization, like a CPU, is called an implementation
ISA Classification:
Complex Instruction Set Computer (CISC)
Reduced Instruction Set Computer (RISC)
Very Long Instruction Word (VLIW)
Explicitly Parallel Instruction Computing (EPIC)
CISC:
Executes several low-level operations or multi-step operations within single instructions
RISC:
Implements frequently used instructions efficiently, less common operations are subroutines
VLIW:
Controls parallel execution of instructions
Deals with complexity by depending on the compiler
EPIC:
Provides features for compiler enhancements of instruction-level parallelism (ILP)
Keeps hardware complexity relatively low
Register Pressure:
Availability of free registers during program execution
High register pressure leads to frequent register content spilling into memory
Code Density:
Combined size of all instructions needed for a task
Computers with high code density have complex instructions for various operations
Minimal Instruction Set Computers (MISC):
Form of stack machine with few separate instructions
Takes little silicon to implement, can be realized in FPGA or multi-core form
Design of instruction sets is a complex issue with historical stages like CISC and research leading to instruction set simplification
Instruction Set Implementation:
Any instruction set can be implemented in various ways
Different implementations provide the same programming model
Compiler:
Translates a program from a source language to a target language
Compilers can also improve programs and find errors at compile time
Assembler:
Translates assembly code into machine code
Checks each instruction for correctness and generates object code
Interpreter:
Translates single statements of a source program into machine code and executes them immediately
Moves to the next line only after removing errors
Microarchitecture describes the attributes of a system as seen by the programmer, distinct from the organization of data flow and controls, the logical design, and the physical implementation
Advanced Micro Devices (AMD) is an American multinational semiconductor company based in Santa Clara, California, that develops computer processors and related technologies for business and consumer markets
AMD brand names include Athlon and Ryzen
Pipelining is a technique where multiple instructions are overlapped during execution, increasing the overall instruction throughput
Computermemory operates at a high speed compared to storage, and modern memory is implemented as semiconductor memory
Volatile memory requires power to maintain stored information, while non-volatile memory can retain information even after power is removed
Examples of non-volatile memory include Flash memory, Read Only Memory (ROM), Programmable Read-only Memory (PROM), Erasable Programmable Read-only Memory (EPROM), and Electrically Erasable Programmable Read-only Memory (EEPROM)
Examples of volatile memory include Dynamic Random Access Memory (DRAM), Static Random Access Memory (SRAM), and Video Random Access Memory (VRAM)
Cache memory is an extremely fast type that acts as a buffer between RAM and the CPU, holding frequently requested data and instructions for immediate access
Cachearchitecture refers to a memory architecture that uses a hierarchy of memory stores based on varying access speeds to cache data
Direct Memory Access (DMA) allows an I/O device to send or receive data directly to or from the main memory, bypassing the CPU to speed up memory operations
A computer bus is a communication link used in a computer system to send data, addresses, control signals, and power to various components
Types of busses include Address bus, Data bus, and Control bus
Advantages of computer buses include versatility, low cost, and ease of adding new devices
Disadvantages of computer buses include creating a communication bottleneck and limiting the maximum I/O throughput
I/O devices are hardware pieces used to communicate with a computer, such as keyboards, computer mice, monitors, printers, modems, and network cards
the heap is used to allocate memory dynamically at runtime
a pointer is an address that points to another location in the computer's memory
The stack is used to store local variables and function parameters
the stack is used to store function calls, local variables, and return addresses
Registers are typically used to hold frequently accessed data or instructions during program execution.