进程
目录
主要研究进程对CPU是如何管理的
进程状态
A process includes:
- program counter and other registers
- stack
- heap
- data section
- text section
Process States:
- new
- ready (就绪态)
- runing (运行态)
- waiting (阻塞态)
- terminated
进程切换
进程控制块PCB
PCB是一个数据结构,是一个结构体,保存了进程的状态等等
Process Control Block:
- Process state
- Program counter
- CPU registers
- CPU scheduling information
- Memory-management information
- Accounting information
- I/O status information
- ……
进程切换时,先将当前进程的状态保存在当前进程的PCB中,然后再由CPU调度算法选择一个就绪态进程,将此进程的PCB读入,开始运行此进程。
进程从运行态切换到就绪态是通过时钟中断进行控制的 进程由运行态进入等待态是由进程主动通过一些操作进入的,这些操作是系统调用,于是会陷入内核,然后内核就会保存状态,切换进程
系统会将所有进程的PCB集中管理,可以抽象成队列的概念。 大多数系统通常使用数组进行进程的管理,原因如下:
- 随机访问比较快速
- 数组结构简单,管理起来方便
- 局部性原理强
进程创建
进程间资源的共享
- 子进程共享父进程全部资源 –多见于嵌入式系统
- 子进程共享部分父进程资源 –Unix
- 子进程与父进程独立 –Windows
进程的创建
每个进程都拥有自己独立的虚拟地址空间
- 子进程可以通过拷贝父进程的所有资源来创建
- 可以通过父进程直接加载一个新程序来创建
进程的结束
在Unix下,进程结束后资源由父进程来回收,如果父进程不回收,则由系统的根进程(init)来回收。
进程间通信
- 消息传递
消息传递有信号量等多种方式,分阻塞和非阻塞两种方式
- 阻塞型
- 当进程请求系统调用后,如果系统调用不能马上执行,则会进入等待状态,也就是说进程不知道系统调用是不是立即执行
- 非阻塞型
- 进程请求系统调用后,如果系统调用不能马上执行,则会返回通知进程系统调用没有执行
- 阻塞型
- 共享内存
进程在实际物理内存中并不是理想状态的完全独立,而是两个进程中不相同的部分独立,而相同的部分(例如代码段)则共享。
多进程在一定意义上实现了模块化,便于管理