计算机体系结构可以类比人类社会的构成:
以helloworld为例,我们常见的helloworld程序背后发生了什么?这里我们详尽,完整的梳理一下整个过程,加深对计算机体系结构的理解:
caozilong@caozilong-Vostro-3268:~/Workspace/helloworld$ gcc main.c
caozilong@caozilong-Vostro-3268:~/Workspace/helloworld$ ./a.out
hello world.
caozilong@caozilong-Vostro-3268:~/Workspace/helloworld$
caozilong@caozilong-Vostro-3268:~/Workspace/helloworld$
整个过程的流程图如下:
1.shell命令解释器,这里是BASH,接收用户输入, shell程序会将用户从键盘输入的每个字符读入CPU寄存器,对应于图中的路径1。在细分下去,其实这里有两种情况,USB控制器和CPU中间有一个寄存器FIFO,寄存器FIFO和内存之间传输有两种方式,第一种方式也就是图中画出的这种,需要通过CPU执行指令从FIFO中读如,再写入主存/内存,由于需要CPU介入,所以效率比较低,还有另外一种方式,FIFO和主存之间通过总线桥中的DMA直接传输数据,无需CPU介入,这种方式效率比较高,途中虚线6绘制的就是这种情况。
2.操作系统会将读取到的"a.out"字符写入内存缓冲区,同时启动加载程序,加载a.out
3.当检测到用户敲入回车后,加载程序会从磁盘加载a.out程序,写入内存。
4.加载程序将PC指针指向主村中的a.out,操作系统将执行流交给a.out继续执行。
5.CPU执行a.out,将a.out中的逻辑输出内容打印出来,现实到屏幕上。
总结:
一个简单的a.out程序,其实足够覆盖计算机体系结构中的大部分内容,图中,CPU,总线,外设,存储器在操作系统的统一支配下联动,完成了输出helloworld的功能,还是非常复杂的。