RSSAmplifier

Blog

Nick Chandler

Recent content on Nick Chandler

nickchandler.devRSS feed ↗11 posts

Latest posts

Taking Interruptions in Stride: Debugging an xv6 Lost Wakeup

A few months ago, I decided to add a stride scheduler to the xv6 operating system, to get a better
understanding of OS schedulers. I wrote a blog post about the experience, including
my code and how it performed. Toward the end of the post, I mentioned some
 odd behavior when running my scheduler on a single-core VM. In
particular, at bootup the OS would hang when starting the…

Anatomy of a Filesystem: xv6

A long time ago (in IT years), I started my professional career as a network engineer. I spent the
next ~10 years troubleshooting, designing, and implementing networks for lots and lots of companies
before I began to transition into DevOps and then software engineering. 
 I was really drawn to networking early on because it just “clicked” with me, for one reason…

Programmatic Comptime Type Creation in Zig

I’ve recently been learning the Zig programming language. I’ve found it to be
a great language as I experiment with systems programming in more depth. It
doesn’t hide much from developers, even when it seems magical at first .
I appreciate this because it forces me to consider the system holistically. 
 One of Zig’s flashiest features is comptime . Comptime…

Zig Type Coercion and the Illusion of Magic Syntax

I have recently been exploring some systems programming languages, with a recent
focus on Zig . It seems like there’s been a lot of buzz about the language
in the past year or so, and I wanted to get some hands-on experience with it to
see what that buzz was all about. In general, I’ve quite enjoyed building a
couple of small projects on Codecrafters using Zig. Whether…

About


 Practicing the craft of systems software. 
 Hello! 👋 I’m Nick - a systems engineer who explores the intersection of operating systems, networking, compilers, and distributed systems. I’m drawn to the parts of computing where ideas meet machinery - where correctness, clarity, and performance all have to coexist. 
 I think of myself as a Systems Toolsmith : someone…

Lab Report: Adding Stride Scheduling to xv6

The xv6 kernel uses a basic round robin scheduler. To understand scheduling more deeply, I replaced it with a stride scheduler. This post compares round robin and stride scheduling, explains how I added it to xv6, and what I learned along the way. 
 
 TL;DR / Key Takeaways
 
 
 Link to heading 
 
 
 
 xv6 uses a simple round robin scheduler that treats all…

xv6 Chapter 2: Operating System Organization

After a bit of an unexpected break, I have been able to get back to my operating systems study. So, let’s take a look at some of the key ideas in chapter 2 of the xv6 book! 
 
 Operating System Organization
 
 
 Link to heading 
 
 
 In the introduction to the chapter, the authors claim: 
 
 [A]n operating system must fulfill three requirements:…

xv6 Chapter 1: Operating System Interfaces

I’ve recently started an effort to learn more about operating systems, particularly Unix-like systems. Modern operating systems offer a lot of incredible capabilities for application programmers, and they can even provide unique ways of delivering applications. For example, containers are largely possible because of Linux capabilities such as namespaces and cgroups. However, I would like to…

Faster Software Development with the Mikado Method

As a software engineer, have you ever faced a complex project where every task seems to depend on another? My team at HashiCorp ran into just that — and found a method that helped us tackle those interdependencies in a way that lets us make smooth progress. Here’s how the Mikado Method improved our workflow. 
 
 The Challenge
 
 
 Link to heading 
 
 
 About a year…

wishr Repo Setup

In the previous post , I described why I’m writing a small Unix shell, which I’m calling wishr , along with a bit of an overview of how I plan to approach the project. I’m excited to get started on the shell, itself, but it’s important to get a new repo set up for success. So, in this post, I’ll go through the initial repository setup I’ve gone with. 
 If…

wishr - A Small Shell Written in Rust

This is the first post in a series where I plan to document my experience writing a small Unix shell in Rust called wishr . In this post, I’ll describe why I’m starting this project and how I plan to proceed through it. 
 
 Why write a shell?
 
 
 Link to heading 
 
 
 First off, to be clear, I have no intention to make a production quality shell: Bash ,…