最近在自学计算机相关的基础课程,感觉自己稍微理解了计算机的硬件,软件,以及软硬件接口三大层面的内在关系。
记录一下自己的理解。
我想通过不同层次程序员的视角来看计算机的软件,硬件及软硬件接口。
首先是计算机的硬件。计算机的硬件主要包括CPU,内存以及I/O设备。机器语言程序员,可以通过直接编写CPU可执行的机器指令,从而实现具体的功能,比如读取内存数据。
也就是说,机器语言程序员在编程时,是能够看到计算机的硬件设备,并且需要了解CPU的指令集,以及各个I/O硬件设备的数据手册,才能完成编程。
因此从机器语言程序员的视角,能看到的计算机的部分,都是纯硬件。
但是面向纯硬件编程的话,程序难以实现移植,而且每当I/O设备型号改变的时候,都需要重新阅读其数据手册,任务量庞大而无趣。于是需要一个可以操控所有硬件的程序,这个程序便是操作系统内核(kernel)。通过内核,可以直接使用硬件资源,而不在需要追条编写机器指令,控制计算机的每一步动作。
但是编写操作系统内核的程序员,面向的仍然是计算机中实实在在的硬件,他们需要将多条机器指令组合起来,实现对各个硬件设备的控制。
因此从编写操作系统内核的程序员的视角,能看到的计算机的部分,仍然是纯硬件。
在操作系统内核的基础上,程序员若想使用某个硬件资源,比如读取硬盘的数据,便可直接调用内核留下的函数接口。程序员不在关心CPU是如何一步一步完成硬盘数据读取的,可以很容易的使用硬件资源。这一层可以称作系统调用层。
因此从编写系统调用层程序的程序员视角,已经看不到计算机内部的硬件动作,所看到的就是软件。
操作系统内核和系统调用层合起来就是操作系统,正是操作系统连接了软件和硬件,成为了软件和硬件的接口。
在操作系统基础上编写各种应用程序的程序员的视角来看,看到的就是纯软件了。
---------------------
作者:living_in_code
来源:CSDN
原文:https://blog.csdn.net/weixin_35270638/article/details/78671411
版权声明:本文为博主原创文章,转载请附上博文链接!