Computer architecture: Difference between revisions

Content deleted Content added
Tags: Reverted possible conflict of interest Visual edit
When used in that fashion, "(computer) architecture" is a count noun, so use an article with it.
 
(18 intermediate revisions by 9 users not shown)
Line 1:
{{Short description|Set of rules describing computer system}}
{{Lead too short|date=November 2023}}
[[File:Computer architecture block diagram.png|alt=|thumb|upright=1.35|Block diagram of a basic computer with uniprocessor CPU. Black lines indicate [[controlthe flow]] of control signals, whereas red lines indicate datathe flow of processor instructions and data. Arrows indicate the direction of flow.]]
In [[computer science]] and [[computer engineering]], a '''computer architecture''' is a description of the structure of a [[computer]] system made from component parts.<ref>{{cite web|last=Dragoni|first=Nicole|title=Introduction to peer to peer computing|url=http://www2.imm.dtu.dk/courses/02220/2017/L6/P2P.pdf|website=DTU Compute – Department of Applied Mathematics and Computer Science|___location=Lyngby, Denmark|date=n.d.}}</ref> It can sometimes be a high-level description that ignores details of the implementation.<ref>{{cite book|last1=Clements|first1=Alan|title=Principles of Computer Hardware|page=1|edition=Fourth|quote=Architecture describes the internal organization of a computer in an abstract way; that is, it defines the capabilities of the computer and its programming model. You can have two computers that have been constructed in different ways with different technologies but with the same architecture.}}</ref> At a more detailed level, the description may include the [[instruction set architecture]] design, [[microarchitecture]] design, [[logic design]], and [[implementation]].<ref>{{cite book|last1=Hennessy|first1=John|last2=Patterson|first2=David|title=Computer Architecture: A Quantitative Approach|page=11|edition=Fifth|quote=This task has many aspects, including instruction set design, functional organization, logic design, and implementation.}}</ref>
 
== History ==
The first documented computer architecture was in the correspondence between [[Charles Babbage]] and [[Ada Lovelace]], describing the [[analytical engine]]. While building the computer [[Z1 (computer)|Z1]] in 1936, [[Konrad Zuse]] described in two patent applications for his future projects that machine instructions could be stored in the same storage used for data, i.e., the [[Stored-program computer|stored-program]] concept.<ref>{{citation |title=Electronic Digital Computers |journal=Nature |date=25 September 1948 |volume=162 |page=487 |doi=10.1038/162487a0 |last1=Williams |first1=F. C. |last2=Kilburn |first2=T. |issue=4117 |bibcode=1948Natur.162..487W |s2cid=4110351 |doi-access=free }}</ref><ref>Susanne Faber, "Konrad Zuses Bemuehungen um die Patentanmeldung der Z3", 2000</ref> Two other early and important examples are:
* [[John von Neumann]]'s 1945 paper, [[First Draft of a Report on the EDVAC]], which described an organization of logical elements;<ref>{{Cite book|title=First Draft of a Report on the EDVAC|last=Neumann|first=John|year=1945|pages=9}}</ref> and
*[[Alan M. Turing|Alan Turing]]'s more detailed ''Proposed Electronic Calculator'' for the [[Automatic Computing Engine]], also 1945 and which cited [[John von Neumann]]'s paper.<ref>Reproduced in B. J. Copeland (Ed.), "Alan Turing's Automatic Computing Engine", Oxford University Press, 2005, pp. 369-454369–454.</ref>
 
The term "architecture" in computer literature can be traced to the work of Lyle R. Johnson and [[Fred Brooks|Frederick P. Brooks, Jr.]], members of the Machine Organization department in IBM's main research center in 1959. Johnson had the opportunity to write a proprietary research communication about the [[IBM 7030 Stretch|Stretch]], an IBM-developed [[supercomputer]] for [[Los Alamos National Laboratory]] (at the time known as Los Alamos Scientific Laboratory). To describe the level of detail for discussing the luxuriously embellished computer, he noted that his description of formats, instruction types, hardware parameters, and speed enhancements were at the level of "system architecture", a term that seemed more useful than "machine organization".<ref>{{cite web|url=https://archive.computerhistory.org/resources/text/IBM/Stretch/pdfs/05-10/102634114.pdf |last1= Johnson |first1=Lyle| title= A Description of Stretch|page=1|year=1960|access-date=7 October 2017}}</ref>
Line 39:
The implementation involves [[integrated circuit design]], packaging, [[Electric power|power]], and [[Computer cooling|cooling]]. Optimization of the design requires familiarity with topics from [[compiler]]s and [[operating system]]s to [[logic design]] and packaging.<ref>{{Cite web|url=https://www.cis.upenn.edu/~milom/cis501-Fall11/lectures/00_intro.pdf|title=What is computer architecture?|last=Martin|first=Milo|website=UPENN|access-date=11 May 2017}}</ref>
 
===Instruction set architecture===
At [https://www.abndesignstudio.com/ ABN Design Studio], we view the Instruction Set Architecture (ISA) as the essential link between a computer’s software and hardware. Think of it as the language that helps software and hardware communicate. While we write code in high-level languages like Java or C++, computers can’t understand these directly. Instead, processors understand instructions in binary—just a series of 0s and 1s.
{{Main|Instruction set architecture}}
 
An [[instruction set architecture]] (ISA) is the interface between the computer's software and hardware and also can be viewed as the programmer's view of the machine. Computers do not understand [[high-level programming language]]s such as [[Java (programming language)|Java]], [[C++]], or most programming languages used. A processor only understands instructions encoded in some numerical fashion, usually as [[Binary numeral system|binary number]]s. Software tools, such as [[compiler]]s, translate those high level languages into instructions that the processor can understand.<ref>{{cite web |title=Glossary |url=https://codasip.com/glossary/isa |website=Codasip |access-date=30 May 2025}}</ref><ref>{{cite web |title=What is Instruction Set Architecture (ISA)? |url=https://www.arm.com/glossary/isa |website=The Architecture for the Digital World |access-date=30 May 2025 |language=en}}</ref>
That’s where compilers come in. They act like translators, converting your high-level code into low-level machine instructions that the processor can actually run.
 
Besides instructions, the ISA defines items in the computer that are available to a program&mdash;e.g., [[data type]]s, [[Processor register|registers]], [[addressing mode]]s, and [[Computer memory|memory]]. Instructions locate these available items with register indexes (or names) and memory addressing modes.<ref>{{cite web |title=Organization of Computer Systems: ISA, Machine Language, Number Systems |url=https://www.cise.ufl.edu/~mssz/CompOrg/CDA-lang.html |website=www.cise.ufl.edu |access-date=30 May 2025}}</ref><ref>{{cite web |title=Instruction Set Architecture – Computer Architecture |url=https://www.cs.umd.edu/~meesh/411/CA-online/chapter/instruction-set-architecture/index.html |website=www.cs.umd.edu |access-date=30 May 2025}}</ref>
But the ISA is about more than just instructions. It also defines things like:
 
The ISA of a computer is usually described in a small instruction manual, which describes how the instructions are encoded. Also, it may define short (vaguely) mnemonic names for the instructions. The names can be recognized by a software development tool called an [[assembler (computer programming)|assembler]]. An assembler is a computer program that translates a human-readable form of the ISA into a computer-readable form. [[Disassembler]]s are also widely available, usually in [[debugger]]s and software programs to isolate and correct malfunctions in binary computer programs.<ref>{{cite book |last1=Hennessy |first1=John L. |last2=Patterson |first2=David A. |title=Computer Architecture: A Quantitative Approach |date=23 November 2017 |publisher=[[Morgan Kaufmann Publishers]] |isbn=978-0-12-811906-8 |url=https://google.com/books/edition/Computer_Architecture/cM8mDwAAQBAJ |access-date=30 May 2025 |language=en}}</ref>
The types of data a program can use, how registers (tiny storage spaces in the CPU) work, Ways to access memory, different addressing methods to locate data.
 
ISAs vary in quality and completeness. A good ISA compromises between [[programmer]] convenience (how easy the code is to understand), size of the code (how much code is required to do a specific action), cost of the [[computer]] to interpret the instructions (more complexity means more hardware needed to decode and execute the instructions), and speed of the computer (with more complex decoding hardware comes longer decode time). [[Memory organisation|Memory organization]] defines how instructions interact with the memory, and how memory interacts with itself.
At [https://www.abndesignstudio.com/ ABN Design Studio], we prioritize designing ISAs that make programming easier and more efficient while ensuring they work well with the underlying hardware.
 
To help developers, ISAs are often explained using short manuals. These include simple names (called mnemonics) for instructions—like "ADD" instead of the binary equivalent. Tools called assemblers turn these mnemonics into actual machine code, and disassemblers do the opposite, helping debug or understand how a program works.
 
Creating a good ISA is all about balance. You want it to be easy for programmers to use, but also efficient, fast, and not too complex for the hardware. If it’s too flexible, it might slow down processing. If it’s too strict, it might make programming harder. We constantly work to find that sweet spot.
 
To test our ISA designs, we use emulators that simulate how a real processor would behave. This helps us measure things like:
how much space a program takes (code size), how much the system would cost, how fast it runs
 
This testing and tweaking process helps us build ISAs that are powerful, efficient, and ready to meet the demands of today’s technology.
 
During design [[Emulator|emulation]], emulators can run programs written in a proposed instruction set. Modern emulators can measure size, cost, and speed to determine whether a particular ISA is meeting its goals.
 
===Computer organization===