美文网首页
第0章笔记--《操作系统真相还原》

第0章笔记--《操作系统真相还原》

作者: mecury | 来源:发表于2018-05-06 22:15 被阅读149次
  • 软件是怎么访问硬件的?
  • 应用程序与操作系统如何配合在一起?
  • 陷入内核
  • 内存访问为什么要分段
  • 代码中为什么分为代码段,数据段?这和内存访问机制的段是一回事吗?
  • 物理地址、逻辑地址、有效地址、线性地址、虚拟地址的区别
  • 什么是平坦模型?
  • CPU内部的段寄存器
  • 编译型语言与解释型语言的区别
  • 大端字节序、小端字节序
  • BIOS中断、DOS中断、Linux中断的区别
  • Section与Segment的区别
  • 如何控制CPU的下一条指令
  • 指令集、体系结构、微架构、编程语言
  • MBR、EBR、DBR、OBR

软件是怎么访问硬件的?

访问外部硬件的两种方式:

  1. 将某个外设的内存映射到一定范围的地址空间,CPU通过地址总线访问该内存区域时就会落到外设的内存中。这种映射让CPU访问外设的内存就如同访问主版上的物理内存一样。
    如:
    显卡,它是显示器的适配器,CPU通过显卡与显示器交互。显卡一块内存为显存它被映射到主机物理内存上的低端1MB的0xB8000~0xBFFFF。CPU访问这块内存,就是在访问显存,向这片区域写入字节,就是在屏幕上打印。
  2. 外设通过IO与CPU通信,CPU访问外设,就是访问IO接口,由IO接口将信息传给另一端的外设。CPU从来不知道这些设备的存在。

应用程序是什么?应用程序与操作系统如何配合在一起?

  • 应用程序是什么?
    应用程序与操作系统都是软件;
    操作系统是人们方便管理计算机而创造的一套管理办法;
    应用程序由某种语言编写,而语言又由编译器来提供。其实根本没有什么语言,有的是编译器决定怎么样来解释某种关键字及某种语法;
    编译器提供一套库函数,库函数中又有封装的系统调用,这样的代码集合称之为运行库,C语言提供的成为C运行库CRT(C Runtime Libray);
  • 配合
    应用程序+操作系统才是完整的程序。有了操作系统的支持,一些现成的东西已经存在了,平时的应用程序都是半成品,需要调用操作系统提供好的函数才能做成一件事,这个函数便是系统调用

陷入内核

  • 用户进程陷入内核态
    由于内部或者外部中断发生,当前进程被暂时终止,其上下文被内核的中断程序保存起来,开始执行一段内核代码。是内核代码而不是用户程序的代码。这就是相对于CPU来说的内核态用户态
  • 为什么要陷入内核?
    应用程序处于特权级3,操作系统内核处于特权级0。当用户程序需要访问系统资源时(无论是硬件还是内核数据结构),需要进行系统调用,这样CPU就进入了内核态。

内存访问为什么要分段

内存为什么要分段? 分成多少种段? 段与段寄存器的区别?
1MB = 1024 x 1024K = 2^10 * 2^10

  • 8086CPU拥有20根地址中线,最大寻址空间是1MB,而寄存器是十六位寄存器,寻址范围是64KB。用16位寻址20位是不可能的,因此需要将内存分段,每段不超过64KB。使用寄存器表示段基址,使用段基址+段内偏移地址来寻址
  • 实模式:
    就是为了使用16位寄存器完成寻址20位地址,引入了段的概念。所有的段在同一个地址空间
  • 保护模式:
    上面的解释没有看懂,以后填坑

代码中为什么分为代码段,数据段?这和内存访问机制的段是一回事吗?

  • 程序代码中的段本质上(用section或segment定义的段)与内存访问机制中的段本质上是一样的。在硬件的内存访问机制中,处理器使用硬件--段寄存器,指向软件用section或segment定义的内存段。
  • CPU是自动化程度极高的芯片,它在执行本指令的同时会自动获取下一条的地址,会自动获取下一条指令,继续取址,继续执行。
  • 为了让程序内指令接连不断的执行,要把指令全部排在一起,形成一片连续的指令区域,这就是代码段
  • 程序需要操作码,也需要操作数,把数据连续的排在一起存储形成的段落,被成为数据段
  • 数据与代码分开的好处
    • 赋予不同的属性
      代码段只具备可读属性,因为代码不可改变。数据段可以读写
    • 提高CPU的缓存命中率
    • 节省内存
      比如代码,当一个程序的多个副本同时运行时,没必要在内存中同时存在多个相同的代码段,只要共享就可以了。

物理地址、逻辑地址、有效地址、线性地址、虚拟地址的区别:

  • 物理地址:物理内存的真正的地址,CPU最终都要以物理地址去访问内存。
    实模式下,“段基址+段内偏移地址”经过段部件的处理,输出的直接是物理地址
  • 线性地址:在保护模式下,“段基址+段内偏移地址”称为线性地址,此时的段基址不是真正的地址,而是选择子
  • 虚拟地址:保护模式下,开启分页功能,此线性地址又称为虚拟地址
  • 有效地址,逻辑地址: 段内偏移地址又称为有效地址,也称为逻辑地址

什么是平坦模型?

  • 平坦模型是相对于多段模型来说的,所以说平坦模型指的就是一个段。
  • 比如在实模式下,访问超过64KB的内存,需要切换段基址。

CPU内部的段寄存器

Segment Register
每种模式下,段寄存器中的值的意义不同,但无论为何值,在段寄存器中都是指向段在哪里。

  • CS:Code Segment Register
    代码段的段基址
  • DS: Data Segment Register
    数据段的段基址
  • ES:Extra Segment Register
    附加数据段的段基址(不是数据段的附加段。。。),可以额外他用
  • FS:Extra Segment Register
    附加数据段的段基址
  • GS:Extra Segment Register
    附加数据段的段基址
  • SS:Stack Segment Register
    堆栈段的段值

编译型语言与解释型语言的区别

  • 解释型语言:又称脚本语言,脚本的代码相当于某个应用程序输入的文本文件,本身不会在CPU上执行,这个应用程序就是脚本解释器。
  • 编译型语言:编译出来的程序,本身就是一个进程,它由操作系统直接调用,加载到内存后执行。

大端字节序、小端字节序

  • 小端表示法:数值的低字节在内存的低地址上,高字节在内存的高地址上。
  • 大端表示法:数值的低字节在内存的高地址上,高字节在内存的低地址上。
  • 小端:因为低位在低字节,强制转换数据类型不需要再调整字节
  • 大端:有符号数,最高位不但能表示数值本身,还起到了符号的作用。

BIOS中断、DOS中断、Linux中断的区别

  • 在计算机系统中,无论是实模式还是保护模式,在任何情况下都会有来自外部或内部的事情发生。如果事件来自与CPU内部,称为异常;事件来自于外部就是中断
  • BIOS与DOS都是存在于实模式下的程序,由它们建立的中断调用都是建立在中断向量表中。通过软中断指令int来调用。
  • Linux内核是在进入保护模式后才建立的中断例程,在保护模式下,中断向量表已经不存在,取而代之的是中断描述符表(Interrupt Descriptor Table),Linux会通过 int ox80指令进入一个中断程序后,再根据eax寄存器中的值再调用不同的子功能函数。

Section与Segment的区别

  • section称为节,是指在编译源码中经由关键字section或segment修饰,逻辑划分的指令或数据区域,汇编器会将这两个关键字修饰的区域在目标文件中编译为节。
  • segment称为段,是链接器根据目标文件中属性相同的多个section合并后的section集合,这个集合就是segment。可执行程序内存空间中的代码段和数据段就是指这种segment

如何控制CPU的下一条指令

  • 存放下一条指令地址的寄存器称为程序计数器PC Program Counter。
  • PC并不是单一的某种寄存器,而是一组寄存器组合,指的是段寄存器CS和指令寄存器IP;分别表示下一条指令的段基址和段内偏移地址

指令集、体系结构、微架构、编程语言

  • 指令集:是具体的一套指令编码
  • 微架构:不同的CPU厂商使用相同的指令集,却有不同的硬件实现,称为微架构
  • 体系结构:在不同平台,可以编译出都可以运行的程序,这里的平台,称为CPU指令体系结构

MBR、EBR、DBR、OBR

  • MBR:计算机通电之后运行的是BIOS系统,下一个接力棒选手就是MBR(Main Boot Record)它位于硬盘最开始的那个扇区,即0盘0道0扇区,称为MBR引导扇区。
    MBR包含的内容:
    446字节的引导程序及参数
    64字节的分区表
    2字节结束标记0x55和0xaa
    MBR的作用是遍历分区表中可容纳的四个分区,找到合适的次引导程序,移交系统控制权
  • OBR:OS Boot Record,
    MBR下一个找的是内核加载器,它的入口地址也是固定的位置。在OBR的前三个字节存放了跳转指令,当MBR找到活动分区,就跳到OBR引导扇区的起始位置,该跳转指令将处理器带入操作系统引导程序。
  • DBR:DOS Boot Record
    在DOS时代只有四个分区,没有扩展分区,这四个都相当于主分区,所以各主分区最开始的扇区称为DBR引导扇区。后来有了扩展分区之后,无论是主分区还是逻辑分区,为了兼容,分区最开始的扇区作为自己的引导扇区,在里面存放自己的操作系统引导程序,后来类型太多,DOS又退出了历史舞台,所以DBR也称为OBR
  • EBR Expand Boot Record
    MBR中有分区表,扩展分区中是一个个逻辑分区,扩展分区也需要分区表,为了扩展分区存储分区表的扇区称为EBR。EBR位于各个扩展分区最开始的扇区。

MBR位于整个硬盘最开始的块,EBR位于每个扩展分区,各子扩展分区只有一个逻辑分区;
MBR与EBR位于分区之外的扇区,而OBR则属于主分区及逻辑分区最开始的扇区,每个主分区和逻辑扇区都有OBR引导扇区。

相关文章

网友评论

      本文标题:第0章笔记--《操作系统真相还原》

      本文链接:https://www.haomeiwen.com/subject/bsfyrftx.html