Post

RISCV操作系统-CH01-计算机系统漫游

RISCV操作系统-CH01-计算机系统漫游

第1章 计算机系统漫游

循序渐进,学习开发一个RISC-V上的操作系统

目录

计算机的硬件组成

计算机系统的硬件组成主要包括中央处理单元(CPU)、存储器以及输入输出设备等部分。

计算机体系结构

计算机体系结构主要分为两种类型:

  • 冯·诺依曼架构(Von Neumann architecture):又称普林斯顿架构(Princeton architecture)

    • 特点:指令和数据不加区别地存储在存储器中,经由同一个总线传输
    • 优点:总线开销小,控制逻辑实现更简单
    • 缺点:执行效率较低(存在”冯·诺依曼瓶颈”)
  • 哈佛架构(Harvard architecture)

    • 特点:将程序指令和数据分开存储
    • 优点:执行效率较高
    • 缺点:总线开销更大,控制逻辑实现更复杂

RISCV操作系统-CH01-20250413.png

处理器基本组成

中央处理单元(CPU)主要包含以下组件:

  • 算术逻辑单元(Arithmetic Logical Unit, ALU):负责执行算术和逻辑运算
  • 控制单元(Control Unit, CU):负责控制CPU的操作
  • 寄存器(Registers):CPU内部的高速存储单元
  • 程序计数器(Program Counter):存储下一条指令的地址

程序的存储与执行

程序执行基本过程

程序执行遵循指令周期,主要包括以下三个阶段:

  1. 取指(Fetch):从内存中读取指令
  2. 译码(Decode):解析指令的含义
  3. 执行(Execute):执行指令指定的操作

RISCV操作系统-CH01-20250413-1.png

晶振(时钟)推动着计算机执行过程的前进

程序执行示例:Mini计算机模型

以8位mini计算机为例,该计算机只支持加法计算,其指令集设计如下:

RISCV操作系统-CH01-20250413-2.png

操作描述 操作码(OPCODE) 操作数(OPERANDS) 指令格式
将内存地址中的值加载到寄存器0 LOAD: 01 REGISTER_0: 00
ADDRESS: XXXX
XXXX-00-01
将内存地址中的值加载到寄存器1 LOAD: 01 REGISTER_1: 01
ADDRESS: XXXX
XXXX-01-01
寄存器0和寄存器1相加,结果存储在寄存器0 ADD: 11 REGISTER_0: 00
REGISTER_1: 01
NN-01-00-11
将寄存器0的值存储到内存地址 STORE: 10 REGISTER_0: 00
ADDRESS: XXXX
XXXX-00-10

其中指令格式如下:

1
2
3
4
位位置:  7   6   5   4   3   2   1   0
         +---+---+---+---+---+---+---+---+
         |      地址     |  寄存器 | 操作码 |
         +---+---+---+---+---+---+---+---+

或者对于ADD指令:

1
2
3
4
位位置:  7   6   5   4   3   2   1   0
         +---+---+---+---+---+---+---+---+
         |    N/A   |  寄存器1 |  寄存器0 | 操作码 |
         +---+---+---+---+---+---+---+---+

指令执行示例

以下演示了mini计算机执行指令的过程:

RISCV操作系统-CH01-20250413-3.png

  1. 程序计数器指向内存地址0,开始取指
  2. 从内存加载指令01000001(将地址4的值加载到寄存器0)
  3. 执行指令,将值00000001加载到寄存器0
  4. 程序计数器增加,继续取指
  5. 从内存加载指令01010101(将地址5的值加载到寄存器1)
  6. 执行指令,将值00000010加载到寄存器1
  7. 程序计数器增加,继续取指
  8. 从内存加载指令00010011(将寄存器0与寄存器1相加,结果存入寄存器0)
  9. 执行指令,将00000001 + 00000010 = 00000011存入寄存器0
  10. 程序计数器增加,继续取指
  11. 从内存加载指令01100010(将寄存器0的值存储到地址6)
  12. 执行指令,将值00000011存储到内存地址6

程序语言的设计和进化

程序语言的发展经历了多个阶段,逐步提高了抽象程度和开发效率:

机器语言

  • 最底层的编程语言,由0和1组成
  • 直接对应处理器指令,无需翻译
  • 例如:01000001 表示将内存地址4的值加载到寄存器0
  • 优点:执行效率高
  • 缺点:难以阅读和编写,可移植性差

汇编语言

  • 使用助记符替代二进制指令
  • 与机器指令一一对应
  • 需要通过汇编器转换为机器语言
# 汇编语言示例
.global add     # 定义入口
add:
    load r0, 0x04    # 从地址0x04加载到r0
    load r1, 0x05    # 从地址0x05加载到r1
    add r0, r1       # r0和r1相加,结果存入r0
    store r0, 0x06   # 将r0存储到地址0x06
array:
    .byte    0x01    # 定义字节数据
    .byte    0x02
    .byte    0x00
    .end             # 文件结束

高级语言

  • 接近自然语言,更加易于理解和编写
  • 通过编译器或解释器转换为机器语言
  • 提供更高级的抽象和更强大的功能
1
2
3
4
5
6
7
// 高级语言示例 (C语言)
#include <stdio.h>
int main()
{
    printf("hello world!\n");
    return 0;
}
1
2
3
4
5
6
7
8
9
// 高级语言示例 (JavaScript)
// Advanced Language
byte array[3] = {1, 2, 0};
function add()
{
    byte a = array[0];
    byte b = array[1];
    array[2] = a + b;
}

存储设备的层次结构

计算机的存储系统采用层次化结构,不同层次的存储设备在速度、容量和成本上存在差异:

存储层次结构

从上到下依次为:

  1. 寄存器(Register)
    • 速度:极快
    • 容量:极小
    • 成本:极高
  2. 高速缓存(Cache)
    • 速度:很快
    • 容量:小
    • 成本:高
  3. 主存(Main Memory)
    • 速度:中等
    • 容量:中等
    • 成本:中等
  4. 本地存储(磁盘)
    • 速度:慢
    • 容量:大
    • 成本:低
  5. 远程存储(网盘)
    • 速度:很慢
    • 容量:很大
    • 成本:很低

存储性能特征

存储设备的性能特征总结如下:

特征 上层存储(寄存器、缓存) 下层存储(磁盘、网盘)
速度
容量
成本

操作系统

操作系统是管理计算机硬件和软件资源的程序,提供各种服务给应用程序。

操作系统的主要功能

  • 保护硬件被失控的软件应用程序滥用
    • 提供隔离和保护机制
    • 管理硬件资源的分配和回收
  • 向应用程序提供简单一致的抽象接口来控制复杂的多种外设硬件
    • 隐藏硬件的复杂性
    • 提供标准化的接口

操作系统的分层结构

操作系统在硬件和应用程序之间起到中间层的作用:

1
2
3
4
5
6
7
8
+--------------------+
|     应用程序        |  \
+--------------------+   \
|     操作系统        |    > 软件
+--------------------+   /
| 处理器 | 主存 | 外设 |  /
+--------------------+
       硬件
  • 系统调用(System Call):应用程序通过系统调用请求操作系统服务
  • 指令集架构(ISA):操作系统通过指令集架构与硬件交互
This post is licensed under CC BY 4.0 by the author.