我要求Linux从一个冷文件开始就提供一个4 KiB页面.
有四页又回来了 我移动了同一个读取的一页, 运行一遍,并得到了一个。
相同的文件,相同的syscall,相同的内核。
唯一能改变的是我开始阅读的地方, 我花了20分钟 假设我刚刚写的工具是计算错误的。
不是那样的 以字节0开头的读取值被视为承诺.
里面有一个分支读取,完全读取.
Offset 0表示内核将你带入一个程序,这个程序即将流出整个文件,它立刻向前取出.
从其他任何地方开始,你被假定是随机寻找 直到一个模式证明其他。
我电话里没提过我的意图 它从抵消中推断出来。
我最近花了两周时间处理这种事 不是为工作,也不是为任何可以航行的东西。
简而言之,我发现运行程序下的机器 数量惊人 根本没有执行指令 这是猜测。
长椅,因为它会改变您应该如何读取这里的每个号码:一个循环设备上的ext4文件系统,在苹果硅Mac上的OrbStack Linux VM内部,内核7.0.14,4 KiB页,为128.
那是一个分享宿主内核的容器, 不是裸出金属的, 宿主非常积极地恢复记忆, 一个完全被缓存的文件可以在15秒内冷却.
读者来自 ; 逐页计算来自 我写的一个小 C 工具, 你不在磁盘上,在页面缓存上 我们中大多数人所携带的模型 就是从一个设备上得到字节 它没有。
它将字节从页面缓存复制到您的缓存中,而页面缓存只是内核用来记忆部分文件的内存.
如果你想要的已经存在了, 没有任何设备参与。
如果不是,则内核先填充缓存再复制.
无论是哪种方式,你的程序 谈论的东西是记忆, 磁盘是别人的问题 下一层。
你可以从外面看这个 放下缓存,读出一页,并计数:住四页.
完全不读,再数一遍:0.
档案没有改变, 和Syscall也没有。
它得到多少取决于它认为你在做什么 一旦内核必须去到设备, 它面对一个你从未回过电话的问题:它应该带回多少?
获取你要求的正是诚实的答案,通常是错误的答案,因为内核建立在一个读取一个块的程序会想要下一个块的假设上.
因此它可以推测,而推测的多远取决于它有多少证据.
相继从冷读取一页一页一页一页一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一.
后来就停了 所配置的上限应为三十二分之一分之一分之一分之一分之一分之一分之一分之一分之一分之一分之一分之一分之一分之一分之一分之一分之一分之一分之一分之一分.
我测量了31,2次, 我没有追寻缺失的一页。
如果你知道原因的话 我想听听 真正让我惊讶的是证据所在的地方 每个读取是一个单独的过程,有一个新的文件描述符,没有它自己的历史,因此按描述符状态无法解释一个跨越独立引用的窗口.
因为它通过页面缓存往后看 来寻找一个相继的读者留下的痕迹 缓存共享.
访问模式在互不相识的过程之间泄露出,一个程序读取了另一个程序的外形.
同一字节的两个门,两个不同的答案不是唯一的入场方式.
您可以使用文件并触摸内存,同一页缓存通过不同的门为您服务.
门不相为相.
一张地图的一触就带回了32页,其中相等部分带回了4页。
窗口以我碰到的一页为中心,而不是从那里开始:我把一页的100弄错了,得到了一页的84到一页的115。
核心是内核 承认它有多少工作