一. 进程线程篇
(1) 概念
- 进程
- 运行中程序的实例
- 线程
- 线程是进程中的实体
(2) 区别
- 进程是资源分配的基本单位,线程是CPU调度的基本单位
- 进程拥有独立的地址空间,线程位于地址空间内,共享地址空间内的全局变量和静态变量.
- 线程比起进程的创建,撤销和上下文切换速度更快(10-100倍)
(3) 其他
写时复制 (现代操作系统P128, 深入理解Linux内核P388):
Fork出一个进程后, 子进程拥有自己的进程表项, 但是子进程的进程表项内部页表刚开始只是复制了父进程的, 它们指向相同的物理页框, 但页表中标记该页框为只读, 父子进程的任何一方试图写时引发写保护措施, 陷入内核(TRAP), 然后内核会把对应进程想要写的页面映射并复制到新的页框中, 此时可以放心地写.
进程表 (深入理解计算机系统中文第3版P578, 深入理解Linux内核中文第3版P86):
为一个双向链表, 维护系统所有进程的基本信息. 进程表项为一个名为task_struct的结构体, task_struct大概包含以下信息:
- 进程的基本信息(PID, Stack Pointer, Program Counter)
- 页表地址, 进程地址空间各段的起始地址(记录此信息, 方便检测程序操作的地址是否合法)
- 描述符表(每个进程都有一张, 此为私有), 存储用户打开的文件描述符. 描述符表每一个表项指向全部进程共享的文件表, 文件表记录文件位置, 引用计数等. (深入理解计算机系统中文第3版P634)
- 相关文章: Post Views: 1,548