Learning to program at the operating system level

Javier Martinez Canillas martinez.javier at gmail.com
Fri Jan 21 05:57:31 EST 2011

On Fri, Jan 21, 2011 at 11:15 AM, vorad <vorad.1100 at gmail.com> wrote:
> I was recently reading some old LWN article[1] about a realtime workshop in
> which was stated that the academia doesn't prepare CS graduates for working
> with the development community and more over, they don't know to program at
> the operating system level.

I think that the critic is more that the CS graduates don't know how
things works, they only know how to program in a specific computer
language. In some places CS is a major that last 5 years while others
reduce it to 3 years. So there is a two year gap to fill in education.
The problem is not only at the OS level but also in other areas like
networking, compilers, theoretical computer science and mathematics. I
have meet some Phd students that don't know what a Turing Machine or a
Context Free Grammar is, can't understand the different between the
network and data link layer or don't know what a probability function
is. This is because in some places CS is like an Engineering major
while in other places is more a Developer major. So they don't know
basic stuff.

> What does programming at the operating system level mean and what does it
> involve ?

Programming at the operating system level means programming your
operating system kernel. The kernel is the software that administer
your computer resources (CPU, Memory, I/O) and offers services to
programs so they don't have to deal with the real hardware.

How's that different than what's currently happening in software
> development, what are the constraints and what should an engineer expect
> when it enters the realm of OSs ?
> Thanks!

The operating system give processes an extended view of the machine.
The hardware is hidden in layers that makes it easy to use it without
having to worry about hardware characteristics. For example you use a
file system to store data and don't have to worry if you write to a
SATA disc or a USB storage device. Also many resources are virtualized
to make processes believe that the are the only ones using them. For
example virtual memory  and scheduling creates the illusion that we
can use the whole memory address space and are the only one executing
on the CPU. Also in a robust operating system, no matter what a
process do, it shouldn't affect other processes execution.

These are luxuries that only exists in user space, someone that is
developing in kernel space have less abstractions and any error can
take the whole system down. Also one have to deal with concurrent
access to shared resources across different CPUs and execution
contexts (process and interrupt).

Best regards,

Javier Martínez Canillas
(+34) 682 39 81 69

More information about the Kernelnewbies mailing list