操作系统学习笔记(一)
本文最后更新于 161 天前,其中的信息可能已经有所发展或是发生改变。

进程

进程管理

什么是进程

进程是

进程(Process)包括 程序的代码程序的数据指示下一条运行的指令一组通用寄存器的当前值一组系统资源

进程特征包括 结构特征动态性并发性独立性异步性

进程三种基本状态: 就绪状态执行状态阻塞状态

(有的为五种:最前为 新建态、最后为 终止态

进程状态转换关系

进程状态转换关系

挂起状态(基本状态之外): 进程被从内存调出进驻外存,不再接受调度。

PCB[^PCB]: PCB中记录了操作系统所需的,用于描述进程的当前情况以及控制进程运行的全部信息。PCB是进程存在的唯一标志

上下文切换: 将CPU切换到另一进程需要保存原来进程的状态并装入新进程的保存状态。上下文切换时间与硬件支持密切相关。

进程控制

  • 进程创建:在一个已经存在的进程(用户进程或系统进程)当中,通过系统调用来创建一个新的进程。

    进程创建

  • 创建步骤:1、申请空白PCB 2、新进程分配资源 3、初始化PCB 4、进程插入就绪状态

  • 进程终止

    进程终止

  • 进程阻塞与唤醒

    原因:请求系统服务新数据尚未到达无进程新任务

    阻塞过程:调用 阻塞原语block 把自己阻塞、将PCB插入阻塞队列、重新调度。

    唤醒过程:阻塞队列移出阻塞进程、PCB从阻塞改为就绪、PCB插入就绪队列。

  • 进程挂起与激活

    挂起过程:修改进程状态、PCB复制到指定内存块、(如有必要转调度程序)。

    激活状态:进程调入内存、修改进程状态、(如抢占调度考虑是否执行)

进程同步

  • 进程通信[^IPC]

  • 临界区和临界资源

    进程的工作分为两类:1、内部计算 2、对共享内存或共享文件的访问(竞争条件的产生)

    完成第二类工作的程序片段就是 临界区, 需要互斥访问的共享资源就是 临界资源

  • 整形信号量:Dijkstra提出:把整形信号量定义为一个整形量,除初始化外,仅能通过两个标准的 原子操作 (Atomic Operation) wait(S)signal(S)来访问。分别称为P、V操作。

    //P原语操作的定义
    procedure wait(S)
      var S:semaphore;
    begin
      S.value:=S.value-1;
      if S.value<0 then
          block(S,L)
    end

    P原语操作的定义

    //V原语操作的定义
    procedure signal(S)
      var S:semaphore;
    begin
      S.value:=S.value+1;
      if S.value<=0 then
          wakeup(S,L);
    end

    V原语操作的定义

  • 记录型信号量

    信号量被描述为一个记录(或者结构)

    信号量被描述为一个记录

    S.value的处置表示为系统中某类资源的数目,因此也称资源信号量。每次wait操作进程请求该一个单位的该类资源;当S.value<0时,进程调用block原语自我阻塞,并插入信号量链表S.L中。

  • AND型信号量

    一次性将进程所需所有资源分配到进程里,待使用完释放(避免死锁)

  • 利用信号量实现进程互斥

    n个进程互斥地使用某个临界资源是,设定信号量mutex 用于互斥访问,初始化为1。

    信号量实现进程互斥

    进程互斥还可能出现死锁

  • 同步与互斥的混合问题

    有一个仓库,可以存放A和B 两种产品。要求:1)每次只能存入一种产品(A或B);2)-N<A产品数量-B产品数量<M。试用PV操作描述产品A与产品B的入库过程。

    同步与互斥的混合问题

经典IPC问题

  • 主要问题:如何选择信号量, 如何安排P、V原语的顺序。

    生产者-消费者问题、哲学家进餐问题、读者-写者问题、理发师问题、和尚喝水问题。

信号量方法的缺点:

  • 逻辑关系复杂,可读性差、维护困难、容易导致竞争状态或者死锁严重问题。

管程

由Hoare和Hansen提出,基本思想:将共享变量以及对共享变量所进行的操作封装在一个模块中

  • 结构

    由一组变量、数据结构和函数构成的软件模块。

    管程

  • 特性

    封装性、互斥性、语言相关性

  • 等待与唤醒

    条件变量[^条件变量] 用于描述等待的原因,通过 waitsignal 操作条件变量。waitsignal 类似P、V原语,但条件变量不取具体数值,不进行累加。

  • send 和 receive

    send(target,&msg)//将消息msg发送到目标(进程)target中
    receive(src,&msg)//接收src传来的msg,如果无消息可用,阻塞接受者

    有可能面临ACK [^ACK]丢失问题

进程高级通信

线程

  • 线程与进程

    进程=资源平台+线程

    • 一个进程中可以同时存在多个线程;
    • 各个线程之间可以并发地执行;
    • 各个线程之间可以共享地址空间。

    进程是资源分配单位,线程是CPU调度单位;线程可实现进程级的并发。

    单线程与多线程的关系图:

    单线程与多线程的关系图

  • 用户线程

    在用户空间实现,不依赖操作系统的内核。

    用户线程

  • 内核线程

    内核线程

    由内核来维护进程和线程的上下文信息(PCB[^PCB]和TCB[^TCB])。线程的创建、终止和切换都是通过系统调用的方式来进行,需要从用户态转换到系统态,由内核来完成,系统开销较大。

用户态和内核态

两种CPU状态:内核态(Kernel Mode,运行操作系统程序)、用户态(User Mode,运行用户程序 )

指令划分

特权指令:只能由操作系统使用、用户程序不能使用的指令。 举例:启动I/O 内存清零 修改程序状态字 设置时钟 允许/禁止终端 停机

非特权指令:用户程序可以使用的指令。 举例:控制转移 算数运算 取数指令 访管指令(使用户程序从用户态陷入内核态)

特权级别

特权环:R0、R1、R2和R3

R0相当于内核态,R3相当于用户态;

不同级别能够运行不同的指令集合;

CPU状态之间的转换

用户态 ->内核态:唯一途径是通过中断、异常、陷入机制(访管指令)

内核态 ->用户态:设置程序状态字PSW

内核态与用户态的区别

内核态与用户态是操作系统的两种运行级别,当程序运行在3级特权级上时,就可以称之为运行在用户态。因为这是最低特权级,是普通的用户进程运行的特权级,大部分用户直接面对的程序都是运行在用户态;当程序运行在0级特权级上时,就可以称之为运行在内核态。

运行在用户态下的程序不能直接访问操作系统内核数据结构和程序。当我们在系统中执行一个程序时,大部分时间是运行在用户态下的,在其需要操作系统帮助完成某些它没有权力和能力完成的工作时就会切换到内核态。

这两种状态的主要差别是:处于用户态执行时,进程所能访问的内存空间和对象受到限制,其所处于占有的处理机是可被抢占的 ;而处于核心态执行中的进程,则能访问所有的内存空间和对象,且所占有的处理机是不允许被抢占的

并发和并行

并发

Concurrent,在操作系统中,一个时间段里有几个程序都处于已启动运行到运行完成之间,且这几个程序在同一个处理机上完成。

并行

Parallel,当系统有一个以上CPU时,一个CPU执行一个进程,另一个CPU可以执行另一个进程,两个进程互不抢夺CPU资源,可以同时进行。

课后作业

  1. 操作系统的四个特征是什么?分别是什么含义?
  • 答:1、并发:两个或者多个事件在同一时间间隔内发生;2、共享:系统内资源可供多个并发进程共同使用;3、异步:进程以不可预知的速度向前推进;4、虚拟:通过某种技术把一个物理实体变成若干个逻辑上的对应物。
  1. 什么是操作系统内核?内核的主要功能是什么?
  • 答:内核是操作系统最基本部分。主要功能是为众多应用程序提供对计算机硬件的安全访问。
  1. 什么是系统调用?系统调用与一般程序有什么不同?
  • 答:系统调用是操作系统内核和用户运行程序之间的接口。不同:运行的状态不同,在程序中的过程一般或都是用户程序,或都是系统程序,都是运行在同一个系统状态的(用户态或内核态)。进入的方式不同,一般程序可以直接由调用过程直接转换到被调用过程,而系统调用则不允许,只能通过一条能产生异常的机器指令("自陷指令"或叫"访管指令")进入操作系统,再转到相应的应用处理程序。返回的方式不同代码层次不同,一般程序是用户级程序,而系统调用是操作系统的代码程序,是系统级程序。^1
  1. 什么是进程,为什么OS要引入进程?
  • 答:进程是一个具有一定独立功能的程序在一个数据集上的一次动态执行的过程;引入进程是为了提高计算机资源的利用率。
  1. 进程的基本状态有哪些?会由什么事件导致进程状态的转化?
  • 答:就绪(Ready)状态、执行(Running)状态、阻塞(Block)状态。等待I/O的结果、等待某一进程提供输入、运行进程用完时间片、高优先级进中断低优先级线程、调度程序选择新进程运行、等待事件发生。
  1. 什么是临界资源?什么是临界区?
  • 答:需要互斥访问的共享资源为临界资源。完成对共享内存和共享资源的访问工作叫做临界区。
  1. 什么是忙等?它有什么缺点?
  • 答:一个进程位于其临界区内时,任何试图进入其临界区的进程都必须在其进入代码中持续地循环。容易造成资源利用率低,系统阻塞。
  1. m个共享进程共享一个临界资源,问信号量的变化范围。
  • 答:信号量初始值为1,每进行一次P操作则其值减1,每进行一次V操作则其值加1,当有一个进程获得资源,其他m–1个进程在等待队列中时,其值为-(m-1)
  1. 什么是进程的同步?它包含哪两种形式?什么是临界资源、临界区?
  • 答:进程的同步是指:在多道程序环境下,进程是并发执行的,不同进程之间具有不同的互相制约条件。两种形式:同步代码块(被同步关键字封装的代码) 、同步函数(被同步关键字修饰的函数)。
  1. 男女生共同使用公共洗澡间。规则是:洗澡间门上有可以翻的牌子,牌子分别为“无人”、“男”“女”。若来洗澡的同学发现牌子显示为“无人”,则可以把牌子翻成和自己一样的性别,然后入室洗澡。若来洗澡的同学发现牌子和自己的性别相同,可以直接入室洗澡。若来洗澡的同学发现牌子和自己的性别不同,则须在室外等待。最后一个洗澡的同学离开洗澡间时需要将牌子翻成“无人”。请使用信号量和PV操作,设计男生和女生的同步机制。
  • 答:

    //空闲资源数
    semaph mutex=1;
    //占用浴室男生数,占用浴室女生数
    int S_man=0,S_women=0;
    //等待的男生数,等待的女生数
    int man_wait = 0,women_wait = 0;
    
    //男生想要进入浴室
    void man_want_entry(){
      if(S_women==0){
         P(mutex);
         S_man++;
         洗澡...
         man_leave_bathroom();
      }else{
          man_wait++;
      }
    }
    
    //男生离开浴室
    void man_leave_bathroom(){
      S_man--;
      V(mutex);
    }
    
    //女生想要进入浴室
    void woman_want_entry(){
      P(mutex);
      if
    }
    
  1. 某机房有N台电脑。门口有一个刷卡机。学生上机时,必须在刷卡机上刷卡登录,下机时也必须在刷卡机上刷卡结算费用。请用信号量方法给来上机的同学设计同步机制。

  2. 线程是什么?线程主要包含什么内容?内核级线程和用户级线程是什么?

    答:线程是操作系统能够进行运算调度的最小单位。主要包含线程ID、程序计数器、寄存器组合堆栈。内核级线程是由内核管理的线程。用户级线程是指不需要内核支持而在用户程序中实现的线程。

处理机调度和死锁

处理机调度的基本概念

处理 一个CPU中有多个进程的竞争(选择一个进程将处理机分配给它) 称为 调度程序, 该程序使用的算法叫做 调度算法

三种调度

进程调度(初级调度)、内存调度(中级调度)、作业调度(高级调度)

  • 进程调度(内存—>CPU)

    频率最高。按照某种调度算法,从就绪队列选择一个进程分配给处理机。

  • 内存调度(外存—>内存)

    频率中等。按照某种调度算法,从 挂起队列 选择合适进程将其数据调回内存。

  • 作业调度(外存—>内存)

    频率最低。按照某种调度算法,从 后备队列 中选择合适的作业将其调入内存,并为其创建进程(PCB)。

image-20220324100005952

进程行为

进程分为计算密集型(CPU-Bound)和I/O密集型(I/O-Bound)。

image-20220411083017883

CPU的提高比磁盘更快?越来越多的进程倾向于IO密集型

调度算法

FCFS调度算法

批处理系统的先来先服务调度算法(FCFS, First come First Served或叫FIFO First In First Out),按照作业到达的先后次序进行调度。

优点:简单,易于实现,如排队。

缺点:若出现长作业出现在短作业之前的情况,会增加平均周转时间

image-20220413143429011

image-20220413143446410

SJF调度算法

批处理系统的短作业优先调度算法(SJF, Shortest Job First)。

优点:减少了平均周转时间

缺点:大作业的的周转时间变长,不适合一些大项目??

两种实现方案

  • 不可抢占方式

    当前作业运行时不会被打断直到运行完毕或阻塞时,才让出CPU。

  • 可抢占方式

    当一个新的短作业到来时,若其运行时间小于当前正在运行作业的 剩余时间,则抢占CPU运行。(此方式也叫SRTF,Shortest Remaining Time First)

不可抢占式SJF例题,求平均周转时间

作业 进入时刻(H) 运行时间(H)
1 8 2
2 8.5 0.5
3 9 0.1
4 9.5 0.2

​ 例题作业

image-20220413144946937

抢占式SJF例题,求平均等待时间

image-20220413145021926

HRRN调度算法

批处理系统的最高响应比作业优先算法(HRRN, Highest Response Ratio Next)

优点:综合平衡了FCFS和SJF

响应比 R = 响应时间/需运行时间=1+已等待时间 / 需运行时间。

作业 进入时刻(H) 运行时间(H)
1 8 2
2 8.5 0.5
3 9 0.1
4 9.5 0.2

​ 例题作业

image-20220413152036504

RR调度算法

交互式系统的时间片轮转调度算法(RR,Round-Robin)

MQ调度算法

多级队列调度算法(MQ,Multilevel Queue)

多级反馈算法

实时调度

多处理系统的调度

死锁

含义

每个进程都占用着若干个资源,同时又在等待得到该组进程中另一进程所占用的资源,因而造成的所有进程都无法进展下去的现象。这一组进程就称为死锁进程。

计算机资源

有:CPU、时钟、IO设备、内存空间、数据库记录等。

资源分为两大类:

  • 可抢占的

    存储器、内存、CPU等。当进程正在使用该类型资源时,抢占不会造成任何不良影响。

  • 不可抢占的

    刻录机、光盘、磁带机、打印机等。当一个进程正在使用该类型资源时,不可强行抢占,否则会导致进程运行失败。

注意:不可抢占性资源是临界资源,但是临界资源不是不可抢占性资源

死锁主要由不可抢占资源引起

死锁产生的原因

  • 资源有限

    进程中有多个共享资源如打印机、公共队列等

  • 并发进程间的推进顺序不当

    请求和释放资源的顺序不当,会导致产生进程死锁

预防死锁

死锁的检测和解除

课后作业

  1. 线程是什么?线程主要包含什么内容?内核级线程和用户级线程是什么?

    答:线程是操作系统能够进行运算调度的最小单位。线程的实体包括程序、数据和TCB。内核级线程是,用户级线程是在用户空间上实现,不依赖于系统内核。内核级线程是系统内核管理的线程,由内核完成调度。

  2. 假定在一台处理机上执行下表所示的作业,假定这些作业在0时刻,以1,2,3,4,5的次序顺序到达。说明分别用FCFS、RR(时间片1)、SJF、以及非抢占式优先级(优先级1最高)调度算法,给出平均周转时间。

    作业 执行时间 优先级
    1 10 3
    2 1 1
    3 2 3
    4 1 4
    5 5 2

    FCFS:

    T = (10+10+11+11+15)/5=11.4

    RR:

    T = (19+1+5+1+10)/5 = 11.2

    SJF:

    • 抢占式:T = ()

    • 非抢占式: T = ()

    非抢占式优先级:T = (10+10+17+17+12)/5 = 13.2

  3. 一带闸门的运河,其上有两架吊桥。吊桥坐落在一条公路上,为使该公路避开一块沼泽地而令其横跨运河两次。运河和公路的交通都是单方向的。运河上的基本运输由驳船担负。在一艘驳船接近吊桥A时就拉汽笛警告,若桥上无车辆,吊桥就吊起,直到驳船尾部通过此桥为止。对吊桥B也按同样次序处理。

    • 一艘典型驳船的长度为200米,当它在河上航行时是否会产生死锁?若会,其理由是什么?

      答:会产生,假设A无车辆,迪奥条吊起驳船通过100米到达B,若此时B上有车辆,会发生A处吊桥不放下,汽车无法通过,B处吊桥不吊起驳船无法通过的现象。

    • 如何能克服一个可能的死锁?请提出一个防止死锁的办法。

      答:限制驳船的大小不超过100米;当AB上无车辆时且有驳船通过时,同时吊起AB桥。

    • 如何利用信号灯上的P、V操作实现车辆和驳船的同步?

      答:

      int p,v

      image-20220410221633012

  4. 设系统中有三种类型的资源(A、B、C)和五个进程(P1、P2、P3、P4、P5),A资源的数量为17,B资源的数量为5,C资源的数量为20。在T0时刻系统状态如下表所示。系统采用银行家算法实施死锁避免策略。

    • T0时刻是否为安全状态若是,请给出安全序列。
    • 在T0时刻若进程P2请求资源(0, 3, 4),是否能实施资源分配为什么
    • 在(2)的基础上,若进程P4请求资源(2, 0, 1),是否能实施资源分配,为什么
    • 在(3)的基础上,若进程P2请求资源(0, 2, 0),是否能实施资源分配,为什么
    MAX ALLOCTION
    A B C A B C
    P1 5 5 9 2 1 2
    P2 5 3 6 4 0 2
    P3 4 0 11 4 0 5
    P4 4 2 5 2 0 4
    P5 4 2 4 3 1 4

存储器管理

程序的装入和链接

buffer和cache的解释

  • A buffer is something that has yet to be "written" to disk.

  • A cache is something that has been "read" from the disk and stored for later use.

也就是说buffer是用于存放要输出到disk(块设备)的数据的,而cache存放从disk上读出的数据。这二者是为了提高IO性能的,并由OS管理。

连续分配方式

分页存储管理

分页系统的地址转换机制

image-20220414090249801

分段存储管理

虚拟存储器的基本概念

请求分页存储管理方式

页面置换算法

请求分段存储管理方式

课后作业

  1. 什么是逻辑地址,什么是物理地址?

    答:逻辑地址是CPU所生成的地址。加载到内存地址寄存器中的地址,内存单元的真正地址。

  2. 什么是地址重定位?动态分区存储和分页存储如何进行地址重定位?

    答:地址重定向是把程序的逻辑地址空间转变为内存中的实际物理地址空间的过程。动态分区存储在程序运行时CPU每次访问内存单元才进行地址变换。分页存储

  3. 相对于分区存储管理,分页存储管理的优势是什么?分页过大或过小会带来什么问题?

    答:使得一个程序的逻辑地址可以分布在若干个离散的内存块上,减少内碎片和外碎片,提高内存利用率。过大会导致页内碎片增多。过小导致进程页表过长,占用大量内存,还降低页面换进换出的效率。

  4. 如何管理内存块的分配与回收?分别以内存分区表和位图来说明。

    答:

  5. 编程题:求m个进程(序号0到m-1), n个资源情况下,所有的安全序列。

    输入

    m,n
    m*n 矩阵 max
    m*n 矩阵 allo
    n维向量 avai

    输出所有安全序列

[^PCB]: (Process Control Block,PCB,进程控制块)
[^IPC]: (InterProcess Communication,IPC,)
[^条件变量]: (Condition Variables,条件变量)
[^ACK]: (Acknowledge character,ACK,确认字符)
[^TCB]: (Thread Control Block,TCB,线程控制块 )

本人本着学习交流的态度,恳请大家友好留言。
内容为个人笔记和记录,不保证其正确性,请慎用。
如有不足,望指正。如有侵权,请在留言板联系我。
文章作者:秃秃不是兔兔,如需引用,请标注原文地址:https://wangwangyz.site/archives/549
暂无留言,来做第一个留言的人吧♥

发表评论 编辑评论


				

您的电子邮箱地址不会被公开,用于有回复时通知您。*为必填项

|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇