本篇博客依据王道、与我的笔记而写,讲解了内存的基础知识、内存管理的概念、进程的映像、连续分配管理方式、动态分区分配算法、基本分页存储管理、基本地址变换机构、TLB快表、两级页表、基本分段存储管理方式、段页式存储管理方式、虚拟内存、请求分页管理方式、页面置换算法、页面分配策略、内存映射文件

在博客末尾,附有学习日记

知识大纲(内存的基础知识)

简单的介绍了内存相关的基本知识(作用、指令、逻辑/物理地址、程序咋运行-链接+装入...

什么是内存,有啥用?

外存与cpu的中介,加快交换数据的速度

从而引出。逻辑地址,如何转化为内存里的物理地址

补充知识:常用数量单位

换算单位:1GB=10^10MB=10^20KB=10^30B

指令的工作原理

可以把指令看成任务说明书!这样也挺棒

因为指令存在外存中

从而引出。外存视为逻辑地址,如何在装入时,转换为内存中的物理地址

抽象版:

解释版

装入的三种方式
绝对装入

最简单暴力的装入方式,在装入前强改逻辑地址,方便装入。

可重定位装入

在装入的过程中,动态的更改。

动态重定位

物理地址=逻辑地址,额外设计重定位寄存器。

只用在用到时,才会用逻辑地址+寄存器内的值

从写程序到程序运行

编译、链接、装入

链接的三种方式

1、静态链接(直接封装好)

2、动态链接(装入时,在封装)

3、运行时动态链接(运行到那块,装入那块)

知识回顾与重要考点

知识大纲(内存管理的概念)

都是基础

内存空间的分配与回收

内存空间的拓展

地址转换

内存保护

通过 重地位寄存器 与 界地址寄存器 进行保护。

知识回顾与重要考点

知识大纲(进程的内存映像)

可能考法

知识大纲(连续分配管理方式)

单一连续分配

固定分区分配

动态分区分配

1、第一个问题:空闲分区表与空闲分区链

2、四种分配算法

3、分配与回收,就需要改动表了

数据结构
四种情况

知识回顾

知识大纲(动态分区分配算法)

首次适应算法

算法思想: 每次都从低地址开始查找,找到第一个能满足大小的空闲分区。

如何实现: 空闲分区以地址递增的次序排列。每次分配内存时顺序查找空闲分区链(或空闲分区表),找到大小能满足要求的第一个空闲分区。

最佳适应算法

算法思想: 由于动态分区分配是一种连续分配方式,为各进程分配的空间必须是连续的一整片区域。因此为了保证当“大进程”到来时能有连续的大片空间,可以尽可能多地留下大片的空闲区即,优先使用更小的空闲区。

如何实现: 空闲分区按容量递增次序链接。每次分配内存时顺序查找空闲分区链(或空闲分区表),找到大小能满足要求的第一个空闲分区。

缺点: 每次都选最小的分区进行分配,会留下越来越多的、很小的、难以利用的内存块。因此这种方法会产生很多的外部碎片。

最坏适应算法

又称 最大适应算法(Largest Fit)算法思想:为了解决最佳适应算法的问题--即留下太多难以利用的小碎片,可以在每次分配时优先使用最大的连续空闲区,这样分配后剩余的空闲区就不会太小,更方便使用。

如何实现:空闲分区按容量递减次序链接。每次分配内存时顺序查找空闲分区链(或空闲分区表),找到大小能满足要求的第一个空闲分区。

缺点:每次都选最大的分区进行分配,虽然可以让分配后留下的空闲区更大,更可用,但是这种方式会导致较大的连续空闲区被迅速用完。如果之后有“大进程”到达,就没有内存分区可用了。

邻近适应算法

算法思想: 首次适应算法每次都从链头开始查找的。这可能会导致低地址部分出现很多小的空闲分区,而每次分配查找时,都要经过这些分区,因此也增加了查找的开销。如果每次都从上次查找结束的位置开始检索,就能解决上述问题。

如何实现: 空闲分区以地址递增的顺序排列(可排成一个循环链表)。每次分配内存时从上次查找结束的位置开始查找空闲分区链(或空闲分区表),找到大小能满足要求的第一个空闲分区。

知识回顾

综合来看首次适应算法挺不错

知识大纲(基本分页存储管理的概念)

什么是分页储存

(逻辑地址)页、页面 vs (物理地址)页框、页帧、物理页页号、页面号vs 页框号、页帧号、物理页号

重要的数据结构
页表(页号、块号)

每个页表项占多少字节?

页表项(块号)占多少字节?

页号呢?

如何实现地址的转换

要知道页号+偏移量

逻辑图:

实现图:

如何确定一个逻辑地址对应的页号与页内偏移量

页号:逻辑地址/页面长度

页内偏移量:逻辑地址%页面长度

物理地址 = 页号在物理地址中的起始位置+页内偏移量

衍生问题:

可以看下方的那个 逻辑地址结构

逻辑地址结构

就是底层分析:

通过位数,可以确定页号与页内偏移量

知识回顾与重要考点

知识大纲(基本地址变换机构)

基本地址变换机构:

其实也就差不多,就这4步。

详细步骤,示意图:

逻辑地址到物理地址的转换。

具体计算

对页表项的考虑

知识回顾

知识大纲(具有快表的地址变换机构)

什么是快表(TLB)

快表就是高速缓存TLB,不是内存。里面储存的是最近访问内存的副本。

应用快表查找方式

1、是否越界

2、查快表 / 失败后在查内存

3、得到并访问物理地址

引入快表后的耗时

查询快表有两种方式

1、先查快表,再查慢表(111us

2、同时查询(1+100)*0.9+(100+100)*0.1 = 110.9us

详细图解

局部性原理

主要是讲解:为啥需要TLB

知识回顾与重要考点

知识大纲(两级页表)

单级页表存在的问题

1、占用连续内存过大

2、不是所有页面都需要常驻内存

如何解决单级页表的问题(连续存放问题)?
开启多级页表

两级页表的原理、地址结构

(逻辑:页目录表+2级页表+偏移量)

具体:

如何实现地址变换

如何解决单级页表问题(虚拟存储)

通过添加缺页中断(添加了一个标志位)

计算:

知识回顾:

1、单级页表的问题

2、两级页表

3、如何实现地址变换

4、访问次数+各个多级页表大小

知识大纲(基本分段存储管理方式)

分段
1、

2、

段表

地址转换

分段、分页管理的对比

分页(物理)、分段(逻辑)

其中,分页是,直接将内存切成小方格。你只要各个页面就能直接查(一维)

分段是,根据需求,得出段号与段内地址(二维)

优点

解释:

对比总结:

知识总结:

知识大纲(段页式管理方式)

本章就学俩东西:

1、分页、分段的优缺点:是否会产生外部碎片,逻辑分块与内存保护做的怎么样

2、段页式计算物理地址的方法

分页、分段的优缺点分析

分段+分页 = 段页式管理

段页式管理的逻辑地址结构

段表、页表

逻辑:

知识回顾与重要考点

通过添加缺页中断(添加了一个标志位)

计算:

知识回顾:

1、单级页表的问题

2、两级页表

3、如何实现地址变换

4、访问次数+各个多级页表大小

知识大纲(基本分段存储管理方式)

分段
1、

2、

段表

地址转换

分段、分页管理的对比

分页(物理)、分段(逻辑)

其中,分页是,直接将内存切成小方格。你只要各个页面就能直接查(一维)

分段是,根据需求,得出段号与段内地址(二维)

优点
解释:

对比总结:

知识总结:

知识大纲(段页式管理方式)

本章就学俩东西:

1、分页、分段的优缺点:是否会产生外部碎片,逻辑分块与内存保护做的怎么样

2、段页式计算物理地址的方法

分页、分段的优缺点分析

分段+分页 = 段页式管理

段页式管理的逻辑地址结构

段表、页表

逻辑:

知识回顾与重要考点


借鉴:

1、王道

2、【有道云笔记】第三章内存管理 -- 我的笔记


学习日记: 

6.17(周二)上午杂事,已经处理完毕
死锁的检测 和 解除,
运用了资源分配图与死锁检测算法
解除共有三种方式:强行剥夺、回退、撤销
下午学习内存基础、了解了指令。学习装入(静态装入、动态装入、重定位装入)
与链接(与装入类似)的三种方法。
并在内存管理中学习了内存分配(下方三种)、地址转换、内存保护
并且还了解,地址分配是由第一地址分配、固定地址分配、动态分配)三种分配
其中动态分配可由四个算法实现:
首次适应算法(综合性最好)、最佳适应算法(从小到大、需排序)、最坏适应算法(从大到小、需排序)、邻近适用算法(链表)
其中在学习,分页式储存管理时,学习到了:
页、页框、页框号....
晚上....
6.18(周三)上午学习了基本分页式储存管理,从而引出基本地址变换机构(简而言之,将逻辑地址转换成页号与页面偏移量,从而在内存中查找页表,最终计算出物理地址)。
为了加快速度,又引出了高速缓存(TLB)。
基本分页储存太浪费大块内存。所以又发明了两级页表。即可增加内存利用率,也增加了灵活性。
多级页表页也就此被发明。
下午学习了段式存储(是按照逻辑设计分段、提供内存保护)结合页式储存又演进成了段页式存储(=段表+页表)。而虚拟内存技术拓充了内存。通过请求分页管理与页面置换算法实现。
期中,请求分页管理包含:页表机制(段号、状态号、访问字段、修改位、外存地址),缺页中断、地址转换-计算题
而页面置换算法又分为(OPT-最佳、FIFO-最次但简单、LRU-最接近最优但实现代价大、CLOCK+改良版-这俩挺不错)
之后又讲了,页面分配策略(像什么工作集、驻留集、抖动现象....)其中最精彩的,还是局部分配与全局分配。一个是用自己进程的内存块,一个是全局进程调用。
晚上... ...
6.19(周四)上午操作系统共主打四大管理(处理机、存储、文件、设备..管理)而,今天初识文件管理(认识了FCB、操作系统向上提供的功能、磁盘块、文件的各个属性...)粗广学习后,(细入)又引入了文件结构(无结构-流式、有结构-又称记录型文件)。其中结构文件分为,顺序文件、索引文件、索引顺序文件(拓展)--多级索引顺序文件。跳出框架后,又学得将各个文件组织起来的方式-TCB。也就是,单级目录、两级目录、多级目录。无环图目录--方便共享文件、并方便查询、不同目录可重命名。
下午学习了连续分配,链接分配,索引分配。其中索引分配又细化为链接索引,多层索引,混合索引。而这些是为了解决文件存储在硬件问题
晚上......
6.20(周五)上午这个回顾一下,这几天学习了逻辑结构与物理结构。其中逻辑机构(由用户决定--与内存息息相关,且操作系统并不关心)-专门用来管理内存中的文件。其次就是物理结构(由操作系统决定,将文件采用什么样的方式存储在外存上。并负责逻辑块与物理块的转化)
其中,他们都包含顺序、链式、索引分配。
下午学习了文件存储管理(空闲表法、空闲链表法、位视图法、 成组链表法)
学习完储存,然后学习了文件的基础操作(从创建删除,到打开关闭,又组合出读写功能)有了存储、操作,之后又学习了软硬链接的操作--为共享文件而生,软连接为Link法。口令/加密/访问保护,其中我认为访问保护的发放权限功能最绝。
晚上.....

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/86139.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/86139.shtml
英文地址,请注明出处:http://en.pswp.cn/web/86139.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++11 std::thread 多线程编程详解

C++11 标准首次将多线程支持引入语言标准库,其中最核心的部分就是 <thread> 头文件中的 std::thread 类。 🧱 一、基本概念 什么是线程? 线程是操作系统调度 CPU 时间的基本单位。一个进程中可以有多个线程,它们共享进程的资源(如内存、堆栈),但拥有各自独立的…

设置vscode使用eslint

在 Visual Studio Code (VSCode) 中设置 ESLint 是一个很好的方式来确保代码质量和一致性。以下是详细的步骤&#xff1a; 1. 安装 ESLint 扩展 打开 VSCode。点击左侧的扩展图标&#xff08;四边形图标&#xff09;。在搜索框中输入 ESLint。找到由 dbaeumer 提供的 ESLint …

.NET 生态中主流的前后端生产级框架

文章目录 **1. 后端框架&#xff08;Backend Frameworks&#xff09;****(1) ASP.NET Core**&#xff08;微软官方&#xff0c;主流选择&#xff09;**(2) ABP Framework**&#xff08;企业级应用开发框架&#xff09; **2. 前端框架&#xff08;Frontend Frameworks&#xff0…

Spring Cloud Alibaba整合Sentinel指南

目录 一、Sentinel核心功能概述 1. 控制台安装 2. 项目依赖配置 三、详细整合步骤 1. 基础配置 2. 资源定义与保护 3. 与OpenFeign整合 四、常见问题解决方案 五、最佳实践案例 1. 流量控制场景 2. 熔断降级场景 3. 热点参数限流 六、高级功能 Spring Cloud Aliba…

Win10+PHPStudy 8.1完美运行CRMEB开源商城(附性能优化配置)

环境配置 下载phpstudy https://www.xp.cn/ 安装完成之后打开&#xff0c;在软件管理中安装 nginx mysql 5.7 php 7.4 创建站点 填写域名&#xff0c;根目录选择到public文件夹下 创建完成之后&#xff0c;点击右侧管理&#xff0c;选择伪静态 location / { if (!-e $request…

康谋方案 | ARXML 规则下 ECU 总线通讯与 ADTF 测试方案

目录 一、引言 二、汽车电子控制系统 三、ECU开发流程中总线通讯&#xff1a;ARXML 规则下的标准化协作 四、ADTF&#xff1a;汽车数据与时间触发框架&#xff08;Automotive Data and Time-Triggered Framework&#xff09; 五、应用案例 六、结语 一、引言 随着汽车新…

常见JavaScript 代理模式应用场景解析

常见JavaScript 代理模式应用场景解析 在 JavaScript 开发中&#xff0c;代理模式&#xff08;Proxy Pattern&#xff09; 是一种强大的设计模式&#xff0c;它允许我们通过创建一个“代理”来控制对目标对象的访问。通过代理&#xff0c;我们可以拦截并增强对象的行为&#x…

暴雨信创电脑代理商成功中标长沙市中医康复医院

6月25日&#xff0c;国内科技产业领军企业暴雨信息传来喜讯&#xff0c;其信创电脑成功中标长沙市中医康复医院信息化设备采购项目。此次中标&#xff0c;不仅彰显了暴雨信息在信创领域的技术实力和产品优势&#xff0c;也为长沙市中医康复医院的信息化建设注入了新的活力。 长…

ZYNQ PL高速采集AD7606数据与QT动态显示全解析

从硬件设计到软件优化,打造工业级数据采集系统 在工业自动化、医疗仪器等领域,高速多通道数据采集系统至关重要。本文手把手教你基于Xilinx ZYNQ平台,实现8通道200kSPS高速采集**,并通过QT实现60fps动态波形显示。突破性采用五级流水采集架构和GPU加速渲染,解决传统方案的…

还是工作日志

今天感觉效率有点低&#xff0c;可能是太热了 【100】 开始不懂了 https://www.bilibili.com/video/BV1rL411E7uz?t1193.7&p100 什么新增&#xff0c;什么新增和变化 【101】退单 开头就说不适合做事务型 https://www.bilibili.com/video/BV1rL411E7uz?t26.6&…

青少年编程与数学 01-012 通用应用软件简介 10 云存储软件

青少年编程与数学 01-012 通用应用软件简介 10 云存储软件 一、什么是云存储软件&#xff08;一&#xff09;云存储软件的基本定义&#xff08;二&#xff09;云存储软件的工作原理&#xff08;三&#xff09;云存储软件的类型 二、云存储软件的重要意义&#xff08;一&#xf…

华为云Flexus+DeepSeek征文 | 掌握高效开发:利用华为云ModelArts Studio在VS Code中配置Cline AI编程助手

华为云FlexusDeepSeek征文 | 掌握高效开发&#xff1a;利用华为云ModelArts Studio在VS Code中配置Cline AI编程助手 引言一、ModelArts Studio平台介绍华为云ModelArts Studio简介ModelArts Studio主要特点 二、Cline介绍Cline介绍Cline主要特点 三、开通DeepSeek-R1-0528商用…

Python核心可视化库:Matplotlib与Seaborn深度解析

文章目录 前言一、Matplotlib&#xff1a;科学可视化的基石1.1 核心架构层级后端层&#xff08;Backend Layer&#xff09;艺术家层&#xff08;Artist Layer&#xff09;脚本层&#xff08;Scripting Layer&#xff09; 1.2 核心模块详解matplotlib.figure 模块matplotlib.axe…

EJB知识

EJB&#xff08;Enterprise JavaBeans&#xff09;是 Java EE&#xff08;现称 Jakarta EE&#xff09;平台的核心技术之一&#xff0c;用于开发分布式、可扩展、事务性的企业级应用。以下从基础到高级全面解析 EJB&#xff1a; 一、EJB 基础概念 1. 定义与角色 EJB 是服务器…

【项目管理】项目管理资料文档模板(ZIP,PPT,WORD)

项目交付文档 01项目详细调研计划编写规范V1.0.doc 03项目详细调研报告编写规范V1.0.doc 07软件需求规格说明书评审规范V1.0.doc 10.软件需求规格说明.doc 产品检查单,xls 工程评审.zip 软件标准过程集.zip 系统测试管理规程.docx 四)项目管理计划.doc 项目管理系统实施项目管理…

CentOS 6 Linux 系统添加永久静态路由的方法详解!

全文目录&#xff1a; 开篇语 **【详解】**1. **静态路由的概念与应用场景**1.1 **静态路由简介**1.2 **静态路由的应用场景** 2. **临时添加静态路由**2.1 **使用 route 命令临时添加静态路由**示例&#xff1a;添加一个临时路由 2.2 **查看当前路由表**2.3 **临时路由的局限性…

(mysql、oracle、pgsql、mongodb、redis、es)主流数据库的核心差异

以下是主流数据库的核心差异及适用场景的全面对比&#xff0c;结合技术特性和实际应用需求整理&#xff1a; &#x1f4ca; 一、数据库分类与核心差异 1. 关系型数据库&#xff08;RDBMS&#xff09; 数据库核心特点适用场景MySQL开源、读写性能均衡&#xff0c;易用性高&…

第8章:智能菜谱生成器——语言模型如何解析烹饪秘方

第8章:智能菜谱生成器——语言模型如何解析烹饪秘方 从语义理解到操作执行的完整技术解密 工业案例背景: 法国里昂的Bocuse d’Or国际烹饪大赛选手手册中记载这样一道经典指令:“将酱汁熬煮至Napp状态(即勺子划过痕迹缓慢回填)”。当传统NLP系统将其简单译为"煮浓&q…

零基础学前端-传统前端开发(第四期-JS基础)

经过前面学过的HTML,CSS的学习&#xff0c;相信大家已经可以使用进行常用的页面开发&#xff0c;接下来我们就要学习JavaScript&#xff0c;鉴于内容过多&#xff0c;需要长期练习 流程为&#xff1a;数据类型>>运算>>语法&#xff0c;语句>>对象>>数组…

机器学习-- 数据、数据集、评价模型

处理数据 相比于构建模型&#xff0c;机器学习从业者需要花更多的时间来评估、清理和转换数据。 数值数据表示整数或浮点值 其行为方式与数字类似的函数。也就是说&#xff0c;它们是可累加的、可数的、有序的&#xff0c; 依此类推。 尽管有些数据是是以数字方式存在&#…