提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
问题1:进程是什么?
进程就是跑起来的程序,是静态的,不执行不会产生影响.双击(exe)程序后,操作系统就将该程序加载到内存中,让CPU执行指令(动态的),是系统进行资源分配和调度的基本单位,是 操作系统 结构的基础.
问题1.1进程的特点
动态性:可动态地创建,结束进程。
并发性:进程可以被独立调度并占用处理机运行。
独立性:不同进程的工作不相互影响。
制约性:因访问共享数据或进程间同步而产生制约。
问题1.2进程的组成
- 程序的代码
- 程序处理的数据
- 下一条将运行指令的地址
- 一组通用的寄存器的当前值,堆,栈
- 一组系统资源(如打开的文件)
问题1.3进程与程序的联系
1.程序是产生进程的基础。
2.程序的每次运行构成不同的进程。
3.进程是程序功能的体现。
4.通过多次执行,一个程序可对应多个进程;通过调用关系,一个进程可包括多个程序。
问题1.4进程与程序的区别
1.进程是动态的,程序是静态。程序是有序代码的集合;进程是程序的执行,进程会涉及到核心态和用户态的切换。
2.进程是暂时的,程序是永久的。进程是一个状态变化的过程,程序可长久保存。
3.进程与程序的组成不同。
进程=程序+数据+进程控制块。
问题1.5进程控制块-PCB
PCB:操作系统管理控制进程运行所用的信息集合。
PCB是用来描述进程的数据结构。操作系统为每个进程都维护了一个PCB,用来保存与该进程有关的各种状态信息。
1.5.1PCB中存储的信息有哪些
- 进程标识信息:如本进程的标识(ID),本进程的产生着标识(父进程标识),用户标识等。
- 内存指针:指明了进程要执行的代码/指令在内存的哪里,以及这个进程中依赖的数据在哪。
- 文件描述表
调度和状态信息,用于操作系统进程并占用处理机使用。
进程间通信信息,为支持进程间的与通信相关的各种标识,信号等这些信息存在接收方的进程控制块中。
存储管理信息,包含有指向本进程映像存储空间的数据结构。
进程所用资源,说明由进程打开,使用的系统资源。
有关数据结构连接信息,进程可以连接到一个进程队列中,或连接到相关其他进程的PCB。
问题1.5.2PCB的组织方式有哪些?
- 链表:同一状态的进程其PCB成一链表,多个状态对应多个不同的链表。如就绪链表,阻塞链表。
- 索引表:同一状态的进程归入一个index表,多个状态对应多个不同的index表。如就绪索引表,阻塞索引表。
注:一般会选择链表,因为可能面临进程创建,销毁等调度导致进程状态发生变化,所以链表能够更加灵活的插入和删除。
问题2:操作系统是如何管理一个进程的?
操作系统通过以下几个方面来管理进程。
- 进程的调度:在多个等待使用处理器的进程中,按照一定策略选择合适的进程,使之拥有处理器的使用权而进入运行。
- 进程的同步:对系统中的多个进程在对共享资源的使用出现竞争时进行控制和协调。
- 进程的控制:进程状态的转换。
- 进程的安全:解决因多个进程争夺资源的使用权而进入 “死锁”的僵局,使系统安全顺利地运行。
问题2.1进程调度算法有哪些?
1:时间片轮转算法
2:优先级调度法
3:多级反馈队列调度法
问题2.2进程的同步是怎样的?
对于操作系统来说,在同一个时间点通常会存在多个进程同时运行,为了实现各进程之间无冲突的运行,有以下规则.
1:直接制约关系:进程之间相互合作
例如:在一个商店中,只有供货商先供货,消费者才能从商店拿去东西.供货商与消费者形成制约关系,在这个案例中,供货商与消费者为进程,商店为公共缓冲区域.
注:在这个模型中,俩个进程是同时工作的.
2:间接制约关系:进程对资源的共享
例如:进程A和进程B共享一台打印机,如果系统已经把打印机分配给了进程A,则进程B得不到打印机等待.只有当进程A把打印机释放后,系统才能唤醒进程B使其获得打印机的使用权.
注:进程之间这种制约性的合作运行机制叫做进程间的同步。系统中进程的同步是依靠进程与进程之间互相发送消息(通信)来保证的。
问题2.3进程的控制是什么样的?
通过三状态(最基本)来控制的
问题2.4进程安全-死锁的产生原因及避免
问题2.4.1死锁的产生原因
- 互斥条件:即任意时刻一个资源只能给一个进程使用,其他进程若申请一个资源,而该资源被另一进程占有时,则申请者等待直到资源被占有者释放。
- 不可剥夺条件:进程所获得的资源在未使用完毕之前,不被其他进程强行剥夺,而只能由获得该资源的进程资源释放。
- 请求和保持条件:进程每次申请它所需要的一部分资源,在申请新的资源的同时,继续占用已分配到的资源。
- 循环等待条件:**在发生死锁时必然存在一个进程在等待,其中P1等待P2占有的资源,P2等待P3占有的资源,…,Pn等待P1占有的资源,形成一个进程等待环路,环路中每一个进程所占有的资源同时被另一个申请.
问题2.42破坏死锁
前面说了死锁产生的条件有四个,分别是:互斥条件、占有和等待条件、不剥夺条件、循环等待条件。
而死锁防止的策略就是至少破坏这四个条件其中一项。
1:破坏互斥条件:使资源同时访问而非互斥使用,就没有进程会阻塞在资源上,从而不发生死锁。
只读数据文件、磁盘等软硬件资源均可采用这种办法管理; 但是许多资源是独占性资源,如可写文件、键盘等只能互斥的占有;(不常用)
2: 破坏占有和等待条件:采用静态分配的方式,静态分配的方式是指进程必须在执行之前就申请需要的全部资源,且直至所要的资源全部得到满足后才开始执行。
实现容易,但是资源利用率不高
因为在每个进程占有的资源中,有些资源在运行后期使用,有些资源在例外情况下才被使用,可能会造成进程占有一些几乎用不到的资源,而使其他想使用这些资源的进程等待。
3: 破坏不剥夺条件:剥夺调度能够防止死锁,但是只适用于内存和处理器资源。
方法一:占有资源的进程若要申请新资源,必须主动释放已占有资源,若需要此资源,应该向系统重新申请。
方法二:资源分配管理程序为进程分配新资源时,若有则分配;否则将剥夺此进程已占有的全部资源,并让进程进入等待资源状态,资源充足后再唤醒它重新申请所有所需资源。
4:破坏循环等待条件:给系统的所有资源编号,规定进程请求所需资源的顺序必须按照资源的编号依次进行。
问题3:如何实现进程调度?
从以下几个方面来实现
1:进程状态:描述了进程接下来如何调度;有俩种状态,就绪:随时上CPU.阻塞:暂时无法执行.
2:优先级:决定先给谁分配时间,后给谁分配时间,以及分配多少时间(注:优先级只是建议,操作系统可以选择性不听)
3:记账信息:统计了每个进程在CPU上都被执行多久,分别执行了那些指令,提供调度的参考信息.
4:上下文:表示上次进程被调度出CPU的时候,当时程序的执行状态(类似于:存档+独挡),具体指进程在运行过程中,CPU内部一系列寄存器的值(寄存器:保存当前进程执行的中间结果及运行的指令)
问题4:进程之间的独立性是怎样的?
独立性:就是不同的进程只完成自己特定的任务,进程之间的工作不会相互影响。
(至于为什么,进程之间不互相影响:是由操作系统控制的)
问题5:进程之间是如何如何通信?
1、管道
把前一条命令的输出作为后一条命令的输入
2、消息队列
进程A将要发送的信息, 放在对应的消息队列里就行了,B进程需要的时候再去对应的消息队列中拿取.
3、共享内存
两个进程各自拿出一块虚拟地址空间来,然后映射到相同的物理内存中
4、信号量:
信号量的本质就是一个计数器,用来实现进程之间的互斥与同步。
5、Socket
是操作系统提供给用户的一组API
总结:在隔离性的前提下,找一个公共区域,让俩个进程借助这个区域来完成数据交换
问题6:操作系统内存资源是如何分配的?
靠虚拟地址分配:虚拟地址的意义是方便校验,方便知道当前地址是否有效
独立性:一个进程无法直接干预另一个进程内存
注:系统中所有进程对应的虚拟地址空间的内核区都会映射到同一个物理内存上(内存理论上只有一个)