Compilers
Notes and programming assignments:
About the programming assignment:
- This introduces TSLNCC (The Simple Language of NIT Compiler Course).
- This introduces LLVM and
shows how to generate LLVM code from TSLNCC programs
(for more information consult
this
page).
- Some of the tests, using which the assignments are evaluated.
Main text:
- A.V. Aho, M.S. Lam, R. Sethi, J.D. Ullman,
Compilers: Principles, Techniques, and Tools, 2nd edition,
Addison Wesley, 2007.
Supplementary resources:
- A.W. Appel, Modern Compiler Implementation in C,
Cambridge University Press, 1998.
Operating Systems
Writing assignments:
- Assignment #1 (deadline 1395/1/30):
exercises 3.8, 3.9, 3.12, 3.15, 3.17, 4.7, 4.8, 4.9, 4.11 from the main text.
- Assignment #2 (deadline 1395/2/8):
exercises 5.8, 5.13, 5.16, 5.18, 5.19, 5.20, 5.32, 5.33, 5.35 from the main text.
- Assignment #3 (deadline 1395/2/22):
6.10, 6.13, 6.15, 6.17, 6.19, 6.23, 6.24.
- Assignment #4 (deadline 1395/3/16):
7.18, 7.22, 8.20, 8.23, 8.28, 9.19, 9.21, 10.10, 10.11.
Notes:
- If you are curious to know how system calls are invoked,
the following files perform system calls
for different architectures in Linux:
X86,
ARM32, and
X86-64.
- To better understand what OS kernels store for each process,
have a look the proc struct in
proc.h for XV6.
- In XV6, proc.c
manages the processes and includes a basic per-processor scheduler.
How does it cope with concurrent accesses to the process table (ptable)?
What is the scheduling algorithm used for choosing the process to run?
- Quizzes.
- Midterm and final exams.
- Optional programming assignments.
Laboratory: assignments
#1,
#2,
#3,
#4,
#5,
#6,
#7 (ex7.c),
#8,
#9 (ex9.c).
Final exam
#1 (f01.c),
#2 (f02.c),
#3 (f03.c),
#4 (f04.c),
#5 (f05.c),
#6 (f06.c).
Main text:
- A. Silberschatz, P.B. Galvin, G. Gagne,
Operating System Concepts, 9th edition,
John Wiley & Sons, 2013.
Supplementary resources:
- A.S. Tanenbaum, H. Bos,
Modern Operating Systems, 4th edition,
Pearson Prentice Hall, 2015.
- R. Cox, F. Kaashoek, R. Morris,
XV6: a simple, Unix-like teaching operating system,
Draft available here.