1. 进程
进程是能独立运行、独立获得资源的基本单位
(1) 进程的组成
- 进程控制块PCB(Process Control Block):
1. 进程描述信息:进程标识符PID、用户标识符UID
2. 进程控制和管理信息:CPU磁盘网络使用情况、进程状态(运行、阻塞…)
3. 资源分配清单:正在使用的文件、内存区域、I/O设备
4. 处理机相关信息:寄存器的值 - 程序段: 程序的代码(指令序列)
- 数据段: 运行过程中产生的数据
(2) 进程的异步性
(3) 进程状态
- 进程的五态
- 进程的状态转换图
- 进程的组织
- 链接方式:按照进程状态将PCB分为多个队列,操作系统有指向各个队列的指针
- 索引方式:根据进程状态不同,建立几张索引表,操作系统有指向各个索引表的指针
(4) 进程通讯
-
共享存储
- 基于数据结构的共享:只能存放长度为10的数组,速度慢、限制多,是一种低级通信方式。
- 基于存储区的共享:在内存画出一块共享存储区,数据的形式、存放位置都由进程控制,而不是操作系统。速度更快,是一种高级通信方式。
-
消息传递
消息头、消息体组成
- 直接通信方式
- 简介通信方式
-
管道通信:
“管道”其实就是在内存中开辟一个大小固定的缓冲区。
- 管道只能采用半双工通信,如果要双向同时通信,则需要设置两个管道。
- 各进程要互斥地访问管道。
- 数据以字符流的形式写入管道,当管道写满时,写进程的write()系统调用将被阻塞,等待读进程将数据取走。当读进程将数据全部取走后,管道变空,此时读进程的read()系统调用将被阻塞。
- 如果没写满,就不允许读。如果没读空,就不允许写。
- 数据一旦被读出,就从管道中被抛弃,这就意味着读进程最多只能有一个,否则可能会有读错数据的情况。
2. 线程
线程是程序执行的最小单位
(1) 线程的基本介绍
- 引入线程之后的变化
- 线程的属性
线程是处理机调度的单位
多CPU计算机中,各个线程可以占用不同的CPU
每个线程都有一个线程ID、线程控制块(TCB)
线程也有就绪、阻塞、运行三种基本状态
线程几乎不拥有系统资源
同一进程的不同线程间共享进程的资源
由于共享内存地址空间,同一进程中的线程间通信甚至无需系统干预
同一进程中的线程切换,不会引起进程切换
不同进程中的线程切换,会引起进程切换
切换同进程内的线程,系统开销很小
切换进程,系统开销较大
(2) 线程的实现
- 线程的实现
- 用户级线程ULT(用线程库实现,在操作系统层面上还是一个进程)
- 内核级线程KLT(操作系统支持)
- 多线程模型