1. 概念
在讲述计算机操作系统之前,需要引入一些概念。
在计算机不存在操作系统的年代,是完全没有任何相关应用程序的,由于我们计算机是借助于硬件进行工作的,因此当时的“程序员”就需要用使用很多的开关将机器语言的程序输入到计算机,由于需要扳动多个开关,过程十分麻烦,所以程序员们开发出仅具有加载和运行功能的监控程序,通过启动监控程序将机器语言的程序进行加载和运行,虽然现在看起来依旧比较麻烦,但对于当时来说缓解了一部分工作量,随着时代的进一步发展,监控程序中开始有越来越多的功能被集成进去(如输入输出程序),由多个程序的集合体组成,这就是操作系统的原型。
1.1. 定义
- 裸机上加载的第一层软件,对计算机硬件系统的首次扩充
- 控制和管理计算机软硬件资源,合理组织计算机的工作流程,提高资源利用率
- 方便用户使用的一个程序集合
1.2. 种类
- 批处理操作系统
优点:资源利用率高,系统吞吐量大
缺点:作业平均周转时间长,无交互能力 - 分时操作系统
多用户,交互性,及时性 - 实时操作系统
多用户,交互性,及时性(比分时操作系统高),高可靠性 - 网络操作系统
- 分布式操作系统
- 嵌入式操作系统
1.3. 特征
- 并发
两个或两个以上事件在同一时间间隔内发生,一个CPU同时执行多个任务,例如秒杀,多个人做同一件事
并行是指两个或两个事件在同一时刻发生,多个CPU同时执行多个任务 - 共享
- 虚拟
- 异步
1.4. 功能
2. 程序
2.1. 运行状态
- 用户态(目态)
- 核心态(管态)
2.2. 程序顺序执行的特征
- 顺序性
- 封闭性
- 可再现行
2.3. 程序并发执行的特征
- 间断性
- 失去封闭性
- 不可再现性
3. 进程
操作系统设计的基本概念,是程序在给定数据集合上的一次执行过程,是系统进行资源分配和运行调度的最小单位。
-
进程是程序的运行过程,是系统进行资源分配和调度的一个独立单位。
-
进程实体由PCB、程序、数据段、堆栈组成,有一定的生命周期,是程序的一次执行过程,是动态的,它的存在是暂时的,程序是指令的有序集合,是静态的,它的存在是永久的。
-
一个程序可产生多个进程,一个进程可执行一个或几个程序。
3.1. 特征
- 动态性
- 并发性
- 独立性
- 异步性
- 结构特征
3.2. 进程控制块PCB(Process Control Block)
进程存在的唯一标识,包含进程的描述信息和管理控制信息,与进程存在一一对应关系,是记录型数据结构。
- 组织方式
- 线性方式
- 链接方式
- 索引方式
3.3. 进程状态
3.3.1. 临界资源与临界区
- 临界资源指一次只允许一个进程使用的资源
- 临界区是指进程中访问临界资源的那一段代码
3.3.2. 进程同步
多个并发进程因相互协调产生的一种直接制约关系
3.3.3. 进程互斥
多个并发进程竞争临界资源时产生的一种间接制约关系
3.3.3.1. 互斥的四条准则
- 空闲让进
- 忙则等待
- 有限等待
- 让权等待
3.3.4. 进程通信方式
- 低级通信方式
- 高级通信方式
1. 共享存储器
2. 消息传递
3. 管道通信
3.4. 进程调度算法
- 先来先服务调度算法
- 时间片轮转调度算法
- 优先级调度算法
- 多级队列调度算法
4. 线程
线程是进程中可独立执行的子任务,仅是调度和分配CPU时间的基本单位,一个进程可以拥有多个线程。
4.1. 进程和线程的区别
- 进程是拥有资源的独立单位,线程本身不拥有资源,但可以访问其隶属进程的资源。
- 进程是拥有资源和独立调度的基本单位,线程仅仅是调度和分配CPU时间的基本单位。
- 进程之间可并发执行,一个进程中的多个线程也可并发执行。
- 进程切换开销远大于线程切换的开销。
5. 死锁
计算机系统中多道程序并发执行时,两个或两个以上进程由于竞争系统资源而出现的一种互相等待的现象。
5.1. 死锁产生的原因
- 临界资源分配不当
- 进程推进顺序不当
5.2. 死锁产生的必要条件
- 互斥条件
- 占用并等待条件
- 不可剥夺条件
- 环路等待条件
5.3. 死锁的处理方法
- 视而不见
- 预防死锁
- 避免死锁
- 检测和解除死锁
5.4. 安全序列与安全状态
安全序列:如果某一时刻,系统能够按照某种进程顺序,来为每个进程分配其所需要的资源,直至最大需求,使得每个进程均可顺利完成,则称这样的一个进程序列为安全序列。
安全状态:在某个时刻存在一个安全序列,能使所有的进程都可顺利完成
死锁状态是不安全状态
5.5. 避免死锁
银行家算法
6. 存储管理
三级存储器结构
6.1. 功能
- 内存分配与回收
- 内存扩充
- 地址映射
- 内存保护和共享
6.2. 分区
- 固定式分区
产生内零头(分配给用户而未被利用的部分 - 可变式分区
产生外零头(未分配给用户而未被利用的部分) - 可重定位式分区管理
产生外零头,采用内存紧缩技术,移动某些已分配区中的信息,直到出现足够分配的分区大小为止。
6.3. 地址重定位
由于一个作业装入到与其地址空间不一致的存储空间所引起的对有关地址的部分调整过程,即逻辑地址向物理地址的变换。
6.3.1. 重定位的类型
- 静态重定位
- 动态重定位
静态重定位 | 动态重定位 | |
---|---|---|
地址转换时刻 | 程序运行之前装配完成 | 执行指令时完成 |
谁来完成任务 | 软件完成地址转换 | 硬件提供的地址转换 |
完成的形式 | 装入时一次性把程序中的地址进行转换 | 对每条要执行的指令进行转换 |
完成的结果 | 原指令地址部分被修改 | 不对原指令进行修改,按照形成的地址执行指令 |
6.3.2. 逻辑地址空间
编译程序从0号单元开始为其分配,相对地址
6.3.3. 物理地址空间
主存中物理单元的集合,绝对地址
6.3.4. 地址映射
逻辑地址转换为物理地址的过程
6.3.5. 分区的存储保护
- 界限寄存器
- 存储保护键
6.3.6. 程序的局部原理
- 时间局部性
- 空间局部性
6.3.7. 抖动、颠簸
分配给进程的存储块数量小于进程所需要的最小值,进程执行将很频繁的产生缺页中断,频率非常高的页面置换现象称为抖动。
7. I/O控制方式
- 程序直接控制方式
- 中断控制方式
- DMA控制方式
- 通道控制方式
7.1. Spooling技术优点
- 高速虚拟I/O操作
- 对独享设备的共享
- 实现虚拟设备的功能
8. 文件系统
8.1. 文件分类
- 系统文件
- 用户文件
- 库文件
8.2. 文件的物理结构
- 连续文件
- 串联文件
- 索引文件
8.3. 文件的逻辑存取方式
- 顺序存取
- 随机存取
8.4. 文件的管理方式
- 空闲目录文件
- 空闲块链
- 位示图
9. 总结
一个完整的操作系统应该包含两个东西:
- 内核(Kernel)与其提供的接口工具
- 利用此接口工具开发出的软件
Kernel是一个操作系统最底层的东西,对硬件资源进行管理
- 系统呼叫接口(Systen Call Interface) 方便开发者程序与内核沟通
- 进程管理(Process Control)
- 内存管理(Memory Management) 管理整个内存,内核也可以提供虚拟内存
- 文件系统管理(File System Management)
- 设备驱动(Device Drivers)
我们日常使用的Windows7/Windows10/Linux/macOS等操作系统属于软件系统中的系统软件,应用软件需要在系统软件的支持下进行工作。
操作系统是凌驾于硬件之上的,使用户不必亲自面对硬件系统来调用每一个硬件进行工作的软件,从而大大的提高了计算机的使用效率。
简单的讲解完计算机系统原理后,我们来看一下我们常用的操作系统:
操作系统一般都分为32/64位,我们都知道一个字节占8位二进制数,也就是32位操作系统一次能够处理4个字节,64位操作系统一次处理8个字节,并且64位处理器不光可以运行64位程序,还可以兼容32位程序。
大约在1970年,出现了一个相当稳定且成熟的操作系统UNIX
首先UNIX是一个古董级的操作系统了,时间应该是在1971年正式推出。
由于UNIX的源代码受到版权保护,所以在1991年,芬兰的Linus按照UNIX的设计思想开发了一个开源的UNIX内核,起名为Linux。
所以Linux 和 macOS 都是起源于 UNIX。
Linux系统主要是用于服务器端,它们刚开始是没有图形界面的,一切都是DOS命令里来操作,后来各种著名的公司例如Ubuntu,Redhat,还有Deepin在它的上面生生的加了一个图形界面,可能就是应对用户的需求,但是它的最主要作用还是在它的终端。
macOS就不必说了,苹果公司自产的系统,用来做设计和商业文件最好不过,因为它的系统封闭,比较安全,不易被病毒入侵,而且图像的处理非常精细。唯一缺点就是价格昂贵。
Windows系统,1985年,美国的微软公司正式推出了Wndows 1.0,微软的产品线都是定位在个人用户和商业用户,所以总是会推出各种版本的Windows系统,到2001年的XP系统最为经典,它也是第一个支持64位处理机制的操作系统,直到现在也有人还在使用。
后来微软推出好多的系统,我们拿主流来说,古老的我们暂时不做讨论,Win7/8/10。
Win7的使用率直到现在也是很大的,Win8系统更像是一个过渡期产品,取上不足取下有余,它更像是适用于平板的系统。
到了现在的Win10,据说可能是微软的最后一代,虽然它的槽点很多,但是它的样式精美,更加符合现在人们的审美观念了。当然,很多槽点都是可以解决的,对策这一块还是拿捏的死死的。
总之,新鲜的事物总是层出不穷,它就像是一列单程的地铁,如果你挤不进去的话,就会误了时间,无法赶上时代的潮流,所以,多接受一些新鲜的事物总是好的,总不能固步自封,原地不动。