操作系统概述

                                                 操作系统概述


操作系统:指控制管理整个计算机系统的软硬件资源,合理组织调度计算机的工作和资源分配,以提供给用户和其他软件方便的接口和环境的程序集合
操作系统特性:并发、共享、虚拟、  异步
主要功能:处理器管理、存储器管理、  文件管理、设备管理、用户接口
发展:手工操作-->批处理-->分时操作系统-->实时操作系统-->网络/分布式系统-->个人操作系统
运行机制:时钟管理、中断机制、原语、系统控制的数据结构及处理
中断和异常:中断指与当前处理机处理的程序无关,并即刻占用处理机进行处理的事件;异常源自于CPU执行指令内部的事件,- -旦出现立即处理(如算数溢出、越界、缺页等)
系统调用:运行在核心态的特殊公共子程序,主要用于:设备、文件、进行、内存等管理

进程和线程区别
进程:是进程实体运行的过程,是系统进行资源分配和调度的一个独立单位。
使多个程序可以并发的执行,提高系统的资源利用率。
特性:动态、  并发、独立、异步;状态:就绪、执行、  阻塞线程:进程的一个实体, CPU调度和分配的基本单位,比进程更小且能独立运行,线程不直接拥有系统资源,线程间共享进程的系统资源。
联系:都能够并发执行;进程可以创建进程和线程; -个进程至少有一个线程;线程依赖于进程
区别
1.线程是更小的调度单位,是CPU调度的基本单位,具有更高的并发性
2.进程持有系统资源,而线程基本不拥有系统资源(除程序必须的栈、程序指针)。线程可以访问进程的资源。线程间可以共享内存资源
3.进程创建/销毁/切换,需要创建/回收PCB (进程控制块)、系统资源,保存/恢复CPU环境,而线程仅需要保存/恢复少量寄存器,代价更小

  进程任务调度
时间片轮转调度算法( RR) : 給毎个进程固定的执行时间,根据一定的先后順序辻进程在単位时间片内轮流抛行,不考慮迸程等待吋虑进程等待时间的执行时间,属于抢占式,适合分时系统。
先来先服务调度算法( FCFS) : 根据进程到达的先后順序执行,不考虑等待时间和执行时间,会发生飢餓現象,属于非抢占式调度,不利于短作业;
优先級调度算法(HPF) :在进程等待队列中选择有限先級最高的来执行; 
多级反馈队列调度算法:将时间片轮转与优先级调度相结合,把进程按优先级分成不同的队列,先按优先级调度,优先级相同的,按时间片轮转;兼顾长短作业,有较好的响应时间。
高响应比优先级调度算法:响应比 = (进程执行时间 + 进程等待时间) / 进程执行时间;有做执行的时间越短,响应比越高;响应比会随着等待时间增加而变大;能够避免饥饿现象;计算响应比开销大。

进程间通信
管道:有名管道和无名管道;无名管道是半双工通信,只能在具有亲缘关系(父子关系)的进程间使用;有名管道也是一种半双工通信,运行无亲缘关系的进程通信信号量:-种计数器,控制多个线程对共享资源的访问;
信号:一种比较复杂的通信方式,用于通知接收进程某个事件的发生
消息队列:消息队列是消息的链表,存放在内核中并由消息队列标识符标识。消息队列是UNIX中进程之间实现共享资源的一种机制,允许进程将格式化的数据流以消息队列形式发送给任意进程
共享内存:映射一段能被其他进程所访问的内存,往往与其他通信机制(如信号量)配合使用,是最快的进程间通信方式
套接字:源IP地址和目的IP地址以及源端口号和目的端口号的组合称为套接字,是一套数据通信的机制和接口;还能够通过网络与不同机器之间进行通信

线程/进程同步
  临界区;通过对多线程串行化来访问公共资源或代码。在任意时刻只允许一个线程对共享资源进行访问,一个线程进入后,其他试图访问公共资源的线程将被挂起,临界区被释放后其他线程才能抢占互斥量:采用互斥对象机制,拥有互斥对象的线程才有访问公共资源的权限。互斥对象只有一个,所能保证公共资源不会同时被多个线程访问。互斥能用于同个进程的线程或者不同进程的线程;
  信号量:信号量通过一个计数器控制对共享资源的访问,信号量的值是一个非负整数,所有通过它的线程都会将该整数减一。如果计数器大于0 ,则访问被允许,计数器减1 ;如果为0 ,则访问被禁止,所有试图通过它的线程都将处于等待状态。定义成PV操作原语( P操作申请资源/V操作释放资源)
  事件 :通过通知操作的方式来保持线程的同步

 死锁的条件及处理方式
  死锁原因:
1.竞争资源:请求同一有限资源的进程数多于可用资源数; 
2.进程推进顺序非法;
  产生必要条件: 
1互斥条件:进程对所分配的资源进行排他性的使用; 
2.请求和保持条件:进程被阻塞的时候并不释放所申请到的资源; 
3.不可剥夺条件:进程对于已经申请到的资源在使用完成之前不可以被剥夺; 
4.环路等待条件:发生死锁的时候存在的一个“进程资源”环形等待链
  死锁处理: 
1. 预防死锁:破坏死锁的必要条件,实现简单,会降低系统资源利用率和吞吐量; 
2.避免死锁:在资源的动态分配中,防止系统进入不安全状态(银行家算法) ; 
3.检测死锁:允许系统运行过程中产生死锁,在死锁发生之后,采用一定的算法进行检测,并确定与死锁相关的资源和进程; 
4.解除死锁:。对检测到的和死锁相关的进程以及资源,通过撤销或者挂起的方式,释放-些资源井将其分配给处于阻塞状态的进程,使其转变为就绪态

操作系统概述
 

  TCP三次握手、四次挥手
  TCP连接建立过程:首先Client端发送连接请求报文,Server段接受连接后回复ACK报文,并为这次连接分配资源。Client端接收到ACK报文后 也向Server段发生ACK报文,并分配资源,这样TCP连接就建立了.
  TCP连接断开过程: Client端发起中断连接请求,也就是发送FIN报文; Server端接到FIN报文后,先发送ACK , Client端就进入FIN_ WAIT状态; Server端确定数据已发送完成,则向Client端发送FIN报文; Client端收到FIN报文后,发送ACK后进入TIME WAIT状态; Server端收到ACK后,关闭连接; Client端等待了2MSL后依然没有收到回复,则证明Server端已正常关闭,Client端也关闭连接。


TCP拥塞控制-慢启动、拥塞避免、快重传、快启动

一般原理:发生拥塞控制的原因:资源(带宽、交换节点的缓存、处理机)的需求>可用资源。

作用:拥塞控制就是为了防止过多的数据注入到网络中,这样可以使网络中的路由器或者链路不至于过载。拥塞控制要做的都有一个前提:就是网络能够承受现有的网络负荷。

对比流量控制:拥塞控制是一个全局的过程,涉及到所有的主机、路由器、以及降低网络相关的所有因素。流量控制往往指点对点通信量的控制。是端对端的问题。

    拥塞窗口:发送方为一个动态变化的窗口叫做拥塞窗口,拥塞窗口的大小取决于网络的拥塞程度。发送方让自己的发送窗口=拥塞窗口,但是发送窗口不是一直等于拥塞窗口的,在网络情况好的时候,拥塞窗口不断的增加,发送方的窗口自然也随着增加,但是接受方的接受能力有限,在发送方的窗口达到某个大小时就不在发生变化了。

    发送方如果知道网络拥塞了呢?发送方发送一些报文段时,如果发送方没有在时间间隔内收到接收方的确认报文段,则就可以人为网络出现了拥塞。

    慢启动算法的思路:主机开发发送数据报时,如果立即将大量的数据注入到网络中,可能会出现网络的拥塞。慢启动算法就是在主机刚开始发送数据报的时候先探测一下网络的状况,如果网络状况良好,发送方每发送一次文段都能正确的接受确认报文段。那么就从小到大的增加拥塞窗口的大小,即增加发送窗口的大小。

    例子:开始发送方先设置cwnd(拥塞窗口)=1,发送第一个报文段M1,接收方接收到M1后,发送方接收到接收方的确认后,把cwnd增加到2,接着发送方发送M2、M3,发送方接收到接收方发送的确认后cwnd增加到4,慢启动算法每经过一个传输轮次(认为发送方都成功接收接收方的确认),拥塞窗口cwnd就加倍。

    拥塞避免:为了防止cwnd增加过快而导致网络拥塞,所以需要设置一个慢开始门限ssthresh状态变量(我也不知道这个到底是什么,就认为他是一个拥塞控制的标识),它的用法:

                   1. 当cwnd < ssthresh,使用慢启动算法,

                   2. 当cwnd > ssthresh,使用拥塞控制算法,停用慢启动算法。

                   3. 当cwnd = ssthresh,这两个算法都可以。

 拥塞避免的思路:是让cwnd缓慢的增加而不是加倍的增长,每经历过一次往返时间就使cwnd增加1,而不是加倍,这样使cwnd缓慢的增长,比慢启动要慢的多。

    无论是慢启动算法还是拥塞避免算法,只要判断网络出现拥塞,就要把慢启动开始门限(ssthresh)设置为设置为发送窗口的一半(>=2),cwnd(拥塞窗口)设置为1,然后在使用慢启动算法,这样做的目的能迅速的减少主机向网络中传输数据,使发生拥塞的路由器能够把队列中堆积的分组处理完毕。拥塞窗口是按照线性的规律增长,比慢启动算法拥塞窗口增长块的多。

  实例:1.TCP连接进行初始化的时候,cwnd=1,ssthresh=16。

             2.在慢启动算法开始时,cwnd的初始值是1,每次发送方收到一个ACK拥塞窗口就增加1,当ssthresh =cwnd时,就启动拥塞控制算法,拥塞窗口按照规律增长,

             3.当cwnd=24时,网络出现超时,发送方收不到确认ACK,此时设置ssthresh=12,(二分之一cwnd),设置cwnd=1,然后开始慢启动算法,当cwnd=ssthresh=12,慢启动算法变为拥塞控制算法,cwnd按照线性的速度进行增长。 

操作系统概述           

     AIMD(加法增大乘法减小)

          1. 乘法减小:无论在慢启动阶段还是在拥塞控制阶段,只要网络出现超时,就是将cwnd置为1,ssthresh置为cwnd的一半,然后开始执行慢启动算法(cwnd<ssthresh)。

         2. 加法增大:当网络频发出现超时情况时,ssthresh就下降的很快,为了减少注入到网络中的分组数,而加法增大是指执行拥塞避免算法后,是拥塞窗口缓慢的增大,以防止网络过早出现拥塞。

       这两个结合起来就是AIMD算法,是使用最广泛的算法。拥塞避免算法不能够完全的避免网络拥塞,通过控制拥塞窗口的大小只能使网络不易出现拥塞。

      快重传:

      快重传算法要求首先接收方收到一个失序的报文段后就立刻发出重复确认,而不要等待自己发送数据时才进行捎带确认。接收方成功的接受了发送方发送来的M1、M2并且分别给发送了ACK,现在接收方没有收到M3,而接收到了M4,显然接收方不能确认M4,因为M4是失序的报文段。如果根据可靠性传输原理接收方什么都不做,但是按照快速重传算法,在收到M4、M5等报文段的时候,不断重复的向发送方发送M2的ACK,如果接收方一连收到三个重复的ACK,那么发送方不必等待重传计时器到期,由于发送方尽早重传未被确认的报文段。

操作系统概述

      快恢复:

       1. 当发送发连续接收到三个确认时,就执行乘法减小算法,把慢启动开始门限(ssthresh)减半,但是接下来并不执行慢开始算法。

       2. 此时不执行慢启动算法,而是把cwnd设置为ssthresh的一半, 然后执行拥塞避免算法,使拥塞窗口缓慢增大。

操作系统概述