操作系统复习

进程管理

  1. 进程的内存结构:内核空间 + 用户空间
    在使用fork()创建子进程的时候,子进程会拷贝父进程的运行环境,但是对于fork()的返回值会根据父子进程的不同而返回不同的结果。

  2. 进程状态
    a. 创建:申请一个空白的PCB(进程控制块),记录控制和管理进程的信息,然后完成资源的分配。
    b. 就绪态:在分配资源后,等待CPU的调度,存储在就绪队列中
    c. 运行态:CPU从就绪队列中选择一个进程分配时间片,进入执行状态
    d. 阻塞态:正在执行的进程由于资源的准备(如:IO,申请缓冲区等)进而从运行态进入等待,进入阻塞队列等待资源准备完成。准备结束由阻塞队列进入就绪队列,重新等待时间片的分配。
    e. 终止态:进程结束,或系统终止。

  3. PCB,进程控制块,存放进程的相关信息用于控制和管理
    a. 程序ID(PID),每一个进程包含一个PID
    b. 进程状态
    c. 优先级,获取CPU时间片的能力大小
    d. 现场保护,在进程阻塞后用来记录当前执行的状态。

进程状态的变化,进入就绪队列,阻塞队列,上下文切换都是由PCB进行控制。

  1. 用户态内核态的切换:IO读写,内存分配等硬件资源的操作,需要通过系统调用,让程序由用户态进入内核态,进而执行内核中的特权指令

用户态和内核态转换的开销:
保留用户态现场;用户态参数从用户栈进入内核栈;用户访问的鉴权;从内核态拷贝数据进入用户态;恢复现场;

CPU切换:当CPU调度时会先保存当前任务的信息/上下文(寄存器,程序计数器),然后加载新任务的上下文。
每一次系统调用相当于两次CPU的上下文切换(用户 - 内核 - 用户)

  1. 进程的上下文切换:进程的切换发生在内核态,当发生切换的时候需要先从用户态进入内核态,在内核态完成后续操作
    因此整个过程包括:用户态资源(虚拟内存,栈等),内核态的堆栈信息,寄存器等。

相比于系统调用的切换,进程切换需要同时保存用户态和内核态中的相关信息。

  1. 进程调度:先进先出FIFO, 最短作业优先SJF,最短作业时间优先STCF,时间片轮转RR; 具体的调度中还可以划分为抢占/非抢占。

  2. 管道:用于连接读写进程的一个共享文件,内存中开辟了一块固定大小的缓冲区;半双工通信,同一时间只能单向传输。进曾之间互斥访问;只有在写满的时候才可以读,读为空的时候才可以写。管道中的数据只能消费一次,因此只能有一个读进程避免数据的读错误。

  3. 死锁产生的条件:
    a. 互斥访问;
    b. 请求与保持;等待其他资源的情况下自身已经拥有的资源不会释放。
    c. 不可剥夺:进程当前未执行完成前,自身拥有的资源不可以被其他进程获取,必须主动释放。
    d. 循环等待。多个进程之间相关等待其他进程资源的释放。

  4. 死锁的解决
    a. 预防死锁,破坏死锁产生的条件之一。
    b. 避免死锁:进程按照顺序依次获取;对进程加锁设置过期时间。

内存管理

  1. 一段程序的执行需要运行在内存中,对于源程序,需要经过 编译 - 链接 - 装入 最终在内存中运行。
    其中涉及:地址转换(逻辑地址和物理地址之间的映射); 存储保护(各任务的运行时存储空间相互独立);虚存技术(利用虚拟存储技术或覆盖利用主存实现内存空间的扩容)

  2. 覆盖和交换技术:
    覆盖:程序划分为若干的段;在需要的时候加载相应的程序段
    交换:在内存紧张的情况下,将系统内存中的某些进程暂时换出到外村,选择合适的外存数据加载进内存当中。

  3. 连续内存分配:
    a. 单一连续分配:内存中仅一道程序独占用户空间
    b. 固定分区:用户内存空间划分为若干等大规模的块,每个分区只能装入一道程序;容易产生内部碎片。
    c. 动态分区:当装入程序的时候根据程序大小动态分配内存,分区大小适应运行时程序;容易产生外部碎片。

外部碎片的解决可以使用紧缩的方式。

连续动态内存分配:首次适应,最佳适应,最坏适应,临近适应(从上次匹配的结束位置继续查找)

  1. 非连续内存分配:不连续的分配到内存中的不同区域;需要额外的存储空间去记录索引。
    a. 基本分页存储:将内存空间划分为等大规模的块,每个进程也按照块进行划分。
    进程中的块成为页,内存中的成为页框;
    页和页框之间的映射关系通过页表记录(页面和快号的映射),页表需要额外的内存空间进行保存;因此,如果没页面大小过小,那么每个进程需要划分更多的页,导致页表过大,额外开销增大;如果页面过大,内存碎片更容易产生。

  2. 正常访问页表的情况下,每一次指令需要访问页表,如果页表不存在再访问内存,由于页表页记录在内存整个过程需要访存两次;因此为了提高查询效率引入了高速缓冲存储器-快表(TLB)
    引入TLB后首先查看快表中是否有目标块的副本;否则查找页表,然后确认内存中的位置,然后更新信息到快表中。

  3. 基本分段存储:分页存储从内存角度出发,提高内存的利用率;而分段从程序本身逻辑进行划分,段内连续,段之间可以不连续。每个进程通过段表记录逻辑空间和内存空间的映射关系。
    在这里插入图片描述

  4. 局部性原理
    a. 时间局部性:程序中如果某条指令后数据被访问,那么一段时间内可能再次被访问到
    b. 空间局部性:当访问某个存储单元后,其附近的存储单元也容易被访问到。

  5. 虚拟存储技术:根据局部性原理,程序装入的过程中,将可能频繁被访问的部分装入内存,暂时不需要的放入主存。如果发现内存不存在访问的目标数据,由OS中断访问主存进行信息的更换。
    虚存的特点:多次性,对换性,虚拟性(内存 + 主存)

  6. 虚存的实现:在非连续内存管理的基础上引入虚拟存储技术的思想,存在:请求分页,请求分段,请求段页式存储。

  7. 页面置换算法:当发生内存和主存数据的交换是,首先发生缺页中断,然后进行页面交换
    a. 最佳置换算法(OPT):无法被实现。通过预测最长时间不被使用或永不被使用的页面进行替换
    b. 先进先出(FIFO): 优先淘汰最早进入的页面,按照队列的顺序进行替换。
    c. 最久未被使用(LRU):选择最长时间未被访问的页面进行淘汰。

  8. 抖动:敲掉页面置换的频率,过于频繁发生缺页的现象成为抖动。

IO

  1. DMA, 直接存储器存储。在IO设备和内存之间开辟直接数据交换的通路,不需要CPU的调度。
    数据的交互传送单位是 “块”,而不是单个字节。
    数据的流向从IO设备 直接到内存或相反,释放CPU。
    在传送数据的开始和结束需要CPU的干预
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值