A printable PDF is also available.

CSC 362-01 – Spring 2023 – Syllabus

Instructor: Stephen R. Tate (Steve)
Lectures: Tues/Thurs 5:30-6:45 (Petty 313)
Office Hours: Tues/Thurs 3:45-5:15 (or by appointment), in-person or virtual – see below
Office: Petty 157
E-mail: – I answer most emails within one business day – do not expect responses evenings or weekends

Note regarding Spring 2023: This class is planned as a fully in-person class, and you are expected to attend lectures in the assigned classroom. There will be no video feed or recordings available. This policy will only change if COVID or other emergencies require it for the entire class.

Office hours are available both in-person (in my office, Petty room 157) or online via Zoom teleconferencing software – a link to the Zoom office hours room is in Canvas. Please be aware that my office is a small enclosed space, and if you are uncomfortable with that you can connect via Zoom. Also, due to my small office space, down a short but narrow side-corridor, you are asked to wait in the more open main hallway if I am meeting with someone else (in person or virtually). If I’m talking to someone online when you arrive, make sure I see you and then I will come out to the main hallway to let you know when I’m available after the online session. I can only meet with one person at a time during office hours.

Unless COVID case counts get high, face coverings (masks) are optional in class and during office visits, but please wear a mask if you have any indications that you might be sick, and stay home if you know you have COVID. If you have concerns and would like me to wear a mask when meeting with you, just ask – I’m happy to accommodate. For us to be able to get back to normal, everyone must do their part to protect both their own health and the health of others. More information COVID-specific class protections and policies is in the university COVID statement at the end of the syllabus.

Class Web Page: https://home.uncg.edu/cmp/faculty/srtate/362.s23/ – some materials in Canvas and in GitHub

Catalog Description: System programming with emphasis on processes, memory management, multithreaded programming, synchronization and deadlocks, interprocess communication, parallel and distributed computing, networking, files systems, security, signals, and virtualization containers.

Prerequisites: Grade of C or better in CSC 230 and CSC 261, or permission of instructor.

Longer Description: This class is a programming-focused class, exploring how programs interact with the operating system and use system and related services. As far as programming level, you can consider it as sitting between CSC 261 (hardware and assembly language) and CSC 130/230 (higher-level programming without hard connection to the underlying system). The class will use C for programming in a Linux environment, interacting with the system through Linux system calls, the standard C library, and support libraries such as pthreads. Since all students have at least a year of programming experience coming into this class, it is expected that you are all competent programmers, although no prior exposure to C or Linux is expected. The class is heavy on specifics and concrete details, and light on theory/generality which will be covered in a later class (CSC 462 – Principles of Operating Systems).

Student Learning Outcomes: Upon successful completion of this course students should be able to

  1. diagram basic process structure and resources, including memory segments, file handles, user/ownership;

  2. use manual memory management techniques for dynamic memory allocation in a program;

  3. create programs that use threads for parallel processing;

  4. create programs that use network sockets for inter-system communication;

  5. create programs that use message passing between different systems for distributed computing;

  6. explain basic security principles, including core goals of confidentiality, integrity, and availability, and subject/object access control;

  7. use virtual machines and containers for isolation.

Textbook and Readings: The required textbook is the following, which is freely available online:

B. Venkatesh, L. Angave, et al., System Programming Coursebook
Available at http://cs341.cs.illinois.edu/coursebook/index.html

Additional readings will be required, and links be provided to students as needed.

Recommended (strongly) computing environment: Students should have a computer that is capable of hosting a modest virtual machine environment using Virtualbox or UTM (for students with newer Macs) – any modern system with at least 8GB of RAM and 40GB free disk space should be fine (Windows, Linux, or MacOS systems will all work). Linux virtual machine images for both Intel and Apple Silicon (M1 and M2) processors will be provided to students so that there is a uniform system environment for all students to use for class work. Students that have such a laptop should bring the laptop to class meetings to participate in in-class programming activities. Alternative arrangements can be made for students without such a computer, but this should only be used if absolutely necessary.

GitHub and GitHub Classroom: Students must have a GitHub account to do activities and submit work. We will spend some time in class going over basic Git and GitHub usage, and students will be given information on class-specific procedures to follow for this class.

Topics: The following are the major topics that will be covered in this class. A detailed schedule, including references to textbook and other readings, is on the class website.

Teaching Methods and Grading: This class will meet for two 75-minute periods per week, where class periods will include a mix of traditional lecture and in-class activities. Activities can consist of instructor-led coding exercises (with students providing code) or student coding exercises using personal laptops. Graded work includes assignments and exams, as described below.

Weekly Assignments: Each week’s topic will include a programming assignment – it must be submitted by midnight on the following Tuesday to be on time, and must be submitted before class (by 5:30PM) the Tuesday after that to be accepted as a late submission. These dates and times will be listed with each assignment in Canvas. These are collaborative, meaning you can discuss solution ideas with other students, but you may not copy any code or answers – all code must be written, compiled, and debugged by you. Note that while these are primarily programming assignments, some will include written questions to answer in a file submitted with your code. Each student will have a single GitHub repository (shared with the instructor) for all weekly assignments, with new directories pushed by the instructor each week. Information and instructions on how to use GitHub will be provided with the first assignment and in class. Before starting each activity, students should do a “git pull” to update their local copy of the repository with the new assignment. Students should use a commit message with the word “Finished” when they have completed the assignment, indicating that it is ready for grading. To avoid any misunderstandings, no other commit message should use the word “Finished.” Always check the GitHub website to make sure you really submitted what you think you submitted! I will grade what is on the main branch at either the on-time deadline (with a “Finished” commit message) or the late deadline — “I forgot to push” or “I had problems with my computer at 11:55” are not excuses that will change deadlines. There are 12 planned weekly assignments, and each student’s lowest two weekly assignment grades will be dropped.

Project: During the final six weeks of the class, students will be assigned a project that they will complete in three phases, adding additional functionality in each phase. This project will pull together several of the individual topics in the class to create a multithreaded, networked server application. The project is to be done on your own, and you may not collaborate with others. The on-time/late policy for the project submissions is the same as for weekly assignments.

Exams: There will be one mid-term exam and one final exam. The midterm exam will be Tuesday, February 28 during the regular class time, and the final exam is scheduled according to the university final exam schedule (May 2, 7:00pm–10:00pm).

Seeking help: When students have problems with assignments or understanding course content, they are encouraged to see the instructor during office hours. That’s what office hours are for, and I’m always happy to help! However, since this is an upper-level class you should be working toward self-sufficiency and solving problems on your own. As such, the first question I am likely to ask if you come to office hours with a problem on an assignment is “Tell me two things you did to try to solve this problem.” This can involve adding print statements to examine variables, running the programmer in a debugger, running the program under Valgrind, etc. In programming there are an almost limitless number of things you can do to figure out why a program isn’t working as expected, and developing those skills is very important for computer science majors. If you seek help without having made any effort to solve the problem yourself, I may send you away to work on it on your own before helping.

Final Grade Calculation: Each student work product will be graded, and the student’s final grade will be determined by assigning each category of work a weighted score according to the following distribution:

Category Pct
Weekly Assignments 30% (two lowest grades dropped)
Project 25%
Mid-term Exam 20%
Final Exam 25%

 

Letter Grade Assignment
[87.5 , 89.5) = B+ [77.5 , 79.5) = C+ [67.5 , 69.5) = D+ [0 , 59.5) = F
[91.5 , ∞) = A [81.5 , 87.5) = B [71.5 , 77.5) = C [61.5 , 67.5) = D
[89.5 , 91.5) = A- [79.5 , 81.5) = B- [69.5 , 71.5) = C- [59.5 , 61.5) = D-

Note that sanctions for violations of academic integrity or disruptive/unprofessional behavior apply to the overall grade and do not follow this percentage breakdown.

Academic Integrity: Students are expected to be familiar with and abide by the UNCG Academic Integrity Policy, which is online at https://academicintegrity.uncg.edu/.

In weekly assignments, you may discuss the problem and solutions with other students and can help classmates debug their code. However, you may not look at a completed solution, and code may not be copied from another student or from a website — all code submitted must have been written by you. If you do work with other students on weekly assignments, you must put their names in the assignment’s README.md file (there is a place for this). The project is an assessment of what you can do, and as such it must be done on your own without help from anyone other than the instructor. If you need help working on the project you can (and should!) contact the instructor for help, but cannot talk with another student or post something online seeking help. Sharing your own work is a serious violation of academic integrity, and if homework is copied then both the person who actually did the work and the person who copied it will be punished. Note that I use a plagiarism detection tool on submissions, and if your solution is too close to that of another student (current or past) or of an online resource, you will be required to explain your solution and how you arrived at it.

Any incidents of academic dishonesty will be handled strictly, resulting in either a zero on the assignment or an F in the class, depending on the severity of the incident, and incidents will be reported to the UNCG Office of Student Rights and Responsibilities. Note that the Department of Computer Science maintains records of all academic integrity incidents, and multiple violations, even in different classes or semesters, will always result in reporting to the university and serious penalties.

Attendance Policy: Attendance will not be taken in class, but is expected. All students are responsible for everything done or said in class (this can include changes in assignments, due dates, etc.). Note that this is a very interactive class, with regular in-class activities, so it is highly unlikely that a student who regularly misses classes will be successful in the course. If attendance becomes a problem, then in-class exercises may be collected and included as part of the assignment portion of the grade.

The university allows for a limited number of excused absences for religious observances. Students who plan to take such an absence should notify the instructor at least two weeks in advance so that accommodations can be made (see the late work policy below). It is the student’s responsibility to obtain notes from another student if they miss class. Office hours are for answering questions about class material, and I will not re-teach a topic during office hours because you missed class.

Late Policy and Makeup Exams: Assignments are due at midnight on the due date, and may be turned in up until the beginning of class the following Tuesday with a 25% late penalty. On the Tuesday following the due date, solutions will be discussed in class, and no assignments can be accepted from any student, for any reason, after that. Students with planned absences, whether for university events, religious observance, or other reasons, are expected to make arrangements with the instructor to turn in assignments or take exams before the scheduled date of the assignment or test.

Exam/test dates will be announced at least two weeks in advance, and an exam may be made up only if it was missed due to an extreme emergency and arrangements are made before the exam date. Exams may not be taken early or late due to personal travel plans.

In-class Behavior: When you are in class you should be focused on the class, and you should act in a professional and mature manner. During class there should be no eating, drinking, e-cigarettes, cellphone use, non-class related laptop use, or anything else that does not pertain to the class activities. Any distracting items may be confiscated at the discretion of the instructor. Students are required to abide by UNCG COVID policies (see below), and will be asked to leave if there is an issue. Significant violations or disruptive behavior will result in points subtracted from a student’s final grade.

ADA Statement: UNCG seeks to comply fully with the Americans with Disabilities Act (ADA). Students requesting accommodations based on a disability must be registered with the Office of Accessibility Resources and Services located in 215 Elliott University Center: (336) 334-5440 (or on the web at https://oars.uncg.edu).

University COVID-19 Policy: As we return for Spring 2023, please uphold UNCG’s culture of care to limit the spread of COVID-19 and other airborne illnesses. These actions include, but are not limited to:

Health and well-Being: Health and well-being impact learning and academic success. Throughout your time in the university, you may experience a range of concerns that can cause barriers to your academic success. These might include illnesses, strained relationships, anxiety, high levels of stress, alcohol or drug problems, feeling down, or loss of motivation. Student Health Services and the Counseling Center can help with these or other issues you may experience. You can learn about the free, confidential mental health services available on campus by calling 336-334-5874​, visiting the website at https://shs.uncg.edu/ or visiting the Anna M. Gove Student Health Center at 107 Gray Drive. For undergraduate or graduate students in recovery from alcohol and other drug addiction, the Spartan Recovery Program (SRP) offers recovery support services. You can learn more about recovery and recovery support services by visiting https://shs.uncg.edu/srp or reaching out to recovery@uncg.edu

Elasticity Statement: It is the intention of the instructor that this syllabus and course calendar will be followed as outlined; however, as the need arises there may be adjustments to the syllabus and calendar. In such cases, the instructor will notify the students in class and via e-mail with an updated syllabus and calendar within a reasonable timeframe to allow students to adjust as needed.