zoukankan      html  css  js  c++  java
  • 王道考研-操作系统学习笔记

    王道考研-操作系统学习笔记

    • 联机命令接口(交互式命令)&脱机命令接口(批处理命令接口)
    • 单道批处理程序时的监控程序是操作系统的原型,多道批处理程序时操作系统正式诞生
    • 运行机制
      • 两种指令
        • 特权指令
        • 非特权指令
      • 两种状态(用PSW 寄存器的某个标记位表示)
        • 核心态(管态)
        • 用户态(目态)
      • 两种程序
        • 应用程序
        • 内核程序
    • 中断和异常
      • 本质:在多道批处理后引入了中断机制,本质:中断发生之后需要操作系统介入,进行一些管理工作
      • 用户态-->核心态的切换是通过【中断】实现的,且中断是唯一的途径
      • 核心态-->用户态的切换是通过一个特权指令,奖PSW寄存器的标记设置为“用户态”即可
      • 中断分为两大类
        • 内中断(信号来源:CPU内部,与当前执行的指令有关,也成为异常、陷入)
          • 自愿中断(如内核系统调用)
          • 强迫中断(硬件故障,缺页。软件中断,除0)
        • 外中断(信号来源:CPU外部,与当前执行的指令五关)
          • 外设请求(IO操作完成)
          • 人工干预(用户强制中断执行)
      • int 指令(interrupt 又称为 陷入 rap访管指令,在用户态调用,立即引发内中断,处理系统调用的相关代码进入核心态)
      • CPU 每执行一条指令后就会去检查是否有中断发生
    • 进程
      • 进程由PCB(进程控制块)、程序段、数据段组成
      • 进程控制-- 实现进程各种状态的转换,通过原语实现 ,原语是被 【关中断】和【开中断】指令包含的原语代码,CPU不会被外部中断打断
      • 进程控制原语(阻塞原语和唤醒原语需要成对出现 )
        • 更新PCB中的信息
        • 将PCB 插入合适队列
        • 分配回收资源
      • 进程通信指是进程间的信息交换
        • 共享存储(必须互斥、PV操作)
          • 基于数据结构的共享,低级通信
          • 基于存储区域的共享,高级通信
        • 消息传递(以格式化的消息message为单位,通过操作系统提供的发送接收消息原语进行数据交换)
          • 直接通信,消息直接挂到接收进程的消息队列
          • 间接通信,消息要先发到中间实体
        • 管道通信
          • 半双工通信,同一个时刻只能向一个方向通信,两个管道实现全双工
          • 需要互斥,写满write 阻塞,读空read阻塞。
          • 没写满,不允许读,没读空,不允许写。
    • 线程
      • 传统的进程是执行流调度的最小单位,现在线程是CPU执行的基本单元,进一步提高了系统的并发度。
      • 进程只作为除CPU之外的系统资源的分配单元
      • 线程实现方式
        • 用户级线程,线程通过应用程序的线程库创建,在用户空间,由用户程序负责调度,操作系统看不到
        • 内核级线程,线程通过操作系统内核创建,由内核调度。在内核空间。
      • 多线程模型
        • 多对一、一对一、多对多
    • 调度机
      • 不能调度的情况:1、处理中断的过程中 2、操作系统内核临界区中不能进行调度 3、原语不能进行调度
      • 进程切换
        • 对原来运行进程的各种数据的保存
        • 对新的进程的各种数据的恢复(计数器、程序状态字、各种数据寄存器等处理机现场信息,一般保存再进程控制块中、进程控制块在队列中、常驻内存)
      • 多级反馈队列调度算法:多个队列优先级从高到低,时间片从小到大
      • 进程同步、互斥
        • 进程异步,各并发执行的进程以各自独立的、不可预知的速度向前推进,(步调不一致)
        • 进程同步,直接制约关系,协调多个多个异步进程的工作次序,使他们之间相互合作(步调一致)
        • 互斥指临界资源的访问方式(识别临界资源)
          • 代码分为:进入区、临界区、退出区、剩余区
          • 遵循原则:空闲让进、忙则等待、有限等待、让权等待
        • 进程互斥的软件实现方法
        • 进程互斥的硬件时间方法
          • 中断屏蔽方法(开/关中断指令)
            • 优点:简单、高效;缺点:不适用多处理机,只适用操作系统内核进程、不适用用户进程
          • TestAndSet(TS指令、TSL testandsetLock) 是用硬件实现的,执行过程不会被中断
          • SWAP 指令
        • 信号量实现进程互斥、同步、前驱
          • 实现互斥:
            • 分析出临界区
            • 设置互斥信号量 mutex 设置为1
              • (信号量是指操作系统中的某种资源,临界区也可以是一个资源)
            • (进程)程序代码先对互斥信号量进行P操作,
            • (进程)程序代码再对互斥信号量进行V操作
          • 实现同步(由于进程并发执行,时间片轮转、程序内顺序执行、程序间存在异步性,同一个程序的多个进程(线程)间的代码片段交替执行次序是不确定的)
            • 需要先分析什么地方需要实现同步关系(进程间代码片段1要比代码片段2先执行)
            • 设置同步信号量S,初始为0
            • 在“前操作”之后执行V(S)
            • 在“后操作”之前执行P(S)
          • 实现前驱(多级同步关系)
            • 需要为每一对前驱关系各设置一个同步变量
            • 在“前操作”之后对响应的同步变量执行V操作
            • 在“后操作”之前对响应的同步变量执行P操作
      • 内存
        • 操作系统负责内存的分配和回收
          • 连续分配
            • 固定分区分配
            • 动态分区分配 z
          • 非连续分配
            • 页框(物理块)是内存的分配和回收单位,实际物理地址还是字节,是由页号+页内偏移量计算得到的,计算机实际操作的地址仍然是字节
            • 逻辑地址和物理地址的转换
              • 计算进程内页号(逻辑页号),计算方法:地址除以页大小
              • 计算进程内页面内偏移量(页内便宜量),计算方法:地址模页大小
              • 根据页表得到实际物理块号
              • 根据物理块号(块大小可以得到物理地址)+页内偏移量得到 物理地址
            • 页表项大小的计算
            • 页表在内存中是连续存储的,数组存储而不是键值对,比如页表项是3个字节大小,逻辑0号页,对应的物理地址存在0~2 三个字节中
            • 每个进程有一个页表,页表有页号和块号组成
              • 每个页表项长度是相同的,页号是隐含的,这样通过数组就能实现页号和块号的对应,计算页表项长度的方法
            • 未运行时页表启始地址和页表长度(校验页号是否合法)是放在进程pcb中,当进程被调度时,放入ptr页表寄存器中。
            • 因为时间局部性和空间局部性引入了快表机制,又称为联想寄存器(TLB),内存中页表又称为慢表。
            • 单级页表的问题
              • 页表必须连续存放,如果页表很大,需要占用很多连续的页框
              • 没必要让整个页表常驻内存,大部分情况只需要特定的几个页表就可以
              • 多级页表的大小不能超过一个页面
            • 基本分段管理(和分页管理不同是分配的单位不一样)
              • 按照程序自身逻辑 划分为若干段,各段之间不相邻,段内地址连续,段内地址从0开始
              • 页是信息的物理单位,分页的主要目的是为了实现离散分配,提高利用率,仅仅是系统管理需要,对用户是不可见的
              • 段是信息的逻辑单位。分段的主要目的是为了更好的满足程序员的需求。一个段通常包含着一组属于一个逻辑模块的信息。分段是对用户可见的,用户编程时需要显示的给出段名
              • 页大小时固定由系统决定的,段的长度不固定。决定于用户编写的程序。分页是一维的,分段是二维的
              • 分段更容易实现信息的共享和保护(因为分段是按照代码逻辑划分的,可控制)
            • 段页式内存管理
              • 一个程序有一个段表,每个段项对应一个页表。一个进程可能有多个页表
        • 逻辑上对内存空间进行扩充(虚拟内存)
          • 覆盖、交换
          • 虚拟内存技术
            • 传统的缺点:一次性装入内存、一直驻留内存
            • 请求调页
            • 页换出
        • 实现逻辑地址和物理地址的转换
        • 内存保护
        • LRU (最近最少使用算法)
          • 从当前的访问位置,向前追溯访问历史,最久没被用到的元素,被淘汰掉。
        • 驻留集:分配给进程的物理块集合,常驻内存
      • 文件管理
        • 在很多操作系统中磁盘块的大小设置和内存页大小一致,便于内存和外存间的数据交换
        • 外存的管理方式和内存思路一样,分块、逻辑地址和物理地址及映射表
        • FAT (显式连接文件分配表)整个磁盘仅仅有一张,索引文件每个文件都有一个分配表
        • 平时使用的个人电脑是把一个磁盘划分为多个逻辑卷,在大型操作系统中,也可以由多个磁盘组成一个逻辑卷
        • Unix 系统使用“成组链接法”跟踪空闲磁盘号,试用超大文件系统,由超级块记录
        • 两种打开文件表
          • 系统的打开文件表(整个操作系统只有一张),提供了打开技术器,一共被多少进程打开
          • 用户进程的打开文件表
        • 磁盘初始化
          • 低级格式化,划分扇区
          • 磁盘分区
          • 逻辑格式化(创建文件系统)
          • 自举程序(bootstrap),ROM 存放了一个很小的“自举装入程序”,完整的自举程序装在启动块中
      • IO控制方式
        • 程序控制方式(轮询:CPU干预频率高:传送单位字:IO设备--》CPU寄存器--》内存:CPU和IO 串行工作)
        • 中断驱动方式(中断,每个指令执行末尾检查中断:CPU每次IO操作之前和完成之后CPU介入,干预频率低:每次中断一个字节:IO设备--》CPU寄存器--》内存:CPU和IO并行处理,传输大量数据需要很多中断,耗费CPU)
        • DMA方式(直接内存访问:仅仅在传送一个或者多个数据块开始结束时才需要CPU干预:每次读写一个块:IO设备--》内存:CPU 和IO并行,性能进一步提高。只能读写连续块,否则也需要CPU多次干预)
        • 通道控制方式(通道是一种硬件,弱鸡版CPU,可以识别并执行一系列通道指令:每次读写完一组块数据CPU干预:IO设备-》内存:实现复杂,需要专门硬件支持)
        • 注意的问题:
          • 完成一次读写操作的流程
          • CPU干预的频率
          • 数据传送的单位
          • 数据的流向
          • 主要的缺点和优点
        • 什么是脱机技术
          • 脱离主机(CPU)的控制进行输入和输出的操作。缓解CPU和设备间的速度矛盾,实现数据的预输入和缓输出。纸带机-》外围控制-》磁带-》计算机
          • 假脱机(SPOOLING) 用软件的方式模拟脱机技术。用输入井模拟外围控制机+磁带
  • 相关阅读:
    springboot + 自定义配置文件读取
    springboot + mybatis分页插件pagehelper
    Python学习日记(三十九) Mysql数据库篇 七
    Python学习日记(三十八) Mysql数据库篇 六
    Python学习日记(三十七) Mysql数据库篇 五
    Python学习日记(三十六) Mysql数据库篇 四
    Python学习日记(三十五) Mysql数据库篇 三
    Python学习日记(三十四) Mysql数据库篇 二
    Python学习日记(三十三) Mysql数据库篇 一
    Python学习日记(三十二) hmac检验客户端的合法性和socketsever模块
  • 原文地址:https://www.cnblogs.com/wangzhen3798/p/14516056.html
Copyright © 2011-2022 走看看