计算机作为程序运行的主要载体,了解其运行机理和组成原理对于优化程序是很有帮助的,这里详细介绍一下计算机是如何运转起来的。
在计算机加电启动之后,中央处理器(CPU)会从一个固定地址加载指令序列执行。通常这个地址是固化在主板上的BISO程序。
BIOS程序包含的内容包括:
1.存储设备的的驱动程序,用以识别常用的存储设备,如软盘、硬盘、光驱等
2.基础设备的驱动程序如键盘、鼠标、显示器
3.对设备启动和配置的管理能力
4.在外置存储上执行程序的能力
5.将执行权限转移动外置存储,跳转到外置存储的固定地址,把执行权限交给该地址上的引导程序。
由于BISO执行外部存储的能力是非常简约的,所以执行的引导区的程序并不长。引导区只是简单的跳转到真正的操作系统启动程序,但有时计算机安装了多个操作系统,此时引导区会提供菜单让你选择要运行的操作系统。
在很早之前,计算机并没有操作系统,如果没有操作系统的时候,引导区需要做的事情有哪些呢?
引导程序做的事情有:
1.支持外部存储的数据格式,提供统一的功能给其他程序使用
2.提供管理外部存储的基础能力 独立程序如ls
3.执行外部存储上的可执行程序 sh
4.汇编语言编辑器 vi
5.汇编编译器 asm
具体的启动流程如下图所示:
启动流程这样设计的目的,首先BIOS没有固化在CPU 中,而是独立放在主板的ROM上,是因为不同的时期输入设备不同,有键盘+鼠标+显示器的也有触摸屏的,也有纯语音交互的,外置存储则有软盘、硬盘、U盘,这些变化修改BIOS就可以不有修改CPU了。
引导区引导程序,则是从内置存储ROM转到外置存储的边界。引导区引导程序很短,BIOS只需要把它加载到内存行执行就可以了。这样系统的控制权就很巧妙的转到外置存储了。引导区引导程序不固化在BIOS中,是由于BIOS程序经常修改。
OS是操作系统(Operation System)的缩写。OS引导程序,则是外置存储接手计算机控制权的真正开始,当完成初始化操作之后把执行权交给OS Shell程序,OS Shell 负责操作系统和用户的交互。
从客户价值来看,操作系统首先要解决的是软件治理的问题,大体可以分为以下六个字系统:进程管理、存储管理、输入设备管理、输出设备管理、网络管理、安全管理等。
操作系统其次解决的是基础编程接口的问题。
在这里科普一个小知识,是先有的操作系统还是先有的编程语言?类似于哲学里的先有的蛋还是先有的鸡。
汇编语言的出现要早于操作系统,操作系统的核心目标是软件治理,只有在计算机需要管理很多任务的时候,才需要操作系统。
在没有操作系统之前,BIOS可能包含的内容是这样的:
1.外置存储设备的驱动程序
2.基础外部设备的驱动程序
3.汇编语言的编辑器、编译器
4.把程序的源代码写入磁盘,从磁盘读入的能力
这样计算机就可以完成程序的编写和运行了。