本文主要是介绍ucore—11至14讲:进程与线程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 第十一讲:进程和线程
- 11.1 进程的概念
- 11.2 进程控制块
- 11.3 进程状态
- 11.4 三状态进程模型
- 11.5 挂起进程模型(重要)
- 11.6 线程概念
- 11.7 线程实现之—用户线程实现(重要)
- 11.8 线程实现之—内核线程实现
- 11.9 线程实现之—轻量级进程(混合实现)
- 第十二讲:进程控制
- 12.1 进程切换
- 12.2 进程创建
- 12.3 进程加载
- 12.4 进程等待与退出
- 12.5 其他进程控制的系统调用
- 第十三讲(实验4):内核线程管理
- 第十四讲(实验5):用户进程管理
第十一讲:进程和线程
11.1 进程的概念
- 进程概念
- 内存中的进程
- 进程的组成
这些内容最终构成了进程控制块
- 进程的特点
动态性:可动态地创建、结束进程
并发性:进程可以被独立调度并占用处理机运行
独立性:不同进程的工作互不影响
制约性:因访问共享数据、资源或进程间同步而产生制约
=> 需要权衡好进程的独立性和制约性
- 进程与程序的关系
联系
区别
11.2 进程控制块
- pcb基本概念
- 进程控制块的内容
主要包括三方面的信息:
1.进程标志信息; 2.处理机现场信息; 3.进程控制信息;
进程控制信息主要包括以下内容:
- 进程控制块的组织
注意就绪和阻塞进程是分开组织的!!!
11.3 进程状态
-
进程生命周期
创建、执行、等待(阻塞)、抢占、唤醒、结束(此处所说的六个更多地像是五态模型中的六个状态转换,而不是某一段时间所处状态)
(不同操作系统设定的生命周期不同!) =>更常见的说法:
三态模型:就绪、执行、阻塞
五态模型:创建、就绪、执行、阻塞、结束 -
创建
创建好后将进程放入就绪队列
-
执行
如何选择执行的进程? => 涉及到调度算法!
-
等待
这里的等待就是常说的阻塞
-
抢占
-
唤醒
-
结束
-
进程切换
11.4 三状态进程模型
- 三态模型
这里其实是五态模型
11.5 挂起进程模型(重要)
- 进程挂起
为什么需要挂起? => 物理内存不足时,将部分进程从内存换出到外存!
等待挂起:进程在外存并等待某事件的出现
就绪挂起:进程在外存,并且处于就绪状态.只要进入内存,即可运行
内存到外存 =>挂起
外存到内存 =>激活
- 使用队列维护各种状态的进程:状态队列
11.6 线程概念
-
为什么需要线程
…略 -
线程基本概念
进程是资源分配的基本单位;
线程是调度的基本单位 => 如何实现以线程为调度的基本单位?让每个线程由自己的栈即可! -
进程和线程的关系
线程=进程 — 共享资源
-
线程的优点与缺点
11.7 线程实现之—用户线程实现(重要)
- 线程的三种实现方式
- 用户线程实现
内核中仍然只有PCB,而没有TCB!操作系统并不感知用户态下有多线程的支持
- 用户线程的特征
- 用户线程的不足
11.8 线程实现之—内核线程实现
- 内核线程实现
- 内核线程的特征
11.9 线程实现之—轻量级进程(混合实现)
-
轻权进程
solaris有实现轻权进程,不过效果不如预期理想!
仍然不是很懂? => 可参考《深入理解JVM》第12章关于Java线程实现 -
用户线程与内核线程的对应关系
通常,一对一是用得较多且理想的
第十二讲:进程控制
12.1 进程切换
- 进程切换基本概念
- 示例
- PCB的组织
- PCB内容
12.2 进程创建
-
创建进程
-
通过系统调用创建子进程示例
-
fork()的地址空间复制
-
程序加载和执行
通过exec加载子进程中将要执行的程序
子进程中程序加载的变化过程
调用fotrk()后子进程与父进程除pid外基本完全一样
子进程加载新的程序 => 子进程地址空间中的内容发生变换(可参考csapp)
-
ucore中fork()的实现
…略(见代码) -
关于fork()的开销问题
Linux使用上述的写时复制,可参考csapp 9.8节
12.3 进程加载
- exec系统调用进行加载
这里的加载其实类似于bios加载booloader、bootloader加载系统内核,都需要将程序加载到内存,然后将控制交给加载进来的程序起始处…
- ucore中exec的实现
…略(见代码)
12.4 进程等待与退出
- 父进程等待子进程
- 进程退出
- ucore中wait与exit函数的实现
…略(见代码)
12.5 其他进程控制的系统调用
- 其他系统调用
- 进程控制vs进程状态
第十三讲(实验4):内核线程管理
略…(详见实验指导书与代码)
第十四讲(实验5):用户进程管理
略…(详见实验指导书与代码)
这篇关于ucore—11至14讲:进程与线程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!