【操作系统学习实践】从零开始制作,开发操作系统(零)—— 着手开发之前,整体初步了解与计算机启动过程简述

本文博主桐小白分享了从零开始自制操作系统的学习旅程,包括操作系统的基本概念、开发目标、大体思路,重点讲解了计算机启动过程,涉及BIOS、主引导记录和操作系统启动阶段。适合对操作系统感兴趣的初学者和进阶者。
摘要由CSDN通过智能技术生成

halo~我是bay_Tong桐小白
本文内容是桐小白个人对所学知识进行的总结和分享,知识点会不定期进行编辑更新和完善,了解最近更新内容可参看更新日志,欢迎各位大神留言、指点


身体、心理等各种原因,停滞住了两个月,没有学习,没有写文章,为了恢复状态每天都在睡觉休息,揽了一些小型比赛调整自己“强迫”自己学习,目前仍然有些低烧,还在慢慢调整,努力开始往起捡专业课以及考研复习,更新文章较慢,给关注我的新老朋友道声抱歉~

【本学习实践内容以《30天自制操作系统》[作者 川合秀实;译者 周自恒、李黎明、曾祥江、张文旭] 一书为主要参考资料,辅以其它操作系统相关书籍与相关知识进行探索、实践、创新、学习,欢迎各位大神留言、指点】

【更新日志】

最近更新:

  • 暂无编辑记录,持续更新中……

PS:

  • 正如川合秀实在《30天自制操作系统》书中提到那样,自己制作操作系统,它看起来可能太难了以至于初学者不敢轻易挑战,一说起操作系统大家就会觉着那东西复杂得不得了简直高深莫测。
  • 川合秀实这本书是从写一个看起来像操作系统的程序开始做起,逐步一点一点构建出最终的操作系统来,他认为应该放下恐惧,在动手中一点一点进行探索和积累,因此他的这本书定位放在了面向初学者,以至于对像“操作系统是什么”这样的问题都暂时没有给出很详细的介绍,反而对编程语言甚至二进制这样的最基础的问题花费了很长的时间进行了解释。
  • 桐小白自己则认为,直接动手去探索当然没错啦,单纯啃理论肯定是很枯燥的,但是桐小白觉得对于像自己这样有一定入门基础的小白来说,如果有专业知识以及计算机其它相关学科的内容作为理论基础或者知识补充,学习起来效果应该会更好叭,因此会在写文章进行总结时和自己之前写过的其它专栏其它文章的知识进行联系,对学习过程中遇到的相关知识进行简要的补充。
  • 桐小白对于目前阶段自己对计算机知识体系的理解写在了专业基础专栏的文章《计算机学科课程知识体系回顾初步》中,欢迎各位朋友留言、指点

整体初步了解

学习目标

要进行操作系统的开发,肯定要了解一下操作系统是什么,通俗一点吧,操作系统就是架设在机器上的第一层软件,当计算机通电启动时,它可以被运行起来,然后人们可以通过它来控制和管理计算机其它的硬件软件资源,即

操作系统是一组控制和管理计算机硬件和软件资源,合理对各类作业进行调度,方便用户使用计算机的程序集合

  • 是扩充硬件(裸机)功能的第一层系统软件
  • 管理计算机硬件与软件资源
  • 提供用户与系统交互的操作界面
  • 计算机系统最基本和最重要的系统软件

在这里插入图片描述
【详细其它相关知识可见桐小白操作系统专栏文章《操作系统概述总结——基本知识要点汇总》

像Windows、Linux这样庞大的操作系统单凭一个人可能一辈子都做不出来,但是可以通过努力完成一个小型的操作系统,不断进行维护,梦想还是要有的,假如有一天有自己的团队,对它进行进一步的扩充完善,万一实现了呢~

设计目标

  • 开发的操作系统适配 IBM PC/AT兼容机(这系列兼容机都能兼容Windows操作系统,也就是适配能安装Windows操作系统的硬件架构的系列机)
  • 从一个demo开始实现,也就是功能不那么强大,看上去像操作系统的一个演示程序写起,逐步写成一个真正的操作系统;将操作系统装入硬盘,或者把含有操作系统的CD-ROM等插入,只要打开电源开关就能自动运行
  • 能任意显示窗口、实现鼠标光标控制、同时运行几个应用程序等等

大体思路

首先操作系统是计算机通电后即能自动运行的,计算机可以直接识别的只有0/1串这样的机器码
在这里插入图片描述
与计算机底层密切相关的一定是汇编语言与C语言,因此在开发过程中会少不了和它们打交道

而汇编语言和C语言都是人可识别的,计算机自己读不懂它们的意思,如此自然也要想办法把C语言、汇编语言转换成机器码,也就是进行编译器的改写

【关于计算机语言的详细知识可见专业基础专栏文章《计算机语言处理相关知识要点区分汇总》

最终把这些文件生成一个备份,叫做映像文件,写入磁盘中,总结下来大概有以下几点:

  • 编写源代码(汇编语言、C语言)
  • 编译生成机器语言文件(编译器的改写)
  • 加工机器语言文件生成映像文件
  • 将映像文件写入磁盘,做成含操作系统的启动盘

工具及平台

  • 在Windows操作系统(95及以上版本)或Linux操作系统上均可进行开发
  • OSASK操作系统相关免费开源开发工具
  • 二进制编辑器(如Bz1621.lzh)、文本编辑器(如notepad++)
  • QEMU虚拟器

内容规划

在这里插入图片描述

计算机启动过程简述

【该部分是桐小白参考书中原文以及另一位博主langeldep根据博主阮一峰的《计算机时如何启动的》一文转载总结的文章《计算机的启动过程(详细)》加以其它搜索和自己的理解总结所写,由于详细细节设计到的知识点很多,这里只做必要的总结】

boot一词的引入

“启动”这个词用英语可以有很多个单词来形容它,计算机中所使用的是boot。但是boot本意是“靴子”,与“启动”有什么关系?
在这里插入图片描述
实际上它是bootstrap(鞋带)的缩写,自从有了《吹牛大王历险记》(德国)这个故事之后,bootstrap就有了“自力更生完成任务”这种意思。

而计算机的启动是一个很矛盾的过程:要先运行一个启动操作系统的程序,计算机才能启动;但是计算机不启动,就没办法运行程序。人们用这样一句谚语来比喻这个问题:拽着鞋带把自己拉起来

“pull oneself up by one’s bootstraps”

也就好像打开宝箱的钥匙被锁在宝箱里一样在这里插入图片描述
这种矛盾的操作系统自动启动机制,被称为bootstrap方式,boot这个说法就是这样来的

计算机的整个启动过程分成四个阶段

第一阶段:BIOS(基本输入输出系统)

BIOS(Basic Input Output System 的缩写)即基本输入输出系统。19c70s初,”只读内存”(read-only memory,缩写为ROM)发明,开机程序被刷入ROM芯片,计算机通电后,第一件事就是读取它。

BIOS 芯片就是类似这样一块方块状的存储器,它里面有与主板搭配的输入/输出程序、开机自检程序、计算机在加电启动时,识别各种硬件,对计算机的硬件进行初始化,目前常用的 BIOS 主要有AWARD BIOS 和 AMI BIOS

可以说,“拽着鞋带把自己拉起来”这样的工作由BIOS完成,它和具体硬件的架构有关,从出厂就被固化在芯片里
在这里插入图片描述
BIOS程序首先会进行硬件自检(Power-On Self-Test),缩写为POST

POST:加电自检又称为引导自我检测(Power-OnSelf-Test,缩写POST),是计算机BIOS的一个功能,在引导后会运行,针对计算机硬件如CPU、主板、存储器等进行检测,如果硬件出现问题,主板会发出不同含义的蜂鸣,启动中止,如果没有问题,结果会显示在固件可以控制的输出接口,像显示屏、LED、打印机等等设备上。加电自检的检查速度极快,甚至感受不到它的存在

硬件自检完成后,BIOS把控制权转交给下一阶段的启动程序。这时,BIOS需要知道下一阶段的启动程序具体存放在哪一个设备,这个顺序叫系统引导顺序(Boot Sequence),这个排序通常存在BIOS芯片附近的CMOS RAM 芯片中。

也就是说系统需要根据这个顺序找到第一位要读取的存储设备,而这个排序的设置在BIOS操作界面里就可以找到“设定启动顺序”这样的选项。

第二阶段:主引导记录

BIOS按照系统引导顺序把控制权转交给排在第一位的储存设备,读取启动设备的主引导记录(MBR),并放入指定的位置(0x7c000)内存中

主引导记录(MBR,Master Boot Record)是计算机开机以后访问硬盘时所必须要读取的第一个扇区,也叫启动区,即C/H/S地址的0柱面0磁头1扇区,也叫做MBR扇区,只有512字节。

主引导记录的结构

主引导记录只有512个字节,它的主要作用是,告诉计算机到硬盘的哪一个位置去找操作系统。

主引导记录由三个部分组成:

  • 第 1-446 字节:启动代码,即调用操作系统的机器码,有时也只将这前446字节的部分称为主引导记录(MBR)
  • 第 447-510 字节:分区表,即共4个16字节的“磁盘分区表”(DPT),将硬盘分成若干个区。硬盘的每个区可以安装不同的操作系统,”主引导记录”因此必须知道将控制权转交给哪个区
  • 第 511-512 字节:主引导记录签名,存放2字节的结束标志(0x55和0xAA)

计算机主板的BIOS程序在自检通过后,按顺序把第一位的储存设备的MBR扇区整个读取到内存中,然后将执行权交给内存中MBR扇区的引导程序。

系统下一步就会判断读入内存的MBR扇区的最后两个字节是否为“55AA”,如果不是则报错,在屏幕上会列出错误信息。如果是“55AA”,接下来引导程序会到分区表中查找是否有活动分区,将控制权交给硬盘的具体某个分区

第三阶段:硬盘启动

如果分区表中有活动分区,则把该分区的启动程序,也就是操作系统引导扇区调入内存加以执行。这里实际上要复杂一些,会有卷引导记录、扩展分区和逻辑分区、启动管理器等不同情况,暂时不做详细总结

第四阶段:操作系统

控制权转交给操作系统后,就可以被启动了。

大型的操作系统会复杂得多,这里用博主阮一峰举的例子

以Linux系统为例,先载入/boot目录下面的kernel。内核加载成功后,第一个运行的程序是/sbin/init。它根据配置文件(Debian系统是/etc/initab)产生init进程。这是Linux启动后的第一个进程,pid进程编号为1,其他进程都是它的后代。

然后,init线程加载系统的各个模块,比如窗口程序和网络程序,直至执行/bin/login程序,跳出登录界面,等待用户输入用户名和密码。

至此,全部启动过程完成。


【从计算机启动过程可以大致了解,要开发操作系统,“拽着鞋带把自己拉起来”这样的工作已经由BIOS完成,主引导记录以至整个操作系统映像的编写,就从这里开始吧~】

持续更新中……
我是桐小白,一个摸爬滚打的计算机小白

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值