[操作系统] 启动

news/2024/5/19 0:27:59/文章来源:https://blog.csdn.net/weixin_44179561/article/details/127209898

启动

一、通电

由于内存是随机存储器(Random access memory,RAM),属于易失性存储器,未通电时,RAM中不会有任何内容,因此刚一通电,RAM不可能有任何实际信息。计算机硬件厂商在只读存储器(Read-only memory,ROM)中开辟了一块空间,固化了一段代码,这段ROM被称为BIOS(basic input/output system,基本输入输出系统),其中放置的代码是对基本硬件的测试代码,IBM PC中,这段代码的起始地址就在 0xFFFF0。

计算机刚一通电,CS的初始值就被设置成 0xFFFF,IP的初始值设置成 0x0000,计算机首先工作在实模式下,实模式下取出指令地址的方式是将CS中的值左移四位,再加上IP中的值:

PC=CS<<4+IP=0xFFFF0PC=CS<<4+IP=0xFFFF0PC=CS<<4+IP=0xFFFF0

即执行ROM中固化的那段代码,测试各种硬件是否正常,如果出现异常,则停止启动,并控制喇叭发声报错。(平常内存条松动,电脑开不了机时,发出的滴滴声)

如果硬件测试正常,利用BIOS的输入功能,将启动磁盘中的第一个扇区的内容(bootsect.s)读入内存 0x7C00 地址处,并设置CS=0x07C0,IP=0x0000,即将PC指针指向bootsect.s 的第一条指令处,开始执行 bootsect.s 的内容。
在这里插入图片描述

二、bootsect.s

1、bootsect.s 代码整体移动位置

将内存中 0x7C00 处的 512 个字节(正好就是全部 bootsect.s)移动到内存地址 0x90000 开始的一段内存中
在这里插入图片描述

2、读入setup.s

执行指令 “int 0x13”,调用0x13号中断,这是BIOS中断中的读写磁盘的一个中断,从磁盘中,将后续4个扇区(bootsect.s 在第一个扇区)的内容读入内存 0x90200处。

0x90200−0x90000=0x2000x90200-0x90000=0x200 0x902000x90000=0x200
差了0x200,十六进制下,正好是十进制的512,由于是内存地址,每1相当于一个字节,正好是512个字节

也就是说,读入的 setup.s 正好接在 bootsect.s 的末尾处

在这里插入图片描述

3、在屏幕上输出 “Loading System…”

调用BIOS中断 int 0x10,该中断的作用是在屏幕上输出信息

4、读入system

从启动磁盘中的第六个扇区开始,读入长度为 SYSSIZE 的操作系统 system 模块,放置在内存 0x10000 处

在这里插入图片描述

5、PC指针设置为 0x90200

bootsect.s 的最后,将PC指针设置成 0x90200,开始执行 setup.s 的第一条指令,bootsect.s 的任务结束
在这里插入图片描述

二、setup.s

1、获取初始化所需的基本参数

以内存为例,setup.s 调用 0x15号BIOS中断,获取扩展内存的大小,单位是KB,并将内存尺寸存放在地址 0x90000 处,将来系统初始化时,需要来到 0x90000 处读取这个值,用于初始化内存管理

2、将内存中的system模块,移动到0x0地址处

在这里插入图片描述
这一步会使得BIOS中断向量表(放置在0地址处)被覆盖,因此从这里开始,BIOS中断将无法使用

3、创建临时GDT表

创建并设置一个临时的GDT表,暂时只用于一步内存跳转 “jmpi 0,8” 使指令跳转到 0x0地址处

4、启动保护模式

在这之前,PC的寻址模式还是实模式,PC=CS<<4+IP

setup.s 将A20号地址线选通,并且将寄存器CR0最后一位设置为1,一旦完成这两项设置,内存寻址方式会切换到另外一套电路——保护模式

在保护模式下,PC指针通过段基址+段内偏移的方式完成寻址,而段基址通过CS寄存器内的值,查询GDT表(全局描述符)得到,保护模式下的PC寻址方式:

PC=GDT[CS]+EIPPC=GDT[CS]+EIP PC=GDT[CS]+EIP

5、jmpi 0,8

在保护模式下,执行 jmpi 0,8 ,PC=GDT[8]+0=0,PC指针跳转到 0x0地址处,setup.s 的任务完成,开始执行 system 模块中的第一段代码 head.s
在这里插入图片描述

三、system——head.s

1、设置中断表(interrupt descriptor table,IDT)

因为system被从0x10000处挪到0x0处,将原本放置在0x0处的BIOS中断向量表覆盖了,BIOS中断将不再能使用,操作系统需要接管中断。在这一步中,IDT表创建,但全部表项初始化成0,即所有的中断暂时不可用,要等到后面给每个模块(如时钟)初始化时,才会设置相应的中断处理程序的入口地址到各个表项中

2、设置GDT表

setup.s 中创建的GDT表是临时的,只是用于在保护模式下将PC指针跳转到0x0地址处,这里需要重新创建 GDT表

3、设置页表

保护模式下,GDT[CS]+EIP得到的是32位的虚拟地址,还需要根据段页内存管理,去页表中找到跟物理地址的映射,详情在《内存》中。
https://blog.csdn.net/weixin_44179561/article/details/127154863

4、head.s 的最后一段代码,使PC指针跳转到操作系统的初始化代码处

四、操作系统初始化

初始化内存mem_map,初始化一些重要的数据结构

五、进入内核态,创建进程,进入shell(即命令窗口)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_20521.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

信创浪潮下,看看大公司是如何建立数据安全保护体系的?

信创&#xff0c;即信息技术应用创新产业&#xff0c;它是数据安全、网络安全的基础&#xff0c;也是新基建的重要组成部分。信创涉及到的行业包括IT基础设施&#xff1a;CPU芯片、服务器、存储、交换机、路由器、各种云和相关服务内容&#xff0c;基础软件&#xff1a;数据库、…

1.ROS机器视觉:单目摄像头的调用与标定

(1条消息) ROS改错&#xff1a;vm虚拟机中调用摄像头失败_机械专业的计算机小白的博客-CSDN博客https://blog.csdn.net/wzfafabga/article/details/127204106?spm1001.2014.3001.5502 首先保证摄像头是可调用的。 1.安装usb_cam驱动 sudo apt-get install ros-melodic-usb-…

数据导入导出功能的测试点

【数据导入功能】 一、操作按钮校验 1、导入按钮生效 2、取消导入按钮生效 二、导入模板校验 1、文件数量 1&#xff09;不传模板&#xff1a;点确认时提示错误 2&#xff09;传模板&#xff1a;只支持单文件 or 还支持多文件同时导入 2、文件格式 只支持xlsx文件 or 还支…

HTML学生个人网站作业设计 学生大学生活网页设计作品 学生个人网页模板 简单个人主页成品 div+css个人网页制作

&#x1f329;️ 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f482; 作者主页: 【进入主页—&#x1f680;获取更多源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;HTML5网页期末作业 (1000套…

Java项目:ssh网上便利店系统

作者主页&#xff1a;夜未央5788 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 该项目分为前后台。非maven项目&#xff1b; 前台主要功能包括&#xff1a; 会员登录、注册、商品展示、加入购物车、会员中心、我的订单、我的地址…

【跟学C++】C++队列——queue类(Study13)

文章目录1、队列2、队列--queue类的使用2.1 实例化queue2.2 queue的成员函数3、优先级队列--priority_queue类的使用3.1 实例化priority_queue3.1 priority_queued的成员函数4、总结 【说明】 大家好&#xff0c;本专栏主要是跟学C内容&#xff0c;自己学习了这位博主【 AI菌】…

多测师肖sir_高级讲师_第2个月第21讲解jmeter安装

一、安装流程&#xff1a; 1、安装jdk &#xff08;linux&#xff0c;windows上&#xff09;&#xff0c;jdk编译java语言&#xff0c; 2、jdk环境配置&#xff0c;dos中java -version 查看jdk版本 3、下载jmeter包&#xff0c;解压&#xff0c;bin 目录 &#xff0c;jmeter.ba…

从零开始配置vim(25)——关于 c++ python 的配置

从9月份到国庆这段时间,因为得了女儿,于是回老家帮忙料理家事以及陪伴老婆和女儿。一时之间无暇顾及该系列教程的更新。等我回来的时候发现很多小伙伴私信我催更。在这里向支持本人这一拙劣教程的各位小伙伴表示真诚的感谢。言归正传,让我们开始吧 之前我们根据lua语言配置了…

(附源码)计算机毕业设计ssm电子购物商城

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

【DL】第 11 章:自动驾驶汽车的深度学习

&#x1f50e;大家好&#xff0c;我是Sonhhxg_柒&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f4dd;个人主页&#xff0d;Sonhhxg_柒的博客_CSDN博客 &#x1f4c3; &#x1f381;欢迎各位→点赞…

《uni-app》一个非canvas的飞机对战小游戏-启动页

这是一个没有套路的前端博主&#xff0c;热衷各种前端向的骚操作&#xff0c;经常想到哪就写到哪&#xff0c;如果有感兴趣的技术和前端效果可以留言&#xff5e;博主看到后会去代替大家踩坑的&#xff5e;接下来的几篇都是uni-app的小实战&#xff0c;有助于我们更好的去学习u…

基于微信小程序的校园失物招领寻物启事系统 java uniapp 小程序

随着信息化时代的到来,管理系统都趋向于智能化、系统化,微信小程序校园失物招领也不例外,但目前国内的市场仍都使用人工管理,市场规模越来越大,同时信息量也越来越庞大,人工管理显然已无法应对时代的变化,而微信小程序校园失物招领能很好地解决这一问题,轻松应对校园失物招领平…

老项目vue2.x误用了vue3的插件问题

老项目vue2.x误用了vue3的插件问题背景插件vue-template-compilervue-loader问题回溯总结背景 vue3出来两年多了&#xff0c;它刚出来的时候&#xff0c;vue3相比vue2似乎并没有想像中那样受大家欢迎。因为两个版本的构架上相差太大了&#xff0c;许多的API都不兼容&#xff0…

洛谷题单 Part 2.4 分治

分治 即分而治之 将大问题化解为小问题逐一求解 这种题没有固定的模板 只有分治的思想 所以在做题的时候应当多想如何将一个大问题化解成若干个子问题进行求解 直接上题了 P1226 【模板】快速幂||取余运算 非常经典的分治问题 常规算法求aba^bab要O(b)O(b)O(b)的时间复杂度 我…

Mybatis常见查询总结,仅限于初级程序员阅读

情况描述&#xff1a; 本人初次接触Mybatis&#xff0c;然后对于其中的一些基础查询做一些简单总结&#xff0c;一次用来记录他的用法&#xff0c;便于以后查漏补缺。 1、Mybatis中查询特定的列:&#xff08;单列&#xff09; 如果查询指定列为Long类型&#xff0c;那么在re…

游戏合作伙伴专题:BreederDAO 与 Affyn一起重构现实生活

BreederDAO 团队很宣布与 Affyn 建立了新的合作关系&#xff0c;Affyn 是一家位于新加坡的公司&#xff0c;开发了基于地理位置的增强现实移动游戏。 移动元宇宙 Affyn 团队由来自 EA、任天堂、迪士尼和星巴克等顶级游戏、娱乐和生活方式公司的资深员工组成。他们洞悉了目前边玩…

html5网页设计作业代码 大学生校园网站制作 学校官网制作html

&#x1f329;️ 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f482; 作者主页: 【进入主页—&#x1f680;获取更多源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;HTML5网页期末作业 (1000套…

性能大PK count(*)、count(1)和count(列)

最近的工作中&#xff0c;我听到组内两名研发同学在交流数据统计性能的时候&#xff0c;聊到了以下内容&#xff1a; 数据统计你怎么能用 count() 统计数据呢&#xff0c;count() 太慢了&#xff0c;要是把数据库搞垮了那不就完了么&#xff0c;赶紧改用 count(1)&#xff0c;这…

基于Gossip的online server

在游戏服务端架构中online server,有些也叫center server。 主要承载以下功能:存储玩家的在线信息,处理上线和下线消息。 转发消息给特定玩家。online server在架构图中的位置online server集群内部架构图,以3个实例为例:特点:svr之间相互连接,采用Gossip协议通信。 各s…

MCMS 审计之路

MCMS 是 J2EE 系统&#xff0c;完整开源的Java CMS&#xff0c;基于SpringBoot 2架构&#xff0c;前端基于vue、element ui。为开发者提供上百套免费模板,同时提供适用的插件&#xff08;文章、商城、微信、论坛、会员、评论、支付、积分、工作流、任务调度等...&#xff09;&a…