接下来会写一系列Operating System(操作系统)的文章,今天先开个头。本文主要内容:
- 什么是操作系统
- 操作系统的核心概念
- 程序=数据结构+算法
一、什么是操作系统
1.1 操作系统是对硬件的抽象(abstracion)
操作系统的重要功能之一就是隐藏硬件,且把硬件的功能用漂亮高度抽象的接口展露个应用程序。
OS在整个计算机系统中的位置如上图所示。
抽象是管理复杂度的核心理念,操作系统完成了对硬件的抽象,这使得我们程序员从各种五花八门的硬件中解脱出来,使用操作系统所提供的尤美接口进行应用程序的编程。现代人每天都在使用电脑,感觉操作系统是给人用的,其实错了,操作系统是给应用程序用的,不是给人用的。操作系统所做的抽象是给应用程序降低复杂度的。
1.2 操作系统是一个资源管理器
大量的应用程序同时在操作系统上运行,这些应用程序都需要操作不同的资源,I/O,CPU,Memory等等。如何给这些应用程序分配资源,分配策略是什么,如果资源同时被不同的应用程序操作,如何保证这些资源的完整性,等等,这些都是操作系统要解决的问题。
举几个例子:
- 谁将得到CPU资源,使用多久
- 内存保护:应用A不会使得应用B的数据丢失
二、操作系统的核心概念
文章开始说了操作系统是对硬件的抽象,所以操作系统的核心概念都是对具体物理硬件的抽象,当本系列博文的终点也是下面的几个内容。
2.1 进程(线程)
进程(线程)是操作系统对CPU的抽象
2.2 虚拟内存(地址空间)
虚拟内存是操作系统对物理内存的抽象
2.3 文件
文件是操作系统对物理磁盘的抽象
三、程序=数据结构+算法
程序=数据结构+算法这句话怎么理解,其实可以通过操作系统来理解。
3.1 数据结构
数据结构即抽象,在操作系统中因为抽象,应用程序只需要关注线程,进程,文件,而无需关注这些背后的实现,也不用担心这些背后实现有可能会变化。在平时的应用程序编程中,我们提倡面向接口编程,这个接口即数据结构,当然也是抽象。
还有种种现在的高级语言,比如Java,C#,是更加搞级别的抽象,其编程语法在某种程度来说便是数据结构。
3.2 算法
算法即策略,即折中和权衡,我们处在一个资源有限的世界,这个相对好理解。在操作系统中这个折中和权衡体现的淋漓尽致
- cpu有限:谁该得到CPU,得到后拿多久合适
- 内存有限:什么时候应该把数据放在内存中,什么时候应该移除
- 缓存有限:那些数据应该放入CPU的缓存中,一级还是三级,什么时候应该替换,该替换那些数据
- 。。。