On Fri, Jan 21, 2011 at 11:15 AM, vorad <vorad.1100@xxxxxxxxx> 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 _______________________________________________ Kernelnewbies mailing list Kernelnewbies@xxxxxxxxxxxxxxxxx http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies