原本想先哔哔一下,算了直接开始。
我们往往直接操作的不是硬件,而是操作程序,让程序代替我们操作硬件
而程序=指令+数据
计算机启动时根据BOOt的启动次序,来加载程序
POST:(BOOT的介质是有次序的,而这也需要程序,而这个自举过程BIOS)
计算机五大部件:运算器+控制器+存储器(内存)+输入/输出设备,运算器从存储器中获得数据然后将计算后的数据还放在存储器中,而这个过程要控制器来控制。存储器中是有地址(独立标识,平面编址)的。
抛上来一个图
我们平时使用的计算机也大概就这个样式,每一个程序在执行时占用CPU时间都很短,为了资源的协调就需要内核来进行调度管理,当然这里仅仅是需要内核的一个很小的原因,我先下说的过程中你就能自己终结出来。应用程序要使用硬件资源,不能直接自己去调用,而是依靠内核去管理硬件资源,并把硬件资源虚拟成其他样子,以提供应用程序使用。这一过程是在应用程序去访问内核调用的时候发生的(这个东西很重要叫系统调用system call)。
系统调用是非常底层的东西,导致我们在编程时会需要对某些功能重复编写,号称“不重复造轮子”的社区(往往社区就是指开源社区)当然不会让这样的事情发生,所以我们将常用功能进行封装,形成库,以后开发的时候我们就可以调用库了。
但是可以从图中看到应用程序还是有直接构建在内核上的,应用程序直接使用系统调用原因在于越接近底层执行效率和操作权限越大,所以有些对性能要求及其苛刻的应用和黑帽黑客可能这么干。
操作系统启动后应用程序不一定启动,自动启动的叫做后台服务,当然也可以按需启动应用程序(往往会需要交互)。
交互信息在到达CPU后会通知内核来进行处理,内核载进CPU进行处理,内核最后转交给应用程序。
这里有个问题,就是内核在工作的过程中,应用程序可能会影响到内核数据,所以CPU是分级别的。以同心圆方式,内核在最内为0级别,应用程序在最外。
指令和数据都放在存储器(内存中),为了防止内核数据被修改,内核和应用程序必须隔离。
应用程序的启动SHELL引用程序,理解用户的命令并传递给内核。(interface即指界面又指接口)
shell类型:
GUI图形用户界面
CLI命令行接口
常见GUI
KDE
GNOME
Xface
最后说一下内核一些功能:进程管理,内存管理,文件系统,网络功能,硬件驱动,安全驱动。
这些东西很抽像,很无聊,但是又是必须要学的,时间一长自然会理解,有些问题还没说,留到明天。