前言
本文是结合《现代操作系统》(Andrew S. Tanenbaum著)的摘要与上课ppt的笔记,自用。
第一章:引论
任务核心:存储+cpu(任务执行性能与内存大小是一个log型函数)
文件从使用角度区分:
①程序类文件
②数据类文件
(用例:播放器播放视频;视频是数据文件、播放器是程序文件)
格式化是指装上文件管理系统,不同操作系统会影响管理系统
cpu多核:有多个控制单元与执行单元
多数计算机有两种运行模式:
①内核态;
②用户态
软件中最基础的部分是操作系统,它运行在内核态(也称为管态、核心态)。操作系统具有对所有硬件的完全访问权,可以执行机器能够运行的任何指令。软件的其余部分运行在用户态,用户态只使用了机器指令中的一个子集(那些会影响机器的控制或可进行I/O操作的指令,在用户态中的程序里是禁止的)
1.1 什么是操作系统
操作系统:是运行在内核态的一种软件,其任务是为用户程序提供一个更好、更简单、更清晰的计算机模型,并管理刚刚提到的所有设备,是一个硬件设备的扩展。
- 用户与之交互的程序,基于文本的称为shell;
- 基于图标的称为图形用户界面(GUI)
操作系统功能:
- 机器扩展:屏蔽接口之间的差异以支持多种设备,为开发者提供一个标准的接口。
- 有效分配资源:执行用户需要
- 管理资源:①管理cpu;②管理主存;③管理文件;④管理其他设备的通信
1.1.1 作为扩展机器的操作系统
所有的操作系统都提供使用硬盘的又一层抽象:文件。
1.1.2 作为资源管理者的操作系统
资源管理包括用以下两种不同方式实现多路复用(共享)资源:在时间上复用和空间上复用。
1.2 操作系统的历史
硬件性能的发展,网络的发展
计算机的发展历程:
- 脱机:输入、运行、输出完全分割,分别作用于不同的设备
- 联机:终端和主机连接,通过网络方式连接,缺点在于:当某一个终端想要使用主机时,必须等待当前终端执行结束,串行执行浪费大量计算资源
- 假脱机:在一定时间期限内收集所有的输入请求,再进行处理
1.2.1 第一代(1945~1955):真空管和穿孔卡片
1 .2.2 第二代(1955~1965):晶体管和批处理系统
1.2.3 第三代(1965~1980):继承电路和多道程序设计
1.2.4 第四代(1980至今):个人计算机
个人操作系统:主动访问方式,同时只允许一个用户登录
服务器操作系统:允许多个用户同时登录,对于并发情况的处理更严格
1.2.5 第五代(1990至今):移动计算机
移动计算机类型:
- 移动端:能源问题(电池)使得性能部分放弃;散热问题限制芯片大小
- 台式机
操作系统随之发展的四个阶段:
- 1.手工阶段
联机方式:上机前需预约,操作者与程序员需再现场,输入输出依靠纸带机在纸带上打孔,上机时间较长。
脱机方式:程序运行时,程序员可以不在现场,由操作员完成操作。 - 2.批处理系统
由常驻内存的监控程序实现作业之间的转换自动化,监督计算机运行情况。依赖磁带技术、卫星机、纸带、磁带。
单道批处理系统,主要特征:顺序性,自动性,单道性。系统吞吐量低,无交互。
多道批处理系统,主要特征:多道程序宏观上并行,微观上串行。提高了系统吞吐量和资源利用率,但是用户响应时间较长,也不提供交互。
前台任务优先级>后台任务 - 3.分时操作系统
分时操作系统,具有同时性,交互性,独立性,和及时性。能够对用户进行及时响应。解决了人机交互问题,但不能在规定时间内做出处理于是有了实时操作系统。 - 4.实时操作系统
主要特点是及时性和可靠性,能够违反时间规定在规定的时间内响应。
1.3 计算机硬件简介
1.3.1 处理器
cpu中断称为陷阱
cpu性能受元器件个数的影响,元器件个数影响散热和电磁干扰,所以cpu多核的发展仍有瓶颈。
cpu的两种模式:内核态(执行指令)与用户态(执行用户程序)
cpu=控制单元+运算单元+存储单元。
控制单元
- 流水线方式:取一条指令,分配运行单元,执行完后再取指令
- 超标量运算:cpu原为单核,但有多个运算器,不同运算器可以同时执行不同的指令,使得单核cpu支持指令级并行的运算。
运算单元
存储单元
从计算机硬件角度看cpu是一个独占资源;从用户使用角度因为不同时间段执行不同任务需求,也可以看作是共享资源
1.3.2 存储器
任务执行性能与内存大小是一个log型函数;
内存是独占资源,而存储的数据在权限的设置下可以成为共享资源;
内存小速度快
1.3.3 磁盘
-
硬盘是磁盘的一种;
-
硬盘把数据调到硬盘缓存,内存从硬盘缓存读数据,然后传输到cpu的缓存,cpu从多级缓存中读数据,内存就是一个数据中转站,因为cpu读取速度远远大于硬盘,内存的速度是很快的,通过内存这个桥梁来提高cpu读取数据的速度。
-
缓冲区(硬盘):输入缓冲区与输出缓冲器保证了并行任务实现的功能,cpu不必一直等待,当数据在输入点准备好,由相应的管理系统运行准备好的数据(作业)
-
数据输出汇总到输出点,但只有到用户收到所有数据才叫作业完成。
-
缓存是一个共享空间
-
内存与外存的交互通过外部排序实现
-
外存容量大速度低
1.3.4 I/O设备
输出设备:显示器
I/O设备是必须设备
1.3.5 总线
总线是独占资源,因为传输数据过程不可打断
总线类型:
- 数据总线;
- 地址总线;
- 控制总线
1.3.6 启动计算机
cpu中断
其他中断:执行下一条指令
1.4 操作系统大观园
1.4.1 大型机操作系统
用于大型操作系统主要面向多个作业的同时处理,多数这样的作业需要巨大的I/O能力。
1.4.2 服务器操作系统
服务器操作系统在服务器上运行,通过网络同时为若干个用户服务,并且允许用户共享硬件和软件资源。
1.4.3 多处理器操作系统
获得大量联合计算能力的常用方式是将CPU连接成单个的系统。依据连接和共享方式的不同这些系统被称为并行计算机,多计算机或多处理器。
1.4.4 个人计算机操作系统
现代个人计算机操作系统都支持多道程序处理,在启动时,通常有几十个程序开始运行。他们的功能是为单个用户提供良好的支持。
1.4.5 掌上计算机操作系统
掌上计算机或PDA是一种可以握在手中操作的小型计算机(eg:平板电脑、智能手机)
1.4.6 嵌入式操作系统
嵌入式系统在用来控制设备的计算机中运行,这种设备不是一般意义的计算机,并且不允许用户安装软件,例如:微波炉、电视机
1.4.7 传感器节点操作系统
传感器是一种内建有无线电的电池驱动的小型计算机,节点相互连接形成网络,可以彼此通信。
1.4.8 实时操作系统
这些系统的特征是将时间作为关键参数。
- 硬实时系统:某个动作必须绝对地在规定的时刻(或规定的时间范围)发生
- 软实时系统:在这种系统中,虽然不希望偶尔违反最终实现,但仍可以接收,并且不会引起任何永久性地损害
1.4.9 智能卡操作系统
智能卡是一种包含一块CPU芯片的信用卡,它有非常严格的运行能耗和存储空间的限制
1.5 操作系统概念
1.5.1 进程
进程:本质上是正在执行的一个程序
进程表:将进程相关(除了该进程自身地址空间的内容)信息放在一个操作系统中的数组/链表结构中。每个进程占一项。
进程树:一个进程能够创建一个或多个进程(称为子进程),并且这些进程又可以创建子进程。
一个(挂起的)进程包含:
- 进程的地址空间
- 对应的进程表项(包括寄存器以及稍后重启动该进程所需要的许多其他信息)
1.5 2 地址空间
操作系统创建了一个地址空间的抽象,作为进程可以引用地址的集合。这样可以使得在内存中同时运行多道程序时,他们不会互相干扰。
1.5.3 文件
操作系统的一项主要功能是隐藏磁盘和其他I/O设备的细节特性,给提供程序员一个良好、清晰的独立于设备的抽象文件模型。
- 保存文件:以目录的形式保存;
绝对路径:包含了根目录到该文件的所有目录清单,它们之间用正斜线隔开。 - 读写文件:先打开文件检查权限,再进行后续操作。
- 特殊文件:为了使I/O设备看起来像文件一般,使得I/O设备可以通过同样的系统调用进行读写
- ①块特殊文件:指可以随机存取块组成的设备。
- ②字符特殊文件:用于打印机等接收和输出字符流的设备
管道:是一种虚文件,可以连接两个进程;管理两个进程之间的数据传递或通信读写。
1.5.4 输入/输出
每个操作系统都有管理其I/O设备的I/O子系统。
1.5.5 保护
操作系统会管理系统的安全性,比如授予文件不同的访问权限
1.5.6 shell
UNIX的命令解释器,shell本身不是操作系统的一部分。
①:shell创建一个子进程,并运行data程序作为子进程。shell一直等待它结束后再显示提示符(可能是¥),等待下一次输入
data
②:将标准输入重定向到一个文件
data>file
③:调用sort程序,从file1中取得输入,再输出到file2
sort<file1>file2
④:调用cat程序将三个程序进行合并,送到sort程序按字典序排序,sort输出重定向到dev/lp中(也就是打印机)
cat file1 file2 file3|sort>dev/lp
⑤:&结尾则shell不用等待该子进程结束,而是将其转到后台执行,从而允许用户执行新的任务。
cat file1 file2 file3|sort>dev/lp &
1.6 系统调用
操作系统有两种功能:
- 为用户程序提供抽象
- 管理计算机资源
cpu计算机一次只能执行一条指令。
以c程序进行的read系统调用为例:
count = read(fd,buffer,nbytes)
- fd:指定文件
- buffer:指向缓冲区中的存储地址,通过&buffer访问地址内容
- nbytes:说明要读出的字节数
- count:返回实际读出的字节数(一般≤nbytes);如果参数无效或是磁盘发生错误,count会被置-1
1.6.1 用于进程管理的系统调用
涉及到fork(派生)相关内容,可以理解为父进程的数据被复制用以创建子进程,中途使用fork调用会返回一个值(在子进程中值为0,在父进程中等于子进程的进程标识符:PID)
1.7.1 单体系统
操作系统在内核态以单一程序的方式运行。整个操作系统以过程集合的方式编写,链接成一个大型可执行的二进制程序。
具体过程:
- 先编译所有单个的过程
- 通过系统链接程序将它们链接成单一的目标文件
1.7.2 层次式系统
THE操作系统的结构:
层号 | 功能 |
---|---|
5 | 操作员 |
4 | 用户程序 |
3 | 输入/输出管理 |
2 | 操作员-进程通信 |
1 | 存储器和磁鼓管理 |
0 | 处理器分配和多道程序设计 |
1.7.3 微内核
在分层设计中,设计者要确定在哪里划分内核=用户的边界
微内核的设计思想:为了实现高可靠性,将操作系统划分为小的、良好定义的模块,只有其中一个模块——微内核——运行在内核态,其余的模块由于功能相对弱些,则作为普通用户进程运行。
1.7.4 客户端-服务器模式
将进程划分为两类:
- 服务器端——每个服务器提供某种服务
- 客户端——使用这些服务
1.7.5 虚拟机
用户在终端上进行交互的两种方式
- 以特殊文件
- 以地址/端口
操作系统的三种类别:
- 分时系统
- 实时系统
- 批处理系统:用于以运算为主的操作系统中,以假脱机的方式进行