All assignment submissions must be the sole work of each individual student. Students may not read or copy another student's solutions or share their own solutions with other students. Students may not review solutions from students who have taken the course in previous years. Submissions that are substantively similar will be considered cheating by all students involved, and as such, students must be mindful not to post their code publicly. Any use of electronics or other resources during an examination will be considered cheating.
If you have any doubts about whether a particular action may be construed as cheating, ask the instructor for clarification before you do it. The instructor will make the final determination of what is considered cheating.
Cheating in this course will result in a standard penalty of a failing grade and may be subject to further disciplinary action. Lesser penalties may occur, depending on the circumstances. The penalty will always be worse than if you had not turned in the assignment at all.
Be aware that you may be asked to explain your code to a member of our course staff using only what you have submitted: your comments in the code should be such that you can determine what your code does and why a few weeks later, if needed.
Remember that:
You will work on all assignments by yourself.
Assignments will be auto-graded and must be submitted online using Gradescope
All labs are due 11:59pm on the shown due date.
The late penalty is 10% per day.
Each student has 5 late days for the semester.
You can submit any assignment at most 3 days late.
For each assignment, there is a limit on the number of grace days that can be applied, as is indicated in the table below.
You may resubmit your work until the deadline, with your most recent submission counting for credit.
We highly recommend making partial submissions as you go and not waiting until the last (literal) minute to submit.
We will not return any points lost because you did the lab in a different environment and have not tested it on Gradescope before the deadline.
You should know that fairly sophisticated plagiarism detection software will be used on the programming assignments.
This lab will help you setup the Linux environment required for working on the programming labs.
This lab will help you become more comfortable and familiar with bit-level representations of integers and floating-point numbers. You will do this by solving a series of programming "puzzles".
In this lab, you will gain familiarity with pointers and pointer arithmetic, which are a critical part of the C language and necessary for understanding machine-level representation and memory management.
This lab involves the implementation of a linked list data structure in C, while effectively using explicit memory management and correctly manipulating such pointer-based data structures.
This lab will teach you principles of machine-level programs, as well as general debugger and reverse engineering skills. You will also gain experience with the machine-level stack discipline and will learn about the danger of writing code that is vulnerable to buffer overflow attacks.
This lab will help you understand how cache memories work. For this purpose, you will write a small C program of that simulates the behavior of a cache memory.
In this lab you will be writing a dynamic storage allocator for C programs, i.e., your own version of the malloc and free routines. You are encouraged to explore the design space creatively and implement an allocator that is correct, efficient and fast.