当前位置:网站首页>ucore概述
ucore概述
2022-07-03 16:42:00 【专注web0年】
简介
本文根据慕课资料进行粗略学习操作系统的知识
ucore课程文档
课程地址
lab答案地址
有的答案有问题,但是可以供参考
第一条指令
CPU加电后会进行初始化,然后在内存读第一条指令。内存有一部分是ROM、一部分是RAM。断电后RAM信息会消失,但是ROM内容一直都在。
读的第一个指令是CS:IP指向的地址(值应该是默认的),刚加电的CPU处于16位实模式下,寻址空间大小为2的20次方(1MB),CS、IP都是16位的。CS*16+IP(0xFFFF0)是第一条指令的地址,同时CS:IP要在2的20次方的寻址空间内。第一条指令在最底下的1MB空间内。这第一条指令及其跟着的指令就是BIOS,它要提供一些服务,然后CPU才能访问磁盘设备。
BIOS
BIOS从磁盘读引导扇区(512字节)里的加载程序,将其写到内存0x7c00,然后CS:IP跳到那里去执行加载程序(bootloader)。
详细一点说,BIOS只能在实模式下运行,它先是检查硬件,进行设备初始化。修电脑时,显示器不工作,可以猜测内存有问题。因为BIOS先检查到内存有问题,后面它就不用检查了,也不启动系统了。然后检查插入的U盘、磁盘什么的。检查产生的信息成为BIOS数据。虽然ROM数据不会消失,但是因为每次插入的硬件不一样,所以BIOS会改这些数据。最后读我们磁盘的第一个扇区。BIOS先读磁盘的主引导扇区(512字节)。因为这个东西提供的信息可以帮我们选择启动磁盘里的哪个操作系统。根据主引导扇区的信息来选择并读取活动分区(分区引导扇区)。先执行分区引导扇区的跳转指令,跳转到启动代码启动到加载程序。
加载程序
加载程序把磁盘的ucore操作系统数据和代码加载到内存,再跳到ucore起始地址。把控制权交给操作系统。
详细地说,加载程序会先从文件系统中读取启动配置信息,依据这些信息决定怎么加载内核,这个地方如果我们可以弄一个选项在显示屏(启动菜单),可以改参数就很好。最后跳到内核。
不够详细
知道这些还是很粗糙,如果写实际程序,还要根据CPU手册、BIOS规范(从哪里读第一条,上文是0xFFFF0)。所以自己写操作系统还是要查很多资料的。
系统启动规范
BIOS
这里的主引导扇区的硬盘分区表只有四个分区信息,每个分区信息16字节(BIOS-MBR)。BIOS-GPT则支持超过四个分区。PXE是网络启动,从服务器下载资料到磁盘来启动,此时BIOS要有网络下载功能,BIOS变复杂了。前面说的是在本地磁盘启动。
UEFI
在所有平台一致地启动操作系统。启动磁盘的任何系统。为了安全,检查引导记录是否可信。只读取满足签名的引导记录。
查资料
边栏推荐
- PyTorch 1.12发布,正式支持苹果M1芯片GPU加速,修复众多Bug
- Nifi from introduction to practice (nanny level tutorial) - flow
- 于文文、胡夏等明星带你玩转派对 皮皮APP点燃你的夏日
- CC2530 common registers for serial communication
- Develop team OKR in the way of "crowdfunding"
- arduino-esp32:LVGL项目(一)整体框架
- function overloading
- [sword finger offer] 58 - I. flip the word order
- word 退格键删除不了选中文本,只能按delete
- Yu Wenwen, Hu Xia and other stars take you to play with the party. Pipi app ignites your summer
猜你喜欢
Record windows10 installation tensorflow-gpu2.4.0
There are several APIs of airtest and poco that are easy to use wrong in "super". See if you have encountered them
QT串口ui设计和解决显示中文乱码
2022.02.14_ Daily question leetcode five hundred and forty
ThreeJS 第二篇:顶点概念、几何体结构
(补)双指针专题
What is the maximum number of concurrent TCP connections for a server? 65535?
A survey of state of the art on visual slam
[statement] about searching sogk1997 and finding many web crawler results
What material is 12cr1movr? Chemical property analysis of pressure vessel steel plate 12cr1movr
随机推荐
NSQ源码安装运行过程
Web crawler knowledge day03
PHP CI(CodeIgniter)log级别设置
Mysql database -dql
什么是质押池,如何进行质押呢?
Thread pool executes scheduled tasks
ThreeJS 第二篇:顶点概念、几何体结构
PHP production website active push (website)
(补)双指针专题
PHP converts a one-dimensional array into a two-dimensional array
消息队列消息丢失和消息重复发送的处理策略
Summary of three methods of PHP looping through arrays list (), each (), and while
AcWing 第58 场周赛
Mysql database DDL and DML
Interviewer: how does the JVM allocate and recycle off heap memory
There are several APIs of airtest and poco that are easy to use wrong in "super". See if you have encountered them
TCP congestion control details | 3 design space
Pointcut expression
MySQL single table field duplicate data takes the latest SQL statement
Unreal_ Datatable implements ID self increment and sets rowname