Series Introduction: Computer Architecture Fundamentals
Ever since my last post, I've been struggling with ideas on what to write about. All things considered, my options are somewhat limitless due to the nature of technology. So in the end, there shouldn't be that much of an excuse to pick a topic and write about, right?
Turns out: it kind of can be. You see, I could come up with a series of disjointed posts that are all related by being part of technology. Yet, it lacks a cohesive purpose. The question on whether I'm writing for the sake of pushing out posts, or for providing solid and concise information soon arose.
At the time, I didn't put much thought into answering the question as I've been at a crossroads in my career. Whenever this happens, I often try to learn new skills that will help me out. My current role is that of an embedded systems engineer. The work entails integrating different sensors with embedded Linux devices. Depending on the project, this may also involve forming an IoT network.
Seeking to learn something new, I decided to learn about the objdump
utility. It is a command-line program used in displaying various information about object files. It is often used as a disassembler to view the assembly that makes up a binary executable. After a lot of trial and error, and finally getting the utility to spit out the main section of assembly, I had realized that it was all x86. As mentioned before, I work with embedded Linux devices that run on Arm Cortex-M, so my knowledge of x86 was nil. Even worse, when I had tried to learn more about it, I realized that my knowledge in architecture had dulled! This took me for a surprise, as it hasn't even been a full year since the completion of my Master's degree. As fortune would have it, this was an opportunity in disguise: as I reviewed the core fundamentals of computer architecture, I could compile my notes into a post series!
I currently do not plan on having a set post schedule to adhere to. This is mainly to avoid feeling the pressure of trying to meet a deadline and push out something subpar. But, I can promise that posting will be at least somewhat consistent.
Currently, the idea is to begin with a three-part post that discusses instruction set architectures (ISA). This is due to the fact that ISAs are the interface between the hardware and any software written for it, thus proving to be the most fundamental building block of computer architecture.
AI Disclaimer
The thumbnail image seen through the homepage was generated by DALL-E 3. The following was the prompt used in the generation of the image: User Generate a chip die in the image of the von Neumann architecture. In other words: it should be readily apparent that the image is a chip die, or at the very least a processor core. However, the internals should demonstrated the von Neumann architecture without loss of the chip appearance. The functional blocks should also be labeled as well.
The feature image shown in this article was generated by Stable Diffusion. The following was the prompt used in the generation of the image: A die, in the context of integrated circuits, is a small block of semiconducting material on which a given functional circuit is fabricated. Many of the circuits form distinct functional blocks on the die. These blocks should take on the appearance of a metropolis that receives electricity to properly operate. This is visible through copper traces that run throughout, interconnecting every aspect of the layout.
For those unaware of how computer dies look like, below is a snapshot of computer dies on a silicon wafer chip. The process on how sand becomes a computer chip is super fascinating, and may in fact become a separate post in the future.