Summary
Highlights
The development of computers was initially driven by military needs, leading to special-purpose machines for ballistic calculations. Over time, the demand grew for general-purpose machines capable of complex calculations, such as those used in supercomputing for genome analysis and meteorological predictions. Beyond specialized uses, computing has become ubiquitous in daily life, through internet banking, online shopping, social media, and embedded systems in various devices (IoT), constantly evolving to meet societal demands.
Computers are categorized into three main classes: personal computers (notebooks, desktops) for everyday user tasks like word processing and internet browsing; servers, which operate in data centers providing services remotely, requiring high availability (24/7) and performance for multiple transactions, often over the internet; and embedded computers, microcontrollers in small objects like remote controls or household appliances, characterized by cost efficiency and specific performance constraints.
The performance of a computer system is influenced by several factors: the algorithm used (e.g., Bubble sort vs. Quick sort), the programming language, compiler, and architecture (e.g., C, Java, or Python, and different processor architectures like Intel or ARM), the processor and memory system (e.g., an Intel Core i7 vs. an older Pentium), and the input/output system (how data is provided and output generated). The lecture focuses mainly on the processor/memory and I/O aspects.
The interaction between hardware and applications occurs through several layers: application software (high-level programs like algorithms, web servers), system software (compilers and operating systems), and hardware. Compilers translate high-level code into assembly language, which is then converted by an assembler into binary machine code that the hardware can execute. The operating system manages hardware interfaces and I/O access, making this a critical area of study.
All computers, regardless of class, share five components: input, output, memory hierarchy, and the processor (data path and control unit). Input and output mechanisms vary; desktops use keyboards/mice, embedded systems use sensors, and servers primarily use networks. Memory consists of volatile main memory (RAM) for active programs and data, non-volatile secondary memory (disks, flash drives) for persistent storage, and cache memory (faster, static RAM) to bridge the speed gap between the processor and main memory.
The Instruction Set Architecture (ISA) is a key abstraction, defining what a processor can do, its instructions, registers, memory access methods, and I/O resources. It allows different hardware implementations (e.g., various Intel processors) to adhere to the same instruction set. The Application Binary Interface (ABI), which combines the ISA with the software system interface, is equally important. This enables portability across different systems through compilation and assembly processes.
Computing technology has evolved significantly, from electro-mechanical devices in the 1940s to vacuum tubes in the 1950s, and transistors in the 1960s. This progression continued with increasing integration capacities, leading to more transistors on a single chip. Moore's Law, proposed by Gordon Moore, describes this trend of doubling the number of transistors on an integrated circuit every 18 to 24 months, which has profoundly influenced technological advancement and performance gains in computing.