2020-09-16

操作系统

概览

  • 操作系统定义:管理计算机硬件和软件资源、提供交互的**计算机程序 **Android、ios WIndows、Linux

  • 作用:管理内存、资源供需、输入输出设备,

  • 提供交互界面(统一各种设备的操作界面)

    基本功能:处理器资源、存储器资源、IO设备资源、文件资源

    统一管理,对计算机的抽象(用户无需面向硬件编程)、提供用户与及计算机之间的接口

  • 相关概念

    • 并发性:
    • 共享性:操作系统资源供多个并发程序共同使用
      • 互斥共享:被程序A占用,如打印机
      • 同时访问:资源在同一时间内可被并发访问
    • 虚拟性:物理实体->逻辑实体
      • 时分复用技术:不同程序并发使用资源、多个程序分时复用技术
      • 空分复用技术:
        • 虚拟磁盘技术:实现虚拟磁盘 物理磁盘->CDEF逻辑盘)
        • 虚拟内存计数:逻辑上扩大程序的存储容量
    • 异步性:进程使用资源时可能要等待或放弃,进程走走停停的形式推进,进程执行时间不可预估(不知谁抢到资源,等多久,要多久)

进程

  • 进程作用:没有OS之前计算机只能运行一道程序,配置OS引入多道程序的概念(隔离资源提高运行效率)

    • 资源分配调度的基本单位、保障程序独立、提升资源利用率
  • 进程实体:

    • 主存中的进程形态:标识符、状态、优先级、程序计数器、内存指针、上下文数据(执行时处理器存储的数据)、IO状态信息(运行时间)、记账信息(使用处理器时间、时钟数总和等)
    • 进程控制块(PCB):描述、控制进程的通用数据结构(进程独立运行的基本单位),内存中PCB区域
    • 一进程 对应 多线程,操作系统运行 的最小单位
  • 进程五状态

    • 就绪状态:资源(PCB等)够了就差CPU就绪队列
    • 执行状态:获得CPU(时间片用完->就绪)
    • 阻塞状态:设备不就绪,放弃CPU,阻塞队列
    • 创建状态:拥有PCB但其他资源未就绪
    • 终止状态:系统清理进程,归还CPU
  • 进程同步

    • 作用:在多进程竞争资源间协调资源使用次序

    • 同步原则:临界资源指共享但是又不能被多个线程同时访问的资源

      空闲让进、忙则等待、有限等待、让权等待
      
  • 线程同步

  • Linux进程管理

    • 进程类型:

    • 前台进程(具有操作终端shell?、可交互)

    • 后台进程(正在运行也不会占用终端shell,优先级比前台进程低)

      守护进程daemon:特殊后台进程,很多在系统启动就启动直到系统关闭,通常以d结尾(httpd,mysqld,sshd…)

  • 进程标记:唯一标识,非负整数,操作系统提供fork函数创建进程(父子进程,在线程A中创建进程B)

    ID为0的是idle进程,系统创建的第一个进程,1位init进程完成系统初始化(是所有进程的祖先进程)

  • 进程状态:R(正运行)、S(Sleep)、D(IO等待睡眠状态)、T(暂停)、Z(退出状态或僵尸进程),ps命令查看进程状态

  • 操作命令

    ps命令:
    	ps -aux打印进程详细信息
    	ps -u root 查看用户进程
    	ps -aux | grep = 'python3'
    	ps -ef --forest进程树
    	ps -aux --sort ..
    top:产看系统内进程的状态
    	Mem、free 、use、cache、%CPU
    	
    kill:给进程发送信号,退出进程
    	kill-9 62016 无条件停止62016进程(9信号)
    

作业管理

  • 进程调度(决策哪个进程使用CPU,赶走旧进程,准备新进程)

    • **(未理解)**三机制

      1 就绪队列的排队机制
      2 选择运行进程的委派机制(一定策略选择就绪进程)
      3 新老进程上下文切换机制(从CPU的Cache中移出,保存老进程上下文,放入新进程上下文)
      
    • 调度方式

      • 非抢占式调度:一旦运行直到运行完,不公平,用于专用系统
      • 抢占式调度:允许一定策略暂停进程,相对公平,用于通用系统(我们日常的计算机)
    • 调度算法

      • 先来先服务:按就绪队列,先来先运行
      • 短进程优先调度:不利于长作业进程
      • 高优先权先调度:使紧迫任务尽快运行
      • 时间片轮转调度:相对公平的算法,先来先服务但是只分配一个时间片执行(不能保证及时响应用户)
    • 死锁:竞争资源阻塞,无外力作用无法推进进程

      • 产生:

        1、进程调度顺序不当

        2、竞争资源,等待资源而自身不释放资源,本质是资源不够

      • 产生条件及相应破坏处理

        互斥条件:排他性使用
        	
        请求保持条件:不释放自己资源又请求新资源
        	//规定一次性请求所有资源才执行
        不可剥夺条件:资源只能自己释放,其他人不能剥夺
        	//请求新资源不得就必须放弃已有资源
        环路等待条件:形成进程-资源环形链, (我理解为保持资源1,请求资源2->保持2,请求3->保持3,请求1//可用资源线性排序,申请要递增申请 A->B->C,想申请C必须先请求到A、B
        
      • 处理

        • 预防死锁方法
        • 银行家算法:可分配资源满足进程所有请求才分配

存储管理

解决的问题:确保内存调度满足数据处理、程序调用、归还等调度

  • 内存分配的过程

    • 单一连续分配:过时,单用户单进程

    • 固定分区分配:内存空间划为多个分区(每分区只供一个程序使用,以支持多程序运行)

    • 动态分区分配:按进程实际需要动态分区分配:空闲表数据结构(标志分区使用情况)、空闲列(用链表存储,连续的空闲分区看做一个结点)

      1、首次适应算法:从空闲列头部开始按顺序查找适合的内存区,问题是头部地址不断被分配
      	循环适应算法改进,每次从上次检索点继续检索
      2、空闲链表区从小到大排序,可以快速找到合适大小的空闲区
      3、快速适应算法:多个空闲区链表存储各种容量的空闲区
      
      
  • 内存回收过程:根据空闲区和回收区的位置关系考虑节点的合并问题

  • 段页式存储管理

    完成的工作:将进程的存储空间映射到物理空间

    • 页式存储管理

      ●字块:相对物理设备的定义
      ●页面:相对逻辑空间的定义
      
      • 进程逻辑空间->等分的若干大小页面?->按页面大小,将物理内存内存空间分块

        以页面为单位存储进程空间

      • 内存碎片:进程页面大小过大难分配,过小(<空闲分区结点)多出来内存碎片

        页面大小 512B~8K

      • 页表:记录进程逻辑空间物理空间的映射, (页面,字块)

      • **?**页地址 = 页号、页内偏移

      • 多级页表:根页表+二级页表(其中字块才是进程内存),进程只加载页表,发现没有对应二级才加载,按需取页表

        解决的问题:页表项过多1M个(26^20),每个进程就要占用1M个页表项的空间

    • 段式存储管理

      • 解决问题:页式存储管理中,若有一段连续的逻辑分布在多个页面中,将大大降低执行效率
      • 实现:进程逻辑空间划分成若干段**(非等分)**,段的长度由连续逻辑的长度决定(如Main和子程序不同长度)
      • 段表 = (段号,基址,段长)
      • **?**段地址 = 段号,段内偏移
    • 对比页式与段式

      ◆ 页是物理单位,段是逻辑单位
      ◆ 分页是为了合理利用空间,分段是满足用户要求
      ◆ 页大小由硬件固定,段长度可动态变化
      ◆ 页表信息是一维的,段表信息是二维的
      
    • 段页式存储管理

      • 逻辑空间分成若干段(按段式管理),段内空间等分成若干页(按页式管理)

      • 段页地址 = 段号+ 段内页号+ 页内地址

      段页式管理

  • 虚拟内存

    • 解决的问题:(使得多道程序运行和大程序运行成为现实)

      • 进程实际需要的内存>超过物理内存
      • 物理内存稀缺而不能无限增加
    • 实现:程序使用的内存划分(当前使用+不使用),暂时不使用的内存->放置在辅存(存入磁盘暂时保管),空出物理内存给其他进程使用

    • 程序的局部性原理

      指CPU访问存储器时(存取指令/存取数据),所访问的存储单元都趋于聚集在一个较小的连续区域中

      • 解决的问题:程序的页非常大,存在辅存中,而想要快速运行必修存入内存,而内存很小

        运行程序时,无需将全部页装入内存,装载部分即可

    • **(未理解)**虚拟内存的置换算法、高速缓存、主存、辅存

  • Linux的存储管理

    • Buddy内存管理算法

      页内碎片(已被分但有多余的部分)与页外碎片(由于大小而无法分配的内存空闲块)

      • 内存分配原则:所需空间向上取整为2的幂大小,如70k->128k

      • 伙伴系统:连续内存的“伙伴”是相邻的另一片大小一样的连续内存

      • 分配100k内存的过程

        1、一次检索有没有128、256、512k、1M的内存,到1M发现有,分配给它并分割未用的内存为512、256、128k

        2、回收时,分配的内存伙伴在空闲链表上->移除伙伴,合并

      • 效率的原理:基于计算机处理二进制的优势具有极高的效率

        **(未理解??)**主要是为了解决内存外碎片,将内碎片问题转化为外碎片问题

    • Linux交换空间(Swap)

    磁盘的一个分区, Linux物理内存满时,会把一些内存交换至Swap空间

    • 应用:

      ◆ 冷启动内存依赖(大型应用程序启动需要大量的内存,后续很少再使用)
      ◆ 系统睡眠依赖(系统进入睡眠将所有系统数据存入swap中方便下次系统更快启动)
      ◆ 大进程空间依赖(有些进程确实需要很大的内存空间,但物理内存不足)
      
    • Swap空间与虚拟内存的对比

      • 相同点:存在于磁盘、两者都用于与主存发生置换

      • 不同:Swap空间是操作系统概念,解决系统物理内存不足问题

        虚拟内存是进程概念,虚拟内存解决进程物理内存不足问题

  • 文件管理

    • 文件的逻辑结构:
      • 有结构文件(文本、媒体文件)

        定长记录存储文件格式、文件描述等结构化数据项(PNG文件标记、文件结束标记) + 可变长记录存储文件具体内容(PNG数据块)

      • 无结构文件(二进制文件、链接库),也称流式文件

        内容长度以字节为单位,如exe、dll、so文件

      • 顺序文件

      定义:顺序存放在存储介质中的文件(如磁带的存储特性使得磁带文件只能存储顺序文件)

      特点:是所有逻辑文件当中存储效率最高的(因为只需按顺序读),但是增删改没有效率

      • 索引文件

        • 解决的问题:可变长文件不适合使用顺序文件格式存储
        • **(未理解)**实现:配合索引表完成存储,键值对(索引,逻辑地址)
    • 辅存的存储空间分配
      • 连续分配 :分配连续扇区,读取速度快,缺点:必须有足够容量的连续空间才能存储

      • 链接分配 :

        • 隐式分配:下一个链接指向存储在当前盘块内,顺序访问块,

          缺点:随机访问效率低,可靠性差,任何一个链接出问题都影响整个文件

        • 显式分配(FAT文件系统,File Allocation Table):

          FAT表(物理盘块,下一盘块)记录磁盘块的链接关系,保证了可靠性

          缺点:不支持高效的直接存储(FAT记录项多), 检索时FAT表占用较大的存储空间(需要将整个FAT加载到内存,索引文件解决此问题)

      • 索引分配

        把文件的所有盘块集中存储到某一盘(索引),只需加载索引进内存即可读取文件

      • 辅存的存储空间分配

        空闲表 :分配、回收过程与内存类似(适应算法、循环适应算法等)

        空闲链接:

        位示图:使用0/1比特位代表盘块空闲与否,优点:占用空间很小、维护简单、查找空闲盘区快

    • 目录管理:

      目录树,文件有唯一路径

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值