并发:同一段时间内多个程序执行(注意区别并行和并发,前者是同一时刻的多个事件,后者是同一时间段内的多个事件)程序员
共享:系统中的资源能够被内存中多个并发执行的进线程共同使用web
虚拟:经过时分复用(如多道程序技术,分时系统)以及空分复用(如虚拟内存)技术实现把一个物理实体虚拟为多个算法
异步:系统中的进程是以走走停停的方式执行的,且以一种不可预知的速度推动安全
处理机管理:处理机分配都是以进程为单位,因此处理机管理也被看作是进程管理。包括进程控制,进程同步,进程通讯和调度(做业调度和进程调度)
存储器管理(或者内存管理):内存分配,内存保护,地址映射,内存扩充
设备管理:管理全部外围设备,包括完成用户的IO请求;为用户进程分配IO设备;提升IO设备利用率;提升IO速度;方便IO的使用
文件管理:管理用户文件和系统文件,方便使用同时保证安全性。包括:文件存储空间管理,目录管理,文件读写管理以及文件共享和保护
提供用户接口:程序接口(如API)和用户接口(如GUI)多线程
二.进程和线程并发
进程的三种基本状态:就绪(Ready)状态,执行(Running)状态,阻塞(Block)状态 (引入的两种常见的状态:建立状态,终止状态)异步
运行状态:进程正在处理机上运行。在单处理机环境下,每一时刻最多只有一个进程处于运行状态。socket
就绪状态:进程已处于准备运行的状态,即进程得到了除处理机以外的一切所需资源,一旦获得处理机便可运行。函数
阻塞状态,又称等待状态:进程正在等待某一事件而暂停运行,如等待某资源为可用(不包括处理机)或等待输入/输出完成。即便处理机空闲,该进程也不能运行。测试
同步机制须要遵循的原则:
1.空闲让进,2.忙则等待,3.有限等待,4.让权等待
经典的进程同步问题:生产者-消费者问题;哲学家进餐问题;读者-写者问题
进程同步的机制:硬件同步机制、信号量机制、管程机制
硬件同步机制:关中断
利用Test-and-Set指令实现互斥(Test-and-Set TS指令:”测试并创建“)
利用Swap指令实现进程互斥(该指令称为对换指令,用于交换两个字的内容)
信号量(Semaphores)机制
管程机制
主要分为:管道、系统IPC(包括消息队列、信号量、共享存储器)、SOCKET、远程过程(函数)调用RPC
管道主要分为:普通管道PIPE 、流管道(s_pipe)、命名管道(name_pipe)
6.请分别简单说一说进程和线程以及它们的区别
7.线程同步的方式有哪些?
线程同步的方式:
当程序运行在3级特权级上时,就能够称之为运行在用户态,由于这是最低特权级,是普通的用户进程运行的特权级,大部分用户直接面对的程序都是运行在用户态;
反之,当程序运行在级特权级上时,就能够称之为运行在内核态。
用户态切换到内核态的3种方式:系统调用,异常,外围设备的中断
9.处理机调度的层次
高级调度(长程调度或做业调度):调度对象是做业,主要用于多道批处理系统中,而在分时和实时系统中不设置高级调度
低级调度(进程调度或短程调度):调度对象是进程,在多道批处理,分时和实时三种类型的OS中,都必须配置这级调度
中级调度:内存调度,引入中级调度的主要目的是,提升内存利用率和系统吞吐量,中级调度实际上就是存储器管理中的对换功能
10.死锁
死锁的定义:所谓死锁就是一个进程集合中的多个进程由于竞争资源,而形成的互相等待现象。
死锁的缘由:系统资源不足;多个进程的推动顺序不合理
死锁的必要条件:
死锁处理:
预防死锁:破坏产生死锁的4个必要条件中的一个或者多个;实现起来比较简单,可是若是限制过于严格会下降系统资源利用率以及吞吐量
避免死锁:在资源的动态分配中,防止系统进入不安全状态(可能产生死锁的状态)-如银行家算法
检测死锁:容许系统运行过程当中产生死锁,在死锁发生以后,采用必定的算法进行检测,并肯定与死锁相关的资源和进程,采起相关方法清除检测到的死锁。实现难度大
解除死锁:与死锁检测配合,将系统从死锁中解脱出来(撤销进程或者剥夺资源)。对检测到的和死锁相关的进程以及资源,经过撤销或者挂起的方式,释放一些资源并将其分配给处于阻塞状态的进程,使其转变为就绪态。实现难度大
FCFS(先来先服务),优先级,时间片轮转,多级反馈
先来先服务调度算法FCFS:既能够做为做业调度算法也能够做为进程调度算法;按做业或者进程到达的前后顺序依次调度;所以对于长做业比较有利;
短做业优先调度算法SJF:做业调度算法,算法从就绪队列中选择估计时间最短的做业进行处理,直到得出结果或者没法继续执行;缺点:不利于长做业;未考虑做业的重要性;运行时间是预估的,并不靠谱 ;
优先级调度算法PSA:基于做业的紧迫程度,由外部赋予做业相应的优先级,调度算法是根据该优先级进行调度的
高相应比优先调度算法HRNN:响应比=(等待时间+要求服务时间)/要求服务时间=响应时间/要求服务时间
时间片轮转调度RR:按到达的前后对进程放入队列中,而后给队首进程分配CPU时间片,时间片用完以后计时器发出中断,暂停当前进程并将其放到队列尾部,循环 ;
多级反馈队列调度算法:目前公认较好的调度算法;设置多个就绪队列并为每一个队列设置不一样的优先级,第一个队列优先级最高,其他依次递减。优先级越高的队列分配的时间片越短,进程到达以后按FCFS放入第一个队列,若是调度执行后没有完成,那么放到第二个队列尾部等待调度,若是第二次调度仍然没有完成,放入第三队列尾部…。只有当前一个队列为空的时候才会去调度下一个队列的进程。
四.存储器管理
连续分配方式:单一连续分配:单道程序环境下
固定分区分配:多道程序系统,每一个分区的大小是固定的
动态分区分配
动态可重定位分区分配 算法四种方式
主要是指动态分区分配时所采用的几种算法。
动态分区分配又称为可变分区分配,它是动态划份内存的分区方法。这种分区方法不预先将内存划分,而是在进程装入内存时,根据进程的大小动态地创建分区,并使分区的大小正好适合进程的须要。所以系统中分区的大小和数目是可变的。
首次适应(First Fit)算法:空闲分区以地址递增的次序连接。分配内存时顺序查找,找到大小能知足要求的第一个空闲分区。
最佳适应(Best Fit)算法:空闲分区按容量递增造成分区链,找到第一个能知足要求的空闲分区。
最坏适应(Worst Fit)算法:又称最大适应(Largest Fit)算法,空闲分区以容量递减的次序连接。找到第一个能知足要求的空闲分区,也就是挑选出最大的分区。
基于索引搜索的动态分区分配算法
快速适应(quick fit)算法:又称为分类搜索法,是将空闲分区根据其容量大小进行分类,对于每一类具备相同容量的全部空闲分区,单独设立一个空闲分区链表
这样系统中存在多个空闲分区链表
伙伴系统(buddy system)
哈希算法:构造一张以空闲分区大小为关键字的哈希表,该表的每个表项记录了一个对应的空闲分区链表表头指针
离散分配方式:将一个进程直接分散地装入到许多不相邻接的分区中,即可充分利用内存空间
离散分配分为三种:分页存储管理方式、分段存储管理方式、段页式存储管理方式
分页存储管理方式:将用户程序的地址空间分为若干个固定大小的区域,称为”页“或”页面“。相应的,也将内存空间分为若干个物理块或页框(frame),页和块的大小相同。这样就能够将用户程序的任一页放入任一物 理块中,实现了离散分配。
把主存空间划分为大小相等且固定的块,块相对较小,做为主存的基本单位。每一个进程也以块为单位进行划分,进程在执行时,以块为单位逐个申请主存中的块空间。
由于程序数据存储在不一样的页面中,而页面又离散的分布在内存中,所以须要一个页表来记录逻辑地址和实际存储地址之间的映射关系,以实现从页号到物理块号的映射。
因为页表也是存储在内存中的,所以和不适用分页管理的存储方式相比,访问分页系统中内存数据须要两次的内存访问(一次是从内存中访问页表,从中找到指定的物理块号,加上页内偏移获得实际物理地址;第二次就是根据第一次获得的物理地址访问内存取出数据)。
为了减小两次访问内存致使的效率影响,分页管理中引入了快表机制,包含快表机制的内存管理中,当要访问内存数据的时候,首先将页号在快表中查询,若是查找到说明要访问的页表项在快表中,那么直接从快表中读取相应的物理块号;若是没有找到,那么访问内存中的页表,从页表中获得物理地址,同时将页表中的该映射表项添加到快表中(可能存在快表换出算法)。
在某些计算机中若是内存的逻辑地址很大,将会致使程序的页表项会不少,而页表在内存中是连续存放的,因此相应的就须要较大的连续内存空间。为了解决这个问题,能够采用两级页表或者多级页表的方法,其中外层页表一次性调入内存且连续存放,内层页表离散存放。相应的访问内存页表的时候须要一次地址变换,访问逻辑地址对应的物理地址的时候也须要一次地址变换,并且一共须要访问内存3次才能够读取一次数据。
分页是为了提升内存利用率,而分段是为了知足程序员在编写代码的时候的一些逻辑需求(好比数据共享,数据保护,动态连接等)。
分段内存管理当中,地址是二维的,一维是段号,一维是段内地址;其中每一个段的长度是不同的,并且每一个段内部都是从0开始编址的。因为分段管理中,每一个段内部是连续内存分配,可是段和段之间是离散分配的,所以也存在一个逻辑地址到物理地址的映射关系,相应的就是段表机制。段表中的每个表项记录了该段在内存中的起始地址和该段的长度。段表能够放在内存中也能够放在寄存器中。
访问内存的时候根据段号和段表项的长度计算当前访问段在段表中的位置,而后访问段表,获得该段的物理地址,根据该物理地址以及段内偏移量就能够获得须要访问的内存。因为也是两次内存访问,因此分段管理中一样引入了联想寄存器。
页是信息的物理单位,是出于系统内存利用率的角度提出的离散分配机制;段是信息的逻辑单位,每一个段含有一组意义完整的信息,是出于用户角度提出的内存管理机制
页的大小是固定的,由系统决定;段的大小是不肯定的,由用户决定
五.虚拟存储器
若是存在一个程序,所需内存空间超过了计算机能够提供的实际内存,那么因为该程序没法装入内存因此也就没法运行。单纯的增长物理内存只能解决一部分问题,可是仍然会出现没法装入单个或者没法同时装入多个程序的问题。可是能够从逻辑的角度扩充内存容量,便可解决上述两种问题。
基于局部性原理,在程序装入时,能够将程序的一部分装入内存,而将其他部分留在外存,就能够启动程序执行。在程序执行过程当中,当所访问的信息不在内存时,由操做系统将所须要的部分调入内存,而后继续执行程序。另外一方面,操做系统将内存中暂时不使用的内容换出到外存上,从而腾出空间存放将要调入内存的信息。这样,系统好像为用户提供了一个比实际内存大得多的存储器,称为虚拟存储器。
虚拟存储器的特征:
虚拟存储器的实现方法:分页请求系统,请求分段系统
最佳(Optimal)置换算法:只具备理论意义的算法,用来评价其余页面置换算法。置换策略是将当前页面中在将来最长时间内不会被访问的页置换出去。
先进先出(FIFO)置换算法:简单粗暴的一种置换算法,没有考虑页面访问频率信息。每次淘汰最先调入的页面。
最近最久未使用LRU(Least Recently Used)置换算法:算法赋予每一个页面一个访问字段,用来记录上次页面被访问到如今所经历的时间t,每次置换的时候把t值最大的页面置换出去(实现方面能够采用寄存器或者栈的方式实现)。
最少使用LFU(Least Frequently Used)置换算法:设置寄存器记录页面被访问次数,每次置换的时候置换当前访问次数最少的。
改进型Clock算法:在Clock算法的基础上添加一个修改位,替换时根究访问位和修改位综合判断。优先替换访问位和修改位都是0的页面,其次是访问位为0修改位为1的页面。
页面缓冲算法(Page Buffering Algorithm,PBA)