操作系统之处理机的调度
处理机调度的层次和调度算法的目标
在多道程序环境下,进程数目往往多于处理机数目。
这就要求系统能够按某种算法,动态的把处理机分配给就绪队列中的一个进程,使之执行
分配处理机的任务是由处理机调度程序完成的
处理机调度的层次
高级调度:
用于决定把外存上处于后备队列中的哪些作业调入内存,并为它们创建进程、分配必要的资源,然后将新创建的进程排在就绪队列上,准备执行
又称长程调度或作业调度。它的调度对象为作业,只适用于多道批处理系统中,不适合实时和分时系统。
低级调度:
用来决定就绪队列中的哪个进程应获得处理机,然后再由分派程序把处理机分配给该进程。为最基本的一种调度
又称进程调度或短程调度。它的调度对象为进程或内核级线程,适用于所有类型的操作系统。
中级调度:
又称内存调度。主要目的是为了提高内存利用率和系统吞吐量。
使那些暂时不能运行的进程不再占用宝贵的内存资源,而将它们调至外存上去等待,把此时的进程状态称为就绪驻外存状态或挂起状态。
进程调度可采用下述两种调度方式:
非抢占方式(Non-preemptive...
操作系统之进程同步
进程同步
进程同步机制
进程同步机制:利用他们保证程序执行的可再现性
进程同步的基本概念:某进程未获得合作进程发来的消息之前应该进程等待,消息到来之后方可继续合作关系
进程间两种形式的制约关系
间接相互制约关系 — 源于资源共享
直接相互制约关系 — 源于进程合作
临界资源:互斥访问
进程间采取互斥方式,实现对资源的共享
生产者消费者问题:
生产者进程和消费者进程都以异步方式运行,但它们之间必须保持同步。
把一次仅允许一个进程访问的资源叫做临界资源
临界区
每个进程中访问临界资源的那段代码
对欲访问的临界资源进行检查
若此刻未被访问,设正在访问的标志 ……进入区
访问临界资源 ……临界区
将正在访问的标志恢复为未被访问的标志 ……退出区
其余部分 ……剩余区
进程互斥:两进程不能同时进入访问同一临界资源的临界区
同步机制应遵循的规则
空闲让进
忙则等待
有限等待
让权等待
信号量机制
整型信号量
定义:整型量,除初始化外,仅能通过两个原子操作来访问
P操作 wait(S):
While...
操作系统之进程的描述与控制
前驱图和程序执行
前趋图
前趋图(Precedence Graph)
是一个有向无循环图,可记为DAG,用于描述程序/进程之间执行的先后顺序。
image-20250505172730924
图中每个结点可用来表示一个进程或程序段,结点间的有向边表示两个结点之间存在的偏序或前趋关系
如P1与 P2存在前趋关系,记作P1...
操作系统之处理机的死锁部分概述
死锁概述
死锁(Deadlock):是指多个进程在运行过程中因争夺资源而造成的一种僵局,当进程处于这种状态时,若无外力作用,它们都将无法再向前推进。
资源问题
可重用性资源和消耗性资源:
可重用性资源:
是一种可供用户重复使用多次的资源。每一个可重用性资源只能分配给一个进程使用,不允许多个进程共享。
资源的单元数目是相对固定的,在运行期间既不能创建也不能删除它
消耗性资源:
在进程运行期间,由进程动态地创建和消耗。
资源的单元数目在进程运行期间可以不断变化的。进程可以请求若干个可消耗性资源单元。
可消耗性资源通常由生产者创建,消费者消耗。
可抢占性资源和不可抢占性资源。
可抢占性资源:
某进程获得该资源后,该资源可以再被其他进程或系统抢占。
不会引起死锁。
不可抢占性资源是指资源一旦被分配给进程,只能在进程用完后自行释放。
###...
Java难绷知识03--包装器类及其自动装箱和拆箱
Java难绷知识03——包装器类及其自动装箱和拆箱
本篇文章和之前的倾向稍微有些不同,这篇文章我不仅要讨论一些容易头疼的细节,而且我打算尝试讨论一下如何理解Java中的包装类以及自动拆箱和自动装箱
自动装箱(Autoboxing)和自动拆箱(Unboxing)是在基本数据类型和它们对应的包装类之间“转换”的一个包装过程,其中
装箱:基本数据类型包装成对应的包装类
拆箱:包装类拆包装成基本数据类型
自动拆装箱下,上述转换在代码中是隐式的,由编译器自动完成。...
第十五届蓝桥杯Java国赛B组D题-园丁题解
image-20250424201815331
题目大意
题目的核心是要处理一棵树上每个节点的权值,对于拥有两个及以上儿子节点的父节点,要保证所有儿子节点的权值两两相乘不能是完全平方数,目标是求出最少需要修改多少个节点的权值,才能让整棵树满足这个条件。
思路
完全平方数的判定
首先什么是完美平方数,如果一个正整数 a 是某一个整数 b 的平方,那么这个正整数 a
叫做完全平方数。零也可称为完全平方数。
两个数 x 和 y 的乘积是完全平方数,当且仅当 x 与 y
的乘积中,所有质因子的幂次都是偶数。
例如 4 * 9 = 36 是完全平方数,因为
4 = 22,9 = 32
,他们的质因子的幂次都是偶数。
进一步推导,这个条件等价于 x 和 y 的 “平方因子化简后”
的形式相同。所谓 “平方因子化简”,就是对每个数 a
分解质因数后,只保留每个质因数的奇数次幂(即 ai
的“平方自由部分”),这部分记作 f(ai)。
若 f(ai) = f(aj)
,那么...
SpringFrameworkPart6-Spring Framework常用注解
Spring框架核心注解
Spring的一个核心功能是IOC,就是将Bean初始化加载到容器中,Bean是如何加载到容器的,可以使用Spring注解方式或者Spring
XML配置方式。
Spring注解方式减少了配置文件内容,更加便于管理,并且使用注解可以大大提高了开发效率!
注解本身是没有功能的,和xml一样,注解和xml都是一种元数据,元数据即解释数据的数据,也就是所谓的配置。
我们可以通过
org.springframework.beans.factory.annotation 和
org.springframework.context.annotation 包中的注解来使用
Spring DI 引擎的功能。
xml用来管理bean;
注解只负责完成属性的注入;
使用注解需要开启对注解的支持
12<context:component-scan...
Spring Framework Part5-Spring中的AOP面向切面编程
什么是
AOP,如何理解面向切面编程
AOP,
Aspect Oriented Programming
,即面向切面编程。
通过预编译方法和运行期间动态代理的方式实现,在不修改源代码的方式下,给程序动态统一添加额外功能的一种技术。
AOP是对面向对象编程OOP的一个补充。
它的目的是将复杂的需求分解为不同的切面,将散布在系统中的公共功能集中解决。
它的实际含义是在运行时将代码切入到类的指定方法、指定位置上,将不同方法的同一个位置抽象为一个切面对象,并对该对象进行编程。
AOP 的目的是为了解耦 其次是简化开发,AOP 是 Spring 的核心
面向切面编程
他是一套规范,通过预编译方式和运行期间动态代理实现程序的统一维护
核心概念...
SpringFrameworkPart4-IoC基于注解管理bean
IoC 基于注解方式操作 Bean
管理
使用Spring的IoC容器,实际上就是通过类似XML这样的配置文件,把我们自己的Bean的依赖关系描述出来,然后让容器来创建并装配Bean。一旦容器初始化完毕,我们就直接从容器中获取Bean使用它们。
使用XML配置的优点是所有的Bean都能一目了然地列出来,并通过配置注入能直观地看到每个Bean的依赖。它的缺点是写起来非常繁琐,每增加一个组件,就必须把新的Bean配置到XML中。
我们可以使用Annotation配置
基于注解配置 Bean
在Spring中,基于注解方式配置Bean,主要应用于项目开发中的组件,eg :
Controller, Service, DAO.
常用的组件注解的形式有——
@Component :
表示当前注解标识的是一个组件,相当于定义了一个Bean,它有一个可选的名称,默认是mailService,即小写开头的类名。
@Controller :
表示当前注解标识的是一个控制器,通常用于Servlet
@Service...
Spring Framework part3-IoC基于XML管理Bean下篇
接着上篇进行
p 命名空间
引入 p 命名空间
123456789<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/util ...