Mamba spirit

Gra55

愿背井离乡、追寻梦想的你归来仍是少年

操作系统基础知识概览

操作系统作为计算机科学的基础课程,需要多多了解学习

gra55

2-Minute Read

0x00 计算机硬件结构

                       +------------------+
                       | ======CPU======= |
                       +--------+---------+
                                |
                   +------------+--------------+
    +-----+        |                           |    +------+
    | AGP +--------+ MCH(Memory Controller Hub)+----+Memory|
    +--+--+        |                           |    +------+
       |           +------------+--------------+
+------+-------+                |
|              |   +------------+--------------+     +-----+
|   Display    |   |                           |     |     |
|              |   | ICH(I/O Controller Hub)   +-----+     -->
+--------------+   |                           |     | PCI |
                   +---+--------+-------+----+-+     |     -->
                       |        |       |    |       |     |
          +----------+ |   +----+---+   |  +-+-----+ |     -->
      +---+   USB    +-+   |  ATA   |   |  |Network| |     |
      |   +-------+--+     +----+---+   |  +-------+ |     -->
      |           |             |       |            |     |
  +---+---+  +----+---+  +------+--+ +--+--------+   |     -->
  | Mouse |  |Keyboard|  |Hard Disk| | Flash BIOS|   |     |
  +-------+  +--------+  +---------+ +-----------+   +-----+

计算机体系架构需要知道以下内容:

  • CPU 负责指令执行与控制;
  • MCH - Memory Controller Hub 芯片连接高速部件,如内存、显卡;
  • Memory 内存通过地址总线直接与 CPU 相连,并受控于它,通过数据总线与其传输数据;
  • ICH - I/O Controller Hub 芯片连接各种外部低速输入输出设备,如鼠标、键盘、硬盘、 PCI 外部互连总线扩展设备。

整个体系架构中,CPU 在最上面,也是速度最快的(主频基本都是 GHz 级别),其次是通过 MCH(内存控制芯片)连接的内存和显卡,MCH 又被称为北桥芯片(上北下南),再下面连接的是南桥芯片 ICH(IO 控制芯片),ICH 芯片与各种低速设备连接。

对于 CPU 来说,所有连接的设备都属于 IO 设备,指令需要从内存中输入,处理得到的数据可以写入内存、硬盘,或者输出到显卡,以此来输出到显示器上。

0x01 指令集

3086 是 16 位的 CPU,一共可以寻址 65536 字节(64k),但是其实当时设计的是寻址 1M,所以需要 20 位寻址空间,一个 16 位的寄存器不够,那就用两个,采用分段寻址方式实现 20 位寻址空间。段寄存器 CS(代码段)、DS(数据段)、ES(扩展段)、SS(栈段),通用寄存器 AX、BX、CX、DX,其他控制寄存器 IP(指令指针寄存器)、SP(栈顶指针寄存器)、BP(栈基址寄存器)、SI、DI、FLAG 30386 是 32 位的 CPU

CPU 的指令集也很多,但是基本可以分为两类,它们差别主要体现在指令与数据处理上:

  • CISC - Complex Instruction Set Computer 复杂指令集,具有大量的指令和数据寻址方式;
  • RISC - Reduced Instruction Set Computer 精简指令集,仅处理寄存器中的数据;

PC 结构与 CPU 架构对比,分为以下两种情况,基本属于一一对应关系:

  1. 冯·诺依曼体系结构,对应 CISC 指令系统,如 x86、x86-64、Atom,常用于台式机或服务器:

    • 数据与指令都存储在同一存储区中,取指令与取数据利用同一数据总线。
    • 被早期大多数计算机所采用。
    • ARM7 是冯诺依曼体系结构简单,但速度较慢,取指不能同时取数据。
  2. 哈佛体系结构,对应 RISC 指令系统,如嵌入式中流行的 ARM、PowerPC、MIPS、Sparc、Alpha,常用于工控、移动设备:

    • 程序存储器与数据存储器分开。
    • 提供了较大的存储器带宽,各自有自己的总线。
    • 适合于数字信号处理。
    • 大多数 DSP 都是哈佛结构。
    • ARM9 是哈佛结构,取指和取数在同一周期进行,提高速度,改进哈佛体系结构分成三个存储区:指令区、数据区、共用区。

0x02 汇编语言

CPU 只能执行二进制指令,早期人们编程就是手写二进制指令,二进制指令不方便人类记忆和使用,所以就诞生了汇编语言,使用英文字符表示二进制指令,英文字符和二进制指令是一一对应的。

所以针对不同的 CPU,有不同的指令集,那么相对应的汇编语言指令名称也就不尽相同。

0x03 寄存器

CPU 只负责运算,不存储数据,那么从哪里获取数据,答案就是寄存器(而不是内存,内存相对 CPU 来说太慢了)。寄存器不需要寻址步骤,按名称来区分,比如 x86 的 ESP 寄存器用来存储栈的地址,CPU 直接取 ESP 的值就能拿到数据,不需要寻址。

我们平时说的 16 位、32 位、64 位 CPU,指的就是寄存器的大小。

8086 如何确定下一条指令的地址?

使用代码段寄存器和指令指针寄存器:CS+IP

例如:CS=0xF000,IP=0x390A

那么下一条指令的执行地址就是:(CS«4) + IP = 0xF390A

0x04 内存模型

内存与 CPU 使用地址总线、数据总线、控制总线相连。

8086 的 1M 内存空间如下所示:

  +------------------+  <- 0x00100000 (1MB)
  |     BIOS ROM     |
  +------------------+  <- 0x000F0000 (960KB)
  |  16-bit devices, |
  |  expansion ROMs  |
  +------------------+  <- 0x000C0000 (768KB)
  |   VGA Display    |
  +------------------+  <- 0x000A0000 (640KB)
  |                  |
  |    Low Memory    |
  |                  |
  +------------------+  <- 0x00000000

如果想在屏幕上显示字符串,直接在 VGA 的内存(0xA0000-0xC0000)内写入数据即可。

BIOS 则是机器上电以后最先执行的代码,固定的内存地址为 0xF0000-0xFFFFF。为什么要固定,因为不固定,BIOS 系统找不到该执行哪块代码。BIOS 代码一般是机器厂商出厂时固化写死的。

0xff 参考

文档

工具

  • QEMU Emulator:模拟器,可真实模拟出你的硬件环境,用于调试操作系统等底层系统
  • GDB:GNU 项目的调试工具,用于查看一个程序内部活动
  • GCC:编译器工具集,用于将高级语言编译成二进制可执行程序
  • SPIM 模拟器:一个指令集的模拟器,可以模拟简单指令集,如 MIPS 指令集。QtSpim 是带有图形界面的版本。软件可以直接打开汇编代码。

Recent Posts

Categories

About

Ordinary but not mediocre, fighting