/ark15

A companion git-repository for the course Machine Architecture 2015 at DIKU

Primary LanguageHTMLOtherNOASSERTION

ARK15: Evolved

This was a companion git-repository for the course Machine Architecture (ARK) at DIKU. It is now being used to continue the development of the course materials. If you have any comments, suggestions, or corrections, feel free to open issues and make pull requests.

Tutorials

Assignments

Introduction

A recurring theme in academia and industry is to question how to squeeze the last ounce of performance out of your digital computer. As the quantitative approach to computer architecture has shown, and as best exemplified by the success of the MIPS architecture, the best choice of computer architecture, depends on what you use computers for.

It is often also much cheaper, easier, and faster, to simulate computer architectures than to build and measure the performance of physical components. (But if you have physical components, use them instead!) The overarching theme for this year’s mandatory assignments is to introduce you to the practice of writing dynamic software simulators for the purposes of later making costly, static hardware choices.

Our language of choice may seem a bit unusual: it is C.

C is, of course, part of the learning objectives for this course. We hope that by using C to simulate hardware, you will grow to appreciate the simplicities, subtleties, and the basic levels of abstraction available in C. The programs you will write will probably get as close to fiddling with bits as a C program can get. At the same time, we will simulate a range of hardware components using high-level data structures in C.

C is not an uncommon choice for simulating machines — it is often the language of choice for simulating languages, such as Ruby and Python. The topic of simulating languages however, is the subject matter for another, exciting DIKU course.

In the end, it is ill-advised to write hardware simulators or programming languages in C. You should deem our use as merely a "teaching hack" — a way to teach you both architecture and C at the same time.

This year’s mandatory assignments also have a much more guided form. Our hope is that you will both learn from, and have a great time solving the assignments. Assignments read like (long) blog posts, and gradually build up your understanding of both MIPS architecture and C. Of course, some of the digging, thinking, coding, and debugging is still left as an exercise for you.

Important Student Notice

Don’t publicly fork this repository, or otherwise make your course work public before you have passed this course.

The Copenhagen University policy is that a student that keeps their work public, is an accomplice to plagiarism, should any other student choose to copy their work.

You are of course, completely safe to clone this repository, and keep a local, working copy, pulling this remote as the course progresses.

Future Work and Future Use

The DIKU courses on Machine Architecture, Operating Systems and Concurrent Programming, and Computer Networks stand to be combined into a one-semester course called Computer Systems, as of fall 2016.

Our changes to the Machine Architecture 2015 course make a first step towards unifying these courses into one coherent whole.

Our goal has been to make sure that students gain sufficient skills in C, and gradually build up a simulator advanced enough to later host an operating system. The next step is to try to build upon these changes in the Operating Systems and Concurrent Programming course, and later, the course on Computer Networks.

Major Contributors

This content was made possible by the hard and enduring work of the entire ARK15 Course Team, and in particular the following members of the team:

A special thanks to Phillip Alexander Roschnowski <glupmjoed@fafnir.dk> for the meticulous proof-reading.