In general, there are three classifications of computer applications: personal computers, servers, and embedded computers (Patterson and Hennessy ch. 1). Each application has distinct design requirements and employs the core hardware technologies differently. Understanding a basic level of machine language and computer architecture is helpful when developing or attacking each type of computer. Specifically, understanding computer architecture can help developers disassemble code to determine poor coding practices which introduce vulnerabilities.
Development objectives summary
|Personal computers||Delivery of good performance to individual users at a low cost|
|Embedded computer||Minimizing cost and power|
Although most of my readers already know what personal computers (PCs), servers, and embedded computers are, I will provide a description and an extended development objective.
PCs are computers designed for individual use. They are often used with a graphics display, a keyboard, and a mouse. The development objective of PC manufacturers is to deliver good performance to individual users at a low cost.
🌸👋🏻 Let’s take this to your inbox. You’ll receive occasional emails about whatever’s on my mind—offensive security, open source, academics, boats, software freedom, you get the idea.
Servers store, process, and manage data (ServerWatch). They often carry large workloads, such as a single complex application (e.g., a scientific application) or many small tasks (e.g., hosting, retrieving, and sending website files).
Server manufacturers focus on dependability because outages—a temporary suspension of operation—may cause users to lose access to critical data or services (American Heritage Dictionary).
The three most common causes are power supply failure (25%), cybercrime (22%) and accidental human error (22%) according to the Ponemon Institute.
When servers run or manage code, the server consumes energy, time, and money. Increased energy consumption and time translate to less financial gain for server users. Thus, developers may learn about basic low-level programming and computer architecture to improve the efficiency of their code, especially developers running code in the cloud, a global network of servers (Microsoft).
Embedded computers is the largest classification of computer uses. They represent one or more computers inside another device used for running one application or collection of software, for instance, a TV or dishwasher.
The development objective of embedded computers is to minimize cost and power. However, many also have a low failure tolerance since the results vary from “upsetting (when your new television crashes) to devastating (when the computer in a plane or cargo ship crashes)” (Patterson and Hennessy ch. 1).
If you enjoyed this post, I recommend checking out my future assembly posts. This post marks the beginning of a new series where I’ll explore low-level programming and computer architecture. If you’re interested in security content, check out my offensive security work, like Offensive Security Attack Phases and Frameworks.
Patterson, David A., and John L. Hennessy. Computer Organization and Design MIPS Edition: The Hardware/Software Interface. Morgan Kaufmann, 2020.