操作系统是什么?
操作系统几大概念
附记
-
认识操作系统
相信对计算机有基本的认识的人,会了解计算机有五大部件:运算器,控制器,存储器,输入设备,输出设备。而这些物理部件是一个个非常复杂的系统。如果每一个应用程序员都不得不掌握这些硬件的所有细节,那么就不可能再编写代码了。因而,管理这些部件并且加以优化地使用,是一件挑战性极强的工作。而我们所要介绍的操作系统,就是在计算机上安装的一层软件。这个软件负责管理那些内部构造非常复杂的物理部件,并且将其优化方便使用。所以从这个角度来讲,操作系统是建立在物理机上的一层软件。
于是现在我们就可以把计算机从大范围层次来划分,计算机划分为硬件层,软件层(当然目前我们不考虑通信相关的知识)。
硬件层就是我们的物理机器的所有部件。而软件层中,操作系统处于最底层,它运行在裸机之上,为所有其它软件提供基础的运行环境。在《现代操作系统》这本术上,作者将软件层又分为内核态,用户态。操作系统运行在内核态,它具有对硬件的绝对访问权。而我们日常使用的软件(考虑一般情况):web浏览器,电子阅读器,音乐播放器等等都是处于用户态,用户态的程序中,会影响机器的控制或可进行I/O操作的指令是被禁止的。
所以我们可以这样理解:操作系统直接操控着硬件,对硬件有着绝对的访问权。我们用户日常用的应用程序都是运行在操作系统提供给我们的运行环境。而这个运行环境是操作系统提供的,那么操作系统出于对硬件资源的保护和安全问题,应用程序对硬件的操作需要经过操作系统的允许。我们现在从另一个角度来理解操作系统:
有一个在我看来非常重要的关键字,就是“抽象”!
我们现在看一个场景: 小明现在想在电脑上记笔记,于是他创建一个专门用来记笔记的文件夹,然后创建一个文件来记笔记。
上面的场景习以为常,在我们日常工作学习中再正常不过了。我们现在尝试着忘记“操作系统”,“文件”这两个词。上面的场景可以改写成这样:
小明现在想在电脑上记笔记,于是他向存储器中占用一段空间,并且往这段空间里保存东西。通过两种场景的比较,我们可以看到,操作系统提供使用硬盘的一层抽象:文件。使用该抽象,我们能创建,读写存储器中的某空间。在创建这层功能,这层抽象后,我们把其称作“文件”。现在想想,我们习以为常的对电脑的操作,甚至计算机的“文件”这个名称也是操作系统对存储器的抽象的一种体现。我们不必理解存储器是怎样来存储文件的,而只需要会操作,例如创建文件,删除文件等等。相比于硬件底层细节的极大的复杂性来说,这些上手快的操作简直是极大地方便了用户对计算机的操作!
所以,另一个角度理解操作系统:
操作系统的的任务是创建好的抽象,并实现和管理它所创建的抽象对象。抽象是理解操作系统的关键。
操作系统的一个主要任务是隐藏硬件,呈现给程序(以及程序员)良好,清晰,优雅,一致的抽象。
当然,还有一种从硬件的角度,即自底向上的角度:
操作系统的主要任务是记录哪个程序正在使用什么资源,对资源请求进行分配,评估使用代价,并且为不同的程序和用户调解互相冲突的资源请求。
总结:我想无论从哪个角度来分析操作系统这个在计算机中非常重要的角色,都不能剥夺操作系统在计算机中的关键地位,即:它是联系上层应用与下层物理实现的桥梁。
-
概念
操作系统几大概念: 进程,地址空间(内存管理),文件,I/O管理,系统安全,系统调用
这些会随着我学习的深入,继续更新学习笔记。 -
附记
操作系统的学习是计算机组成的后续课程。所以较多的牵涉硬件知识,需要补补硬件知识。另外学习操作系统更加深入计算机知识体系。同时之前接触过Java,学到后面有多线程相关的编程学习。发现对这方面丝毫不了解。所以对于编写软件,理解线程原理还是有很大的好处的。
招式虽重要,但核心原理更重要。
*注: 本文为个人博客文集《操作系统》的学习篇第一篇。如感兴趣,可关注后续文章。
学习笔记难免有错误观点,欢迎指正
参考书籍:《现代操作系统》