第00章 一些你可能正刚到困惑的问题

1 操作系统是什么

操作系统(Operating System,简称OS)是管理和控制计算机硬件与软件资源的计算机程序,是直接运行在“裸机”上的最基本的系统软件,任何其他软件都必须在操作系统的支持下才能运行。

2 软件如何访问硬件

硬件在输入和输出上答题分为:串行和并行,各自通过对应的接口与cpu通信.

cpu访问外部硬件的两个方式:

  1. 讲某个外设的内存映射带一定范围的地址空间中,cpu通过地址总线访问该内存区域时,回落到对应的外设的内存中.这种映射让cpu访问外设内存就如同访问主板上的物理内存一样

这种映射方式由硬件自动完成,并且地址空间地址是固定的

  1. 通过IO借口与cpu通信,cpu访问外设就是访问IO借口

3 内存访问为什么要分段

最早,只有实模式的时候,程序编写是,内存地址直接以物理地址给出.那么程序必须在内存中固定的位置,因此两个编译出访问相同物理地址的程序无法同事运行,因此,让cpu采用段基址+段内偏移地址的形式来访问内存.程序就可以重定位(也就是说改变段基址即可改变整个程序在内存中的位置).重定位的意思是:将程序中指令的地址改写成另一个地址,但是改地址处的内容还是原来地址的内容.

其次,最早寄存器是16位,最多可以访问64\(KB\)内存,程序分段,将大内存分成可以访问的小段.这样的方法可以访问到所有的内存.

4 程序分段

程序在编译后分为:代码段,数据段.原因在于为了程序更加优雅,便于管理.

将数据与代码分开的好处有:

  1. 可以为他们赋予不同的属性:代码段客户性,数据段可读写
  2. 提高cpu内部缓存的命中率:
  3. 节省内存:多程序之间共享相同的代码段

编译器将具有相同属性的数据归类,分段:只读数据和可读写数据.操作系统通过设置GDT全局描述符表来构建段描述符.在段描述符中之地的那个段的位置,大小,属性.由操作系统真正的赋予不同的段不同的权限.

5 各种地址

物理地址:是物理内存真正的地址,相当于内存中每个存储单元的编号,具有唯一性.要访问内存,cpu最终十一物理地址去访问.

有效地址:段内偏移地址,也称为逻辑地址

扫描二维码关注公众号,回复: 481564 查看本文章

在实模式下:段基址+段内偏移地址=物理地址.保护模式下:段基址+段内偏移地址=线性地址(在计算上与实模式是不同的).此时的段基址不是真正的地址,而是一个选择子,本质上是一个选择子或者是GDT数组的下表.GDT中表项,记录了该段的起始地址,大小等信息,如果没有开启分页机制,那么这个线性地址就是物理地址,可以直接访问内存.如果开启了分页功能,那么线性地址成为虚拟地址,需要经过也不见转换成具体的物理地址.

6 段重叠

段基址+段内偏移地址中段基址和段内偏移地址都是任意的,因此可能存在两个完全不同的段基址+段内偏移地址都落到了同意物理地址.这就是段重叠

7 平坦模型

对于段基址+段内偏移地址的形式,可以存在多个段.当cpu位32位的时候,那么一个段内偏移地址就可以访问这个物理内存,此时可以只有一个段,这时候就成为平坦模式.

8 大小端

内存是一字节为单位进行读写的,最小的读写代问是字节.如果内存中写入一个字节,一个内存单元就可以将其容纳,如果写入多个字节,那么这多个字节在内存中不同的排列顺序就是大小端:

  1. 小端字节序是将数据低位字节放在内存低地址处

低位在低字节,因此强转类型的时候不需要调整字节:比如size_t 转int.由8字节变为4字节,此时此时移动的数据少(当然是丢失精度的).

  1. 大端字节序试讲数据高位字节放在内存低地址处

高位在低字节,当有符号输的时候,低位是符号位,判断正负很方便

这个字节序一般是指:单个数据需要占据多个字节的时候,一般对多是4字节或是8字节.数组的时候不算.

网络自己许是大端字节序.x86是小端字节序.

应用采用大端还是小端字节序完全是开发设计产品的需要.

9 中断

BIOS终端,DOS终端,Linux终端

BIOS和DOS中断是在实模式下,由BIOS建立中断向量表IVT,通过软中断指令int中断号,来调用.中断向量表占据了内存的最开始1024字节.每个中断向量是4字节,2字节段基址,2字节段内偏移地址(实模式下).最多256个中断处理程序.

BIOS中断调用的主要功能是提供了硬件访问方法,该方法是对硬件的操作变得简单易行(复用).

猜你喜欢

转载自www.cnblogs.com/perfy576/p/9023931.html
今日推荐