# 简单说一下CPU和OS的关系
想象在19世纪或者更早的时候出现的机械计算机,即使计算一个乘法也需要一个庞大的设备,比如这个莱布尼茨发明的可计算乘除法的手摇机械计算机,

或者这个

或者第一台电子三极管计算机

一直到intel的这个

,事实上,只要你有一种工具能够表示数字并且能够自动计算,你就可以发明一个计算机。
ok,假设现在你有个一个计算机,你也只能计算一些纯粹的数字,仅仅是停留在数学意义上,不能表达这个世界,而先驱们的野心可不止让计算机停留在数学层面,他们想使用计算机来表达整个世界,就像数学家想用一个公式来解释世界一样简单,一样完美。因为会遇到类似下面的问题:
比如有一天,你老板今天让你实现一个实现自动计算计算工资的功能,你说别慌,我先去定制个计算机,花了一个月实现了;
然后又说,需要一个计算公司运营成本的功能,你说别慌,我先去定制个计算机,需要一个月,这样非常麻烦。
当然也可以堆硬件堆出来,比如显卡、声卡、网卡、FPGA等专业芯片,或者硬件大佬们自己鼓捣的玩意。毕竟软件能做的硬件都能做,但是成本可能巨高。
为了让计算能够实现更多的功能,于是就有了将计算进行抽象的硬件,将基础运算都集成到一个电路板上,你要计算,ok,可以,只要给我计算指令就行了,至于这个指令上面是计算什么或者表示什么,是个图片,是个声音,亦或是个符号,I don't care,计算机只管拉磨。

好像一切都好了,可是实际情况是,有的时候一个公司一个组织才有一个计算机,如果分开使用呢,或者同时使用呢,这个时候就需要一个上帝来调度和分配这些任务,于是OS来了。OS会根据将交给它的任务进行都调度到cpu上去执行,至于咋执行,os说了算。
随着时间的推进,OS被赋予了越来越多的功能,但是它的基本功能还是物理资源的大管家,

- 给cpu派活,或者告诉cpu我要执行哪些指令
- 打断cpu的工作,cpu不能一直傻傻一直干,使用的人要交互啊,就像你老板随时要打断你工作一样,支持鼠标、键盘、网卡等各种IO设备。
- 支持多个人同时使用,即多用户操作系统,有些OS可能不需要多人操作
- 门卫,保护计算机不被坏人破坏,大致cpu不能工作,各种安全设置。
家用PC、服务器、车载、军用等cpu或者os,他们的基本任务都是干这些的,也都要遵循一定的硬件规范,也就是操作系统和CPU或者硬件之间得配合,这就是x86或者arm架构等实现的,这些架构规定了os的使用方式与规范。 总的来说,CPU提供了计算硬件资源和计算规范,OS根据这些规范来调度和分配资源,OS是计算机提供的虚拟世界与硬件之间的中间商。
