1.1.1+1.1.2 操作系统的概念、功能

用户通过命令接口和系统调用两种方式来管理计算机
作为系统资源的管理者

向上层提供方便易用的服务

命令接口


程序接口





作为最接近硬件的层次


1.1.3 操作系统的特征


共享

虚拟



异步


1.2_操作系统的发展与分类
批处理主要解决人工输入 分时主要解决人机交互

手工阶段

批处理机时代
单道批处理系统


多道批处理系统

基本特征为:间断性 共享性 制约性
分时操作系统 解决人机交互

实时操作系统 解决无法处理紧急任务

其他操作系统


1.3.1_操作系统的运行机制





1.3.2_中断和异常



内中断


外中断





1.3.3_系统调用





模拟系统调用



差不多就是应用程序在用户态将需要系统调用的参数放到寄存器里面,然后cpu读到陷入指令的时候引发异常转到系统调用入口程序,从而执行对应的指令代码,指令会访问寄存器里面写着的所需的系统调用类型,然后转去对应的应用程序,知道寄存器为空,之后继续处理其他指令。


1.4_操作系统体系结构(上)


有的操作系统只保留前三个

微内核 内核部分内核态 其他部分用户态

变态要写成形态变化
1.5_操作系统体系结构(下)


微内核补充:从四个方面描述微内核os:1,内核足够小 2,基于客户/服务器模式3,应用机制与策略分离原理4,采用面向对象技术 低级i/o
外核补充:用户进程通过调用库请求操作系统外核的服务
效率低 :1

模块化

意思是比如进程管理还没开发完但是开发好了ABC三个函数 储存器管理开发如果要利用 就可以先使用ABC 同时进行开发
缺点1:比如在开发过程中突然又发现某个东西需要别的功能
缺点2:不清楚是哪个环节出问题 因为一直互相调用
微内核宏内核

外核

被抽象的系统资源 正常系统看似一样实际上地址不一定连续类似链表 其实就是为了要连续的磁盘块 类似顺序表 可以提升性能


1.5_操作系统引导







1.6_虚拟机


可支持:第二类获得的资源有限 因为不是直接运行在硬件上
迁移:第一类迁移很麻烦 第二类只要导出文件就行了
运行模式 第一类在虚拟机里面在把非特权指令划分成多个级别 不是特别敏感的指令就直接通过


vm1虚拟机想写操作肯定是需要内核态的权限 如何通过第二类虚拟机管理系统在内核空间的内核部分代替vm1向系统申请写入操作
2.1.1+2.1.2_进程的概念、组成、特征





2.1.3_进程的状态与转换







进程的组织

2.1.4_进程控制











所以要记录运行环境信息 因为寄存器是通用的 所以有可能会把前一个进程运行的结果给覆盖掉

2.1.5_1 进程通信
实现的三种办法
共享存储


消息传递

需要指明发给谁 自己是谁



2.1.5_2 信号


什么时候处理信号

如何处理信号
用户自定义 当检测到窗口大小变化 通过自定义程序调整ui


每个进程有独立的信号处理程序 互不干预 如果没有自己设置的就去运行系统默认的处理程序
每个进程也有独立的被阻塞信号

信号可以为一些异常处理做一些个性化的补充

2.1.6_1 线程的概念与特点




2.1.6_2 线程的实现方式和多线程模型

用户级线程



内核级线程

内核级线程相当于获得处理的机会 本身没有代码

多线程模型
一对一

多对一

多对多 所有内核级线程都占用才会阻塞


2.1.6_3 线程的状态与转换
控制

组织

2.2.1 调度的概念、层次









2.2.2_1+2.2.4进程调度的时机、切换与过程








2.2.2_2 调度器和闲逛进程



2.2.3 调度的目标(调度算法的评价)

CPU利用率

系统吞吐量

周转时间


等待时间



2.2.5_1 调度算法:先来先服务、最短
先来先服务



短作业优先
非抢占式

抢占式





高响应比优先算法(既考虑短作业又考虑长作业)



2.2.5_2 调度算法:时间片轮转、优先

时间片轮转调度算法






优先级调度算法
非抢占式

抢占式




多级反馈队列算法



如果一直有高优先级低运行时间的进入就会饥饿

2.2.5_3 调度算法:多级队列调度算法

2.2.6 多处理机调度

需要决定让哪个cpu去处理进程






2.3.1 同步与互斥的基本概念

直接制约:进程之间因相互合作而产生的同步关系,一个进程需要等待另一进程提供的数据或信号才能继续执行。
间接制约:进程之间因共享资源而产生的互斥关系,需通过竞争资源间接影响对方执行。






2.3.2_1 进程互斥的软件实现方法


单标志法


就是我拉完了把位置让给你了 但是你还没使用 因为让给你了 所以turn的值是你 得你拉完还给我才行 所以这就违背了空闲让进
双标志法先检查法

就是一还没标记自己要用处理机就被时间片强行转到2了 这样就会导致有可能同时出现两个进程同时访问临界区 违反了忙则等待的原则
双标志后检查发

两个进程同时标志了自己要用临界区 就会无限等待

Peterson算法



让权等待应该等不到的时候就释放cpu资源

2.3.2_2 进程互斥的硬件实现方法

中断屏蔽方法

testandset

TestAndSet函数修改状态并且放回原先状态
如果原先状态为True表示已经被上了锁 所以while循环就会一直执行下去(违反让权等待)直到对方临界区代码结束让lock变成了falese 这时候返回的值就变成false 同时锁也被上了
Swap指令


2.3.3_互斥锁


2.3.4_1 信号量机制


整形信号量

记录型信号量




2.3.4_2 用信号量实现进程互斥、同步、前驱关系


进程同步




2.3.5_1_1 生产者-消费者问题







2.3.5_1_2 多生产者-多消费者问题







2.3.5_2 读者-写者问题



程序内部是并发的可能两个读者同时访问count变量所以需要用互斥访问count



2.3.5_3 哲学家进餐问题




2.3.6 管程






封装
2.4.2 死锁的处理策略—预防死锁






2.4.3 死锁的处理策略—避免死锁











2.4.4 死锁的处理策略—检测和解除


3.1.1_1 内存的基础知识




3.1.1_3 进程的内存映像




P67



3.1.3_1 基本分页存储管理的概念






3.1.3_2 基本地址变换机构



3.1.3_3 具有快表的地址变换机构






3.1.3_4 两级页表

页面大小是灰色的那个一小块 = 内存块大小 (绿色的)
页表项长度就是红色的那个一行的大小
因为页面大小为4KB 所以最多有2^32/2^12=2^20个页面
所以业内地址用12位表示 其他20位为页号
一个进程页表(最多)有2^20个页表项 *每个页表项大小的4B=2^22B
一个页框大小是4KB 所以需要2^22 /4KB(2^12B)=2^10页框





页面大小=页框大小=4KB等于2^12B 所以至少需要2^12位比特来存储页面的偏移量 因为页面的地址是从0-4096

3.1.4 基本分段存储管理方式








3.1.5 段页式管理方式






3.2.1 虚拟内存的基本概念





3.2.2 请求分页管理方式









3.2.4 页面置换算法







3.2.5+3.2.3 页面分配策略










3.2.7 内存映射文件





4.1_1_初识文件管理










4.1_2_⽂件的逻辑结构










4.1_3_⽂件⽬录








4.1_4_⽂件的物理结构(上)


















4.1_5_逻辑结构VS物理结构



4.1_6_⽂件存储空间管理
















