我们每天都在使用操作系统。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/