Cache:一个隐藏并保管数据的场所

Windows批处理脚本实现文件夹三重加密:零安装的轻量级隐私保护方案 文件加密是数据安全的基础技术,其核心原理是通过算法或权限控制限制对敏感信息的访问。在Windows系统中,除了传统的AES等加密算法,利用系统内置的访问控制列表(ACL)和文件属性管理功能,也能构建有效的防护机制。这种基于权限的“软加密”方案,通过批处理脚本(.bat)自动化执行attrib和icacls命令,实现了隐藏、权限剥夺和密码验证的三重防护。其技术价值在于零成本、无第三方依赖、系统资源占用极低,且便于跨Windows设备迁移。对于需要快速保护本地隐私文件、防止他人临时访问的场景,这种轻量级方案提供 阅读详情

转载:http://blog.csdn.net/drshenlei/article/details/4277959


原文标题:Cache: a place for concealment and safekeeping

原文地址:http://duartes.org/gustavo/blog/

 

[注:本人水平有限,只好挑一些国外高手的精彩文章翻译一下。一来自己复习,二来与大家分享。]

 

本文简要的展示了现代Intel处理器的CPU cache是如何组织的。有关cache的讨论往往缺乏具体的实例,使得一些简单的概念变得扑朔迷离。也许是我可爱的小脑瓜有点迟钝吧,但不管怎样,至少下面讲述了故事的前一半,即Core 2的 L1 cache是如何被访问的:

 

L1 cache – 32KB,8路组相联,64字节缓存线

1.       由索引拣选缓存组(行)

 

在cache中的数据是以缓存线(line)为单位组织的,一条缓存线对应于内存中一个连续的字节块。这个cache使用了64字节的缓存线。这些线被保存在cache bank中,也叫(way)。每一路都有一个专门的目录(directory)用来保存一些登记信息。你可以把每一路连同它的目录想象成电子表格中的一列,而表的一行构成了cache的一(set)。列中的每一个单元(cell)都含有一条缓存线,由与之对应的目录单元跟踪管理。图中的cache有64 组、每组8路,因此有512个含有缓存线的单元,合计32KB的存储空间。

 

在cache眼中,物理内存被分割成了许多4KB大小的物理内存页(page)。每一页都含有4KB / 64 bytes == 64条缓存线。在一个4KB的页中,第0到63字节是第一条缓存线,第64到127字节是第二条缓存线,以此类推。每一页都重复着这种划分,所以第0页第3条缓存线与第1页第3条缓存线是不同的。

 

全相联缓存(fully associative cache)中,内存中的任意一条缓存线都可以被存储到任意的缓存单元中。这种存储方式十分灵活,但也使得要访问它们时,检索缓存单元的工作变得复杂、昂贵。由于L1和L2 cache工作在很强的约束之下,包括功耗,芯片物理空间,存取速度等,所以在多数情况下,使用全相联缓存并不是一个很好的折中。

 

取而代之的是图中的组相联缓存(set associative cache)。意思是,内存中一条给定的缓存线只能被保存在一个特定的组(或行)中。所以,任意物理内存页的第0条缓存线(页内第0到63字节)必须存储到第0组,第1条缓存线存储到第1组,以此类推。每一组有8个单元可用于存储它所关联的缓存线(译注:就是那些需要存储到这一组的缓存线),从而形成一个8路关联的组(8-way associative set)。当访问一个内存地址时,地址的第6到11位(译注:组索引)指出了在4KB内存页中缓存线的编号,从而决定了即将使用的缓存组。举例来说,物理地址0x800010a0的组索引是000010,所以此地址的内容一定是在第2组中缓存的。

 

但是还有一个问题,就是要找出一组中哪个单元包含了想要的信息,如果有的话。这就到了缓存目录登场的时刻。每一个缓存线都被其对应的目录单元做了标记(tag);这个标记就是一个简单的内存页编号,指出缓存线来自于哪一页。由于处理器可以寻址64GB的物理RAM,所以总共有64GB / 4KB == 224个内存页,需要24位来保存标记。前例中的物理地址0x800010a0对应的页号为524,289。下面是故事的后一半:

 

在组中搜索匹配标记

 

由于我们只需要去查看某一组中的8路,所以查找匹配标记是非常迅速的;事实上,从电学角度讲,所有的标记是同时进行比对的,我用箭头来表示这一点。如果此时正好有一条具有匹配标签的有效缓存线,我们就获得一次缓存命中(cache hit)。否则,这个请求就会被转发的L2 cache,如果还没匹配上就再转发给主系统内存。通过应用各种调节尺寸和容量的技术,Intel给CPU配置了较大的L2 cache,但其基本的设计都是相同的。比如,你可以将原先的缓存增加8路而获得一个64KB的缓存;再将组数增加到4096,每路可以存储256KB。经过这两次修改,就得到了一个4MB的L2 cache。在此情况下,需要18位来保存标记,12位保存组索引;缓存所使用的物理内存页的大小与其一路的大小相等。(译注:有4096组,就需要lg(4096)==12位的组索引,缓存线依然是64字节,所以一路有4096*64B==256KB字节;在L2 cache眼中,内存被分割为许多256KB的块,所以需要lg(64GB/256KB)==18位来保存标记。)

 

如果有一组已经被放满了,那么在另一条缓存线被存储进来之前,已有的某一条则必须被腾空(evict)。为了避免这种情况,对运算速度要求较高的程序就要尝试仔细组织它的数据,使得内存访问均匀的分布在已有的缓存线上。举例来说,假设程序中有一个数组,元素的大小是512字节,其中一些对象在内存中相距4KB。这些对象的各个字段都落在同一缓存线上,并竞争同一缓存组。如果程序频繁的访问一个给定的字段(比如,通过虚函数表vtable调用虚函数),那么这个组看起来就好像一直是被填满的,缓存开始变得毫无意义,因为缓存线一直在重复着腾空与重新载入的步骤。在我们的例子中,由于组数的限制,L1 cache仅能保存8个这类对象的虚函数表。这就是组相联策略的折中所付出的代价:即使在整体缓存的使用率并不高的情况下,由于组冲突,我们还是会遇到缓存缺失的情况。然而,鉴于计算机中各个存储层次的相对速度,不管怎么说,大部分的应用程序并不必为此而担心。

 

一个内存访问经常由一个线性(或虚拟)地址发起,所以L1 cache需要依赖分页单元(paging unit)来求出物理内存页的地址,以便用于缓存标记。与此相反,组索引来自于线性地址的低位,所以不需要转换就可以使用了(在我们的例子中为第6到11位)。因此L1 cache是物理标记但虚拟索引的(physically tagged but virtually indexed),从而帮助CPU进行并行的查找操作。因为L1 cache的一路绝不会比MMU的一页还大,所以可以保证一个给定的物理地址位置总是关联到同一组,即使组索引是虚拟的。在另一方面L2 cache必须是物理标记和物理索引的,因为它的一路比MMU的一页要大。但是,当一个请求到达L2 cache时,物理地址已经被L1 cache准备(resolved)完毕了,所以L2 cache会工作得很好。

 

最后,目录单元还存储了对应缓存线的状态(state)。在L1代码缓存中的一条缓存线要么是无效的(invalid)要么是共享的(shared,意思是有效的,真的J)。在L1数据缓存和L2缓存中,一条缓存线可以为4个MESI状态之一:被修改的(modified),独占的(exclusive),共享的(shared),无效的(invalid)。Intel缓存是包容式的(inclusive):L1缓存的内容会被复制到L2缓存中。在下一篇讨论线程(threading),锁定(locking)等内容的文章中,这些缓存线状态将发挥作用。下一次,我们将看看前端总线以及内存访问到底是怎么工作的。这将成为一个内存研讨周。

 

(在回复中Dave提到了直接映射缓存(direct-mapped cache)。它们基本上是一种特殊的组相联缓存,只是只有一路而已。在各种折中方案中,它与全相联缓存正好相反:访问非常快捷,但因组冲突而导致的缓存缺失也非常多。)

 

[译者小结:

 

1.         内存层次结构的意义在于利用引用的空间局部性和时间局部性原理,将经常被访问的数据放到快速的存储器中,而将不经常访问的数据留在较慢的存储器中。

2.         一般情况下,除了寄存器和L1缓存可以操作指定字长的数据,下层的内存子系统就不会再使用这么小的单位了,而是直接移动数据块,比如以缓存线为单位访问数据。

3.         对于组冲突,可以这么理解:与上文相似,假设一个缓存,由512条缓存线组成,每条线64字节,容量32KB。

a)         假如它是直接映射缓存,由于它往往使用地址的低位直接映射缓存线编号,所以所有的32K倍数的地址(32K,64K,96K等)都会映射到同一条线上(即第0线)。假如程序的内存组织不当,交替的去访问布置在这些地址的数据,则会导致冲突。从外表看来就好像缓存只有1条线了,尽管其他缓存线一直是空闲着的。

b)        如果是全相联缓存,那么每条缓存线都是独立的,可以对应于内存中的任意缓存线。只有当所有的512条缓存线都被占满后才会出现冲突。

c)        组相联是前两者的折中,每一路中的缓存线采用直接映射方式,而在路与路之间,缓存控制器使用全相联映射算法,决定选择一组中的哪一条线。

d)        如果是2路组相联缓存,那么这512条缓存线就被分为了2路,每路256条线,一路16KB。此时所有为16K整数倍的地址(16K,32K,48K等)都会映射到第0线,但由于2路是关联的,所以可以同时有2个这种地址的内容被缓存,不会发生冲突。当然了,如果要访问第三个这种地址,还是要先腾空已有的一条才行。所以极端情况下,从外表看来就好像缓存只有2条线了,尽管其他缓存线一直是空闲着的。

e)         如果是8路组相联缓存(与文中示例相同),那么这512条缓存线就被分为了8路,每路64条线,一路4KB。所以如果数组中元素地址是4K对齐的,并且程序交替的访问这些元素,就会出现组冲突。从外表看来就好像缓存只有8条线了,尽管其他缓存线一直是空闲着的。

]

文件夹加密工具LockDir:基于AES算法构建个人数据保险箱 数据加密是信息安全领域的核心基础技术,其原理是通过特定算法和密钥将明文信息转换为无法直接识别的密文,从而确保数据的机密性。AES(高级加密标准)作为当前行业广泛采用的对称加密算法,以其高强度和高效性,为数据提供了可靠的安全屏障。在工程实践中,文件夹加密工具将这一技术价值转化为直观的用户体验,允许用户对特定目录进行整体加密保护,有效防止未授权访问。这类工具尤其适用于保护包含敏感信息的项目文档、财务数据或个人隐私文件等场景。以LockDir为代表的解决方案,正是通过集成AES-256等加密算法,实现了对文件夹内 阅读详情

相关推荐

在 Windows 系统下使用 VMware 安装 Ubuntu 24.04 LTS 系统

Ubuntu24.04桌面端官方下载:https://cn.ubuntu.com/download/desktop。

u014695938的博客 1万+

笔记——Cache

Cache出现背景 冯诺依曼结构瓶颈:主存和CPU之间的分离。 Cache是解决冯诺依曼瓶颈最广泛使用的方法之一。 2个优势:一次内存访问传送给多的数据或者更多的指令;将部分数据块或者代码存放在离CPU更近的cache中。 局部性原理 在访问完一个内存区域(指令或者数据),程序会在不久的将来(时间局部性)访问邻近的区域(空间局部性)。 根据这一原理,只要将CPU近期要用到的程序和数据提前存入主存中,同时也要存相邻的指令和数据。 因为代码中往往有很多循环,所以相比于数据cache,指令cache的重要性要稍

weixin_43850810的博客 2560

五、e2studio VS STM32CubeIDE之汉化

介绍stm32cubeide汉化方案和汉化包e2studio自带汉化包,在安装过程中可选择安装e2studio STM32CubeIDE切换中英文。

cl234583745的博客 1726

Cache如何分bank

需要有两套地址解码器,使得两个端口可以同事寻址Tag和Data, 使用两个多路选择器去读取两个端口的数据,比较器数量*2进而判断两个端口的命中情况,需要两个对齐器Aligner,完成字节或半字的读取,Tag SRAM和Data SRAM本身不需要复制,但是每个cell需要同时支持两个行的读取操作。一个双端口的Cache需要两个地址解码器,两个Way Mux,两个比较器和一个对其器Aligner,但是Data SRAM不需要实现多端口结构,进而提升速度减小面积。

rosemaryandthyme的博客 1194

CPU | Cache 基本概念和基本原理

一 、Cache的基本概念 Allocation          在cache中发现一个位置,把新的cache数据存到这个位置的过程。这个处理过程可能包括 evicting(驱逐)cache中已存在的数据,从而为新的数据腾出空间。 Associativity    关联方式          指每个Set(集)里包含的line frames(行帧)数。也就是cache的way(路)数。...

Sherlock_Homles的专栏 7232

理解cache的结构 bank

http://www.mouseos.com/arch/cache.html 讲解cache在intel和AMD之间的区别,绘有结构图。http://blog.sina.com.cn/s/blog_6472c4cc0102duzr.html 本博客系统的介绍了cache的工作原理。 参考:http://blog.sina.com.cn/s/blog_6472c4cc0102dw61.html

AI系统、缓存 6102

Cache: 一个通常是晦涩和不公开的地方 Cache: a place for concealment and safekeeping

原文作者:Gustavo Duarte 原文地址:http://duartes.org/gustavo/blog/post/what-your-computer-does-while-you-wait Cache: a place for concealmen

为了工作而工作是悲哀的!工作是实现自我价值的地方! 1821

Cache一个隐藏保管数据场所——组相联详解

本文简要的展示了现代Intel处理器的CPU cache是如何组织的。有关cache的讨论往往缺乏具体的实例,使得一些简单的概念变得扑朔迷离。也许是我可爱的小脑瓜有点迟钝吧,但不管怎样,至少下面讲述了故事的前一半,即Core 2的 L1 cache是如何被访问的: L1 cache – 32KB,8路组相联,64字节缓存线 1. 由索引拣选缓存组(行)...

weixin_33778778的博客 504

DataBrick Notebooks的隐藏功能:超越基础的数据交互方式

本文深入探讨DataBrick Notebooks的高级功能,包括交互式数据探索、与AWS S3的无缝集成、团队协作与版本控制以及性能优化技巧。通过动态参数化查询、实时数据预览和Delta Cache等黑科技,DataBrick Notebooks显著提升数据处理效率,是数据科学家和工程师的强大工具。

weixin_29309785的博客 513

Superdna:本地DNA分析工具,保护隐私实现个性化基因数据查询

基因数据作为个人生物信息的重要组成部分,其安全与隐私保护日益受到关注。传统云端分析平台虽然便捷,但存在数据泄露风险和高昂的订阅成本。本地DNA分析工具通过将数据处理流程完全置于用户可控环境中,从根本上解决了隐私安全问题,同时提供了灵活的可编程接口。这类工具通常基于命令行界面(CLI)和Python API构建,能够解析常见的基因数据格式(如23andMe、VCF),通过RSID快速查询特定SNP位点的基因型。其技术价值在于赋予用户对自身基因数据的完全控制权,支持定制化分析流程,可与外部数据库(如dbSN

weixin_30542079的博客 450

本地AI应用数据安全实战:使用VeraCrypt加密Gallery目录

数据加密是信息安全领域的核心基础技术,其原理是通过特定算法将明文信息转换为不可读的密文,确保即使数据被非法获取也无法被解读。在AI应用日益普及的背景下,本地生成的图像、对话记录等数据面临泄露风险,因此对数据进行加密保护具有重要的技术价值。特别是在涉及个人隐私或商业敏感信息的场景中,加密能有效防止因设备丢失、未经授权访问或云端同步导致的数据泄露。本文聚焦于利用成熟的虚拟磁盘加密技术,为Stable Diffusion等本地AI应用的Gallery目录构建一套透明、高效的加密方案,实现数据在存储与使用过程中的安

weixin_33766805的博客 396

Python数据脱敏实战:从爬虫合规到生产级隐私保护

数据脱敏是信息安全与隐私保护领域的核心技术,指通过对敏感数据进行变形、替换或遮蔽处理,使其无法直接关联到特定个人,同时保留数据的统计特征与分析价值。其原理在于平衡数据可用性与安全性,通过算法手段实现去标识化。这项技术的核心价值在于满足《个人信息保护法》等法规要求,防范数据泄露风险,保障用户隐私权益。在应用场景上,数据脱敏广泛应用于爬虫数据合规处理、数据分析、测试环境构建等环节。本文聚焦Python爬虫场景,深入探讨如何构建可配置的脱敏处理器,涵盖手机号遮蔽、身份证号脱敏、加盐哈希等关键技术,解析生产环境中

weixin_33796205的博客 369

保序加密(OPE)原理与实战:在数据库加密数据上实现高效范围查询

数据库安全领域,加密技术是保护敏感数据的基石。传统加密算法(如AES)虽然能确保数据的机密性,但会破坏数据的顺序和结构,导致数据库无法对密文直接执行范围查询、排序等关键操作。保序加密(Order-Preserving Encryption, OPE)作为一种特殊的加密方案,其核心原理在于设计一个单调递增的加密函数,使得密文依然保持明文的顺序关系。这项技术的核心价值在于,它巧妙地平衡了安全性与可用性,允许数据库服务器在不接触明文的情况下,高效地执行基于密文的范围比较和排序。在金融风控、医疗数据分析等涉及敏感

weixin_30675247的博客 427

Linux相关概念和易错知识点(7)(git、冯诺依曼体系结构)

因为硬盘和CPU比起来太慢了,会受到木桶效应限制,而内存是读取速度稍快,价格稍低的硬件,可以说DRAM极大降低了计算机的价格,是冯诺依曼体系结构中很重要的一环。换句话说,就算哪一天Gitee和Gitub突然出问题,远端仓库全部销毁了,git管理的本地仓库依然有全套数据和修改,我们换一个能提供远端仓库的服务器就好了。隐藏的目录.git中,可以找到这个index暂存区,index是一个特殊编码的文件,使用git自己的编码格式。我们可以只建立一个本地的仓库,然后用git管理,这样也省去我们自己手动管理的时间。

SGlow0708的博客 1242

微信聊天记录终极指南:3步实现数据永久保存与智能分析

在数字时代,微信聊天记录承载着我们最重要的记忆、工作沟通和生活点滴。然而,你是否曾担心这些珍贵的对话会随着时间流逝而消失?WeChatMsg正是解决这一痛点的开源工具,它能帮你实现**微信聊天记录的本地化导出**,深度分析生成年度报告,让你真正掌握自己的数字记忆。 ## 为什么你需要掌控自己的聊天记录? ### 数据主权的觉醒 想象一下,你与家人的温馨对话、与朋友的重要约定、工作中的关键决

gitblog_01161的博客 1037

运营商行业BOSS云化方案(54页).pptx

运营商行业BOSS云化方案(54页).pptx

上一篇: CPU的运行环、特权级与保护
下一篇: 剖析程序的内存布局
kernel_digger
博客等级 码龄15年 18粉丝 19原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值