观看哈工大操作系统视频课程,李志军老师讲解配套使用。

参考博客:

https://blog.csdn.net/tang_love_yuan/article/details/79127043

https://www.cnblogs.com/ybf-yyj/p/9038412.html

学习操作系统,不能停留在系统API的调用,需要能更好更高效的调用API,知道API的局限性与缺点,就必须打开操作系统的盖子,探究操作系统API下的底层原理。

从我们按下电源键使得计算机通电,计算机的各个部件是怎么运行起来的呢。我们现在使用的计算都遵循冯诺依曼结构,我们探讨计算机的启动前,先弄明白我们的计算机的结构。

1. 冯诺依曼结构计算机的工作原理

计算机的核心工作部件是CPU,CPU内部从上电开始反复执行着两个动作:1、取址;2、执行

计算机根据一系列的操作指令来执行不同的动作,这些指令就是计算机程序。

计算机运行的程序是以二进制的方式存在内存中,程序中的数据与指令不加区别的都存储在内存中。

2. 计算机的启动过程

图1:从系统加电起所执行的程序

X86 PC开机时,CPU处于实模式,这时候内存的计算方式是:段基址<<4 + 段内偏移

CPU的第一条指令是通过CS:IP来取得,而此时CS=0xFFFF,IP=0x0000。这是硬件设定好的。

所以最开始执行的指令地址就是0xFFFF0,这个内存地址映射在主板的BIOS ROM(只读存储器)中。

ROM中的程序会检测RAM、键盘、显示器、软硬磁盘是否正确工作。同时会从地址0开始设置BIOS的中断向量表。

ROM中的程序继续执行,将启动设备磁盘0磁道0扇区,一个512字节的扇区读到内存0x07c00处。0x07c00是一个历史遗留的问题,后续把system模块拷贝到地址开始处,预留的空间将不够,所以bootsect需要把0x07c00这一块操作系统引导与设置模块拷贝走。这算是一个历史包袱。

设置cs=0x07c00,ip=0x0000.

ROM中的程序执行结束,转到0x07c00处开始执行。

启动设备是可以通过BIOS程序来设置的,信息写在CMOS(一种芯片)中。CMOS(64B-128B)中存的还有实时时钟,硬件配置信息等。(开始时按住Del键可以进入启动设置的配置界面,可以设置光盘启动或U盘启动等)

图2:内核在磁盘上的分布情况

3. Bootsect.s做了哪些事

把0x07c00开始的512个字节,拷贝到0x90000处。(0x90000-0x90020)

设置栈ss=0x9000,sp=0xff00,这里把sp设置的够大,防止栈的区域把下面的操作系统代码覆盖了。

调用BIOS ox13中断,将第2-5个扇区拷贝到0x90020开始的内存处。如果出错,就反复读取。

获取磁盘的参数:磁道数等

打印字符串信息:system is loading

读入system部分(几百个扇区),读入到内存为0x10000处。在(0x90000的下面)

转到地址为0x90020的地址处执行,也就是开始执行setup部分的代码了。

4. Setup模块做了什么事

主要工作是完成操作系统启动前的设置工作。

读取光标的位置信息放在09000的头2个字节处。因为这时候bootsect模块的代码已经没有用了,可以覆盖了。

读出扩展内存的大小,放在接着的2个字节处。

获取显卡参数,硬盘参数等等。

将system模块的内容从0x10000处开始移到0x00000处,即内存的起始位置。之所以Load进来的时候为什么不一次性放在0x00000处,是因为0x00000处开始放的是bios中断。现在bios中断已经不需要了,所以可以覆盖了。

这时候开始,BIOS的中断向量表已经被覆盖了,后面就不再需要BIOS的中断了

设置中断向量表与全局描述符表的一部分内容。

把cr0的最后一位设置为1,也就是说从实模式进入保护模式。

jmpi 0,8。cs=8,取到的段基址其实是0x0000,那么这句话就是跳转到地址为0x00000的地方开始执行,也就是system模块的开始部分。

保护模式下地址翻译与中断处理的改变:

cs:ip的翻译过程是:从cs的前12位取出GDT的偏移量(这里是1),从gdt的对应表项中取得基地址,再和ip合并为一个完整的地址。

int n:n指明了IDT表中的序号。从IDT表中获取中断处理函数的入口地址。

5. system-head

System的第一部分就是head.s部分的代码,这部分代码实际上处于绝对地址0处开始的地方。这部分的代码是在保护模式下执行的,所使用的是AT&T格式的汇编指令与之前使用的as86汇编指令不同。这部分的代码主要完成了下面几件事情。

初步始中断描述符中的256项门描述符。

检查A20地址线是否打开。关于A20地址线的解释

测试系统是否含有数据协处理器,并设置寄存器CR0对应的位。

初始化内存页目录表,为内存分页管理做好准备工作。页目录表放在了绝对物理地址为0开始处,也就是head.s程序物理内存位置,程序会被覆盖掉。80286当时24根地址线,寻址16M,所以页表要能寻址16MB。如果内存页大小为4k,那页表就有4k个表项,一个表项按4个字节算,那页表就需要16K个字节(4页)。这里只用到了1级页表,在后续的发展中出现了二级页表,三级页表。

最后跳转到system模块中的初始化程序init/main.c中继续执行。

head.s程序执行结束后,已经正式完成了内存页目录页表的设置,并重新设置了内核实际使用的中断描述符表idt和全局描述符表gtd。另外还为软盘驱动开辟了1kb的缓冲区。此时system模块在内存中的详细映像如下图所示:

图3:system内存中的映像示意图

6. 总体执行线路

整体上可以分为6个阶段,头2个阶段为bootset,中间3个阶段为setup,最后一个阶段为system的head模块。

图4:启动引导的整个过程中,内核在内存中的位置以及移动后的位置情况

7. 参考资料

[1] 《30天自制操作系统》川合秀实

[2]《Linux内核完全剖析基于0.12内核》赵炯

[3]《操作系统原理、实现与实践》李志军

标签:操作系统,电脑,按下,system,地址,内存,设置,开机,页表

来源: https://www.cnblogs.com/ponxiaoming/p/12093441.html

常用的计算机中开机键是什么,按下电脑开机键,电脑内部都做了哪些事相关推荐

  1. 怎么让WORD中多行(常带下划线)头和尾都完全对齐

    『如何』让WORD中多行(常带下划线)头和尾都完全对齐 "为啥Word多行下划线后面总是长短不一,无论怎么调不是多了就是少了?怎样才能完美对齐呢?" 通过本文你可以 如何对齐Wor ...

  2. 计算机中只能启动硬盘上安装的操作系统,开机“找不到启动设备,请在硬盘上安装操作系统,硬盘(3F0),F2 系统检测”怎么解决?...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 3F0.3F1.3F2 指的是找不到UEFI引导的操作系统.可以按照以下几个步骤尝试解决 ①关机并拔掉电源适配器,移除全部外接设备,包括USB设备和闪存S ...

  3. off在计算机中代表什么,off在计算器上是什么键

    大家好,我是时间财富网智能客服时间君,上述问题将由我为大家进行解答. off在计算器上是关机键. 计算器是现代人发明的可以进行数字运算的电子机器.现代的电子计算器能进行数学运算的手持电子机器,拥有集成 ...

  4. 计算机中丢失pmw.dll,我的电脑windows 7系统,开机提示tvtpwm_windows_hook.dll没法启动,请教高手...

    @ ECHO OFF @ ECHO. @ ECHO. 说 明 @ ECHO -------------------------------------------------------------- ...

  5. 计算机中文件可以重名吗,如何快捷找出电脑内的重复文件(两个工具)

    我特喜欢收集各种软件和资料,但是时间久了,很多软件和资料之前下载过了,后来不记得了,又下载了,这样重复的非常多.还有,我喜欢备份文件,就算一些普通的文件,也会随手临时备份一下,过后,没有删除,就忘记了 ...

  6. 在双GPU(核显+NVIDIA)计算机中正确安装Ubuntu 18.04下的NVIDIA驱动程序(解决循环登录等问题)

    目录 前三次安装:各种坑 第一次安装:CUDA可用,但无法启动Steam 第二次安装:遇到循环登录问题 第三次安装:CUDA可用,可以启动Steam,但3D性能差 第四次安装:CUDA可用,Steam ...

  7. ps无法启动因为计算机中丢失api ms,解决win8下ps提示“丢失api-ms-win-crt-runtime-l1-1-0.dll”的方法...

    小编发现最近很多的用户在win8系统中安装ps软件之后都不能正常的运行,每次运行都会被提示:"api-ms-win-crt-runtime-l1-1-0.dll",从故障提示上可以 ...

  8. 计算机中怎么改邮箱地址,谁可以讲讲如何设置电脑邮箱

    buxianzhong713 回答数:6608  |  被采纳数:3 2017-05-01 18:35:07 怎么用电脑自带的电子邮件(怎么设置) syulin458 | 浏览 10484 次 推荐于 ...

  9. 无主之地计算机中丢失,无主之地3存档丢失怎么办 这些游戏按键操作你都知道吗...

    在全新的无主之地3游戏发行后,马上就有很多的玩家开始入手入驻,但是因为EPIC平台机制的问题,常常都会导致玩家出现存档丢失的情况,那么当存档丢失后应该怎么办?如何才能找回自己的存档文件?还有很多的新手 ...

最新文章

  1. 4.21 IP通信原理
  2. 转换环境与执行环境、宿主环境与独立环境、宿主实现与独立实现
  3. CC++ Calling Convention
  4. java程序设计基础29_java程序设计基础实验29
  5. Arduino 各种模块篇 步进电机 step motor( 不用库,不用shield, 纯)
  6. javaweb---简易邮件发送
  7. Java操作office文件的选择
  8. 001 初学android开发,从搭建环境开始(jdk+eclipse+android sdk+windows7)
  9. 日报系统1 创建框架 Django3.0
  10. 吴恩达机器学习作业2
  11. 梁刚:基于云原生技术建设“武汉健康云”云平台架构
  12. 【BZOJ1106】【POI2007】立方体大作战tet(树状数组+贪心)
  13. 日文全角半角字符判断
  14. 读懂用户运营体系:用户分层和分群
  15. 计算机怎么格式化硬盘,电脑格式化硬盘 电脑格式化硬盘要怎么操作
  16. cmds(cmds数据)
  17. 电脑桌面计算机图标下不显示文字,电脑桌面图标下面的文字有时会突然不见,然后 – 手机爱问...
  18. 笔记本搜不到WiFi是什么原因
  19. 华为服务器cpu位置,服务器cpu参数详解
  20. 阿里面试官:“你有高并发经验吗?”

热门文章

  1. 深度剖析Linux与Windows系统的区别
  2. k8s部署kong+konga+pgs
  3. 欧几里德距离的相似度 —— Euclidean Distance-based Similarity
  4. mysql数据库备份方式
  5. gRPC快速入门(三)——Protobuf应用示例
  6. 【cocos2dx 3.10】android studio真机调试的配置
  7. 麋鹿分布图制作(一)——调用百度API查询地名的坐标
  8. 博客项目——登录功能实现
  9. 学习Python的建议
  10. matlab矩阵分块与把分块矩阵还原