The protected mode in the x86 architecture

Modern operating systems would not be possible without the ability of a CPU to execute code at different privilege levels. This feature became available for mainstream PCs in the early eighties, when Intel introduced its 80286 and 80386 CPUs, and was readily employed by operating systems like Windows 3.11 and, of course, Linux, which Linus … Continue reading The protected mode in the x86 architecture

Interrupts – the heartbeat of a Unix kernel

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

Get your kernel going – the boot process

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

Networking basics – the layered networking model

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