Final Exam
Online, 3 hours, Thu 5/13 9:00 AM - noon
The final will be short answer / multiple choice, and will be
taken online in Gradescope.
You will have three hours to complete the exam.
If you need to take the exam at a time other than officially scheduled,
you must request a time change from the registrar (via TigerHub).
We are very willing to work with you to accommodate alternate times.
Once you begin the exam, you must complete it in one
contiguous 3-hour session. Gradescope will display
the time remaining - when time runs out, it will end the exam.
(Your answers are autosaved as you enter them, though we don't recommend
answering questions until the very last second...)
Rules
This will be a closed-book, closed-note exam, and "cheat sheets" are
not allowed. During the exam you must not refer to the
textbook, course materials, notes, or any information on the Internet,
You may not compile or run any code on armlab or any other machine.
The exam will emphasize application of concepts and not memorization,
so you will be provided with information such as manual pages, C operator
precedence tables, etc. if they are necessary.
You are not allowed to communicate with any other person,
whether inside or outside the class. You may not send the exam
problems to anyone, nor receive them from anyone, nor
communicate any information about the problems or their topics.
If you have technical issues or need to ask a clarifying question
about the wording of some problem, please post a private message
on Ed.
Because students may be taking the exam late, please do not post
any questions to Ed regarding topics that might be on the exam
starting Thursday morning.
You will be required to type out and sign an honor code pledge that
you did not use any unauthorized sources of information during the
exam.
Topics
You will be responsible for material from the entire course, including
the content of required readings, lectures, precepts, and assignments.
All questions will assume the ArmLab/Linux/C/gcc217 environment unless
otherwise stated. The second half of the course (since the midterm)
will be emphasized.
Major topics include (topics since the midterm in blue):
- Number Systems
- Binary, octal, hexadecimal number systems
- Unsigned integers: finite representation and operations
- Signed integers: finite two's complement representation and operations
- Overflow
- C Programming
- The program preparation process: preprocess, compile, assemble, link
- Program structure: multi-file programs using header files
- Statements
- Operators
- Input/output of standard streams and files,
for text and binary data:
getchar(), fgetc(), putchar(),
fputc(), gets(), fgets(),
puts(), fputs(), scanf(),
fscanf(), printf(), fprintf(),
fopen(), fclose(), fwrite(),
putc()
- Data types
- Variable declarations and definitions, including scope,
linkage, and duration / extent
- Process memory layout: text, stack, heap, rodata, data, bss sections
- Constants: #define, constant variables, enumerations
- Function declarations and definitions
- Arrays and pointers, call by reference, arrays as parameters, strings
- Command-line arguments
- Structures
- Dynamic memory management: malloc() and free()
- Common errors: dereference of dangling pointer, memory leak, double free
- Generic data structures and functions, void pointers, function
pointers
- Under the hood: language levels
- High-level languages vs assembly language vs machine language
- Von Neumann computer architecture, RAM, CPU, ALU, registers
- Little-endian vs big-endian byte order
- AARCH64 architecture: general-purpose and special registers
- AARCH64 assembly language: directives, labels,
load/store/manipulation instructions, control flow
- Accessing variables in data, rodata, bss, and stack
- Accessing array and struct variables; addressing modes
- AARCH64 function call conventions: bl and ret instructions,
the x30 register, arguments, return values
- AARCH64 local variables: on stack vs in callee-saved registers
- AARCH64 machine language: instruction formats, layout after
assembly, layout after linking
- Programming techniques and tools
- git and source code management
- make and build management
- Testing
- gdb and debugging, including for assembly language
- Profiling with gprof
- Optimization
- objdump
- Data structures: linked lists, hash tables, dynamically
expanding arrays
- Abstract data types and objects
- Deterministic finite-state automata (DFA)
- Symbol tables, directory and file trees, bigint addition,
buffer overrun
- Modularity, separation of interface and implementation
Questions from Previous Semesters
A good way to practice for the exam is to go over questions from
previous COS 217 final exams. Be aware that both the content of
the course and the format of the final do change over the years,
so not all questions are guaranteed to be 100% relevant, or good
practice for this year. If you have any questions about whether the
content of a question would be fair game for this year, please ask
on Ed.
Review and Q&A
There will be review and Q&A sessions scheduled in the days
immediately after Dean's date:
The Q&A session on 5/11 will prioritize answering questions from lectures, with the remainder spent on working questions from the posted exams. The Q&A session on 5/12 will prioritize working the Fall 2020 exam and the Spring 2019 exam Q1 and Q3, with the remainder spent on working questions from the other posted exams.
Watch this space and Ed for any additional announcements.