那么什么是操作系统呢?
- 没有一个完整、精确、公认的定义
- 从功能和特点来介绍操作系统
对操作系统的认识
很多的书本上对操作系统都有相应的定义,但对于我个人的理解来说操作系统很难有有一个精确的定义。操作系统是一个复杂的软件,它的外沿边界很难有一个精确的确定。但我们可以从功能来划分什么是操作系统,从而对操作系统是一个什么样的软件有一个更深入的理解。
从两种应用层和内核层视角对操作系统的理解
应用层视角
- 用户角度上,操作系统是一个控制软件
- 管理应用程序
- 为应用程序提供服务
- 杀死应用程序
操作系统对上要对应用程序提供服务,从这个角度来理解操作系统是控制软件,可以来控制计算机里的软件这些应用程序怎么来运行,这是一个控制的角度来考虑。同时来限制不同的应用程序来占用不用的资源。另外一方面,操作系统还会给应用程序提供各种各样的服务,这里面的服务包括I/O服务、声卡、网卡的访问等等,使得计算机能够方便的使用。操作系统能够为应用程序提供各种各样的服务以及访问的限制,使得包括不同的用户不同的应用程序能够在这样的计算机环境中很好的执行,完成各自的工作。
底层视角
- 资源管理
- 管理外设、分配资源
另一方面,操作系统对下,操作系统是一个资源分配的分配器。这怎么理解呢?在我们的计算机系统里面有各种各样的资源,比如说cpu是一种资源,内存是一种资源,还有不同的外设这都是一种资源。那么怎么能够把这些资源协调好,因为计算机上可以跑多个不同的程序。既然这样,那么大家都会去抢占资源,需要操作系统能够把它协调好,使得不同的时刻有不同的程序能够访问不同的资源,能够让大家共享整个的这个计算机系统资源,同时能够让整个计算机系统的效率资源利用率有一个很大的保障。
操作系统视角
看的出来,操作系统是站在一个管理者的角度,来给上层的应用程序、底层的硬件提供一个管理,控制、服务的功能。
用户层与内核层在操作系统上的对应关系
计算机系统中底层的cpu抽象成应用层的进程,磁盘抽象成应用层的文件,内存抽象成应用层的地址空间。这样来给应用程序来使用,这是从资源管理的角度来考虑的把他们抽象出来,更方便的使用。
另一方面,操作系统还起到了一种承上启下的作用
操作系统的层次结构
- 硬件之上
- 应用程序之下
操作系统是一种特殊的软件,我们可以把它称之为系统软件。它是直接面向硬件,和我们一般的应用程序不一样,一般的应用程序访问什么资源其实是我们操作系统提供的,它并不能直接的去访问硬件资源,特别是各种各样的外设资源,而这些外设资源是由我们的操作系统统一协调管理,给上面提供一个抽象的接口。这样上面的应用程序可以很方便的访问这些抽象的接口,不用考虑底层硬件很琐碎的细节。操作系统处于硬件和应用程序中间的这样一个层次,可以理解为中间层的系统软件。
应用软件
- 应用软件:办公软件、视频播放软件
- 操作系统位于应用软件之下,为应用软件提供服务支撑
Linux、Windows、Android的界面属于外壳(Shell),而不是内核(kernel),kernel在Shell之下。我们主要关注操作系统内部到底完成了什么样的功能。分析和理解操作系统更多的是站在操作系统内核的角度来看问题。
Kernel-操作系统内部 组件
- cpu调度器
- 物理内存管理
- 虚拟内存管理
- 文件系统管理
- 中断处理与设备驱动
CPU的管理涉及到CPU的调度,是操作系统中很重要的内容,以及进程线程的管理,这都是和CPU相关的资源的管理。这是内部需要仔细分析的内部的子系统。
另一块就是内存管理,内存第一个涉及到的就是物理内存的管理,怎样有效的把物理内存管理好。另一方面涉及的就是虚拟内存的管理,虚拟内存的管理主要是给上层的应用程序提供相对独立一个尽可能大的空间使用。虚拟内存管理通过一系列的技术手段在有限的内存空间之上虚拟出更大的更安全更方便的虚拟环境。
对于磁盘管理,以磁盘块作为一个读写的单位,这种访问方式比较底层不方便用户、应用程序来更好的存储数据,所以在上面抽象出了文件系统。通过文件系统以文件的方式给用户、应用程序提供一个存储、访问、永久保存数据的环境,这就是文件系统管理。
还有一个与底层相关,中断处理与I/O设备驱动,这一块是直接和底层硬件直接打交道的,表面上看它和我们的应用程序离的比较远,但是它是操作系统很重要的功能单元,它和硬件相关。有了它之后操作系统才可能真正的为应用程序提供各种各样的服务,如果没有中断处理与I/O设备驱动操作系统很难完成上述的功能。
OS Kernel的特征:
并发
- 计算机系统中同时存在多个运行的程序,需要OS管理和调度
共享
- “同时”访问
- 互斥共享
虚拟
- 利用多道程序设计技术,让每个用户都觉得有一个计算机专门为它服务
- 比如:磁盘虚拟为文件系统,内存虚拟为地址空间
异步
- 程序的执行不是一贯到底,而是走走停停,向前推进的速度不可预知
- 但只要运行环境相同,OS需要保证程序运行的结果也要相同
总结:这四个特征有相应的区别和联系