对于一台计算机,机器本身只能识别0、1,因此你必须学习机器语言才能与计算机进行面对面的交流,你写的程序要给计算机看,你得参考相应机器本身各个硬件的功能函数,期间需要参考相应的硬件技术手册,这工作量无疑是巨大的,并且你辛苦编出来的程序对于不同的机器却无法移植,且程序程序具有专一性(即:如果你已经开发了一个浏览器程序,想要再开发文件管理程序,还得重头看硬件手册)。
为了们看得懂的程序语言,并创造了“编译器”将这些程序语言转译成机器语言。如此一来修改解决程序的专一性问题,计算机学家设计了人和编写代码变得容易很多。
但在这样的情况下,仍然存在着需要考虑根据硬件系统编写程序,例如:你要把数据写入内存,你得了解到该类型内存的内存地址是如何定位的,然后通过不断重复编写句柄来记载数据地址的变更。
正因为基于硬件层面编写软件,不具有移植性且编写复杂。为此我们希望如果能将所有硬件都驱动,并且提供一个开发软件的参考接口给工程师开发软件,那开发软件不就变得很简单了?
于是顺应着,操作系统就出现了。
操作系统其实也是一组程序,这组程序的重点在于管理计算机的所有活动以及驱动系统中的所有硬件。总之,硬件所有操作都必须通过操作系统来完成。
计算机系统的需求和期望与现有硬件的低层性能之间的差距。这个差距就是由操作系统(OS)和其他工具及支持程序所弥补的。
这样一来,原先软件开发从参考硬件函数就转成操作系统内核功能。为了保护内核,还会提供系统调度接口,开发人员只要遵循系统调用参数来进行开发就行。
图:操作系统的角色
操作系统内核即为操作系统的核心。它负责管理系统的进程、内存、设备驱动程序、文件和网络系统管理,决定着系统的性能和稳定性。“内核”指的是一个提供硬件抽象层、磁盘及文件系统控制、多任务等功能的系统软件。一个内核不是一套完整的操作系统。
操作系统的内核层直接参考硬件规格写成,所以同一个操作系统不能在不一样的硬件架构下运行,所以为什么有分32/64位的操作系统,因为32/64位的cpu的指令集不太相同,对于一些其他的硬件设备,好在目前都有所谓的可加载模块功能,将驱动程序编辑成模块,就不都需要重新的编译内核,增加了操作系统的可移植性。