1. printf("Hello world!");屏幕上显示字符了屏幕怎么显示的
再谈数据。首先是关于printf函数在何处的信息。在动态链接中,这些信息就是printf这个名字还有动态链接库的名字。在静态链接中,printf处于一个绝对或相对的地址,也就是一个或多个整数中。再有一部分数据就是"Hello world!"字符串。这条字符串以某种编码存在程序中。 那么显示的过程是怎样的呢。当然是靠操作系统。操作系统显示出字符串需要显示设备,那么工程师就需要为操作系统编写程序控制这些显示设备,习惯上我们称这些控制程序为驱动程序。首先,显示设备需要按照CPU设计来与设备交互的方式接入到CPU所在的计算机系统,驱动程序按照显示设备的工作方式编写,控制CPU和显示设备,以便操作系统实现显示功能。 那么现在这个实现链条愈发清晰了:编译器将语句printf("Hello world!");分解成指令和数据,这些指令使得字符串"Hello world!"被丢给C函数库处理,C函数库的指令使得这条字符串被送给操作系统的编程接口,在操作系统中,先按照字体文件将字符串数据转化成图像方阵。显示驱动程序通过计算机总线将图像方阵信息写入到帧缓冲区,这些信息被反映到显示设备的输出中,你就从屏幕上看到打印出的字符串了。 CPU真正的做法只是载入数据到内存地址空间,或者执行内存中的指令。载入哪些数据到内存地址空间是由内存地址空间上更早的指令决定的。那么最早的这些指令是怎么来的呢,答案是在CPU通电之前这些指令已经被编入到内存地址空间了。那么这些预先载入的指令会指挥CPU开始执行位于BIOS中的程序,这些程序会在连接到计算机上的设备都准备就绪后按照BIOS的配置查找启动设备。以PC举例,它按顺序读取各个启动设备的数据,确认设备是否可用于启动。当它读到操作系统所在的存储设备时,它将操作系统的启动程序读入到内存中并执行它们。 操作系统程序是怎么编译链接的呢?答案是由更早的操作系统上的程序编译链接。那么最早的操作系统怎么编译链接呢?答案是由没有操作系统的计算机上的程序编译链接。是的,操作系统不是必须的。最简陋的操作系统只是对硬件功能的简单封装,这些封装不是必须的。那么最早的程序是怎么输入到计算机上的呢?答案是通过复杂的接线来体现计算逻辑。在计算机刚小型化的那几年,流行的是用纸带打孔、或者按动开关。