Operating System-Kickoff:什么是操作系统&&操作系统的核心概念

时间:2020-11-26 17:15:17

接下来会写一系列Operating System(操作系统)的文章,今天先开个头。本文主要内容:

  1. 什么是操作系统
  2. 操作系统的核心概念
  3. 程序=数据结构+算法

一、什么是操作系统

1.1 操作系统是对硬件的抽象(abstracion)

操作系统的重要功能之一就是隐藏硬件,且把硬件的功能用漂亮高度抽象的接口展露个应用程序。

Operating System-Kickoff:什么是操作系统&&操作系统的核心概念

OS在整个计算机系统中的位置如上图所示。

抽象是管理复杂度的核心理念,操作系统完成了对硬件的抽象,这使得我们程序员从各种五花八门的硬件中解脱出来,使用操作系统所提供的尤美接口进行应用程序的编程。现代人每天都在使用电脑,感觉操作系统是给人用的,其实错了,操作系统是给应用程序用的,不是给人用的。操作系统所做的抽象是给应用程序降低复杂度的。

1.2 操作系统是一个资源管理器

大量的应用程序同时在操作系统上运行,这些应用程序都需要操作不同的资源,I/O,CPU,Memory等等。如何给这些应用程序分配资源,分配策略是什么,如果资源同时被不同的应用程序操作,如何保证这些资源的完整性,等等,这些都是操作系统要解决的问题。

举几个例子:

  1. 谁将得到CPU资源,使用多久
  2. 内存保护:应用A不会使得应用B的数据丢失

二、操作系统的核心概念

文章开始说了操作系统是对硬件的抽象,所以操作系统的核心概念都是对具体物理硬件的抽象,当本系列博文的终点也是下面的几个内容。

2.1 进程(线程)

进程(线程)是操作系统对CPU的抽象

2.2 虚拟内存(地址空间)

虚拟内存是操作系统对物理内存的抽象

2.3 文件

文件是操作系统对物理磁盘的抽象

三、程序=数据结构+算法

程序=数据结构+算法这句话怎么理解,其实可以通过操作系统来理解。

3.1 数据结构

数据结构即抽象,在操作系统中因为抽象,应用程序只需要关注线程,进程,文件,而无需关注这些背后的实现,也不用担心这些背后实现有可能会变化。在平时的应用程序编程中,我们提倡面向接口编程,这个接口即数据结构,当然也是抽象。

还有种种现在的高级语言,比如Java,C#,是更加搞级别的抽象,其编程语法在某种程度来说便是数据结构。

3.2 算法

算法即策略,即折中和权衡,我们处在一个资源有限的世界,这个相对好理解。在操作系统中这个折中和权衡体现的淋漓尽致

  1. cpu有限:谁该得到CPU,得到后拿多久合适
  2. 内存有限:什么时候应该把数据放在内存中,什么时候应该移除
  3. 缓存有限:那些数据应该放入CPU的缓存中,一级还是三级,什么时候应该替换,该替换那些数据
  4. 。。。