我们每天都在使用操作系统。Windows、Linux、安卓、iOS,都是非常经典的操作系统。有了它们,我们才能够更好地使用电脑、手机这样的硬件终端设备。

那么,操作系统的本质是什么?到底具有哪些功能和特性?我们常说的进程、线程、内核、中断、GUI、CLI……又是什么意思?

接下来,我们一起寻找答案。

什么是操作系统

从本质来看,操作系统其实就是一套软件。它也是代码写出来的,像我们现在普遍使用的Windows10,主要就是C/C++写的。

操作系统属于软件,但又是非常特别的软件。

在整个计算机架构中,它距离硬件最近,是最重要、最基础的软件。它负责控制和管理整个计算机系统的资源,并进行合理组织、调度和分配。

对于用户(user)和上层应用软件(application)来说,操作系统把很多底层的细节都封装隐藏起来了,通过标准接口以供调用,大大简化了上层应用软件的开发。

与此同时,它又提供了很多辅助性的工具和功能,让用户可以更好地掌控计算机的运行状态。

换句话说,操作系统就是一个超级大管家。它什么都管,为用户服务,向用户负责。

操作系统的核心功能

我们可以把操作系统的核心功能分为以下几个方面:

进程管理

进程(Process)和线程(Thread),是操作系统里非常重要的两个概念。
进程是资源分配的基本单位。进程的创建、终止、调度、同步以及进程间的通信,都是由操作系统负责的。应用程序的运行,包括操作系统本身核心功能的运行,都是以进程的形式存在。

每个进程都包括程序的代码、数据、状态,以及操作系统为该程序分配的资源(如内存空间、文件句柄、网络端口等)。操作系统通过进程管理,来确保各个进程能够高效、安全地共享CPU时间。
我们使用“Ctrl+Alt+Del”快捷键调出Windows的任务管理器,就可以看到很多的进程:

线程,则是操作系统进行运算调度的最小单位。

线程比进程更低一级,是进程内的一个可以独立调度和指派的执行单元。

一个进程中可以有多个线程,共享相同的内存空间和资源,可以更容易地进行通信和数据共享。

例如你启动了一个浏览器程序,那么,操作系统就会开启一个相应的进程。这个进程里面,又会有多个线程,如HTTP请求线程、事件响应线程、渲染线程等。

如果你关闭这个浏览器程序,从任务管理器可以看到,这个进程和对应的线程都没有了。当然,你也可以在任务管理器里,直接右键关闭某个进程,程序也就强制退出了。Linux里干掉一个进程,用的命令就是“kill(杀掉)”。

线程是操作系统发展到后期才引入的。它进一步提供了程序执行的并发性,提高了系统的效率。

需要注意的是,一个程序可以对应一个或多个进程。

白话举例:

小明(操作系统)创办了一家互联网小公司,因为准备同时开发A与B两个软件,所以小明请了两个开发团队来做这件事情,分别是小王开发团队与小李开发团队,可是公司特别小,只有一个房间(CPU),而且房间(CPU)只能容纳一个开发团队,为了能让两个软件能同时开发,小明(操作系统)决定,上午小王团队开发,下午小李团队开发(这个过程称为调度)。

小李(进程)与小王(进程)身为团队负责人,他们要操心的事情比较多,需要对软件进行分析整理,做架构设计,最后再把任务细化分配给团队的每个开发人员(线程),在团队交换房间的时候,还需要把整个软件开发进度记录下来,方便下次接着开发,相比开发人员就轻松多了,每个人只负责一小块,需要记录的也只有一小块。

通过这个小故事,大伙也看出来了,一个进程管理着多个线程,就像团队负责人(进程)管理着多个开发人员(线程)一样。

内存管理

你在windows上安装了qq软件,此时qq的所有代码、数据、图片等都只存在于你的硬盘里,你只有登录了qq,qq的代码、数据、图片才会被加载到内存中去,此时才会占用你的内存空间。你关闭qq后,操作系统系统就会收回qq所占用的内存空间,并把你的聊天记录回写到硬盘,以确保不会丢失数据。

程序要从硬盘到内存,才能够被运算器(CPU)处理。每个程序都有足够的内存空间,才能够确保正常运行。

运行之后,内存也需要被及时释放,才能让别的程序能够继续占用。
内存的分配和回收,也是操作系统负责的。

除了内存分配之外,操作系统还要负责进行内存保护(确保每道程序都只在自己的内存区中运行,进程间不会互相干扰)。

设备管理

操作系统设备管理的首要任务是识别和管理系统中的所有硬件设备。每一个硬件设备在系统启动时都需要被识别、初始化和配置。这一过程通常通过设备驱动程序来完成。设备驱动程序是操作系统与硬件设备之间的桥梁,它允许操作系统通过标准接口与硬件设备进行通信。设备管理模块会维护一个设备列表,记录每个设备的状态、类型和配置信息。设备列表的准确性和完整性直接影响到系统的运行效率和稳定性。

如果你的windows系统没有安装显卡驱动程序,则你的桌面显示肯定不会流畅,当你刷新桌面时,会看到瀑布一样的流,整个刷新过程是很缓慢的。

文件系统管理

文件系统通过名字就可以知道,他是管理文件的创建、存储、复制、删除等功能的一个软件。我们在windows上创建、复制、删除、移动文件时,底层都是通过windows的ntfs这个文件系统实现的。

文件系统是操作系统中负责管理持久数据的子系统,说简单点,就是负责把用户的文件存到磁盘硬件中,因为即使计算机断电了,磁盘里的数据并不会丢失,所以可以持久化的保存文件。

文件系统的基本数据单位是文件,它的目的是对磁盘上的文件进行组织管理,那组织的方式不同,就会形成不同的文件系统。比如windows的ntfs、fat,linux上的ext3、ext4等。

安全和权限管理

有了硬件和软件资源,我们还要指定到底谁能够使用他们。

操作系统提供了完善的安全机制,确保用户数据的安全性和完整性,包括用户身份验证、访问控制和加密等。

交互界面

操作系统是用户使用计算机的一个工具。我们想要让计算机工作,就需要一个好的交互界面,以便下达命令、查询结果和状态。

操作系统提供图形用户界面(GUI,Graphical User Interface)或命令行界面(CLI,Command Line Interface),让用户能够方便地与计算机交互。这是计算机在社会全面普及的一个前提条件。

很多人都用过“cmd”调出来的命令行界面,那种叫做联机命令接口,也叫交互式命令接口。

值得一提的是,图形界面和命令行外,操作系统还提供了程序接口。

程序接口由一组系统调用(system call)组成,允许应用程序间接调用资源。

操作系统的主要特性

除了上面说的六大功能之外,操作系统还有四个特性,分别是:并发、共享、异步和虚拟。

并发(concurrency)

并发是指两个或多个事件在同一时间间隔内发生。操作系统具有并发特性,是指其具有处理和调度多个程序同时执行的能力。

并发和并行(parallellism)是有区别的。并行是两个或多个事件在同一时刻内发生。举例来说,一边吃苹果一边看电视,是并行。在1分钟之内,吃掉苹果、香蕉和橘子,就是并发。

很显然,并发从宏观上看是同时发生的,但从微观上看是分时交替发生的。并发考验的是资源调度的能力,而并行需要硬件的支持,例如采用多核处理器。

共享(sharing)

共享,是指系统中的资源可以被多个并发进程共同使用。它分为两种方式,互斥共享和同时共享。

互斥共享,顾名思义,就是不能同时用。仅当某一进程访问完并释放该资源后,才允许另一进程对该资源进行访问。这类资源称为临界资源或独占资源。计算机系统中的大多数物理设备,都属于临界资源。

同时共享,就是能够多个进程同时用。最典型的设备,就是硬盘。

异步(asynchronous)

说的到异步,就不能不讲同步

白话解释同步与异步:
同步
我给你打个电话, 请你帮忙做件事。
我不挂电话, 站着不动, 一直等你把事情做完。
等你做完了我才挂电话, 然后再做我的事。
你做事时我必须等, 你做完了我才能动。
我只有一个电话, 每次只能打一个电话。

**
异步**

我给你打个电话, 请你帮忙做件事, 但不等你,我挂了电话做自己的事儿 (不被阻塞)。
你做完了你可以通知我,此时我可以做其他的事。

说白了就是,同步操作系统需要等待程序处理完才能做其他事。异步就是让程序做事,不需要等待他完成,现在操作系统去做其他事。

可以看出,同步的效率很低,而异步的效率很高,可以同时做几件事。

操作系统的常见分类

随着技术的发展,现代操作系统已经经历了数十年的演变。

计算机硬件不断升级,用户需求不断增加,系统功能不断迭代,最终导致整个操作系统的架构变得越来越复杂,代码体积也越来越庞大。

以前的操作系统只有几MB,一个软盘就能装得下。现在的操作系统,动辄几个GB,甚至几十GB,DVD光盘都装不下。

针对不同的设备终端类型,以及不同的应用场景,操作系统也出现了细化分的趋势,演变出很多类别。

通常来说,操作系统大致可以分为桌面操作系统、服务器操作系统、移动终端操作系统、嵌入式操作系统、物联网操作系统等类别。

总结

操作系统的核心功能:

  • 进程管理
  • 内存管理
  • 设备管理
  • 文件系统管理
  • 安全和权限管理
  • 交互界面

操作系统的主要特性:

  • 并发
  • 共享
  • 异步

原创文章,转载请注明出处:http://b.nwumba.cn/article/94/