操作系统(Operating System,OS)是一款控制和管理整个计算机软件和硬件资源,并合理地组织调度计算机的工作和资源的分配,以及提供给用户和其他软件方便的接口和环境的一款系统软件。
如下图,操作系统位于软件和硬件之间:
比如说打开windows任务管理器,就能看到操作系统管理的软硬件资源。
操作系统作为软硬件资源的管理者,他提供了一些主要的功能:
比如说我们通过QQ和朋友进行视频通话:
可以看到QQ的安装是有多级目录还有一些其它的依赖文件,不同的软件在不同的文件,这些文件其实就是操作系统来帮我们管理的。这是就是文件管理。
双击QQ.exe文件的时候,就会把QQ这个静态程序数据读取到内存中进行运行,这也是操作系统来完成的,这就是操作系统提供的存储器管理,也叫做主存管理/内存管理。
在双击运行QQ时其实还为QQ创建出对应的进程交给CPU进行处理分配处理机资源,这也就涉及到处理机管理。
开始和朋友朋友进行语音通话时操作系统就要将摄像头、声卡、麦克风分配给QQ这个进程使用,这也就是操作系统的设备管理。
计算机的最底层也就是硬件只能识别01这种二进制的机器语言,对用户非常的不友好。而在硬件之上安装操作系统之后,操作系统对外提供了更友好的交互接口,为用户提供服务,此时操作系统就类似于用户和硬件之间的中间人。
用户无需关心底层原理,只需要向操作系统发出对应指令即可。
GUI:图形化用户接口
比如说用户想从桌面上删除一个文件,只需要将这个文件拖拽到回收站会右击点击删除即可,而不需要输入对应的删除命令,这个拖拽操作其实操作系统在背后做了很多工作的。
联机命令接口
比如说通过win+r输入cmd,打开cmd命令窗口输入ipconfig就能查看到电脑的网卡和网络信息。这种用户输入一条命令系统回应一下,这交互式的命令就叫做联机命令接口。
脱机命令接口
脱机命令接口是一种批处理命令接口,批处理接口其实是用户发出一堆的命令,操作系统会根据这一堆命令返回一堆的响应,操作系统一条一条的执行这一堆的命令。
程序接口:
程序接口是在程序中进行系统调用来使用程序的接口,普通用户不能直接使用程序接口,只能通过代码间接使用。这种接口一般是给应用软件或者程序员使用。
比如说在编写C语言程序的时候,通过printf来打印"hello world"。其实就是C语言中的printf函数调用了操作系统提供的接口,也就是说printf底层实现是调用了操作系统提供的和显示相关的系统调用。
操作系统有四个特征,分别是并发性、共享性、虚拟性、异步性,其中并并发和共享是最基本的两个特征。
并发:指定是两个或者多个事件在同一时刻内间隔发生,这些事件在宏观上是同时发生的,但是在微观上是交替发生的。
并行:只的是两个或者两个以上的事件在同一时刻发送的,无论是从微观上,还是宏观上都是同时发送的。
比如说,我们的电脑是两核CPU,此时我们在写代码、听音乐、用浏览查资料,此时就相当于有三个进程,也就是三个任务,此时VS和edge被同时调度到核心1和核心2上执行,无论是从宏观上还是微观上着两个进程都是同时执行的,这就是并行。
但我们此时还有一个音乐软件在运行,这个进程就可能会被操作系统放到核心1或者核心2上执行,也就是交替执行,但由于CPU的运行速度是非常快的这样的交替执行用户是感知不到的,所以这样的交替执行宏观是同时运行的,但微观上是串行执行的,这就是并发执行。
所以操作系统的并发性指的是计算机系统中“同时”运行着多个程序,这些程序宏观上看着是同时运行的,但微观上是交替运行的。
操作系统的共享性指的是资源共享,是指系统中的资源可供内存中多个并发执行的进程共同使用。
操作系统有两种资源共享方式,一种是互斥共享方式,另外一种是同时共享方式。
所谓的**“同时”**往往是宏观上的同时,而在微观上,这些进程可能是交替地对该资源进行访问的(分时共享)
比如说:同时使用QQ和微信进行视频通话,同一时刻摄像头这个硬件设备只能分配给其中一个进程使用,但另外一个进程向使用摄像头时就会提示被占用,这就是互斥共享方式。
再比如说使用QQ发送一个world文件,使用微信发送一张图片,宏观上看,两边都是在同时读取文件并发送,说明此时两个进程都在访问硬盘资源,从中读取数据。微观上看,两个进程是交替的读取硬盘的,这就是同时共享的方式。
针对共享性的发送文件的例子:
如果失去并发性,那么系统中只有一个程序在运行,则共享性则失去了意义。
如果失去共享性,那么QQ和微信不能同时访问硬盘资源,就无法同时发送文件,就无法实现并发。
所以并发性和共享性互为存在条件
虚拟性指的是一个物理上的实体变为若干个逻辑上的对应物,物体实体(前者)是实际存在的,而逻辑上对应物(后者)是用户感受到的。
虚拟技术包含两个方面:
举个例子:
一个电脑是2核CPU,用户打开了下面多个软件
一个程序需要被分配CPU才能正常执行,那么为什么2核CPU的电脑中能同时运行这么多个程序呢?
就是虚拟处理器技术,实际上只有一个2核心的CPU,在用户看来就像是有5个CPU在同时为自己服务。虚拟技术中的时分复用技术微观上处理机在各个微小的时间段内交替着为各个进程服务。
再举个例子:
一个程序在启动时需要放入内存并给它分配CPU才能执行,假设我的电脑只有4G内存。
某款游戏需要4G内存,IDEA需要2G内存,QQ需要512M内存,微信需要512M内存
这些程序运行所有需要的内存远远大于4G内存,那么为什么它们还可以在我的电脑上运行呢?
这就是要到了虚拟存储器技术,实际上只有4G内存,在用户看啦远远大于4G内存,这就是虚拟存储器中的空分复用技术
很显然如果失去了并发性,则一个时间段内系统中只需要运行一道程序,那么就失去了虚拟性的意义了,因此,没有并发性,就谈不上虚拟性
异步是指,在多道程序环境下,运行多个程序并发执行,但由于资源有限,进程的执行不是一贯到底的,而是走走停停,以不可以预知的速度向前推进,这既是进程的异步性。
手工操作阶段,程序员使用计算机的工作流程:
在纸袋上打孔和放入纸袋已经从纸带机上取走结果这几个过程是非常慢的,此时的计算机处于空闲空,而且处于一人一机,程序员只能只能排队使用。
**手工操作阶段主要缺点:**用户独占全机,CPU等待用户,导致资源利用率极低。
引入脱机输入/输出技术(外围机+磁带完成),并由监督程序负责作业的输入、输入。人们把常驻内存的程序负责计算机机的输入输出、运行控制、出错处理的程序称为监督程序。计算机能够自动地成批地处理一个或多个用户的作用,这程序在计算机上运行
引入脱机技术,可以让程序作业的输入输出的时间快很多,可以让CPU的资源利用率提高。
单机处理:一个CPU,意味着单机处理机系统在某一时刻只能处理一个作业
单道:系统一次只让一个作业程序进入系统内存
作业:一次上机活动中需要计算机系统所做的一系列工作集合
批处理:将多个作业组合成一批进行处理,成批的处理,成批的退出。
程序员将多个作业组成一批作业放到纸带机上通过外围机放入磁带中,监控陈旭先将第一批作业调入内存中,第一批内存执行完毕后,再把下一批作业调入内存,等待所有作业执行完毕后,再把作业的运行结果提交给用户。
特点:
减少了人为的干涉,计算机的资源利用率有一定提升
缺点:
内存中只能有一个程序运行,只有你等该程序运行结果后,才能调入下一个程序,CPU有大量时间是在等待I/O完成,资源利用率还是比较低。
多道:内存中可以同时存放多个作业,多个作业交替使用CPU和系统中的各种资源。单道只能存放一个作业。
如下图,作业1在执行的时候,先进行输入,输入完毕后进入计算,此时输入设备就处于空闲状态,那么作业2就可以进行输入,等作业1计算完毕后进入输出,那么作业2就可以进行计算,这个就大大提高了CPU的利用率。
原理:作业成批的输入系统暂存在外存中,组成后备队列,系统按照一定的调度原则从后备队列中选择一个或者多个作业放入内存进行处理。当一批作业运行完毕后,系统便接收下一批作业。
特点:
多道批处理程序宏观上是并行的,微观上是串行的,CPU和其它系统资源可以处于更“忙碌”的状态,系统吞吐量增大。
缺点:
用户响应时间长,没有人机交互,用户提交自己的作业之后就只能等待计算机处理完成,中间不能控制自己的作业执行,且无法调试程序/无法在程序运行过程中输入一些参数。
为了解决多道批处理系统的没有人机交互功能,于是就出现了分时操作系统。
分时操作系统:计算机以时间片为单位轮流为各个用户/作业服务,各个用户可以通过终端宇计算机进行交互。
入下图,从1号用户开始,轮流被CPU调度执行50ms
特点:
用户的请求可以被及时响应,解决了人机交互的问题,允许多个用户同时使用一台计算机并且用户对计算机操作相互独立,感受不到别人的存在。
缺点:
不能优先处理紧急任务,操作系统对各个用户/作业的调度是完全公平的,循环地为每个用户/作业服务一个时间片,不区分任务的紧急性。
实时操作系统:及时性,实时系统必须具有在一个事先定义后的时间限制内,对外部或者内部的事件进行响应和处理的能力,并且控制所有实时任务协调一致地运行。且严格在指定时间内处理完事件。
实时操作系统分为:
实时操作系统的特点:及时性和可靠性
网络操作系统是在通常操作系统功能的基础上提供网络通信和网络服务功能的操作系统,有利于在网络上进行资源共享,提供网络用户所需要各种服务的软件和相关规程的集合。
定义:将多台计算机组成一种特殊的计算机网络。系统中的多台计算机可合作执行同一个任务,使资源共享更彻底。分布式操作系统运行在不具有共享内存的多台计算机上,但在用户眼里确只有一台计算机。
主要特点是:分布性和并行性