操作系统基础

时间:2020-08-23 17:02:11   收藏:0   阅读:98

基础篇

注:本文内容总结自《计算机操作系统》第四版(汤小丹等人编著)。本文由博主同步发布于:https://blog.csdn.net/donotgogentle/article/details/106930437

第一章  引论

1.1  什么是操作系统?

操作系统是配置在计算机硬件上的第一层软件。其作用是:

具体为:

  1. 处理机管理
  2. 存储器管理
  3. 设备管理
  4. 文件管理

1.2  操作系统的基本特性

  1. 并发:并行指两个及以上时间在同一时间发生,并发指指两个及以上事件在同一时间间隔发生
  2. 共享(Sharing):指资源共享,或者资源复用,是指系统中的资源可供内存中多个并发执行的进程共同使用。分为:互斥共享,同时访问
  3. 虚拟:通过某种技术将一个物理实体变为若干个逻辑上的对应物
  4. 异步:进程以人们不可预知的速度向前推进,但能保证多次执行也能得到相同的结果。

第二章  进程

2.1  进程的定义

进程是指在系统中能独立运行并作为资源分配的基本单位,它是由程序段、相关的数据段、进程控制块(Process Control Block,PCB)组成的。

2.2  进程的特征

2.3  进程的状态及转换

2.3.1  进程的三种状态

2.3.2  状态转换

技术分享图片技术分享图片?

活动阻塞通过挂起进入静止阻塞状态,活动就绪通过挂起进入静止就绪状态,而挂起这一操作是由OS将暂时不能运行的进程调入外存。也就是说这两个状态下,进程并没有在内存中,而是在外存中。

一项作业被调度时,是OS将该作业调入内存,并为之创建进程,分配资源,进入就绪队列。

2.4  进程控制块

操作系统为每个进程定义了一个进程控制块。进程控制块作为进程实体的一部分,记录了操作系统所需要的,用于描述进程当前情况以及管理进程运行的全部信息。

2.5  操作系统内核

通常,将一些与硬件紧密相关的模块、各种设备的驱动程序以及运行频率较高的模块,安排在紧靠硬件的软件层次中,将它们常驻内存,即,OS内核。

2.5.1  内核态和用户态

为防止OS本身及关键数据遭到应用程序的破坏,通常将处理机的执行状态分为两种:

2.6  临界资源和临界区

2.7  信号量

semaphore mutex = 1;
P1 () {
    while (1) {
	    wait (mutex);
	    临界区;
	    signal (mutex);
	    剩余区;
    }
}

P2 () {
    while (1) {
	wait (mutex);
	临界区;
	signal (mutex);
	剩余区;
    }
}
技术分享图片

mutex为互斥信号量,初值为1,范围(-1,0,1)。

2.8  管程

一个管程定义了一个数据结构,和能为并发进程所执行(在该数据结构上)的一组操作,这组操作能同步进程和改变管程中的数据。

管程被请求和释放资源的进程所调用。

2.9  进程通信类型

asfdasdfas

2.10  线程

线程又程轻型进程。

2.10.1  线程实现

(1)内核支持线程(Kernel Supported Threads)

内核支持线程的创建、撤销、切换、阻塞都是在内核空间进行,由内核对每个线程设置的线程控制块对其进行控制。

优点:

缺点:

(2)用户级线程(User Level Threads)

在用户空间实现,对线程的控制无需内核帮助,内核甚至不知道它的存在。

优点:

缺点:

(3)组合方式

内核支持多个内核支持线程的创建、调度和管理等,同时允许应用程序创建、调度、管理用户级线程。一些内核线程对应多个用户级线程,即,用户级线程对部分或者全部内核支持线程进行时分多路复用。

分为多对一、一对一、多对多(用户级线程数 >= 内核支持线程)。

优点(多对多):

第三章  处理机调度与死锁

3.1  处理机调度的层次

又称作业(长程)调度,调度对象是作业。根绝算法,决定将外存上处于后备队列的哪些作业调入内存,为其创建进程、分配资源,放入就绪队列。

又称进程(短程)调度,调度的对象是进程或内核支持线程。根据调度算法,决定哪个进程获得处理机。

又称内存调度。把暂时不能运行的进程调入外存,即改为挂起状态,当这些进程具备运行条件时,再把他们重新调入内存,即改为就绪状态。

3.1.1  作业调度

作业的三种状态:

调度算法:

(1)先来先服务(FCFS)调度算法

first-come first-served,优先级 == 作业等待时间

(2)短作业优先算法

优先级 == 作业需要时间短的优先级高

需要预知作业工作时间,对长作业不利,没考虑到紧迫性作业

(3)高响应比优先级调度算法

优先级 == (等待时间+要求服务时间)/要求服务时间

3.1.2  进程调度基本概念

进程调度的任务:

进程调度方式:

将处理机分配给某进程后,就让其运行到结束。

基于优先原则,去暂停某个正在运行的进程,将其分配给另一个优先级更高的进程。

3.1.3  进程调度算法

(1)轮转调度法:

在轮转法(round robin,RB)中,系统根据FCFS策略,将所有的就绪进程排成一个就绪队列,并设置每隔一定时间间隔即产生一次中断,激活系统中的进程调度程序,完成一次调度,将CPU分配给队首进程(或新的紧急进程),令其执行,当该进程的时间片耗尽或者运行完毕后,系统将再次将CPU分配给新的首进程。

时间片的大小对系统性能有很大影响。时间上一般取略大于一次典型的交互所需要的时间,使大多数交互式进程能在一个时间片内完成。

(2)优先级调度算法:

3.2  死锁

3.2.1  死锁定义

如果一组进程中的每一个进程都在等待,该组进程中的其他进程释放所占有的资源后,才能运行,那么该组进程是死锁的。

3.2.2  产生死锁的必要条件

3.2.3  处理死锁的方法

避免死锁-银行家算法:

用到的数据结构:

银行家算法首先执行安全性检测,若能确定分配资源后系统处于安全状态,则分配,否则让进程等待。

安全性检测:当检测到进程 P 对资源的请求,算法尝试将资源分配(不是真的分配,仅用于计算安全性)给 P,若 Available能满足 P 的需求(P 的需求必须小于 Need,否则认为出错),直接分配,并回收 Max

        资源

进程

Max

Allocation

Need

Available

 

A    B     C

A    B     C

A    B     C

A    B     C

P0

7    5     3

0    1     0

7    4     3

3    3     2

P1

3    2     2

2    0     0

1    2     2

P2

9    0     2

3    0     2

6    0     0

P3

2    2     2

2    1     1

0    1     1

P4

4    3     3

0    0     2

4    3     1

检测此时刻安全性(可能的序列):

(1)Available(3, 3, 2)分配给P3(0, 1, 1), P3完成,归还资源,Available(5, 4, 3)

(2)此时P1,P4均可完成,设分给P1,故分配+归还,Available(7, 4, 3)

(3)此时剩余进程均可完成,继续按照上述步骤,得到存在的可能的安全序列:{P3, P1, P4, P2, P0}

(4)判定分配资源后系统安全,可以分配资源

第四章  存储器

4.1  存储器的多层结构

主要用于备份主存中常用的数据,以减少处理机对主存的访问次数,从而提高程序执行速度。基于程序执行的局部性原理:一段较短时间内,程序执行局限于某部分。

简称内存或主存,用于保存进程运行时的程序和数据。为缓和 CPU 指令执行速度与主存储器访问速度的矛盾,引入了高速缓存和寄存器。

磁盘 I/O 速递远低于主存访问速度,为缓和这个矛盾,设置磁盘缓存。它是利用主存中的存储空间暂时存放从磁盘中读取的信息。

4.2  存储管理方式

该分配方式为用户程序分配一个连续的内存空间,即,程序中代码或者数据的逻辑地址相邻,体现在内存空间分配时物理地址的相邻。连续分配方式分为四类:

(1)单一连续分配 :内存分为系统区和用户区,用户去内存中仅装有一道用户程序。

(2)固定分区分配 :将用户空间划分为若干个固定大小的区域,每个分区中之装入一道作业。分区大小的划分有大小相等和大小不等两种方法,后者把分区分为小分区、中分区、大分区等,相比于方式一能够减少碎片。

(3)动态分区分配 :根据进程的需要动态分配内存空间。基于该分配方法,有:

           首次适应(first fit,FF)算法:从空闲分区链头部顺序找起,找到第一个能满足进程要求的分区大小,在该分区中动态为其分配一块内存空间,剩余部分仍然留在空闲分区链。

           循环首次适应(next fit,NF)算法:从上次找到的地方开始找起。若找到链表尾部还没找到,则返回链表头部,从头找起。

           最佳适应(best fit,BF)算法:能满足要求,大小是最小的分区被优先分配。

           最坏适应(worst fit,WF)算法:能满足要求,且大小是最大的分区被优先分配。

用户程序要想在系统中运行,必须将其装入内存,并为它分配内存空间。连续分配存储往往导致碎片,浪费存储。

分页方式将用户程序的地址空间分为若干个大小固定的区域,称为“页”,典型大小为1KB。相应的也将内存空间分为若干物理块,块大小与页大小相等。系统为每个进程建立一张页表,记录了相应页在内存中对应的物理块号。

快表:

页表存放在内存中,这使得CPU每次存取一个数据都要访问两次内存,第一次根据页号在页表中查找得到物理块号,将该块号与页内偏移地址拼接才能形成物理地址,第二次才从物理地址读写数据。为提高地址变换速度,出现了快表。在CPU给出有效地址后,由地址变换机构将页号送入高速缓存,将此页号与其中的所有页号进行比较,若匹配,直接在该快表上得到页号对应的物理块地址,并将该地址与业内地址进行拼接得到物理地址,送入物理地址寄存器,从而在相应物理地址上读写。若未命中,才访问内存中的页表。

作业的地址空间被划分为若干个段,每个段定义了一组逻辑信息。

分段和分页的区别:

页是信息的物理单位,分页是系统的行为,用户不可见。分段中的段是逻辑单位。

页大小固定,由系统决定。段的长度不固定,由用户编写的程序决定。

先将程序分段,再将每个段分成若干个页。由段号和段表起始地址指出对应的页表起始地址,由段内页号和对应的页表定位块号,由块号和页内地址构成物理地址。

第五章  虚拟存储器

5.1  虚拟存储基本原理

有的作业很大,所要求的内存空间超过了内存总容量,虚拟存储器便是为此而生。虚拟存储器是基于程序运行的局部性原理,应用程序在运行前并不需要全部装入内存,仅仅将当前需要运行的少数页面或者段装入内存便可运行。程序运行时,如果它所需要的段(页)已经在内存,便能继续执行,否则,发出缺页(段)中断请求,此时OS利用请求调页(段)功能将这些页(段)调入内存,以使进程继续运行下去。如果此时内存已满,OS再利用页(段)的置换功能,将内存中暂时不用的页(段)调至盘上,腾出内存空间后,再将要访问的页(段)调入内存。

5.2  页面调度策略

5.2.1  最佳置换算法

选择的淘汰页是以后永久不使用或者最长时间内不再被访问的页面。

5.2.2  先进先出(FIFO)页面置换算法

总是淘汰最先进入的页。

5.2.3  LRU(Least Recently Used)置换算法

淘汰最近最久未使用的页。该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来经历的时间t,淘汰时选择t最大的页淘汰。

5.2.4  最少使用(Least Frequently Used,LFU)置换算法

记录每个页面被访问的频率,选择在最近时期使用最少的页淘汰。

5.3  抖动

5.3.1  什么是抖动?

同时运行在系统中的进程太多,造成分配给每个进程的物理块太少,不能满足程序正常运行的需求,致使每个进程频繁地出现缺页,从而每个进程大部分时间都用于页面的换进/换出,几乎不能做有效的工作,从而导致处理机的利用率急剧下降并趋近于0。

5.3.2  什么是工作集

工作集是某段时间间隔内,进程实际要访问页面的集合。在不同时间,工作集所含页面数不同。

5.3.3  预防抖动的方法

L=S准则:

L为缺页之间的平均时间,S为平均缺页服务时间,如果L>S,说明很少缺页,但处理机利用率低,如果L<S,说明频繁缺页。只有当L=S时,磁盘和处理机能达到它们最大的利用率。

原文:https://www.cnblogs.com/icky1024/p/os-base.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!