计算机系统概述
1.操作系统概念
管理系统软/硬件资源,为程序提供服务
2.发展与分类
3.操作系统的运行环境
运行机制
指令:(二进制机器指令),CPU能识别,执行的最基本命令
应用程序:程序员写的跑在操作系统之上的程序
内核程序:实现操作系统的程序,内核:操作系统最核心的部分
CPU的两种状态:
内核态:正在运行内核程序,可以执行特权指令
用户态:正在运行应用程序,只能执行非特权指令
内核态→用户态:执行特权指令,PSW标志位为用户态,操作系统主动让出cpu使用权
用户态→内核态:由中断引发,硬件自动完成变态
中断和异常
中断的作用:让操作系统内核夺回CPU使用权
中断类型:
- 内中断(也称异常):与当前指令有关,中断信号源于cpu内部
- 外中断:…无关…外部,如时钟中断,I/O请求中断
系统调用
用户在程序中调用操作系统中的一些子功能。凡是与资源共享有关的操作,都需要系统调用来向操作系统提出请求。
操作系统的体系结构
大内核:将操作系统最主要的功能模块作为系统内核,性能高
微内核:只把最基本的功能作为内核,频繁的切换核心态和用户态,性能低。
进程管理
1.进程与线程
进程的概念
进程是进程实体的运行过程,是系统资源分配和的调度的一个独立单位
进程的组成
进程控制块(PCB):一种数据结构,描述进程的基本情况和运行状态,存放操作系统对进程管理需要的信息,是进程存在的唯一标志
程序段:程序的代码
数据段:运行过程中产生的数据
进程的特征
动态性,并发性,独立性,异步性,结构性
进程的状态与转换,进程的组织
进程控制
进程控制功能:实现进程状态转换
用原语实现进程控制。原语:操作系统中一种特殊的程序,具有原子性。
关中断指令和开中断指令(特权指令)实现原子性:CPU执行了关中断指令后不再检查中断信号,直到执行到开中断指令才恢复对中断信号的检查。
-
进程的创建原语
-
进程的终止:撤销原语
-
进程的阻塞和唤醒原语(成对使用)
-
进程的切换原语:
进程通信
进程通信(IPC):不同进程之间的数据交互
进程内存空间独立,不能直接访问另一个进程的地址空间
- 共享存储:互斥的访问共享存储(如pv操作)
- 消息传递:
- 直接通信:消息直接挂在接收进程的消息队列中
- 间接通信:消息发向中间件(信箱),
- 管道通信:pipe文件,读写遵循先进先出原则,半双工通信(同一时间段单向)
线程的概念
线程:程序执行流的最小单位,系统调度的基本单位,一个进程可以有多个线程
线程的实现方式和多线程模型
线程的转换
2.调度
概念
根据某种规则来决定一堆任务执行的顺序
调度的三个层次
-
高级调度(作业调度)
作业:一个具体的任务,(程序)
高级调度:按原则将外存的作业后备队列中挑选一个进入内存。每个作业只被调入,调出一次。
-
低级调度(进程调度/处理机调度)
操作系统中最基本的一种调度,频率很高。
-
中级调度(内存调度)
挂起状态:暂时调到外存等待的进程状态
中级调度:选择一个处于挂起状态的进程进入内存
进程调度
进程在操作系统内核程序临界区中不能进行进程调度,而在普通临界区中可以。
进程调度的两种方式:
- 非抢占式:只会主动放弃
- 抢占式:由操作系统剥夺cpu使用权
调度器和闲逛进程
调度器(调度程序):决定让谁运行,运行多长时间
闲逛进程:没有其他就绪进程时,运行闲逛进程
调度算法的评价指标
调度算法
-
先来先服务(FCFS):按照作业/进程到达的先后顺序进行服务,是一种非抢占式的调度方式,优点:公平,缺点:对短作业不利,不会导致饥饿
-
短作业优先(SJF):从就绪队列中选出一个估计时间最短的进程,将处理及分配给它,使它立即执行到执行结束,或者发生某事件阻塞放弃处理机时重新调度
-
高响应比优先算法(HRRN):
响应比Rp = (等待时间 + 服务时间)/ 服务时间 = 1 + (等待时间 / 服务时间)
当等待时间相同时,服务时间更短的优先调度
3.进程同步与互斥
同步:直接制约关系,为完成某任务建立的两个或以上的进程
互斥:间接制约关系,访问临界资源时只允许一个进程访问,其他进程必须等待
进程互斥的软件实现方法
抓住“谦让”和“表达意愿“思想
单标志法:
双标志先检查法:
双标志后检查法:
peterson算法:“压岁钱算法” 谁最后说客气话谁失去行动权
硬件实现
信号量机制
信号量:表示系统中某种资源的数量,可以使用一对原语来对信号量进行操作
一对原语:wait(S),sign(S),被称为P,V操作,用于实现对系统资源的申请和释放
4.经典同步问题
生产者-消费者问题
只有缓冲区没满,生产者才能往缓冲区放东西
只有缓冲区没空,消费者才能从缓冲区取东西
缓冲区也是一种临界资源,只允许互斥地访问
mutex = 1; // 互斥信号量,对缓冲区的互斥访问
empty = n; // 同步信号量,空闲缓冲区的数量
full = 0; // 同步信号量,产品数量,即非空缓冲区数量
读-写者问题
1.允许多个读者对文件进行读操作
2.只允许一个写者进行写操作
3.写者操作完成前不允许读者和其他写者工作
4.写者操作前应该让其他读和写者退出
5.管程
管程的功能
互斥访问:确保多个线程对共享变量的互斥访问
条件等待和通知:线程可以通过条件变量等待某个条件满足后再继续执行,或者通过条件变量停止其他线程某个条件已经满足
简要来说:对PV操作的一种管理
6.死锁
死锁:多个进程因竞争资源而互相等待,双方都无法向前推进
死锁形成的必要条件
- 互斥条件:对互斥使用的资源进行争夺
- 不可剥夺条件:进程获取的资源在未使用完之前无法被剥夺,只能自己释放
- 请求和保持条件:进程至少保持了一种资源,但又提出对其他进程占用的资源的申请,自己的资源又不放
- 循环等待条件:进程的循环等待链,我等你,你等他,他等我
以上四条件同时满足才算死锁
避免死锁
安全序列:系统按照某种序列分配资源,每个进程都能顺利完成。
系统处于安全状态,则一定不会发生死锁
银行家算法
思想:在进程提出资源申请时,系统先预判此次分配是否会导致系统进入不安全状态,如果会,则暂时不答应请求,让进程先阻塞等待。
系统分配给进程资源,归还后得到的资源为:available + allocation
内存管理
操作系统对内存的划分和动态分配
1.内存管理概念
功能
1.内存分配与回收:由操作系统完成
2.内存保护:保证进程只在自己的内存空间进行访问,不越界
3.地址转换:操作系统将逻辑地址转换为物理地址
4.内存容量的扩充:将容量小的内存从逻辑上通过虚拟技术进行扩充
连续分配管理方式
为用户程序分配连续的内存空间
1.单一连续分配:只用于单任务,单用户的操作系统
2.固定分区分配:将用户区划分为若干个大小相等或不等的分区,每个分区只进行一个作业。
3.动态分区分配:系统不会预先分配内存,而是在进程进入内存时,根据进程的大小动态的分配内存,使得内存大小正好适合进程所需的空间。
动态分区分配算法
为什么要有?当有多个空闲分区满足需求,需要合适的算法来分配空间
1.首次适应算法:从低地址开始找,找到第一个可以满足大小的空闲分区
2.最佳适应算法:为了保证大进程到来时需要的大片连续空间,优先使用小空闲分区,空闲分区按容量递增连接。
3.最坏适应算法:为了解决最佳适应算法导致的内部碎片问题,优先使用大空闲分区,空闲分区按容量递减链接。
分页存储
为什么要分页?减少内存碎片的产生
页框/页帧:内存中大小相等的分区
页面(页):每一个进程的逻辑地址空间
页表:在内存找到进程的每个页面对应的物理块,系统为每个进程建立一张页表。
页表由页号和块号(页框号)组成,其中只有块号占内存空间,页号是隐含的存储。(类似于数组,下标是不需要存储空间的)
页号=逻辑地址/页面大小
页内偏移量=逻辑地址%页面大小
页表长度:一个页表有多少个页表项
页表项长度:每个页表项占多大的存储空间
页表大小:一个页表占多大存储空间
快表
一种并行查找的高速缓冲存储器,为了提高地址变换的速度。
段页式存储
先分段,段内再分页
2.虚拟内存管理
为什么?
解决传统存储的两个问题:
1.一次性:作业必须一次性全部装入内存才能运行,导致如果作业太大,无法运行
2.驻留性:作业全部转入内存,直到作业结束,然而实际只需要一部分数据便可运行程序,导致浪费空间
是什么?
将暂时需要的信息调入内存,不需要先放在外存,便可执行程序。程序执行时,将不在内存又需要的信息调入内存。同时,若内存空间不够,操作系统将内存中不需要的信息换出到外存。
虚拟内存的特点
1.多次性:允许多次将作业调入内存
2.对换性:作业在程序运行时换进换出
3.虚拟性:在逻辑上扩充内存容量
怎么做(虚拟内存技术)
实现基础:根据多次性,肯定不能连续存储管理,而是离散分配的内存管理
用什么实现?
1.请求分页管理。2.请求分段管理。3.请求段页式管理
请求分页管理
是什么?两个功能:
1.调页功能:操作系统将缺失的页面调入内存
2.置换功能:操作系统将暂时没用的页面换入外存
页表项:
状态位:表示页面是否被调入内存
访问字段:表示页面被访问次数,用于置换算法使用
修改位:表示页面是否被修改过
缺页中断机构
请求分页中两个重要的点:
1.是否在内存:不在则产生缺页中断,并阻塞缺页的进程,操作系统将页面调入内存
2.是否有空闲块:没有则淘汰某页(如果该页在内存中被修改过,则换回外存)
地址变换机构
页面置换算法
用来干嘛?决定换入换出哪些页面
1.最佳置换算法:将以后永不访问或最长时间不访问的页面淘汰。(无法预知,不可实现)
2.先进先出置换算法:每次将最早进入内存的页面淘汰。
3.最近最久未使用置换算法(LRU):每次淘汰最近最久未使用的页面。实现:在访问字段中记录该页上次使用时间t,每次替换t最大的即可。
4.时钟置换算法(CLOCK)
改进型CLOCK:先找(0,0),再找(0,1),没有的话,把所有访问位(第一个)置为0,再循环那样查找
文件管理
1.文件基本概念
文件是什么?
文件是通过硬盘为载体,存储在计算机上的数据集合
文件控制块
是什么?
英文名FCB,用来存放控制文件所需信息的数据结构,包含了==
一个FCB对应一个文件目录项,多个FCB组成文件目录
索引节点
是什么?
索引节点将除了文件名以外的属性都放入索引节点中
有什么用?
因为检索文件时只需要用到文件名,所有可以提高检索效率
文件逻辑结构
在文件内部,数据在逻辑上是如何组织起来的
无结构文件(流式文件):文件没有结构,访问只能通过穷举搜索的方式
有结构文件(记录式文件):
-
顺序文件:串结构:按记录的存入时间排序。
顺序结构:按关键字的顺序排列。
-
索引文件:解决可变长记录文件检索慢的问题,本身就是一个定长记录的顺序文件
文件物理结构
磁盘空间分配方法:
1.连续分配:每个文件在磁盘上占有一组连续的块。类似于数组,所以它支持顺序访问和直接访问。
缺点:文件长度不宜动态增长。增加和删除需要移动相邻的记录。反复增删文件回产生外部碎片。
2.链接分配:离散分配的方式,通过指针链接每个磁盘块,分为隐式链接和显示链接。
隐式链接:除最后一个盘块,每个盘块都含有指向文件下一个盘块的指针。不支持随机访问
显示链接:为什么叫显示?它把用于连接文件各物理块的指针显示的存放在一张表中,称为文件分配表(FAT)。支持随机访问
索引链接
2.目录
目录结构
1.单级目录结构
实现了文件的按名存取
缺点:查找速度慢,不允许重名,不便于共享
2.两级目录结构:
解决了重名问题
缺点:不能对文件分类
3.树形目录结构:
解决了不能分类的问题
缺点:查找文件时每次按路径名逐级访问中间节点,增加了磁盘访问次数
4.无环图目录结构
解决了树形结构不便于文件共享的问题。
目录实现
查找某个文件有两种方法
1.线性列表:实现简单,但查找费时
2.哈希表:根据文件名得到一个名,并返回一个指向线性列表中元素的指针。查找速度快。
文件共享
1.硬链接:基于索引节点的共享方式。
多个指针指向一个索引结点,只要还有一个指针指向索引结点,索引结点就不能删除。
2.软链接:基于符号链实现共享。
把到达共享文件的路径记录下来,要访问文件时,根据路径寻找文件。
查找速度:硬>软
3.文件系统
输入输出管理
2.I/O控制方式
DMA:直接存储器存取