系统结构
计算机最早的结构是由冯·诺依曼提出的冯·诺依曼结构,而现代计算机中使用的是总线结构
冯·诺依曼结构
冯·诺依曼提出的冯·诺依曼结构是最早的计算机结构,它明确了计算机的5大部件(储存器,运算器,控制器,输入设备,输出设备)其中运算器和控制器组成了CPU, 储存器又是由内存储器(内存),外存储器(硬盘),Cache(在现代计算机中被集成在CPU中)。此处发散一下,CPU能操作直接操作的外设只有内存(寄存器不是外设),操作其他外设时需要通过IO进行操作或操作设备在内存中的映射
内存映射
这个更简单,显示器的相关操作就是这样的。 在古早时期,计算机中没有显卡,由CPU来直接控制显示器,此处由两种模式,文字模式和图形模式。文字模式就是只能显示文字,想想cmd窗口,那时的电脑就是那样的,全屏黑窗口。而图形模式更为现代,就类似于我们看到的windows系统,可以显示图形化的界面。 无疑文字模式的实现更为简单,在文字模式中内存的0xB8000-oxBFFFF(真实地址)的部分就是显存在内存中的映射。只要我们将要输出的文字信息以ascii码+样式信息的方式写入到这段内存中,显示器就会出现想要的文字
如下代码便是汇编中hello world的实现
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的地方
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接口。
程序运行示意图:

系统结构
本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。


评论