关闭

Mini-Notes:《操作系统第七版》概念的理解与总结

标签: 操作系统概念总结
738人阅读 评论(0) 收藏 举报
分类:

这个学期学习完《操作系统概念》,于是结合着课本,按照自己的理解写了一些凌乱的总结。想想多年以后,能够在这儿看到自己当初的想法,甚是美好。

 

Chapter 1 Introduction

What is an operating system:3个

一intermediary between user and hardware

二Resource allocator: manage all resources、decide between conflicting requests for efficient and fair resource use(例子:打印机)

三control program: control excution of programs to prevent errors and improper use of computer(例子:C语言编程指针访问)

 

4components of computer systems

 

Two types of interrupt handling

一polling: cpu为主动,定期向外围设备发送信号,看是否有请求

二vectored interrput system: 能使外设通知cpu的硬件机制称为interrupt。设备主动,有设备与cpu之间的通信机制让设备传信号给cpu

 

DMA

一种高速的传输数据的方式。设备控制器能在本地缓存和内存之间传送一整块数据,无需cpu干预。每块产生一个中断而不是每个字节产生一个中断。(例子:打字)

 

Cache

上一级存储单元可以作为下一级存储单元的高速缓存。如果信息存在cache里,就可以快速地从cache中获取信息,否则把数据复制到cache然后再用。

Cache是为了加快访问的。

问题:cache不一致,不是最新更新的数据

 

Chapter2 Operating-system structures 操作系统结构

OS的services:9个

 

Two fundamental approaches for user to interface with the operating system:

CLI: 用户直接输入通过操作系统完成的命令

GUI: 通过GUI与操作系统交互

 

系统调用与API

系统调用是什么?

API是什么?

API的好处:3个

1开发简单2安全高效3可移植性

系统调用的类型:5个

进程控制、文件管理、设备管理、信息维护、通信

 

Operating system structures

一MS-DOS

应用程序能够访问基本的I/O子程序,直接写到显示器和磁盘驱动程序中

优:效率高

缺:1应用程序直达内核,易受恶意程序的伤害、不安全

2最后一行有修改,前面的每一行都要修改(例子:printf()本来调用write(),如果有一天write()变成了writef()的话就要修改前面的)

二Layered approach

对系统进行模块化,最顶层是用户接口,最底层是硬件

优:1构造和调试的简单化

2对于每层来说,只用到较低层的功能和服务,只为上一层提供服务

3某一层的修改只影响到相邻层

缺:逐层调用、效率很低

三microkernels

把内核模式下的非基本部分提升到用户模式

优点:1内核模式下代码数少错误少,更可靠

2更稳定,突出核心功能

3内核内容精简,可扩展性好

缺: 系统功能总开销大,内核、用户模式下的切换增多,系统性能下降

 

Chapter3 Processes进程(执行状态的一个程序)

程序与进程

程序本身不是进程,程序是被动实体,进程是主动实体。当一个可执行文件被装入内存时,一个程序才能成为进程。

一个程序可能触发多个进程(例子:编译:预处理、汇编、链接)

进程多于程序(例子:IE浏览器,打开两个就是两个不同的进程/多个用户可以运行不同的电子邮件副本)

 

Process state(5个)

New新的

Running运行

Waiting等待

Ready就绪

Terminated终止

英文版P83 diagram of process state为什么waiting之后不直接到running?因为这样代码功能重复,逻辑混乱

 

PCB(process control block)

每个进程在操作系统内用PCB来表示,它包含许多与一个特定进程相关的信息。

(7个)进程状态、程序计数器、CPU寄存器、CPU调度信息、内存管理信息、记账信息、I/O状态信息

 

Process Scheduling

1Scheduling queues

Job queue作业队列:包括系统中的所有进程

Ready queue就绪队列:驻留在内存中就绪的等待运行的进程

Device queue设备队列:等待特定I/O设备的进程列表

2Schedulers(调度程序)

长期调度:从缓冲池里的进程中选择并装入内存以准备运行,控制内存中进程数量

短期调度:从就绪队列中选哪个进程到cpu

(长期和短期的差别:执行的频率,长期不频繁、短期必须频繁地为cpu选择新进程)

中期调度:没有缓冲池,也就没有长期调度,把内存中占用量较大的进程移出

 

Context switch

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

分为两步:1保存当前进程状态(PCB)2装载被调度的进程状态

上下文切换是额外开销

 

Two fundamental models of interprocess communication

1共享内存:(共享一个内存区域)效率高,但是有可能出现数据不一致

2消息传递:(例子:QQ聊天,通过系统调用,写到网卡,进程从网卡上接收)效率低,经常涉及系统调用

 

生产者消费者问题

英文p98思考怎样能够放10个空位?必须加一些判断语句if(in == 10)in = 0

为什么直接%(buffer_size+1)不可以?

 

Chapter4 Threads线程

为什么不生成多个进程?进程创建很耗时间和资源

Process的两个角色:资源的拥有者(进程去做)、指令的执行者(线程去做)

多线程例子:word文档(后台格式编辑、鼠标交互、自动保存等)

线程共享代码段、数据段、文件(否则资源不共享),有自己的寄存器和栈。

那为什么还要有多个进程?安全

 

The benefits of multithreaded programming(4点)

1响应度高(一个线程阻塞、另一个线程还可以与用户进行交互)

2资源共享(允许一个应用程序在同一地址空间有多个不同的活动线程)

3经济(进程创建所需内存和资源分配比较昂贵)

4能够充分利用多处理器体系结构,以便每个进程能并行运行在不同的处理器上(单个线程的进程只能够在单个cpu上运行,多线程就可以同一进程的不同线程在不同的cpu上运行)

 

线程分类

用户线程:用户级线程库管理的

内核线程:由操作系统直接支持和管理、内核管理

 

Multithreading models: Relationship between user threads and kernel threads

多对一模型

优:创建线程方便不需要涉及操作系统

缺:一个线程用到I//O请求,其他就不能用了

一对一模型

优:一个线程执行阻塞系统调用能允许另一个线程继续执行

缺:资源消耗大、创建线程难要涉及操作系统

多对多模型

二级模型

 

有一个问题:对于多对一模型:内核线程blocked,而有用户级线程的状态是running,为何?

可能只是一种姿势,而实际上没有在执行,要看内核线程有没有时间过来。

 

Chapter5 CPU Scheduling

Proccess execution consists of a cycle of CPU execution and I/O wait.

CPU burst(CPU区间)

I/O burst(I/O区间)

 

CPU-scheduling decisions may take place under the following four circumstances:

1running->waiting(例如等待I/O)

2running->ready(例如中断或时间片用完)

3waiting->ready(例如I/O完成)

4terminate

分析:1、4是nonpreemptive,因为1、4时进程已经没有执行能力了,实际上是自愿地让出cpu资源

2、3是preemptive,因为进程还可以执行,不是自愿让出cpu资源

 

Dispatcher分派器

是一个模块,用来将cpu的控制交给指定进程

其功能包括1切换上下文

2切换到用户模式

3跳转到用户程序的合适位置,以重新启动程序

 

Scheduling criteria准则

Cpu利用率(utilizationg)、吞吐量(throughput)、turnaroud time(周转时间)、waiting time(等待时间)、response time(响应时间)

周转=等待+运行

 

对于周转时间:包括提交(创建)等待放入内存的时间、在(内存)ready中等待的时间、cpu区间、I/O区间

我们做题时忽略了创建、I/O时间

 

Scheduling Algorithms

FCFS

SJF(抢占式、非抢占式)

Priority scheduling

Round-Robin scheduling

Multilevel queue scheduling把就绪队列一分为二,每个队列有自己的调度算法。一个用于前台一个用于后台,也许前台要求高响应,所以时间片要短,后台则可设时间片比较长,只需保证稳定运行就可以了。前台与后台之间的调度,例如80%时间片用于前台。

Multilevel Feedback-queue scheduling只有一个队列,每轮排队时间片不同,先设置一个短的时间片,如果没运行完就设置更长的时间片,意味着优先级降低。

 

Chapter6 Process synchronization进程同步

进程同步:为了确保一段时间内只有一个进程能操作同一个变量,要进行一定形式的进程同步。

 

什么是临界区?

每个进程有一个代码段称为临界区,在该区中进程可能改变共同变量、更新一个表,写一个文件等。

A solution to the critical-section problem must satisfy the following three requirements:(3个)

互斥

前进

有限等待

 

几个概念:race condition(多个进程并发访问和操作同一数据且结果与访问发生的特定顺序有关)

Entry section

Exit section

Remainder section

 

Peterson算法(只限于两个进程)

(解决临界区的一个很好的算法)

Flag[j]&&turn == j

 

忙等待busy waiting

当一个进程进入其临界区时,其他任何试图进入其临界区的进程都必须在其进入代码中连续循环。

某个进程循环检测某个条件是否为真,不主动放弃cpu资源,浪费cpu

 

Semaphore

什么是信号量?

信号量是一种与临界区资源相联系的量

 

The usage of semaphore?

Usage1

Counting semaphore

把信号量视为是某种共享资源的剩余个数,实现对一类共享资源的访问

代码//resource初始化为可用资源数量

P(resource)

临界区//使用该资源

V(resource)

Usage2

Binary semaphore(也称为互斥锁mutex locks)

可以使用二进制信号量来处理多进程的临界区问题

代码//mutex初始值为1

P(mutex)

临界区

V(mutex)

Usage3

作为进程间的同步工具(以下例子可以保证先执行S1语句再执行S2语句)

//信号量synch初始化为0

对于P1代码

S1:

Signal(synch)

对P2代码

Wait(synch)

S2:

 

显然,只是简单的代码

Wait()

临界区

Signal()

这样定义的信号量要求忙等待

所以定义这样一种信号量:有一整型值和进程链表。要等待信号量就加入进程链表,signal操作时唤醒一个进程链表的进程。这样可以部分解决忙等待问题。

 

P操作等同于Acquire等同于Wait

V操作等同于Release等同于Signal

 

P、V都是原子操作,不可被中断

P、V操作也不可避免忙等待

 

Classic problems of synchronization

The bounded-buffer problem、The readers-writers problem、The dining-philosophers problem(典型的死锁问题)

一个概念:Monitors管程

为每个共享资源设立一个“秘书”来管理对它的访问。“秘书”每次只允许一个来访者。管程定义了一个数据结构和能为并发进程所执行的一组操作。

 

Chapter7 Deadlocks

死锁

某个进程申请资源,如果这时资源不可用,那么该进程进入等待状态。如果所申请的资源被其他等待进程占有,那么该等待进程有可能再也无法改变其状态,这种情况称为死锁。

 

死锁的四个必要条件

互斥

占有并等待

非抢占

循环等待

 

死锁预防(破坏某一必要条件)

 

死锁避免(银行家算法)

 

死锁检测算法

 

Chapter8 Main memory

1)基本概念(物理地址、逻辑地址、内/外部碎片等)、MMU

2)连续内存分配(首次/最佳/最差适应)

3)分页(逻辑地址映射成物理地址)

4)分段(逻辑地址映射成物理地址)

 

Cache

协调速度差异的内存缓冲区,叫做高速缓存。

 

Chapter9 Virtual memory

1)基本概念

2)页面调度的性能(计算有效访问时间)

3)页面置换算法(FIFO、LRU等)

4)系统颠簸原因以及解决办法

 

Chapter10 File-system interface

文件概念:连续分配的逻辑地址

 

Chapter11 File-system implementation文件系统的实现

1)基本概念

2)分配方法(连续分配、链接分配、索引分配)

3)空闲空间管理(位向量、链表、组等)

 

目录实现Directory implementation

1线性列表

优:实现简单

缺:执行费时(找文件、增删麻烦)

2哈希表

优:减少目录搜索时间

缺:可能会有冲突也就是不同文件名对应同一个哈希值、大小固定

 

How to allocate space to these files so that disk space is utilized effectively and files can be accessed quickly?

Allocation method

1连续分配(Contiguous allocation)

创建文件时给文件分配一组连续的块

优:简单

支持顺序存取和随机存取

顺序随机存取速度快(根据起始地址和偏移量立刻定位到它的下标)

缺:外部碎片(之前剩下的4块被删掉之后5块的文件放不下去)

预分配(在创建的时候要预分配文件的大小,如果以后变大怎么办)

 

2链接分配(linked allocation)

创建文件时,每块都包含指向下一块的指针

优:无外部碎片,磁盘利用率高

有利于文件插入、删除、扩充

缺:存取速度慢,适宜顺序、不适宜随机存取

链接指针占用一定的空间

可靠性问题,如果一个指针丢失了,后面的都读不出来

 

3索引分配(indexed allocation)bring all pinters together into the index block

文件分配表中有一个索引表

优:即可顺序、也可随机

文件动态增长、插入删除

充分利用外存空间

缺:需要两次访问内存、索引表和具体物理块

索引表带来系统开销

索引表大小未知

 

Free space management

1位向量bit vector(查找连续的磁盘空间比较方便,但是会浪费空间放向量)

2链表linked list(空闲块有一个指向下一个空闲块的指针)(虽不浪费空间但不利于查找连续磁盘空间)

3分组grouping(n个空闲块的地址存放到第一个空闲块中)(可以快速找到大量空闲块)

4计数counting(首个空闲块的地址以及其后连续空闲块的数量n)

 

10、11、12章到底是个什么思路?文件系统从逻辑上分为三部分:用户和程序员所使用的文件系统接口、操作系统实现那该接口所用的数据结构和算法、而12章将讨论文件系统的最底层

Chapter12 Mass-storage structure大容量存储器的结构

主要考察内容:

1)磁盘结构

2)磁盘调度算法(FCFS、SSTF(最短优先、通常用)、SCAN(电梯算法上上下下到需求)、C-SCAN(到全部的尽头一下子又回到开始)、LOOK、C-LOOK(到需求的尽头又一下子回到开始、平均等待时间最短))

 

SSD固态硬盘

优:纯电路形式设计、速度快

缺:寿命短、每个块可重复写的次数少

算法研究:智能平衡磨损(均匀地损坏)

Seek time寻道时间(旋转磁臂到所要的柱面所需的时间)

Rotational latency旋转延迟(扇区旋转到磁臂下所需的时间)

Head crash磁头跟盘面物理冲突会损坏磁盘

 

Disk scheduling

旋转延迟与硬盘转速有关,我们要考虑的是如何降低寻道时间

 

Chapter13 I/O systems

Buffering缓冲

Buffer缓冲区用来保存两个设备之间或者设备与应用程序之间所要传输的数据的内存区域

 

Caching高速缓存

高速缓存是可以保留数据副本的高速存储器。高速缓存区副本的访问要比原始的访问更为高效。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:15866次
    • 积分:396
    • 等级:
    • 排名:千里之外
    • 原创:24篇
    • 转载:1篇
    • 译文:0篇
    • 评论:18条
    最新评论