定义与价值(what&why)
我们每个人都有个人电脑(PC, Personal Computer),可以想象一下,你的电脑正在你的面前。首先,我们都知道通常它是由显示器、鼠标、键盘和主机组成的。当你按下电源键打开电脑后,如果你想在电脑中保存一些内容,你会把光标移动到word程序图标之上,并通过双击鼠标左键打开这个程序;之后你可以在程序的窗口中输入你想保存的东西,比如通过键盘输入”hello,world!”;接着通过菜单栏中的保存按钮你可以确认期望保存的文件位置,比如/root/hello.txt;如果一切顺利,那么当你再次打开这个文件的时候,你会看到里面的内容还是”hello,world!”。又或者你想借助电脑进行一些数值运算,这时你会打开计算器程序,在里面输入你想计算的算式,比如”1+1”;当前点击等号按钮时,你就会得到你想要的计算结果,比如这里就是2。再或者你想给远方的朋友发个问候,你只需要打开即时通信程序,选择你的好友之后,输入你想说的话,点击发送之后你的好友就会在他的电脑上看到你发送的消息。如果你想在工作的时候听听音乐,也未尝不可,你只需要打开音乐播放器后选择你想听的歌曲,当你回到工作程序时,你的电脑会保持工作程序和音乐播放器同时运行,两者不会有影响。当然,如果你和我一样,也是一个程序员的话,也可以完全不必受限于电脑中已有的程序:打开代码编辑器,输入你想要的代码,编译,运行,想要什么功能就有什么功能(简直就是上帝:-))。
上面这些是大家所熟悉的使用场景,它们涵盖了机算机的核心概念:从物理视角上看,计算机包含输入输出设备和主机;首先使用者通过输入设备产生物理变化(机械或光,包含命令和信息),接着主机基于内部状态和输入设备的物理变化,发生内部状态的改变,并且这种内部状态的改变与输入设备的物理变化(命令)存在确定性的对应关系,最后主机通过输出设备将内部状态传递给使用者;从功能视角上看,计算机在命令的控制下,实现了以存储、计算、网络通信为基础的各种功能。另外,这些功能不但可以多任务并行化提升效率,而且可以通过编程(顺序、分支、循环、函数)的方式组合扩展出更多丰富的功能。
计算机提供的存储、计算和网络功能就像七巧板一样,可以拼装出各色各样鲜活漂亮的图案,所以理论上,它可以满足人们所有的信息化需求(信息获取、状态改变),取代大量的脑力劳动,成为人类最忠实的助手。需要人的地方就有计算机的用武之地,它可以比人更可靠、更快速地完成各种任务。计算机的应用场景由最初的科学和军事计算,扩展到办公自动化,再到人们生活的方方面面,如今已经成为必不可少的一个部分。
实现原理(how)
总的来说,计算机是由硬件和软件组成的,成分目录如下(通过链接查看深入分析):
硬件组成 | 软件组成 |
---|---|
中央处理单元(CPU)与内存(Memory):计算机核心部件,内存中以二进制方式存放着应用程序的代码和数据,而CPU则根据程序的代码对数据进行计算和修改 | 应用程序:应用程序员通过各种编程语言实现,控制计算机硬件完成最终用户可见的各种任务,对外体现为各种应用功能 |
内存管理单元(MMU):为CPU提供内存地址转换服务,使CPU只能看见虚拟内存空间,不用关心物理内存分配,使得多任务并行化时,开发与运行过程都变简单 | 内核(系统中存在的一种特殊程序,存放于内存的特定位置,并占用CPU的部分执行时间来完成系统管理并为应用程序提供底层硬件服务)-内存管理:内核实现的页表管理、缺页处理、内存分配与回收等功能 |
定时器(Timer):计时部件,当时间到期后以中断方式打断CPU | 内核-时钟管理与进程管理:内核对时钟中断进行处理并以此触发进程(任务)调度,对进程进行管理 |
中断与异常(Interrupt and Exception in CPU):CPU内部的一种机制,可以打断当前正在执行的程序转而执行其它程序 | 内核-中断与异常处理、系统调用:中断/异常/系统调用是内核获得CPU执行权的主要前置条件,中断/异常由硬件触发并由内核进行处理,系统调用由应用程序触发并由内核提供相关服务 |
输入输出接口(Input Output Interface):CPU与外设进行通迅的接口,包括总线、中断路由等 | 内核-设备管理与驱动:内核对IO设备进行管理和驱动 |
存储设备(Storage Device):计算机内部提供持久化存储服务的设备,主要由各类存储介质和控制单元组成 | 内核-存储栈:内核中为多个任务提供存储服务的功能接口,如文件系统、通用块设备管理 |
网络设备(Network Device):计算机内部提供数据传输服务的设备,主要由各类通信部件组成 | 内核-网络协议栈:内核中为多个任务提供网络服务的功能接口 |
鼠标、键盘等设备:人机交互的基本输入输出设备 | 内核-基本输入输出系统:内核实现的抽象输入输出基本功能 |
固件(firmware):固定于持久化存储之中的一类程序,完成与硬件实现细节强相关的管理和硬件结构呈现等功能,为内核屏蔽硬件细节 |
各硬件成分的逻辑关联结构如下所示:
我们以使用word程序进行文档保存的场景来看看是计算机内部部件是如何协同工作的:移动鼠标并双击图标时,鼠标会将这此操作转换成事件并通过中断通知CPU;CPU进入中断上下文执行中断处理函数来捕获这些事件,之后交由SHELL程序(计算机开机后自动运行的服务程序,负责接收用户的输入、显示图形界面并运行相应的程序)进行解析;SHELL解析得知用户期望运行word程序,随即通过系统调用来创建一个新的进程(运行中的程序);CPU在时钟的驱使下开始调度执行新创建的word进程,进程运行初期由于并未分配可用的内存会产生缺页异常;CPU在异常处理过程中为进程分配内存并进行地址映射,完成后便重新进行进程的执行;该进程正常运行时首先会通知SHELL程序需要在显示器上生成一个新窗口并注册事件处理函数;新窗口产生后,word进程便可以捕获用户的输入;用户完成输入以后,点按保存按钮进行保存时SHELL再次通知word进程发生了保存事件,word进程便会执行事件处理函数通过系统存储接口向存储设备发起存储请求,word进程自身则进入睡眠状态;存储设备存储完成后,通过中断通知CPU,CPU便会唤醒word进程再次进入可编辑状态(注:实际的word程序不会以同步化方式等待IO操作,这里为了方便说明问题作了一些简化)。
修改记录(change_log)
2020-08-01:以知识树方式重新整理;