我们在刚开始学习数据库的时候,有这么一句话:数据库技术是研究数据库的结构,存储,设计和使用的一门技术。那么在计算机社区,处在最底层的人民都是怎么做的呢?这里的存储是怎么存储数据和指令
CPU:
1)结构:
由很多具有ON/OFF开关功能的晶体管组成,
从功能上来说,包括控制器,运算器,寄存器,时钟四个部分。
2)存储策略:
通过寄存器存储指令和数据,数据包含“用于运算的数值”和“表示内存地址的数值”两种。
不同类型的CPU,其内部寄存器的数量,种类,以及寄存器存储的数值范围都是不同的。
其中程序寄存器,累加寄存器,标志寄存器,指令寄存器,栈寄存器只有一个,其他的寄存器一般有多个。
3)设计:
存储指令和数据的内存,是通过地址来划分的,所以借助程序计数器,存储下一条指令所在内存的地址。 在程序的执行过程中,通过地址到内存中取得指令和数据。
4)使用:
通过修改程序计数器的值,这样就可以返回到上一个地址来重复执行同一个指令或跳转到任意地址。
机器语言的call指令和return指令实现函数的使用:函数调用使用的call指令,而不是跳转指令,在将函数的入口地址设定到程序计数器之前,call指令会把调用函数后,要执行的指令地址存储在名为栈的主存中,函数处理完毕后,再通过函数出口来执行return指令,return命令的功能是把存储在栈中的地址设定到程序计数器中
5)总结
知道CPU的结构,存储策略,设计和使用之后,CPU可以通过基址寄存器和变址寄存器实现类似数组的操作。
CPU能够执行的指令也是有限的:
内存
1)结构:
由很多具有ON/OFF开关功能的晶体管组成
在程序员看来,可以把它假想为每层都存储着数据的楼房,
2)存储策略:
数据信号引脚有D0---D7 共8个,表示一次可以输入输出8位的数据,地址信号有A0---A9共10个,表示可以指定0000000000-11111111111 共1024个地址,内存IC内部有大量可以存储8位数据的地方。通过地址指定这些场所,之后便可以进行数据的读写
编程语言中的数据类型,表示的是存储的是何种类型的数据,物理上以一个字节为单位,来逐一读写数据的内存,在程序中通过指定其类型,也能实现以特定字节数为单位进行读写。
即使不指定地址,也可以在内存中对数据进行读写,这是因为在程序运行时,Windows等操作系统会自动决定变量的物理地址。
3)设计
向内存IC中写入读出数据:
通过使用指针(一种变量,它表示的不是数据的值,而是存储着数据的内存的地址),就可以对任意指定地址的数据进行进行读写。
4)使用
数组能使编程工作变得高效
数组是指多个同样数据类型的数据,在内存中连续排列的形式,作为数组元素的各个数据,会通过连续的编号被区分开来,这个编号称为索引,指定索引后,就可以对该索引所对应地址的内存进行读写操作, 索引和内存地址的变换工作是由编译器自动实现的。
5)总结
1)通过栈和队列可以不通过指定地址和索引,来对数组的元素进行读写,
如果我们在内存中预留出栈和队列所需要的空间,并确定好输入输出的顺序
就不用再指定地址和索引了。
2)通过使用链表,可以更加高效的对数组元素进行追加和删除处理。而通过使用二叉查找树,则可以更加高效地对数组数据进行检索。
二叉查找树由链表构造发展而来的表现形式,因此在追加和删除元素方面也同样是有效的。
只要在程序开发中多花一些心思,我们就可以熟练的使用内存,实现栈处理,链表处理,二叉查找树处理等。
磁盘:
1)结构
磁盘是通过把其物理表面划分成多个空间来使用的,划分的方式有扇区方式和可变长方式两种,一般的Windows计算机所使用的硬盘和软盘,采用的都是扇区方式。
2)存储策略
磁盘的数据保存是以簇为单位来进行的。
3)设计
设计来保存长期要使用的数据。
4)使用
磁盘和内存互相合作,有虚拟内存,磁盘缓存使用。
5)总结
储存量大。
指令的执行
指令保存在硬盘,要运行指令,首先将其加载到内存中,然后cpu通过地址一条一条的执行指令。