Introduction to Systems Programming in C
What you'll learn
- Understand how to use system calls to accomplish: file manipulation, process control, threads, and syncronization.
- Know how to implement existing functions, such as gcc, by using system calls.
- Review the Unix operating system structure.
- Be able to manipulate files using system calls.
- Understand how processes work between the child and parent.
- Learn proper technique for passing variables into a thread safe function.
- Understand the overlap between processes and threading.
- Know how semaphores are used to solve the bounded buffer problem.
- Be familiar with C programming. Have VirtualBox/Linux installed.
This course is intended to be an introductory course for those interested in systems programming. I tried to keep this course very simple and easy to understand. In order to do that I created this slide deck that is short and concise, with programming example to compliment them. I will introduce you to the main concepts so you will have a strong foundation and base point to dive deeper into these topics and cover additional topics on your own.
General Course Contents
System calls and how they interact with the kernel
File manipulation looking at how to create, delete, and edit files using system call
(briefly) Memory management and how exactly Unix deals with virtual memory addressing
Processes: how to create one and what they are used for.
Threads and how they are used.
Synchronization issues that arise when using processes and threading
Who this course is for:
- Beginners who are interested in systems programming.
- This course is not intended for experienced software engineers.
- Those who need to refresh on C concepts such as: file manipulation, processes, threads, and synronization.
Electrical and Computer Engineering graduate. Currently an embedded software engineer working at a leading automotive technology company. I am primarily interested in the software side of hardware. New to creating courses, but eager to improve on how I present and convey the topics in a clear and concise way.
I am always working on side projects to expand my knowledge on topics such as computer architecture. Knowledgeable on: parallel computing, systems programming, micro controllers, electrical systems and electronics.
Other hobbies include snowboarding, Rubik's cubes and boating.