Ability to write efficient programs
Why does this program run so much faster when the data is sorted?
Needed for some areas
Remove the "Magic"
After this class you should have an understanding of how computers really work, and not view them as "black boxes".
Computers are built in multiple layers of abstraction. These allow us to program them more easily, but make understanding the whole machine more difficult.
In this class, we will study circuits, digital logic, micro-architecture, the instruction set and assembly language programming.
The central processing unit which is responsible for directing all other hardware and carrying out the program to be executed.
The arithmetic logic unit is the part of the CPU that actually carries out computations such as addition, and, or etc.
The control refers to the part of the CPU responsible for keeping track of where in a program we are, what the ALU is doing, and keeping track of various status conditions.
Memory refers to "main" memory - not a hard drive. Memory stores information to be used by the processor.
Devices such as mouse, keyboard, graphics card, hard drive etc.
The big idea behind the von Neumann model is that the instructions which comprise the program are stored as data inside the computer's memory. This moved us away from the idea of fixed-purpose hardware to general-purpose computers.
All computer systems are capable of computing the same things if given enough time and memory. The set of computations which are possible on the first computer you owned are the same as those on a super-computer.
The various computer designs we will evaluate do differ in other ways:
Moore's law is an empirical rule, proposed by Gordon Moore, which says that the number of transistors in a fixed sized integrated circuit doubles every two years.
The speed of a computer chip is partly determined by the distance electricity needs to travel through it, so Moore's law has had the effect of providing exponentially faster computers over the years.
Because of Moore's law, engineers have given us astounding performance gains "for free". The software world has taken advantage of this by creating higher-level, more abstract layers of software.
Moore's law cannot continue indefinitely. We are approaching the physical limits on the size of transistors - transistors are now only a few atoms wide.
Most estimates have Moore's law ending by 2020. After that date, we will no longer get performance "for free" as a result of smaller transistors.
This will make it all the more important to be able to write efficient code, and any performance improvements will have to be made in the realm of computer science.
In the words of Agner Fog on his CPU blog:
“The biggest potential for improved performance is now, as I see it, on the software side. Software producers have been quick to utilize the exponentially increasing power of modern computers that has been provided thanks to Moore's law. The software industry has taken advantage of the exponentially growing computing power and made use of more and more advanced development tools and software frameworks. These high-level development tools and frameworks have made it possible to develop new software products faster, but at the cost of consuming more processing power in the end product. Many of today's software products are quite wasteful in their excessive consumption of hardware computing power.”
We will use the Game Boy Advance as a running case study in this course. We will study the hardware of the system in some detail as well as write programs for it in C and also assembly.
The GBA has some things which make programming it different from most computers:
Copyright © 2019 Ian Finlayson | Licensed under a Creative Commons Attribution 4.0 International License.