diff --git a/notes/pics/process-vs-thread.png b/notes/pics/process-vs-thread.png new file mode 100644 index 00000000..1ec519d7 Binary files /dev/null and b/notes/pics/process-vs-thread.png differ diff --git a/notes/pics/virtual-thread-unmount.png b/notes/pics/virtual-thread-unmount.png new file mode 100644 index 00000000..00b2cf6e Binary files /dev/null and b/notes/pics/virtual-thread-unmount.png differ diff --git a/notes/计算机操作系统 - 进程管理.md b/notes/计算机操作系统 - 进程管理.md index 736701e0..fd42e5c5 100644 --- a/notes/计算机操作系统 - 进程管理.md +++ b/notes/计算机操作系统 - 进程管理.md @@ -4,9 +4,9 @@ * [进程与线程](#进程与线程) * [1. 进程](#1-进程) * [2. 线程](#2-线程) - * [3. 区别](#3-区别) + * [3. 区别](#3-区别) 🔥🔥 * [4. 上下文切换](#4-上下文切换) - * [5. 协程](#5-协程) + * [5. 协程](#5-协程) 🔥🔥 * [进程状态的切换](#进程状态的切换) * [进程调度算法](#进程调度算法) * [1. 批处理系统](#1-批处理系统) @@ -20,7 +20,7 @@ * [经典同步问题](#经典同步问题) * [1. 哲学家进餐问题](#1-哲学家进餐问题) * [2. 读者-写者问题](#2-读者-写者问题) - * [进程通信](#进程通信) + * [进程通信](#进程通信) 🔥🔥 * [1. 管道](#1-管道) * [2. FIFO](#2-fifo) * [3. 消息队列](#3-消息队列) @@ -62,7 +62,7 @@ QQ 和浏览器是两个进程,浏览器进程里面有很多线程,例如 H 需要注意的是,各线程的栈只是分开使用,并没有隔离:拿到另一个线程栈上变量的地址,同样可以读写它。 -### 3. 区别 +### 3. 区别 🔥🔥 - 拥有资源:进程是资源分配的基本单位,但是线程不拥有资源,线程可以访问隶属进程的资源; - 调度:线程是独立调度的基本单位,在同一进程中,线程的切换不会引起进程切换,从一个进程中的线程切换到另一个进程中的线程时,会引起进程切换; @@ -79,6 +79,8 @@ pthread_create() clone(flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_ CLONE_VM 表示共享地址空间,CLONE_FILES 表示共享文件描述符表,CLONE_THREAD 表示加入创建者的线程组。没有这些标志时,子进程得到一份地址空间的副本(写时复制),修改全局变量不影响父进程;有这些标志时,新线程修改的就是同一个变量。getpid() 返回的是线程组 ID,同一进程中的线程都相同,gettid() 返回每个线程自己的 ID,top -H、ps -L 中看到的就是它。 +