Linux系统编程——部分内容补充
回顾
- 进程 = 内核相关数据结构 + 代码和数据,一个可执行程序加载到内存变成进程,不仅仅是把代码和数据加载进去就完事了,得“先描述,再组织”,每个进程都有内核数据结构,地址空间,进程相关页表,CPU寄存器的上下文数据,被打开的文件,进程通信,进程信号等等,由操作系统统一管理
- 进程要访问资源,OS要对进程本身和进程要访问的资源进行管理,就必须要有对应的数据结构来描述,那么进程与访问资源的关系就变成了对相关的数据结构的关系。代码和数据通过页表进行映射,页表分为用户级页表和内核级页表
- 原本的mm_struct地址空间本质也是一个结构体,里面包含着很多start和end,但是我们使用mm_struct申请空间时,由于地址空间的划分的每个区域很大,所以需要对里面的区域更细致地划分,vm_area_struct就是对地址空间进行更细致地划分
- 当上层调用malloc或者其他系统调用来申请内存时,会申请一个个vm_area_struct,里面有start表示虚拟地址起始,end表示虚拟地址结束,然后把很多个结构体用双链表描述起来
- 问题:虚拟地址是如何通过页表映射到物理地址的呢?
①从文件系统地角度来说,我们所说的.exe,本质就是一个文件 ②可执行程序本来就是按照地址空间方式进行编译的 ③可执行程序,其实在磁盘中也按照区域被划分为以4KB为单位的小文件(将这4KB存储的代码和数据我们称为“页帧”,而物理内存的4KB大小称为“页框”,IO说白了就是把页帧装进页框里),物理内存也按照4KB为单位划分的,OS在进行IO的时候,是以4KB为单位的 - 但问题是,OS怎么知道这么多4KB空间哪些用了哪些没用呢?
所以OS肯定是要管理的,而对于这100多万个4KB的管理,就是我们的struct Page。我们通过一个数组struct page mem[100w+]来把这一百万个page管理起来,结构体里有个字段为int flag,就表示该page在数组的下标
缺页中断
- 进程加载时,通过虚拟地址和页表找到位于磁盘上特定位置的文件,同时页表上也有一些二标志位字段,代表当前页表对应的要访问的代码和数据是否已经加载到内存中
- 假设是第一次加载,就直接从物理内存申请一段空间,然后把磁盘上的可执行程序搞到物理内存中,返回虚拟地址
- 在这步操作中,操作系统一般会介入进行特殊处理,称为缺页中断,操作系统会把已经加载到物理内存的地址,替换掉原本页表映射到磁盘上的那个指针,简单来说就是如果再次运行这个程序,就直接去物理内存找了不再去磁盘上找了
- 从用户的视角来看,这样做的最直接的感受就是,第一次打开一个软件时慢一点,但是第二次往后重复打开是,速度会快很多
二级页表
- 映射就一定有KV,K就是虚拟地址,V就是物理地址,KV两个都是4字节,页表中一行映射关系就是KV还有其他字段一共8字节,假设我们一共有2^32映射关系,就是8*2^32就是32G(页表也是在物理内存当中保存的),光光保存页表就要这么多空间,不可能
- 虚拟地址32位,就是32个0,使用虚拟地址的时候并不是把这个32个虚拟地址全部使用的,它把32个比特位划成三份,左10个,中10个,右12个
- 页表也不是只有一个结构,他是多种结构集合,里面有一个一级页表(页目录),它的任务就是只拿着虚拟地址的左10个比特位进行索引,一共需要2^10也就是1024个映射关系条目,每个条目是10个字节,一共就是10KB,就能表示这里的一级页表了
- K是左10个,通过KV模型找到V,但是V也不是直接映射到物理内存,而是映射到匹配的二级页表,也是KV关系的,然后再次通过中10个比特位在二级页表再次进行索引
- 然后二级页表的V指向物理内存中一个页的起始地址,这样,只需要用20个比特位就能通过一级二级页表找到对应的物理内存的4KB的起始地址 --> page起始地址 + 页内偏移(右12位)= 找到具体位置,为什么是12位呢 --> 因为2^12刚好是4KB
- 一级页表和二级页表只需要维护虚拟地址到页的关系,后面就是通过数值计算加偏移量的方式,就算把32个比特位的前面20个全部干满也就是2^20大概1MB,再加上一二级页表的KV一共20个也就是20*1大概20MB空间,而一般二级列表数量很少,所以前面说的空间大小关系完全不用担心
相关文章:
Linux系统编程——部分内容补充
回顾 进程 内核相关数据结构 代码和数据,一个可执行程序加载到内存变成进程,不仅仅是把代码和数据加载进去就完事了,得“先描述,再组织”,每个进程都有内核数据结构,地址空间,进程相关页表&a…...
数学建模基础:非线性模型
目录 前言 一、非线性方程组 二、非线性规划 三、微分方程模型 四、非线性模型的应用 五、实例示范:传染病传播模型 实例总结 五、总结 前言 非线性模型用于描述变量之间的非线性关系,相比线性模型,其数学形式更为复杂,但…...
Kotlin 语言基础学习
什么是Kotlin ? Kotiln翻译为中文是:靠他灵。它是由JetBrains 这家公司开发的,JetBrains 是一家编译器软件起家的,例如常用的WebStorm、IntelliJ IDEA等软件。 Kotlin官网 JetBrains 官网 Kotlin 语言目前的现状: 目前Android 已将Kotlin 作为官方开发语言。 Spring 框…...
Kafka 之 KRaft —— 配置、存储工具、部署注意事项、缺失的特性
目录 一. 前言 二. 配置(Configuration) 2.1. 处理者角色(Process Roles) 2.2. 控制器(controller) 2.3. 存储工具(Storage Tool) 2.4. 调试(Debugging)…...
专业和学校到底怎么选,兴趣和知名度到底哪个重要?
前言 2024高考已经落下帷幕,再过不久就到了激动人心的查分和填报志愿的时刻,在那天到来,小伙伴们就要根据自己的分数选取院校和专业,接下来我就以参加22年(破防年)河南高考的大二生来讲述一下我自己对于如何选取院校和专业的看法以…...
【MySQL】数据库
数据库概述 【MySQL】数据库概述-CSDN博客 数据库基本操作 【MySQL】数据库基本操作-CSDN博客 数据表基本操作 【MySQL】数据表基本操作-CSDN博客 约束 【MySQL】约束-CSDN博客 基本增删改查 【MySQL】基本增删改查-CSDN博客 多表操作 【MySQL】多表操作-CSDN博客 视图 …...
D111FCE01LC2NB70带流量调节派克比例阀
D111FCE01LC2NB70带流量调节派克比例阀 派克比例阀:由于采用(秉圣135陈工6653询3053)电液混合控制技术,响应速度更快、精度更高、控制更平稳。同时,由于采用高质量的材料制造,具有较高的承压能力和抗磨损性…...
buuctf-findKey
exe文件 运行发现这个窗口,没有任何消息 32位 进入字符串就发现了flag{ 左边红色代表没有F5成功 我们再编译一下(选中红色的全部按p) LRESULT __stdcall sub_401640(HWND hWndParent, UINT Msg, WPARAM wParam, LPARAM lParam) {int v5; // eaxsize_t v6; // eaxDWORD v7; /…...
针对oracle系列数据库慢数据量大的问题
-- 确保索引存在 create index idx_risk_assessment_hazard on risk_assessment_hazard(data_time, perception_id); create index idx_risk_dispose_base_info on risk_dispose_base_info(perception_id); -- 使用并行查询和with子句进行优化 explain plan for with t2 as (se…...
Nginx-Rewrite
1、Rewrite的定义 rewrite功能就是使用nginx提供的全局变量或自己设置的变量,结合正则表达式和标志位实现url重写以及重定向。rewrite只能放在 server { }, location { }, if { }中,并且只能对域名后边的除去传递的参数外的字符串起作用。 例如location…...
2024 年 Python 基于 Kimi 智能助手 Moonshot Ai 模型搭建微信机器人(更新中)
注册 Kimi 开放平台 Kimi:https://www.moonshot.cn/ Kimi智能助手是北京月之暗面科技有限公司(Moonshot AI)于2023年10月9日推出的一款人工智能助手,主要为用户提供高效、便捷的信息服务。它具备多项强大功能,包括多…...
关于接口多态,何时使用接口名创建对象?何时使用子类创建对象?
接口创建对象只能创建他的实现类,所以会出现两种创建方式: 1、接口 对象名 new 类名 2、子类对象 对象名 new 类名 举个例子,swimming是一个接口,flog是他的一个实现类,重写了swimming的eat()方法 子类对象 对象名…...
短视频热恋进行时:成都柏煜文化传媒有限公司
短视频热恋进行时:情感与创意的碰撞与融合 在数字时代的浪潮中,短视频以其独特的魅力,成为了当代人表达情感、分享生活的新宠。它如同一个浓缩的时空胶囊,将那些瞬间的美好、感人的故事、创意的火花,封装在短短几十秒…...
springBoot多数据源使用、配置
又参加了一个新的项目,虽然是去年做的项目,拿来复用改造,但是也学到了很多。这个项目会用到其他项目的数据,如果调用他们的接口取数据,我还是觉得太麻烦了。打算直接配置多数据源。 然后去另一个数据库系统中取出数据…...
打破安全设备孤岛,多源威胁检测与响应(XDR)如何构建一体化安全防线
在数字化和信息化迅猛发展的当下,安全设备孤岛现象成为网络安全治理中的一大挑战。在多元化的市场环境中,不同厂商的安全设备因数据格式与系统兼容性的差异,导致信息流通受阻、共享困难,形成孤立的安全防线。 安全设备孤岛现象不仅…...
Android SurfaceFlinger——概述(一)
一、基础介绍 SurfaceFlinger 是 Android 系统中的一个关键组件,负责管理屏幕显示的合成和渲染。 服务角色:SurfaceFlinger 作为一个系统服务独立运行,它不依赖于任何应用程序进程,而是由系统启动并持续运行。窗口管理:…...
工业 web4.0,UI 风格令人赞叹
工业 web4.0,UI 风格令人赞叹...
HarmonyOS 角落里的知识 —— 状态管理
一、前言 在探索 HarmonyOS 的过程中,我们发现了许多有趣且实用的功能和特性。有些总是在不经意间或者触类旁通的找到。或者是某些开发痛点。其中,状态管理是ArkUI开发非常核心的一个东西,我们进行了大量的使用和测试遇到了许多奇奇怪怪的问…...
TDengine数据迁移
前言 taosdump 是一个支持从运行中的 TDengine 集群备份数据并将备份的数据恢复到相同或另一个运行中的 TDengine 集群中的工具应用程序。 taosdump 可以用数据库、超级表或普通表作为逻辑数据单元进行备份,也可以对数据库、超级 表和普通表中指定时间段内的数据记录…...
使用ZIP包安装MySQL及配置教程
在本教程中,我们将指导您完成使用ZIP包安装MySQL的过程,并对配置文件进行必要的修改,以及解决可能遇到的问题。本示例以MySQL 5.7.44为例,但步骤同样适用于其他版本如MySQL 8.3.0等。请根据实际需要选择适合的版本下载:…...
资源管理器老崩溃?可能是combase.dll在捣鬼,手把手教你用DISM和干净启动搞定它
深度解析Win10资源管理器崩溃:combase.dll故障诊断与系统级修复指南 当你在Windows 10中拖拽文件时突然遭遇黑屏闪烁,随后资源管理器自动重启,这种看似随机的崩溃往往与一个关键系统组件——combase.dll密切相关。作为COM基础库的核心文件&am…...
TypeScript函数式编程实战:fp-ts生产级应用技巧与模式解析
1. 项目概述:从类型体操到生产级函数式编程如果你在TypeScript社区里混迹过一段时间,大概率听说过或者用过fp-ts这个库。它把Haskell风格的函数式编程范式带到了TypeScript世界,提供了Option、Either、Task、Reader等一系列强大的代数数据类型…...
终极Anno 1800模组加载器:5分钟轻松定制你的游戏体验
终极Anno 1800模组加载器:5分钟轻松定制你的游戏体验 【免费下载链接】anno1800-mod-loader The one and only mod loader for Anno 1800, supports loading of unpacked RDA files, XML merging and Python mods. 项目地址: https://gitcode.com/gh_mirrors/an/a…...
怎么降低维普AI率?答辩前1周从70%降到15%以内实操指南!
怎么降低维普AI率?答辩前1周从70%降到15%以内实操指南! 答辩前 1 周送维普测 70% 是什么具体场景? 周一早上 9 点,导师群里发消息:「这周送维普看 AIGC 检测,达标了才能进答辩」。我硕士论文用 DeepSeek …...
[K8S小白问题集] - Calico好在哪里?
一、Calico 的核心优势:不止于连通Calico 的设计哲学是“用路由而非封装实现连通,用策略而非信任保障安全”。它并非简单的 CNI,而是一个完整的云原生网络与安全平台。1.1 三层核心能力能力技术实现价值BGP 原生 Underlay每个节点运行 BIRD&a…...
GitHub代码仓库安全防护:基于ClamAV的PR恶意文件自动化扫描实践
1. 项目概述:一个守护代码仓库的“安全哨兵”最近在梳理团队内部的代码安全流程,发现一个挺普遍但容易被忽视的问题:我们花了很多精力在CI/CD流水线上做安全扫描,比如用SonarQube检查代码质量,用Trivy扫描容器镜像漏洞…...
铁路光纤熔接机推荐:鼎讯 TY-30H 性能参数与应用场景
在铁路与高速公路通信建设中,光纤熔接质量直接决定信号传输稳定性。鼎讯 TY-30H 光纤熔接机作为专为野外严苛工况设计的熔接设备,凭借高效、低耗、耐用的综合性能,成为铁路高速通信施工、日常维护及应急抢修的核心设备。一、鼎讯 TY-30H 光纤…...
TV Bro电视浏览器完全指南:如何在智能电视上享受大屏上网的终极体验
TV Bro电视浏览器完全指南:如何在智能电视上享受大屏上网的终极体验 【免费下载链接】tv-bro Simple web browser for android optimized to use with TV remote 项目地址: https://gitcode.com/gh_mirrors/tv/tv-bro TV Bro是一款专为智能电视和遥控器操作优…...
综合实战——开发一个“智能标书辅助生成系统“(01需求分析与架构设计)
综合实战——开发一个“智能标书辅助生成系统“ 前言:为什么选择"标书生成"作为实战项目? 在正式开始之前,先回答一个关键问题:为什么选这个场景? 标书(Bid/Proposal)生成是企业中一个真实且高价值的AI应用场景: 痛点明确:写一份标书需要3-5天,且大量内容…...
Rust命令行截图工具开发:从设计到实现的全流程解析
1. 项目概述:一个轻量级截图工具的诞生 最近在折腾一个个人小项目,起因很简单:我对市面上那些动辄几百兆、启动慢、功能臃肿的截图工具感到厌倦了。我需要一个纯粹的、快速的、能让我在几秒钟内完成“看到-截取-处理-分享”整个流程的工具。于…...
