In computer science and computer engineering , computer architecture is a description of the structure of a computer system made from component parts. It can sometimes be a high-level description that ignores details of the implementation. At a more detailed level, the description may include the instruction set architecture design, microarchitecture design, logic design , and implementation .
59-496: In computer software , an application binary interface ( ABI ) is an interface between two binary program modules. Often, one of these modules is a library or operating system facility, and the other is a program that is being run by a user. An ABI defines how data structures or computational routines are accessed in machine code , which is a low-level, hardware-dependent format. In contrast, an application programming interface (API) defines this access in source code , which
118-527: A provider and accessed over the Internet . The process of developing software involves several stages. The stages include software design , programming , testing , release , and maintenance . Software quality assurance and security are critical aspects of software development, as bugs and security vulnerabilities can lead to system failures and security breaches. Additionally, legal issues such as software licenses and intellectual property rights play
177-491: A real-time environment and fail if an operation is not completed in a specified amount of time. For example, computer-controlled anti-lock brakes must begin braking within a predictable and limited time period after the brake pedal is sensed or else failure of the brake will occur. Benchmarking takes all these factors into account by measuring the time a computer takes to run through a series of test programs. Although benchmarking shows strengths, it should not be how you choose
236-509: A vulnerability . Software patches are often released to fix identified vulnerabilities, but those that remain unknown ( zero days ) as well as those that have not been patched are still liable for exploitation. Vulnerabilities vary in their ability to be exploited by malicious actors, and the actual risk is dependent on the nature of the vulnerability as well as the value of the surrounding system. Although some vulnerabilities can only be used for denial of service attacks that compromise
295-520: A web application —had become the primary method that companies deliver applications. Software companies aim to deliver a high-quality product on time and under budget. A challenge is that software development effort estimation is often inaccurate. Software development begins by conceiving the project, evaluating its feasibility, analyzing the business requirements, and making a software design . Most software projects speed up their development by reusing or incorporating existing software, either in
354-457: A change request. Frequently, software is released in an incomplete state when the development team runs out of time or funding. Despite testing and quality assurance , virtually all software contains bugs where the system does not work as intended. Post-release software maintenance is necessary to remediate these bugs when they are found and keep the software working as the environment changes over time. New features are often added after
413-486: A code's correct and efficient behavior, its reusability and portability , or the ease of modification. It is usually more cost-effective to build quality into the product from the beginning rather than try to add it later in the development process. Higher quality code will reduce lifetime cost to both suppliers and customers as it is more reliable and easier to maintain . Software failures in safety-critical systems can be very serious including death. By some estimates,
472-415: A computer capable of running a virtual machine needs virtual memory hardware so that the memory of different virtual computers can be kept separated. Computer organization and features also affect power consumption and processor cost. Once an instruction set and microarchitecture have been designed, a practical machine must be developed. This design process is called the implementation . Implementation
531-490: A computer system. The case of instruction set architecture can be used to illustrate the balance of these competing factors. More complex instruction sets enable programmers to write more space efficient programs, since a single instruction can encode some higher-level abstraction (such as the x86 Loop instruction ). However, longer and more complex instructions take longer for the processor to decode and can be more costly to implement effectively. The increased complexity from
590-427: A computer. Often the measured machines split on different measures. For example, one system might handle scientific applications quickly, while another might render video games more smoothly. Furthermore, designers may target and add special features to their products, through hardware or software, that permit a specific benchmark to execute quickly but do not offer similar advantages to general tasks. Power efficiency
649-469: A detailed analysis of the computer's organization. For example, in an SD card , the designers might need to arrange the card so that the most data can be processed in the fastest possible way. Computer organization also helps plan the selection of a processor for a particular project. Multimedia projects may need very rapid data access, while virtual machines may need fast interrupts. Sometimes certain tasks need additional components as well. For example,
SECTION 10
#1732873351947708-407: A higher clock rate may not necessarily have greater performance. As a result, manufacturers have moved away from clock speed as a measure of performance. Other factors influence speed, such as the mix of functional units , bus speeds, available memory, and the type and order of instructions in the programs. There are two main types of speed: latency and throughput . Latency is the time between
767-407: A large instruction set also creates more room for unreliability when instructions interact in unexpected ways. The implementation involves integrated circuit design , packaging, power , and cooling . Optimization of the design requires familiarity with topics from compilers and operating systems to logic design and packaging. An instruction set architecture (ISA) is the interface between
826-443: A legal regime where liability for software products is significantly curtailed compared to other products. Source code is protected by copyright law that vests the owner with the exclusive right to copy the code. The underlying ideas or algorithms are not protected by copyright law, but are often treated as a trade secret and concealed by such methods as non-disclosure agreements . Software copyright has been recognized since
885-588: A program in a mix of programming languages, or even compiling a program written in the same language with different compilers. Details covered by an ABI include the following: A complete ABI, such as the Intel Binary Compatibility Standard (iBCS), allows a program from one operating system supporting that ABI to run without modifications on any other such system, provided that necessary shared libraries are present, and similar prerequisites are fulfilled. ABIs can also standardize details such as
944-437: A programming language is run through a compiler or interpreter to execute on the architecture's hardware. Over time, software has become complex, owing to developments in networking , operating systems , and databases . Software can generally be categorized into two main types: The rise of cloud computing has introduced the new software delivery model Software as a Service (SaaS). In SaaS, applications are hosted by
1003-408: A proposed instruction set. Modern emulators can measure size, cost, and speed to determine whether a particular ISA is meeting its goals. Computer organization helps optimize performance-based products. For example, software engineers need to know the processing power of processors . They may need to optimize software in order to gain the most performance for the lowest price. This can require quite
1062-403: A quick web search . Most creative professionals have switched to software-based tools such as computer-aided design , 3D modeling , digital image editing , and computer animation . Almost every complex device is controlled by software. Computer architecture The first documented computer architecture was in the correspondence between Charles Babbage and Ada Lovelace , describing
1121-495: A significant role in the distribution of software products. The first use of the word software is credited to mathematician John Wilder Tukey in 1958. The first programmable computers, which appeared at the end of the 1940s, were programmed in machine language . Machine language is difficult to debug and not portable across different computers. Initially, hardware resources were more expensive than human resources . As programs became complex, programmer productivity became
1180-503: A single chip as possible. In the world of embedded computers , power efficiency has long been an important goal next to throughput and latency. Increases in clock frequency have grown more slowly over the past few years, compared to power reduction improvements. This has been driven by the end of Moore's Law and demand for longer battery life and reductions in size for mobile technology . This change in focus from higher clock rates to power consumption and miniaturization can be shown by
1239-509: A specific version of the software, downloaded, and run on hardware belonging to the purchaser. The rise of the Internet and cloud computing enabled a new model, software as a service (SaaS), in which the provider hosts the software (usually built on top of rented infrastructure or platforms ) and provides the use of the software to customers, often in exchange for a subscription fee . By 2023, SaaS products—which are usually delivered via
SECTION 20
#17328733519471298-415: A system's availability, others allow the attacker to inject and run their own code (called malware ), without the user being aware of it. To thwart cyberattacks, all software in the system must be designed to withstand and recover from external attack. Despite efforts to ensure security, a significant fraction of computers are infected with malware. Programming languages are the format in which software
1357-516: Is a relatively high-level, hardware-independent, often human-readable format. A common aspect of an ABI is the calling convention , which determines how data is provided as input to, or read as output from, computational routines. Examples of this are the x86 calling conventions . Adhering to an ABI (which may or may not be officially standardized) is usually the job of a compiler , operating system, or library author. However, an application programmer may have to deal with an ABI directly when writing
1416-415: Is another important measurement in modern computers. Higher power efficiency can often be traded for lower speed or higher cost. The typical measurement when referring to power consumption in computer architecture is MIPS/W (millions of instructions per second per watt). Modern circuits have less power required per transistor as the number of transistors per chip grows. This is because each transistor that
1475-471: Is put in a new chip requires its own power supply and requires new pathways to be built to power it. However, the number of transistors per chip is starting to increase at a slower rate. Therefore, power efficiency is starting to become as important, if not more important than fitting more and more transistors into a single chip. Recent processor designs have shown this emphasis as they put more focus on power efficiency rather than cramming as many transistors into
1534-465: Is the amount of time that it takes for information from one node to travel to the source) and throughput. Sometimes other considerations, such as features, size, weight, reliability, and expandability are also factors. The most common scheme does an in-depth power analysis and figures out how to keep power consumption low while maintaining adequate performance. Modern computer performance is often described in instructions per cycle (IPC), which measures
1593-466: Is usually not considered architectural design, but rather hardware design engineering . Implementation can be further broken down into several steps: For CPUs , the entire implementation process is organized differently and is often referred to as CPU design . The exact form of a computer system depends on the constraints and goals. Computer architectures usually trade off standards, power versus performance , cost, memory capacity, latency (latency
1652-453: Is written. Since the 1950s, thousands of different programming languages have been invented; some have been in use for decades, while others have fallen into disuse. Some definitions classify machine code —the exact instructions directly implemented by the hardware—and assembly language —a more human-readable alternative to machine code whose statements can be translated one-to-one into machine code—as programming languages. Programs written in
1711-501: The C++ name mangling , exception propagation, and calling convention between compilers on the same platform, but do not require cross-platform compatibility. An embedded-application binary interface (EABI) specifies standard conventions for file formats , data types, register usage, stack frame organization, and function parameter passing of an embedded software program, for use with an embedded operating system . Compilers that support
1770-539: The IBM System/360 line of computers, in which "architecture" became a noun defining "what the user needs to know". The System/360 line was succeeded by several compatible lines of computers, including the current IBM Z line. Later, computer users came to use the term in many less explicit ways. The earliest computer architectures were designed on paper and then directly built into the final hardware form. Later, computer architecture prototypes were physically built in
1829-437: The analytical engine . While building the 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 concept. Two other early and important examples are: The term "architecture" in computer literature can be traced to the work of Lyle R. Johnson and Frederick P. Brooks, Jr. , members of
Application binary interface - Misplaced Pages Continue
1888-438: The high-level programming languages used to create software share a few main characteristics: knowledge of machine code is not necessary to write them, they can be ported to other computer systems, and they are more concise and human-readable than machine code. They must be both human-readable and capable of being translated into unambiguous instructions for computer hardware. The invention of high-level programming languages
1947-652: The ARM EABI . Computer software Software consists of computer programs that instruct the execution of a computer . Software also includes design documents and specifications. The history of software is closely tied to the development of digital computers in the mid-20th century. Early programs were written in the machine language specific to the hardware. The introduction of high-level programming languages in 1958 allowed for more human-readable instructions, making software development easier and more portable across different computer architectures . Software in
2006-765: The EABI create object code that is compatible with code generated by other such compilers, allowing developers to link libraries generated with one compiler with object code generated with another compiler. Developers writing their own assembly language code may also interface with assembly generated by a compliant compiler. EABIs are designed to optimize for performance within the limited resources of an embedded system. Therefore, EABIs omit most abstractions that are made between kernel and user code in complex operating systems. For example, dynamic linking may be avoided to allow smaller executables and faster loading, fixed register usage allows more compact stacks and kernel calls, and running
2065-652: The Machine Organization department in IBM's main research center in 1959. Johnson had the opportunity to write a proprietary research communication about the 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
2124-488: The application in privileged mode allows direct access to custom hardware operation without the indirection of calling a device driver. The choice of EABI can affect performance. Widely used EABIs include PowerPC , Arm EABI and MIPS EABI. Specific software implementations like the C library may impose additional limitations to form more concrete ABIs; one example is the GNU OABI and EABI for ARM, both of which are subsets of
2183-399: The bottleneck. The introduction of high-level programming languages in 1958 hid the details of the hardware and expressed the underlying algorithms into the code . Early languages include Fortran , Lisp , and COBOL . There are two main types of software: Software can also be categorized by how it is deployed . Traditional applications are purchased with a perpetual license for
2242-503: 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 organization defines how instructions interact with the memory, and how memory interacts with itself. During design emulation , emulators can run programs written in
2301-425: 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 languages such as Java , C++ , or most programming languages used. A processor only understands instructions encoded in some numerical fashion, usually as binary numbers . Software tools, such as compilers , translate those high level languages into instructions that
2360-404: The correctness of code, while user acceptance testing helps to ensure that the product meets customer expectations. There are a variety of software development methodologies , which vary from completing all steps in order to concurrent and iterative models. Software development is driven by requirements taken from prospective users, as opposed to maintenance, which is driven by events such as
2419-400: The cost of poor quality software can be as high as 20 to 40 percent of sales. Despite developers' goal of delivering a product that works entirely as intended, virtually all software contains bugs. The rise of the Internet also greatly increased the need for computer security as it enabled malicious actors to conduct cyberattacks remotely. If a bug creates a security risk, it is called
Application binary interface - Misplaced Pages Continue
2478-419: The cost of products. Unlike copyrights, patents generally only apply in the jurisdiction where they were issued. Engineer Capers Jones writes that "computers and software are making profound changes to every aspect of human life: education, work, warfare, entertainment, medicine, law, and everything else". It has become ubiquitous in everyday life in developed countries . In many cases, software augments
2537-448: The efficiency of the architecture at any clock frequency; a faster IPC rate means the computer is faster. Older computers had IPC counts as low as 0.1 while modern processors easily reach nearly 1. Superscalar processors may reach three to five IPC by executing several instructions per clock cycle. Counting machine-language instructions would be misleading because they can do varying amounts of work in different ISAs. The "instruction" in
2596-406: The final hardware form. The discipline of computer architecture has three main subcategories: There are other technologies in computer architecture. The following technologies are used in bigger companies like Intel, and were estimated in 2002 to count for 1% of all of computer architecture: Computer architecture is concerned with balancing the performance, efficiency, cost, and reliability of
2655-438: The form of commercial off-the-shelf (COTS) or open-source software . Software quality assurance is typically a combination of manual code review by other engineers and automated software testing . Due to time constraints, testing cannot cover all aspects of the software's intended functionality, so developers often focus on the most critical functionality. Formal methods are used in some safety-critical systems to prove
2714-470: The form of a transistor–transistor logic (TTL) computer—such as the prototypes of the 6800 and the PA-RISC —tested, and tweaked, before committing to the final hardware form. As of the 1990s, new computer architectures are typically "built", tested, and tweaked—inside some other computer architecture in a computer architecture simulator ; or inside a FPGA as a soft microprocessor ; or both—before committing to
2773-439: The functionality of existing technologies such as household appliances and elevators . Software also spawned entirely new technologies such as the Internet , video games , mobile phones , and GPS . New methods of communication, including email , forums , blogs , microblogging , wikis , and social media , were enabled by the Internet. Massive amounts of knowledge exceeding any paper-based library are now available with
2832-520: The instructions. The names can be recognized by a software development tool called an assembler . An assembler is a computer program that translates a human-readable form of the ISA into a computer-readable form. Disassemblers are also widely available, usually in debuggers and software programs to isolate and correct malfunctions in binary computer programs. ISAs vary in quality and completeness. A good ISA compromises between programmer convenience (how easy
2891-492: The level of "system architecture", a term that seemed more useful than "machine organization". Subsequently, Brooks, a Stretch designer, opened Chapter 2 of a book called Planning a Computer System: Project Stretch by stating, "Computer architecture, like other architecture, is the art of determining the needs of the user of a structure and then designing to meet those needs as effectively as possible within economic and technological constraints." Brooks went on to help develop
2950-597: The mid-1970s and is vested in the company that makes the software, not the employees or contractors who wrote it. The use of most software is governed by an agreement ( software license ) between the copyright holder and the user. Proprietary software is usually sold under a restrictive license that limits copying and reuse (often enforced with tools such as digital rights management (DRM)). Open-source licenses , in contrast, allow free use and redistribution of software with few conditions. Most open-source licenses used for software require that modifications be released under
3009-472: The operating system) can take this saved file and execute it as a process on the computer hardware. Some programming languages use an interpreter instead of a compiler. An interpreter converts the program into machine code at run time , which makes them 10 to 100 times slower than compiled programming languages. Software is often released with the knowledge that it is incomplete or contains bugs. Purchasers knowingly buy it in this state, which has led to
SECTION 50
#17328733519473068-604: The physical world may also be part of the requirements for a software patent to be held valid. Software patents have been historically controversial . Before the 1998 case State Street Bank & Trust Co. v. Signature Financial Group, Inc. , software patents were generally not recognized in the United States. In that case, the Supreme Court decided that business processes could be patented. Patent applications are complex and costly, and lawsuits involving patents can drive up
3127-482: The processor can understand. Besides instructions, the ISA defines items in the computer that are available to a program—e.g., data types , registers , addressing modes , and memory . Instructions locate these available items with register indexes (or names) and memory addressing modes. 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
3186-408: The release. Over time, the level of maintenance becomes increasingly restricted before being cut off entirely when the product is withdrawn from the market. As software ages , it becomes known as legacy software and can remain in use for decades, even if there is no one left who knows how to fix it. Over the lifetime of the product, software maintenance is estimated to comprise 75 percent or more of
3245-424: The same license, which can create complications when open-source software is reused in proprietary projects. Patents give an inventor an exclusive, time-limited license for a novel product or process. Ideas about what software could accomplish are not protected by law and concrete implementations are instead covered by copyright law . In some countries, a requirement for the claimed invention to have an effect on
3304-537: The standard measurements is not a count of the ISA's machine-language instructions, but a unit of measurement, usually based on the speed of the VAX computer architecture. Many people used to measure a computer's speed by the clock rate (usually in MHz or GHz). This refers to the cycles per second of the main clock of the CPU . However, this metric is somewhat misleading, as a machine with
3363-507: The start of a process and its completion. Throughput is the amount of work done per unit time. Interrupt latency is the guaranteed maximum response time of the system to an electronic event (like when the disk drive finishes moving some data). Performance is affected by a very wide range of design choices — for example, pipelining a processor usually makes latency worse, but makes throughput better. Computers that control machinery usually need low interrupt latencies. These computers operate in
3422-431: The total development cost. Completing a software project involves various forms of expertise, not just in software programmers but also testing, documentation writing, project management , graphic design , user experience , user support, marketing , and fundraising. Software quality is defined as meeting the stated requirements as well as customer expectations. Quality is an overarching term that can refer to
3481-401: Was simultaneous with the compilers needed to translate them automatically into machine code. Most programs do not contain all the resources needed to run them and rely on external libraries . Part of the compiler's function is to link these files in such a way that the program can be executed by the hardware. Once compiled, the program can be saved as an object file and the loader (part of
#946053