OS课堂笔记

名词解释

设备驱动程序:为I/O子系统提供统一设备访问接口

系统调用:为应用程序和操作系统之间提供统一的标准接口

特权指令(privileged instruction): 能引起损害的机器指令为特权指令。如果在用户模式下试图执行特权指令,那么硬件并不执行该指令,而是认为该指令非法,并将其以陷阱的形式通知操作系统。

系统调用(system call): 操作系统内核提供一系列预定功能,通过一组称为系统调用的接口呈现给编程人员,系统调用把应用程序的请求传给内核,系统调用相应的内核函数完成所需的处理,将处理结果返回给应用程序。系统调用是内核的一部分

进程: 程序在未被CPU执行前不会做任何事,处于执行中的程序被称为进程(程序本身不是进程,程序是被动的实体,而进程是一个活动的实体)。进程需要一定的资源(CPU时间、内存、文件、I/O设备)以完成其任务

线程: 线程是CPU使用的基本单元, 它由线程ID、程序计数器、寄存器集合和栈组成。它与属于同一进程的其他线程共享代码段、数据段和其他操作系统资源。

保护: 保护是一种控制进程或用户对计算机系统资源的访问的机制。这个机制必须为强加控制提供一种规格说明方法和一种强制执行方法。

安全: 安全的主要工作是防止系统不受外部或内部攻击。比如病毒、蠕虫、拒绝服务攻击等等

虚拟机: 虚拟机的核心思想就是将一套硬件设备抽象成多套。采用CPU调度和虚拟内存的技术,制造每一个进程都有自己单独的处理器和内存的“假象”

PCB是进程存在的唯一标志。 操作系统通过PCB来感知进程的存在。

上下文切换: 将CPU切换到另一个进程需要保存当前进程的状态并恢复另一个进程的状态,这一任务称为上下文切换。

竞争条件(race condition):多个进程并发访问和操作同一数据且执行结果与访问发生的特定顺序有关

原子操作: 一个完整的没有中断的操作,要么全做要么全不做,是一种不可分的操作。

原语: 一段完成一定功能的执行期间不能被中断的程序段。

饥饿: 即无限期阻塞

管程: 管程是一种高层次的抽象构造,可以提供一种便捷且有效的进程同步机制。管程类型提供了一组由程序员定义的、在管程内互斥的操作

死锁(deadlock): 在多道程序环境下,多个进程可能竞争一定数量的资源。某个进程申请资源,如果这时资源不可用,那么该进程进入等待状态。如果申请的资源被其他等待进程所占有,那么该等待进程有可能再也无法改变其状态,称为死锁

外部碎片: 随着进程装入和移出内存,空闲内存空间被分为小片段。当所有总的可用内存之和可以满足请求,但并不连续时,这就出现了外部碎片问题。

  • 紧缩(compaction): 解决外部碎片的方法之一,移动内存内容,以便所有空闲空间合并成一整块。紧缩仅在重定位是动态并且运行时才可以采用。

内部碎片: 进程被分配的内存可能比所要的大。

第一章 介绍

interrupt

硬中断和软中断

硬中断是由中断控制器提供的,软中断是由指令直接指出,无需中断控制器

软中断(1.系统调用 2.软件错误如:2/0)

操作系统是中断驱动

Device Drivers 让设备和计算机进行相互通信的特殊接口

给os提供统一的接口,方便os设计和实现

在ubuntu或者Linux中

输出缓存1kB,如果没有遇到一定情况(如 scanf,输出’\n’,’\a’,C语句fflush(stdout),程序终止退出),只有缓存区满了才会输出

OS Structure

privileged instructions 特权指令 使用可能会产生不良后果的指令,不允许用户随便使用,只能由OS使用

Dual-mode: 1.User mode(目态) 2.kernel mode(管态)

用户要执行特权指令,将出错,然后陷入到核心态由OS处理

所有的I/O指令都是特权指令

分时OS允许多个用户以交互方式使用计算机的OS

1.interrupt&trap

2.privileged instruction特权指令:将CPU指令系统中可能对操作系统或其它程序引起损害的指令定义为特权指令

3.核心态和用户态

PSW中有个转配位,判断是否转换态

system call 系统调用 内陷到内核态

4.一般情况下,os尽量提高资源的利用率及提高运行效率,但有时也违反这一原则。(GUI和CLI)从用户角度考虑。

第二章 操作系统结构

2.1 Operating System Services

for system or for users

two inferfaces: 1.command interface 2.programming inferface

2.3 ststem calls 核心态执行

类似于软中断

os提供给应用程序的接口是系统调用

用户程序->系统调用->设备驱动->中断程序

2.5 system structure

内核小 优点:测试容易,移植性好,可扩展, 缺点:通讯负担变大,

虚拟机:提供一个虚拟层,将一套真实的硬件系统虚拟成多套硬件系统

第三章 进程

3.1process : a program in execution

program becomes process when an execetable file loaded into memory

进程的地址空间(虚拟地址空间)

PCB Process Control Block 存放进程的所有信息,是进程存在的唯一标识,os通过pcb感知进程的存在

PS: 进程的基本特征

并发性:一段时间内,多个进程轮流执行,但同时存于内存中

特征了解 不需要进一步掌握

进程的状态,状态的转换(系统通过PCB感知进程的状态)

running->waiting(阻塞状态,block )

in nachos 的代码

创建新进程的操作:(1)用户成功登录系统(2)程序执行

涉及文件名称的系统调用只有:open,create

进程切换在核心态,系统调用在用户态

系统引导时创建0号进程

父进程消亡后,子进程归于根进程(linux,Unix)

fork()系统调用来创建进程

子进程共享子进程创建前所有资源

子进程创建后与父进程是竞争关系

先继承,后分离

要么父进程与子进程并发执行,要么父进程等待某个或全部子进程执行完再执行

pid 进程号

fork()继承缓存

execls()调用后,会用path指定的新的程序进程覆盖原先的进程地址空间

wait()一般就等待第一个终止的子进程,就返回,不管其余的子进程

子进程修改从父进程继承的全局变量和数据栈的值,对父进程不影响

指针指向的地址都是相对地址,所以对于指针 子进程也是对其复制,

进程调度:

1.短期调度(cpu调度)

​ 从就绪队列中选择进程,分配CPU

2.中期调度(swapping) 如分时系统

3.长期调度(job调度)

​ 在缓存池中,选择进程载入内存同时加入就绪队列

context Switch上下文切换

当CPU切换到另一个进程时,系统必须保存旧进程的状态,并通过上下文开关为新进程加载保存的状态

system call

当键盘按Ctrl C ,陷入内核态,发出signal信号,默认处理:终止进程。

fork后,子进程也会继承父进程注册的信号处理设置

子进程继承父进程创建子进程前打开的文件描述符

进程间通信:

1.共享内存

​ 创建本进程才能访问共享地址空间(还能被其子进程访问),速度快,但需要避免冲突

2.消息传递

​ 建立消息队列,适用于交换较少数量的数据,无需避免冲突

邮箱和端口是间接通信

要点:

l进程的概念

l进程的状态、转换及其转换条件(状态转换图)

lPCB的概念及其作用

l进程的创建与撤销的相关知识(包括例题)

l几种进程间的通信方法

第四章 线程

一个进程的线程不能共享进程的栈、寄存器

优点:响应度高,资源共享,经济,多处理器体系结构的利用

用户线程和核心线程的映射

OS只能为核心线程分配CPU,且只能当每个用户线程映射到一个核心线程时才能运行

线程引入动机

线程对进程资源的共享

n线程runner不能访问main()函数中的变量int sum,x,y,因为它们属于主线程栈(栈不能共享)

多线程模型:

多对一模型:许多用户级线程映射到一个内核级线程,如果线程阻塞,整个进程都会被阻塞

一对一模型:一个用户级线程需要创建一个相应的内核线程

多对多模型

二级模型

第五章 CPU 进程调度

进程执行在CPU执行期和I/O执行期交替进行,最后以CPU执行期结束

非抢先(完整的CPU执行期)和抢先(COU执行期可能不完整)调度算法

调度发生时间:

​ 1.Switches from running to waiting state

​ 2.Switches from running to ready state

​ 3.Switches from waiting to ready state

​ 4.Terminates

从等待到就绪或从运行到就绪 可以发生抢占

调度准则:CPU使用率 、吞吐量

周转时间:结束时间-提交时间

等待时间:周转时间-运行时间

响应时间:产生第一响应时间-提交时间

批处理是非抢先式调度

调度算法:

FCFS,护航效应(很多进程等待一个大进程执行结束),CPU吞吐量小

SJF,分为抢先(SRTF)和非抢先,缺点:饥饿现象

Priority Scheduling (饥饿现象)优先级调度

1.I/O占比越多,优先级应该更高

可以用老化技术(逐渐增加在系统中等待长时间的进程的优先级)来应对饥饿现象

R(Round)R(Robin)

维护一个FCFS的队列,有一个时间片

为分时系统设计的

Multilevel Queue

Multilevel Feedback Queue

第六章 进程同步

同步:操作之间的偏序关系

互斥:同时使用一个临界资源

race condition

临界资源citical resources:在一段时间内只允许一个进程访问的资源 (互斥的访问)

临界区critical section 在程序中访问临界资源的代码

三大要求

1.互斥Mutual Exclusion

2.前进Progress

3.有限等待Bounded Waiting

原子操作:指一个操作中的所有动作要么全做,要么全不做。不可分割、不可中断

1.Peterson 算法

登记+令牌 可满足要求

2.TestAndSet 得到锁状态后上锁 硬件实现同步

3.Swap 状态互换 硬件实现同步

4.信号量

单处理机不采用这种方式,忙等

wait(),signal() 也可称为P,V操作 ,都是原子操作, 原语,无法被中断,无法被抢先

wait(S){

while(S<=0); //trst

S–; // set

}

signal(S){

S++; //unlock

}

spinlock 自旋锁

优点:进程在循环等待,不需要进行上下文切换,减少了系统开销;

缺点:是循环等待,占用cpu时间。

信号量被定义为一个结构体

typedef struct{

int value;

struct process *L; PCU队列

}semaphore;

Semaphore Implementation with no Busy waiting

使用

semaphore mutex=1

在临界区上下 wait(),signal()

同步在前互斥在后,否则可能会死锁

信号量的运用——前驱关系

在前驱图中每一个出边都设置一个信号量,初值为0

设A->B ,A结尾做signal(mutex) ,B开始做wait(mutex)

Classical Problems of Synchronization

1.Bounded-Buffer Problem

2.Readers and Writers Problem

3.Dining-Philosophers Problem

4.Sleeping Barber Problem

5.The Cigarette’s Problem

初值、信号量、执行过程

1.Bounded-Buffer Problem

生产者-消费者问题(P-C)

生产者:空,放,唤醒 满,等待

消费者: 空,等待 满,取,唤醒

交叉进行 同步问题

先同步 后互斥

哲学家吃饭问题:

防止互斥,不能成环

吸烟者问题:

设立四个进程

需要6个信号量,

A-B empty1,full1,mutex1

B-C empty2,full2,mutex2

利用信号量也可以控制执行的次数

A-B<=M-1, B-A<=N-1

设SA = M-1,SB = N-1

第七章 死锁

设备独立性:应用程序独立于具体使用的物理设备

定义:一组处于等待状态的进程,每个进程都持有其他一些进程所需资源,同时等待其他进程释放资源从而处于相互等待的状态

形成条件:

1.互斥 2.占有并等待 3.循环等待 4.非抢占

资源分配图 p213,注意申请边和分配边

无环->无死锁

死锁预防

利用死锁产生四大必要条件

占有并等待:每个进程在执行前需申请并获得所有资源

循环等待:为资源类型分配编号,按编号大小有序申请资源

非抢占:如果一个进程占有资源并申请另外一个不能立即分配的资源,那么其现已分配的资源都可被抢占

死锁避免

找到一个安全序列,让系统处于安全状态

7.5.2资源分配图算法,适用于单实例

7.5.3银行家算法,打破循环等待

死锁检测:

等待图p224:单实例状况 仅考虑进程 ,有边则等待

有环=死锁

死锁检测与恢复:

1.剥夺资源,进程回滚,checkPoint and RollBack ,可能造成某些进程被多次剥夺资源,造成饥饿现象

2.撤销进程

3.时间倒流

第八章 内存管理

进程可访问的合法地址范围:基地址寄存器和界限地址寄存器

指令与数据绑定到内存地址的情况:1.编译时生成绝对代码,2.加载时编译器生成可重定位代码 3.执行时再绑定

运行时从虚拟地址到物理地址的映射是由MMU完成的

基地址寄存器在这为重定位寄存器,逻辑地址+重定位寄存器 = 物理地址

编写

编译

链接:

​ 静态链接,

​ 动态链接

装入:

​ 绝对装入

​ 动态运行装入

内存:

​ 外碎片:未分配给进程,没有被利用

​ 内碎片:已分配个某进程,但进程未使用

内存分配方式:

固定分区,可变分区

固定分区分配:

1.分区数目、大小固定

2.每个分区每一时刻只运行一个程序

会产生内碎片

动态分区分配:

外碎片

地址映射与存储保护(界限寄存器,重定位寄存器)

分区分配策略:

best-fit(按hole大小递增排序,找到满足需求的最小的hole),worst-fit(找到最大的hole来分配),first-fit,next-fit

分区管理,无法实现内存共享,不灵活

分页Paging 将物理内存分为固定大小的块,成为帧,逻辑内存分为同样大小的块,成为页

page number页号(p位) | page offset页偏移(d位)

d:页大小

分页会产生内碎片,同时页表是一种额外开销

位向量,存放物理内存页情况

LA:(P:d)->PA:(:d)

valid位:判断页表内一项是否是该进程的合法页面

共享代码必须出现在所有进程的逻辑地址空间中的同一位置

逻辑地址空间

逻辑地址空间映射到物理地址空间

​ 地址变换、重定位、地址绑定

​ TLB(cache的思想)

存储保护

​ 设置一个valid位,判断是否地址越界,是则 track (硬件检测,软件处理)

存储共享

​ 条件1:代码要是纯码(reentrant code Or pure code 多次运行不会被改变)

​ 条件2:逻辑地址空间处于相同的页面

碎片:

​ 内碎片

8.5struct of the Page Table页表结构

Hierarchical Paging

Hashed page Tables

Inverted Page Tables

8.6 Segmentation

支持虚拟存储

虚拟地址:分段

物理地址 : 按可变分区划分

段表:

limit(段长度),base(起始地址)

存储共享

​ 条件1:代码要是纯码(reentrant code Or pure code 多次运行不会被改变)

​ 条件2:逻辑地址空间处于相同的段号内

重点:分区、分页、分段

第九章 虚拟存储

CPU Register — cache — memory — 外存

分区不支持虚拟存储

虚拟存储思想:需要时load

Demand Paging 页式

Demand segmentation 段式

Segmentation with Paging 段页式

不在页表上,则指令执行过程中被中断 缺页中断

valid位:the page is valid and in memory

exit位:指明是否在内存

page fault

缺页中断与一般中断的不同:中断时机不一样,前者在指令执行期间,后者在执行结束后

一条指令执行期间,可能有多次中断

Allocation of frames

平均分配,按比例分配

全局分配和局部分配

全局置换运行一个进程从所有帧集合中选择一个置换帧,而不管这个帧是否已经分配

局部置换:要求每个进程仅从分配帧中置换

thrashing(CPU利用率低,I/O利用率低,页面交换高)

对于内存中运行的进程,如果分配给这些进程的内存大小不足以容纳这些进程的局部,则会出现页面频繁置换的现象,即系统出现抖(颠簸)

分配给每个进程的页框数应不少于该进程的当前局部;

根据局部性原理,每个进程最近使用的页框数作为将要使用的页框数的近似值

工作集合模型

工作区窗口大小最好包含一个局部,提高多道程序设计程度和CPU利用率

页错误率频率

9.9其他考虑

9.9.1 预调页

同时将需要的所有页一起调入内存

第十章 文件系统接口

文件系统:文件+目录结构

磁盘空间按块分布

file属性放在FCB(索引节点,iNode),除了文件名外所有信息都在

按名存区,所以需要 文件目录表

磁盘上有一个根文件目录表

逻辑格式化:把扇区有机组合起来成为逻辑块(cluster)

​ 创建文件系统

访问方式:1.顺序访问 2.直接访问

目录结构:

1.单层,便于理解和支持

2.双层目录结构,对用户加以隔离

3.树状目录结构

4.无环图目录,

文件系统安装File system mounting

Access Control

owner access group access public access

第十一章 文件系统结构

分层设计的文件系统:

应用程序->逻辑文件系统->文件组织系统->基本文件系统->I/O控制->设备

VFS 虚拟文件系统

虚拟文件系统(VFS)是物理文件系统与文件系统服务之间的一个接口层(VFS Interface),它对每个物理文件系统的所有细节进行抽象,并为这些不同的文件系统提供了一个统一的系统调用接口。

11.3 目录实现

1.线性列表,查找要线性搜索

2.哈希表,固定的大小和对hash函数的依赖性

11.4分配方法

1.连续分配

​ 优点 支持顺序访问和直接访问 ,不需要额外的磁盘空间(类似动态分区)

​ 缺点 FCB内需要每个文件的起始地址和长度

​ 可能产生外碎片,难以扩展文件

​ 难以为新文件找到空间

2.链表分配

​ 易于文件扩展,不会产生外碎片

​ FAT文件系统,支持随机存取

​ 不能实现随机存取,可靠性差,需要额外的磁盘空间

3.索引分配

​ 支持随机访问和直接访问,没有外碎片,可扩展

​ 额外磁盘块存放索引表

​ 索引块的管理方式:1.链式 2.多级索引 3.combine scheme

​ 每个地址块为4字节,磁盘索引块和磁盘数据块大小为245Byte,则一个二级索引可表示最大字节数为:(256/4)*(256/4) * 256 byte

FCB 可以集中存储 和分散存储

集中:

分散:适合连续分配

objective:1.是否容易找到连续块 2.是否需要额外的磁盘空间 3.空间分配与回收的效率

不管采用哪一种文件分配方式,os总是尽量分配连续的磁盘块。

11.5 Free-Space Management

评价指标:

是否需要额外的磁盘空间 是否容易找到连续空间块,回收率

1.Bit vector 空闲为1,分配为0

优点:实现简单,容易找到连续的空间快

缺点:需要额外磁盘空间放位示图,需要放在内存里

2.Linked list(free list)

可靠性差,效率低,但不需要额外空间,难找到大量空闲块

3.Grouping

当前可分配的物理块号存放在空闲盘块栈,因此绝大部分的分配和回收工作是在主存中进行,可以节省时间,与bit vector相比,占用内存较少,容易找到大量的空闲块

4.Counting

适合连续分配,需要额外的空间

第十二章 大容量存储器结构

磁盘 随机访问时间:寻道时间+旋转延迟时间+数据传输时间

磁盘调度:

1.FCFS

2.SSTF:贪心,当前最优先服务

3.SCAN 方向优先

要点:当前磁头位置,当前磁头方向

C-SACN:

单向移动,每次到另外一端后需要返回磁盘开始处

LOOK:

类似scan,不需要移动到头

C-LOOK:

类似c-look 不需要移动到头

汤子瀛书中,SCAN即为LOOK。

12.7 RAID Structure 独立磁盘冗余阵列

由多个小的便宜磁盘组合成大的磁盘

12.7.1

Disk stripng:

卷集:多个磁盘分区组合成一个卷集,数据按分区顺序存取

带区集:多个磁盘分区组合成一个卷集,多个卷交叉存取

提高性能:并行交叉存取技术,多个磁盘同时读取 按位分散 or 按块分散

RAID目的:

改善系统的可靠性(数据冗余及校验+容错技术)

提高系统的性能 (并行交叉存取技术)

在镜像盘中 写数据应等原盘写完后写,用于恢复

第十三章 I/O 系统

用户层,设备无关性,设备驱动,中断处理,硬件

程序独立于具体的设备 设备无关性

由os分配具体的设备

设备驱动程序来计算数据所在磁盘的位置

reada() 提前读 非堵塞

BIOS —> CMOS(读取设备信息)

13.4.2 Buffering

目的:

1.协调两边的速度差异

2.处理设备传输大小不匹配

3.维持 copy semantics (e.g. write system call )

缓存区类型:

单缓冲

双缓冲

环形缓冲

公共缓冲池

系统内存中设置磁盘缓冲区的主要目的:减少磁盘I/O的次数

13.4.3 Cashing
13.4.4 SPOOLing and Device Reservatio;n

spooling:用来保存设备输出的缓存区

解决独占设备的并发访问问题,以提高设备的利用率

单缓冲(Single buffer)

处理时间和传输时间可以重叠

双缓存(double buffer)

UNIX I/O

一切皆文件,设备也是文件

有一个active-inode table

组合成大的磁盘

12.7.1

Disk stripng:

卷集:多个磁盘分区组合成一个卷集,数据按分区顺序存取

带区集:多个磁盘分区组合成一个卷集,多个卷交叉存取

提高性能:并行交叉存取技术,多个磁盘同时读取 按位分散 or 按块分散

RAID目的:

改善系统的可靠性(数据冗余及校验+容错技术)

提高系统的性能 (并行交叉存取技术)

在镜像盘中 写数据应等原盘写完后写,用于恢复

第十三章 I/O 系统

用户层,设备无关性,设备驱动,中断处理,硬件

程序独立于具体的设备 设备无关性

由os分配具体的设备

设备驱动程序来计算数据所在磁盘的位置

reada() 提前读 非堵塞

BIOS —> CMOS(读取设备信息)

13.4.2 Buffering

目的:

1.协调两边的速度差异

2.处理设备传输大小不匹配

3.维持 copy semantics (e.g. write system call )

缓存区类型:

单缓冲

双缓冲

环形缓冲

公共缓冲池

系统内存中设置磁盘缓冲区的主要目的:减少磁盘I/O的次数

13.4.3 Cashing
13.4.4 SPOOLing and Device Reservatio;n

spooling:用来保存设备输出的缓存区

解决独占设备的并发访问问题,以提高设备的利用率

单缓冲(Single buffer)

处理时间和传输时间可以重叠

双缓存(double buffer)

UNIX I/O

一切皆文件,设备也是文件

有一个active-inode table

第十四章 保护

保护与安全

保护(保护系统资源不被合法用户滥用)

安全(防止非法用户侵入计算机系统而使信息泄密或造成系统的损坏)

保护域的实现:

1.访问控制矩阵:

​ 列实现(ACL访问控制列表)

​ 行实现(Capability List ,RBAC,基于角色)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zzzzzzzq丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值