当前位置: 首页 > news >正文

操作系统----第一章

这里写目录标题

  • 计算机是怎么工作的
    • 问题提出
    • 计算机的产生
      • 图灵机
      • 通用图灵机
      • 计算机
  • 操作系统启动
    • 电源键开启后,计算机干了什么
    • 引导扇区的代码(bootsect.s)
      • 移动boot代码
      • 将setup代码载入到内存(仅仅载入,不执行)
      • 载入setup后,打印字符并载入system模块
      • boot代码的最后,准备转入setup执行
    • setup模块代码
  • 一级目录
    • 二级目录
    • 二级目录
    • 二级目录
  • 一级目录
    • 二级目录
    • 二级目录
    • 二级目录
  • 一级目录
    • 二级目录
    • 二级目录
    • 二级目录
  • 一级目录
    • 二级目录
    • 二级目录
    • 二级目录
  • 一级目录
    • 二级目录
    • 二级目录
    • 二级目录

计算机是怎么工作的

问题提出

在这里插入图片描述

计算机的产生

图灵机

在这里插入图片描述
图灵机就是模拟人脑的计算过程,缺点是他只有一套固定的逻辑

通用图灵机

在这里插入图片描述
而通用图灵机,他在图灵机的基础上进行了改进,他可以修改控制器的逻辑,向控制器中导入不同的逻辑,来实现不同的功能,这里的“设置控制器动作”就是控制不同的逻辑的,这一动作依赖于我们的编写的程序,我们的程序代码就是上图中的菜谱,程序代码用来设置控制器动作

计算机

在这里插入图片描述
将程序代码和数据存储到起来,这里的存储指的是计算机的内存,之后“运算器、控制器”会从内存中取代码指令,然后执行,这就是计算机的雏形,关键在于“取指执行”

程序代码会被翻译为汇编语言代码,每一行汇编代码,都规定了一个逻辑
计算机有一个指针,称为IP指针(也称PC指针),他会指向当前执行的程序代码,每次IP指针将程序代码传给控制器和运算器,控制器和运算器拿到逻辑和数据后,进行逻辑执行。总结下来就是 取指执行,计算机是如何工作的:取值执行

操作系统启动

电源键开启后,计算机干了什么

在这里插入图片描述
首先,CPU处于实模式,该模式下,该模式的寻址就是“段首址 左移四位 + 偏移地址”,而CS初始值是0xFFFF,IP初始值是0x0000.所以,CS会左移四位+IP,这里的CS和IP都是十六进制,<<4,转换成十六进制就是数字右边多个0,之后+IP,IP也是0,所以寻址之后就是0xFFFF0,而这就是BIOS程序在内存中的固定固化位置(故意这样设计,使得计算机在开机时百分百获取到IO功能,从而后续可以进行“代码载入到内存,以及从内存读代码到CPU”的工作),BIOS是基础IO系统,是一套最基本的输入输出系统,可以用来进行初始的取指令,从而交给“运算器和控制器”执行
之后检查外设,都没问题之后,

之后,BIOS(基本IO系统)将磁盘0磁道0扇区开始的一个扇区(512B大小)的代码读入到内存的0x7c00处开始。磁盘的0磁道0扇区称为引导扇区,这一块引导扇区的代码,就是操作系统的第一块代码
然后重置CS=0x07c0,IP=0x0000
所以,“控制器和运算器”就会去顺序执行CS:IP处的代码,每次都通过BIOS取指令

引导扇区的代码(bootsect.s)

移动boot代码

在这里插入图片描述
1、“.s”后缀是汇编文件的后缀,说明引导扇区的代码是汇编语言,与高级语言C语言的一个区别是,高级语言代码无法百分百的控制运行(如变量的地址是无法控制的),而汇编会百分百控制

2、代码段的代码解释:
刚开始的两行,是将两个宏的内容给到DS和ES,两个宏在图的右上角
而cx是计数寄存器,相当于循环变量
之后将SI和DI的寄存器内容置0
(其中,DS:SI配合寻址,ES:DI配合寻址)

rep movw,会与cx配合,这里是指重复移动256个字的内容,256字就是512B,相当于将整个引导扇区的汇编代码从0x7C00:0x0000处,移动到0x9000:0x0000
(低地址处留出了位置,具体用处后面会讲)

之后jumpi的作用是,将go这个标号所在位置的指令的地址相对于当前CS段地址的偏移量,赋值给IP指针,将INITSEG这个宏的内容赋值给CS代码段段首址寄存器
(因为当前的代码已经被整体挪到了0x9000:0x0000的位置,所以这个jumpi的作用是跳转到0x9000:0x偏移量,而go标号就在下一行,所以实际上相对而言还是顺序执行,但是又必不可少要在rep移动后执行该动作,因为程序已经挪动过了)

将setup代码载入到内存(仅仅载入,不执行)

在这里插入图片描述
后续代码简略说明:
1、中断,0x13是读磁盘扇区的中断,我们接下来要继续读磁盘了

2、cl规定了读磁盘时的开始扇区,al规定了读几个扇区
这里cl为02,即读第二个扇区,开始读4个,如上图下面所示,这4个扇区就是setup的扇区

3、从磁盘读到内存的哪个地址开始?,读到es:bx,即逻辑地址0x90200处,这个地址与0x90000正好差了512B
(需要注意的是,这里是向高地址顺位读,并没有占用我们之前移动bootsect所留下的地址空间(低地址处))

载入setup后,打印字符并载入system模块

在这里插入图片描述
最后,boot还要做两个工作:
1、0x10号中断,表示显示字符,而我们打印的字符就是下面双引号中的内容,上图的2处,表示字符的个数,当前是24个字符
(这个打印,与我们自己的电脑开始时的那个Windows图标是一样的,只不过win的那个很精致,我们这里很粗糙,只是打印了一行字)

2、然后会调用一个函数(即call的作用)

将下一个模块,就是system的模块,载入到内存(仅仅载入,并不执行)

boot代码的最后,准备转入setup执行

在这里插入图片描述
1、简要解释了一下system模块为什么要用call

2、转入setup执行,因为boot已经将setup模块和system模块的代码载入到了内存(即从磁盘读出,放入内存了)

之后,修改CS:IP的值,CS=0x9020,IP=0x0000,所有,会转入setup模块在内存中的首地址0x90200处开始执行

setup模块代码

一级目录

二级目录

二级目录

二级目录

一级目录

二级目录

二级目录

二级目录

一级目录

二级目录

二级目录

二级目录

一级目录

二级目录

二级目录

二级目录

一级目录

二级目录

二级目录

二级目录

相关文章:

  • mac安装mongoDB的正确姿势
  • 蓝桥杯第十届 特别的数
  • 3DGS较真系列
  • MyBatis打印SQL日志的配置
  • 单纯形法之两阶段法
  • 命令行HTTP客户端:HTTPie
  • C++基础系列【28】string的split
  • SMOTE算法
  • C++类与对象的的第三个简单的实战练习-3.25笔记
  • SvelteKit 最新中文文档教程(10)—— 部署 Cloudflare Pages 和 Cloudflare Workers
  • 【HarmonyOS Next】三天撸一个BLE调试精灵
  • 记录firefly的3566-sdk的下载及解压更新
  • docker使用命令笔记
  • Java多线程精讲:线程操作与状态转换全解析
  • Mycat安装验证流程整理
  • 深度学习|表示学习|多头注意力在计算时常见的张量维度变换总结|28
  • C盘急救实录:从爆红到畅快
  • 量子计算模拟中的测量与噪声建模:基于 3 量子比特系统分析
  • AI-Sphere-Butler之Ubuntu服务器如何部署Nginx代理,并将HTTP升级成HTTPS,用于移动设备访问
  • 余弦退火算法与学习率预热
  • 网站建设珠海/芭蕉视频app无限次数
  • 网络营销培训课程/关键词优化难度分析
  • 有啥可以自己做网站的软件/开封网站推广
  • 建设厅业绩可查询网站地址/企业网站建设步骤
  • 创业做招商加盟类网站赚钱/开发网站建设公司
  • 网站分辨率兼容怎么做/网站推广软件哪个最好