进程管理
定义:一个具有一定独立功能的程序在一个数据集合上的一次动态执行过程。
进程的组成:
程序与进程的联系:
进程与程序的区别:
核心态:当发生系统调用的时候进程就会变成核心态,比如读写文件。
进程特点:
进程控制块:
进程的生命周期:
变化模型:
进程挂起:
挂起状态:
为什么要使用线程:
什么是线程:
从上面来看,线程有自己的TCB线程控制块包含PC程序计数器,SP栈,寄存器的信息。
线程切换时间比较短的原因:线程拥有同一个地址空间,属于同一进程的线程,拥有同一个页表,所以线程切换的时候不需要切换页表,切换进程的话需要切换页表。
线程的实现:
用户线程:操作系统看不见的线程。
内核线程:由操作系统管理起来的线程。
这里所说的用户线程应该就是常说的协程。
内核线程的线程控制块存放在内核区,由操作系统管理,这些线程控制块由PCB统一管理
上下文的切换:
刚开始执行exec时,
执行完exec之后
vfork只是父进程的复制了一部分,copy on write 写时复制 只是复制了父进程的元数据即页表,当父进程或者子进程对某一个地址单元进行写操作时,会触发一个异常,将触发异常的页复制成两份,使得父进程和子进程拥有不同的地址。
执行exec的时候进程有可能处于不同的状态,因为执行exec的时候要加载一个程序到内存中来,这个过程该进程有可能从运行态变为阻塞态。
进程调度:
什么时候调度:主要围绕运行态,比如从运行态到就绪态,等待态,完成态以及就绪态到运行态
进程调度的依据:
不能保证公平,无法知道进程的运行时间。
多级队列:
多级反馈队列:
多线程/进程的优势
实现临界区的方法:
中断:
禁用中断就是禁用进程调度
禁用中断机制对于多cpu的机器是不起作用的。
基于软件的解决方法:
只能多个线程按序进入临界区。