General Information

  • Time: Mon/Wed 14:30 – 16:00 (EE209A)

    • Zoom Link:
  • Instructors:
    • Youjip Won (EE209A), ywon (at),
      • Office hour: Mon/Wed 16:00-17:00 (Right after class on zoom, or make an appointment)
    • KyoungSoo Park (EE209B), kyoungsoo (at),
  • Teaching Assistants: 
    • EE209A: Joontaek Oh (na94jun (at), Jieun Kim (pipiato (at), Minsu Jang (nobleminsu (at), Dongsuk Oh (ods1108 (at), Haney Kang (haney1357 (at), Gyeong Ho Lee (gyeongho (at)
    • EE209B: Duckwoo Kim (0731kdw (at), Youngmin Choi (youngminchoi94 (at), Youngjin Jin (ijinjin (at), Hyunmin Seo (shm9574 (at), Seongmin Song (songsm87 (at)
    • Extra TAs: Seonhoon Lee (EE209A) (sun-man (at), Seung Ho Na (EE209B) ( (at), Jaehan Kim (EE209B) (rlawogks145 (at)
  • Lab Machines: ~ (Your student ID is your login ID. Your password will be given in class)


This course provides the basic background necessary to understand the design and implementation of software components that support modern computer systems. The course covers C programming, machine organization, assembly language, and design, testing and debugging of software components as well as portions of operating systems concepts. Students will also learn how to use text editors, compilers, linkers, debuggers, and other software tools.


Period Topic Assignments
Week 1 (3/3) Lecture 1. Introduction to C Programming
Week 2 (3/8) Data Types
(3/10) Data Types
Week 3 (3/15) Operators
(3/17) Operators
Week 4 (3/22) Flows of Control
(3/24) Flows of Control
Week 5 (3/29) Functions, Arrays
(3/31) Functions, Arrays
Week 6 (4/5) Pointers
(4/7) Pointers
Week 7 (4/12) Pointers & Functions, Strings
(4/14) Pointers & Functions, Strings
Week 8 Midterm 
Week 9 (4/26) Lecture 11: Modularity ([C]: 19)
(4/28) Lecture 12: Assembly language I ([CS]: 3.1-3.6)
Week 10 (5/3) Lecture 13: Assembly Language II ([CS]: 3.1-3.6)
(5/5) Children’s Day
Assignment 3 (Due: 5/7 23:59)
Week 11 (5/10)  Lecture 14: Assembly Languages – Functions ([CS]: 3.7-3.8)
(5/12) Lecture 15: Assembly Languages – Linkers
([CS]: 3.7-3.8)
Assignment 4 (Due: 5/28 23:59)
Week 12 (5/17)  Lecture 16: Exceptions & Processes ([CS]: 8.1-8.3)
(5/19) Buddha’s Birthday
Week 13 (5/24) Lecture 17: Memory Management ([CS]: 6.1-6.4, 9.1-9.6)
(5/26) Lecture 18: Dynamic Memory Management
([CS]: 9.8-9.11)
Week 14 (5/31) Lecture 19: IO Management ([CS]: 10)
(6/2) Lecture 20: Process Management ([CS]: 8.4)
Week 15 (6/7) Lecture 21: Signals ([CS]: 8.5)
(6/9) Lecture 22: Performance ([CS]: 5)
Week 16 (6/14) No Lecture
(6/16) Final Exam (online, 1:00-3:45pm)
Assignment 5 (Due: 6/20 23:59)

Fianl Exam (6/16 1:00-3:45 PM)


You are strongly advised to take EE485. Introduction to Environments and Tools for Modern Software Development, which replaces “precepts” in the past courses. EE485 would teach all programming tools required to do programming assignments in EE209. We do not plan to spend much time on Linux commands or gdb options in the class.


  • Class participation (5%), Mid-term Exam (20%), Final Exam (20%), Five Programming Assignments (55%)


  • Programming Assignments

We will do five programming assignments. The first four programming assignments take up 10% of your total grade, and the fifth assignment takes up 15% of your total grade. Some assignments provide extra credit beyond your total grade.

  • Assignment Submission (Important)

Use KAIST KLMS to submit your assignments. Your submission should be one gzipped tar file whose name is


For example, if your student ID is 20201234, and it is for assignment #3, please name the file as


To create the .tar.gz, first move all your files to the directory (20091234_assign3).

mkdir 20201234_assign3
mv all_your_files 20201234_assign3

Then, create a .tar.gz file by the ‘tar’ command like

tar zcf 20201234_assign3.tar.gz 20201234_assign3

Then, you’ll see 20201234_assign3.tar.gz. If you want to decompress and release the files in it (in a different directory),

tar zxf 20201234_assign3.tar.gz

  • Late Submission Policy

Students can use late submission (late pass) which can be late up to three days without penalty for the first four programming assignments. That is, you can apply your late submission days (within 3 days in total) spread over the first four programming assignments. The smallest granulaity is one day: if you are 1 hour late, that’s still counted as one day late. If you’re going to spend your free late days, please say so in your readme file. Beyond the free late days, we will enforce this penalty rule for each assignment. One will get

  • 95% of the full credit up to 3 hours late,
  • 90% of the full credit up to 6 hours late,
  • 85% of the full credit up to 12 hours late,
  • 75% of the full credit up to 24 hours late,
  • 50% of the full credit up to 48 hours late,
  • 0% of the full credit beyond 48 hours late

We will grant extensions only in case of illness(with doctor’s note) or extraordinary cicrumstances. In case you are submitting your work late due to illness or extraordinary circumstances, please consult with the instructor as soon as possible. Please plan ahead (travel, religious holidays, etc.) to meet the deadlines. Note that heavy workload is not counted as extraordinary cicrumstances. Once again, there is no late submssion allowed for the final assignmentAny late submission for the final assignment will result in zero credit.

  • Coding Style

Good coding style will be one criterion for grading each assignment. Please make sure your code has proper indentation and descriptive comments. At the start of each file, please add your name, lab account ID and the description of the file. Make sure not to leak any memory and check/handle every return value of function calls.

  • Assignment Grading

Your submission will be graded on one of the Lab machines for the course. You are free to use other machines for coding and debugging, but please make sure to compile and test your final version on the Lab machines. In a rare case, library mismatch or O/S stack difference (Mac/Windows vs. Linux) can bypass some of your bugs, but they can actually show up on the Lab machines while grading. In order to avoid this last-minute surprise, please test on Lab machines before submitting your work.

Course Policy

  • Receiving help from others:  Programming is an individual creative process much like composition. You must reach your own understanding of the problem and discover a path to its solution. During this time, discussions with other people are permitted and encouraged. However, when the time comes to write code that solves the problem, such discussions (except with course staff members) are no longer appropriate: the code must be your own work. If you have a question about how to use some feature of C, Unix, etc., you certainly can ask your friends or the teaching assistants, but specific questions about code you have written must be treated more carefully.For each assignment you must specifically state, in your readme file, the names of any individuals from whom you received help, and the nature of the help that you received. That includes help from friends, classmates, lab TAs, course staff members, etc.Do not, under any circumstances, copy another person’s code. Incorporating someone else’s code into your code in any form is a violation of academic regulations. This includes adapting solutions or partial solutions to assignments from any offering of this course or any other course. There is one exception to the code-sharing rule: You may adapt code from the EE 209 course materials provided that you explain what code you use, and cite its source in your readme file.Copying and transforming someone else’s code (by rearranging independent code, renaming variables, rewording comments, etc.) is plagiarism. Some inexperienced programmers have the misconception that detecting such plagiarism is difficult. Actually, detecting such plagiarism is quite easy. Not only does such plagiarism quickly identify itself during the grading process, but also we can (and do) use software packages, such as Alex Aiken’s renowned MOSS software, for automated help.If a student is confirmed to commit plagiarism on an assignment, then the standard penalty is automatic failure (F) of the EE 209 course.


  • Providing help to others: Abetting plagiarism or unauthorized collaboration by “sharing” your code is prohibited. Sharing code in digital form is an especially egregious violation. Do not e-mail your code or make your code available to anyone. Do not share your code with anyone even after the due date/time of the assignment.You are responsible for keeping your solutions to the EE 209 programming assignments away from prying eyes. If someone else copies your code, we have no way to determine who is the owner and who is the copier. If you are working on a public lab computer, make sure that you do not leave the computer unattended, and that you delete your local files and logout before leaving. You should store all of your assignment files in a private directory. You can create a private directory using commands similar to these:
    % mkdir ee209
    % chmod 700 ee209


  • Exam Conduct: If we find a student commits inappropriate conduct during an in-class exam, the standard penalty is automatic failure (F) of the EE 209 course.


  • Tools: Tool is essential components of Operating System development. You should make yourself familiarized with them. These tools have been around for a few decades. Still, they are one of the most popular tools preferred by the system software developers.
    • ctags (video) (ppt) : You have to navigate though hundreds of files looking for the definitions and declarations of various function. ctags is a classic tool to allow you to search through a number of files distributed over multiple directories.
    • cscope (video) (ppt) : cscope is similar to ctags but has more advanced feature. The cscope has reverse search. Sometimes, you want to search the functions that calls a given function, e.g. test(). You can perform this task with cscope.
    • gdb (video) (ppt), git, bash shell, qemu
    • PC assembly language (pdf)


  • Precepts: We used to teach precepts in the past EE209 courses. In precepts, you learn auxilliary materials required to do the programming assignments (e.g., Linux commands, gcc, gdb, Makefile, etc.). However, we do not teach precepts anymore as these contents have become a separate course, EE485: Introduction to Environments and Tools for Modern Software Development, and you are highly encouraged to take this 1-credit, pass-or-fail course.If you still feel like browsing the old precepts, here is the link.