1 进程和线程
1.1 二者的比较
1.1.1 进程与线程的比较
(1)调度 与 拥有资源方面:
- 进程:拥有资源的基本单位、独立调度分配的基本单位;
- 线程:基本不拥有资源,独立调度分配的基本单位。(只有一些保证运行的必不可少的资源,如一个线程ID、一个程序计数器、一个寄存器组、一个堆栈)
- 【注】:这里的 独立调度分配 指的是:
- 只有进程的系统中,进程是独立调度分配的基本单位;
- 而有了线程的系统中,独立调度分配的基本单位就变成了线程。
(2)并发性方面:
- 进程之间可以并发;
- 同一进程的不同线程之间也可以并发。
(3)系统开销方面:
- 创建和撤销进程时,系统要为之创建和回收PCB;分配和回收资源时,开销比线程大。
- 进程切换时,涉及到CPU环境的保存与恢复、存储器管理方面的操作,
- 线程切换时,仅需保存和设置少量寄存器的内容,代价比线程切换少的多。
- 【注】:页表是在内存之中的,如果要加快地址的转化,就要查快表(TLB),快表在Cache里面,速度比内存快的多,每一个进程都有自己的TLB,TLB上的内容都是随着进程的运行而动态更新的。如果一个进程下了处理器,此时它并不会保存TLB的内容,而是等到下次再上处理器的时候,再从头更新TLB,所以切换进程会导致快表失效。(线程共享所属进程的快表)
(4)占用空间方面:
- 所有线程都共享所属进程的地址空间,也共享所属进程已经打开的文件等。
- 每个线程有属于自己的栈空间,不与其他线程共享。
1.1.2 其他(程序和进程的区别)
(1)并发与共享:
- 并发:两个或多个事件在同一时间间隔发生。
- 共享:也叫资源共享/资源复用,并发执行的进程or线程共同使用同一个系统资源。
(2)单道批处理系统和多道批处理系统:
- 区别就在于内存中有几道作业。
(3)程序和进程的区别:
- 程序是静态的概念,进程是动态的概念;
- 进程有生命周期,会进行“创建->运行->结束”的过程;
- 程序变成进程,首先要将程序装入内存。
- 进程是程序的一次执行过程。
(4)就绪队列:
- 就绪队列是指就绪进程的PCB组成的队列。
- 调度程序相当于批处理系统中的监督程序。(监督程序是调度作业到系统中运行;调度程序是调度程序到CPU中运行)
- 就绪队列与阻塞队列的区别:
1.1.3 进程的组成成分&特点:
(1)进程的组成部分:
- 程序段+数据段+PCB
(2)进程的特点:
1.2 用户级线程&内核支持线程
1.2.1 主要区别:
(1)主要的区别就是:
- 用户级线程中,线程切换不需要内核管理;
- 内核支持线程中,线程切换需要内核管理。
- 【注】:所以在内核支持线程中,对于用户的线程切换而言,其模式切换的开销较大。因为线程运行是在目态,而调度和管理则是依赖内核(管态)。
(2)多线程模型角度上看:
- 用户级线程是多对一模型的一种:多个用户线程映射到一个内核线程上;
- 内核支持线程是一对一模型的一种:一个用户线程映射到一个内核线程上。
1.2.2 二者的优缺点:
(1)用户级线程的优缺点:
- 下面缺点中第一条的解释:
- 由于用户级线程,操作系统并不知道,所以操作系统就认为只有一个进程,所以只为该进程分配一个CPU;
- 那么当线程A被阻塞时,OS的调度程序并不会因为用户级线程被阻塞而调度CPU,所以整个进程都会被阻塞。
(2)内核即线程的优缺点:
1.3 进程切换与上下文切换
(1)进程切换,必然发生在内核态。
(2)上下文切换。
- 上下文切换的时机:
- 上下文切换的过程:
1.4 其他
(1)在多线程系统中:
- 进程只作为除了CPU之外的其他系统资源的分配单位;
- 线程则作为处理器的分配单位;
- 所以不同进程中的线程也可以并发执行。
(2)是否需要互斥的问题:
- 不同进程之间的同名变量是不一样的,不需要互斥;
- 同一进程里的不同线程之间的同名变量也不需要互斥(因为每个线程有自己独属的栈空间)
(3)区分进程&线程 和 父进程&子进程:
- 子进程和父进程 都有 各自的虚拟内存空间;
- 而 线程 共享所属进程的地址空间。
1.5 原语
1.5.1 进程 创建原语:
(1)进程 创建原语 的过程:
(2)进程创建的场合:
- 用户登入;
- 高级调度(作业调度)发生;
- 系统响应用户程序提出的请求;
- 现有进程创建新进程;
1.5.2 进程 终止原语:
(1)进程终止原语的过程:
(2)进程终止的场合:
- 进程运行完毕,正常退出;
- 进程运行过程中出现错误,例如除0异常;
- 进程发生了严重的错误而退出;
- 被其他进程杀死;
- 其他导致进程终止的事件:超过时限、无可用内存、访问越界、保护错误、IO失败、无效指令、数据误用等等。
1.5.3 进程 阻塞原语:
(1)进程阻塞原语的过程:
(2)进程阻塞发生的场合:
- 进程向系统请求临界资源失败;
- 进程等待某种操作的完成;
- 新数据尚未到达;
- 等待新任务到达;
1.5.4 进程 唤醒原语:
(1)进程唤醒原语的过程:
(