
Re:从零开始的操作系统生活
文章平均质量分 94
参考《一个64位操作系统的设计与实现》,记录学习的过程
亭墨
一名喜欢轮滑,古风,横笛,准就职于字节跳动,做着操作系统开发的电子科大生医工在读硕士,成分极其复杂,致力于分享秋招经验,C/C++,操作系统内核,计算机组成原理,系统虚拟化技术等内容的分享,偶尔会更新脑影像科研博文。知乎同名,望各位关注这个博主,拜托啦,这对我真的很重要!!!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
linux0.11内核源码修仙传第十六章——获取硬盘信息及根目录挂载
这篇博客就主要讲了setup函数的内容,获硬盘信息以及加载根文件。原创 2025-05-09 19:31:37 · 778 阅读 · 0 评论 -
linux0.11内核源码修仙传第十五章——文件系统
众所周知,文件的内容是存储在硬盘上的,那么具体怎么个存放呢?在用户眼里,文件是一串字符流,从硬件的角度来说,文件是存储在磁盘上的(磁道+扇区+柱面)。将字符流与磁盘进行映射。只有建立起来这个映射关系,这个映射关系在用户视角里面就是文件路径(如/home/user/document/test.txt)。这样就可以依据这个唯一的映射关系找到磁盘上文件所在位置,进而进行读取或者修改。原创 2025-04-29 12:08:33 · 791 阅读 · 0 评论 -
linux0.11内核源码修仙传第十四章——进程调度之fork函数
本文有点长,主要是创建进程时的一些动作,即`fork`函数,通过系统中断,调用系统函数`sys_fork`创建进程,在这个过程中复制了父进程,即进程0,之后在task数组中找到一个空的位置,并向内存申请空间,设置自己的独特属性和上下文,最后就是内存规划,包括内存拷贝,页表拷贝等等。原创 2025-04-15 16:04:00 · 986 阅读 · 0 评论 -
linux0.11内核源码修仙传第十三章——进程调度大战前夕
这一章讲了很多东西,来做个回顾:首先我们自己设计了一下进程调度的规则,直到怎么保存上下文,设置进程运行优先级,规定了进程的几种状态。接下来从定时器的角度看进程调度,看了定时器中断函数,与进程调度函数。原创 2025-04-03 11:04:53 · 850 阅读 · 0 评论 -
linux0.11内核源码修仙传第十二章——内核态到用户态
本文重要的一些点:1. 首先是关于特权级,其实本质就是比较CPL,RPL与DPL之间的关系。2. 特权级的转换是通过中断返回实现的,这个中断返回不需要中断调用,只需要模拟中断发生,往栈里面压5个值即可。3. 进入用户态后就会一直在用户态,只有中断才可以进入内核态,而后又会回到用户态。原创 2025-03-31 22:09:50 · 913 阅读 · 0 评论 -
linux0.11内核源码修仙传第十一章——硬盘初始化
整个操作系统就是一个靠中断驱动的死循环而已,如果不发生任何中断,操作系统会一直在一个死循环里等待。换句话说,让操作系统工作的唯一方式,就是触发中断。原创 2025-03-28 16:08:30 · 973 阅读 · 0 评论 -
linux0.11内核源码修仙传第十章——进程调度始化
本文就干了三件事:第一,我们往全局描述符表写了两个结构,TSS 和 LDT,作为未来进程 0 的任务状态段和局部描述符表信息。第二,我们初始化了一个结构为 task_struct 的数组,未来这里会存放所有进程的信息,并且我们给数组的第一个位置附上了 init_task.init 这个具体值,也是作为未来进程 0 的信息。第三,设置了时钟中断 0x20 和系统调用 0x80,一个作为进程调度的起点,一个作为用户程序调用操作系统功能的桥梁。原创 2025-03-27 17:35:35 · 910 阅读 · 0 评论 -
linux0.11内核源码修仙传第九章——时间初始化
本文是一个很简单的模块——时间初始化。其核心就是CPU访问外设是通过端口的,先向端口写入一个指令表示我要干什么,然后再去另一个端口读取反馈数据。原创 2025-03-25 14:16:49 · 538 阅读 · 0 评论 -
linux0.11内核源码修仙传第八章——控制台初始化
本文主要介绍了开启键盘中断,使得我们可以与控制台进行交互,同时如何将字符显示到屏幕上。其中字符显示到屏幕上的本质就是映射一部分内存为显存,然后往该内存里面写东西就可以显示到屏幕上。对于其中输入位置以及滚动,清屏,换行等操作则是通过代表屏幕坐标的x,y以及对应位置的内存坐标指针pos进行算法编写实现的。原创 2025-03-21 16:55:13 · 993 阅读 · 0 评论 -
linux0.11内核源码修仙传第七章——块设备请求项初始化
块设备(Block Device)承载了文件系统的运行,管理磁盘存储的核心逻辑。其是Linux中用于存储数据的硬件抽象,允许以固定大小的块(512字节或4KB)为单位进行数据读写。区别于字符设备,块设备支持随机访问,适合磁盘存储设备,如硬盘,固态硬盘,U盘,虚拟块设备等,可以通过lsblk指令查看。本文讲的较少,主要就是讲了块设备的初始化,实际上就是初始化request数组,这个结构里面指定了操作是读还是写,从哪里读写,内存里面的位置在哪。原创 2025-03-11 11:37:49 · 850 阅读 · 0 评论 -
linux0.11内核源码修仙传第六章——中断初始化
中断的基本概念很简单,就是在做某件事情的时候突来来了另一件事情要立刻去做或者稍后去做。其实整个操作系统就是一个中断驱动的死循环,依据第四章的内容(linux0.11内核源码修仙传第四章——操作系统的框架代码...for(;;) pause();其他所有事情都是由操作系统提前注册的中断机制及其对应的中断处理函数完成的,比如点鼠标,敲键盘,执行一个应用等,当没有事件时,操作系统就在循环里面待着。原创 2025-03-10 22:51:03 · 932 阅读 · 0 评论 -
linux0.11内核源码修仙传第五章——内存初始化(主存与缓存)
本文主要讲解了在操作系统初始化阶段,主存与缓存的初始化,明确了二者的分界线以及内核代码区与缓存的分界线。原创 2025-03-07 18:25:25 · 1145 阅读 · 0 评论 -
linux0.11内核源码修仙传第四章——操作系统的框架代码
本节内容较少,主要就是梳理了一下操作系统的代码框架,整个操作系统都做了哪些事情,具体的东西会在后面博客有所讲解。原创 2025-03-06 21:55:38 · 786 阅读 · 0 评论 -
linux0.11内核源码修仙传第三章——head.s
至于压入的L6,其是作为main函数返回的跳转地址,但是main函数是死循环,因此没有用,三个0是main函数的参数,但实际也没有用到。至此已经完成任务,操作系统准备完成,现在进入main函数了!原创 2025-03-06 02:58:25 · 1150 阅读 · 0 评论 -
linux0.11内核源码修仙传第二章——setup.s
整个setup部分就做了三件事,第一件事是做代码搬运和临时变量存放,第二件事是突破寻址瓶颈,第三件事是进入保护模式。在代码搬运阶段,整个操作系统的代码被放到了内存中0 ~ 0x8000的位置。突破寻址瓶颈可以将寻址空间突破1MB。进入保护模式要注意描述符表以及保护模式下的寻址方式的改变。原创 2024-12-18 23:33:04 · 1209 阅读 · 0 评论 -
linux0.11内核源码修仙传第一章——bootset.s
本文以linux0.11为参考版本,参考了《linux源码趣读》和其他一些资料对源码进行解读,本篇文章只涉及boot文件,希望能和大家一起学习linux的思想原创 2024-12-17 12:02:14 · 1006 阅读 · 0 评论 -
操作系统制作第二弹:boot与loader
本博客主要介绍的是boot程序与loader程序的编写,介绍了boot与loader编写的功能顺序原创 2024-05-21 15:32:09 · 1265 阅读 · 0 评论 -
操作系统制作第一弹:环境配置
本文是环境配置,采用的centos7和bochs2.8进行模拟硬件环境,创建了一个软盘用于存储文件原创 2024-05-19 17:25:51 · 1233 阅读 · 0 评论