Explore hardware/software components, assembly language, and the functional architecture and design of computers, with a focus on topics like instruction sets, processor arithmetic and control, Von Neumann architecture, pipelining, memory management, storage, and input/output.
Course Introduction
Modern computer technology requires an understanding of both hardware and software, since the interaction between the two offers a framework for mastering the fundamentals of computing. The purpose of this course is to cultivate an understanding of modern computing technology through an in-depth study of the interface between hardware and software. In this course, you will study the history of modern computing technology before learning about modern computer architecture and a number of its essential features, including instruction sets, processor arithmetic and control, the Von Neumann architecture, pipelining, memory management, storage, and other input/output topics. The course will conclude with a look at the recent switch from sequential processing to parallel processing by looking at the parallel computing models and their programming implications.
This course includes the following units:
Unit 1: Introduction to Computer Theory
Unit 2: Instructions: Hardware Language
Unit 3: Fundamentals of Digital Logic Design
Unit 4: Computer Arithmetic
Unit 5: Designing a Processor
Unit 6: The Memory Hierarchy
Unit 7: Storage and I/O
Unit 8: Parallel Processing
Unit 9: Look Back and Look Ahead
Course Learning Outcomes
Upon successful completion of this course, you will be able to:
identify important advances that have taken place in the history of modern computing, and discuss some of the latest trends in the computing industry;
explain how programs written in high-level programming languages, such as C or Java, can be translated into the language of the hardware;
describe the interface between hardware and software, and explain how software instructs hardware to accomplish desired functions;
explain the process of carrying out sequential logic design;
explain computer arithmetic hardware blocks and floating-point representation;
explain how a hardware programming language is executed on hardware and how hardware and software design affect performance;
explain the factors that determine the performance of a program;
explain the techniques that designers use to improve the performance of programs running on hardware;
explain the importance of memory hierarchy in computer design, and explain how memory design impacts overall hardware performance;
describe storage and I/O devices, their performance measurement, and redundant array of inexpensive disks (more commonly referred to by the acronym RAID) technology; and
identify the reasons for and the consequences of the recent switch from sequential processing to parallel processing in hardware manufacture, and explain the basics of parallel programming.
Throughout this course, you will also see learning outcomes in each unit. You can use those learning outcomes to help organize your studies and gauge your progress.
Course Materials
The primary learning materials for this course are articles, lectures, and videos.
All course materials are free to access and can be found in each unit of the course. Pay close attention to the notes that accompany these course materials, as they will tell you what to focus on in each resource, and will help you to understand how the learning materials fit into the course as a whole. You can also see a list of all the learning materials in this course by clicking on Resources in the navigation bar.
Evaluation and Minimum Passing Score
Only the final exam is considered when awarding you a grade for this course. In order to pass this course, you will need to earn a 70% or higher on the final exam. Your score on the exam will be calculated as soon as you complete it. If you do not pass the exam on your first try, you may take it again as many times as you want,
COURSE MODULES
In this unit, we will discuss some of the advances in technology that led to the development of modern computers. We will begin our study with a look at the different components of a computer. We will then discuss the ways in which we measure hardware and software performance before discussing the importance of computing power and how it motivated the switch from a single-core to a multi-core processor.
Completing this unit should take you approximately 7 hours.
In order to understand computer architecture, you need to understand the components that comprise a computer and their interconnections. Sets of instructions, called programs, describe the computations that computers carry out. The instructions are strings of binary digits. When symbols are used for the binary strings, the instructions are called assembly language instructions. Components interpret the instructions and send signals to other components that cause the instruction to be carried out.
In this unit, you will build on your knowledge of programming from CS102: Introduction to Computer Science II to learn how to program with an assembly language. You will use the instructions of a real processor, MIPS, to understand the basics of hardware language. We will also discuss the different classes of instructions typically found in computers and compare the MIPS instructions to those found in other popular processors made by Intel and ARM.
Completing this unit should take you approximately 9 hours.
We will begin this unit with an overview of digital components, identifying the building blocks of digital logic. We will build on that foundation by writing truth tables and learning about more complicated sequential digital systems with memory. This unit serves as background information for the processor design techniques we learn in later units.
Completing this unit should take you approximately 9 hours.
In this unit, you will build upon your knowledge of computer instructions and digital logic design to discuss the role of computer arithmetic in hardware design. We will also discuss the designs of adders, multipliers, and dividers. You will learn that there are two types of arithmetic operations performed by computers: integer and floating point. Finally, we will discuss floating point details for carrying out operations with real numbers.
Completing this unit should take you approximately 5 hours.
In this unit, we will discuss various components of MIPS processor architecture and then take a subset of MIPS instructions to create a simplified processor in order to better understand the steps in processor design. This unit will ask you to apply the information you learned in units 2, 3, and 4 to create a simple processor architecture. We will also discuss a technique known as pipelining, which is used to improve processor performance. We will also identify the issues that limit the performance gains that can be achieved from it.
In previous units, you learned about how computer memory stores information, in particular how numbers are represented in a computer memory word (typically, 32 or 64 bits); hardware elements that perform logic functions; the use of these elements to design larger hardware components that perform arithmetic computations, in particular addition and multiplication; and the use of these larger components to design additional components that perform subtraction and division. You also looked at machine language and assembly language instructions that provide control to hardware components in carrying out computations. In this unit, you will learn about how the larger components are used in designing a computer system.
Completing this unit should take you approximately 5 hours.
This unit will address several advanced topics in computer architecture, focusing on the reasons for and the consequences of the recent switch from sequential processing to parallel processing by hardware producers. You will learn that parallel programming is not easy and that parallel processing imposes certain limitations in performance gains, as seen in the well-known Amdahl's law. You will also look into the concepts of shared memory multiprocessing and cluster processing as two common means of improving performance with parallelism. The unit will conclude with a look at some of the programming techniques used in the context of parallel machines.
Completing this unit should take you approximately 3 hours.
This unit looks back at important concepts of computer architecture that were covered in this course and looks ahead at some additional topics of interest. Computer architecture is both a depth and breadth subject. It is an in depth subject that is of particular interest if you are interested in computer architecture for a professional researcher, designer, developer, tester, manager, manufacturer, etc. and you want to continue with additional study in advanced computer architecture. On the other hand, computer architecture is a rich source of ideas and understanding for other areas of computer science, giving you a broad and stronger foundation for the study of programming, computer languages, compilers, software architecture, domain specific computing (like scientific computing), and more.
In this unit, you will look back at some of the theoretical laws and analysis techniques that were introduced during the course. Looking ahead, you will be introduced to special purpose processors, application specific processing, high volume data storage, and network computing.
Completing this unit should take you approximately 1 hour.