-
进程3个状态(进程:系统进行资源分配和调度的基本单位)
-
运行态:正在使用cpu
进程占用处理器(CPU)资源;处于此状态的进程的数目小于等于处理器的数目 -
就绪态:可执行的(处于就绪队列)
进程已获得除处理器(CPU)外的所需资源,等待分配处理器资源;只要分配了处理器进程就可执行 -
阻塞态:正在执行的进程由于某种原因而暂时无法继续执行,便放弃处理机而处于暂停状态,即进程执行受阻
该事件发生前即使把处理器资源分配给该进程,也无法运行
-
-
进程切换的概念:让进程来占用处理器,实质上是
- 把某个进程存放在私有堆栈中寄存器的数据(前一次本进程被中止时的中间数据)再恢复到处理器的寄存器中去,
- 并把待运行进程的断点送入处理器的程序指针PC
于是待运行进程就开始被处理器运行了,也就是这个进程已经占有处理器的使用权了。
在切换时,一个进程存储在处理器各寄存器中的中间数据叫做进程的上下文,所以进程的 切换实质上就是被中止运行进程与待运行进程上下文的切换。在进程未占用处理器时,进程 的上下文是存储在进程的私有堆栈中的。 -
线程:轻量级进程,使用CPU的基本单位
-
为什么使用线程:
响应方面:多个活动可同时进行,加快了应用的速度
资源共享:线程共享进程的内存和其他资源(但线程拥有自己的栈)
经济性:易于创建和撤销
例子:word进程——一个线程与用户交互,一个线程格式化文档,一个线程周期性把文档写入磁盘 -
用户级线程和内核级线程的区别
用户级线程是OS内核不可以感知的,内核级线程可以感知
用户级线程执行系统调用指令时会导致进程中断,而内核级线程只导致该线程中断
用户级线程进行创建,撤销,调度不需要OS内核的支持,而内核级线程需要
只有用户级线程的系统内,CPU调度还是以进程为单位,由用户程序控制线程的轮换;而有内核级线程的系统,CPU调度以线程为单位,由OS的线程调度程序调度线程
用户级线程的程序实体只能运行在用户态,而内核级线程的程序实体可以运行在任何状态
-
-
临界区:避免竞争条件的关键是不允许多余一个进程同时读写共享数据
保持互斥的4个条件:
不允许两个进程同时在临界区
对处理速度和CPU的数量不应该有任何假设
运行于临界区外的进程不能阻塞其他进程
进程不能无休止地等待临界区 -
信号量
image.png
-
线程互斥(pthread_cond_wait会先给互斥锁解锁,再挂起线程,等到条件变量满足时,会再次上锁)
image.png -
经典IPC问题:
生产者消费者
哲学家进餐
读者写者 -
调度:调度器决定哪个进程要执行,调度算法做出调度决策
-
批处理系统中的调度算法
先来先服务(FCFS):先来先调度
最短作业优先(非抢占SJF):将每个进程与其下次 CPU 执行的长度关联起来。当 CPU 变为空闲时,它会被赋给具有最短 CPU 执行的进程。如果两个进程具有同样长度的 CPU 执行,那么可以由 FCFS来处理
最短剩余时间优先(抢占SJF):新进程的下次 CPU 执行,与当前运行进程的尚未完成的 CPU 执行相比,可能还要小。抢占 SJF 算法会抢占当前运行进程。
PS:批处理系统3级调度:
接纳调度:决定哪一个作业被接纳到系统中。
内存调度:决定哪一个进程应该装入内存,哪一个应当放在磁盘。它也决定同时有多少个进程在内存中,这称之为多道程序度。
CPU调度:实际选择内存中合适的进程运行。 -
交互系统的调度算法
轮转调度(RR):每个进程被分得小小的时间片,时间片结束时,进程被强占,放在就绪队列的尾。
优先级调度:就按优先级调度
-
网友评论