System programming is the act of writing a software that manages systems. Unlike application programming - the system programmer does not create a service that is consumed by an end user but instead she creates a service or a library that can be consumed by other software.
A system programmer is often required to deal with concepts close to the hardware level, like registers and memory locations. She may be concerned with data transfer - protocols and media. She is also required to write a fast, compact and efficient systems. In order to do so - a system programmer must understand thoroughly the Run Time Environment (RTE) that she programs for.
In many scenarios, application programmers are also required to some system programming skills - both in order to consume services from other systems and in order to write more efficient applications - such that will be able to run on modern computers, smart phones, web browsers, etc.
As discussed before, The key for a good system programmer is to understand RTEs and how the programs we write interact with the RTE that executes them. There are many different types of RTEs – but all have a similar structure and the interaction between the RTE and the program follows a general scheme.
In this course, we will review the following main services provided by RTEs to the programs they execute:
In this course we will use the following languages: