操作系统的定义
用户与计算机硬件之间的接口
控制和管理计算机资源的软件
计算机的硬件组成
CPU存储器输入/输出设备总线等
一、进程和线程
进程与线程的区别
注:
一个进程可以有多个线程,多个线程可以并发,可以共享进程数据,拥有自己独立的栈空间和执行序列。进程与线程是不同的系统资源管理方式。进程拥有独立的地址空间,而线程没有。一个进程崩溃后,在保护模式下,不会对其他进程造成影响;而线程只是进程的一个执行路径,没有自己独立的地址空间,一旦一个线程崩溃,整个进程就会崩溃。所以,多进程的程序比多线程程序更加健壮。线程不占用系统资源,调度线程比调度进程开销更小,在线程间切换比在进程间切换效率高。对于一些要求同时进行而又共享某些变量的并发操作来说,只能用多线程,不能用多进程。
使用线程的优势:
创建线程比创建进程需要的时间更少终止线程比终止进程时间更少切换线程比切换进程更快线程间通信无需调用内核即可实现。同一进程的线程共享进程的数据。
线程同步:
线程同步是指多线程通过特定的方式(如互斥量)来控制线程之间的执行顺序(同步),也可以说是在线程之间通过同步建立起执行顺序的关系,如果没有同步那线程之间是各自运行各自的。
线程同步方式:
互斥(信号)量,每个时刻只有一个线程可以访问公共资源。只有拥有互斥对象的线程才能访问公共资源,互斥对象只有一个,一个时刻只能有一个线程持有,所以保证了公共资源不会被多个线程同时访问。信号量,允许多个线程同时访问公共资源。当时控制了访问资源的线程的最大个数。事件 in windows(条件变量 in linux)。通过通知的方式保持多线程的同步,还可以方便的实现多线程优先级的比较临界区。任意时刻只能有一个线程进入临界区,访问临界资源。
进程同步方式:
原子操作;信号量;管程;会合;分布式系统
临界区的定义:
每个进程(线程)中,访问临界资源(不可共享的资源)的那段代码称为临界区。每次只允许一个进程(线程)进入临界区,进入后不允许其他进程(线程)进入。
如何解决临界区冲突:
一次只允许一个进程(线程)进入临界区,如果有一个进程(线程)已经进入了自己的临界区,其他试图进入临界区的进程(线程)必须等待进入临界区的进程(线程)要在有限的时间内退出临界区,以便于其他进程(线程)进入自己的临界区如果进程(线程)无法进入自己的临界区,则应该让出CPU等资源,避免进程(线程)出现“忙等”现象。
实现临界区的方法:
1.一次只允许一个进程(线程)进入临界区,如果有一个进程(线程)已经进入了自己的临界区,其他试图进入临界区的进程(线程)必须等待。
2.进入临界区的进程(线程)要在有限的时间内退出临界区,以便于其他进程(线程)进入。
3.自己的临界区如果进程(线程)无法进入自己的临界区,则应该让出CPU等资源,避免进程(线程)出现“忙等”现象。
进程的状态和状态间的转换:
就绪。进程已经获得了除CPU以外的所有所需资源,等待分配CPU资源
运行。已获得了CPU资源,进行运行。处于运行态的进程数<=CPU核心数
阻塞。进程等待某些条件,在条件满足前无法执行
进城的创建过程
给新进程分配一个唯一的标识符给进程分配内存空间初始化进程控制块PCB将PCB放入就绪队列中,等待分配CPU资源
进程控制块(PCB):
是进程存在的唯一标识创建一个进程就会创建一个PCB,当进程撤销时,系统回收它的PCB系统对进程的控制根据PCB进行,对进程的管理通过管理PCB实现能实现间断性的运行方式提供进程间通信管理所需的资源提供进程调度所需的信息PCB中保存了进程的标识信息进程的状态信息(就绪、运行、阻塞)进程的控制信息
进程与程序的区别:
程序是计算机指令的集合,以文件的形式存放在磁盘上,是静态的文本。不使用系统资源,不能申请资源,不能被调度,不能作为运行的单位。进程是程序的运行实体,包含了程序段、数据段、PCB,是程序在其地址空间中的执行活动,是系统分配资源的基本单位。使用系统资源,可以运行。
缓冲区溢出:
当前计算机向缓冲区填充数据时,超出了缓冲区自身的容量,溢出的数据覆盖在合法的数据上。
缓冲区溢出的危害:
程序崩溃,导致拒绝服务跳转并执行一段恶意代码
进程调度和线程调度的关系:
进程和线程都有三种状态(就绪、运行、阻塞)如果一个线程进行了系统调用,则整个进程阻塞(系统调用会使进程阻塞,而线程还是处于运行态,不会阻塞),控制权从程序转移走,但在线程角度看,此线程还在运行态。而进程已经到了阻塞态。当线程A等待线程B的某些事件时,A被阻塞,控制权从A移到B。
死锁:
在两个以上的并发进程中,如果每个进程都持有某种资源而又等待其他进程释放他们持有的资源,在未改变这种状态前,谁都无法推进,则发生了死锁。所有进程无限期等待,且循环等待,都处于阻塞态。
死锁的产生条件:
互斥。一个资源一次只能被一个进程占有请求与保持。一个进程因为请求资源而阻塞时,不释放自己持有的资源非剥夺。无法在进程结束前剥夺它对资源的所有权循环等待。若干进程收尾相接形成环形等待关系
死锁处理的方法:
预防死锁
破坏后三个条件中的一个即可(互斥是非共享设备的特性,无法更改):
1.破坏请求与保持条件。规定一个进程开始前,必须申请所有需要的资源。
2.破坏非剥夺条件。当无法得到需要的资源时,释放自己持有的资源,等需要时再重 新申请。
3.破坏循环等待条件。将所有资源按类型线性排队,并赋予不同的编号,所有进程请求资源时,必须按照资源递增顺序,以防出现环路。如果一个进程已经分配到了R资源,那么它再申请时,只能申请排在R后面的资源,而不能申请前面的资源。
死锁避免。
避免死锁并不是事先采取某种限制措施破坏死锁的必要条件,而是再资源动态分配过程中,防止系统进入不安全状态,以避免发生死锁: