General Information
    
        - Date: Thursday, May 16, 2019
- Time: 4 pm - 6 pm
- Location:
            
                - Dr. Shankar's Sections - IRB
                        0324.  This room is the Antonov Auditorium (AntonovAuditorium.jpg).
                
- Nelson's Sections - BRB
                    1101
                
- Honor's Section: Information will be provided by Dr. Spring.
 
- Duration: 120 minutes
- You need to present your student id card to take the exam.
- Closed-book, Closed-notebooks, No Computers/Calculators.
- Make sure you print your official name and ID on the exam otherwise Gradescope will not recognize it.
- Please Do not remove the exam’s staple. Removing it will interfere with the scanning process
            (even if you staple the exam again).
        
- Please take a look at the general exam rules available at
            exam rules.
        
- After you taken the exam, do not discuss
            anything associated with the exam with other students that have
            not taken the exam yet.
        
- Posting any information in Piazza about the exam after taking it
            is considered an academic integrity violation.
        
Exam Structure
    
        - Short answer questions: This includes for example, multiple
            choice, true/false, and fill-in-the-blank type questions.
        
- Code analysis questions: We will give a short segment of code and
            you may be asked to identify syntax and logical errors, generate code
            output, etc.
        
- Code Writing: Write a program/code snippets to solve a given
            problem. You should be prepared to give a complete program, but we may also
            ask you to provide just a single function or a code fragment.
        
Topics
    
        - Unix - You must be familiar with the following commands
            
                - cp
- ls
- cd
- pwd
- gcc
- rm
- mv
- chmod
- mkdir
- rmdir
- ln -s /* for creating links */
- rm -r
- How to create a compressed gzip archive file
- How to uncompress a tar.gz file
- How to use grep to find patterns in a file
- How to pipe the output of one program to another (e.g., ls | wc)
 
- C Language
            
                - Preprocessor directives (#include, #define)
- Expressions
- Conditional statements
- Loops
- Bitwise operators
- Arrays
- Strings - You are responsible for the following string functions:
                    
                        - strlen
- strcpy
- strcmp
- strcat
- memcpy
- memmove
- memset
 
- Pointers (including function pointers)
- enum
- Structures
- Unions
- Standard I/O. The following cheat sheet will be provided:
                    StandardIOCheatSheet
                
- Functions
- stdin, stderr, stdout
- Linkage
- Command line arguments
- exit
- perror
- err
- Dynamic memory allocation (malloc, free, etc.)
 
- Linked lists(both singly and doubly-linked lists)
- Recursion (both in C and Assembly)
- Memory maps - Please use a style similar to the one provided
            in the following examples:
            
        
- Makefiles - You need to know how to define makefiles using explicit rules.
- Big endian vs. little endian
- AVR Assembly
            
                - Be familiar with instructions used in your exercise(s) and project.
- How to define recursive solutions.
- The following cheat sheet will be provided in the exam
                    Assembly
                        Cheat Sheet.
                
- You are responsible for understanding how to set a frame (as described by the
                    class example
                    frame.S).
                
- 
                    We don't have old exams that rely on AVR assembly, however, you can use
                    assembly problems for Y86 (what you will find in old midterms) to practice.
                    Usually a C function is presented and we ask for an assembly implementation.
                    Instead of providing a Y86 solution, provide an AVR one.
                
 
- Signals - You don't need to write code, but you need to understand signal concepts.
- Process Control
            
                - Multitasking
- User/Kernel Modes
- Process Life Cycle
- Unix I/O
- open()
- close()
- fork()
- wait()
- waitpid()
- pipes
- dup2
- exit
- execlp and execvp (you do not need to worry about the others)
- The following cheat sheet will be provided:
                    Process Cheat Sheet
                
 
- Threads - The following cheat sheet will be provided:
            Threads Cheat Sheet
        
- Time - No time functions, but you need to understand user time,
            system/kernel time, and wall time.
        
- Static and shared libraries - You don't need to write code, but you need to understand library concepts.
        
- Virtual Memory (general concepts about virtual memory)
- Techniques for code optimization
- Data representation (signed, unsigned, 2's complement, etc.)
- gdb (similar to what you did for the debugging quiz)
- valgrind (similar to what you did for the debugging quiz)
The exam will NOT cover the following topics:
    
    Honor Section Students
    
        Information will be provided by Dr. Spring.
    
    Practice Material
    
        Practice material can be found in the grace system under 216public/exams/final. To
        transfer this material to your computer use https://dav.terpconnect.umd.edu.
        Use your directory id/passwd (same one used for grace) to log on.