粉丝1.3万获赞8.7万

这张图片里面韩国短道搜花选手朴昌赫。朴昌赫?我可能搞错了,朴章赫后面这个 dns 三个字母指的是犯规吗?这哥们啊,在预赛中直接被对手干翻在地啊,裁判按照规则把他直接给判进了半决赛,哎,这里的 adv 指的就是 advanced, 表示直接晋级。但这哥们伤的实在是太严重了,即便是给他判进了半决赛,他也没法参加,我真的是个废物,你连废物都不如,你说这判了个寂寞呀,还不如把明哥直接给我们呢。 所以这里的 dns 并不指的是犯规,而是 do not start 的缩写,指的是压根就没有参加比赛。那问题来了,在短道索尔比赛中, dnf 是什么意思?那众多体育比赛里面 o r wr 是什么意思?评论区留下你的答案。

同样,吉普图姆在转战全马之后呢,三场比赛三次 pb, 最后一次刷新了 wr, 刷新了世界纪录。 我们很多朋友啊,在看一些田径赛事的时候,会看到很多奇怪的英文字母啊,都是有意义的。比如说 wr 呢,是 word record, 是世界纪录保持者的意思,世界纪录的意思。 w l 呢,是 word leader, 是今年世界最好成绩的意思。还有一些包括像 dnf 是说明没有完赛, dns 是没有参赛啊, dq 是犯规啊, p w p w 呢,并不是一个正式的田径的术语啊, p w 是一个 啊, personal worst 啊,这是一个大家可能经常口口相传的不成文的一个名词,包括像 n r, 现在您看到的这个 n r 就是国家记录, national record 是国家记录的意思。

看 f 一 的时候,你是否经常看到这四个缩写? d n f d n s d n q d s q。 它们长得像好像,意思都差不多。今天小冷就一分钟给你讲清楚这四个术语的区别,顺便讲一个一战集齐三样成就的离谱故事, d n f did not finish。 没完赛, 发车了,但没跑到终点,撞墙、爆缸、退赛都算。这是最常见的一种失败。 d n s did not start。 没发车。排位赛成绩有了,但正赛没上发车格,迈凯伦上海站两台车都没发车。这就是 d n s d n q did not qualify。 没入围 排位赛没跑进百分之一百零七规则,或者干脆没跑出成绩,连上赛道的资格都没有。但这种情况很少见,上一次还是一九九二年的巴西大奖赛, d s q disqualified 被取消成绩,车跑完了,甚至可能拿了冠军,但违反规则,成绩被取消,积分没收。 一句话记忆, d n q。 是 连门都没进。 d n s。 是 进了门,但没上场。 d n f。 是 上场了,没跑完。 d s q。 是 跑完了,但不算数。这四项似乎站到一项比赛就报销了。但有一个男人,却在同一站比赛里集齐了三样, d n f d s q d n q。 它叫汉斯海尔。一九七七年德国亚甲赛,黑尔排位赛没跑进前二十四名。按照当时的规则,喜提 d n q。 但黑尔不管, 趁着赛道工作人员没注意,他悄悄把车开上了发车格,灯灭起跑,他混进去了。跑了十圈,变速箱故障退赛,喜提 d n f。 当然,这个行为在赛后终于被赛会发现了,直接 d s q。 那 么,成绩单上到底该给他打哪个成绩呢?我是小冷,关注我,带你混进围场内部。

知不知道什么叫 d n s? 什么叫 d d n s? 不知道了,我给你介绍一下啊, d n s 呢,就是把你的这个 域名翻译成 ip 的 一个过程,因为互联网数据通讯的话是通过 ip 地址来访问的啊,那我们通常记住的三 w 什么点 com、 点 net 这个域名是便于我们记住它这个名字,但实际访问的时候它是要通过 ip 地址去访问的啊。 所以呢,我们访问什么三 w 什么点 com 的 时候呢,他是先把这个数据发到域名服务商那边,然后域名服务商那边呢,通过 这个域名解析对应的 ip, 把你的数据跳转到对应的 ip 地址,从而实现了这个三 w 什么点 com 的 这个地址的数据网站的访问。对,这就叫 dns 啊。 呃, dds 的 话呢,是动态域名解析,就是那种情况,就是给了我们家里的一些宽带。呃,每次拨号的时候他 ip 都会变化,如果你想远程访问这个 ip 的 话,他老是变来变去,你就访问不了,包括以前的四 g、 五 g 的 这个路由器, 那它的 ip 地址也是不停的变化啊,你远程想访问它,你访问不了,那呢,你就通过设置这个动态域名,让这个路由器每次变成新的 ip 的 时候呢,把这个新的 ip 提交到啊,域名服务商那边 啊,动态域名啊,然后呢,你远程访问这个域名,它就会给你解析到最新的 ip 啊, 如果你今天变了 ip, 他 那个那个那个域名表里面,他又会更新这个 ip 地址啊,如果后面变了之后又不停的变化,变了之后呢,他又更新,你只要记住这个域名,然后就可以远程访问,这就叫 d d n s 啊, 但是现在的这个四 g 五 g 包括我们家里的这种有线的宽带,现在目前的基本上都没有公网的地址了啊,以前呢就是电信的还有少部分地方有公网的地址, 后面慢慢的都变成幺零幺七二开头的都是都是内网的 ip 了。对,所以呢,目前呢就是说 d d n s 目前基本上是用不了的啊,因为你没有这种公网的公网的 ip 地址啊,当然如果你有公网的 ip 地址的话,你是可以用的啊,像是个四 g 五 g 的 话,据我了解都没有公网的地址了啊, 因为这个 ip 资源比较有限啊,目前的话呢,基本上用一个公网地址给很多用户,用户同时上网用啊,这样一来的话可以节省一些 ip 资源。对, 那我们说有时候会有那种,就是就是你那个路由器那端是通过一个客户端的方式 去连到服务器那边去的,然后实现了这样的一个内网穿透。那种本质上不叫 d d n s 啊,它不是通过域名的方式来解析的,它是通过客户端跟服务端来产生这个数据链接, 然后从而实现就是跟踪到这个客户端。对,那种不叫不叫匿名解析啊,不叫 d d n s 啊,动态匿名解析,他这种叫应该叫内网穿透啊。 好,我这边是科创通信的老吴,我们做工业路由器,工业交换机啊,各位老板如果会用到的话关照一下啊,对这个通信知识有兴趣的话可以关注一下我这边啊,感谢支持!

你有没有想过,为什么你在浏览器里输入的明明是一个网址,可电脑最后找到的却是真正的服务器?更奇怪的是, 你从头到尾根本没有输入过 ip 地址,那它到底是怎么找到的?今天这条视频我就带你弄明白一件事,网址为什么最后会变成服务器地址?中间起作用的就是 dns。 如果直接讲定义,会有点抽象,所以你可以先把 dns 理解成手机里的通讯录。你平时记住的 是一个人的名字,但真正打电话的时候,系统不会拿名字直接拨号,而是先去找这个名字对应的电话号码上网。其实也是一样, 我们平时记住的是网址,也就是域名,但电脑真正要连接服务器,靠的不是名字,而是 ip 地址。 所以当你输入一个网址的时候,电脑不会直接凭这个名字就找到服务器,他会先去问 dns 这个域名到底对应哪一个 ip 地址。 dns 查到以后,会把这个 ip 地址返回给你的电脑,然后你的电脑再根据这个 ip 地址去连接真正的服务器。 所以你可以把 dns 理解成一个翻译系统,他负责把人能记住的网址翻译成机器真正能识别的 ip 地址。那为什么一定要多这一步? 因为域名更适合人记,你很难记住一长串 ip 数字,但你更容易记住一个网址名字 d n s 的 存在,本质上就是为了让人上网更方便。再说一个很常见的现象, 为什么有时候第二次打开一个网站会更快一点?很多时候就是因为 dns 有 缓存,第一次查过之后,系统会先把结果记下来,下次再访问。如果缓存还没过期,就不用再重新查一遍,速度自然会更快。但缓存也会带来另一个问题,有时候一名明明已经改了, 你这边却没有立刻生效,原因通常就是某一层缓存力还保留着旧的 ip 结果。所以, dns 不是 上网本身,它更像上网前的查号台。你会发现, dns 真正做的事只有一键, 先帮你找到真正的服务器地址,等地址找到了,你的电脑才会继续去连接真正的服务器。所以 dns 更像找地址,不是帮你上网。 最后,你只要记住两句话, dns 不是 上网本身,它更像上网前的查号台。还有一句更直接的总结, dns 就是 把网址翻译成 ip 地址的系统。

dns 协议是什么?我们平时上网全靠它,百分之九十的人都不知道,你输入网址就能打开网页,全靠 dns 协议在背后干活。今天一条视频全程大白话,把 dns 协议扒的明明白白。 首先先搞懂最基础的什么是 dns 协议。 dns 协议全称域名系统协议,英文全称 domain name system, 说白了就是互联网里的专属地址。翻译官加万能地址簿,咱们平时上网书的三 w 点 a a 度点 com, 三 w 点 tabl 点 com 这些好记的名字叫域名,但互联网里的所有设备只认 ip 地址,就是一串有点分开的数字, 比如幺九二点幺六八点幺点幺,设备之间只能通过 ip 地址互相找到对方。 dns 协议就是专门负责把好记的域名翻译成设备能看懂的 ip 地址的一套网络规则。没有 dns, 我 们上网只能死记硬背 ip 地址,根本没法轻松冲浪, 他就是上网的第一道敲门砖。 dns 的 核心职责就干这一件大事,简单到一句话就能概括叫域名解析,别被专业词吓到。 域名解析就三步操作,一、你在浏览器输入域名,设备立刻向 d n s 服务器发出翻译请求。二、 d n s 服务器收到请求,快速查找对应的 ip 地址,再把结果返回给你的设备。三、设备拿到 ip 地址,才能成功连接到目标网站,打开你想看的页面。 除此之外, dns 还会做缓存加速、负债均衡。但所有工作都是围绕域名和 ip 的 精准翻译展开,保证我们能快速准确找到目标网站,这就是它的核心使命。 dns 到底是怎么工作的?很多人觉得 dns 原理复杂,其实把它比作查地址的流程分为五步理解,瞬间就懂。一、本地查询, 你的电脑手机先翻自己的本地缓存,看看之前有没有记过这个域名的 ip, 有 就直接用。二、请求地归服务器,本地没找到就去找地归 dns 服务器,相当于小区快递站,他帮你跑腿查地址。三、请求根服务器, 地归服务器,找不到就去问根 dns 服务器,相当于全国快递总站,根服务器不直接给 ip, 只告诉你该去哪个顶级服务器找。 四、请求顶级服务器,比如点 com、 点 c n 这类顶级域名服务器,相当于省级快递站,它在告诉你去对应的权威服务器。五、请求权威服务器, 这是最终存着域名和 ip 对 应关系的服务器,相当于目标地址快递点,找到后,把 ip 返回给地归服务器,再传回你的设备。整个过程看似绕路,但全程只需要零点几秒,我们完全感觉不到延迟就能顺利打开网页。为什么 dns 要分这么多层? 设计复杂,其实全是智慧。肯定有同学疑惑,直接一个服务器存所有域名 ip 不 就行了,为啥要分跟顶级权威这么多层?这可不是复杂,全是为了互联网能正常运行。 一、防止服务器崩溃,全球几十亿个域名,一个服务器根本存不下,也扛不住全世界的访问,请求分层后能分散压力,避免瘫痪。二、提升查询速度, 分层管理,就近查询,离你最近的服务器先响应,大大加快翻译速度,上网更流畅。三、方便维护管理。不同层级服务器分管不同域名,某一个出问题不会影响整个互联网,容错率更高。四、支撑海量访问 互联网设备越来越多,分层架构能无限扩容,满足全球几十亿人的上网需求。简单说,分层设计就是为了让互联网更稳定、更快、更耐用。 dns 协议的核心价值 其实就是互联网的基石,看似不起眼,却是整个互联网运行的基础,核心价值无可替代。主要有以下四点,一、简化上网流程, 让我们不用记复杂的 ip 数字,只记简单好懂的域名,降低上网门槛。二、保障网络畅通,精准完成域名翻译,保证设备之间能顺利连接,实现全网互通。三、支撑互联网扩容。 分层架构让互联网能不断发展,容纳更多网站、更多用户。四、优化上网体验,通过缓存覆盖均衡,让我们打开网页更快更稳定。 没有 dns, 互联网就是一团乱麻,我们根本无法便捷使用网络,它就是互联网最底层的基础设施。最后给大家总结一下, dns 协议是互联网域名翻译官,负责域名和 ip 地址的转换,它的核心职责是专一做域名解析,让设备能精准找到目标网站。 它的工作原理分为五步,本地查询、地归服务器,根服务器、顶级服务器、权威服务器,层层查询,快速响应。 d p s。 分 层原因是分散压力,提升速度,方便维护,支撑海量访问。它的核心价值是简化上网,保障网络畅通,支撑互联网发展,是互联网不可或缺的基石。 以后再输入网址,打开网页就知道背后是 d n s 在 默默干活了。好了,今天的视频就到这里了,如果大家有想了解的技术评论区告诉我,我们下期再见。

大家好,今天我们来聊一个非常实用的 dns 功能,为一个域名配置多个 ip 地址,这在构建高可用系统时非常有用。 dns 协议支持一种叫做多值记录的功能,一个域名可以对应多个 ip 地址,当客户端查询时, dns 返回所有 ip 列表,客户端根据自身策略选择连接哪一个。 配置多个 ip 很 简单,假设你的域名是 example 点 com, 你 想解析到三个 ip 地址,只需在 dns 设置中添加三条 a 记录,指向不同的 ip 地址即可。客户端查询时会同时收到这三个 ip 的 列表。 配置多个 ip 主要解决三类问题,高可用性。当某个服务器登机时,客户端可以自动尝试其他 ip, 确保服务连续性、 负债均衡。配合 dns 服务商的轮询机制,把请求分散到不同服务器地理位置,优化根据客户端所在地区返回最近的服务器 ip, 提升访问速度。 多 ip 配置虽然强大,但也有局限性。第一是客户端策略不统一,不同客户端处理多 ip 的 方式不同,有的按顺序,有的随机,有的直接报错。第二是缺乏健康检查, d n s。 不 会检测 ip 对 应的服务是否可用,当机的 ip 仍会被返回。第三是缓存问题,客户端和中间 d n s 会缓存,结果导致 ip 切换不及时。 针对这些局限,第一个方案是使用带健康检查的 d n s。 服务, a w s root、 五十三、 cloud、 load、 balancing 等提供这种能力。 d n s。 服务器定期检查每个 ip 的 健康状态,自动从列表中移除故障 ip, 客户端只会收到可用的 ip 地址。 第二个方案是引入负债均衡器, d n s 只配置一个 ip 指向负债均衡器,由它负责把流量分发到后端多个服务器。负债均衡器实时监控节点状态,自动绕过故障节点,实现更可靠的流量管理。 如果运行在 cobernetis 上,服务网格是更好的选择。 estil、 linkard 等可以自动检测服务健康状态,动态调整流量路由, 即使节点彻底故障,流量也能自动转移到健康节点。对于无法升级架构的情况,降低 dns ttl 是 一个折中方案,把 ttl 设低一点,故障 ip 的 影响时间会缩短, 但这只是缓解措施,不能完全解决问题。让我们看两个具体配置。 club flyer 方案,添加多条 a 记录,起用 load balancing 功能配置健康检查, 检测到故障后自动停止向该 ip 分 流。 a w s root 五十三方案创建健康检查分别监控每个 ip 配置多值路由,开启 multi value answer, 健康检查失败的 ip 会被 dns 自动剔除。 d n s 多 ip 配置可以实现简单的高可用和负债均衡,适合小型应用,但基本 d n s 没有健康检查,故障 ip 仍可能被访问 生产环境。推荐使用带健康检查的 d n s 服务或配合负债均衡器,确保客户端始终连接到可用的服务。

每次你在代码里写一个纸真,操作系统都在背后做一件事,把你以为的地址偷偷翻译成另一个地址。你用的地址是假的,那真正的翻译过程到底是怎么完成的? 先说一个事实,你的程序从来没有直接碰过物理内存,每个进程看到的地址空间从零到几百 t b, 全是操作系统精心编织的幻觉。几十个进程各自以为自己拥有整台机器的内存,但物理内存可能只有十六个 g。 这个障眼法的核心道具就是页表,让我用一个图书馆来帮你建立直觉。你拿着一张目录卡,上面写着四十二号书,但这个编号不是书架上的真实位置,它是图书馆给你的虚拟编号。 你去前台问管理员,管理员先翻柜台上的小抄, t l b, 找到了就直接告诉你位置,几秒搞定。找不到呢,得去翻那本厚厚的大目录页表。最惨的情况,目录上写着,此书在仓库,得从仓库搬回来,这就是缺页异常。 c p、 u。 拿到一个四十八位虚拟地址后,第一步不是去查表,而是把这个地址拆开。 你可能会问,干嘛搞四 g 这么复杂,一张大表不行吗?算一下就知道了。四十八位地址空间,除以四 kb 页,大小需要两的三十六次方的条目乘以八字节,一张页表就要五百一十二个 gb, 这比你的物理内存还大,而且大部分条目都是空的。一个普通进程可能只用几十 mb 内存。 四级页表的核心优势就一个字,省。如果 p、 g、 d 的 某一项是空的,说明对应的五百一十二 g 虚拟地址范围根本没用到,不需要分配任何下级页表页。 一个简单的进程可能只需要五到十个页表页,总共二三十 kb, 从五百一十二 g 到二十 kb, 这就是多级缩影的威力。 来看内核的页表便利代码。从 c 二二三寄存器拿到 p g d。 的 物理机地址,用虚拟地址的第一段九位做缩影,拿到 p g d 条目,这个条目里存的是下一级 pod 页表的物理地址。再用第二段九位缩影 pod 拿到 p m d 地址, 如此层层递进,最终从 p t e 条目里取出物理真号 p f m。 注意那些 alook 调用,每一级都是按需分配的,用到才创建。 把整个翻译链路化出来,你会发现有两条路,快速路 t l b。 命中一个周期直接得到物理地址。 慢速路 t l b 未命中硬件自动从 c 二三开始逐级遍历四级页表,最终拿到 p f m。 拼出物理地址,并且把结果回填到 t l b。 绝大多数情况下走的是快速路, t l b 的 命中率通常在百分之九十九以上。 页表象里不光存了物理真号,它还藏着好几个关键的标志位,每一位都有大用。 看这个六十四位的 pte 结构, d 零位 p present 表示这一页到底在不在物理内存中。 p 等于零的时候,访问这个地址就会触发缺页异常。第一位读写标志写时复制的页面,这一位是零。第六位是脏位,被写过就自动置一,回收时必须先写回磁盘最高位 n x 不 可值行位,阻止数据页被当代码执行安全防线。 现在来聊 t l b, 你 已经看到不走 t l b 的 话,每次内存访问都要查四级页表,至少四次额外的内存访问,这代价太大了。 t l b 就是 页表的硬件缓存,查一次大约一个时钟周期,霉死了,走页表便利十到一百个周期。如果页面不在内存里触发缺页,那就是百万周期级别的灾难。三个数量级的差距,足以说明 t l b 有 多关键。 来看 t l b 的 工作流程, cpu 先用虚拟页号查 t l b, 命中了一个周期,拿到物理真号,拼上偏移,就是物理地址没命中呢?硬件自动发起 page walk, 从 c 二三开始,逐级查页表, 查到有效的 p t e 后,把映涉关系回填到 t l b, 下次就快了。最惨的情况, p t e 说这液不在物理内存里,触发缺液异常,陷入操作系统内核 t l b 不是 永远有效的,有几个时机必须刷新。进程切换时,内核把新进程的 p g d 基地址写入 cr 三寄存器,硬件检测到 cr 三变化,自动清空 t l b, 这也是进程切换开销大的原因之一。单个页面的权限变化呢?内核可以精确失效对应的 t o b 条目。但最痛的是多核场景,你在一个核心上改了页表,其他核心的 t o b 还缓存着,就映射必须发 ip i 中断通知它们刷新,这叫 t o b shoot down, 代价相当高。 怎么缓解 t l b 容量不足的问题?大叶普通四 kb 页面,一千五百三十六个 t l b 调目只能覆盖六兆内存,对数据库这种大内存应用完全不够用。 换成两兆大叶后,同样的 t l b 调目数可以覆盖三 g, 覆盖范围扩大五百一十二倍,而且大叶直接在 p m d 即完成映射。跳过了最后一集, p t e page walk 也更快了。 现在来聊页表机制中最精妙的设计。缺页异常,表面上看它是一个错误,你访问了一个不存在的页面,但 linux 把这个错误变成了实现懒加载写实复制内存映设的核心机制。 缺页处理像一个状态机。第一步,检查地址是否落在进程的合法 v m a。 范围内,不再就直接 six x 断错误通过了。再看权限,你是不是在尝试写一个只读页面? 如果是 call 页面走写时复制流程。如果页面从未被分配过,分配一个新的物理帧,如果页面被换出到 swap 了,从 swap 换回来,每种场景的处理逻辑完全不同。 来看内核的缺页处理代码。第一步,在当前进程的 v m a。 红黑树中查找这个地址属于哪个内存区域,找不到断错误直接杀进程,找到了就检查权限, 然后根据 p t e。 的 状态分发到不同的处理函数。 p t e 未空,说明这页从来没分配过。 p t e 的 present 未为零,说明页面被换出了,写了一个只读的,靠页面触发写实复制。 总结一下四种典型的缺页场景,首次访问匿名页,内核分配一个全零的物理帧,并建立映射文件。映射缺页,从词盘读文件内容到 page cache, 再建立映射 swap 换入,把之前被换出的页面从交换分区读回内存写实复制。复制一份物理页给学者,让读者和学者各有各的副本。 接下来是我觉得页表设计中最精妙的部分。写实复制 fork 创建子进程时,你以为它会复制父进程的全部内存?如果一个进程占了一个 g, fork 一下就要再分配一个 g, 那 岂不是太浪费了?尤其是 fork 之后,紧接着 x x 加载新程序之前,复制的内容全白费了。 fork 室内可做了一件很聪明的事,他不复制任何物理页面,而是让父子进城的页表都指向同一组物理页帧。但关键来了,他把父子进城和父子进城的 p、 t、 e 都标记为止读。注意,父子进城原来可写的页面也变成止读了。 然后给物理页的引用技术加一两个进城共享同一份物理内存,只要都止读就相安无事。 一旦有一方尝试写入 cpu, 发现 pte 是 指读的触发写保护缺页内核,进入 do 下划线, wp 下划线,配置函数。先检查引用技术,如果只剩一个引用者,说明对方已经不用了,直接把 pte 改回可写就行,不用复制。 如果还有多个引用者,才真正分配一个新的物理页,把内容复制过去,更新写者的 pte 指向新页,并标记可写旧页的引用技术。减一 对比一下就明白 call 有 多妙了。传统 fork 要复制全部物理页面,一个 g 的 进程, fork 一下就是两个 g, 而 call 只复制页表结构,本身几十 kb 搞定。更绝的是 fork 加 exact 的 场景,紫禁城 fork 后,立刻执行 exact 加载新程序,原来共享的页面一个都不用复制,从一 g 到四十 kb, 这就是用页表标志位实现延迟复制的威力, 把整个流程拉成时间线,从 cpu 发出虚拟地址开始, t l b。 未命中的情况下,硬件自动发起 page walk。 注意,每一级页表的访问本身也要经过缓存系统, p g d 和 code 大 概率在 l 一 缓存里, p m d 和 p t e 可能在 l 二全部走完,大约十几纳秒。如果 t l b 命中呢?直接跳到最后两步,一两个纳秒搞定。这就是为什么 t l b 命中率那么重要。 现在你理解了 t l b, 就 能明白进程切换为什么贵了。每次切换进程内核,要把新进程的 p g d。 物理地址写入 c r 三寄存器, c r 三一变,硬件自动清空 t l b。 新进程上来面对的是一个空的 t l b, 每次内存访问都是 t l b miss, 直到热身阶段过去, t l b 才会被重新填满。这也是为什么 linux 引入了 p c i d 优化,允许 t l b。 保留多个进程的条目,用 i d 区分,减少冷启动开销。 还有一个巧妙的设计,每个进程的 p g d。 中低地址部分是用户空间映设,各进程各不相同, 但高地址部分内核空间的页表条目,所有进程都指向同一组局局内核页表页。这样做的好处是,系统调用时不需要切换页表,直接就能访问内核代码和数据。 安全性通过 pte 的 u s 位保证用户太代码虽然看得到内核地址空间的页表条目,但 u s 位标记为内核太访问就会触发保护异常。 页表的级数不是一成不变的。三十二位时代只需要两级页表覆盖四 g 地址空间, 呸!扩展到三级,支持三十六位物理地址 x 八六下划线六四架构,用四级页表覆盖四十八位,也就是二五六 t b 的 虚拟地址空间。但随着内存持续增长,二零一七年 linux 引入了五十七位虚拟地址空间。幺二八 p b。 极速的选择始终是空间覆盖能力和便利开销之间的权衡,来回答一些常见问题。 进程切换时,内核把新进程的 p g d 物理地址写入 cr 三寄存器,硬件检测到 cr 三变化后自动刷新 t l b。 但 linux 在 比较新的 cpu 上会起用 pcid 优化,给每个进程分配一个 idtld 条木,带上这个 id, 就 不用每次都全部清空了。 大业为什么能提升性能?两个原因。第一,两兆大业直接在 pmd 级完成映射,跳过了 pt 一 级, page walk 少走一层。第二,同样的 tld 条木数覆盖范围扩大了五百一十二倍。 对数据库、 jvm 这类大内存应用, tl b max 率可以从百分之五降到百分之零点一,性能提升非常显著。 最后把页表放到整个内存管理的全景中看一看,最上面是用户程序调用 melok 或 map glapt, 把它转成系统调用。 内核维护 v m a。 红黑树管理虚拟地址区间叶表把虚拟地址映射到物理帧号 m m u 和 t l b, 在 硬件层完成每次访问的地址翻译。最底下是物理 g m。 叶表就处在软件和硬件的交界面上,它是内核数据结构,但由 cpu 硬件直接读取和使用。 回顾今天的核心知识点,四级页表用多级缩影实现稀疏印刷,把页表从五百一十二既压缩到几十 kb p t e 标志位不止存地址,还携带全线和状态信息。 t l b 是 性能的守门员,命中率百分之九十九以上。 缺页异常把硬件错误变成了懒加载和写实复制的实现基础大页通过扩大印刷密度缓解 t l b 容量瓶颈。 页表看起来只是一张地址翻译表,但它实际上是操作系统和 cpu 硬件之间最重要的协助接口。操作系统负责键表维护权限、处理异常, cpu 硬件负责查表、缓存触发中断。 正是这种软硬件的精密配合,才让每个进程都能活在自己独占内存的幻觉里,安全、高效,互不干扰。如果觉得有收获,欢迎一键三连,我们下期见!