[关闭]
@yanglt7 2018-05-17T09:05:59.000000Z 字数 6280 阅读 1286

第7章:进程和线程

操作系统


7.1 进程的定义

7.2 进程的组成

进程与程序的联系

进程和程序的区别

7.3 进程的特点

程序 = 算法 + 数据结构

7.4 进程控制块结构

使用进程控制块

PCB含有以下三大类信息:

PCB的组织方式

7.5 进程的生命周期管理

进程创建

进程运行

进程等待

进程唤醒

进程结束

7.6 进程状态变化模型

进程的其它的基本状态:

可能的状态变化如下:

Null -> New:一个新进程被产生出来执行一个程序
New -> Ready:当进程被创建完成并初始化后,一切就绪准备运行时,变为就绪状态(时间很短)
Ready -> Running:处于就绪状态的进程被进程调度程序选中后,就分配到处理机上来运行
Running -> Ready:处于运行状态的进程在其运行过程中,由于分配给它的处理机时间片用完而让出处理机(操作系统完成)
Running -> Blocked:当进程请求某样东西且必须等待时
Blocked -> Ready:当进程要等待某事件到来时,它从阻塞状态变到就绪状态

7.7 进程挂起

挂起状态

与挂起状态相关的状态转换

状态队列

7.8 为什么使用线程:

案例 编写一个MP3播放软件

单进程实现方法

多进程实现方法

怎么来解决这些问题?

7.9 什么是线程

从两个方面来重新理解进程:

线程 = 进程 - 共享资源

线程的优点

线程的缺点

不同OS对线程的支持

线程与进程的比较

7.10 线程的实现

主要有三种线程实现方式:

用户线程与内核线程的对应关系

用户线程

用户线程缺点

内核线程

轻量级进程(LightWeight Process)

7.12 进程控制

(一)上下文切换

(二)进程创建

不同操作系统的系统调用接口:

创建新进程

程序加载和执行

空闲进程的创建

idleproc proc_init()
分配idleproc需要的资源 alloc_proc() ↔ kmalloc()(分配存储资源)
初始化idleproc进程控制块 alloc_proc()
完成idleproc的初始化 proc_init()

创建第一个内核线程

initproc proc_init()
初始化trapframe Kernel thread()tf ↔ do_fork() ↔ copy_thread()
初始化initproc alloc_proc()
初始化内核堆栈 setup_stack()
内核共享 copy_stack()
把initproc放到就绪队列
唤醒initproc

Fork()的开销

vfork()

(三)进程加载

程序加载和执行系统调用exec()

(四)进程等待和退出

父进程等待子进程

进程的有序终止 exit()

其他进程控制系统调用

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注