当前位置: 首页 > news >正文

【Linux】进程地址空间

目录

一、引入问题:

二、进程地址空间:

地址和数据总线:

三、页表:

权限:

缺页中断:

四、回到问题:

五、总结:

重新理解进程:


一、引入问题:

 在C++中,我们了解到了如上的空间布局图,这到底是个什么呢,我们首先在Linux下对其进行验证,看看是不是也遵循上述的空间分布

如上可以看到这个地址和之前C++中的空间布局基本是一样的,从低地址的代码区到高地址的栈区,值得一提的是

1、栈区是往低地址增长的,堆区是往高地址增长的,并且二者之间有很大的空间

2、在C语言/C++中的static修饰的局部变量,在编译之后就会变到全局变量中,这样就能保证其的静态属性

接下来看看如下代码:

如上代码,这个代码我们在介绍fork的时候就已经运行过了,但是当时有一个问题没有解决:为什么id既能够等于0又能够不等于0?

上面代码主要逻辑是在全局变量定义一个变量val为100,在子进程中过了5秒之后就将val改为200,

如上,这就是运行结果,可以发现:这个全局变量val在被子进程修改后地址仍然是不变的,但是子进程中的val被修改了,父进程中的val却没有改变,但是它们的地址却是一模一样的,所以我们得到结论:这个地址不是一般的物理地址而是线性地址(虚拟地址)

我们在用C/C++语言所看到的地址,全部都是虚拟地址

而物理地址,用户是看不到的,由OS统一管理OS必须负责将虚拟地址转化成物理地址,这是通过页表完成的

二、进程地址空间:

上述那个表在进程中的位置,

 这个进程地址空间,代码在上面访问的地址就是虚拟地址,然后在通过KV结构的页表,K是虚拟地址,V是物理地址,这样的话就可以通过虚拟地址找到对应的物理地址。

mm_struct(进程地址空间)里的成员变量:

进程地址空间也是通过结构体进行描述的,这个结构体叫mm_struct,这个结构体是在PCB(Linux中的task_struct)中的,里面的成员变量,其实,所谓的区域的调整变大或者变小,本质上就是对这些struct结构体管理的end还有start变大或者变小。 

mm_struct
{//代码区long long code_start;long long code_end;//堆区long long heap_start;long long heap_end;//栈区long long stack_start;long long stack_end;……
}

虚拟地址:

在早期的计算机,程序是直接与物理内存进行交互的,但是这样的话,在多个进程都在与物理进程进行交互的时候就会发生越界行为,并且当进程过多的时候资源分配也会很紧张,这样运行速率也会下降,

为了解决上述的问题,就提出了虚拟地址的概念:让程序不直接与物理地址进行交互,而是通过程序给出的虚拟地址,使用一种间接的地址访问方法,通过某些映射的方法,将虚拟地址转化为实际的物理地址。这样只需要控制好这个虚拟地址到物理地址的映射过程,就可以更好的维护各个进程

这样当发生越界行为时,在映射中就会检测出是否发生越界行为,如果发生了,能在其对物理地址造成影响前进行拦截

再通过页表的寻址机制就可以进行映射寻址,那为什么在32位计算机中有4GB的虚拟地址空间呢?

地址和数据总线:

在32位的计算机中,有32根地址和数据总线,每一根地址总线是只有0和1的概念的,实际上可以理解为有电就是1,没电就是0,

地址总线意味着它可以表示2^32个不同的地址,每个地址对应一个内存位置或I/O设备的特定位置,然后这些总线进行排列组合就是有2^32种情况,所以32位地址总线能够寻址的最大内存空间为2^32*1byte = 4GB,这就是4GB的虚拟地址空间

数据总线‌用于在CPU和内存或其他设备之间传输数据。32位数据总线意味着每次可以传输32位的数据,即4个字节。这意味着CPU可以一次处理或传输32位的数据,这对于提高数据处理效率非常重要‌

三、页表:

下面来粗略地聊聊页表:

每一个进程都有属于它自己的页表,页表是在物理地址中存储的,

页表的主要作用是实现虚拟地址到物理地址的转换,确保进程间的内存隔离和保护,操作系统通过页表将虚拟地址转换为物理地址,从而实现内存的访问‌

进程退出时,页表就会被删除掉

CPU中有一个cr3寄存器保存当前页表的起始地址,这样在进行进程切换的时候就会在cr3中保存上下文,这样在下次运行的时候就会从上次存在的数据中继续进行运行

权限:

我们是怎么知道一个变量(字符常量区,代码区是只读的)是可读还是可写的呢?在页表中的kv值后有可读可写的概念,

如上第二个就是可读可写,第三个就是只读,比如常量字符串就是只读的,一般局部变量就是可读可写的,那么页表是如何进行管理的呢?

如上,当对常量字符串进行修改的时候就会出现错误,这是因为当对一个只读的数据进行修改之前必须先找到对应的物理地址,在找到物理地址之前必须要找到对应的页表通过虚拟地址来转化,但是在转化前页表发现这个是只读的,竟然想进行可写,那么页表就会对这种越权行为进行拦截,然后这个进程就会被操作系统干掉

缺页中断:

共识:现代操作系统,几乎不做任何浪费空间和浪费时间的事情, 你怎么知道你的进程代码数据在不在内存,

操作系统对于大文件,可以实现分批加载:比如说我们加载了100M的空间,当代码在加载的时候,那些未加载的部分是不会被释放的。这就造成了空间上的浪费。所以实际上,操作系统对于内存的加载是采用惰性加载的方式

这里再把页表“升级一下”:

在页表最后有一个标志位,如果标志位中的P状态为1,表示可以在物理内存中找到对应数据;如果P位为0,则表示在物理内存中找不到对应数据,访问时会触发页面错误,发生缺页中断

此时就说明我们需要访问对应的物理地址中的数据但是操作系统却没有把数据加载到物理地址,这个时候操作系统就会重新加载物理内存,再将这个物理内存的地址映射到页表的物理地址存放处,然后这个进程就可以访问物理内存中的数据了

四、回到问题:

为什么同一个id,连地址都是相同的,却是不同的值呢?

当子进程被创建时,子进程和父进程的数据和代码是共享的,即父子进程的代码和数据通过页表映射到物理内存的同一块空间。当父进程或子进程需要修改数据时,才将父进程的数据在内存当中拷贝一份,然后再进行修改。

修改后:

当子进程想要修改父进程的数据的时候,就会发生写时拷贝,会在物理地址中开辟另一块空间,然后在这块新开的空间中存入数据,之后映射就进行修改即可,

这个时候,就会通过这个虚拟地址找到对应新的物理地址,就会发现数据是不一样的

所以看上去父子进程的地址是一样的,但这个一样是虚拟地址,二者会通过这个虚拟地址找到对应的物理地址,这样就会达到看上去是同一个变量,甚至地址(虚拟地址)都一样,但是它们的值却不同

五、总结:

因为虚拟地址的存在,让进程在管理它自己的PCB的时候不需要其去取物理地址,这部分内存管理就交给操作系统来完成,如果页表发生缺页中断,就会自动取物理内存中缓存数据并且形成映射

为什么要有地址空间:

1、让进程以统一的视角看待内存:主要是因为地址空间为每个进程提供了一个独立的虚拟地址空间,使得每个进程都认为自己独占整个系统内存资源。这种机制称为虚拟内存或进程地址空间,它并不是物理内存,而是虚拟内存的一部分

2、增加虚拟地址空间可以让我们在访问的时候增加一个转换的过程,在这个转化的过程中,可以对我们的寻址进行审查,所以一旦异常访问,直接拦截,该请求不会到达物理内存以保护物理内存

3.因为有地址空间和页表的存在,将进程管理模块和内存管理模块进行解耦合,让它们各自好好地完成自己的事

重新理解进程:

进程在被创建的时候是先创建内核数据结构,在加载对应的可执行程序的,当一个程序被执行时,系统会首先创建一个进程控制块(PCB),这个数据结构包含了进程的各种属性,如进程编号、状态、优先级等。随后,系统会将程序加载到内存中并执行‌

在以后的学习中,是在一个个的基础上进行“升级的”就像以前我们只知道一个进程的PCB和PCB中所指向的代码和数据,到现在我们知道

进程 = 内核数据结果(task_struct && mm_struct && 页表) + 程序的代码和数据

相关文章:

【Linux】进程地址空间

目录 一、引入问题: 二、进程地址空间: 地址和数据总线: 三、页表: 权限: 缺页中断: 四、回到问题: 五、总结: 重新理解进程: 一、引入问题: 在C中&a…...

快速图像识别:落叶植物叶片分类

1.背景意义 研究背景与意义 随着全球生态环境的变化,植物的多样性及其在生态系统中的重要性日益受到关注。植物叶片的分类不仅是植物学研究的基础,也是生态监测、农业管理和生物多样性保护的重要环节。传统的植物分类方法依赖于人工观察和专家知识&…...

第 22 章 - Go语言 测试与基准测试

在Go语言中,测试是一个非常重要的部分,它帮助开发者确保代码的正确性、性能以及可维护性。Go语言提供了一套标准的测试工具,这些工具可以帮助开发者编写单元测试、表达式测试(通常也是指单元测试中的断言)、基准测试等…...

K8S + Jenkins 做CICD

前言 这里会做整体CICD的思路和流程的介绍,会给出核心的Jenkins pipeline脚本,最后会演示一下 实验/实操 结果 由于整体内容较多,所以不打算在这里做每一步的详细演示 - 本文仅作自己的实操记录和日后回顾用 要看保姆式教学的可以划走了&…...

http/https

1、http与https HTTPHTTPS信息明文传输加入ssl加密传输协议,可以使得报文加密传输默认端口80默认端口443连接简单TCP三次握手通信TCP三次握手后还要SSL/TLS握手过程,才可以加密报文传输无状态不安全需要到CA申请证书,身份认证,自…...

腾讯云 AI 代码助手:产品研发过程的思考和方法论

一、文章摘要 本文将详细阐述 腾讯云 AI 代码助手的历史发展形态与产品整体架构,并从技术、研发方法论的角度分别阐述了产品的研发过程。 全文阅读约 5~8 分钟。 二、产品布局 AI 代码助手产品经历了三个时代的发展 第一代诸如 Eclipse、Jetbrains、V…...

淘宝商品评论爬虫:Java实现指南

在当今的互联网时代,数据的价值日益凸显,尤其是用户生成的内容,如商品评论,对于理解消费者行为和市场趋势具有重要意义。淘宝作为中国最大的电商平台之一,拥有海量的商品评论数据。本文将介绍如何使用Java编写一个简单…...

银河麒麟v10 x86架构二进制方式kubeadm+docker+cri-docker搭建k8s集群(证书有效期100年) —— 筑梦之路

环境说明 master:192.168.100.100 node: 192.168.100.101 kubeadm 1.31.2 (自编译二进制文件,证书有效期100年) 银河麒麟v10 sp2 x86架构 内核版本:5.4.x 编译安装 cgroup v2启用 docker版本:27.x …...

【Linux】详解shell代码实现(上)

🪐🪐🪐欢迎来到程序员餐厅💫💫💫 主厨:邪王真眼 主厨的主页:Chef‘s blog 所属专栏:青果大战linux 总有光环在陨落,总有新星在闪烁 学校开始搞蓝桥的校选…...

Ruby 模块(Module)

Ruby 模块(Module) 概述 Ruby 是一种动态、开放源代码的编程语言,以其简洁明了的语法和强大的功能而闻名。在 Ruby 中,模块(Module)是一个重要的概念,它用于封装一组相关的方法和常量。模块提…...

成都睿明智科技有限公司怎么样可靠不?

在这个日新月异的数字时代,电商行业如同一股不可阻挡的洪流,席卷着每一个消费者的生活。而抖音,作为短视频与电商完美融合的典范,更是为无数商家开辟了一片全新的蓝海。在这片充满机遇与挑战的海洋中,成都睿明智科技有…...

内网安全隧道搭建-ngrok-frp-nps-sapp

1.ngrok 建立内网主机与公网跳板机的连接: 内网主机为客户机: 下载客户端执行 2.frp (1)以下为内网穿透端口转发 frp服务端配置: bindPort 为frp运行端口 服务端运行 ./frps -c frps.ini frp客户端配置&#xf…...

k8s 对外服务之 Ingress

LB ingress //Ingress 简介 service的作用体现在两个方面,对集群内部,它不断跟踪pod的变化,更新endpoint中对应pod的对象,提供了ip不断变化的pod的服务发现机制;对集群外部,他类似负载均衡器,…...

前端速通(JavaScript)

1 初识JavaScript 1 JavaScript是什么 JavaScript 是一种高层的、轻量级的、解释型的编程语言,最初由 Netscape 公司于 1995 年开发。它的特点包括: 动态性:JavaScript是动态类型语言,允许开发者灵活地操作数据。跨平台&#xf…...

Unity图形学之着色器之间传递参数

1.初始化 struct: UNITY_INITIALIZE_OUTPUT(type,name) Type: struct 名字 Name :变量的名字 struct Input{float2 uv_MainTex;float3 myColor;};half _Glossiness;half _Metallic;fixed4 _Color;void MyVertx(inout appdata_base v,out I…...

JavaScript中的this指向问题

JavaScript中的this指向问题 1.1 为什么需要this? 为什么需要this? 在常见的编程语言中,几乎都有this这个关键字(Objective-C中使用的是self),但是在JavaScript中的this和常见的面向对象语言中的this不太一样 常见面向对象的编程语言中,比…...

Qt之QWidget相关

Qt概述 Qt 是一个跨平台的 C 开发框架。 跨平台支持:可以用于开发 Windows、macOS、Linux、Android、iOS 等多种操作系统下的应用程序。这意味着开发者使用 Qt 编写的代码,在经过适当的编译和配置后,能够在不同平台上运行,减少了…...

Ease Monitor 会把基础层,中间件层的监控数据和服务的监控数据打通,从总体的视角提供监控分析

1. 产品定位 Ease Monitor 有如下的产品定位: 关注于整体应用的SLA。 主要从为用户服务的 API 来监控整个系统。 关联指标聚合。 把有关联的系统及其指示聚合展示。主要是三层系统数据:基础层、平台中间件层和应用层。 快速故障定位。 对于现有的系统…...

苹果MacOS 调用自编译opencv的Dylib显示一个图片程序的步骤

前言 为了测试自编译的opencv库是否能在苹果MacOS系统下使用,需要写一个简单的测试程序。这个测试程序写起来不难,麻烦的是一些配置。网上的办法很多,里面因为版本的问题有一些坑。特此写了一个建立步骤,供大家参考。 1、新建一个…...

网页中调用系统的EXE文件,如打开QQ

遇到一个实际的问题,需要在网页中打开本地的某个工业软件。 通过点击exe文件就可以调用到程序。 比如双击qq的exe就可以启动qq的程序。 那么问题就变成了如何加载exe程序呢? 可以通过Java的 Process process Runtime.getRuntime().exec(command);通过…...

在 Ubuntu 系统上安装 npm 环境以及 nvm(Node Version Manager)

在 Ubuntu 系统上安装 npm 环境以及 nvm(Node Version Manager) 步骤 1: 更新系统包步骤 2: 安装 nvm步骤 3: 安装 Node.js 和 npm步骤 4: 设置默认 Node.js 版本(可选)总结 在 Ubuntu 系统上安装 npm 环境以及 nvm(No…...

Linux环境开启MongoDB的安全认证

文章目录 1. MongoDB安全认证简介1.1 访问控制1.2 角色1.3 权限 2. MongoDB中的常见角色3. MongoDB Shell3.1 下载MongoDB Shell3.2 通过MongoDB Shell连接MongoDB 4. 创建管理员用户5. 为具体的数据库创建用户6. 开启权限认证7. 重启MongoDB服务8. 连接MongoDB9. MongoDB数据库…...

实现了两种不同的图像处理和物体检测方法

这段代码实现了两种不同的图像处理和物体检测方法:一种是基于Canny边缘检测与轮廓分析的方法,另一种是使用TensorFlow加载预训练SSD(Single Shot Multibox Detector)模型进行物体检测。 1. Canny边缘检测与轮廓分析: …...

经典工具 | 使用SIFT预测错义突变的有害性

SIFT 用计算机替代人预测复杂事件的影响,是我们这个时代最令人兴奋的科学进展之一。SIFT就是这样一个应用于基因组学研究的经典工具。 SIFT可预测多种生物体的基因组变异,主要是错义突变的影响与效应,最大的特点是物种丰富,是一个…...

如何给 Apache 新站点目录配置 SELinux ?

在 web 服务器管理领域,确保服务器环境的安全性至关重要。SELinux (Security-Enhanced Linux) 是保护 Linux 服务器最有效的工具之一,它是一种强制访问控制 (MAC mandatory access control) 安全机制。当使用最流行的 web 服务器 Apache 提供 web 内容时…...

RTSP播放器EasyPlayer.js播放器分辨率高的视频在设置container的宽高较小时,会出现锯齿状的画面效果

流媒体播放器的核心技术及发展趋势展现了其在未来数字生活中的无限潜力。随着技术的不断进步和市场的持续发展,流媒体播放器将在内容创新、用户体验优化以及跨平台互通等方面取得新的突破。对于从业者而言,把握这些趋势并积极应对挑战将是实现成功的关键…...

云讷科技Kerloud无人飞车专利发布

云讷科技Kerloud无人飞车获得了“一种室内外两用的四旋翼无人飞车”的实用新型专利证书,作为科教社区第一款四旋翼飞车,这项技术结合了无人机和无人车的优势,提供了一种能够在多种环境下使用的多功能飞行器。 这项设计的优势如下&#xff…...

快速识别模型:simple_ocr,部署教程

快速识别图片中的英文、标点符号、数学符号、Emoji, 模型会输出图片中文字行的坐标位置、最低得分、识别结果。当前服务用到的模型:检测模型、数字识别、英文符号识别。 一、部署流程 1.更新基础环境 apt update2.安装miniconda wget https://repo.anaconda.com/…...

Qt交叉编译x86和arm心得

最近一直在Linux上开发qt程序,主要工作是在x86的Ubuntu上开发编译调试程序,确定没有问题后交叉编译到arm的linux系统上运行 1.环境 Qt的交叉编译环境厂家已经提供了,嵌入式的同事帮我安装调试的,具体就是装了厂家给的gcc编译套件…...

用CAXA CAD电子图板导入图框、标题栏并导出pdf的方法

1.导入图框: 点击调入图框->出现读入图框文件 一个一个点击,选择合适的图框 然后点击导入 2.导入标题栏: 调入标题栏->出现读入标题栏文件 一个一个点击,选择合适的标题栏,然后点击导入 3.导出pdf&#x…...

在 Ubuntu/Debian 上安装 Go

使用官方二进制文件安装(推荐) Go 提供了官方的二进制安装包,适用于大多数 Linux 发行版,包括 Ubuntu 和 Debian。步骤如下: 更新包索引: bash sudo apt update 安装依赖(如果尚未安装&#…...

设计模式之策略模式-工作实战总结与实现

文章目录 应用场景存在问题解决方案继续延伸 应用场景 假设有这样的业务场景,大数据系统把文件推送过来,根据不同类型采取不同的解析方式。多数的小伙伴就会写出以下的代码: public class Question {public static void main(String[] args…...

自动语音识别(ASR)与文本转语音(TTS)技术的应用与发展

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

实验十三 生态安全评价

1 背景及目的 生态安全是生态系统完整性和健康性的整体反映,完整健康的生态系统具有调节气候净化污染、涵养水源、保持水土、防风固沙、减轻灾害、保护生物多样性等功能。维护生态安全对于人类生产、生活、健康及可持续发展至关重要。随着城市化进程的不断推进&…...

【MySQL实战45讲笔记】基础篇——redo log 和 binlog

系列文章 基础篇——MySQL 的基础架构 目录 系列文章1. 重要的日志模块:redo log 和 binlog1.1 redo log1.2 binlog1.3 执行器和 InnoDB 引擎内部如何执行更新语句 1. 重要的日志模块:redo log 和 binlog 前面系统的了解了一个查询语句的执行流程&…...

Java 基于SpringBoot+vue框架的老年医疗保健网站

大家好,我是Java徐师兄,今天为大家带来的是Java Java 基于SpringBootvue框架的老年医疗保健网站。该系统采用 Java 语言开发,SpringBoot 框架,MySql 作为数据库,系统功能完善 ,实用性强 ,可供大…...

Java集合分页

一、前言 在Java开发中,若单次展示的数据量太大,会造成程序响应缓慢,就需要用到分页功能,每一页展示一定量的数据,分多次展示 ... 那么在List集合中,如何实现分页功能呢? 本文将以3种方式&…...

python语言基础-5 进阶语法-5.5 上下文管理协议(with语句)

声明:本内容非盈利性质,也不支持任何组织或个人将其用作盈利用途。本内容来源于参考书或网站,会尽量附上原文链接,并鼓励大家看原文。侵删。 5.5 上下文管理协议(with语句)(参考链接&#xff1…...

周志华深度森林deep forest(deep-forest)最新可安装教程,仅需在pycharm中完成,超简单安装教程

1、打开pycharm 没有pycharm的,在站内搜索安装教程即可。 2、点击“文件”“新建项目” 3、创建项目,Python版本中选择Python39。如果没有该版本,选择下面的Python 3.9下载并安装。 4、打开软件包,搜索“deep-forest”软件包&am…...

技术美术百人计划 | 《2.1 色彩空间介绍》笔记

总览 一、色彩发送器 色彩认知: 光源是出生点,光源发射出光线,光线通过直射反射折射等路径最终进入人眼。 但人眼接收到光线后,人眼的细胞产生了一系列化学反应。 由此把产生的信号传入大脑,最终大脑对颜色产生了认…...

设计模式:6、装饰模式(包装器)

目录 0、定义 1、装饰模式包含的四种角色 2、装饰模式的UML类图 3、示例代码 0、定义 动态地给对象添加一些额外的职责。就功能来说装饰模式相比生成子类更为灵活。 1、装饰模式包含的四种角色 抽象组件(Component):抽象组件是一个抽象…...

vue-office:word(.docx)、pdf、excel(.xlsx,.xls)格式文件预览

vue-office:word(.docx)、excel(.xlsx,.xls)格式文件预览 组件安装 // docx文档预览组件 npm install vue-office/docx vue-demi0.14.6// excel文档预览组件 npm install vue-office/excel vue-demi0.14.…...

简单工厂模式

简单工厂模式详解 定义 简单工厂模式(Simple Factory Pattern)是一种创建型设计模式,用于创建对象的实例。通过一个工厂类来决定实例化哪一个具体类,降低客户端与具体类之间的耦合。 对于长switch或者长if、else,且…...

得物彩虹桥架构演进之路-负载均衡篇

文 / 新一 一、前言 一年一更的彩虹桥系列又来了,在前面两期我们分享了在稳定性和性能2个层面的一些演进&优化思路。近期我们针对彩虹桥 Proxy 负载均衡层面的架构做了一次升级,目前新架构已经部署完成,生产环境正在逐步升级中&#xf…...

【大数据学习 | Spark-Core】spark-shell开发

spark的代码分为两种 本地代码在driver端直接解析执行没有后续 集群代码,会在driver端进行解析,然后让多个机器进行集群形式的执行计算 spark-shell --master spark://nn1:7077 --executor-cores 2 --executor-memory 2G sc.textFile("/home/ha…...

macos 使用 nvm 管理 node 并自定义安装目录

系统环境:MacOS Version 参考文章: Github 地址:https://github.com/nvm-sh/nvm 安装的方式是很简单的,直接执行下面的命令即可: curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.0/install.sh | bas…...

MongoDB分片集群搭建

什么是分片 分片是一种跨多台机器分布数据的方法。MongoDB 使用分片来支持超大数据集和高吞吐量操作的部署。什么情况下使用分片 存储容量受单机限制,即磁盘资源遭遇瓶颈。读写能力受单机限制,可能是CPU、内存或者网卡等资源遭遇瓶颈,导致读…...

MySQL数据库基础

1.数据库的操作 1.1 显示当前数据库 show databses; 1.2 创建数据库 create database [if not exist] db_name; 创建名为db_test1的数据库 create database db_test1; 说明:当我们创建数据库没有指定字符集和校验规则时,系统使用默认字符集;utf8,校验规则是 utf8_general_c…...

前端性能优化

前端性能优化是提升用户体验的重要环节,优化的目标是减少页面加载时间、提高交互响应速度、降低资源消耗。以下从 加载性能优化、渲染性能优化 和 交互性能优化 三个维度详细说明: 一、加载性能优化 目标是减少页面首次加载时间,提升页面的加…...

深度学习中的正则化技术

在深度学习中,正则化是一种防止模型过拟合的重要手段。过拟合是指模型在训练数据上表现良好,但在未见数据上表现不佳的现象。正则化通过引入额外的约束或信息来限制模型的复杂性,从而提高模型的泛化能力。本文将介绍几种常见的正则化技术&…...