计算机操作系统
文章平均质量分 96
计算机操作系统
了不起的盖茨比。
如果把一切都准备好了再前行,那我们永远迈不出第一步。
展开
-
Linux初始化(下):从_start到第一个进程
本篇博客参考《操作系统实战 45 讲》今天我们继续来研究 Linux 的初始化流程,为你讲解如何解压内核,然后讲解 Linux 内核第一个 C 函数。最后,我们会用 Linux 的第一个用户进程的建立来收尾。如果用你上手去玩一款新游戏做类比的话,那么上节课只是新手教程,而这节课就是更深入的实战了。后面你会看到很多熟悉的"面孔",像是我们前面讲过的 CPU 工作模式、MMU 页表等等基础知识,这节课都会得到运用。今天我们讲得内容有点多,我们从_start开始到startup32、startup64。原创 2022-08-25 14:08:19 · 1405 阅读 · 0 评论 -
Linux初始化(上):GRUB与vmlinuz的结构
本篇博客参考《操作系统实战 45 讲》在前面的课程中,我们建好了二级引导器,启动了我们的Cosmos,并进行了我们Cosmos的Hal层初始化。我会用两篇博客带你领会Linux怎样做初始化。虽然我们自己具体实现过了初始化,不过我们也不妨看看Linux的初始化流程,借鉴一下Linux开发者的玩法。这篇博客,我会先为你梳理启动的整体流程,重点为你解读Linux上 GRUB 是怎样启动,以及内核里的“实权人物”——vmlinuz内核文件是如何产生和运转的。下节课,我们从setup.bin文件的_start。...原创 2022-08-11 16:29:31 · 1358 阅读 · 0 评论 -
第一个C函数:如何实现板级初始化?
本篇博客参考《操作系统实战 45 讲》前面三篇博客,我们为调用Cosmos的第一个 C 函数hal_start做了大量工作。这节课我们要让操作系统Cosmos里的第一个 C 函数真正跑起来啦,也就是说,我们会真正进入到我们的内核中。今天我们会继续在这个hal_start函数里,首先执行板级初始化,其实就是hal层(硬件抽象层,下同)初始化,其中执行了平台初始化,hal层的内存初始化,中断初始化,最后进入到内核层的初始化。这节课的配套代码,你可以从这里下载。...原创 2022-08-10 10:22:38 · 291 阅读 · 1 评论 -
设置工作模式与环境(下):探查和收集信息
本篇博客参考《操作系统实战 45 讲》上一篇博客我们动手实现了自己的二级引导器。今天这节课我们将进入二级引导器,完成具体工作的环节。在二级引导器中,我们要检查 CPU 是否支持 64 位的工作模式、收集内存布局信息,看看是不是合乎我们操作系统的最低运行要求,还要设置操作系统需要的 MMU 页表、设置显卡模式、释放中文字体文件。今天博客的配套代码,你可以点击这里,自行下载。...原创 2022-08-03 09:25:10 · 414 阅读 · 0 评论 -
设置工作模式与环境(中):建造二级引导器
本篇博客参考《操作系统实战45讲》上篇博客的我们建造了属于我们的“计算机”,并且在上面安装好了GRUB。这节课我会带你一起实现二级引导器这个关键组件。看到这儿你可能会问,GRUB不是已经把我们的操作系统加载到内存中了吗?我们有了GRUB,我们为什么还要实现二级引导器呢?这里我要给你说说我的观点,二级引导器作为操作系统的先驱,它需要收集机器信息,确定这个计算机能不能运行我们的操作系统,对CPU、内存、显卡进行一些初级的配置,放置好内核相关的文件。解析内核文件、收集机器环境信息模块。。中。...原创 2022-08-01 11:24:43 · 331 阅读 · 0 评论 -
手写操作系统-环境的建立
上一篇博客由于我们使用的虚拟机导致无法启动对应的虚拟机,然后就不了了之,今天我带领着你们来搭建对应的环境。上一篇博客的地址。原创 2022-07-31 18:11:28 · 393 阅读 · 1 评论 -
设置工作模式与环境(上):建立计算机
本篇博客参考《操作系统实战45讲》请不要在虚拟机中安装虚拟机操作,没有用。上篇博客我们介绍了Linux中的自旋锁和信号量如何实现的,接下来的博客就应该一步步的建立我们的操作系统,今天我们先来建立我们的计算机。接下来的三篇博客,我们会一起完成一个壮举,从GRUB老大哥手中接过权柄,让计算机回归到我们的革命路线上来,为我们之后的开发自己的操作系统做好准备。具体我是这样来安排的,今天这篇博客,我们先来搭好操作系统的测试环境。希望今天这节课给你带来成就感,虽然我们才走出了万里长征的第一步。https。...原创 2022-07-29 16:09:22 · 298 阅读 · 2 评论 -
Linux的自旋锁和信号量如何实现?
本篇博客参考《操作系统实战45讲》上节博客,我们学习了解决数据同步问题的思路与方法。Linux作为成熟的操作系统内核,当然也有很多数据同步的机制,它也有原子变量、开启和关闭中断、自旋锁、信号量。那今天我们就来探讨一下这些机制在Linux中的实现。看看Linux的实现和前面我们自己的实现有什么区别,以及Linux为什么要这么实现,这么实现背后的机理是什么。锁,保证了数据的安全访问,但是它给程序的并行性能造成了巨大损害,所以在设计一个算法时应尽量避免使用锁。httpshttps。...原创 2022-07-28 15:34:38 · 481 阅读 · 0 评论 -
你了解数据同步吗?
本篇博客参考《操作系统实战45讲》上篇博客主要介绍的是程序放在什么地方,开发操作系统要了解的最核心的硬件——CPU、MMU、Cache、内存,知道了它们的工作原理。在程序运行中,它们起到了至关重要的作用。在开发我们自己的操作系统以前,还不能一开始就把机器跑起来,而是先要弄清楚数据同步的问题。如果不解决掉数据同步的问题,后面机器跑起来,就会出现很多不可预知的结果。通过这篇博客,我会给你讲清楚为什么在并发操作里,很可能得不到预期的访问数据,还会带你分析这个问题的原因以及解决方法。原子变量,在只有。...原创 2022-07-27 15:46:40 · 559 阅读 · 0 评论 -
程序放在哪儿?
本篇博客参考《操作系统实战45讲》上篇博客介绍了程序中的地址如何转换的,这篇博客介绍程序放在哪儿?我们已经知道了CPU是如何执行程序的,也研究了程序的地址空间,这里我们终于到了程序的存放地点——内存。你知道什么是Cache吗?在你心中,真实的内存又是什么样子呢?今天我们就来重新认识一下Cache和内存,这对我们利用Cache写出高性能的程序代码和实现操作系统管理内存,有着巨大的帮助。通过这节课的内容,我们一起来看看内存到底是啥,它有什么特性。局部性原理程序局部性原理。。...原创 2022-07-26 15:33:15 · 2703 阅读 · 0 评论 -
程序中的地址如何转换?
本篇博客参考《操作系统实战45讲》上篇博客我们介绍了CPU的三种模式,这篇博客我们来介绍下程序中的地址如何转换的?CPU执行程序、处理数据都要和内存打交道,这个打交道的方式就是内存地址。读取指令、读写数据都需要首先告诉内存芯片hi,内存老哥请你把0x10000地址处的数据交给我……hi,内存老哥,我已经计算完成,请让我把结果写回0x200000地址的空间。这些地址存在于代码指令字段后的常数,或者存在于某个寄存器中。今天,我们就来专门研究一下程序中的地址。为啥系统设计者要引入虚拟地址呢。...原创 2022-07-26 10:02:17 · 1607 阅读 · 0 评论 -
CPU的三种模式
本篇博客参考《操作系统实战45讲》上篇博客介绍了三大操作系统的内核,这节博客介绍CPU的三种模式。我们在前面已经设计了我们的OS架构,你也许正在考虑怎么写代码实现它。恕我直言,现在我们还有很多东西没搞清楚。由于OS内核直接运行在硬件之上,所以我们要对运行我们代码的硬件平台有一定的了解。接下来,我会通过三篇博客,带你搞懂硬件平台的关键内容。今天我们先来学习CPU的工作模式,硬件中最重要的就是CPU,它就是执行程序的核心部件。实模式、保护模式、长模式httpshttpshttps。...原创 2022-07-25 14:11:58 · 10411 阅读 · 2 评论 -
三大操作系统的内核
本篇博客参考《操作系统实战45讲》上一篇博客我们介绍对应的内核的结构和设计,今天我们来介绍下业界的三大操作系统的内核。什么?你想成为计算机黑客?梦想坐在计算机前敲敲键盘,银行账号里的数字就会自己往上涨。拜托,估计明天你就该被警察逮捕了。真正的黑客是对计算机技术有近乎极致的追求,而不是干坏事。下面我就带你认识这样一个计算机黑客,看看他是怎样创造出影响世界的Linux,然后进一步了解一下Linux的内部结构。httpshttpshttpshttps。...原创 2022-07-15 17:30:38 · 2597 阅读 · 0 评论 -
内核的结构和设计
本篇博客参考《操作系统实战 45 讲》上篇博客实现了一个简单的内核,今天我们来介绍内核的结构和设计。Hello OS 虽然能使计算机运行起来,但其实没有任何实际的功能。什么?没有实际功能,我们往里增加功能不就好了吗?你可能会这样想,但是这样想就草率了,开发操作系统内核(以下简称内核)就像建房子一样,房子要建得好,就先要设计。比如用什么结构,什么材料,房间怎么布局,电路 水路等,最后画出设计图纸,依据图纸按部就班地进行建造。而一个内核的复杂程度要比房子的复杂程度高出几个数量级,所以在开发内核之前先要对其进行设原创 2022-07-14 15:17:01 · 384 阅读 · 0 评论 -
几行汇编几行C实现一个最简单的内核
本篇博客参考《操作系统实战 45 讲》上篇博客介绍了程序的运行的过程,今天我们来实现一个简单的内核。看标题就知道,写操作系统要用汇编和 C 语言,尽管这个 Hello OS 很小,但也要用到两种编程语言。其实,现有的商业操作系统都是用这两种语言开发出来的。先不用害怕,Hello OS 的代码量很少。其实,我们也不打算从 PC 的引导程序开始写起,原因是目前我们的知识储备还不够,所以先借用一下 GRUB 引导程序,只要我们的 PC 机上安装了 Ubuntu Linux 操作系统,GRUB 就已经存在了。这会大原创 2022-07-14 13:36:00 · 604 阅读 · 0 评论 -
程序的运行过程
你是否对操作系统一无所知,你是否对线程 进程 IO等等这些基础的东西感到非常的吃力,同时碰到一些问题的时候,无从下手,今天就跟着我一起来学习操作系统这个体系的课程吧!一切要从牛人做的牛逼的事说起第一位牛人,是世界级计算机大佬的传奇——Unix 之父 Ken Thompson。在上世纪 60 年代的一个夏天,Ken Thompson 的妻子要回娘家一个月。呆在贝尔实验室的他,竟然利用这极为孤独的一个月,开发出了 UNiplexed Information and Computing System(UNICS)原创 2022-07-13 15:11:12 · 2314 阅读 · 0 评论 -
计算机系统漫游
1.写在前面笔者从去年开始兜兜转转换了好几家公司,同时也去外包做了几个月,讲道理,外包真的不要去,外包不当人是一个点,同时,你也不属于任何一个组,你会发现到头来,你没有完完整整的去做过一个项目,这样下去,人很容易废掉,笔者现在找了一家公司,离家比较近,同时也是比较闲,不会像上家的外包一样,年30还在家写项目,从来没有遇到这么忙的公司。现在能闲下来,我希望能够好好的学习,多积累一点有用的东西。今天读者打算开一个新的专栏,就是读书笔记,笔者会多看点书,然后将自己的一些读书的心得写下来。2.本篇博客概述3原创 2021-04-19 16:03:08 · 307 阅读 · 0 评论