软考架构师(2)——操做系统基础知识(上)

全文连接:https://www.cnblogs.com/nullering/p/9684820.htmlhtml

0:整体概述

操做系统须要掌握如下五个方面linux

1:进程管理:主要掌握进程的状态,前驱图,PV操做以及死锁的相关问题算法

2:存储管理:主要掌握段页式存储,局部性原理,页面置换算法缓存

3:文件管理:索引文件,位示图安全

4:做业管理:做业调度算法网络

5:设备管理:数据传输控制,虚设备与SPOOLING技术数据结构

一:进程管理

1:名词解析

1):中断:中断是指计算机运行过程当中,出现某些意外状况需主机干预时,机器能自动中止正在运行的程序并转入处理新状况的程序,处理完毕后又返回原被暂停的程序继续运行。在如今的多任务操做系统中,cpu却只能是单任务的,这是就必须用到中断进行进程调度。多线程

2):进程:进程是一个具备独立功能的程序关于某个数据集合的一次运行活动。它能够申请和拥有系统资源,是一个动态的概念,是一个活动的实体。并发

3):做业:做业是用户向计算机提交的相关任务的集合,区别于进程,进程则是具体完成用户任务的运行实体,分配计算机资源的基本单位。异步

4):进程控制块(PCB):进程控制块(PCB)是系统为了管理进程设置的一个专门的数据结构。系统用它来记录进程的外部特征,描述进程的运动变化过程。同时,系统能够利用PCB来控制和管理进程,因此说,PCB(进程控制块)是系统感知进程存在的惟一标志。

2:进程的生命周期

进程是一个动态的实体,从建立到消亡,进程通常有三种状态,但也有的有五态

+运行状态(Running):一个进程正在处理机上运行,

+就绪状态(Ready):进程已经得到了除cpu之外的全部其余资源,在就绪队列中等待cpu调度

+阻塞状态:进程因等待所须要的资源或I/O完成而放弃处理机,或则进程原本就不拥有处理机,且其余资源也不知足

进程挂起

挂起(等待,阻塞)进程在操做系统中能够定义为暂时被淘汰出内存的进程,机器的资源是有限的,在资源不足的状况下,操做系统对在内存中的程序进行合理的安排,其中有的进程被暂时调离出内存,当条件容许的时候,会被操做系统再次调回内存,从新进入就绪态

 3:进程调度

按照必定的策略选择一个处于就绪状态的进程使其得到处理机的执行。常见的调度算法有:

(1)先来先服务调度算法(FCFS , First Come First Served) 

特色:适合长做业,不利于段做业;适合CPU繁忙型做业,不利于I/O繁忙型做业。

(2)短做业优先(SJF, Shortest Job First)
特色:提升了系统吞吐量;对长做业不利,有可能长时间得不到执行。

(3)短进程优先调度算法(SPF):

(3)优先级调度(HPF , Highest Priority First)
特色:进程调度每次将处理机分配给具备最高优先级的就绪进程。最高优先级算法可与不一样的CPU方式结合造成“可抢占式”最高优先级算法和“不可抢占式”最高优先级算法。经常使用于批处理系统。

(4)最高响应比优先(HRN,Highest Response_ratio Next)
特色:HRN是对FCFS方式和SJF方式的一种综合平衡。
响应比R=(W + T)/ T . 其中W为等待时间,T为须要执行时间。

(5)时间片轮转算法(RR,Round Robin)
特色:时间片轮转调度是一种最古老,最简单,最公平且使用最广的算法。将CPU的处理时间划分红一个个的时间片,就绪队列中的进程轮流运行一个时间片。当时间片结束时,就强迫进程让出CPU,该进程进入就绪队列,等待下一次调度,同时,进程调度又去选择就绪队列中的一个进程,分配给它一个时间片,以投入运行。

(6)最短剩余时间优先调度算法:

(7)多级队列轮转算法:几种调度算法的结合形式多级队列方式。

(7)多级反馈队列调度算法:

4:进程同步与互斥

1:关系

进程由于协同实现用户任务或则要共享计算机资源,在进程之间存在着相互制约的关系。

(1)同步关系:咱们把异步环境下的一组并发进程因直接制约而互相发送消息、进行互相合做、互相等待,使得各进程按必定的速度执行的过程称为进程间的同步。具备同步关系的一组并发进程称为合做进程,合做进程间互相发送的信号称为消息或事件。 

(2)互斥关系:两个或两个以上的进程,不能同时进入关于同一组共享变量的临界区域,不然可能发生与时间有关的错误,这种现象被称做进程互斥· 也就是说,一个进程正在访问临界资源,另外一个要访问该资源的进程必须等待。

(3)解决同步互斥问题——信号量机制:信号量就好像信号灯,若是一个资源最多容许三个进程同时访问,这时信号量初值设为三,当有一个进程获取了该资源,进行P操做,信号量减一,这个进程完成后释放该资源,进行V操做,信号量加一,若是当另外一个进程获取该资源时,信号量小于零,则进入等待状态。

(4)管程:互斥使用

2:进程间的通讯

  • 管道( pipe ):管道是一种半双工的通讯方式,数据只能单向流动,并且只能在具备亲缘关系的进程间使用。进程的亲缘关系一般是指父子进程关系。有名管道(named pipe)也是半双工的通讯方式,可是它容许无亲缘关系进程间的通讯。
  • 信号量( semophore ):信号量是一个计数器,能够用来控制多个进程对共享资源的访问。它常做为一种锁机制,防止某进程正在访问共享资源时,其余进程也访问该资源。所以,主要做为进程间以及同一进程内不一样线程之间的同步手段。
  • 消息队列( message queue ):消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。
  • 信号( signal ):信号是比较复杂的通讯方式,用于通知接受进程有某种事件发生,除了用于进程间通讯外,进程还能够发送信号给进程自己;linux除了支持Unix早期信号语义函数sigal外,还支持语义符合Posix.1标准的信号函数sigaction(实际上,该函数是基于BSD的,BSD为了实现可靠信号机制,又可以统一对外接口,用sigaction函数从新实现了signal函数)。
  • 共享内存( shared memory ):共享内存就是映射一段能被其余进程所访问的内存,这段共享内存由一个进程建立,但多个进程均可以访问。共享内存是最快的 IPC 方式,它是针对其余进程间通讯方式运行效率低而专门设计的。它每每与其余通讯机制,如信号两,配合使用,来实现进程间的同步和通讯。
  • 套接字( socket ):套解口也是一种进程间通讯机制,与其余通讯机制不一样的是,它可用于不一样及其间的进程通讯。

3:线程同步(必定要会生产者,消费者问题,彻底消化理解)

互斥锁:

  提供对临界资源的保护,当多线程试图访问临界资源时,都必须经过获取锁的方式来访问临界资源。(临界资源:是被多线程共享的资源) 

条件变量:

  提供线程之间的一种通知机制,当某一条件知足时,线程A能够通知阻塞在条件变量上的线程B,B所指望的条件已经知足,能够解除在条件变量上的阻塞操做,继续作其余事情。

信号量:

  提供对临界资源的安全分配。若是存在多份临界资源,在多个线程争抢临界资源的状况下,向线程提供安全分配临界资源的方法。若是临界资源的数量为1,将退化为锁。 

令牌:

  一种高级的线程同步的方法。它既提供锁的安全访问临界资源的功能,又利用了条件变量使得线程争夺临界资源时是有序的

 生产者与消费者问题:

这个问题写在这可能写不完,因此不写了,简单来讲就是想获得就P,不用了就V

前趋图:

 

 

 

 

4:线程的实现方式:

  因为须要限制不一样的程序之间的访问能力, 防止他们获取别的程序的内存数据, 或者获取外围设备的数据, 并发送到网络, CPU划分出两个权限等级 – 用户态 和内核态。

  处于用户态执行中的进程,其所能访问的内存空间和对象受到限制,其所处于占有的处理机是可被抢占的; 
  处于核心态执行中的进程,其能访问全部的内存空间和对象,且所占有的处理机是不容许被抢占的。

  • 在用户空间中实现线程
    (1)特色:内核对线程包一无所知。从内核角度考虑,就是按正常的方式管理,即单线程进程(存在运行时系统)
    (2)优势:
    用户级线程包能够在不支持线程的操做系统上实现
    保存线程状态的过程和调用程序都只是本地过程,故启动它们比进程内核调用效率更高
    不须要陷阱,不须要上下文切换,也不须要对内存高速缓存进行刷新,使得线程调用很是快捷
    (3)缺点:
    线程发生I/O或页面故障引发的阻塞时,若是调用阻塞系统调用则内核因为不知道有多线程的存在,而会阻塞整个进程从而阻塞全部线程
    一个单独的进程内部,没有时钟中断,因此不可能用轮转调度的方式调度线程
  • 在内核中实现线程
    (1)特色:
    当某个线程但愿建立一个新线程或撤销一个已有线程时,它进行一个系统调用
    (2)优势:
    全部可以阻塞线程的调用都以系统调用的形式实现,代价可观
    当一个线程阻塞时,内核根据选择能够运行另外一个进程的线程,而用户空间实现的线程中,运行时系统始终运行本身进程中的线程
    说明:因为内核建立线程代价大,有些系统采起“环保”的处理方式:线程被撤销时,标记为不可用,可是内部数据结构没有受到影响;稍后,在必须启用一个新线程时,从新启动某个旧线程,从而节省了开销。

7:死锁

死锁指的是多个进程因竞争资源而形成的一种僵局(互相等待),若无外力做用,这些进程都将没法向前推动。 

  必要条件:

    • 互斥条件:一个资源每次只能被一个进程使用。
    • 请求与保持条件:一个进程因请求资源而阻塞时,对已得到的资源保持不放。
    • 不剥夺条件:进程已得到的资源,在末使用完以前,不能强行剥夺。
    • 环路等待条件:若干进程之间造成一种头尾相接的循环等待资源关系。

  处理死锁的四种方式:

    • 预防死锁:经过设置某些限制条件,去破坏产生死锁的四个必要条件中的一个或者几个,来预防发生死锁。
    • 避免死锁:在资源的动态分配过程当中,用某种方法去防止系统进入不安全状态,从而避免发生死锁(最表明性,银行家算法)。
    • 检测死锁:容许存在死锁。经过系统所设置的检测机构,及时地检测出死锁的发生,并精确地肯定与死锁有关的进程和资源,而后采起适当措施,从系统中将已发生的死锁清除
    • 解除死锁:当检测到系统中已发生死锁时,须将进程从死锁状态中解脱出来。

银行家算法 

基本思想:分配资源以前,判断系统是不是安全的;如果,才分配。每分配一次资源就测试一次是否安全。
咱们能够把操做系统看做是银行家,操做系统管理的资源至关于银行家管理的资金,进程向操做系统请求分配资源至关于用户向银行家贷款。
为保证资金的安全,银行家规定:
(1)当一个顾客对资金的最大需求量不超过银行家现有的资金时就可接纳该顾客(试探性分配)。
(2)顾客能够分期贷款,但贷款的总数不能超过最大需求量(可能一次并不能知足所须要的所有资源)。
(3)当银行家现有的资金不能知足顾客尚需的贷款数额时,对顾客的贷款可推迟支付,但总能使顾客在有限的时间里获得贷款(不存在死锁)。
(4)当顾客获得所需的所有资金后,必定能在有限的时间里归还全部的资金(运行后释放)。
本算法在理论上是出色的,能很是有效地避免死锁,但从某种意义上说,它缺少实用价值,由于不多有进程可以在运行前就知道其所需资源的最大值,且进程数也不是固定的,每每在不断地变化(如新用户登陆或退出),何况原来可用的资源也可能忽然间变成不可用(如打印机、磁带机可能被损坏)。

相关文章
相关标签/搜索