1.进程与线程之进程
进程模型:
1.一个进程是对正在运行程序的抽象。
2.计算机中多个程序的运行被排列成多个顺序进程(简称进程)
3.进程之间的快速切换称之为多道程序设计。
4.多道程序之间的切换时间是由物理计数器和各个进程的逻辑程序计数器相互作用决定的。个人理解是物理计数器是决定cpu在某个单个进程执行的时间,而逻辑程序计数器是用来记录当前这个程序执行了多少时间了(比如总共需要10s,已经执行了5s)
5.多道程序之间的切换速度是不确定的。
6.进程和程序之间的区别:运行了就是进程,不运行就是段程序。
7.同一进程运行两遍,算两个进程。
进程的创建
守护进程:有事的时候会被唤醒,没事儿了就睡觉(休眠)
4个主要事件会导致进程的创建:
1) 系统的初始化
2) 正在运行的程序执行了创建进程的系统调用(一般都是自动创建)
3) 用户请求创建一个新进程
4) 一个批处理作业的初始化
进程的终止
进程的终止使用以下条件引起的:
1.正常退出(自愿)
2.出错退出(自愿)
3.严重错误 (非自愿)
4.被其他进程杀死(非自愿)
进程的层次结构(win系统中没有层次结构)
进程的状态
运行态 该时刻进程实际占用cpu
就绪态 可运行由于其他进程运行而暂时停止
阻塞态 除非某种外部事件发生,否则该进程不能运行
使用进程模型更容易想象内部的操作。
进程的实现
进程表 操作系统为了管理进程,内核空间中创建的一张表的数据结构。
PCB(进程控制块) 进程表中的每一个表项,该表项包含的进程状态的重要信息:
一个PCB就代表这一个进程,在linux中,进程就是一个task_struct的数据结构,所以PCB就是一个task_struct,task_struct在进行上下文切换时,能够保存下在CPU中关于当前运行进程的一些重要寄存器信息。
所以,PCB代表的是未执行的进程,CPU中某些寄存器中的数据代表当前正在运行的进程。
中断向量 中断服务例行程序的入口地址和处理器状态字
每个中断向量包含两个字:
1、中断服务例行程序的入口地址
2、服务例行程序所用的处理机状态字
中断发生后操作系统底层发生的过程:
简单来说,当进程A要切换到进程B时,首先要陷入内核,然后内核将CPU中关于进程A的进程信息(即某些寄存器中的值)保存在进程A内核栈中的PCB结构中,然后从进程B内核栈的PCB结构中恢复进程B的信息到CPU的某些寄存器中,再退出内核模式回到进程B,这样CPU就开始执行进程B了。频繁的上下文切换时会影响性能。
多道程序设计模型
cpu利用率 = 1 - p的n次方 其中,进程等待io的时间和停留在内存中的时间比值为p,n个进程都在等待io的时间概率为p的n次方