part2.内存管理先导知识

Python八股文:基础知识Part2 但是这种引用计数器的处理机制其实也有一个bug,那就是循环引用的问题,在下面的代码中,当我们执行完del v1 和 del v2后,与上面的int对象99999不同的是,我们的v1和v2的引用计数器此时并不会变成0而是都为1,但是按理来说我们del之后已经没办法再对其进行修改了,所以如果我们只依靠引用计数器来决定一个内存空间是否为垃圾需要回收的话,此时的v1和v2就不会被清理,如果这种循环引用次数很多,那就会造成内存泄漏,也就是。因此,无论何时调用 lambda 函数,它都会使用最后一个值 `i`。 阅读详情

前言

想了一想,还是需要先导知识,一开始就读源码,实在是有点困难。
从内存管理开始吧,毕竟属于相对比较简单的一部分。

知识

内存分页管理机制

Linux的内存管理程序采用了分页管理方式。与内存最主要的初始化是在引导的时候完成的,在引导时完成了从实模式到保护模式的转换。内存分页管理是通过页面目录表和内存页表多组成的二级表进行。页目录表中的每一个表项(简称页目录项)(4B)用来寻址一个页表,而每个页表项(4B)用来指定一页物理内存页。因此,当指定了一个页目录项和一个页表项,可以唯一确定所对应的物理内存页。
页目录表占一页内存,因此最多可以寻址1024个页表。(这里不懂)
每个页表也同样占用一页内存,因此一个页表最多可以寻址1024个物理内存页面。(也不懂)
在80386中,一个页目录表所寻址的所有页表共可以寻址1024 x 1024 x 4096B = 4GB的内存空间。
所有进程都使用同一个页目录表,而每个进程都有自己的页表。

进程或内核其他部分在申请内存时使用的是线性地址。32位的线性地址被分成三个部分,分别用来指定一个页目录项,一个页表项和对应物理内存页上的偏移地址,因此可以间接地寻址到线性地址指定的物理内存位置。
ps:对应物理内存存在页框中。

写时复制机制

下节转载自写时复制

fork 函数,当一个应用程序调用fork 函数来创建另一个进程时,新进程所做的第一件事是调用exec 函数,用一个可执行程序来重新初始化它的地址空间。 在fork中,新进程不是拷贝整个地址空间,而是通过将页面标记为写时复制的方式,与父进程共享这些页面。如果子进程在这些页面中写入数据了,则生成一份进程私有的拷贝。如果没有写操作,则2个进程继续共享页面,不会执行拷贝动作。不管怎么样,内存管理器只拷贝一个进程试图要写入数据的那些页面,而不是整个地址空间。

JOS Lab2 Memory Management Part 1 & 2 这个lab主要包括两部分: 为kernel写一个物理内存分配器 写一个虚拟内存 准备工作: 阅读详情

相关推荐

全面解析Windows操作系统内部机制:《Windows Internals》第六版 PART1 & PART2

在当今信息技术时代,Windows操作系统是IT行业中的重要一环。Windows以其友好易用的图形界面、强大的功能和广泛的应用而闻名。本章将从基础架构层面,为您揭开Windows操作系统的神秘面纱。

weixin_34064233的博客 1262

机器学习(0001)机器学习的先导知识

机器学习(0001)机器学习的先导知识 距离上篇机器学习文章(0000)已经有4个月了,一直没有写第二篇。原因是这样的:1.忙公司任务 2.学习这个知识需要许多先导知识 3.懒惰,激情已经散尽。。。 这4个月来,已经写了一个类似于人工智能的程序,但是效果不太理想。然后转向Python的学习,原因是有一些人工智能框架是基于Python的。其实可以直接开始学习人工智能框架的,但是学了一点后

神码不是浮云 730

of_graph_get_remote_port

isp { compatible = "isp"; core@0 { id = <0>; ports { #address-cells = <1>; #size-cells = <0>; port@0 { reg = <0>; ...

wmzjzwlzs的专栏 1163

先导知识:SV中需要了解的基础的面向对象编程的概念

数字芯片验证主要使用的验证语言SystemVerilog,验证方法学是UVM。SV集成了面向对象编程的特点,具有封装、继承、多态等功能。面向对象编程(OOP)是一个大课题,本节仅记录帮助自己了解SV中关于面向对象的编程特点,更好地使用UVM。 OOP的三大优点: 1、代码重用 2、代码维护 3、内存管理 一 、OOP能有上述优点,是基于类“class”开始: 封装 语法:用class关键字定义类,不需要使用大括号,而是用endclass关键字。类中的变量称作类的数据成员,类中的方法称作方法。 注意点:分配内

行则终至 2027

Shopee滑块验证码太刁钻?手把手教你用Python+Playwright绕过弧形验证(附影刀RPA接入代码)

本文详细介绍了如何使用Python和Playwright结合SadCaptcha第三方服务高效破解Shopee平台的弧形滑块验证码,并集成到影刀RPA工作流中。该方案开发周期短、准确率高(>90%),特别适合跨境电商自动化操作,已在实际项目中验证成功。

weixin_29284657的博客 566

逻辑漏洞:水平越权、垂直越权靶场练习

水平越权和垂直越权是组织中常见的管理问题,指的是员工在组织中所拥有的权力和责任超出其职位所应具备的范围。 水平越权是指员工在同一级别的职位上超越了其同事的权力和责任范围,通常表现为某个员工在团队中承担了过多的任务或权力,导致其他同事感到不公平或不满。 垂直越权则是指员工在组织中超越了其职位等级的权力和责任范围,通常表现为员工在没有得到上级批准的情况下做出决策或行动,可能会导致组织内部的混乱和冲突。

qq_68163788的博客 2469

机器学习必先了解的基本概念

机器学习基本概念一、数据相关术语二、学习相关术语三、结语 一、数据相关术语 数据集 对于实际问题中的记录构成的集合 学习(训练) 从数据中学得模型的过程,也就是机器学习的主要目的 样本特征向量 一般一条记录有多个属性构成,将多个属性表示成向量,称为样本的特征向量(feature vector) 维度 描述一个样本的属性数,称为维度 训练样本 训练过程中使用的数据称为训练样本 二、学习相关术语 分类 模型预测的是离散值 回归 模型预测的是连续值 聚类 自动对样本以一定的处理

wresource的博客 876

ubuntu20.04 终端安装claude

【代码】ubuntu20.04 终端安装claude。

hongliyu_lvliyu的博客 2589

Python源码剖析先导知识概述

1. 先导知识列表 各位读者可以先自己回顾总结一下这些先导知识,后续会出专门的几期视频对这些知识进行简单地总结。 只有明白自己疑惑的点在哪里,才能在Python源码剖析中针对性地找到答案,有所收获 ...

The Thinker 290

在 ABAP 环境中创建 Job Catalog Entry 和 Job Template 的完整实践指南

摘要:本文介绍了SAP BTP ABAP环境中Application Job的云原生解决方案,对比传统后台作业模式。重点阐述了Job Catalog Entry和Job Template两大核心概念,通过库存重估业务场景演示如何实现可调度类、创建Job Catalog Entry及Job Template。文章详细说明了从ABAP类到Job Catalog Entry再到Job Template的完整链路,并分享实际项目中的设计经验和注意事项,帮助开发者将传统后台作业迁移到Application Job框架

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 231

Unity GameObject 核心机制深度解析:从底层结构到工程实践

从底层机制讲透 Unity GameObject:托管壳加原生芯的双层对象模型如何制造假 null 陷阱、Transform 层级与组件通信的原理、生命周期回调的确切顺序。文章同时给出 Instantiate 成本分析与对象池等高频场景的工程实践。

游戏人生 39

uCOS2内存管理

uCOS2内存管理  第一、内存管理数据架构 1 第二、OS_MemInit函数说明 3 第三、OSMemCreate函数说明 4 第四、OSMemGet函数说明 6 第五、OSMemPut函数说明 6 第六、OSMemQuery函数说明 7 第七、OSMemNameGet和OSMemNameSet函数说明 8 作者:JCY 来自09级安徽宿

JCY博客 2306

ESD防护设计宝典(十一):CE(传导发射)超标问题排查与解决

(Conducted Emission, CE),亦称为传导骚扰,是电子电气设备或系统内部的电压、电流通过信号线、电源线或地线向外传输,对其他电子电气设备或系统造成电磁干扰的物理现象。其。

m0_56451176的博客 855

part 10.1 - 内存管理

part 10.1 - 内存管理 标签(空格分隔): win32汇编 内存管理 1)内存管理基础 windows内存管理的层次: 标准内存管理函数:在默认堆中分配和释放内存,常规意义上的内存管理函数。 堆管理函数:有效地故案例内存和进程的地址空间。(堆:程序初始化时向操作系统申请并预留的大内存快) 虚拟内存管理函数:保留/提交/释放虚拟内存,在虚拟内存页上改变保护位,锁...

笔记 381

Cadence OrCAD Capture CIS元器件管理时ERROR(ORCIS-6454): Temporary part number tracking is turned on报错的解决方法

使用Part manager对工程的元器件进行批量管理时,出现如下图所示的ERROR(ORCIS-6454): Temporary part number tracking is turned on报错其解决方法如下。

fydar的博客 3498

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Tornado2.2forPentium-part2资源下载介绍:为Pentium处理器优化的高效工具

Tornado2.2forPentium-part2资源下载介绍:为Pentium处理器优化的高效工具 去发现同类优质开源项目:https://gitcode.com/ 在当前高速发展的信息时代,计算机系统的性能优化成为了开发者和用户关注的焦点。今天,我们就来为大家详细介绍一款针对Pentium处理器系列进行优化的开源项目——Tornado2.2forPentium-part2。 项目介绍 Tor...

gitblog_06730的博客 296

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

内存管理part2

内存管理new/delete使用operator new/deletenew和delete实现原理定位new内存泄漏内存泄漏原因内存泄漏危害内存泄漏分类解决方案总结 上一章内容讲述了c++和C语言不一样的进行内存管理的方式(new/delete),这章我们来深入了解一下(new/delete)的原理以及内存泄漏的危害 new/delete使用 new和delete对于内置类型的申请释放,和C语言的malloc等函数只是用法上的区别。 对于自定义类型,就不仅仅只是用法的区别了。 new动态申请的对象,申请空间

h1091068389的博客 177

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

PyTorch 101,Part4:内存管理以及使用多个GPU

PyTorch 101,Part4:内存管理以及使用多个GPU 这篇文章涉及到PyTorch高级的GPU管理特征,包括如何为你的神经网络配置多个GPU,是否使用数据或者模型的并行计算。我们总结了调试内存错误的最佳实践。 这里是我们PyTorch 101系列的第四部分,在这篇文章中,我们将会涉及到多GPU的使用。 在这个部分我们将会涉及: 如何让你的网络使用多个GPU,使用数据...

oreo的博客 1396

vxworks内存管理

1、vxworks内存管理基本概念 (1)内存和外部存储器的概念:一般RAM属于内存而Flash、ROM、NVRAM是嵌入式操作系统的外部存储器; (2)操作系统的内存分配一般都在系统启动或者复位的情况下进行,在运行时尽量避免内存动态申请和释放,因为这样会带来系统的不稳定性; (3)vxworks为用户提供了2中内存区域:一种是Region内存域,是可变长的内存区域;另一种是partitio

小指头 3124

part5 内存管理

5.1 一个用户程序的运行需要经历以下几个步骤 编写源程序: 编译:将源代码编译成若干目标模块,形成逻辑地址 链接:与库函数链接在一起 装入:装入内存,完成地址映射,形成物理地址。 执行: 5.2覆盖与交换 1.覆盖思想:程序运行时并不是一直要访问全部程序和数据,所以可将用户空间分成一个固定区和若干覆盖区,经常活跃的部分放在固定区,其余部分分段装入外存,当即将访问某段时就将它调入覆盖区,当要访问另一个段时,再将其调入覆盖区覆盖原段内容。 2.交换思想:把处于等待状态的进程(或CPU调度下被抢占处理机的进程比

qq_44090228的博客 711

LAB2_Part1_Physical Page Management

1. 简介 在本实验中,我们将编写操作系统的内存管理代码。 内存管理有两个组成部分。 第一个部分是内核的物理内存分配器,以致于内核可以分配和释放内存。 分配器将以4096字节为操作单位,称为一个页面。 我们的任务是维护一个数据结构,去记录哪些物理页面是空闲的,哪些是已分配的,以及共享每个已分配页面的进程数。 我们还要编写例程来分配和释放内存页面。 内存管理的第二个组件是虚拟内存,它将内核和用户软件...

Small_Pond的博客 1172

Part与Prototype在NX中的根本区别

在UG/NX二次开发领域,装配结构的概念层次划分是实现高效数据管理与内存优化的核心机制。这五个关键实体构成了从物理存储到逻辑引用再到可视化呈现的完整技术栈,其本质区别与联系可通过以下维度进行系统性解析。Part作为最底层的物理实体,表征磁盘上的独立.prt格式文件。每个Part文件包含完整的几何特征、参数化草图及表达式系统,构成装配体系的数据基石。Prototype作为Part在装配上下文中的逻辑映射,实现"一源多引"的数据复用范式。当bolt.prt被装配engine.prt。

qq_32117701的博客 388

UCOSII-内存管理

UCOSII内存管理对于程序运行资源分配很有帮助,在需要使用大量内存空间时需要用到内存管理,需要时申请,用完释放,UCOSII系统提供内存管理函数,供用户使用。本文详细介绍了内存管理的相关函数及配置,供大家参考,谢谢!

tutu_hu的博客 3930

3步掌握腾讯混元3D-Part:如何快速实现3D部件智能分割与合成

还在为复杂的3D模型部件分割而烦恼吗?腾讯混元3D-Part正是你需要的AI驱动解决方案!这款强大的工具专注于3D模型部件分割与形状合成,能够将普通图像或网格转换为结构化的3D部件,为3D建模、工业设计和游戏开发带来革命性改变。无论你是3D设计新手还是专业建模师,都能通过这套工具轻松实现高质量的部件识别与生成。 ## 🤔 痛点共鸣:传统3D部件分割的三大挑战 在传统3D建模流程中,部件分割往

gitblog_00088的博客 955

【UCOSii源码解析】内存管理

文章目录(一)内存管理算法所以说UCOS中的内存管理算法与标准C中有啥区别嘞1、函数原型及说明:2、 C语言malloc算法产生内存碎片的原因3 、核心变量(二)内存控制块(三)源码分析内存管理初始化函数创建内存分区申请内存释放内存(四)程序示例:等待从一个内存分区中分配内存块(五)基于查表法实现的动态内存管理 (一)内存管理算法 在ANSI C中可以用malloc()和free()两个函数动态地分配内存和释放内存。但是,在嵌入式实时操作系统中,多次这样做会把原来很大的一块连续内存区域,逐渐地分割成许多非常

yy197696的博客 1950

JVM基础知识-part1

JVM 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 新的改变 我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客: 全新的界面设计 ,将会带来全新...

lemon1tree的博客 279
上一篇: part1.Linux内核源代码的目录概览
下一篇: part3.内存管理源码分析Ⅰ
「已注销」
博客等级 码龄10年 5粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值