<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Operating Systems on Wokron&#39;s Blog</title>
    <link>https://wokron.github.io/en/categories/operating-systems/</link>
    <description>Recent content in Operating Systems on Wokron&#39;s Blog</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    <copyright>©2022-2026 Yitang Yang. All rights reserved.</copyright>
    <lastBuildDate>Thu, 25 Jun 2026 16:03:51 +0800</lastBuildDate>
    <atom:link href="https://wokron.github.io/en/categories/operating-systems/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>io_uring Internals</title>
      <link>https://wokron.github.io/en/posts/io-uring-raids/</link>
      <pubDate>Thu, 25 Jun 2026 16:03:51 +0800</pubDate>
      <guid>https://wokron.github.io/en/posts/io-uring-raids/</guid>
      <description>A slide deck I made recently, covering some internal implementation details of io_uring.
Click the slides above to navigate, or open directly here.</description>
    </item>
    <item>
      <title>Building a Minimal Linux Filesystem</title>
      <link>https://wokron.github.io/en/posts/custom-linux-kernel-in-qemu-2/</link>
      <pubDate>Thu, 22 Jan 2026 17:24:05 +0800</pubDate>
      <guid>https://wokron.github.io/en/posts/custom-linux-kernel-in-qemu-2/</guid>
      <description>Last time, we covered how to set up a development environment with the latest kernel using QEMU. But after trying it for a while, I found it wasn&amp;rsquo;t very convenient.
More often than not, I just need to run a single program (like a unit test), and the full environment built in the previous article makes this process more complicated. This article introduces a simpler approach. A simple script is all it takes to build a complete runtime environment.</description>
    </item>
    <item>
      <title>Running the Latest Kernel on QEMU</title>
      <link>https://wokron.github.io/en/posts/custom-linux-kernel-in-qemu/</link>
      <pubDate>Sat, 29 Nov 2025 23:03:46 +0800</pubDate>
      <guid>https://wokron.github.io/en/posts/custom-linux-kernel-in-qemu/</guid>
      <description>Recently, I&amp;rsquo;ve been spending my spare time on a systems programming project. Before long I ran into a problem: using the latest kernel features isn&amp;rsquo;t exactly easy. Most distributions lag behind the latest kernel releases, and I&amp;rsquo;m not bold enough to risk upgrading the kernel on my only Linux machine (using the installkernel command). So I needed a way to set up a development environment with a newer kernel while keeping my system safe.</description>
    </item>
    <item>
      <title>Build a Container from Scratch with Namespaces</title>
      <link>https://wokron.github.io/en/posts/simple-container/</link>
      <pubDate>Mon, 13 Oct 2025 10:24:54 +0800</pubDate>
      <guid>https://wokron.github.io/en/posts/simple-container/</guid>
      <description>Container technology is built on three Linux kernel features: Namespaces, Cgroups, and Unionfs. They provide logical resource isolation, physical resource limits, and container filesystems, respectively.
Among these, Namespaces are the most critical. They implement isolation — the most essential aspect of virtualization. Even without Cgroups and with an alternative to Unionfs, you can still achieve much of what a container does, as long as you have Namespaces.
So in this article, we&amp;rsquo;ll try to build a simple container using Namespaces.</description>
    </item>
    <item>
      <title>Linux Users and Users in Containers</title>
      <link>https://wokron.github.io/en/posts/user-perm-and-container/</link>
      <pubDate>Sun, 12 Oct 2025 16:11:53 +0800</pubDate>
      <guid>https://wokron.github.io/en/posts/user-perm-and-container/</guid>
      <description>The era of multi-user operating systems is long over. People today generally don&amp;rsquo;t share computing resources by having multiple users log into the same OS — we have better virtualization technology for that.
But users still serve a purpose, the most important being permission isolation. There&amp;rsquo;s a lot to say on this topic, but we&amp;rsquo;ll focus on just the most critical points. Containers introduce additional quirks around users, which we&amp;rsquo;ll also discuss.</description>
    </item>
    <item>
      <title>Trigger (Almost) Every Signal</title>
      <link>https://wokron.github.io/en/posts/raise-signals/</link>
      <pubDate>Fri, 23 May 2025 17:22:16 +0800</pubDate>
      <guid>https://wokron.github.io/en/posts/raise-signals/</guid>
      <description>Type kill -L and you&amp;rsquo;ll see all the standard signals available on Linux — 31 in total.
$ kill -L 1 HUP 2 INT 3 QUIT 4 ILL 5 TRAP 6 ABRT 7 BUS 8 FPE 9 KILL 10 USR1 11 SEGV 12 USR2 13 PIPE 14 ALRM 15 TERM 16 STKFLT 17 CHLD 18 CONT 19 STOP 20 TSTP 21 TTIN 22 TTOU 23 URG 24 XCPU 25 XFSZ 26 VTALRM 27 PROF 28 WINCH 29 POLL 30 PWR 31 SYS This time, let&amp;rsquo;s try to trigger these signals in their intended scenarios.</description>
    </item>
    <item>
      <title>Linux Process Memory Management</title>
      <link>https://wokron.github.io/en/posts/program-memory-management/</link>
      <pubDate>Sat, 17 May 2025 09:33:11 +0800</pubDate>
      <guid>https://wokron.github.io/en/posts/program-memory-management/</guid>
      <description>We&amp;rsquo;ve all learned that a process&amp;rsquo;s memory consists of the heap and the stack. But this model is still too abstract — it conceals many operating system details. So here&amp;rsquo;s a brief rundown of process memory management.
Heap Growth libc provides the malloc function for heap memory allocation. Under the hood, it relies on the brk system call.
From the kernel&amp;rsquo;s perspective, the heap is a simple structure. It consists of a fixed heap base (the end symbol) and a movable heap top (called the program break).</description>
    </item>
    <item>
      <title>A Brief Discussion on Fonts</title>
      <link>https://wokron.github.io/en/posts/talk-about-font/</link>
      <pubDate>Sun, 05 May 2024 14:08:59 +0800</pubDate>
      <guid>https://wokron.github.io/en/posts/talk-about-font/</guid>
      <description>A while back, I found that Matplotlib couldn&amp;rsquo;t display Chinese characters properly. While solving the problem, I learned a fair bit about how font rendering works. Here are my notes.
1. Encoding and Fonts We know that to store characters in a computer, we assign a numeric code to each character. This artificial convention is called character encoding. Common encodings include ASCII, GBK, Unicode, and so on. Character encoding is the data representation of characters.</description>
    </item>
    <item>
      <title>Introduction to the QEMU Emulator</title>
      <link>https://wokron.github.io/en/posts/qemu-introduction/</link>
      <pubDate>Sun, 21 Jan 2024 14:33:21 +0800</pubDate>
      <guid>https://wokron.github.io/en/posts/qemu-introduction/</guid>
      <description>This article is part of the BUAA Operating Systems course preparatory tutorial. This version was written by me.
In 2024, the course lab environment was changed from GXemul to QEMU. To help students adapt to the new environment, two new articles were added to the preparatory tutorial: &amp;ldquo;GDB: Dissecting Programs&amp;rdquo; and &amp;ldquo;Introduction to the QEMU Emulator.&amp;rdquo;
An operating system is a program that runs directly on computer hardware, managing hardware resources below while providing unified services to software above.</description>
    </item>
    <item>
      <title>GDB: Dissecting Programs</title>
      <link>https://wokron.github.io/en/posts/gdb-tutorial/</link>
      <pubDate>Thu, 18 Jan 2024 19:44:35 +0800</pubDate>
      <guid>https://wokron.github.io/en/posts/gdb-tutorial/</guid>
      <description>This article is part of the BUAA Operating Systems course preparatory tutorial. This version was written by me.
In 2024, the course lab environment was changed from GXemul to QEMU. To help students adapt to the new environment, two new articles were added to the preparatory tutorial: &amp;ldquo;GDB: Dissecting Programs&amp;rdquo; and &amp;ldquo;Introduction to the QEMU Emulator.&amp;rdquo;
Think back to when you first entered the world of programming. Everyone has had this experience: a carefully written program just won&amp;rsquo;t produce the correct result, and even after reviewing the code from top to bottom several times, the hidden bug remains elusive.</description>
    </item>
  </channel>
</rss>
