Linux学习:计算机和操作系统的基础知识

  在正式开始学习 Linux 操作系统之前,有必要先回顾/学习一下计算机和操作系统的基本知识,为我们在后续的学习中铺路搭桥,在了解计算机一些基础原理的条件下再去进行学习,理解应该会更透彻一些。我会从一个程序的简单构成开始,逐步介绍我对计算机工作原理的一些理解,希望能够给大家做一个参考。由于中间涉及的知识很多,有些内容我没有进行深究,存在许多漏洞,因此仅供参考。

  1.程序的构成

  程序是由什么构成的?简单说来,这里有一个公式:程序 = 数据 + 指令。这是程序员再熟悉不过的了,数据自不用多说,指令就是告诉程序,怎样操作目标数据,这个“操作”不仅仅是在数据之间进行简单的运算,而是包含了操作这些数据的一系列行为的集合,比如做两个数字的加法运算,除了本身的加法这一指令之外,我们还需告诉CPU从哪里读取目标数据,以及完成加法操作后将数据放到何处等。

  计算机的底层是二进制数据,因此不管是指令还是数据,最终都会以二进制的形式保存。对于CPU,怎么区分我们传入的二进制代码是数据还是指令呢?这就需要不同的线路将数据和指令进行分离。

控制(指令)总线:用来向CPU传输指令

数据总线:用来向CPU传输数据

  2.CPU的简单理解

  一个CPU的核心部件包括三个:运算器,控制器和寄存器。

  运算器是执行运算操作的地方,它会接收数据的输入,在内部计算完成之后将数据输出。

  光有运算器还是不够的,由于我们的指令和数据都是保存在内存中,运算器需要知道在内存的哪个地方读取数据,哪个地方读取指令,以及在计算完成之后将数据放到哪里等。这些信息就是由控制器提供的。

  寄存器是做什么的?寄存器也叫暂存器,顾名思义,就是暂时保存数据的地方。寄存器位于CPU的内部,用以保存等待处理或者处理过的数据。为什么需要寄存器?比如我们做一个四则运算,每次运算之后的结果应该保存在哪里?内存吗?如果将每步运算结果保存在内存中,无疑是加大了CPU的开销,因为要在每步计算完成之后将其放入内存中,然后再读取出来,再输入到运算器进行计算……这很麻烦,开销很大,并且浪费了CPU宝贵的性能。寄存器的作用就是将数据暂时存放在CPU的内部,那么CPU在访问这些数据的时候,效率将会得到极大的提高(就近原则)。

  3.中断机制(Interrupt)

  计算机有很多I/O设备,比如键盘,鼠标,,光驱,磁盘,硬盘等。如果我们敲击了键盘,CPU怎么知道我们操作的是键盘而不是鼠标或者光驱呢?我们可以将敲击键盘这个行为当做一个事件,这个事件是偶发的,CPU如果想侦测到这个事件,有两个方式可以选择:

轮询机制(Poll):CPU比较勤快,每隔一段时间就去看看,有没有发生这个事件,如果发生了,就执行某个操作,如果没有发生时间,则不做任何处理。

中断机制(Interrupt):CPU比较懒,并不想总是去查看这些事件有没有发生,而是找另一个人帮忙看着,如果发生了事件,就通知CPU,CPU再去做相应处理。

  和CPU一样,我们都非常勤(lan)快(duo),喜欢轻松又有保障的活。对于轮询机制,有一个问题:事件是有随机性的,有可能CPU轮询了一天,用户并没有做出任何操作,那不是亏大发了吗。所以我们肯定会选择中断机制啦,事实上CPU采用的也正是中断机制。

  4.中断控制器

  上面说了CPU的中断机制。那么问题来了,CPU又怎么知道是鼠标还是键盘上产生了事件?

  这时候中断控制器就登场了。中断控制器和CPU的针脚相连,如果把中断控制器比做蜘蛛,它将通过周围遍布的蛛网和计算机上的I/O设备连接,如果某个I/O设备上产生了一个事件,就会发生电信号的变化,这个变化通过蛛网传给中断控制器,控制器也就知道是哪一个设备发生了响应,进而将讯息传递给CPU。

  5.南桥和北桥

  对于计算机中的数据处理,有高速低速之分,或者高频和低频之分。南桥和北桥就是分别用来传输这两种类型的数据,北桥在物理上距离CPU较进,用来处理高速高频的数据。大多数的I/O设备都在南桥上,这些设备经过南桥汇总后,通过线路连接传到北桥,再由北桥传给CPU。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/14845.html