进程和程序的区别
进程是操作系统结构的基础;是一个正在执行的程序;计算机中正在运行的程序实例;可以分配给处理器并由处理器执行的一个实体。
进程实体:为使程序(含数据)能独立运行,应为之配置一进程控制块,即PCB;而由程序段、相关的数据段和PCB三个部分便构成了进程实体。进程的实质是进程实体的一次执行过程
进程和程序的区别:
ONE:进程是一个动态概念,强调的是执行的过程,每个进程包含程序段和上下文数据,和程序控制块,即为PCB,PCB是一种数据结构,而程序是存储在本地硬盘的数据,并没有放入内存条,而进程大多数时候是放在内存条可供cpu计算的数据(进程也会挂起进入磁盘)。
TWO:进程有并发特征,而程序没有。
THREE:一个进程可以执行多个程序(如Linux中通过exec调用),同一程序的多次执行将产生多个不同的进程。同一个程序的一次执行也可产生多个进程(如在程序中多次调用Linux中的fork)。
什么是PCB,PCB包含的数据,以及PCB的作用
PCB是为了描述进程的运行而设定的一个数据结构,每一个进程都有一个PCB,在PCB这个数据结构里面包含如下信息:
1,处理机状态
2,进程调度信息
3,进程控制信息
4,内部标识和外部标识
操作系统PCB的用处是是为了方便暂停和加载一个进程,通过PCB把暂停时候的进程数据备份到PCB,等到加载进程的时候可以重新从PCB获取进程在停止时候的状态。
进程的五种状态,和状态之间的互相切换
起初进程是最常见的三种状态:就绪,执行,阻塞。
但是操作系统经过发展后方向三状态并不能直接解决问题,所以三种状态又细分了五种状态分别是在原有基础上多出来的:
新建态,退出态。
(1) 就绪→执行
处于就绪状态的进程,当进程调度程序为之分配了处理机后,该进程便由就绪状态转变成执行状态。
(2) 执行→就绪
处于执行状态的进程在其执行过程中,因分配给它的一个时间片已用完而不得不让出处理机,于是进程从执行状态转变成就绪状态。(时间片用完)
(3) 执行→阻塞
正在执行的进程因等待某种事件发生而无法继续执行时,便从执行状态变成阻塞状态。(I/O请求)
(4) 阻塞→就绪
处于阻塞状态的进程,若其等待的事件已经发生,于是进程由阻塞状态转变为就绪状态。(I/O完成)
什么是临界资源?
临界资源指的是操作资源的那段代码,比如操作打印机的代码,而进程一次只能允许一个进程在临界区。
进程间的关系,同步,互斥
进程的间的同步:
处理竞争就是同步,安排进行执行的先后顺序就是同步,每个进程都先后执行的顺序
同步指的是进程A和B进行协作关系。
举例:有输入进程A 通过单缓冲向进程B 提供数据。当缓冲空时,计算进程因不能获得所需数据而阻塞,当进程A 把数据输入缓冲区后,便唤醒进程B;反之,当缓冲区已满时,进程A 因没有缓冲区放数据而阻塞,进程B 将缓冲区数据取走后便唤醒A。
进程间的互斥:
它主要源于资源共享,是进程之间的间接制约关系。在多道系统中,每次只允许一个进程访问的资源称为临界资源,进程互斥就是保证每次只有一个进程使用临界资源。
举例:有两进程A 和B,如果A 提出打印请求,系统已把唯一的 一台打印机分配给了进程B,则进程A 只能阻塞;一旦B 释放打印机,A 才由阻塞改为就绪。
进程间的通信方式:信号,信号量,消息队列,共享内存,管道
信号:
首先明白一个概念,信号不是信号量。雷锋和雷峰塔的区别,2者都可以用来解决进行的同步和互斥,但是前者是通过信号处理器来实现的,后者则是通过P,V操作进行实现的。
使用信号需要知道有哪些常用的信号,在Linux下常用的有31个信号。当我们正在运行一个程序,然后按下Ctrl+C,产生一个中断,这个就是一个中断信号,达到命令程序停止的功能。
稍后会有一个专门的章节来谈谈自己对信号的一些理解。
信号量:
信号量就是一个计数器,如果有一个停车场取名叫“信号量”(在停车场老板肯定是个程序员),停车场有5个空车位,就当五个可用资源,此时若是有一辆车开来,没有阻塞队列,直接停进去,那么该车辆则进行P操作减去一,等该车辆离开车位进行V操作,资源数量加一。PV操作是一对原子操作,意思是有看P操作则必须有V操作。若5个车位都占满,则新开过来的车需要进入阻塞队列进行等待。
消息队列:
消息队列是一个类似链表的数据结构。具体会单讲
管道:
管道是文件读写方式,且是亲子关系意思就是父进程和子进程通信。
共享内存:
占题
生产者和消费者问题
问题核心:
1,保证不让消费者试图从空的缓存区拿数据
2,保证不让生产者试图往满的缓存区写数据
生产者和消费者问题既是进程同步问题也是进程互斥问题。互斥体现在当生产者往缓冲区写数据时,消费者不能从缓冲区拿数据,消费者同理,进程同步体现在当缓冲区为空后需要及时消费者通知生产者往缓冲区生产数据,生产者通知消费者同理。
参考https://www.jianshu.com/p/b16296e9ac85
哲学家就餐问题
方案一:一段时间内只让一位哲学家进入房间就餐
原理:至多只允许四个哲学家同时进餐,以保证至少有一个哲学家能够进餐,最终总会释
放出他所使用过的两支筷子,从而可使更多的哲学家进餐。以下将room 作为信号量,只允
许4 个哲学家同时进入餐厅就餐,这样就能保证至少有一个哲学家可以就餐,而申请进入
餐厅的哲学家进入room 的等待队列,根据FIFO 的原则,总会进入到餐厅就餐,因此不会
出现饿死和死锁的现象。
方案二:仅当哲学家的左右两支筷子都可用时,才允许他拿起筷子进餐。
利用AND 型信号量机制实现:根据课程讲述,在一个原语中,将一段代码同时需
要的多个临界资源,要么全部分配给它,要么一个都不分配,因此不会出现死锁的情形。当
某些资源不够时阻塞调用进程;由于等待队列的存在,使得对资源的请求满足FIFO 的要求,
因此不会出现饥饿的情形。