操作系统知识点_进程管理
1、进程管理
进程与线程:一个程序至少有一个进程,一个进程至少有一个线程。
进程:是一个动态概念,是程序执行过程总分配资源和管理的基本单位,竞争计算机资源的基本单位。每个进程拥有自己的数据空间,栈空间,包括用户栈和核心栈。进程大小只与处理机的位数有关。16位216,32位232.
线程:进程的一个实体,是CPU调度和分配的基本单位。线程自己基本不拥有系统资源,只拥有一点运行中必不可少的资源(程序计数器、一组寄存器和栈),它与同属一个进程的其他线程共享进程所拥有的全部资源。在网络或多用户环境下,服务器需要接受很多用户的请求,每次创建进程的系统开销太大,转而创建多线程。线程是进程的一部分,一个没有线程的进程可以被看做是单线程。
联系:一个进程可同时拥有多个线程。线程是进程的一部分,他们都没有自己独立的资源和地址空间,多个线程共享进程的资源。单单一个线程的改变,如结束,并不会让改变进程的状态。
进程/线程同步:临界区,互斥量,信号量,事件
进程通信:管道(无名管道用于父子进程通信,有名管道用于其他进程之间的通信),系统IPC即:消息队列,信号量,共享存储等,还有socket
进程的状态:运行态,就绪态,等待态
运行态:进程占用处理器正在运行的状态
就绪态:进程啥都准备好了,就是没有给它处理器的状态
等待态:又名阻塞态,睡眠态,表示进程正在等待某时间的完成,不具备可以运行的状态。
内核线程和用户线程:
内核线程:建立和销毁都由操作系统负责,通过系统调用完成。如果一个进程中没有就绪态的线程,那么该进程就不会被调度占用CPU
用户线程:不需要内核支持,在用户程序中实线的线程,不依赖于操作系统核心。利用线程库提供的创建、同步、调度和管理线程函数来控制。
引入用户线程的优势:可在不支持线程的操作系统中实线;创建销毁和切换线程管理的代价比内核线程小得多;允许每个线程定制自己的调度算法,管理灵活;线程可利用的表空间和堆栈空间比内核线程多,
用户线程的缺点:统一进程只能同时有一个线程运行,如果一个线程使用系统调用阻塞则这个进程挂起;页面失效也会导致整个进程挂起。
内核线程的优缺点干好相反。实际上,操作系统可以使用混合的方式实现线程。
处理器调度算法:
非剥夺:先来先服务(FCFS)、最短作业优先(SJF)、响应比最高者优先(响应比=作业周转时间/作业处理时间=1+作业等待时间/作业处理时间)、
剥夺式:最短剩余时间优先、轮转调度(RR)、多级反馈队列调度
系统规定:优先级调度、彩票调度
内存池,进程池,线程池
内存池:用new,malloc分配内存时,申请的内存块大小不定,会造成大量的内存碎片降低性能。内存池就是在使用内存前,申请分配一定数量,大小相等的内存块留做备用,使得内存分配效率得到提升。
进程池:服务器预先创建一组子进程,子进程运行着相同的代码,相同的属性,当有新的任务来临时,主进程通过某种方式选择进程池中一个进程为其服务。
线程池:需要大量线程来完成任务,且实现任务的时间比较短,适合用线程池,节约创建线程的时间。
死锁的概念和原因
死锁:进程集合中的每一个进程都在等待一个进程才能继续执行,无外力无法推进,这种就叫死锁。
互斥条件:分配到的资源不共享
请求和保持条件:请求不到资源,但仍保持自己的资源不放。
不可剥夺条件:进程在使用完资源前不可以被剥夺资源
环路等待:必然存在一个环路。
解决方法:
1.预防死锁:破坏条件
2.避免死锁:银行家
3.检测死锁:发生发生死锁,立马干预
4.解除死锁:配合检测使用。