Modern operating systems are mostly event driven - network cards receive packets, users hit keys or a mouse buttons, built-in timer create events or data arrives from a hard drive. To be able to process these events, a CPU needs a mechanism to stop whatever it is currently doing and run some code designed to … Continue reading Interrupts – the heartbeat of a Unix kernel
Most careers in operating system development probably start with a seemingly simple task - produce a program that, at start time, takes full control of a computer and prepares for the execution of the actual operating system, i.e. boot the computer. It turns out, however, that - thanks to the complexity of modern x86 based … Continue reading Get your kernel going – the boot process
What happens if you turn on a PC? How is an operating system able to run multiple tasks in parallel? What happens if you hit a key on your keyboard? And what actually is a process? If you have ever thought for more than a second about one of these things, then read on... A … Continue reading Why building an operating system from scratch?
Recently, I picked up an old project of mine - implementing a Unix like operating kernel from scratch. I will post more on this later, but one of the first things I stumbled across when browsing my old code and my old documentation was the networking stack. I used this as an opportunity to refresh … Continue reading Networking basics – the layered networking model