并发:同一段时间内有多个进程并发执行。
共享:系统的资源能被多个同时执行的进程或线程共享。
虚拟:通过时分复用或空分复用技术将一个物理实体虚拟为多个。
异步:系统中的进程是以不可预知的速度进行,与按序执行的同步相反。
进程是进程实体的运行过程,是系统进行资源分配和调度的独立单位;
线程是比进程更小的可独立运行的单位,可以看作轻量级进程,引入线程的目的是为了减小并发执行过程中的开销,增加并发率。一个进程内可以有多个线程。
两者的对比:
调度方面:线程是独立的系统调度单位,而进程作为资源的拥有单位。并发性方面:进程间可以并发,一个进程内的多个线程也可以并发。资源方面:进程是基本的资源拥有单位,线程能访问所属进程的资源。系统开销方面:创建或撤销进程,需要回收PCB和系统资源,切换时也要保存和恢复CPU环境,开销比较大。而线程的切换不涉及到太多资源的更改,开销小。就绪态,运行态,阻塞态。
就绪态–>运行态:CPU空间,进程被调度。运行态–>就绪态:时间片用完,被抢占。运行态–>阻塞态:等待资源分配,如IO设备。阻塞态–>就绪态:资源分配完毕,如IO操作结束。进程通信指的是进程之间交换数据的方式。进程通信分为低级通信和高级通信。
低级通信通过信号量方式。高级通信方式包括:共享存储、消息传递、管道通信。
信号量:能保证某资源被互斥访问,或控制被访问的顺序(同步)。
共享存储:在进程之间有一块共享内存区域可直接访问,通过对这个区域的读操作或写操作来实现数据共享,这个过程是互斥的。
消息传递:进程间以格式化的消息为单位进行数据交换。有直接通信方式和间接通信方式两种,直接通信方式是发送进程直接将消息发送给接收进程缓冲队列,接收进程从缓冲队列中取得消息。间接通信方式是将消息发送到一个中间实体中,相当于信箱,接收进程从实体中取得消息。
管道通信:管道,就是指连接读进程和写进程的一个共享文件,然后进行半双工地读写文件。
进程同步指的是多个并发进程的按照某种顺序执行。
互斥量:拥有互斥量的进程才能访问资源。互斥量对象只有一个,所以保证公共资源不会被多个线程同时访问。信号量:允许有限个进程访问同一资源,信号量每分配一个减一,直到为0时,就不能继续分配。等待/唤醒事件:通过唤醒的方式来控制多个进程的执行顺序。先来先服务算法:按顺序执行进程,优点是公平,缺点是短作业会等待较长时间。
短作业优先算法:选择处理时间最短的先执行,优点是平均等待时间短,周转时间更短,缺点是长作业会一直排在后面,不公平,还可能会造成饥饿。
高相应比算法:响应比=执行时间+等待时间/执行时间,相应比越高,越先执行。优先是综合考虑了等待时间和处理时间。当等待时间相同时,处理时间越短的越先执行;当处理时间相同时,先来的先执行。
时间片轮转:给每个进程分配时间片,按到达顺序,循环执行。优点是公平,而且每个进程都能被执行到。
优先级调度算法:根据上层设置的优先级来决定执行顺序。
多级反馈队列调度算法:是一个效率很高的调度算法。设有多级队列,时间片长度由小到大,优先级由高到低。当有新进程时,加入到优先级最高队列,执行后移动到低一级的队列中。优先执行高优先级队列中的进程,直到高优先级为空,再执行低优先级的进程。
前三种是批处理操作系统常用,后三种倾向于交互式操作系统。
每个进程中访问临界资源的那段程序称为临界区,一次仅允许一个进程使用的资源称为临界资源。
解决冲突方法:
忙则等待:当临界资源正在被访问时,不允许其他进程访问临界资源。
闲则让进:当临界资源空闲时,让需要访问他的进程来访问它。
有限访问:一个进程访问临界资源的时间是有限的,不能一直占用。
让权等待:当进程等待许久一直得不到访问临界资源的机会,应该主动让出,避免出现“忙等”现象。
死锁是在多个运行的进程中,因为资源的不合理分配而使得他们互相等待别人手里的资源,导致多个进程进入阻塞状态。
互斥:他们争抢的资源是不能同时使用的;非剥夺:进程间不会剥夺这些资源,只能自愿释放;占有并保持申请:一个进程至少占有一个资源,并捏着不放,继续申请其他资源;循环等待:进程之间形成头尾相连的资源等待链;死锁预防 就是确保死锁的四个必要条件中至少一个不满足,就能预防死锁的发生。
破坏互斥条件:将某些互斥资源变为共享资源,但大部分资源不允许同时使用,无实用价值。破坏非抢占:允许进程强行剥夺资源,但这样实现困难,而且会降低性能。破坏持有和申请:只有在系统能满足进程所需的所有资源时,才进行分配。但进程的申请资源过程是动态的,无法预知他所需的所有资源。破坏循环等待:给资源编号,实行有序分配,只允许按递增顺序申请资源。但是,资源的加入,删除导致编号过程复杂,而且进程使用资源的过程可能是逆序的,就导致一些资源空闲,降低了效率。死锁避免 当进程申请资源时,检测资源分配后系统是不是安全状态,就是说,存在一个安全分配序列,使得系统能够分配各个进程所需的资源。如银行家算法。
死锁检测与解除 允许进程运行过程中出现死锁,在发生死锁后,通过某种方法检测出,并采取相关措施解除死锁,比如终止所有死锁进程资源,或一次终止一个直到死锁解除。或者剥夺某些死锁进程的资源。
分页,分段都是内存的非连续分配方式。
分页,指的是将进程的逻辑地址分为大小固定的页,然后每一页对应着一块大小固定的物理内存块,这些物理内存块可以是离散的。 分段,指的是将进程的逻辑地址分为大小不固定的段,每一个段对应着一块离散的物理内存块。
两者的区别是:
目的方面:分页是由系统决定,为了提高内存利用率。分段是从用户提出的,为了更好满足用户的需要。大小方面:页的大小是固定的,段的长度不固定,由用户编写的程序决定。地址形式方面:页向用户提供的是一维地址空间。段提供的二维地址空间(段号+段内地址)。信息共享方面:分段便于信息的共享,因为根据段号和段长很容易确定区域,而分页在信息共享方面存在限制,因为共享资源的分布是打散的。内存碎片方面:分页不会产生外部碎片,因为页的大小固定,但可能产生内部碎片,就是一个页填充不满。分段不会产生内部碎片,因为段大小可变,但会产生外部碎片。虚拟内存是一种内存扩容技术。
它的思想是,一个运行的进程,不必要把所有的数据全部放入内存中,而是需要用到的时候在从外部调入内存中。而且进程的数据不需要一直保存在内存中,当内存空间不够时,部分数据可以被系统调出内存。
所以在用户的角度上看的内存的大小远远大于实际内存的大小。
好处:在内存中可以保留多个进程的数据,系统并发度提高。
内部碎片指的是分配给某进程的内存区域中,有些部分没有用上。
外部碎片指的是在动态分配内存过程中,会产生一些很小的空闲内存区域,难以被利用。
先进先出算法:淘汰最先进入物理内存块的页面。这个算法实现简单,但效率低下,还存在一种问题,当分配的内存块变多时,缺页中断次数可能变多。
最佳置换算法:淘汰最久不会被访问的页面。这个算法的前提是,已经确定页面的访问序列。但进程要访问哪些页面是不能提前预知的,所以这个算法无法实现。
最近最久未使用算法:淘汰最近最久未使用的页面,和最佳置换算法的方向相反,这个是往前面找。但这个算法实现困难,需要专门的硬件支持。
时钟置换算法:给每个页表项增加访问标记和修改标记,循环遍历页面,优先选择未被访问和未被修改的页面进行淘汰。
颠簸指的是刚刚换出的页面马上就又被换入,刚刚换入的页面马上被换出,从而导致运行效率急剧下降。 这是因为进程拥有的物理内存块数小于频繁使用的页面数。应当增加物理内存块数。
中断是指程序在运行过程中,因为某些事件,需要暂停当前工作,并处理其他事件,处理完毕后,又要恢复之前的状态。
处理过程:
保护现场:将当前执行的程序相关数据保存到寄存器。开中断:以便中断时响应更高级别的中断请求。中断处理:执行中断的处理程序。关中断:保证在恢复现场时不受其他影响。恢复现场:从寄存器中读出数据,恢复中断前的状态。