- 博客(30)
- 问答 (7)
- 收藏
- 关注
原创 (存储管理)01.分页式存储管理
将内存划分为若干个大小相等的分区,叫做块;将逻辑空间划分出与块大小一致的分区,叫做页。作业运行时,通过地址重定位技术,实现页与块的对应。这样就以页的方式来管理存储块,就叫分页式存储管理。在分配存储块时,会根据作业的逻辑地址的大小计算所需要多少个存储块,然后查找空闲块并更新空闲块的状态为占用;回收存储块时,会将作业关联的所有空闲块的状态设置为空闲。记录空闲块状态的方法有两种:位图法和链表法。在分配存储块之后,就在页表中,增加页和块对应关系的记录;同理,回收存储块时,就会删除对应记录。访问存储块时,就会根
2021-09-05 23:23:23
1157
原创 (存储管理)02.可变分区存储管理
系统根据作业所需内存大小来动态分配内存,这也就是可变分区或动态分区。因为动态分区数量是不固定的,所以用分区说明表来记录分区信息不太合适。所以,就采用了链表形式来组织并记录分区的信息。如下图:通过链表的形式,将这些空闲且不连续的分区串联起来。因此,在给作业分配分区时,会遍历这条链表上的空闲分区,找出大小合适的分区。结合不同的场景,有三种分配合适分区的算法。1、首次适应算法:遍历链表,挑选最开始满足大小要求的分区。2、最佳适应算法:根据分区的大小升序排序 + 首次适应3、最差适应算法:根据分区的大
2021-08-29 20:44:55
1440
原创 (存储管理)01.固定分区存储管理
系统将内存划分成若干个大小固定的存储区,这些存储区大小和数量都已经固定了,因此也叫固定分区或静态分区。如下图(a):系统用分区说明表(上图(b))来记录固定分区的状态和位置信息,这样在分配内存空间时,会先判断状态为 0 (空闲)的分区,然后分配分区,并将状态更新为 1(占用)。同理,在释放分区后,将状态设置为 0。固定分区存储管理有一个缺点,那就是:对内存的利用率不高,容易产生内部碎片。因为作业转入到内存中,大小并不全是刚好等于分区的大小,固定分区中难免会有部分空闲区域,而这部分空闲区域就是内部碎片
2021-08-22 20:22:57
963
1
原创 (存储管理)存储管理的四大基本功能
存储管理的四大基本功能1、内存分配与回收当有作业进入系统时,存储管理模块就会根据当前内存情况来分配内存给它;当作业完成后,就会回收作业占用的内存,将这部分内存设置为可分配状态。分配方式主要有两种:静态分配:作业在运行之前,已经明确所需内存的大小,并且一次性分配;作业在运行的时候,不可以重新申请或移动内存。动态分配:作业在运行期间,可以根据需要动态申请内存。比静态分配灵活,并且能够提高内存的利用率,避免因静态分配导致不必要的信息加载到内存中。2、地址重定位实现程序的逻辑地址和物理地址转换,并根据
2021-08-15 21:15:03
15056
原创 (进程管理)03.死锁的解除
一旦发生死锁,有以下四种方式来解除。1、资源剥夺产生死锁的条件之一就是:资源不可剥夺。如果允许进程可以剥夺其他进程的资源,那么就可以使得一个进程可以从其他进程剥夺足够的资源,从而解除死锁状态。2、撤销进程按照某种顺序,撤销进程并释放资源,直到释放出足够多的资源,并解除死锁。最极端的情况就是,撤销了所有进程。3、进程回退让进程回退到某个状态(回退到没有获取某种资源的状态),从而释放已经获得的资源,这样其他进程就可以获得因回退而被释放的资源并解除死锁状态。4、鸵鸟策略假装没有发生死锁,不管了。因
2021-08-08 21:12:22
1266
原创 (进程管理)02.死锁产生的四个条件
产生死锁的四个必要条件就是:**1、不可剥夺**资源不能被强占剥夺,只能被占有它的进程释放**2、互斥**对于独占资源,只能分配给一个进程。其他进程需要使用,就只能等待资源由占用状态变成空闲状态。**3、请求和保持**进程因为请求新的资源受阻,但不释放已经占有的资源**4、环路等待**至少有两个及以上的进程形成一条环路,环路上的某一个进程请求的资源正是下一个进程所占有的资源只有当这四个条件同时满足,死锁才会发生。一般情况下,死锁发生的概率比较低。如果需要预防死锁的发生
2021-08-01 21:39:18
116
原创 (进程管理)01.死锁
死锁是进程僵持的一种状态。是因为进程推进不当,导致多个进程竞争有限的资源;在无外力的作用下,各个进程永远无法分配到所需要的资源,进而导致进程无限期地等待。如下图:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OMmq3Shl-1627218390461)(https://camo.githubusercontent.com/ec81c5387aa45759dfef2169db3d25faa8dc9b36c187e33336b0a18db89cd329/687474707
2021-07-25 21:06:47
158
原创 (进程管理)05.进程的调度算法
进程调度,就是绪状态的进程获得 CPU 的使用权,进程由就绪状态转变成运行状态。进程调度可以分为:抢占式 系统会根据进程的优先级高低来进行调度,进程之间可以插队非抢占式 系统按照先来先服务的方式来调度,进程间不能插队进程调度算法有很多,比较常用的调度算法如下:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xvS0zsyf-1626610807485)(https://camo.githubusercontent.com/6342843746315f3c6f2e846
2021-07-18 20:20:24
101
原创 (进程管理)04.进程和线程的通讯方式
进程和线程的通讯方式都是一样的,一共可以分成两种1、共享存储一个进程(线程)将信息存储到一个所有进程(线程)都可以访问的存储区,那另一个进程(线程)就可以从这个存储区获取信息内容。2、网络通讯进程(线程)之间可以通过网络通讯来完成信息交换的目的。本篇文章由一文多发平台ArtiPub自动发布...
2021-07-11 22:23:02
48
原创 (进程管理)03.进程和线程的同步方式
进程和线程的同步方式:进程和线程的同步方式基本一致,主要就是锁和信号量1、锁锁就是利用资源的独占性和互斥性来确保进程(线程)同步的。简单来说,一个进程(线程)获得了一个资源的锁,相当于这个进程(线程)获得了该资源的使用权,并且拒绝被其他进程(线程)占用。不过其他进程(线程)可以获取,但是会被阻塞了,直到资源的锁被被释放,那么才能获得资源的锁。2、信号量信号量机制,和锁机制类似。信号量会对资源的数量进行记录,每当进程(线程)申请一定数量的资源,就会更新空闲资源的数量;一旦某个进程(线程)申请的资源
2021-07-04 22:27:21
154
原创 (进程管理)02.进程和线程的状态切换
进程的状态切换:进程主要有五种状态,分别是新建、就绪、运行、阻塞、销毁。如下图:严格来说,进程还有挂起的状态,主要为了解决内存资源不足的问题。如果终端用户请求、父进程请求、负荷调节都需要使用挂起状态。如下图:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OfegCY23-1624800957104)(https://camo.githubusercontent.com/1b7a97e33cf6a59dd5cf3705977eb4f8d6a0d5267f346b2f0e
2021-06-27 21:36:14
163
原创 (进程管理)01.进程和线程
进程:进程是系统资源分配和独立运行的基本单位。进程的创建、调度、运行和销毁都是由操作系统控制、操作系统会负责对进程进行状态的切换,而这便是对进程的管理。进程会创建进程,前者称为父进程,后者便是子进程。而子进程也可以创建进程,这样就会形成一颗进程树。如下图:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ltQhxfyC-1624194207468)(https://camo.githubusercontent.com/61961a466d62848ef1ae4caa1a
2021-06-20 21:03:44
97
原创 (设计模式)总结
经典的设计模式有 23 种,分成三类,分别是:创建型:1、单例2、工厂3、建造者4、原型结构型:1、适配器2、装饰器3、门面4、享元5、代理6、组合7、桥接行为型:1、策略2、迭代器3、模板方法4、命令5、状态6、观察者7、责任链8、访问者9、中介者10、解释器11、备忘录但其实很多模式都是新瓶换旧瓶。例如:策略模式、状态模式、解释器模式、命令模式基本大同小异。所以不用太刻意去记住这些设计模式,很多设计模式都很类似,有时容易与其他设计模式混淆。虽然有些模式
2021-06-13 22:02:44
72
原创 (设计模式)责任链
责任链:将每个模块负责的处理流程链接起来,形成一条链子,所有请求的数据进入这条链子时,都会由链头到链尾被链子上的各个模块处理。例如:Java EE 的 Filter(过滤链)就是责任链,所有请求都必须经过这条过滤链,每经过一个节点都会被这个节点进行处理。如果请求满足过滤条件,那么就会进入下一个过滤节点,直到到达过滤链的尾部。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-L5Pc9hA2-1622986462684)(https://camo.githubuserconte
2021-06-06 21:34:38
92
原创 (设计模式)模板方法
模板方法:定义好一个执行模板(骨架),然后将一些动态的流程和数值参数化,这样就可以根据不同的参数产生不同的结果。例如:JDK 的 AQS(AbstractQueueSynchronizer) 就是采用了模板方法模式。AQS 已经定义好线程同步的流程和细节,只有五个方法是没有实现的,由子类负责具体实现,这 5 各方式如下:这 5 个方法的作用就是约束线程应该以什么样的方式来获取和释放 “资源”。多线程运行时,必定面临资源不够的情况,此时 AQS 的 四个方法(try 开头)就是用于以独占还是共享的方式来
2021-05-30 21:11:42
84
原创 (设计模式)命令
命令模式:将需要执行的流程封装成一个任务(命令),然后提交给执行器(命令执行者)执行。例如:JDK 线程池里的 Execultor 就是采用了命令模式,Executor 是命令执行者,Runnable 是命令,Executor 里的 execute 方法传入的参数就是 Runnable,如下:Runnable 负责定义任务的流程,Execultor 负责执行任务命令。模式分析:1、命令模式和策略模式,我觉得完全可以作为一种模式。根本就是新瓶换旧酒。同样都是就处理流程集中并封装到一个对象里(策略和任
2021-05-23 20:50:50
109
原创 (设计模式)观察者
观察者模式:主要涉及两个对象,主题(被观察者)、观察者。如果主题发生变化,那么就会通知所有订阅该主题的观察者。例子:JDK 中有一套通用的观察者模式模板。那就是 Observable (可观察) 和 Observer (观察者),它们的关系如下:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jsZHQmHz-1621176152007)(https://ynote-resource-dl.lx.netease.com/ydl/resource?key=qqD0D39D1A
2021-05-16 22:42:48
75
原创 (设计模式)迭代器
迭代器是用来遍历容器的工具,迭代器内部封装了容器遍历的细节。因为容器可能比较多,而且结构也可能各不相同,例如有:数组、哈希表、链表、跳表、红黑树、多路树、图等等。因此,每种容器一般都会提供各自的迭代器,用于遍历容器里的数据。每种容器都有自己的迭代器,但如果每种迭代器接口不统一,那么使用成本极高,因此每个容器的迭代器都必须统一规范。例如:JDK 的迭代器接口,主要定义三个方法,分别是 hasNext、next 和 remove。如下:在遍历容器的数据时,只需要使用其迭代器的 hasNext、next
2021-05-09 22:20:16
144
原创 (设计模式)策略
策略模式:针对不同的情况和场景,使用相应的处理策略。不同的策略,处理的逻辑各不相同。例如;在 JDK 的线程池配置参数里面,就有一个拒绝策略的参数。这个拒绝策略是线程池最后保险机制,一旦线程池处理请求达到饱和就会触发拒绝策略,而线程池默认的拒绝策略就是丢弃策略(AbortPolicy),除此之外还有另外三种策略,如下图:这四种拒绝策略实现 RejectedExecutionHandler 接口,该接口定义了一个 rejectedExecution 方法,所有具体拒绝策略就在该方法实现具体的逻辑。如下:
2021-05-07 22:40:15
91
原创 (设计模式)装饰器
装饰器模式:在原有的功能附加额外的功能,从而扩展和强化已有的功能,同时也保留着原有功能的效果。例如:JDK 的 IO 包里,就有很多装饰器的例子。如下 InputStream 的 UML 图:InputStream 是所有输入流的顶级抽象基类,其中定义了最基本的 read 方法,负责读取数据,如下:这里以 BufferedInputStream 为例,这个类除了提供读取的功能,还能将输入流缓存起来,减少数据传输的次数。从上面的 UML 可以知道 BufferedInputStream 是集成 Fi
2021-04-25 12:06:09
60
空空如也
SpringMVC的拦截器,路径拦截与排除问题
2019-03-27
阿里云服务器是不是限制对外请求
2019-02-20
希望大家能够帮帮我,谢谢!
2017-06-07
DefaultTableModel表格问题
2017-06-06
为什么removeAll()方法没有移除JLabel组件
2017-05-27
如何开发一个可以联网的手机app?
2017-01-30
这个不是函数重载,那它属于什么?
2016-10-11
TA创建的收藏夹 TA关注的收藏夹
TA关注的人