系统结构

计算机最早的结构是由冯·诺依曼提出的冯·诺依曼结构,而现代计算机中使用的是总线结构

冯·诺依曼结构

冯·诺依曼提出的冯·诺依曼结构是最早的计算机结构,它明确了计算机的5大部件(储存器,运算器,控制器,输入设备,输出设备)其中运算器和控制器组成了CPU, 储存器又是由内存储器(内存),外存储器(硬盘),Cache(在现代计算机中被集成在CPU中)。此处发散一下,CPU能操作直接操作的外设只有内存(寄存器不是外设),操作其他外设时需要通过IO进行操作或操作设备在内存中的映射

内存映射

这个更简单,显示器的相关操作就是这样的。 在古早时期,计算机中没有显卡,由CPU来直接控制显示器,此处由两种模式,文字模式和图形模式。文字模式就是只能显示文字,想想cmd窗口,那时的电脑就是那样的,全屏黑窗口。而图形模式更为现代,就类似于我们看到的windows系统,可以显示图形化的界面。 无疑文字模式的实现更为简单,在文字模式中内存的0xB8000-oxBFFFF(真实地址)的部分就是显存在内存中的映射。只要我们将要输出的文字信息以ascii码+样式信息的方式写入到这段内存中,显示器就会出现想要的文字
如下代码便是汇编中hello world的实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
mov ax,0xB800  
mov es,ax

mov byte [es:0x0000],'h'
mov byte [es:0x0001],0x07

mov byte [es:0x0002],'e'
mov byte [es:0x0003],0x07

mov byte [es:0x0004],'l'
mov byte [es:0x0005],0x07

mov byte [es:0x0006],'l'
mov byte [es:0x0007],0x07

mov byte [es:0x0008],'o'
mov byte [es:0x0009],0x07

mov byte [es:0x000A],' '
mov byte [es:0x000B],0x07

mov byte [es:0x000C],'w'
mov byte [es:0x000D],0x07

mov byte [es:0x000E],'o'
mov byte [es:0x000F],0x07

mov byte [es:0x0010],'r'
mov byte [es:0x0011],0x07

mov byte [es:0x0012],'l'
mov byte [es:0x0013],0x07

mov byte [es:0x0014],'d'
mov byte [es:0x0015],0x07

Tips:当然通过[[BIOS中断]]进行更简单的实现

冯·诺依曼结构的示意图如下:

总线结构

总线结构的计算机以总线为中心,将五大部件连接。是现代计算机的常见结构。
tips:总线是为多个功能部件提供服务的一组公用信息线,包括地址线,数据线和控制线

IO操作

在汇编中表示为IN,OUT命令,如下是8086汇编读取硬盘中数据的代码:
读取第二个扇区的内容到内存为0x1000的地方

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74

mov edi, 0x1000; 读取的目标内存
mov ecx, 2; 起始扇区
mov bl, 1; 扇区数量

read_disk:

; 设置读写扇区的数量
mov dx, 0x1f2
mov al, bl
out dx, al
// ax = 12345678 ah=1234 al=5678
inc dx; 0x1f3
mov al, cl; 起始扇区的前八位
out dx, al

inc dx; 0x1f4
shr ecx, 8
mov al, cl; 起始扇区的中八位
out dx, al

inc dx; 0x1f5
shr ecx, 8
mov al, cl; 起始扇区的高八位
out dx, al

inc dx; 0x1f6
shr ecx, 8
and cl, 0b1111; 将高四位置为 0

mov al, 0b1110_0000;
or al, cl
out dx, al; 主盘 - LBA 模式

inc dx; 0x1f7
mov al, 0x20; 读硬盘
out dx, al

xor ecx, ecx; 将 ecx 清空
mov cl, bl; 得到读写扇区的数量

.read:
push cx; 保存 cx
call .waits; 等待数据准备完毕
call .reads; 读取一个扇区
pop cx; 恢复 cx
loop .read

ret

.waits:
mov dx, 0x1f7
.check:
in al, dx
jmp $+2; nop 直接跳转到下一行
jmp $+2; 一点点延迟
jmp $+2
and al, 0b1000_1000
cmp al, 0b0000_1000
jnz .check
ret

.reads:
mov dx, 0x1f0
mov cx, 256; 一个扇区 256
.readw:
in ax, dx
jmp $+2; 一点点延迟
jmp $+2
jmp $+2
mov [edi], ax
add edi, 2
loop .readw
ret

Tips:以上程序节选自我的操作系统的[[Boot]]程序

辨析

在嵌入式中IIC是一种常见的通信协议,由是一种双线协议,由时钟总线,地址总线组成。这符合总线的定义但与PC上的总线有一定区别。

总线结构的示意图如下:

五大部件

CPU

由三个部分组成运算器,控制器,Cache(属于储存器)。

运算器又称算数逻辑部件(缩写ALU)主要功能是完成对数据的算术运算,逻辑运算和逻辑判断等操作。

控制器(缩写CU)是整个计算机的指挥中心,负责根据事先给定的命令,发出各种控制信号指挥计算机各部分的工作。

储存器

  • 内存储器

    • Cache

    • 主存

    • 寄存器(在CPU上)

  • 外存储器(属于输入输出设备)

主存

主存就是内存条 缩写RAM
寻址空间=2的位数次方B,e.g.32未电脑的寻址空间为2的32次方B=4,294,967,296B=4GB
此处附上换算方式:1B(字节)=8b(位) 1 KB = 1024 B 1 MB = 1024 KB 1 GB = 1024 MB 1TB = 1024GB

Cache

Cache是为解决CPU与主存之间,速度不匹配而采用的一种技术,也称高速缓存。分为1级缓存(L1),2级缓存(L2),3级缓存(L3)等。
它的工作原理是基于程序访问的局部性,

Tips: 程序访问的局部性是指在一个较短的时间间隔内,由程序产生的地址通常集中在存储器逻辑地址的很小的范围内

0x01 -> 0x1234
0x02 -> 0x4321

输入/输出设备(I/O设备)

  • 输入设备:程序和数据等信息都需要通过输入设备送入计算机

  • 输出设备:计算的结果或各种控制信号需要通过输出设备传送出去。 计算机的I/O设备或装置统称为外部设备,简称外设。 CPU与外设连接的电路称之为I/O接口

程序运行示意图:


系统结构
https://www.yunqi-log.link/CCF CSP-S/系统结构/
作者
Yunai
发布于
2023年7月20日
许可协议