Map 1
操作系统
  8、操作系统的引导
    概念
        C盘
          安装操作系统，并使用C盘启动操作系统，是这个磁盘的活动分区
          根目录
            双击C盘的目录
    相关数据
    引导开机过程
      第一步：
开机通电之后CPU可以去主存当中固定的位置找到ROM引导程序执行，即为自举程序。
      第二步：
引导CPU去把磁盘的主引导记录（MBR）读入内存，然后CPU就会执行磁盘引导程序，然后引导程序就会根据分区表定位C盘的位置，然后就可以读取C盘的第一部分数据：引导记录（PDR）,然后又执行引导记录程序以找到根目录下的启动管理器程序然后CPU再执行该程序
      第三步：
这个启动管理程序就会完成操作系统初始化的工作
    扩展
      C盘中的Windows下的Boot文件夹就是我们上面提到的启动管理器程序，删了有什么后果懂的都懂
  9、虚拟机
    前言
      传统计算机
        一台物理机器上只能运行一个操作系统
    概念
      使用虚拟化技术，把一台物理机器虚拟化多台虚拟机器，每个虚拟机可以独立运行一个操作操作系统
    同义术语
      虚拟机管理程序（虚拟机监控程序）
        Virtual Machine Monitor/Hypervisor
    类别
      直接运行在硬件上面
        如何将各硬件资源分配给各个虚拟机器？
        比如说一个单核CPU，可以按照时间片的方式分配给各个虚拟机，这一类型的VM实际上就是个分配问题，其他和传统的方式几乎是一样的
        注意
          只有虚拟机管理程序是出于内核态的，而上层的操作系统、应用程序实际上是运行在用户态的，但是在操作系统这里它会认为自己处于内核态从而执行特权指令，这种情况下就会被虚拟机管理程序截获，然后就会给上层转换使得这个指令执行成功了，看起来就是上层的操作系统完成了特权指令
      运行在宿主操作系统上
        请求操作系统对其进行分配
      区别
        对物理资源的控制权
        资源分配方式
        性能
        可支持的虚拟机数量
        虚拟机的可迁移性
        运行模式
          第二类虚拟机部分运行在用户态、一部分运行在内核态，内核态部分是以虚拟机驱动的方式加载到操作系统内核当中的
    支持虚拟化的CPU指令划分
  10、进程（进程实体）
    前驱图（有向无环图，导入）
      程序顺序执行
        特征
          顺序性
            每个操作必须在下个操作开始前结束
          封闭性
            程序运行独占全集资源
          可再现性
            只要程序执行的时候的环境和初始条件相同，程序执行时，不论是从头到尾不停地执行还是走走停停执行，都会或得相同的结果。
      并发执行
        特征
          间断性
          失去封闭性
          不可再现性
            例子
              程序A和B共享一个变量N，他们以不同的速度运行。（N的初始值设为n）
N=N+1和print(N)；两条语句同时执行，本来应该是N=N+1先执行的，如果print(N)的语句更快的话就会输出n而不是n+1.
但是很明显这不是我所期望的，因此，我们引入了进程这个概念
    概念
      程序是静态的，就是个存放在磁盘的可执行文件，就是一系列的指令集合.
进程是程序的一个实例，是它的一次执行
      进程是动态的，是程序的一次执行过程
      进程是程序实体的运行过程，是系统进行资源分配和调度的一个独立单位
    特征
      动态性（最基本特征）
        进程是程序第一次执行任务，是动态产生、变化、消亡的
      并发性
        内存中多个进程实体，各进程并发执行。
一段时间内同时运行
      独立性
        进程是能独立运行、独立获得资源、独立接受调度的基本单位
      异步性
        各进程按各自独立的、不可预知的速度向前推进，操作系统要提供“进程同步机制“来解决异步问题每个进程都会配置一个PCB，最后的结果回不确定
      结构性
        结构上看，进程由程序段、数据段、PCB组成
    进程和程序的区别
      进程是程序的一个实例，是程序的一次执行。
      进程是活动的，程序是静态的。
      程序是进程的代码部分。
      进程在内存中，程序在外存中。
    思考1
      操作系统我是这些进程的管理者，可以如何区分各个进程？
        记录进程的运行情况（如：CPU使用时间、磁盘使用情况、网络流量使用情况等），可用于实现操作系统对进程的控制、调度
        以上的所有信息都被统一存在一个数据结构——PCB 中，即进程控制块。操作系统需要对各个并发运行的进程进行管理，但凡管理时所需药的信息，都会放在PCB中
        PCB是进程存在的唯一标志，当一个进程被创建的时候，操作系统为其创建PCB，当进程结束时，会回收PCB
        进程描述信息
          当进程被创建的时候，操作系统会为该进程分配一个唯一的、不重复的“身份证号”——PID（Process ID，进程ID）
          同一个程序多次执行会对应多个进程
          操作系统要记录ID、进程所属用户ID（UID），基本的进程描述信息，可以让操作系统区分各个进程
        进程控制和管理信息
        资源分配清单
        处理机相关信息
    组成
      PCB
        概念
          是操作系统中最重要的记录型数据结构
是进程存在的唯一标志
        进行描述信息
          进程标识符
            外部标识符
            内部标识符
          处理机状态
            通用寄存器
            指令计数器
            程序状态字寄存器
          进程调度信息
            进程状态
            进程优先级
            进程调度需要的其他信息
            事件
          进程控制信息
            程序和数据的地址
            进程同步（互斥）和通信机制
            资源清单
            链接指针
        组织方式
          线性方式
          链接方式
          索引方式
        进程控制和管理信息
        资源分配清单
        作用
          作为独立运行基本单位的标志
          能实现间断性运行方式
          提供进程管理所需要的信息
          提供进程调度所需要的信息
          实现与其他进程的同步与通信
      程序段
        程序的代码（指令序列）
      数据段
        运行过程中产生的各种数据（如：程序中定义的变量）
      进程实体
        由PCB、程序段、数据段组成，进程实体是动态的，进程实体是静态的
        进程实体可以反应进程在某一时刻的状态
      注意
        PCB是给操作系统用的，操作系统程序段、数据段是给进程自己用的
        进程是进程实体的运行过程，是系统进行资源分配的调度的一个剧本单位。PCB是进程存在的唯一标识！
    思考2
      知识滚雪球：程序如何运行的？
        子主题 1
        子主题 2
        子主题 3
    状态与转化
      进程的状态
        创建态
          申请一个空白PCB；填写PCB；分配资源；设置就绪状态插入就绪队列
        就绪态（大部分时间）
          分类
            活动就绪态
              内存中，就是我们一般说的就绪态
            静止就绪态
              在外存中，处于挂起态
        运行态（执行态）（大部分时间）
          单CPU情况下，同一时刻只有一个进程运行态；.......
          进程PCB中，会有一个变量state来表示进程的当前状态。如：1表示创建态、2表示就绪态、3表示运行态。为了对同一个状态下的各个港程进行统一的管理，操作系统会将各个进程的PCB组织起来
        阻塞态（大部分时间）
          分类
            活动阻塞态
              在内存
            静止阻塞态
              进程在外存中并等待一个事件，挂起
        终止态
          进程完成任务到达正常结束点，或出现无法克服的错误而异常终止，或被操作系统及有终止权的进程所终止时所处的状态
          等待OS善后
          收回PCB
      过程
        创建态、就绪态
        运行态（执行态）
        运行态
忙碌中，这时候不应该让在此资源一直占用CPU。在进程运行的过程中，可能会请求等待某个时间的发生（如等待某种系统资源的分配，或者等待其他进程的响应）。
        阻塞态
在这个事件发生之后，进程无法继续往下执行，此时操作系统会让这个进程下CPU，并让它进入“阻塞态”。当CPU空闲的时候，又会选择另一个“就绪态”进程上CPU运行
典型事件：请求I/O、申请缓存空间
        阻塞态恢复
当打印机空闲了就可以为进程2分配资源了一个进程
        终止态
可以执行exit系统调用，请求操作系统终止该进程。此时该进程会进入“终止态”，操作系统会让该进程下CPU,并回收内存空间等资源，最后还要回收该进程的PCB。
      进程状态的转换
        流程
      进程的组织
        链路方式
        索引方式
          根据进程状态的不同，建立几张索引表
          操作系统持有指向各个索引表的指针
      进程控制
        概念
        像这种流程就是必须一气呵成的，不可以中断，否则就会出错的（所以使用原语）
        如何实现原语的”原子性“？
          原语的执行具有原子性，期间不允许停止，必须一气呵成。可以使用“关中断指令”和“开中断指令”两个特权指令实现原子性
            如果如此那么我们的程序就不会被中断，会一直霸占CPU
        进程的创建
          创建原语（主要是创建一个指定标识符的进程）
            申请空白PCB
            为新进程分配所需的资源
            初始化PCB
            将PCB插入就绪队列
          引发进程创建的事件
            用户登录
              分时系统中，用户登录成功，系统为其建立一个新进程
            作业调度
              多道批处理系统中，有新的作业放入内存时，会为其建立一个新的进程
            提供服务
              用户向操作系统提出某些请求，会新建一个进程处理该请求
            应用请求
              由用户进程主动请求创建一个子进程
        进程的终止
          撤销原语
            PCB集合中找到终止进程的PCB
            若进程正在运行，立即剥夺CPU，将CPU分配给其他进程
            终止其所有子进程
            将该进程所有资源归还父进程或操作系统
            子父进程理解
关系是树形结构
          引发进程终止的事件
            正常结束
              进程自己请求终止的（exit系统调用）
            异常结束
              整数除以0、非法使用特权指令，然后操作系统强行杀死
            外界干预
              用户杀死，用Ctrl +Alt + Delete或者Ctrl + Shift + Esc
        进程的阻塞和唤醒
          进程的阻塞(主动)
            阻塞原语
              找到要阻塞的进程对应的PCB
              保护进程运行现场，将PCB状态信息设置为“阻塞态”，暂时停止进程的运行
              将PCB插入到相应事件的等待（阻塞）队列中
              功能
                进程的现场保护
                置进程的状态为“等待”
                插入到相应的等待队列
                转进程调度程序
            引发进程阻塞的事件
              需要等待系统分配某些资源
              需要等待相互合作的其他进程完成工作
              功能
                唤醒处于某一等待队列中的进程，入口信息为唤醒进程名。
          进程的唤醒（被动）
            唤醒原语
              在事件等待队列中找到PCB
              将PCB从等待队列移除，设置进程为就绪态
              将PCB插入就绪队列，等待被调度
              唤醒原语Wakeup()。
具体过程：从阻塞队列中移出；状态由阻塞改为就绪；将PCB插入就绪队列。
必须成对使用Block和Wakeup原语。
            引起进程唤醒的事件
              等待的事件发生
        进程的切换
          切换原语
            将运行环境信息存入PCB
            PCB移入相应的队列
            选择另一个进程执行，并更新其PCB
            根据PCB恢复新进程所需的运行环境
          引发进程切换
            当前进程时间片
            有更高优先级的进程到达
            当前进程主动阻塞
            当前进程终止
        进程通信
          概念
            进程之间的信息交换（不知是狭义上的数据传递）
          类型
            共享存储器系统
              基于共享数据结构的通信方式（效率低）
              基于共享存储器的通信方式（高级）
              解释
                共享内存机制就是拿出一块虚拟的地址空间来，映射到相同的物理内存中，这样这个进程写入的信息，另一个进程马上就可以看到，就不需要来回拷贝了
              问题
                内存共享去的互斥要通过其他机制实现
                数据的发送方不关心数据由谁接收
            消息传递系統
              直接通信方式
              间接通信方式（邮箱）
              缺点
                不适合大数据传输
            管道通信
        问题
          单处理机系统
            一个处理器（CPU）
          多处理机系统
          单核
          多核
  11、线程
    前言
      没有引入线程之前各个程序都只能串行执行
如此我们就不允许同时执行多个程序
      有的进程可能需要“同时”做很多事，而传统的进程只能串行执行一系列程序。为此，引入了“线程”，来增加并发度
    进程机制带来的变化
      资源分配、调度
        传统进程机制：进程是自愿分配、调度的基本单位
        引入线程后：进程是资源分配的基本单位，线程是调度的基本单位
      并发性
        传统进程机制：只能进程之间并发
        引入线程后：各线程之间也能并发，提高并发度
      系统开销
        传统的进程间并发，需要切换进程运行环境，系统开销巨大
        线程之间并发，如果是同一进程内的线程切换，则不需要切换进程环境，系统开销比较小
        引入线程之后，并发所带来的系统开销比较小
    概念
      线程也就是”轻量级的进程“线程是一个基本的CPU执行单元，也是程序执行流的最小单位。
      引入线程之后，不仅是进程之间可以并发，进程内的各线程之间也可以并发，从而进一步提升了系统的并发度，使得一个进程内也可以并发处理各种任务（如QQ视频、文字聊天、传文件)
      引入线程后，进程只作为除CPU之外的系统资源的分配单元（如打印机、内存地址空间等都是分配给进程的)。
    属性
      线程是处理机调度的单位
      多CPU计算机中，各个线程可占用不同的CPU
      每个线程都有一个线程ID、线程控制块(TCB)
      线程也有就绪、阻塞、运行三种基本状态
      线程几乎不拥有系统资源
      同一进程的不同线程间共享进程的资源
      由于共享内存地址空间，同一进程中的线程间通信甚至无需系统干预
      同一进程中的线程切换，不会引起进程
      切换不同进程中的线程切换，会引起进程切换
      切换同进程内的线程，系统开销很小
      切换进程，系统开销较大
    实现方式
      用户级线程
        历史背景
          早期的操作系统(比如早期的Unix)只支持进程，
不支持线程。当时的“线程”是由线程库实现的
        图解
        问题
          线程管理工作由谁管理？
应用程序通过线程库来管理的
          线程是否需要CPU变态？
不需要
          操作系统会否能意识到用户线程的存在？
不能
          这种线程实现方式有什么优点和缺点？
优点：用户级线程切换在用户空间即可完成，不需要切换到核心态，线程管理的系统开销小，效率高
缺点：当一个用户级线程被阻塞后，整个进程都会被阻塞，并发度不高。多个线程不可在多核处理机上并行运算
          注意
            这个时候即便我们的计算机是多核处理机，由于我们的计算机的CPU的基本单位为进程，我们的每个进程也只能被分配到一个核心，线程是不允许并发的
      内核级线程
        由操作系统支持的线程
        图解
        问题
          线程的管理工作由谁完成？
操作系统
          线程切换是否需要CPU变态？
需要，由用户态转换为内核态
          操作系统是否意识到内核线程的存在？
意识得到
          这种线程的实现方式有什么优点和缺点？
优点：当一个线程被阻塞之后，别的线程还可以继续执行，并发能力强。多线程可在多核处理机上并行执行
缺点：一个用户进程会占用多个内核级线程，线程切换由操作系统内核完成，需要切换到核心态，因此线程管理的成本高，开销大
      多线程模型（结合前两种）
        一对一模型
          一个用户级线程映射到一个内核级线程。每个用户进程有与用户级线程同数量的内核级线程
          优点
            当一个线程被阻塞后，别的线程还可以继续执行，并发能力强。多线程可在多核处理机并行执行
          缺点
            缺点：一个用户进程会占用多个内核级线程线程，切换由操作系统内核完成，需要切换到核心态，因此线程管理的成本高，开销大。
        多对一模型
          多个用户级线程映射到一个内核级线程。且一个进程只被分配一个内核级线程
          优点
            用户级线程的切换在用户空间即可完成，不需要切换到核心态，线程管理的系统开销小，效率高
          缺点
            当一个用户级线程被阻塞后，整个进程都会被阻塞，并发度不高。多个线程不可在多核处理机上并行运行
          注意
            操作系统只“看得见”内核级线程，因此只有内核级线程才是处理机分配的单位.
我们默认一个进程只被分配一个内核级线程
        多对多模型
          图解
          优点
            克服了多对一模型并发度不高的缺点（一个阻塞全体阻塞)，又克服了一对一模型中一个用户进程占用太多内核级线程，开销太大的缺点
          缺点
        多个模型的理解
          用户线程是“代码逻辑”的载体
          内核级线程是“运行机会”的载体
        子主题 6
          子主题 1
    线程的组织和转换
  12、调度
    概念
      当有一堆任务要处理，但由于资源有限，这些事情没法同时处理。这就需要确定某种规则来决定处理这些任务的顺序，这就是“调度”研究的问题。
    三个层次
      高级调度（作业调度）
        概念
          作业：一个具体的任务用户向系统提交一个作业≈用户让操作系统启动一个程序（来处理一个具体的任务）
        简化理解
          好几个程序需要启动，到底先启动哪个
        按一定的原则从外存的作业后备队列中挑选一个作业调入内存，并创建进程。每个作业只调入一次，调出一次。作业调入时会建立PCB,调出时才撤销PCB。
        操作系统决定哪个作业先做
      低级调度（进程调度/处理机调度）
        概念
          按照某种策略从就绪队列中选取一个进程，将处理机分配给它。
        注意
          进程调度是操作系统中最基本的一种调度，在一般的操作系统中都必须配置进程调度。进程调度的频率很高，一般几十毫秒一次。
      中级调度（内存调度）
        概念
          按照某种策略决定将哪个处于挂起状态的进程重新调入内存
          一个进程可能会被多次调出、调入内存，因此中级调度发生的频率要比高级调度更高
        挂起状态
          内存不够时，可将某些进程的数据调出到外存。等内存空闲或者进程需要运行时再重新调入内存。暂时调到外存等待的进程状态。
把进程从内存转向外存
          原因
            终端用户的需要
            父进程的需要
            负荷调节的需要
              比如有一些实时任务比较重要，需要充分内存空间，这是需要将非实时任务进行挂起
            OS的需要
            定时任务
            安全
        挂起队列
          被挂起的进程PCB
        也就是当你卡顿的时候就是在进行中级调度
      补充知识点：进程的挂起状态与七状态模型
        时调到外存等待的进程状态为挂起状态（挂起态，suspend)
挂起态又可以进一步细分为就绪挂起、阻塞挂起两种状态
五状态模型→七状态模型
        “挂起”和“阻塞”区别
          两种状态都是暂时不能获得CPU的服务，但挂起态是将进程映像调到外存去了，而阻塞态下进程映像还在内存中
          有的操作系统会把就绪挂起、阻塞挂起分为两个挂起队列，甚至会根据阻塞原因不同再把阻塞挂起进程进一步细分为多个队列
      挂起
        把进程从外存转到内存
        挂起倾向于换出阻塞态的进程，也可以是就绪态的进程。只是这个转换几乎不会采用，因为任意时刻，肯定可以找到在内存中的阻塞态进程，但也不能缺少这种直接把就绪转换到挂起的能力。
  13、进程调度的时机、切换、过程与方式
    进程调度
      按照一定的算法从就绪队列中选择一个进程为其分配处理机
    时机
      什么时候需要进行进程调度与切换？
        1、当前运行进程主动放弃处理机
          进程正常终止
          运行过程中发生异常而终止
          进程主动请求阻塞（如 等待I/O）
        2、当前运行的进程被动放弃处理机
          分给进程的时间片用完了
          有更加紧急的是需要处理（如I/O中断）
          有更高优先级的进程进入就绪队列
      什么时候不能进行进程调度？
        1、在处理中断的过程中。中断处理过程复杂，与硬件密切相关，很难做到在中断处理过程中进行进程切换
        2、进程在操作系统内核程序临界区中
          临界资源：一个时间段内只允许一个进程使用的资源。各进程需要互斥地访问临界资源。
          临界区：访问临界资源的那段代码。
          内核程序临界区：一般是用来访问某种内核数据结构的，比如进程的就绪队列（由各就绪进程的PCB组成）
        3、在原子操作过程中（原语）。原子操作不可中断，要一气呵成（如之前讲过的修改PCB中进程状态标志，并把PCB放到相应队列)
    切换与过程
      “狭义的调度”与“切换”的区别
        狭义的进程调度指的是从就绪队列中选中一个要运行的进程。（这个进程可以是刚刚被暂停执行的进程，也可能是另一个进程，后一种情况就需要进程切换)
        进程切换是指下个进程让出处理机，由另一个进程占用处理机的过程。
        广义的进程调度包含了选择一个进程和进程切换两个步骤。
      进程切换主要完成了什么？
        1、对原来运行的进程各种数据的保存
        2、对新的进程各种数据的恢复
(如：程序计数器、程序状态字、各种数据寄存器等处理机现场信息，这些信息一般保存在进程控制块PCB)
        注意
          进程切换是有代价的，因此如果过于频繁的进行进程调度、切换，必然会使整个系统的效率降低，使系统大部分时间都花在了进程切换上，而真正用于执行进程的时间减少。
    方式
      非剥夺调度方式（非抢占式）
        又称非抢占方式。
即，只允许进程主动放弃处理机。在运行过程中即便有更紧迫的任务到达，当前进程依然会继续使用处理机，直到该进程终止或主动要求进入阻塞态。
        特点
          实现简单，系统开销小但是无法处理紧急任务，适用于早期批处理系统
      剥夺调度方式（抢占式）
        又称抢占方式。
当一个进程正在处理机上执行时，如果有一个更重要或更紧迫的进程需要使用处理机，则立即暂停正在执行的进程，将处理机分配给更重要紧迫的那个进程。
        特点
          可以优先处理更紧急的进程，也可实现让各进程按时间片轮流执行的功能（通过时钟中断)。适合于分时操作系统、实时操作系统
    指标
      周转时间
      响应时间
      等待时间（进程调度）
  14、调度器、闲逛进程
    调度程序决定了什么？
      调度程序是操作系统内核非常重要的一个程序模块。
2和3的转换就是由调度程序来进行的。
它决定了让谁先运行？——调度算法
运行多长时间？——时间片大小
    调度时机——什么事件会触发“调度程序”？
      创建新进程
      进程退出
      运行进程阻塞
      I/O中断发生（可能唤醒某些阻塞进程）
  15、调度算法
    前言
      周转时间
        从进程创建到进程完成的这段时间间隔
      平均周转时间
      带权周转时间
        进程的平均周转时间T与系统为它提供服务的时间T_S之比，即W=T/T_S
T_S=完成时间-开始时间
      平均带权周转时间
    先来先服务调度算法（FCFS）
      概念
        按照进程进入就绪的先后顺序选择可以占用处理机的进程。
它是按照作业到达先后次序进行调度的，或者说它会优先考虑系统中等待时间最长的作业，不管作业执行时间长短。
      优点
        简单、易于实现
      缺点
        有利于长的进程，不利于短的
        有利于CPU繁忙型进程，不利于I/O繁忙型的进程
      例题
    短作业优先调度算法（SJF）
      概念
        从就绪队列中选出一个估计运行时间最短的进程，将处理机分配给它，使它立即执行并一直到进程结束。
SJF最大限度地降低了平均等待时间，但也存在对长进程的不公平性。长进程在此调度算法中可能长时间得不到运行机会，甚至由于“饥饿”时间过长而被系统撤销。
      优点
        调度性能较好，系统吞吐量高
      缺点
        不利于长进程
        不考虑进程的紧迫程度
        估计运行时间很难准确获得
        无法实现人机交互
      两种模式
        非抢占式SJF
        抢占式SJF
      注意
        SJF是最优的（对一组指定的进程而言），它给出了最短的平均等待时间
      例子
          非抢占式
          抢占式
        综合
    时间片轮转算法（RR）
      概念
        依据公平服务的原则，将处理机的运行时间划分成等长的时间片，轮转式分配给各个就绪进程使用。
采用此算法的系统中，所有就绪进程按照先来先服务的原则排成一个队列，每次调度时将处理机分派给队首进程。如果进程在一个时间片内没执行完，那么调度程序强行将该进程中止，进程由执行态变为就绪态并把处理机分配给下一个就绪进程。
该算法能保证就绪队列中的所有进程在一给定的时间段内均能获得处理机运行。
      特点
        所有进程都是同等重要的
      基础
      例子
        时间片为20ms
        时间片大小确定
          特征
            q大：FCFS
q小：增加了切换时间
          考虑点
            系统对响应时间要求
            就绪队列中进程的数目
            系统处理时间
          一般准则
            时间片/10>进程上下文切换时间
    优先级调度算法（PR）
    高响应
  7、操作系统体系结构
    原语
    简单结构
      OS是无结构的，是为数众多的一组过程的集合，每个过程均可任意调用其他过程
    分层结构
      概念
        内核分多层，每层可单向调用更低一层提供的接口
        最底层是硬件，最高层是用户接口，每层可调用更低一层
      优点
        便于调试和验证，自底向上逐层调试验证（因为这种结构只能高层调用相邻的低层功能，可以实现逐层验证）
        易扩充易维护，各层之间调用接口清晰固定
      缺点
        仅可调用相邻低层，难以合理定义各层的边界（不太灵活）
        效率比较低，不可跨层调用，系统调用执行时间长（只规定A->B->C->D，不允许A->D）
    操作系统内核
      概念
        操作系统最基本、最核心的部分。实现操作系统内核功能的那些程序就是内核程序
      时钟管理
        实现计时功能
      中断处理
        负责中断机制
      原语
        是一种特殊的程序，具有原子性。也就是说，这段程序运行必须一气呵成，不可“中断”
      对系统资源进行管理的功能
        进程管理
        存储器管理
        设备管理
        这些管理工具更多的是对数据结构的操作性，不会直接涉及硬件
      微内核和大内核
        变态=CPU状态的转换
        注意
          变态的过程是有成本的，要消耗不少时间，频繁切换CPU状态会降低性能
        大内核
          概念
            将操作系统的主要功能模块都作为系统内核，运行在核心态（大内核结构的OS通常使用了“模块化”的设计思想）
          优点
            高性能，内核内部各功能可以直接相互调用
          缺点
            1、内核代码庞大，结构混乱，难以维护
            2、大内核某个功能模块出错，就可能导致整个系统系统崩溃
          别名
            庞内核/单内核
          Linux、Unix
        微内核
          概念
            只把中断、原语、进程通信等最核心的功能放入内核。进程管理、文件管理、设别管理等功能以用户进程的形式运行在用户态
          优点
            1、内核功能少，结构清晰，方便维护，易于维护，内核可靠性高，可植性强
            2、内核外某个功能模块出错不会导致整个系统崩溃
          缺点
            需要频繁地在核心态和用户态之间切换，性能低。用户态的各个功能模块不可以直接互相调用，只能通过内核的“消息传递”来间接通信
          Windows NT
      外核
        概念
          由内核和外核组成，内核部分负责进程调度、进程分配未经抽象的硬件资源，且由外核负责保证资源使用安全
        扩展
          1、用户进程他和想要申请使用一片内存空间，分配的空间是抽象的，虚拟化的用户进程，按照进程的视角实际就是一段段连续的内存空间，实际上不是连续的，在内存上实际上应该离散的，是虚假的连续空间。
          2、同时由于在访问这虚拟的内存的时候完全是由操作系统决定的，因此在访问内存的时候我们的磁头在变换位置也是非常随机的，这样的话就会使得其访问效率降低。
          3、这时候外核可以直接给用户进程分配未抽象的资源。因为我的用户知道我需要随机访问这些资源，这时候我们就可以向外核请求为我们分配连续的磁盘块来装我需要随机访问的这些内存。（如此就可以减少磁头移动的距离，起到了提高效率作用）
        优点
          1、外核可直接给用户进程分配“不虚拟、不抽象”的硬件资源，使用户进程可以灵活的使用硬件资源
          2、减少了虚拟硬件资源的“映射层”，提高效率（一般操作系统会分配的是虚拟内存，需要进行多层映射才可以变为真实的物理地址，如此就可以减少查询次数)
        缺点
          1、降低了系统的一致性（比如P1进程分配的是虚拟内存，P2进程分配的是物理内存，对于分配的策略和后续的一些管理要考虑到很多方面，如此就会复杂起来，不可以直接一通到底）
          2、是系统更加复杂
    模块化
      概念
        将内核分为多个模块，各模块之间相互协作
        内核=主模块 + 可加载的内核模块
      主模块
        只负责核心功能，如进程调度、内存管理
        可加载内核模块：可以动态加载新模块到内核，而无需重新编译整个内核
      可加载模块
        可以动态加载新模块到内核，而无法重新编译整个内核（比如驱动，实际就是个锦上添花的东西）
      优点
        1、模块之间逻辑清晰易于维护（因为有专门模块来维护各个功能），确定模块间接口后即可多模块同时开发（比如进程管理模块需要对外暴露几个功能接口，只要我们规定好其对应函数的返回值、参数列表、名字等是什么，即使功能还没有完成，但是也不会影响其他模块，其他模块可以同时并进）
        2、支持动态加载新的内核模块（比如：安装设备驱动程序、安装新的文件系统模块到内核），增强OS适应性
        3、任何模块都可以直接使用其他模块（相当于直接调用函数一个样子），无需使用消息传递进行通信，效率高
      缺点
        1、模块之间的接口定义未必合理、实用
        2、模块之间相互依赖，更难调试、验证（你调我，我调你，我出现问题，你也会出现问题）
  6、系统调用
    概念
      操作系统提供给应用程序（程序员/编程人员）使用的接口，可以理解为一种可供应用程序调用的特殊函数，应用程序可以通过系统调用来请求操作系统的服务
    与库函数的区别
      不涉及库系统调用的库函数，比如“取绝对值”函数
      设计系统调用的库函数，比如“创建一个新文件”的函数
    与一般过程调用区别
      1、运行在不同的系统状态
      2、返回问题
      3、状态转换
      4、嵌套调用
    系统调用的场景
      eg.两个同学同时打印资料，两个同学的资料肯能会出现交错打印的情况
      解决办法
        由操作系统内核对共享资源进行统一管理，并向上提供“系统调用”，用户进程想要使用打印机这种共享资源，只能通过系统调用向操作系统内核发出请求。内核会对各个请求进行协调处理
    什么功能要用到系统调用（Windows）
      凡是与共享资源有关的操作（如存储分配、/O操作、文件管理等），都必须通过系统调用的方式向操作系统内核提出服务请求，由操作系统内核代为完成
      保证系统的稳定性和安全性，防止用户进行非法操作
      设备管理
        完成设备的请求/释放/启动 等功能
      文件管理
        完成文件的 读/写/创建/删除 等功能
      进程控制
        完成文件的 读/写/撤销/阻塞/唤醒 等功能
      进程通信
        完成进程之间的 消息传递/信息传递 等功能
      内存管理
        完成内存的 分配/回收 等功能
    具体过程
      例子
        第一步
        第二步
        第三步
        处理了完之后CPU就会返回用户态继续执行其他指令
      寄存器：参数1（指明系统调用的类型，比如fork）
寄存器：参数2（其它参数，可以根据寄存器中的参数判断用户需要条用的服务类型）
陷入指令：引发中断
    注意
      陷入指令（用户态）-> 执行对应的请求（核心态，引发内中断）->返回应用程序
      发出系统调用请求是在用户态，而对系统调用的相应处理在核心态
  5、中断和异常
    合适的情况下，操作系统内核会将CPU的使用权让给应用程序（详细看进程管理相关内容）!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    中断作用
      是让操作系统内核夺回CPU使用权的唯一途径
      会使CPU由用户态变为内核态，使操作系统重新夺回对CPU的控制权
      如果没有“中断”机制，那么一旦应用程序上CPU运行，CPU就会一直运行这个应用程序。那就不存在并发了
    中断（这个就是广义的中断）类型
      内中断（也称异常）
        概念
          与当前执行的指令有关，中断信号来自于CPU内部
        陷阱、陷入指令
          例子
            有时候应用程序想请求操作系统内核服务，此时会执行一条特殊的指令：陷入指令，这个指令也会出发内中断，这意味着应用程序主动将CPU控制权还给操作系统内核。“系统调用”就是通过陷入指令完成的（这个指令不是特权指令）
          由陷入指令引发，是应用程序故意引发的
          陷入指令别名
            陷入指令=trap指令=访管指令
        故障
          例子
            一个黑客在CPU处于用户态的时候植入一条特权指令，紧接着CPU内部就会产生一个中断信号,CPU会拒绝执行该指令，然后自动转为内核态然后执行处理这个中断信号的内核程序。之后系统的管理者也可以重新掌握控制权
          由错误条件引发。可能被内核程序修复·。修复完之后会将CPU使用权还给应用程序，让它继续执行下去
        终止
          例子
            如果当前的指令、指令参数本生就是非法的，比如：除数为0
          由致命错误引发，内核程序无法修复错误，因此一般不再将CPU使用权还给应用程序，而是直接终止该程序。BUG
        扩展
          当所读文件的数据不在内存时，产生内中断（缺页中断），原进程进入阻塞态，直到所需数据从外存调入内存后，才将该进程唤醒
          注意
            要读一个文件，首先要用open系统调用打开该文件。open中的参数包括文件的路径名和文件名，而read只需使用open返回的文件描述符，并不使用文件名作为参数。
      外中断（也称中断）
        概念
          例子
            与当前执行的指令无关，中断信号来自于CPU外部
        例子
          时钟中断
            由时钟部件发来的中断信号（时钟部件每隔一段时间如50us会给CPU发出一个时钟中断信号）
          I/O中断请求
            I/O中断——有输入/输出设备发出的中断信号
          DMA中断
        注意
          考试中说明的"中断"一般就是指外中断，这个是狭义的中断
    中断机制的基本原理
      不同的中断信号，需要不同的中断处理程序来处理。当CPU检测到中断信号后，会根据中断信号的类型去查询“中断向量表”，以此找到相应的中断处理程序在内存中的存放位置
    扩展
      在中断处理过程中程序计数器(PC)和程序状态字(PSW)寄存器的内容都要压栈保存。在子程序调用时，由系统硬件限制只保存程序计数器的内容，不保存PSW的内容；如果需要保存PSW内容可由软件来实现。
      外部中断处理过程首先要保护现场，使得中断处理完之后能够恢复程序的执行状态继续执行。保护现场有两个含义：
（1）由中断隐指令保存程序的断点（程序计数器）
（2）由中断服务程序保存通用寄存器和状态寄存器的内容，中断服务程序是操作系统的一部分。
      中断是由硬件引发的
      异常/陷阱是由软件引发的
  4、注册表（非考研内容）
    概念
      注册表是Windows操作系统、硬件设备以及客户应用程序得以正常运行和保存设置的核心数据库
    具体包括用户安装在计算机上的软件和每个程序的关联信息
      计算机的硬件配置，包括自动配置的即插即用和已有的各种设备说明、状态属性以及各种状态信息和数据
      记录了用户安装在计算机上的软件和每个程序的相关信息
    作用
      控制硬件、软件、用户环境和操作系统界面的数据信息文件。
    注意事项
      注册表文件的数据信息保存在system.dat和user.dat中、利用regedit.exe程序能够存取注册表文件,通过注册表编辑器，可以更改系统设置、调整性能和解决系统不稳定或应用工作不正常的问题。不正确的修改可能导致系统不稳定或无法启动，因此在使用注册表编辑器时要谨慎
    打开方式
    组成说明
      根键
        以HKEY_XXX开头的， 根项下面每一项包含若干个文件夹和值
      父项
        相对子项而言，某一个子项的上一级就称之为它的父项(根键除外)
      子项
        在某一个项（父项）下面出现的项（子项）
      值项
        概念
          带有一个名称和一个值的有序值，每个项都可包括任何数量的值项，值项由三个部分组成：名称、数据类型和数据。
        数据类型
          包括字符串、二进制和双字节
        名称
          不能包含反斜线的字符、数字、代表符和空格的任意组合。同一键中名称不能重复
        数据范围
          值项的具体值，最大存储空间是为64KB
    类别
      HKEY_CLASSES_ROOT
        该根键包括启动应用程序所需的全部信息，包括扩展名，应用程序与文档之间的关系，驱动程序名，DDE和OLE信息，类ID编号和应用程序与文档的图标等
        记录的是Windows操作系统中所有数据文件的信息内容，主要记录了不同的文件的文件名后缀和与之对应的应用程序。当用户双击一个文档时，系统可以通过这些信息启动相应的应用程序
        由多个子键组成的
          两种类别
            已经注册的各类文件的扩展名
            各种文件类型的有关信息
      HKEY_LOCAL_MACHINE
        该根键包括本地计算机的系统信息，包括硬件和操作系统信息，安全数据和计算机专用的各类软件设置信息
        存放的是用来控制系统和软件的设置，这些设置是一个公共配置信息，与具体的用户关系不大
        进一步加深
          HARDWARE
            该子项包括了系统使用的浮点处理器、串口等信息。ACPI：存放高级电源管理接口数据；DEVICEMAP 存放设备映射；DESCRIPTION：存放系统信息；RESOURCEMAP：存放资源列表
          SAM
            受保护无法查看
          SECURITY
            为将来的高级功能而预留
          SOFTWARE
            该子项中保留的是所有已安装的应用程序信息，各个程序的控制信息分别安装在相应的子项中，由于不同的计算机安装的应用程序互不相同，因此这个子项下面的子项信息也不完全也一样
          SYSTEM
            该子项是启动时所需的信息和修复系统时所需要的信息：CurrentControlSet：保存了当前驱动程序控制集中的所有信息
      HKEY_USERS
        该根键包括计算机的所有用户使用的配置数据，这些数据只有在用户登录系统时才能访问。这些信息告诉系统当前用户使用的图标，激活的程序组，开始菜单的内容以及颜色，字体
        保存的是默认用户(default),当前登录用户和软件（software）的信息，其中.DEFAULT子项是其中最重要的一项，它的配置是针对未来将会被创建的新用户的。新用户根据默认用户的配置信息来生成自己的配置文件，该配置文件包括环境、屏幕和声音等多种信息
        常用的3项
          AppEvents
            它包括了各种应用事件的列表：EventLabels：按字母顺序列表；Schemes：按时间分类列表，另外，发现这个子项在HKEY_CURRENT_USER根项下面，在HKEY_USERS根项下面找不到
          Control Panel
            它包括内容与桌面、光标、键盘和鼠标等设置有关
          Keyboard layout
            用于键盘的布局（如语言的加载顺序等）；Preload：语言的加载顺序；Substitutes：设置可替换的键盘语言布局；Toggle：用于选择键盘语言
      HKEY_CURRENT_USER
        该根键包括当前登录用户的配置信息，包括环境变量，个人程序以及桌面设置等
      HKEY_CURRENT_CONFIG
        该根键包括当前硬件的配置信息，其中的信息是从HKEY_LOCAL_MACHINE中映射出来的
      注意事项
        网上说HKEY_LOCAL_MACHINE、 HKEY_USERS、这两个才是真正的注册表键，其它的三个都是从这两个分支映射出来的。 我通过实际查看，发现并不尽然。HKEY_CURRENT_CONFIG中存放的信息只是HKEY_LOCAL_MACHINE中信息的一部分，HKEY_CLASSES_ROOT和HKEY_LOCAL_MACHINE子项没有重合的地方，而HKEY_CURRENT_USER中和HKEY_USERS存放的信息只有一部分是重叠的，另外一部分HKEY_CURRENT_USER独有。比如说AppEvents，Microsoft，Network，SOFTWARE，Uninstall，Volatile Environment，只有HKEY_CURRENT_USER才有)。 所以我们重点了解一下HKEY_CLASSES_ROOT，HKEY_LOCAL_MACHINE和HKEY_USERS这三个注册表根键。
    备份和恢复
      背景
        如果你不备份的情况下直接修改注册表，你可能会造成以下后果
          无法启动操作系统
          无法启动应用程序
          没有访问程序的权限
          网络连接不正常
          Windows系统显示“注册表损坏”
          工作正常的硬件设备不再起作用或不再出现在“设备管理器”的列表中
      备份
        选择整个数据库文件进行备份/单个根键，执行导出操作
      恢复
        导入选择相应的备份文件即可
      用途（关键所在！！！）
        清理安装卸载时应用产生的垃圾信息
        分别进入到HKEY_LOCAL_MACHINE\SOFTWARE 和 HKEY_CURRENT_USER\SOFTWARE 中，删除一些未知程序或者已经卸载的程序
        系统安装时产生的无用信息
          删除多余时区
进入到"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones“项下, 如果是大陆用户，除China Standard Time必须保留外，可以时区子项都可酌情删除
          删除多余的语言代码
进入到"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\Locale"项中 有两个不要清理 中文 - 0804 英语 - 0409，其余的按情况清理
          删除多余的键盘布局
进入到“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layouts”，除了0804 中文简体-美式键盘布局需要保留外，其它可按情况进行删除。
        自动关闭停止响应程序
          进入到”HKEY_CURRENT_USER\Control Panel\Desktop“ 项中找到AutoEndTasks值，把数值数据改为1即可
        加快关机速度
          介绍
            HungAppTimeout
              作用是应用程序挂起等待时间，这个参数数值越小，应用程序关闭时越快
            WaitToKillAppTimeout
              作用是等待程序关闭的最大时间，也就是关机时一般都会有正在运行的app，这个时候如果超过程序关闭的最大时间，系统就会强制关闭app且直接关机
            WaitToKillServiceTimeout
              作用是等待终止服务超时(时间)。“服务”指 Windows 系统中的系统服务，每个启动的服务都占用一个进程，按道理来说数值设的越小关闭进程的速度就越快，但是不建议这样设置， 在系统关机时 “服务进程”需要有足够的时间将一些资料在系统结束前写回去，如果没有保留足够的缓冲时间，资料就会遗失
          第一步
            分别进入到HKEY_CURRENT_USER\Control Panel\Desktop 和 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control 项中
先在HKEY_CURRENT_USER\Control Panel\Desktop 项中找到HungAppTimeout字符串值和WaitToKillAppTimeout字符串值 如果没有的话就直接自己新建这两个值就好，找到这两个值之后先给HungAppTimeout的数值数据改为1000
          第二步
            把WaitToKillAppTimeout数值数据改为5000
          第三步
            再进入到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control 项中找到WaitToKillServiceTimeout字符串值 设置为5000
  3、运行机制
    预备知识
      程序是如何执行？
        一条高级语言的代
码翻译过来可能会
对应多条机器指令
        程序运行的过程其实就
是CPU执行一条一条的
机器执行
      指令
        其实就是处理器能识别、执行的最基本的命令
      应用程序
        普通程序员写的程序
      内核程序
        微软、苹果有一帮人负责实现操作系统
    内核
      概念
        由很多内核程序组成了“操作系统内核”，简称“内核”
      特点
        是操作系统最重要最核心的部分，也是最接近硬件的部分
        可以说一个操作系统只需要内核就可以了（eg.Docker->只需要Linux内核即可）
        操作系统的功能未必都在内核中，比如图形化界面GUI
      指令类型
        特权指令
          作为系统的管理者，有时候会执行一些“特权指令”。
比如：内存清零指令。因此这种指令只运行我们的操作系统才可以使用
          不仅可以访问用户空间，还可以访问系统空间
          例子
            启动外部设备
            设置系统时钟
            管中断
            切换执行状态
            I/O指令
        非特权指令
          只允许使用“非特权指令”，如加法指令、减法指令
          仅能访问用户空间
          防止应用程序的运行异常对系统造成破坏
        在CPU设计和生产的时候就划分了特权指令和非特权指令，因此CPU执行一条指令前就判断出其类型
    内核态VS用户态
      用途
        CPU在判断指令类型之后是如何区分当前运行的为应用程序和内核程序
      类型
        内核态
          处于该状态就代表正在运行的是内核程序
          别名
            核心态
            管态
        用户态
          处于该状态就代表正在运行的是应用程序
          别名
            目态
      扩展
        CPU中有一个寄存器位“程序状态寄存器”（PSW），其中有个二进制位，1表示“内核态”，0表示“用户态”
    内核态和用户态的转换
      方式
        内核态——>用户态
          操作系统内核在让出CPU之前，会执行一条特权指令把PSW的标志位由“内核态”设置为“用户态”
        用户态——>内核态
          执行一条特权指令——修改PSW的标识位为“用户态”，这个动作意味着操作系统主动让出CPU使用权
            CPU处于“用户态”，而当CPU执行的是特权指令的时候，这个非法事件就会引发一个中断信号，CPU就会立即变为“核心态”，并停止运行当前程序，转而运行处理中断信号的内核程序
          由”中断“引发，硬件自动完成变态过程，触发中断信号意味着操作系统将强行夺回CPU使用权
            操作系统再次夺回CPU的控制权
          除了非法使用特权指令之外，很多事件会触发中断信号。一个共性：但凡须要操作系统介入的地方，都会触发中断信号
      图解
    扩展
      计算机开机之后OS会被加载到RAM里面
      配置了操作系统的计算机是一台比原来的物理计算机功能更强大的计算机，这样的计算机只是一台逻辑.上的计算机，成为虚拟计算机。
      子主题 3
  2、操作系统的特征和功能
    并发性
      概念
        两个或多个事件在同一时间间隔内发生。这些时间在宏观上是同时发生的，而微观上是交替发生的
      补充
        并行性（用户角度）是指两个或多个事件在同一时刻执行
        操作系统的出现就是伴随“多道程序技术”而出现的。因此，操作系统和程序并发是一起诞生的
    共享性
      概念
        即资源共享，是指系统中资源的可供内存中多个并发执行的过程共同使用
      方式
        互斥共享方式
          系统中的某些资源可以提供个多个进程使用，但是一个时间段内只允许1个进程对资源进行访问
        同时共享方式
          系统中的某些资源，允许一个时间段内由多个进程对它”同时“进行访问
      联系
        例子
          使用QQ发文件A，同时使用微信发送文件
            QQ、微信两个进程同时运行（并发性）如果失去了并发性，则系统只有一个程序运行，共享性就没有了意义
            需要共享访问硬盘资源（共享性）如果失去了共享性，QQ和微信就不可以同时访问磁盘，就无法实现同时发送文件，也就无法实现并发
            并发性和共享性二者互为存在条件
    虚拟性
      概念
        把一个物体上的实体变为若干个逻辑对应物。物理实体（实体）是实际存在的，而逻辑上是用户感受的
      类型
        虚拟存储技术（空分复用技术）
          实际只有12GB，在用户看来远远大于12GB
        虚拟处理器技术
          微观上处理机在各个微小的时间段内交替为各个进程服务
            单核CPU电脑中能够同时运行这么多个程序
    异步性
      概念
        再多道程序环境下，允许多个程序并发执行，但是由于资源有限，进程的执行不是一贯到底的，以不可预知的速度向前推进。
经典特征：走走停停，主要就是有操作系统这个中介，你必须等操作系统的反馈才可以继续进行，这个等待时间就是不可预测的
      联系
        如果失去并发性，系统只可以串行运行各个程序，各个程序执行就会一串到底。只有系统有了并发性，才会有异步性
    扩展
      OS是计算机系统中的一个系统软件,它负责管理和控制计算机系统中的资源。
    功能
      处理机管理功能
      文件管理功能
      内存管理功能
      设别管理功能
      用户和计算机硬件系统之间的接口
    作用
      作为计算机系统资源的管理者
      用户和计算机硬件系统之间的接口
      作为计算机系统资源的管理者
      实现对计算机资源的抽象
  1、操作系统的发展史
    手工操作阶段
      缺点
        缺点：用户独占全机、人机速度矛盾导致资源利用率低
    批处理阶段——单道批处理系统
      优点
        缓解了一定程度的人机速度矛盾，资源利用率有所提高，吞吐量提高
      缺点
        内存中仅仅能有一道程序运行，只有该程序运行结束之后才能调入下一个程序。CPU有大量时间是在空闲等待I/O完成。资源利用率还是很低
      CPU断续性工作
        子主题 1
    批处理阶段——多道批处理系统
      解决问题
        1、处理机征用问题
        2、内存分配和保护问题
        3、I/O设备分配设备问题
        4、文件的组织和管理问题
        5、作业管理问题
        6、用户与系统的接口问题
      优点
        1、CPU利用率高
        2、系统吞吐量大
        3、I/O设备利用率高
        4、平均周转时间长
        5、无交互能力
      前提
        中断就可以使CPU从用户态转换为核心态，使操作系统获得计算机的控制权。因此，有了中断，才能实现多道程序并发执行。
注意：分时功能是建立在中断上的
      单处理机系统
        可以并行但是不可以并发
        进程是并发执行的，（软件即程序或进程）是不能并行的，但是硬件是可以并行的，比如CPU与设备，设备与设备，CPU与通道都是可以并行的（他们 都死依靠硬件去实现的），再比如cpu的解码器和运算单元也是可以并行的
      操作系统的横出
        优点
          多道程序并发执行，共享计算机资源。资源利用率大幅提升，CPU和其他资源能保持“忙碌”状态，系统的吞吐量增大
        缺点
          用户响应时间长，没有人机交互功能（用户提交自己的作业之后只能等待计算机处理完成，中间不可以控制自己的作业执行。eg：无法调试程序/无法在程序运行过程中输入一些参数）
      分时操作系统
        概念
          计算机以时间为单位轮流为各个用户/作业服务，各个用户可通过终端与计算机进行交互
          在一台主机上连接了多个带有显示器和键盘的中断，同时允许多个用户共享主机中的资源，每个用户可以通过自己的终端已交互方式使用计算机
        背景
          为了解决这个人机交互功能，计算机就制作了分时操作性系统
          如何使用户能与自己的作业进行交互
        特征
          多路性
            允许多台终端同时连接到一台主机上，按分时原则为每个用户服务
          独立性
            用户好像独占主机
          及时性
            响应时间很短，一般1~3s
          交互性
            通过终端和系统广泛进行人机交互
        优点
          用户请求可以被及时响应，解决人机交互问题。允许多个用户同时使用一个计算机，并且同时使用一台计算机，并且用户对计算机操作相互独立，感受不到别人的存在
        缺点
          不能优先处理一些紧急任务。操作系统对各个用户/作业都是公平的，循环为每位用户/作业服务一个时间片，部分任务的紧急性。
        分时技术
          把处理器的时间分成很短的时间片（如几百毫秒），这些时间片轮流地分配给各联机作业使用。
      实时操作系统
        概念
          系统能及时响应外部事件的请求，在规定时间内完成对该事件的处理，并处理所有实时任务协调一直运行
        分类
          硬实时系统
            必须在严格的规定时间内完成处理
          软实时系统
            能接受偶尔违反时间规定
        最重要特征
          实时性
        优点
          在实时操作系统控制下，计算机系统接收外界信号后及时进行处理，并且要在严格的时限内处理完事件。
实时操作系统主要特点就是及时性和可靠性
        应用
          1）实时控制
          2）实时信息处理；
（1）航空订票系统----实时信息处理系统；
（2）过程控制系统----实时控制系统；
（3）机器口语翻译系统---实时信心处理系统；
（4）工业（武器）控制系统；
（5）嵌入式系统；
（6）信息查询系统；
      扩展
        网络操作系统
          是伴随着计算机网络的发展而诞生的，能把网络中各个计算机有机地结合起来，实现数据传送等功能，实现网络中各种资源的共享（如文件共享）和各台计算机之间的通信。（如：Windows NT就是一种典型的网络操作系统，网站服务器就可以使用)
          特征
            硬件独立性
            接口一致性
            系统可靠性
            资源透明性
            执行并行性
          功能
            数据通信
            应用交互操作
            网络管理
        分布式操作系统
          概念
            是由一组通过网络进行通行、为了完成共同的任务而协调工作的计算机节点组成的系统
          特点
            系统中的各台计算机地位相同，任何工作都可以分布在这些计算机上，由它们并行、协同完成这个任务。
            分布性
              由多个计算机组成
            并行性
              子主题 1
            透明性
              分布式系统的系统资源被所有计算机共享
            全局性
          功能
            单处理机OS主要功能
            网络OS所拥有的全部功能
            通信、资源、进程管理功能
        个人计算机操作系统
          如Windows XP、MacOS,方便个人使用
        嵌入式系统
          1、为了完成某个特定功能而设计的系统
2、或是有附加机制的系统
3、或是其他部分的计算机硬件与软件的结合体
          特点
            系统内核小
            系统精简
            高实时性
            具有可配置性
      计算题
        请画出单道程序运行和多道程序运行的示意图
          答案
            单道程序运行
            多道程序运行
              非抢占式
              抢占式
  期末复习
    操作系统概念、作用、功能、发展的动力因素！！！
      概念
        是配置在计算机硬件上的第一层软件，是对硬件系统的首次扩充，是要用于管理硬件设备，提高它们的利用率和系统吞吐量。
OS是现代计算机系统中最基本和最重要的系统软件，大多数的应用软件都直接依赖于OS的支持，并须取得OS所提供服务
      功能
        处理机管理功能
        文件管理功能
        内存管理功能
        设备管理功能
        用户和计算机硬件系统之间的接口
      作用
        作为计算机系统资源的管理者
        用户和计算机硬件系统之间的接口
        实现对计算机资源的抽象
      发展动力因素
        不断提高计算机系统资源的利用率
        方便用户
        器件不断更新换代
        计算机系统结构不断发展
        不断提出新的应用需求
      基本特征
        并发性
          概念
            两个或多个事件在同一时间间隔内发生。这些时间在宏观上是同时发生的，而微观上是交替发生的
          补充
            并行性（用户角度）是指两个或多个事件在同一时刻执行
            操作系统的出现就是伴随“多道程序技术”而出现的。因此，操作系统和程序并发是一起诞生的
        共享性
          概念
            即资源共享，是指系统中资源的可供内存中多个并发执行的过程共同使用
          方式
            互斥共享方式
              系统中的某些资源可以提供个多个进程使用，但是一个时间段内只允许1个进程对资源进行访问
            同时共享方式
              系统中的某些资源，允许一个时间段内由多个进程对它”同时“进行访问
          联系
            例子
              使用QQ发文件A，同时使用微信发送文件
                QQ、微信两个进程同时运行（并发性）如果失去了并发性，则系统只有一个程序运行，共享性就没有了意义
                需要共享访问硬盘资源（共享性）如果失去了共享性，QQ和微信就不可以同时访问磁盘，就无法实现同时发送文件，也就无法实现并发
                并发性和共享性二者互为存在条件
        虚拟性
          概念
            把一个物体上的实体变为若干个逻辑对应物。物理实体（实体）是实际存在的，而逻辑上是用户感受的
          类型
            虚拟存储技术（空分复用技术）
              实际只有12GB，在用户看来远远大于12GB
            虚拟处理器技术
              微观上处理机在各个微小的时间段内交替为各个进程服务
                单核CPU电脑中能够同时运行这么多个程序
        异步性
          概念
            在多道程序环境下，允许多个程序并发执行，但是由于资源有限，进程的执行不是一贯到底的，以不可预知的速度向前推进。
经典特征：走走停停，主要就是有操作系统这个中介，你必须等操作系统的反馈才可以继续进行，这个等待时间就是不可预测的
          联系
            如果失去并发性，系统只可以串行运行各个程序，各个程序执行就会一串到底。只有系统有了并发性，才会有异步性
      运行过程
    线程、进程的概念，程序、线程、进程的区别（p64部分）和联系；
      程序
        概念
          只是一组指令的有序集合
      进程
        概念
          进程是程序的执行过程，是系统进行资源分配和调度的一个独立单位
        特征
          动态性
            进程的实质就是程序的一次执行过程，进程是动态产生的，动态消亡的
          并发性
            任何进程都和其他进程一起并发执行
          独立性
            进程是一个独立运行的基本单位，同时也是系统分配资源和调度的基本单位
          异步性
            由于进程之间的相互制约，使得进程具有执行的间断性，即进程按各自独立的、不可预知的速度向前推进
      线程
        概念
          进程的一个实体,是CPU调度和分派的基本单位，线程也就是”轻量级的进程“线程是一个基本的CPU执行单元，也是程序执行流的最小单位
      程序、进程、线程的联系与区别（大概率简答题，估计）
        划分尺度：划分尺度:线程更小，所以多线程程序并发性更高
        资源分配：进程是资源分配的基本单位，同一进程内多个线程共享其资源，而线程可以说是几乎不拥有资源，它仅仅有那么一点点必不可少的资源只是为了确保本身能够独立运行
        地址空间：进程拥有独立的地址空间，同一进程内多个线程共享其资源
        处理器调度：线程是处理器调度的基本单位
        一个程序至少有一个进程,一个进程至少有一个线程.
        同一进程中的不同线程之间的独立性要比不同进程之间的独立性低得多
        进程创建的系统开销远远大于线程的系统开销，30倍左右，进程的切换代价远大于线程的
        程序的本身没有任何运行的含义，它只是一个静态的实体。而进程则不同，它是程序在某个数据集上的执行。进程是一个动态的实体，它有自己的生命周期。反映了一个程序在一定的数据集上运行的全部动态过程
        进程和程序并不是一一对应的，一个程序执行在不同的数据集上就成为不同的进程，可以用进程控制块来唯一地标识每个进程。而这一点正是程序无法做到的，由于程序没有和数据产生直接的联系，即使是执行不同的数据的程序，他们的指令的集合依然是一样的，所以无法唯一地标识出这些运行于不同数据集上的程序。
        进程还具有并发性和交往性，这也与程序的封闭性不同
      进程PCB
    进程的三个基本状态以及各个状态的特征以及转换过程！！！
      就绪态
        进程已经具备了运行的条件，只等待系统分配 CPU 资源就能运行。
      执行态
        进程正在 CPU 上执行其指令。
      阻塞态
        进程由于等待某个事件（如 I/O 操作完成、等待资源等）而暂时无法继续执行。
      状态转换
        就绪态到运行态
          当系统分配 CPU 给就绪态的进程时，进程从就绪态转换为运行态
        运行态到就绪态
          当分配给进程的 CPU 时间片用完，或者有更高优先级的进程进入就绪态时，当前运行的进程会从运行态转换回就绪态
        运行态到阻塞态
          如果进程在运行过程中需要等待某个事件发生，例如等待 I/O 完成，它会从运行态转换为阻塞态
        阻塞态到就绪态
          当进程等待的事件完成，进程就会从阻塞态转换为就绪态，等待系统再次分配 CPU 资源
    处理机三层调度的概念以及对象！！！
      高级调度
        根据某种算法，选择外存上的后备队列中的几个作业放入内存，并为之创建进程，分配资源。然后将其放入就绪队列
      中级调度
        将暂时无法运行的进程调至外存等待（挂起状态）。当这些进程又具备运行条件，且内存有空余时，通过中级调度将这些进程重新调入内存，并且修改状态为就绪状态
      低级调度
        根据某种算法，从就绪队列中选择某些进程分配处理机资源
    进程调度算法
      先来先服务（FCFS）！！！
        优点
          易于理解并且便于在程序中运用
        缺点
          属于不可剥夺算法，从表面上看，它对所有作业都是公平的，但若一个长作业先到达系统，就会使后面的许多短作业等待很长时间
        特点
          算法简单，但效率低；
对长作业比较有利，但对短作业不利
      最短作业优先（SJF）！！！
        优点
        缺点
          该算法对长作业不利，有可能会导致长作业长期不被调度从而出现“饥饿”现象
          完全未考虑作业的紧迫程度，因而不能保证紧迫性作业会被及时处理
          由于作业的长短只是根据用户所提供的估计执行时间而定的，而用户有可能会有意或无意的缩短其作业的估计运行时间，致使该算法不一定能真正做到短作业优先调度
        特点
          SJF调度算法的平均等待时间、平均周转时间最少
      最短剩余时间优先！！！
        特点
          当一个新的作业到达时，其整个时间同当前进程的剩余时间作比较。如果新的进程比当前运行进程需要更少的时间，当前进程就被挂起，而运行新的进程。这种方式可以使新的短作业获得良好的服务
      高响应比优先调度算法！！！
        概念
          对FCFS调度算法和SJF调度算法的一种综合平衡，同时考虑了每个作业的等待时间很孤寂的运行时间。在每次进行作业调度时，先计算后备作业队列中每个作业的响应比，从中选出相应比最高的作业投入运行
          响应比是指作业等待时间与运行比值
        优缺点
          短作业与先后次序的兼顾，且不会使长作业长期得不到服务；
响应比计算系统开销，增加系统开销
      时间片轮转调度算法！！！
        概念
          选择就绪队列中的第一个进程，但仅能运行一个时间片
          轮转调度是一种最古老、最简单、最公平且使用最广的算法。每个进程被分配一个时间段，称为时间片（quantum），即允许该进程在该时间段中运行。如果在时间片结束时该进程还在运行，则将剥夺CPU并分配给另一个进程。如果该进程在时间片结束前阻塞或结束，则CPU立即进行切换
        优点
          兼顾长短作业
        缺点
          平均等待时间较长，上下文切换较费时
      优先级调度算法！！！
        概念
          选择优先级别最高的。根据新的更高优先级进程能否抢占正在执行的进程，可将该调度算法分为非剥夺式优先级调度算法与剥夺式优先级调度算法。根据进程创建后其优先级是否可以改变，可以将进程优先级分为静态优先级与动态优先级。其中，动态调整优先级的主要依据有进程占有CPU时间的长短、进程对资源的要求、用户要求
        静态
          优点
            简单易行、系统开销小
          缺点
            不太灵活，很可能出现低优先级的作业(进程)，长期得不到调度而等待的情况
        动态
          优点
            使相应的优先级调度算法比较灵活、科学，可防止有些进程一直得不到调度，也可防止有些进程长期垄断处理机
          缺点
            花费相当多的执行程序时间，因而花费的系统开销比较大
    PCB的4类信息！！！
      进程标识符
        用于唯一标志一个进程
      处理机状态
        由处理机各种寄存器中的内容组成
      进程调度信息
        进程状态
        进程优先级
        进程调度所需要的其他信息
        事件
          进程由执行状态转为阻塞状态所等待发生的事件（阻塞原因）
      进程控制信息
        进程控制必要信息
    死锁的定义、必要条件、原因、预防（P95,P93~94）
      概念
        两个或两个以上的进程（线程）在运行过程中因争夺资源而造成的一种僵局（Deadly-Embrace [ɪm'breɪs]拥抱) ，若无外力作用，这些进程（线程）都将无法向前推进
      原因！！！
        竞争不可抢占资源引起死锁
        竞争可消耗资源引起死锁
        进程推进顺序不当引起死锁
        信号量使用不当也会造成死锁
      条件！！！
        互斥条件
        不可剥夺条件
        请求与保持条件
        循环等待条件
      预防！！！
        破坏“互斥”条件（NO）
        破坏“请求和保持”条件
          需要做到一个进程在请求资源的时候不能持有不可抢占资源
        破坏“不可抢占”条件
          一个已经保持有不可抢占资源的进程提出新的资源请求而不能被满足时，它必须释放已经保持的所有资源
        破坏“循环等待”条件
          对系统所有资源类型进行线性排序并赋予它们不同的序号，规定每个进程必须按照序号递增的顺序请求资源，当且仅当F(Rj)>F(Ri)的时候，进程才可以请求资源Rj
      避免
        银行家算法
      注意
        只有对不可抢占资源的竞争 才可能产生死锁，对可抢占资源的竞争是不会引起死锁的
      例子
    进程同步、互斥、临界区、临界资源(理解)
      进程同步
        同步亦称直接制约关系
指为完成某种任务而建立的两个或多个进程，这些进程因为需要在某些位置上协调它们的工作次序而等待、传递信息所产生的制约关系。进程间的直接制约关系就是源于它们之间的相互合作
      进程互斥
        互斥亦称间接制约关系
当一个进程进入临界区使用临界资源时，另一个进程必须等待, 当占用临界资源的进程退出临界区后，另一进程才允许去访问此临界资源
间接制约关系。当一个进程进入临界区使用临界资源时，另一个进程必须等待, 当占用临界资源的进程退出临界区后，另一进程才允许去访问此临界资源
      临界资源（！！！）
        多个进程可以共享系统中的各种资源，但其中许多资源一次只能为一个进程所使用，我们把一次仅允许一个进程使用的资源称为临界资源。许多物理设备都属于临界资源，如打印机等。此外，还有许多变量、数据等都可以被若干进程共享
      临界区（！！！）
        对临界资源的访问，必须互斥地进行，在每个进程中，访问临界资源的那段代码称为临界区
      应用
        生产者-消费者问题（！！！）
          生产者生成数据放入缓冲区，而消费者从缓冲区取出数据。同步机制确保缓冲区不会溢出（生产者等待），同时也不会从空缓冲区中取出数据（消费者等待）
        哲学家进餐问题（！！！）
          筷子是共享资源；
每个哲学家进程都需要获取左右两边的筷子才能进餐，而同一时刻只能有一个哲学家进程拥有某根筷子，这体现了互斥；
哲学家进程获取筷子的动作需要同步协调，若一个哲学家获取到一根筷子，而另一哲学家也试图获取同一根筷子，那么后者应等待前者释放，这就是进程同步；
所有哲学家都同时获取左边的筷子而导致都无法获取右边的筷子时，就会发生死锁，即所有进程都在等待对方释放资源而无法继续执行
        读者-写者问题（！！！）
          当多个进程需要读取或写入同一数据文件时，需要同步机制来防止写入冲突。互斥机制确保在写入时没有其他进程读取或写入，而同步机制允许多个读者同时读取
      计算题（伪代码类题型100%考）
        ......
      4种信号量机制（稍微了解一下，考的概率未知）
        整型信号量
        记录型信号量
        AND型信号量
        信号量集
    虚拟存储器
      依据
        程序的局部性原理
      逻辑上扩充内存容量的一种手段
      实现方式
        请求分页
        请求分段
        请求段页式
    虚拟存储器页面置换算法
      最佳页面置换算法（OPT）
      先进先出页面置换算法（FIFO）
      最近最久未使用置换算法（LRU）
      最少使用置换算法（LFU）
      Clock页面置换算法（简单型）
      Clock页面置换算法（改进型）
    抖动现象！！！
      根本原因
        在系统中运行的进程太多，导致分配给各个进程的物理块太少了，不能满足进程正确运行的基本要求，致使每个进程出现缺页，必须请求系统将所缺之页调入内存
    通道（I/O专用处理机）、SPOOLING系统及其案例的概念
      通道
        概念
          可以控制外围设备的数据传输，而不需要CPU的直接干预。这使得CPU可以继续执行其他任务，从而提高系统的整体效率
        案例
          磁盘I/O通道
            通道可以控制磁盘的数据读写，允许多个磁盘操作同时进行，而不需要CPU的直接控制
      SPOOKING系统
        概念
          是一种用于提高I/O操作效率的技术，特别是在打印操作中。SPOOLING系统通过将数据预先存储在磁盘上的一个缓冲区（称为SPOOL），然后由专门的系统进程（通常是守护进程）管理这些数据的输出，从而允许多个作业同时进行I/O操作。
        案例
          打印机SPOOLING
    I/O设备的四种控制方式！！！
      轮询可编程I/O方式
      中断的可编程I/O方式
      直接存储器访问方式
      I/O通道方式
    磁盘的结构（看个图即可）
      簇
      扇面
      扇区
      磁道
    磁盘缓存（内存）??????
    磁盘调度算法（会用就ok）
      FCFS
      SSTF
      SCAN
      CSCAN
    位示图(p308 6)
    文件系统
      概念
        是操作系统用于有效地存储、组织和访问磁盘上的数据的一种系统。它定义了数据保存在存储设备上的方式和结构
    文件控制块（PCB）
      概念
        当任何一个文件存储在本地后，会为了方便后续读取管理，而为每个文件建立专门的用以收集必要属性信息的数据结构
      按名存取
        是一种文件访问方式，其中文件可以通过它们的名称进行访问，而不是通过物理存储位置进行访问
    多处理机系统的相关概念！！！
      多处理机系统是采用并行技术零多个单CPU同时运行，是总体的计算能力比但CPU计算机系统强大得多
多处理机系统可以提高计算能力、增加吞吐量，并允许更复杂的并行处理，解决CPU的时钟频率问题，提高系统可靠性
      类型
        紧密耦合多处理机系统
        松散耦合多处理机系统
        对称多处理机系统
        非对称多处理机系统
    云计算!!!
      是分布式计算、网络计算、并行计算、效用计算、网络存储技术、虚拟存储技术、虚拟化技术、负载均衡等传统计算机技术和网络技术发展融合的产物
    分页存储管理：页式存储、段式存储两种管理方式的原理方式的原理、地址结构、地址转换过程以及方法（P155）
逻辑地址于物理地址之间转换
地址结构（页号占多少位，【分类多少页，如32页占5位】，页内地址）
  运行态变阻塞态
  因何事阻塞，就应因有何事唤醒
  阻塞态变就绪态
  运行态->就绪态
就绪态->运行态
  有的系统只允许进程主动放弃处理机
  n用户及线程映射到m个内核级线程(n>=m)。每个用户进程对应m个内核级线程