进程:
程序是磁盘文件。进程是程序的一次运行活动。
程序是静态的。进程是动态的。进程具有生命期。
进程的创建、进程的运行、进程的退出。
1. 进程的创建
a) 进程管理器->PCB
i. 描述信息
ii. 控制信息
iii. 资源信息
iv. CPU现场信息
b) 进程管理器->内核链表->task_struct
ps –ef
ps –aux
2. 进程是资源分配的独立单位
虚拟内存资源:
内核态:物理存储区;隔离带;虚拟存储区;隔离带;固定存储区;应用存储区…
如何从用户态到核心态:系统调用和中断。
3. 进程是调度的独立单位
a. 作业调度:批处理
b. 进程调度:所有的程序基本的调度,是任务调度的基本单位,进程的独立性
c. 线程调度:任务调度的最小单位
4. 进程的分类:
a) 交互进程
b) 批处理进程
c) 守护进程:
i. 执行特定功能或者执行系统相关任务的后台任务
ii. 父进程为1
iii. 没有终端
iv. 又称为:精灵进程
5. 进程的特点
a) 动态性
b) 并发性
c) 独立性
d) 异步性
6. 进程的状态
a) 执行态:R:获得CPU资源和时间片
b) 等待态:S:分为可中断等待和不可中断等待
c) 就绪态:R:
d) 僵尸态:Z:具有描述信息和控制信息。没有CPU现场信息和资源信息。占用进程号资源。
7. 进程的ID (PID)
a) 进程的个数是有限的
b) 每个进程都有一个PID,动态变化的。ID是可以被重复使用的。
c) ulimit –n查看文件描述符的总个数。可产生to many file numbers错误。
d) PPID:父进程ID。init进程是所有进程的祖先进程。
8. 进程的调度方式:
a) 抢占式和非抢占式
b) 调度算法
i. 先来先服务
ii. 短进程优先
iii. 高优先级优先
iv. 时间片轮转法
c) 进程的互斥:多个进程要使用共享资源,但最多允许一个,其他进程需要等待
i. 信号量和锁机制、消息队列
ii. 共享资源:共享内存、文件
9. 临界资源:
操作系统中一次只允许一个进程访问的资源称为临界资源
10. 使用临界资源的代码叫作临界区。
lock()
临界资源
unlock()
从lock到unlock称为临界区。
只lock不unlock会产生死锁。
11. 进程同步
a) 一组并发进程按一定的顺序执行的过程称为进程间的同步。
进程创建: fork()、vfork()、clone()
1. fork()如果成功返回父进程和子进程
2. 子进程有父进程的成员
3. 父、子进程有独立的空间
4. 子进程会复制父进程的资源(PCB里的资源信息)copy-on-write机制
5. 子进程与父进程的优先级相同。nice看优先级0-19之间,数值越大优先级越底
getpriority()设置进程优先级
2) 进程的执行
a) execl函数
b) stdarg库 不定长函数
3) 进程的退出
a) main函数的退出
i. return
b) 信号
c) exit/_exit/_Exit
d) exit和_exit的区别
a) exit属于glibc库
b) _exit属于posix库(portable operation systeminterface)
c) exit会刷新缓冲区、_exit不刷新缓冲区。
d) exit会关闭打开的文件、_exit不关闭打开的文件
e) exit会调用内存清理函数、_exit不调用内存清理函数
f) atexit函数内存清理、on_exit()内存清理函数
实现printf函数
4) 进程的等待
a) 作用:避免僵尸进程的出现
b) 僵尸进程(zombie process):具有描述信息,控制信息,没有资源信息和CPU现在信息。僵尸进程不参与调度、不占用内存。占用进程号资源。Z -> defunct
c) 父进程先退出会产生僵尸进程。所以要父进程等待子进程。
d) kill -9 PID杀不掉僵尸进程。杀僵尸进程要杀其父进程。kill -9 PPID
e) 如何实现等待:
i. wait() waitpid() wait3() wait4()
f) TASK_INTERRUPTIBLE可以通过信号唤醒
g) raise(SIGQUIT)发送信号退出
h) kill –l 查看信号