进程概述
进程包含三个部分
应用程序本身的代码和数据 这一部分称为应用代码部分或者应用空间
应用程序调用os函数时候 所涉及的os代码和数据部分称为内核代码部分或者内核空间
os记录的进程在运行时的各种信息
专门进行进程管理的称为PCB 称为进程控制块 PCB 就是C语言的结构体 该结构体非常大 成员项达到300个左右
进程控制
在有OS的计算机上 应用程序必须在OS的控制下才能运行
OS控制内容
1.分配内存空间 然后将程序调入内存并启动运行 运行后程序就变成一个进程
2.OS调度器对进程进行调度
在OS上 众多进程是交替运行的 每个进程只能以ms级别的时间片进行运行 在这个时间片内可以占用cpu运行进程本身
3.OS进行进程管理时 会记录进程从生到死所涉及到的各个方面的信息
4.意外事件处理
比如当正在运行的进程需要键盘输入数据 但是一直等不到数据 那么OS调度器会将CPU占有权进行回收 让CPU运行另外一个进程
5.进程运行结束后 回收进程运行时候所占用的内存空间 PCB等各种资源
进程状态管理
进程有两种状态类型的队列
1.就绪态队列
程序被加载到内存后,进程被创建 程序就变成了进程 进程进入了就绪状态
OS会为进程建立pcb
进入就绪态后 进程就会加入就绪队列 随时等待被CPU执行
执行态(cpu时间片到了) > 就绪态
2.阻塞态队列
执行态 > 阻塞态(IO阻塞)
执行态
就绪态 > 执行态
终止态
程序所占用的一切资源将会全部回收
进程调度和进程通信
进程只有在执行态的情况下 才会拥有CPU的执行权 每个cpu执行片在10ms-20ms左右
进程之间的通信都必须要通过第三方的共享机制来实现数据的交换
进程之间关系
原始父进程 Windows 是桌面这个图形界面程序
Linux 是运行一个init的程序
进程组关系
利用进程组关系用来区分不同进程对同一文件的操作权限
文件的属主对自己创建的文件有读写权限
文件的属组对文件只有读而没有写的权限
其他进程组对文件没有读写权限
轻量级进程 线程
进程的切换十分耗费时间也耗费存储空间用来保存被切换的进程信息
有点类似于函数中的函数调用 当A函数调用B函数的时候 A的断点地址 局部变量都需要先保存起来
线程的最大优势就是线程在相互切换的时候 非常节省计算机资源
线程提供的两种方式
1.由操作系统提供
2.由线程库方式来提供 独立于OS之外
线程也会参与操作系统调度
与进程一样 线程也有就绪/执行/阻塞等各种状态 线程也会参与调度器的调度
线程是和进程一起并发运行的 线程和进程之间也存在着相互切换 操作系统是以进程为基本单位来分配内存和cpu资源 多个线程共享进程中的资源
线程是基于进程而存在的 没有系统分配给进程的这些资源 线程是无法运行起来的
进程和线程的用途
程序运行起来后就形成了一个进程 操作系统是以进程为单位来分配CPU和内存资源
线程用来实现一个进程内部的多线任务
如在读取键盘的同时还需要从网卡上读取数据 一个线程专门读取键盘 一个读取网卡