《王道程序员求职宝典》笔记 - 操作系统第1章 进程管理
by 宋强
操作系统的四个特征
- 并发:程序逻辑并发
- 共享:程序资源共享
- 异步:程序的进行状态未知。
- 虚拟:一个物理实体得到多个逻辑实体(虚拟化)或多个物理实体看作一个逻辑实体(文件与设备的通用接口)。
进程
进程的概念
进程是程序运行的实体,是一个动态概念,从静态组成的角度来说,包含程序、数据和进程控制块三部分。
程序的概念
程序是一组命令的集合。
- 一个程序可执行出多个进程, 一个进程也可能执行多个程序。
fork与printf的组合
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main(void) {
int i;
for (i=0; i < 2; i++) {
fork();
printf("-");
}
return 0;
}
这个题输出的是8个’-‘,主要原因在于printf输出这个符号的时候是将其先放入缓冲区,而后面第二次fork时缓冲区也被复制了,所以后面本来应该输出一次’-‘的都在这个基础上加上了之前继承的一个’-‘。
相反,如果加上了换行符,换行符会刷新缓冲区,那么就会立刻输出并且只输出6个:
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main(void){
int i;
for(i=0; i < 2; i++){
fork();
printf("-\ n");
}
return 0 ;
}
线程
线程的概念
线程是一个逻辑执行流的最小单元,是进程独立调度的最小单位,通常包括:
- 线程ID:进程中唯一。
- 当前指令指针
- 寄存器集合
- 堆栈:存储在进程的线程共享堆区。
线程共享的内容:
- 进程代码段
- 进程的公有数据
- 进程打开的文件描述符
- 信号的处理器
- 进程的当前目录
- 进程用户ID和组ID
$P_{325}$例4
进程与线程的区别(背下来)
- 线程是调度的基本单位,进程是拥有资源的基本单位。
- 进程独立拥有资源,线程共享进程资源,包含一些必须的少量的系统资源。
- 进程和线程都可以实现并发。
- 进程系统开销大,线程系统开销小,无论是创建释放还是切换都是这样的。
- 进程地址空间和资源独立,线程共享。
- 进程间通信需要依赖操作系统,线程间通信可以直接读写全局变量。