网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
死锁:产生原因是几个进程因竞争系统资源或相互通信而处于永久阻塞状态。
根本原因:竞争资源 重要原因:进程推进顺序不当
处理死锁的四种方法:
- 鸵鸟算法:对死锁视而不见
- 预防死锁:设置限制条件,破坏产生死锁的4个必要条件之一或几个
- 避免死锁:资源动态分配过程中,用某种方法防止系统进入不安全状态,比如不给某个进程分配资源。
- 检测和解除死锁:采取措施解除死锁,比如剥夺某个进程的资源。
饿死:因为等待时间过长而饿死,比如在优先级分配算法中,不断的有高优先级的进程产生,则低优先级的进程总是分配不到处理器,则会饿死。 饿死是有机会分配到处理器,只是时间比较长,而死锁是相互缺乏资源不能分配处理器。
章节三:内存管理
- 内存管理基础
-
- 连续分配管理方式
- 非连续分配管理方式 分页管理方式,分段管理方式,段页式管理方式
- 虚拟内存管理 其实就是在磁盘上开辟一个空间作为缓冲区,事先把需要的资源放在缓冲区里
-
- 页面置换算法有:最佳,先进先出,最近最少使用,时钟 置换算法
内存管理是指由于计算机所有的运行程序都是要放在内存条上才能运行的,但是内存条属于紧缺资源,所以得合理利用,通过合理的分配算法并设置虚拟内存的方法来扩充内存大小。
连续分配管理方式:
- 单一连续分配
- 固定分区分配
- 动态分区分配
内部碎片和外部碎片:内存被分成各个分区,内存中分区里没有被利用的碎片是内部碎片,在内存中没有被利用的是外部碎片。
如:分片管理—固定分区(将内存分成固定大小的多个分区)—有内部碎片
分段管理—动态分区(要用多大的内存空间就开辟多大的)----最终整个内存中会剩余比如20MB,而任何进程所需要的都不止20MB,从而这20MB就是外部碎片。
非连续分配管理方式:
- 基本分页存储管理方式:将用户作业分成若干个大小相等的页,内存分成与页面大小相等的块,在为作业分配内存时,以块为单位分配。作业调度时必须一次性将所有页面调入内存。
- 优点:1,内存利用率高 2,实现了离散分配 3,便于存储访问控制 4,无外部碎片
- 缺点:1,需要硬件支持(尤其是快表,快表指的是指定作业页号和内存物理块号的对应表) 2,内存访问效率下降 3,共享困难 4,内部碎片
- 基本分段存储管理方式:将用户作业分成若干个逻辑分段,每个分段都是一组完整的逻辑信息集合。每次将一个逻辑分段调入内存中,但不要求每段都连续。
- 优点:1,便于程序模块化处理和处理变换的数据结构 2,便于动态链接和共享 3,无内部碎片
- 缺点:1,与分页类似,需要硬件支持 2,为了满足分段的动态增长和减少外部碎片,需要采用拼接技术 3,分段的最大尺寸受到主存可用空间的限制 4,有外部碎片
- 段页式管理方式:先将用户作业以逻辑结构分成若干个逻辑分段,再将每一个逻辑分段分成若干大小固定的页;而内存还跟分页存储一样分成若干个大小相同的物理块,对内存的分配以物理块为单位。
注意:不管是连续分配管理还是非连续分配管理,都是一次性将用户作业都放入内存中,这样很难满足一些大型的用户作业,有可能用户作业不能全部调入内存,那就阻塞了。
虚拟内存管理
面对大型的用户作业,无法一次性全部调入内存的情况下,那就得引入虚拟内存了。因为用户作业中有些程序是不频繁使用的,所以可以先放在外存上,当需要的时候再调入内存。这就利用的是局部性原理。
局部性原理:大多数程序在执行时,在一个较短的时间内仅使用程序代码的一部分,程序所访问的存储空间也是局限于某个区域。
请求分页存储管理方式:
利用上面讲到的基本分页存储管理方式将用户作业分页,然后利用虚拟内存管理技术,先将程序部分调入内存,其他的当需要的时候再从外存中调入。
请求分页 = 基本分页 + 请求调页功能 + 页面置换功能
- 优点:1,可以离散存储程序,降低了碎片数量 2,提供虚拟存储器,提高了主存利用率 ,有利于多道程序运行(因为可以调入多个用户作业了)
- 缺点:1,必须硬件支持(因为用了基本分页技术) 2,有些情况下系统会产生抖动现象(就是刚使用完的程序被调出内存了,下一秒又需要时又调入内存,如此反复就出现了抖动) 3,程序最后一页存在未被利用的部分
页面置换算法:
-
- 最佳置换算法:无法实现,作为一个标准来衡量其他置换算法的优劣。
- 先进先出算法:先进来的页面也先调出去, (存在Belady异常)
- 最近最少使用算法:前面被调入的代码中最少使用的代码段被调出去。 是最接近最佳置换算法的。
- 时钟置换算法:页面被访问一次计数器就+1,当计数器为0时,则将页面调出。
抖动现象和Belady异常:
抖动:刚调出的代码又调入,反复这样就是抖动。
Belady异常:先进先出算法中,缺页率会随着所分配的物理块数的增加而增加。其他置换算法没有Belady异常。
请求分段存储管理系统:跟请求分页存储管理类似,先分段,然后调入一部分分段进入内存开始运行。
章节四:文件管理
上一章节讲的是对内存的管理,这一章讲的是对外存的管理。主要涉及的就是存在外存中的文件的结构,以及如何快速的找到指定的文件。
文件系统 = 文件 + 管理文件的软件 + 数据结构
文件系统包括4层:
- 基本I/O控制层
- 基本文件系统层
- 基本I/O管理程序层
- 逻辑文件系统层
磁带和磁盘的特点是:磁盘是随机存取,磁带是顺序存取。
磁盘访问时间 = 寻道时间 + 旋转延迟 + 传输时间
文件保护:防止文件受到物理破坏和非法访问
文件目录的实现: 1,线性表 2,散列表
调度算法:
- 先来先服务算法:按照进程请求访问磁盘的先后次序进行
- 最短寻道时间算法:当前磁头所在磁道距离最近的请求最为下一次服务的对象
- 电梯调度算法:像电梯一样,当前移动方向上选择与当前磁头所在磁道距离最近的请求作为下一次服务对象。(对两端磁道请求比较不公平)
- 循环扫描算法:为了照顾到两端磁道的请求,规定磁头单向移动,例如:自里向外移动,当磁头移动到最外磁道时立即返回到最里磁道,如此循环进行扫描。
磁盘管理:
- 磁盘格式化:新磁盘是磁性记录材料的空磁盘。在磁盘能存储数据前,必须分成扇区以便磁盘控制器能进行读和写操作。这叫低级格式化。
- 引导块:计算机启动时要运行一个初始化程序(自举程序),自举程序会初始化CPU、寄存器、设备控制器和内存等。该自举程序要找到磁盘上的操作系统内核,调入内存,并转到初始地址,从而开始操作系统的运行。
章节五:设备管理
I/O软件设计的基本思想是:将设备管理软件组织成一种层次结构。其中底层软件与硬件相关,用来屏蔽硬件的具体细节;高层软件则为用户提供一个友好的、清晰而统一的接口。
I/O软件的层次结构:
- 此处为用户
- 用户层软件:进行I/O调用,格式化I/O,SPOOLing
- 设备独立性软件:命名,保护,阻塞,缓冲,分配
- 设备驱动程序:奖励设备寄存器,检查状态
- 中断处理程序:当I/O结束时唤醒驱动程序
- 此处为硬件:执行I/O操作
I/O设备的4种控制方式:
- 程序直接控制方式:程序直接控制设备,例如键盘输入,程序就一直循环访问设备控制器,直到所有的数据都输入完成。这样会一直占用着CPU。
-
- 优点:非常简单
- 缺点:CPU的利用率相当低。因为I/O太慢了,跟不上CPU的步伐。
- 中断控制方式:CPU给设备发送指令,然后等设备完成I/O后给CPU一个中断指令,其中CPU可以去干别的事情。例如键盘输入,CPU给键盘发送输入需求指令,键盘就开始输入,其中CPU去干别的事。但是每输入一个数就要中断一次。
-
- 优点:与程序直接控制方式相比,CPU和I/O设备间可以并行工作了,CPU的利用率提升了不少。
- 缺点:每输入/输出一个数据,就要去中断CPU,中断次数多了,反而耗费了大量CPU的时间,因为中断的时候,CPU要保护之前正在运行的程序现场,返回时又要恢复现场,所以浪费CPU时间。
- DMA控制方式:这是中断控制方式的加强版,因为中断控制方式每输入一个数字就要中断一次CPU,所以DMA控制方式是在外设和内存之间开辟直接的数据交换通路,先将一批数据输入内存,在一批数据输入完成后才去中断CPU,极大的提高了CPU的利用率。
-
- 优点:设备和CPU可以并行工作,数据交换速度加快,CPU利用率增加。
- 缺点:存在一定局限性,如:数据传送方向,存放数据的内存起始地址及数据的长度等都由CPU来控制,给CPU增加了负担,而且每台设备都需要一个DMA控制器,当设备增加时,多个DMA控制器的使用不经济。
- 通道控制方式:跟DMA控制方式类似,也是以内存为中心,是吸纳设备与内存直接交换数据的控制方式。但是与DMA方式相比,通道所需要的CPU干预更少,而且可以做到一个通道控制多台设备,从而进一步减轻了CPU负担。例如:CPU控制两个通道1和2,通道1连接设备控制器1,2和3等,通道2也是连接了设备控制器4,5和6等。
-
- 优点:解决了I/O操作的独立性和各部件工作的并行性。使得CPU的干预更少。不仅实现了CPU和通道的并行操作,而且通道与通道之间也能实现并行工作,各个通道上的设备也能实现并行工作,从而可以提高整个系统的效率。
- 缺点:由于需要更多的硬件(通道处理器),因此成本较高。通道控制方式通常应用于大型数据交互的场合。
SPOOLing系统:由磁盘中的输入井和输出井,内存中的输入缓冲区和输出缓冲区。
设备控制器:设备一般由机械部分和电子部分组成,其中设备的电子部分通常称为设备控制器。
设备控制器应具备的功能:
- 接受和识别来自CPU的各种指令
- 实现CPU与设备控制器,设备控制器与设备之间的数据交换
- 记录设备的状态供CPU查询
- 识别所控制的每个设备的地址
缓冲的实现方法: 1,采用硬件缓冲器实现 2,在内存划出一块存储区
设备分配依据的主要数据结构:设备控制表(DCT),设备控制器控制表(COCT),通道控制表(CHCT),系统设备表(SDT)
设备分配算法:1,先来先服务 2,优先级高者优先
假脱机技术(SPOOLing):将独占设备改造成共享设备,从而提高设备利用率和系统的效率。例如:打印机,在打印机中设置缓冲区,要打印的东西都放到缓冲区中,这样一次根据分配算法打印就实现了假脱机。
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上鸿蒙开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
68910224b259a5ffe804fa6d0db.png)
[外链图片转存中…(img-g6Xu52ij-1715794163326)]
[外链图片转存中…(img-Y5WQVo6P-1715794163326)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上鸿蒙开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新