Coursera 北京大学 操作系统原理 笔记

Operating Systems

进程(Process)和线程(Thread)

  • 进程是系统进行资源分配和调度的独立单位,每个进程都有独立的地址空间

  • 进程控制块/进程描述符 Process Control Block:操作系统管理进程的一个专门数据结构,记录进程的各种属性,描述其动态变化过程。进程与PCB一一对应。进程表:所有进程的PCB集合。PCB包含:

    • 进程描述信息:标识符(process ID)、进程名、用户标识符、进程组关系

    • 进程控制信息:状态、优先级、入口地址、磁盘地址...

    • 资源情况

    • CPU现场信息:指针、寄存器值...

  • 进程的三种状态:运行态:占有CPU并运行、就绪:具备运行条件但是无CPU资源、等待(阻塞):等待某一事件而暂时不能运行,不能直接由等待到运行

  • 进程控制:

    • 创建:分配标识符和PCB、地址空间;初始化PCB;设置相应的队列指针

    • 撤销:回收资源、撤回PCB

    • 阻塞:进程自己运行阻塞原语

  • Runtime System:用户级线程的管理,不需要内核管理

  • 核心级线程:内核进行线程管理

调度策略

  • 先来先服务(FCFS)

  • 最短作业优先(Shortest Job First)

  • 最短剩余时间优先(Shortest Remaining Time Next)(抢占式)

  • 最高响应比优先(Highest Response Ratio Next):响应比 = 1+ 等待时间/处理时间

  • 交互式系统中的调度算法:

    • 时间片轮转:类似于队列,用完时间片的进程排到队列最后

    • 虚拟轮转法:I/O型进程进入辅助队列,轮转时首先从辅助队列中选择,为空时从就绪队列中选

    • 最高优先级调度算法:系统进程高于用户进程,前台进程高于后台进程

    • 多级反馈队列调度算法:设置多个就绪队列,第一个优先级最高,不同队列时间片不同,第一个时间片最小

  • 优先级反转问题:高优先级的进程等待被一个低优先级进程占用的资源

调度算法

同步机制

  • 进程互斥:各进程需要共享资源,而这些资源需要排他性使用。这样的资源叫做临界资源/互斥资源/共享变量:一次只能给一个进程使用

  • 临界区:各个进程中对临界资源进行操作的程序片段

  • 进程互斥的软件解;硬件解:开关中断(不能用于多处理器)/测试并加锁(寄存器是否为0)/交换指令(交换寄存器和锁变量的值)

  • 进程同步:某个进程需要另一个进程提供的消息,获得消息之前进入阻塞态,消息到达之后被唤醒进入就绪态;

  • 生产者/消费者问题(有界缓冲问题):生产者向缓冲区送数据,消费者从缓冲区取数据,不能同时对缓冲区操作。存在问题:缓冲区为空或为满;避免忙等待:睡眠/唤醒(生产者<->消费者)

  • 信号量(用于信号同步):操作:初始化、P、V操作;P:信号量-1,检测是否小于0,小于则进入阻塞状态;V:信号量+1,若小于等于0,则从队列中唤醒一个等待的进程进入就绪态

  • 信号量解决生产者/消费者问题:消费者执行:P(full),V(empty);生产者执行:P(empty),V(full);empty:空缓冲区个数

  • 读者写者问题:只读和只写数据区的数据,只允许多个读者同时操作。只需要第一个读者做P(w),最后一个读者做V(w)

  • 管程monitor(不适用于多处理器情况):互斥进入,互斥性由编译器保证;管程中设置条件变量及等待/唤醒操作实现同步,可以让一个线程或进程先在条件变量上等待(先释放管程使用权)。只能通过管程提供的某个过程才能访问管程中的资源

  • HOARE管程:若P进程唤醒了Q进程,则Q进程先执行,P在管程中的紧急等待队列中等待。当一个进程试图进入管程时,在入口等待队列等待。wait操作:执行wait操作的进程进入条件变量链末尾,唤醒紧急等待队列或者入口队列中的进程;signal操作:唤醒条件变量c链中的进程,自己进入紧急等待队列,若c链为空,则继续执行

  • MESA管程:将HOARE中的signal换成了notify(或者broadcast通知所有满足条件的),进行通知而不是立马交换管程的使用权,在合适的时候,条件队列首位的进程可以进入,进入之前必须用while检查条件是否合适。优点:没有额外的进程切换

  • PTHREAD中的同步机制:互斥量保护临界区,条件变量实现同步

  • 进程间通信IPC:

    • 信号量、管程

    • 消息传递 send/receive:发送进程将消息(消息头,消息体)发送到操作系统空间中设置的消息缓冲区(陷入内核,复制消息),接受队列的PCB中消息队列的指针指向消息缓冲区中消息所在位置

    • 共享内存:两个进程分别有自己的地址空间。在物理内存中建立共享内存,将该共享内存空间映射到两个进程的地址空间。读写数据时在自己的地址空间中写或读,由于有映射,所以相当于写到了共享内存中

    • 管道PIPE:利用某个传输介质(内存或文件),连接两个相互通信的进程。先进先出,字符流方式读写。必须提供协调能力:判断对方进程是否存在/同步/互斥

    • 套接字/远程过程调用:网络/分布式系统

存储模型

  • 地址重定位(Relocation)/地址映射/地址转换;不能用逻辑地址在物理内存中读取程序信息,逻辑地址首地址为0,其余地址都相对于首地址编址;物理地址可直接寻址。地址重定位:将程序中的逻辑地址转换为可以直接寻址的物理地址

  • 静态重定位:由软件完成,程序加载到内存时,一次性实现逻辑到物理地址的转换

  • 动态重定位:在进程执行过程中,逐条执行指令时进行地址变换,需要硬件支持(内存管理单元)

  • 物理内存管理:等长划分(位图,空闲/占用),不等长划分(空闲区表/已分配区表)

  • 内存分配算法:首次适配first fit:在空闲区表中找第一个满足进程要求的空闲区;下次适配next fit:从上次找到的空闲区开始往下找;最佳适配best fit:整个空闲区表搜索,找到满足要求的最小空闲区;最差适配...;

  • 内存回收算法:归还后合并空闲区,修改空闲区表,情况:上/下相邻,上下都相邻/都不相邻

  • 伙伴系统(Linux内存分配算法):内存按2的幂划分,组成若干块,组成链表,在该链表中找满足要求的空闲块。匹配进程要求大小时就比较在2的哪次方之间,如果块太大就划分一半继续比较;释放之后,小的可以结合成大的(都是2的次方)

  • 内存管理方案(装载:进程)

    • 单一连续区:一段时间只有一个进程在内存

    • 固定分区:把内存分为若干固定的区域,大小可不同,每个分区只能装一个进程

    • 可变分区:根据进程需要,分割出一定空间分配给进程,剩余部分成为空闲区域;缺点:产生很小的不易利用的空闲区,成为外碎片,利用率下降;解决方案:紧缩技术:在内存移动程序,将小的空闲区合并成大的空闲区

  • 以上三种方案都是进程进入内存的连续区域,下面三种都是进程进入若干个不连续的区域,地址转换都需要硬件支持

    • 页式存储:用户空间划分为大小相等的部分称为页,内存空间划分为同样大小的区域称为页框,分配时以页为单位,按进程需要的页数分配,逻辑上相邻的页物理上不一定相邻。从0开始编号。逻辑地址:页号+页内地址(偏移)。通过数据结构页表记录了逻辑页号对应的物理的页框号,每个进程一个页表,放在内存,页表起始地址在PCB/寄存器中。内碎片

    • 段式存储:用户进程地址空间按照自身逻辑关系划分为若干个程序段,内存空间被动态划分为长度不同的区域,分配时以段为单位,每段在内存中占据连续空间,各段可以不相邻。逻辑地址:段号+段内地址。段表:段长、段地址

    • 段页式存储:用户进程先按段划分,段内再按页划分,内存划分和分配按页。

  • 覆盖技术Overlaying:程序大小超过物理内存总和:程序运行时,不同部分在内存中相互替代,需要在编程时声明覆盖结构

  • 交换技术Swapping:系统将内存中某些进程暂时移动到磁盘上,再把外存中某些进程换进内存

存储模型(2)--虚拟存储技术

  • 虚拟存储技术:进程运行时,将一部分装入内存,当需要执行某些指令或访问数据时,再将那些装入内存

  • 虚拟地址:虚拟内存中指令或数据的位置,可以被访问,仿佛是内存的一部分

  • 虚拟内存:内存和磁盘结合起来使用

  • 虚拟页式存储管理

    • 页表项设计:硬件实现。包含页框号、有效位(是在内存还是磁盘)、访问位(是否被访问过)、修改位(内存中是否被修改过)、保护位(只读还是可读写)

    • 页目录:页表的地址

    • 反转页表:从物理地址出发系统建立页表,记录虚拟地址与物理地址的对应

    • 快表(TLB):CPU中引入的高速缓存cache,保存正在运行的程序的页表的子集,快表中没有时再查页表

    • 页错误page fault:地址转换过程中硬件异常。缺页异常:页面还未读入内存,由操作系统执行异常处理,将该页调入内存,直接用空闲页框或者置换某个页框;页面访问违反了权限;错误的访问地址。

    • 驻留集:给每个进程多少页框:固定分配策略(进程创建时确定);可变分配策略(根据缺页率)

    • 置换问题:置换范围:局部置换(在产生缺页的进程的驻留集中选择)/全局置换(内存中所有未锁定的页框作为置换的选择);置换策略(置换哪一个页框):不能用锁定的页框

    • 清除策略:从驻留集中收回页框。最佳状态:系统中始终有一定数量的空闲页框;分页守护进程。页缓冲技术:不丢弃置换出的页,仍然在内存中,一旦进程又要访问该页,则加入驻留集中

  • 页面置换算法

    • 最佳页面置换算法OPT:置换以后不需要或者最远的将来才需要的页面

    • 先进先出FIFO:置换在内存中驻留时间最长的页面。会产生BELADY现象:分配给进程的页框增多,缺页情况也增多

    • 第二次机会算法SCR:按FIFO选择某一页面,若其访问位为1,给第二次机会,并将访问位置0

    • 时钟算法:将SCR中的队列以时钟表示而不是链表,就不用移动队列,开销小

    • 最近未使用算法NRU:检查访问位、修改位

    • 最近最少使用算法LRU:置换出未使用时间最长的一页(最后一次访问),开销大,要维护时间戳

    • 最不经常使用算法NFU:访问次数最少

    • 老化算法:计数器在加R前先右移一位,R加在最左端

    • 工作集算法:进程在一段时间内集中访问的页面称为活跃页面,为进程提供与活跃页面数相等的物理页面数。工作集:一个进程当前正在使用的页框集合。找出一个在时间T内不在工作集中的页面并置换它。通过查看R位(访问位)

  • 内存映射文件:进程通过一个系统调用将一个文件映射到虚拟地址空间,访问这个文件就像访问内存而不是通过文件操作

  • 写时复制技术:多个进程共享页框,每页都标记成写时复制

文件与文件系统

  • 文件系统:操作系统中统一管理信息资源的一种软件,管理文件的存储,检索,更新

    • 统一管理磁盘空间

    • 实现文件的按名存取,名字空间到磁盘空间的映射

    • 方便用户使用的接口

    • 提供共享、保护手段

    • 提高文件系统的性能

    • 提供与IO系统统一的接口

  • 文件结构:流式文件;记录式文件。顺序存取;随机存取

  • 物理块:信息存储分配传输的独立单位

  • 磁盘读取信息:磁头(磁盘)、磁道、扇区--传输到内存

  • 用位图反应磁盘中空间使用情况,若物理块未被使用则为1。空闲块表

磁盘地址
回收算法
  • 文件控制块FCB:保存文件属性,为管理文件设置的数据结构

  • 文件目录:文件名到文件物理地址转换,将所有文件的管理信息组织在一起。目录项可以是FCB

  • 目录结构:一级目录结构;二级;树形

  • 目录文件:文件目录以文件形式存在磁盘上

  • 顺序结构:文件信息存储在连续的物理块中

  • 链接结构:不连续的物理块中,各块之间通过指针连接

  • 新型链接结构:文件分配表FAT,所有物理块的指针集中存放在FAT中,而不是分布存在物理块末尾。文件的起始块号存放在FCB

  • 索引结构:不连续物理块。系统为每个文件建立索引表,将物理块的号存放在表中,第i个条目指向文件的第i块。索引表的位置放在FCB

文件管理

你可能感兴趣的:(Coursera 北京大学 操作系统原理 笔记)