操作系统篇
1.进程之间的通信方式
管道:亲属进程之前的通信,一般可以用read、write函数,一个进程的输出作为另一个进程的输入;
消息队列:消息的链表,区别于消息队列的中间件;
socket套接字:TCP套接字、UDP套接字、UNIX域套接字。创建TCP套接字时会返回一个套接字描述文件,可以通过该描述文件对套接字进行读和写。TCP套接字有两个buffer空间,一个读的buffer,一个写的buffer;
信号量:用于进程之间的同步;
共享内存:访问同一块内存,例如malloc()函数向不同的进程返回同一个物理指针;
2.进程、线程、协程特点,对比线程
进程是独立运行和系统分配资源的最小单位,进程是对正在运行的程序的一种抽象。
可以被独立调度并占用cpu,不同的进程之间一般是不会互相影响,不同的进程之间访问共享数据会产生制约;
线程是基于进程的,一般用于并发的场景
进程
行为的一个规则称为程序,程序在处理机器上发生的活动是一个进程;
进程可以和别的计算一起并发执行;
进程是一个程序及其数据在处理机上顺序执行时发生的活动;
进程是程序在一个数据集合上的运行过程,是系统进行资源分配和调度的一个独立单位。
进程的5个特征
动态性、并发性、独立性、异步性、结构特征(进程实体由程序段、数据段、进程控制三部分)
进程的3种状态
就绪状态、执行状态、阻塞状态、挂起状态
进程控制块PCB
进程控制块PCB是进程实体的一部分,是操作系统种最重要的数据结构。PCB记录了操作系统所需的、用于描述进程情况及控制进程运行所需要的全部信息。操作系统是通过PCB来对并发执行的进程进行控制和管理;
3.进程调度方法,各自的优缺点
进程调度即处理机调度,在系统存在多个进程时,而且往往进程数多于处理机数,这就要求系统按照某种算法,动态的把处理机分配给就绪队列种的一个进程,使之执行。
非剥夺方式:
分派程序一旦把处理机分配给某进程后便让他一直运行下去,直到进程完成或者发生某事件而阻塞时才把处理机分配给零一进程;
优点:简单、系统开销小,但是会有可能导致系统系统恶化(紧急任务到达不能立即执行,后到的短进程必须等先到的长进程运行完毕)
剥夺方式:
当一个进程正在运行时,系统可以基于某种原则剥夺已经分配给他的处理机,将他分配给其他进程。剥夺方式调度的规则:优先权、短进程优先、时间片原则,一个时间片用完后更新调度。
进程调度算法
1.先进先出算法:把处理机分配给最新进入就绪队列的进程
2.最短处理机运行期优先调度算法:从就绪队列中选出“下一个处理机执行期”最短的进程,为止分配处理机使之执行
3.最高响应比优先调度算法:非剥夺的调度算法,
响应比=(等待时间+要求服务时间)/要求服务时间
4.优先调度算法:发生进程调度时,将处理机分配给就绪队列中优先级最高的进程,如何确定优先级?静态优先法和动态优先法
5.时间片轮转调度算法
6.前后台调度算法
7.多级反馈队列轮转算法
进程调度的时机
1.一个进程运行结束
2.正在执行的进程由阻塞将进入到等待状态
3.在采用抢占优先级调度时,由优先级高于运行进程的进程进入就绪队列
4.在分时系统中的时间片用完
这四种都是在处理机为不可剥夺方式时引起进程调度的原因
当处理机制为可剥夺时,可能还有就绪队列中的某个进程越优先级变为高于当前运行进程的优先级。
线程
被系统独立调度和分派的基本单位。线程自己基本上不拥有系统资源,只拥有一点在运行中不可少的资源,线程可以与同属的线程共享进程所拥有的全部资源。一个线程可以创建和撤销另一个线程;同一进程的多个线程之间可以并发执行。
线程的特点
1.每一个线程有一个唯一的标识符和一张线程描述表,线程描述表记录了线程执行的寄存器和栈等现场状态
2.不同的线程可以执行相同的程序
3.同一个进程中的各个线程共享该进程的内存地址空间
4.线程是处理机的独立调度单位,多个线程可以并发执行
5.线程自从被创建时便开始了他的生命周期,也会经历阻塞状态、就绪状态、执行状态等
线程的好处
1.创建和结束一个线程花费的时间要少,创建线程不需要另外分配资源,因而创建线程的速度比创建进程的速度要快,系统开销小
2.线程切换花费时间少
3.同一进程内的线程共享内存和文件,线程之间相互通信无须调用内核,故不需要额外的通信机制,通信更快更简便
4.线程可以独立执行,能充分利用和发挥处理机和外围设备并行的工作能力
进程和线程的比较
1.调度,进程就像时只有一个线程的。创建进程时,系统需要为每个进程分配资源,线程作为调度和分派的基本单位,而把进程作为资源拥有的基本单位。同一个进程中线程切换不会影响进程,但是由一个进程中的线程切换到另外一个进程的线程时会引起进程的切换;
2.并发
都可以并发执行
3.拥有资源
进程拥有资源,线程一般都不用有资源,除非一些必要的资源,同一个进程里面的线程是共享进程的资源的
4.系统开销
在创建进程和撤销进程时,系统都要为之分配或收回资源,如内存空间、IO设备等。类似地,当进程切换时,涉及当前整个进程处理机环境和保存以及被调度运行的进程机环境设置。线程切换时只须保存和设置少量的寄存器的内容。线程之间共享内存和文件,线程之间的相互通信不需要调用内核,更快更简便
4.僵尸进程、孤儿进程
僵尸进程
僵尸进程是子进程以及结束运行了,但是父进程还没有获取到子进程结束的状态,子进程就会僵死那在那里,僵尸进程还是会消耗资源,并且保存了父进程相关的信息,一旦父进程获取到子进程的结束状态,僵尸进程就会终止
孤儿进程
父进程已经结束运行,但是子进程被托孤给init进程继续保持运行,这种进程称为孤儿进程
守护进程
后台运行的进程
5.死锁出现的原因,如何避免预防死锁
资源竞争,互相等待、进程或线程之间操作推进的顺序不当等
死锁的四个条件:
1.互斥(打破互斥,允许不同的线程访问同一资源)
2.占有且等待(预先分配资源)
3.循环等待(资源的有序分配,不形成环路)
4.不可争抢(允许线程强行从占有者处获取资源)
避免和预防死锁可以从这四个条件出发,破坏这四个条件。
6.介绍事务
事务是对数据库进行一系列操作的集合
ACID:原子性、一致性、隔离性、持久性
7.什么是并发?
事件在一个实体的同一个时刻发生