目录
一.进程的一些基本概念
1.什么是进程
进程是操作系统对于正在运行的程序的一种抽象;并且进程是操作系统进行资源分配的基本单位。
2.进程的状态
3.PCB(进程控制块)
(1)pcb的作用
在操作系统之,进程也是需要某种数据结构(常见为双向链表)来进行管理;所以,在运行一个程序的时候,首先需要给该进程分配一些资源(如内存,网络,硬盘等),然后进程启动之后,会创建一个PCB,之后操作系统根据pcb来管理进程,来实现一些基本的操作如增删改查。
(2)pcb中包含的内容
- pid:操作系统为每个进程分配的一个身份标识,其次一个系统中的pid是唯一的。
- 内存指针:标识进程占用的内存的位置。
- 资源清单:设备资源(如打印机等)和文件资源。
- 优先级
- 一些其他调度信息:如进程执行的时间,执行了哪些代码
- 进程上下文:进程切换出去时的环境为上文,恢复执行时的环境为下文;当切换出去时需要保存上文;恢复执行环境时,需要读取之前保存的信息到下文。
4.进程创建的过程
1)申请空白PCB,为新进程申请获得唯一数字标识符,并从PCB集合中索要一个空白PCB。
2)为新进程分配其运行所需的资源。
3)初始化进程控制块。
4)将新进程插入到就绪队列中
5.常见的进程调度算法
- 时间片轮转算法:相当于是对每个进程分配一个时间片,当前的时间片消耗完就会进入到队尾等待重新获取时间片,直到该任务执行结束。时间片轮转从宏观看是并发,微观上是并行。
- 先来先服务算法:根据时间先后进行执行。
- 高优先级算法:优先级高的进程先执行,优先级大概=进程优先级信息+进程等待时间。
- 短作业优先算法:某个任务执行的时间越短,就优先进行执行。
- 抢占式和非抢占式:抢占式指的是当某个优先级高的进程加入,可能这时候优先级低的进程正在执行,这时候就会暂停优先级低的任务,让出cpu来让优先级高的进程先执行;非抢占式就是某个正在的进程必须执行往,有进程告诉操作系统,才可以调度之后的进程。抢占式适用于一些实时性高的系统。
二.进程与线程的区别
1.进程包含线程,一个进程中至少有一个线程
2.进程是系统分配资源的最小单位,线程是cpu调度的最小单位
3.进程状态的改变比线程改变状态花费的时间更多;所以创建一个线程比创建一个进程的时间少
4.每个进程都有自己的独立的虚拟地址空间,对于一个进程中的多个线程来说,可以共享该进程的内存空间
5.一个进程挂了,不会影响其他的进程,一个进程中的一个线程挂了,可能会导致整个进程挂掉;例如一个线程申请的内存超过了该进程内存,就可能导致该情况
三.进程间的通信方式
1.管道
由于进程是操作系统分配资源的最小单位,且各个进程之间是不能感受到对方的存在,所以进程之间是相互隔离的,但是有时候我们还需要进程之间进行通信,那么就需要一些方式来进行解决。
常见的通信方式有如下:
管道pipe:管道是⼀种半双⼯的通信⽅式,数据只能单向流动,⽽且只能在具有亲缘关系的进程间使⽤。进程的亲缘关系通常是指父子进程关系。
命名管道FIFO:有名管道也是半双⼯的通信⽅式,但是它允许⽆亲缘关系进程间的通信。
消息队列MessageQueue:消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载⽆格式字节流以及缓冲区⼤⼩受限等缺点。
2.共享内存
共享内存:共享内存就是映射⼀段能被其他进程所访问的内存,这段共享内存由⼀个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信⽅式运⾏效率低而专门设计的。它往往与其他通信机制,如信号量,配合使用,来实现进程间的同步和通信。
3.文件网络
文件网络: 套接字Socket,套解⼝也是⼀种进程间通信机制,与其他通信机制不同的是,它可⽤于不同及其间的进程通信。
4.信号量
信号量:信号量是⼀个计数器,可以⽤来控制多个进程对共享资源的访问。它常作为⼀种锁机制,防⽌某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同⼀进程内不同线程之间的同步手段。
5.信号
信号:信号是⼀种⽐较复杂的通信⽅式,⽤于通知接收进程某个事件已经发生。