首页 > 编程知识 正文

Java常见的面试题,spring运行原理面试题

时间:2023-05-04 06:05:17 阅读:150765 作者:1587

文章目录一、基础概念二、信号量与p、v操作三、pv原语四、死锁相关概念

一.基础概念

1、过程:过程是具有一定独立功能的程序对某个数据集合的执行活动。 这是操作系统动态执行的基本单元,在现有的操作系统中,进程是基本的分配单元,也是基本的执行单元。

2、过程PCB )系统为管理过程设定的特殊数据结构,记录过程的外部特征,描述过程的运动变化过程。 因为系统利用PCB来控制并管理过程,所以PCB是系统感知过程存在的唯一标志。 流程与PCB一一对应)。

3、关键节:每个进程访问关键节的过程称为关键节。 关键部分是一次只能由一个进程使用的共享资源。 一次只允许一个进程进入临界区,进入后不允许其他进程进入。

4、锁定:在多线程编程中,操作系统引入了锁定机制。 锁定机制可确保在多核多线程环境中,在任何给定时刻只有一个线程进入关键模式,从而确保关键节中操作数据的完整性。

5、死锁:一个进程需要独占地访问多个资源。 如果操作系统允许多个进程同时共享系统资源,则进程可能永远被阻止。 这种现象称为死锁。

二.信号量和p,v操作1、信号量:1965年荷兰计算机科学家E.W.Dijkstra提出的新同步工具。 他将交通管制中多种颜色的信号灯管理交通的方法引入操作系统,使两个或多个进程可以通过信号量展开交互。 信号量常常由一个记录型数据结构来表示,它包括两个部分:信号量的值和信号量队列的队列指针。 例如:信号量为二元排列(s,q )。 s信号量的状态(一个整数)与s的初始值为非负)信号灯相似)可以理解为。 q是其队列,在确立信号量时q为空。

s=0 :绿灯s 0 :红灯2、原语:信号量只有同步原语可以操作,但原语是在执行时不能中断的过程,也就是原子操作。 Dijkstra发明了两个同步原语: p操作和v操作。 此外,还使用了wait和signal、up和down、sleep和wakeup等符号。 利用信号量和p、V操作既可以解决并发进程的冲突问题,也可以解决进程的合作问题。 例如:更改信号的状态,p调用1次-1,v调用1次。

3、上锁原语:

lock:(w锁定位为1,表示锁定) while ) w==1)保护现场进程CPU现场; 将当前进程的pcb插入w的队列中; 使进程进入“等待”状态; 更改进程时间表; (w=1; //锁} 4、开锁原语:

lock:(w locking bit为1,表示已锁定) while ) w (w队列不为空) )删除队列的第一个元素; 将当前进程的pcb插入w就绪队列; 使该过程进入“就绪”状态; (w=0; //解锁(} 5、P操作:

p(s)是一个原语操作,p操作执行 s ,若s为负数,调用p(s)的进程被阻塞,放到等待队列q中。

p(s ) ) s----; 挂起调用if(s0 )进程的CPU现场; 将进程的pcb插入到s的队列中; 转移到使进程处于“等待状态”的进程日程; }} 6、V操作 :

v(s)刚好与p(s)操作相反,v操作执行 s++ ,若s为大于0,继续执行;s =0,从信号灯等待队列移出一个进程,解除等待状态,返回本程序继续执行。

v(s ) ) s; 从if(s=0) s队列的开头元素移动; 将此进程的pcb插入就绪队列; 将流程设置为“就绪”; (三) pv原语pv原语通过操作信号量处理进程间的同步与互斥的问题。。 其核心是不可分割、不可中断的程序。 基本思想是在新的变量类型(semaphore)上记录当前可用资源的数量。

semaphore有两种实现方法。

semaphore的值必须大于或等于0。 0表示当前没有可用资源,正数表示当前可用资源的数量。 semaphore的可取值为正或负,负值的绝对值表示等待进入临界区域的进程数。 信号量由操作系统维护,并且用户进程只能通过初始化和两个标准原语(p、v原语)进行访问。 在初始化中,可以用非负整数指定空闲资源总数。

P原语:阻塞原语,负责将当前进程从运行状态转换为块状态,直到其他进程调用它。 操作者申请空闲资源,将信号量减1。 如果成功就结束; 如果失败,进程将被阻止。

V原语:唤醒原语,负责唤醒被屏蔽的进程,有参数表并被保管等

待被唤醒的进程信息。操作为:释放一个被占用的资源(把信号量加1),如果发现有被阻塞的进程,则选择一个唤醒之。

P原语操作的动作是:

sem减1。若sem减1后仍大于或等于零,则进程继续执行。若sem减1后小于零,则该进程被阻塞后进入与该信号相对应的队列中,然后转进程调度。

V原语操作的动作是:

sem加1;若相加结果大于零,则进程继续执行;若相加结果小于或等于零,则从该信号的等待队列中唤醒一等待进程,然后再返回原进程继续执行或转进程调度。

PV操作对于每一个进程来说,都只能进行一次,而且必须成对使用。在PV原语执行期间不允许有中断的发生。

P操作,原子减少S,然后如果S < 0,则阻塞当前线程。
V操作,原子增加S,然后如果S <= 0,则唤醒一个阻塞的线程。

信号量机制:
(1) 整型信号量:不满足“让权等待”。
(2) 记录型信号量:只可申请一类资源,该资源有n个,一次只可申请一个。将资源分光,多类资源时易产生死锁。
(3) AND型信号量:可申请n类资源,每类资源有m个,每次可申请每类资源中的一个。会将资源分光。
(4) 信号量集:可申请n类资源,每类资源有m个,每次可申请每类资源中的多个。但低于下限时,不予分配。

四、关于死锁的概念

1、死锁的原因:
1)因为系统资源不足。

2)进程运行推进的顺序不合适,保证有先后顺序。

3)资源分配不当等。

2、产生死锁的四个必要条件:
1)互斥条件:一个资源每次只能被一个进程使用。

2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。

3)不剥夺条件: 进程已获得的资源,在末使用完之前,不能强行剥夺。

4)循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。存在一个进程等待序列{P1,P2,…,Pn},其中P1等待P2所占有的某一资源,P2等待P3所占有的某一 源,……,而Pn等待P1所占有的的某一资源,形成一个进程循环等待环。

3、解决死锁的方式. (后续会具体展开)
1)鸵鸟算法:对死锁视而不见。
2)死锁的防止:

(1)破坏死锁的四个必要条件中的任意一个即可防止死锁。(条件一:许多资源不能同时访问,条件三:适用于对主存资源和处理器资源的分配,而不适用于所有资源)

(2)静态分配策略(破坏条件二):一个进程在执行前就申请它所要的全部资源,直到它所要的资源都得到满足后才开始执行。这种策略严重降低了资源利用率。

(3)层次分配策略(破坏条件四):资源被分成多个层次,一个进程得到某一层的一个资源后,它只能再申请在较高一层的资源;当一个进程要释放某层的一个资源时,必须先释放所占用的叫高层的资源,当另一个进程获得了某一层的一次资源后,它想在申请该层中的另一个资源,那么,必须先释放该层中的已占资源。比静态分配在实现上要多花一点代价,但提高了资源使用率。然而,如果一个进咸亨使用资源的次序和系统内的规定各层资源的次序不同时,这种提高可能不明显。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。