<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Let Us Build an Os on Manistein&#39;s Blog</title>
    <link>//manistein.club:80/tags/let-us-build-an-os/</link>
    <description>Recent content in Let Us Build an Os on Manistein&#39;s Blog</description>
    <generator>Hugo -- gohugo.io</generator>
    <managingEditor>1518986465@qq.com (Manistein)</managingEditor>
    <webMaster>1518986465@qq.com (Manistein)</webMaster>
    <lastBuildDate>Wed, 28 May 2025 12:13:41 +0800</lastBuildDate>
    
	<atom:link href="//manistein.club:80/tags/let-us-build-an-os/index.xml" rel="self" type="application/rss+xml" />
    
    
    <item>
      <title>操作系统构建Part9：PLIC外部中断响应机制</title>
      <link>//manistein.club:80/post/computer-system/let-us-build-a-os/%D1%9E%D0%B8part9/</link>
      <pubDate>Wed, 28 May 2025 12:13:41 +0800</pubDate>
      <author>1518986465@qq.com (Manistein)</author>
      <guid>//manistein.club:80/post/computer-system/let-us-build-a-os/%D1%9E%D0%B8part9/</guid>
      <description>&lt;h1 id=&#34;9-1-前言&#34;&gt;9.1 前言&lt;/h1&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;本章将介绍dummyxv6的外部中断响应机制。dummyxv6是运行在RISC-V架构的处理器之上的教学级操作系统，其外部中断机制，主要依赖RISC-V的PLIC（Platform Level Interrupt Controller）来实现。本章首先会介绍PLIC响应外部中断的整体流程；然后在PLIC中断响应机制上，dummyxv6如何处理键盘按键事件，并输出到屏幕上；接着会介绍这些流程的实现代码。
&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>操作系统构建Part8：调度机制</title>
      <link>//manistein.club:80/post/computer-system/let-us-build-a-os/%D1%9E%D0%B8part8/</link>
      <pubDate>Thu, 24 Apr 2025 12:16:22 +0800</pubDate>
      <author>1518986465@qq.com (Manistein)</author>
      <guid>//manistein.club:80/post/computer-system/let-us-build-a-os/%D1%9E%D0%B8part8/</guid>
      <description>&lt;h1 id=&#34;8-1-前言&#34;&gt;8.1 前言&lt;/h1&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;本章的内容，是介绍dummyxv6系统的调度机制。本章先会略过许多代码细节，从高层次阐述调度机制的流程，再展示dummyxv6支撑调度机制的其他细节。在本章配套的代码中，内核运行在只有一个CPU核心的虚拟设备上，内核初始化阶段会创建两个用户进程，这个用户进程将会运行一段无限循环指令，然后通过定时器中断来触发进程切换，最后实现任务调度机制。&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>操作系统构建Part7：页表</title>
      <link>//manistein.club:80/post/computer-system/let-us-build-a-os/%D1%9E%D0%B8part7/</link>
      <pubDate>Sat, 08 Feb 2025 16:23:11 +0800</pubDate>
      <author>1518986465@qq.com (Manistein)</author>
      <guid>//manistein.club:80/post/computer-system/let-us-build-a-os/%D1%9E%D0%B8part7/</guid>
      <description>&lt;h1 id=&#34;7-1-前言&#34;&gt;7.1 前言&lt;/h1&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;上一章读者们学习了dummyxv6的物理内存初始化流程，本章将进入新的章节，本章主要介绍虚拟内存和物理内存的概念，然后介绍虚拟内存和物理内存的映射流程，最后会引入页表的概念，以及dummyxv6如何实现页表功能。&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>操作系统构建Part6：物理内存管理机制</title>
      <link>//manistein.club:80/post/computer-system/let-us-build-a-os/%D1%9E%D0%B8part6/</link>
      <pubDate>Thu, 23 Jan 2025 16:26:21 +0800</pubDate>
      <author>1518986465@qq.com (Manistein)</author>
      <guid>//manistein.club:80/post/computer-system/let-us-build-a-os/%D1%9E%D0%B8part6/</guid>
      <description>&lt;h1 id=&#34;6-1-前言&#34;&gt;6.1 前言&lt;/h1&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;前面的章节介绍了dummyxv6内核的很多基础模块，本章要介绍的是内核的物理内存管理机制。物理内存，即是设备所持有的实际的内存，内核对物理内存进行统一管理，可以方便后续实现进程逻辑的时候的内存分配和回收，因此本章涉及的内容非常重要。现在将逐个章节开始介绍。&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>操作系统构建Part5：自旋锁的设计与实现</title>
      <link>//manistein.club:80/post/computer-system/let-us-build-a-os/%D1%9E%D0%B8part5/</link>
      <pubDate>Thu, 02 Jan 2025 15:32:25 +0800</pubDate>
      <author>1518986465@qq.com (Manistein)</author>
      <guid>//manistein.club:80/post/computer-system/let-us-build-a-os/%D1%9E%D0%B8part5/</guid>
      <description>&lt;h1 id=&#34;5-1-前言&#34;&gt;5.1 前言&lt;/h1&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;截止到上一章，dummyxv6实现的操作系统部分均是在单个核心内跑的逻辑。设想一下，printf函数会按格式要求输出参数到显示设备，这个操作在只有一个核心的CPU上运行是没有问题的，但是如果多个核心并行运行，那么比如hart0正在运行printf相关的指令的时候，hart1也开始执行printf相关的指令，那么hart0涉及的输出内容可能会掺杂hart1正在输出的内容，这显然不是我们想要的结果，为了保证输出操作的原子性，就需要引入锁的概念了。&lt;br /&gt;
&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>操作系统构建Part4：实现初版printf模块</title>
      <link>//manistein.club:80/post/computer-system/let-us-build-a-os/%D1%9E%D0%B8part4/</link>
      <pubDate>Thu, 19 Dec 2024 10:30:08 +0800</pubDate>
      <author>1518986465@qq.com (Manistein)</author>
      <guid>//manistein.club:80/post/computer-system/let-us-build-a-os/%D1%9E%D0%B8part4/</guid>
      <description>&lt;h2 id=&#34;4-1-前言&#34;&gt;4.1 前言&lt;/h2&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;上一章阐述了必须在机器模式下执行的初始化操作，并且介绍了dummy-xv6的内核模块初始化是在main函数里执行的。main函数是在CPU的内核模式下运行的，而本章开始，会陆续往main函数里写入内核模块初始化相关的逻辑。&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;所有的一切，都要从输入输出开始，而输出则需要更早实现，因为没有输出，我们将无法高效率得获得反馈信息，这将极大降低读者们的调试效率。本章要实现的正是初版的printf模块，这个printf模块没有线程安全，因此本章对应的用例也只是在一个核下运行，笔者将在下一章实现自旋锁，然后再完善printf模块的线程安全机制。彼时，读者就能看到完整的内核级别的printf模块了。&lt;br /&gt;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;与IO设备进行通信，需要用到协议，比如UART协议、USB协议等。本章要介绍的是最简单的UART协议，虽然当今市场USB大行其道，但是UART协议还是广泛被使用的，本章首先会着重介绍UART协议的原理，像这种在内核实现的与输入输出设备交互的模块，也被称为驱动。&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>操作系统构建Part3：dummyxv6的初始化流程</title>
      <link>//manistein.club:80/post/computer-system/let-us-build-a-os/%D1%9E%D0%B8part3/</link>
      <pubDate>Tue, 10 Dec 2024 15:14:15 +0800</pubDate>
      <author>1518986465@qq.com (Manistein)</author>
      <guid>//manistein.club:80/post/computer-system/let-us-build-a-os/%D1%9E%D0%B8part3/</guid>
      <description>&lt;h2 id=&#34;3-1-前言&#34;&gt;3.1 前言&lt;/h2&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;第二章详细讨论了RISCV架构的中断机制，本章将回过头来继续探讨第一章讲述的流程。本章的内容比较少，主要是介绍只能在机器模式下进行的初始化流程。&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>操作系统构建Part2：操作系统的结构</title>
      <link>//manistein.club:80/post/computer-system/let-us-build-a-os/%D1%9E%D0%B8part2/</link>
      <pubDate>Thu, 14 Nov 2024 21:52:00 +0800</pubDate>
      <author>1518986465@qq.com (Manistein)</author>
      <guid>//manistein.club:80/post/computer-system/let-us-build-a-os/%D1%9E%D0%B8part2/</guid>
      <description>&lt;h2 id=&#34;2-1-前文回顾&#34;&gt;2.1 前文回顾&lt;/h2&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;上一章，笔者带领大家迅速过了一下一个hello world程序的运行流程，然后粗略介绍了操作系统的概念和作用，接着介绍了dummy-xv6项目，以及RISC-V的通用寄存器和它的调用规范，最后介绍了怎么编译dummy-xv6项目。上一章读者们编译得出了一个名为kernel的可执行文件，细心的读者可能会问，这个kernel是否就代表操作系统？如果不是，它和操作系统是什么关系呢？本章将就操作系统进行更深入的探讨。&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>操作系统构建Part1：初探</title>
      <link>//manistein.club:80/post/computer-system/let-us-build-a-os/%D1%9E%D0%B8part1/</link>
      <pubDate>Tue, 29 Oct 2024 14:29:02 +0800</pubDate>
      <author>1518986465@qq.com (Manistein)</author>
      <guid>//manistein.club:80/post/computer-system/let-us-build-a-os/%D1%9E%D0%B8part1/</guid>
      <description>&lt;h2 id=&#34;1-1-前言&#34;&gt;1.1 前言&lt;/h2&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;在开始阅读本系列之前，读者们不妨先问自己几个问题？&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;你是否对操作系统的运作原理感兴趣？&lt;/li&gt;
&lt;li&gt;你是否阅读了很多资料，却仍然无法对操作系统形成系统性的认知？&lt;/li&gt;
&lt;li&gt;你是否试图尝试动手实践，手写一个简单的操作系统，却又无从下手？&lt;/li&gt;
&lt;li&gt;你是否感觉到，在研究实用的操作系统前，总是感到过于复杂，缺了一块前置的垫脚石？&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;如果你的回答都是否，那么你可能是一位操作系统专家，本系列并不适合你。如果上面的问题中，你有一个，甚至多个回答是“是”，那么不妨多了解一下这个系列。&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;这是笔者继《Lua解释器构建：从虚拟机到编译器》系列之后的新系列，《操作系统构建：从0实现xv6系统》，&lt;a href=&#34;https://github.com/mit-pdos/xv6-riscv&#34;&gt;xv6&lt;/a&gt;系统是美国麻省工程学院开发的一款面向教学的Unix Like操作系统，它旨在向学生展示一个完整而简单的操作系统原型，帮助学生理解操作系统的基本概念。&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;然而，从笔者创建的技术讨论社区来看，xv6尽管已经非常精简，但是对一些新人来说，研究起来还是有一些小费劲。对此，笔者应一部分粉丝的要求，和上一个系列一样，着手拆解xv6操作系统，一步一步实现它，并在原有基础上拓展图形界面，并实现两个能在这个操作系统上跑的小游戏。这个项目笔者将其称之为dummyxv6。&lt;br /&gt;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dummyxv6是一个开源项目，它的地址位于&lt;a href=&#34;https://github.com/Manistein/dummy-xv6&#34;&gt;这里&lt;/a&gt;。欢迎广大读者点击这个链接，并star这个项目。在开始我们的旅程之前，读者需要下载一些软件，整个工程是在运行在Virtual Box上的Ubuntu Server系统上开发，并且在Ubuntu Server上实用QEMU进行运行，验证和调试。因此读者需要下载并安装如下软件：&lt;/p&gt;</description>
    </item>
    
  </channel>
</rss>