前言
准备24考研的我,开始着手准备408,跟的课程是王道,我大致会按照操作系统,计算机网络,数据结构,计算机组成原理地顺利来进行更新,希望和大家一起学习,共同上岸!
在次之前我们需要先了解它们四个之间地大致关系,如下图所示:
概念
首先我们先来想一下,一台电脑诞生地流程:
Step1:厂家组装一台裸机(纯硬件:包含CPU,内存,硬盘等)
Step2:出售前安装操作系统(如:window10)
Step3:用户安装应用程序(eg:qq)
Step4:使用QQ聊天
概念:是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机的工作和资源的分配;以提供给用户和其他软件方便的接口和环境;它是计算机系统中最基本的系统软件。
概括为以下三点:
1.操作系统是系统资源的管理者
2.是最接近硬件的一层软件
3.是向上层提供方便易用的服务
例子: 打开Windows操作系统的"任务管理器"
功能
系统资源的管理者
操作系统作为系统资源的管理者,它提供什么样的功能以供管理囊?这里举个简单的例子让大家更好的理解:
当我们用QQ和朋友视频聊天的时候:
Step1:在各个文件夹中找到QQ安装的位置(比如:D:/Tencent/QQ/Bin)
逐层打开文件夹,找到QQ.exe这个可执行文件的存放位置,这个就叫做文件管理。
Step2:双击打开QQ.exe
补充:在打开QQ之前,操作系统会把该程序放到内存中,这样才能被CPU处理。
这个把程序相关数据放入内存的,就是存储器管理。
Step3:QQ程序正常运行
对应的进程被处理机(CPU)处理,即处理机管理。
Step4:开始和朋友视频聊天
需要将摄像头设备分配给进程,即设备管理。
通过上面的例子,可以总结出操作系统提供文件管理,存储器管理,处理机管理,设备管理四个功能,这里不做详细介绍,在后面章节一一说明.
向上层提供方便易用的服务
如果没安装操作系统的话,我们知道裸机是纯硬件,只能听得懂二进制指令,如果要想何其交流,必须使用二进制,对用户来说是非常不友好的,使用成本太高,对外暴露了"丑陋",不友好的交互接口,这时在硬件之上安装操作系统,操作系统对外暴漏的是"美丽",友好的交互接口,用户不需要知道底层的原理,只要告诉操作系统需要什么服务,操作系统帮忙完成,这里其实用到的是一种封装思想,操作系统把一些硬件功能封装成简单易用的服务,使用户能更方便使用计算机,用户无需关心底层硬件的原理,只需要对操作系统发出命令即可。
现在直接给用户使用的有GUI(图形用户界面),比如Windows,安卓的图形化操作界面,还有用户可以直接使用的命令接口。也有给软件/程序员使用的程序接口。
GUI
很多现代操作系统都提供GUI,即图形化用户接口,用户可以使用形象的图形界面进行操作,而不再需要记忆复杂的命令,参数。
例如:在Windows操作系统中,删除一个文件只需要把文件"拖拽"到回收站即可。
命令接口
命令接口又分为联机命令接口和脱机命令接口。联机命令接口又叫做交互式命令接口,特点是用户说一句,系统跟着做一句。以Windows系统为例,如下:
Step1:WIN+R
Step2:输入cmd,按回车,打开命令解释器
Step3:尝试使用time命令。
脱机命令接口又称批处理命令接口,特点是用户说一堆,系统跟着做一堆,使用windows系统的搜索功能,搜索C盘中的*.bat文件,用记事本任意打开一个。
程序接口
可以在程序中进行系统调用来使用程序接口。普通用户不能直接使用程序接口,只能通过程序代码间接使用。例如:写C语言"hello world"程序时,在printf函数的底层就使用到了操作系统提供的显式相关的"系统调用"。
操作系统向上层提供了方便易用的服务,有直接给用户使用的GUI,命令接口,也有给软件/程序员使用的程序接口。
作为最接近硬件的层次
没有任何软件支持的软件我们称为裸机,在裸机上安装的操作系统,可以提供资源管理功能和方便用户的服务功能,将裸机改造成功能更强,使用更方便的机器。
通常把覆盖了软件的机器称为扩充机器,又称为虚拟机。
特征
并发
概念:指两个或多个事件在同一时间间隔内发生。这些事件宏观上是同时发生的,但微观上是交替发生的。
常考易混概念--并行:指两个或多个事件在同一时刻同时发生。
操作系统的并发性指计算机系统中"同时"运行着多个程序,这些程序宏观上看是同时运行的,而围观上看是交替运行的。
操作系统就是伴随着"多道程序技术"而出现的。因此,操作系统和程序并发是一起诞生的。
注意(重要考点):
单核CPU同一时刻只能执行一个程序,各个程序只能并发地执行。
多核CPU同一时刻可以同时执行多个程序,多个程序可以并行地执行。
注意:即使对于4核CPUC来说,只要有4个以上地程序需要"同时"运行,那么并发性依然是必不可少地,因此并发性是操作系统一个最基本的特性。
并行和并发对比
例子:假设小渣和老渣每个人都有两个女朋友。小渣和一号,二号同时约会,老渣则是选择分时间段。
这里的小渣就是并行约会:同一时刻同时进行两个约会任务;老渣是并发约会:宏观上,这一天老渣在同时进行两个约会任务。微观上,在某一时刻,老渣最多正在进行一个约会任务。
共享
概念:共享即资源共享,是指系统中的资源可供内存中多个并发执行的进程共同使用。
资源共享方式:1.互斥共享方式:系统中的某些资源,虽然可以提供给多个进程使用,但一个时间段内只允许一个进程访问该资源。2.同时共享方式:系统中的某些资源,允许一个时间段内由多个进程"同时"对它们进行访问。
所谓的"同时"往往是宏观的,而在微观上,这些进程可能是交替地对该资源进行访问的(即分时共享)
生活实例:
互斥共享方式:使用QQ和微信视频。同一时间段内摄像头只能分配给其中一个进程。
同时共享方式:使用QQ发送文件A,同时使用微信发送文件B.宏观上看,两边都在同时读取并发送文件,说明两个进程都在访问硬盘资源,从中读取数据。微观上看,两个进程是交替访问硬盘的.。
并发和共享的关系
虚拟
概念:是指把一个物理上的实体变为若干个逻辑上的对应物。物理实体(前者)是实际存在的,而逻辑上对应物(后者)是用户感受到的。
异步
概念:异步是指,在多道程序环境下,允许多个程序并发执行,但由于资源有限,进程的执行并不是一贯到底的,而是走走停停的,以不可预知的速度向前推进,这就是进程的异步性。
例子:一号的指令1:老渣陪我吃饭,一号的指令2:老渣把心给我;二号的指令1:老渣把心给我,二号的指令2:老渣陪我吃饭;
与一、二号的约会 = 两道并发执行的程序
老渣的心 = 有限的系统资源
由于并发运行的程序会争抢着使用系统资源,而系统中的资源有限,因此进程的执行不是一贯到底的,而是走走停停的,以不可预知的速度向前推进如果失去了并发性,即系统只能串行地运行各个程序,那么每个程序的执行会一贯到底。只有系统拥有并发性,才有可能导致异步性。
上面介绍了操作系统的四个特征,并发,共享,虚拟,异步。
发展与分类
手工操作阶段
程序员把程序写到纸带上,有孔的地方代表二进制的1,没有孔的地方代表二进制的0,然后把写好的程序放到纸带机上,由计算机读取计算,把结果再写到纸带机上打印出,最后由程序员读取。
主要缺点:用户独占全机,人机速度矛盾导致资源利用率极低。
批处理阶段
单道批处理系统
引入脱机输入/输出技术(用外围机+磁带完成),并由监督程序负责控制作业的输入,输出。
这里体现出了操作系统的雏形。
主要优点:缓解了一定程度的人机速度矛盾,资源利用率有所提升。
主要缺点:内存中仅能有一道程序运行,只有该程序运行结束之后才能调入下一道程序。CPU有大量的时间是在空闲等待I/O完成。资源利用率依然很低。
多道批处理系统
每次往内存中读入多道程序,这时候操作系统正式诞生,用于支持多道程序并发运行。
分时操作系统

实时操作系统
运行机制
在开始之前,我问下大家,程序是如何运行的?
C语言代码通过编译器"翻译"成机器指令也就是二进制,一条高级语言的代码翻译过来可能对应多条机器指令,如下所示:
程序运行的过程其实就是CPU执行一条一条机器指令的过程。
"指令"就是处理器(CPU)能识别,执行的最基本命令
注意:很多人习惯把Linux,Windows,MacOS的"小黑框"中使用的命令也称为"指令",其实这是"交互式命令接口",注意与本文的"指令"区别开。
内核程序VS应用程序
特权指令VS非特权指令
应用程序只能使用"非特权指令",如:加法指令,减法指令等等。
内核程序作为"管理者",有时会让CPU执行一些"特权指令",如:内存清零指令,这些指令影响重大,只允许"管理者"--即操作系统内核来使用。
在CPU设计和生产的时候就划分了特权指令和非特权指令,因此CPU执行一条指令前就能判读初其类型。
内核态VS用户态
CPU能判断出指令类型,但是它怎么区分此时正在运行的是内核程序or应用程序?
内核态和用户态的切换
1.刚开机时,CPU 为“内核态”,操作系统内核程序先上CPU运行
2.开机完成后,用户可以启动某个应用程序
3.操作系统内核程序在合适的时候主动让出 CPU,让该应用程序上CPU运行
操作系统内核在让出CPU之前,会用一条特权指令把PSW的标志位设置为"用户态"
4.应用程序运行在“用户态"
5.此时,一位猥琐黑客在应用程序中植入了一条特权指令,企图破坏系统…
6.CPU发现接下来要执行的这条指令是特权指令,但是自己又处于“用户态”
7.这个非法事件会引发一个中断信号
CPU检测到中断信号后,会立即变为"核心态",并停止运行当前的应用程序,转而运行处理中断信号的内核程序。
8.“中断”使操作系统再次夺回CPU的控制权
9.操作系统会对引发中断的事件进行处理,处理完了再把CPU使用权交给别的应用程序
操作系统内核
大内核:将操作系统的主要功能都作为系统内核,运行在核心态;优点:高性能;缺点:内核代码庞大,结构混乱,难以维护
微内核:只把最基本的功能保留在内核;优点:内核功能少,结构清晰,方便维护;缺点:需要频繁在核心态和用户态之间切换,性能低。
中断和异常
中断的作用
“中断"会使CPU由用户态变为内核态,使操作系统重新夺回对CPU的控制权。
中断的类型
内中断(异常,例外)
与当前执行的指令有关,中断信号来源于CPU内部。
例子1:试图在用户态下执行特权指令
例子2:执行除法指令时发现除数为0
若当前执行的指令是非法的,则会引发一个中断信号。
例子3:有时候应用程序想请求操作系统内核的服务,此时会执行一条特殊的指令——陷入指令,该指令会引发一个内部中断信号
指令"陷入指令",意味着应用程序主动地将CPU控制权还给操作系统内核。"系统调用"就是通过陷入指令完成的。
外中断(中断)
与当前执行的指令无关,中断信号来源于CPU外部。
每一条指令执行结束时,CPU都会例行检查是否有外中断信号
总结:
中断机制的基本原理
总结: