17、划分土地(中):如何实现内存页面初始化

你好,我是LMOS。 上节课,我们确定了用分页方式管理内存,并且一起动手设计了表示内存页、内存区相关的内存管理数据结构。不过,虽然内存管理相关的数据结构已经定义好了,但是我们还没有在内存中建立对应的实例变量。 我们都知道,在代码中实际操作的数据结构必...

操作系统实战45讲

16、划分土地(上):如何划分与组织内存

你好,我是LMOS。 内存跟操作系统的关系,就像土地和政府的关系一样。政府必须合理规划这个国家的土地,才能让人民安居乐业。为了发展,政府还要进而建立工厂、学校,发展工业和教育,规划城镇,国家才能繁荣富强。 而作为计算机的实际掌权者,操作系统必须科学合...

操作系统实战45讲

15、Linux初始化(下):从_start到第一个进程

你好,我是LMOS。 今天我们继续来研究Linux的初始化流程,为你讲解如何解压内核,然后讲解Linux内核第一个C函数。最后,我们会用Linux的第一个用户进程的建立来收尾。 如果用你上手去玩一款新游戏做类比的话,那么上节课只是新手教程,而这节课就...

操作系统实战45讲

14、Linux初始化(上):GRUB与vmlinuz的结构

你好,我是LMOS。 在前面的课程中,我们建好了二级引导器,启动了我们的Cosmos,并进行了我们Cosmos的Hal层初始化。 我会用两节课带你领会Linux怎样做初始化。虽然我们自己具体实现过了初始化,不过我们也不妨看看Linux的初始化流程,借...

操作系统实战45讲

13、第一个C函数:如何实现板级初始化

你好,我是LMOS。 前面三节课,我们为调用Cosmos的**第一个C函数hal_start做了大量工作。**这节课我们要让操作系统Cosmos里的第一个C函数真正跑起来啦,也就是说,我们会真正进入到我们的内核中。 今天我们会继续在这个hal_sta...

操作系统实战45讲

12、设置工作模式与环境(下):探查和收集信息

你好,我是LMOS。 上节课我们动手实现了自己的二级引导器。今天这节课我们将进入二级引导器,完成具体工作的环节。 在二级引导器中,我们要检查CPU是否支持64位的工作模式、收集内存布局信息,看看是不是合乎我们操作系统的最低运行要求,还要设置操作系统需...

操作系统实战45讲

11、设置工作模式与环境(中):建造二级引导器

你好,我是LMOS。 上节课,我们建造了属于我们的“计算机”,并且在上面安装好了GRUB。这节课我会带你一起实现二级引导器这个关键组件。 看到这儿你可能会问,GRUB不是已经把我们的操作系统加载到内存中了吗?我们有了GRUB,我们为什么还要实现二级引...

操作系统实战45讲

10、设置工作模式与环境(上):建立计算机

你好,我是LMOS。 经过前面那么多课程的准备,现在我们距离把我们自己操作系统跑起来,已经是一步之遥了。现在,你是不是很兴奋,很激动?有这些情绪说明你是喜欢这门课程的。 接下来的三节课,我们会一起完成一个壮举,从GRUB老大哥手中接过权柄,让计算机回...

操作系统实战45讲

9、瞧一瞧Linux:Linux的自旋锁和信号量如何实现

你好,我是LMOS。 上节课,我们学习了解决数据同步问题的思路与方法。Linux作为成熟的操作系统内核,当然也有很多数据同步的机制,它也有原子变量、开启和关闭中断、自旋锁、信号量。 那今天我们就来探讨一下这些机制在Linux中的实现。看看Linux的...

操作系统实战45讲

8、锁:并发操作中,解决数据同步的四种方法

你好,我是LMOS。 我们在前面的课程中探索了,开发操作系统要了解的最核心的硬件——CPU、MMU、Cache、内存,知道了它们的工作原理。在程序运行中,它们起到了至关重要的作用。 在开发我们自己的操作系统以前,还不能一开始就把机器跑起来,而是先要弄...

操作系统实战45讲