现代操作系统都在各个级别应用了高速缓存的策略,从而可以平滑化物理硬件的访问差异。一般的高速缓存分为两级,cpu和内存之间一般会设置高速缓存,但是 这一般是硬件实现的,还有一个高速缓存存在于内存和磁盘之间,这个一般由操作系统实现,当然为了给应用程序提供灵活的策略自定义机制,在某些情况下也可以由应用程序实现高速缓存,比如Oracal,当然,这必须要求操作系统有直接IO的机制。先说Linux吧。
在linux中,对于文件系统的访问要经过很多层次,第一个经过的就是vfs,vfs为不同的文件系统给上层提供了一个统一的文件访问接口,如果要访问一个文件,在经过vfs的接口层之后就要访问具体文件的inode了,再往下就是页高速缓存,页高速缓存描述的对象是页面,但是用户读写的是文件中特定偏移的数据,这就需要页高速缓存实现从页面到文件偏移的映射,linux的页高速缓存恰恰就是这么设计的,内核中通过一个叫做基树的数据结构 address_space来描述页高速缓存,它实现了偏移到页面的映射。在早期的版本中,内核通过一个全局的哈希表来缓存文件页面,那样的话由于全局变量的原因,锁的争用导致了严重的性能问题,于是为了让设计粒度更加细化,采用了基树,linux基树的实现使得页高速缓存只和页面和具体文件inode有 关,而和具体进程没有关系,十分适合共享,而且适合将暂时不用的页面最大化的应用于高速缓存,具体数量只和当前系统负载和页面回收策略相关,如果感兴趣可以仔细读一下相关代码。下面看看windows的实现。
windows的实现和linux的截然不同,windows高速缓存的设计理念在于设计一个单独完整的高速缓存,所以它不能和文件系统相关,因为系统层次越往下分支越多,于是乎,windows的高速缓存只能在文件系统之上实现,这就体现了windows和linux在设计理念上的最大不 同,windows强调模块化(偏微内核),毕竟它是商业产品,linux强调效率,这才是黑客们最关心的...那么是不是就是说linux的高速缓存就 和文件系统相关呢?你完全可以这么说!怎么说呢,因为不管是ext2还是ntfs还是reiserfs,在内核里面都是一个inode,这就是vfs的v 的含义吧,那么怎么区别不同文件系统呢?那完全通过回调函数做到的,想起OO了吗?内核是java写的吗?...
接着说windows高速缓存,windows高速缓存是大小确定的,并且一次只能映射一个文件,印象中是256k,如果高速缓存大于256k,不知道能 否映射多个文件,这些都是IO管理器主管的。当引用一个文件时,高速缓存管理器就会把它映射到仅仅256k的缓存中,如果用玩了,那么就会解除一个文件映 射,从而映射新文件,如果文件已经被映射进高速缓存,并且所需要的数据块不在高速缓存,那么由页面错误来处理一切,结果就是数据块被复制进高速缓存,实际上高速缓存管理器并不知道数据是否在缓存,而由缺页来协助完成数据引进,所以,每次数据都是从高速缓存被复制进用户空间的(1.本来就在缓存;2.由缺页 处理复制进缓存)。这么看来windows的高速缓存和某些cpu的高速缓存实现很像,它作为一个你不得不经过的层次(数据都是有高速缓存得到的),在 io管理器下工作着。
windows的高速缓存看起来更加具有模块化品质,它很平滑得集成进了io管理框架,想去除或修改非常简单,而linux的高速缓存好像是和inode 揉在一起的,但是效率呢?反正我市不希望每次都在文件不在缓存的情况下产生一次缺页中断,linux的设计更好一些,最起码,它可以减少一次次缺页处理。
这是我发现两大系统很不同的一个方面,孰优孰劣,我认为这个问题很愚蠢,只能分类讨论,就像我前面引用的文章,你能说出古罗马和汉朝的战争结果吗?
今天下午看了一下《陆地和海洋》,收获颇深!
分享到:
相关推荐
在Linux环境下,通过编写设备驱动程序,可以实现对FPGA的控制,从而实现数据的高速采集和处理。 此外,文章还讨论了如何处理从FIFO缓冲中读取的大量数据,这通常涉及到高效的内存管理策略和并行处理技术,以确保...
- 在Windows和Linux中,操作系统都有内置的磁盘缓存机制,通过内存来加速文件读写。对于特殊应用,如Oracle的裸设备和MySQL的InnoDB,可能需要自定义缓存策略。 **数据库缓存** - **Query Cache**:MySQL的Query ...
总的来说,Linux内存中的缓存机制对于提高系统性能至关重要。通过合理使用和分析内存缓存,我们可以更好地优化系统资源,确保应用程序的高效运行。同时,掌握相关工具的使用,可以帮助我们及时发现和解决问题,从而...
2.4.2页面高速缓存 2.5 Linux中的分页机制 2.5.1 与页相关的数据结构及宏的定义 2.5.2 对页目录及页表的处理 2.6 Linux中的汇编语言 2.6.1 AT&T与Intel汇编语言的比较 2.6.2 AT&T汇编语言的相关知识 2.6.3 ...
- **数据库缓存**:数据库管理系统内部的缓存机制,如MySQL的Query Cache和Data Buffer。 - **应用程序缓存**:应用级别的缓存,例如使用Ehcache、Guava Cache等第三方库实现的缓存。 - **Web服务器缓存**:如Apache...
- **2.4.2 页面高速缓存** - 提高内存访问效率的方法之一。 **2.5 Linux中的分页机制** - **2.5.1 与页相关的数据结构及宏的定义** - 如page结构体等。 - **2.5.2 对页目录及页表的处理** - 如何管理页表和页...
例如,Windows和Linux都有自己的磁盘缓存机制,当应用程序需要读取文件时,操作系统会尝试从内存中的Disk Cache获取数据,减少对慢速磁盘I/O的操作。对于某些特殊应用,如Oracle的裸设备和MySQL的InnoDB,可能会选择...
在Windows环境下,Redis的使用可能与Linux有所不同,但其核心功能和原理保持一致。标题中的"redis-6.0.6-windows.zip"表明我们正在讨论的是Redis 6.0.6的Windows版本,它是一个压缩包文件,方便用户在Windows操作...
对于.NET开发者来说,尽管.NET框架本身提供了内置的缓存机制,但Memcached因其高效性和广泛支持的语言客户端,成为了一个受欢迎的选择。 分布式缓存是Memcached的核心特性之一。不同于其他分布式系统中的节点间通信...
- **Memory Hierarchy**: 从高速缓存到主存再到磁盘等不同层次的存储器。 **2.5 x86汇编程序基础** - **汇编语言**: 是一种低级语言,与机器指令一一对应。 - **寄存器**: CPU内部的小型存储单元,用于临时存储数据...
例如,Windows、Linux等操作系统必须适配Intel的CPU架构,实现中断处理、内存管理、多任务调度等功能。操作系统与处理器的协同工作是现代计算机系统高效运行的核心。 总的来说,《Intel微处理器结构、编程与接口》...
- 考虑到Windows的内存管理机制,可能会影响Redis的性能,生产环境推荐使用Linux系统。 - 注意Redis的内存占用,避免数据量过大导致系统资源紧张。 综上所述,"redis64 for windows"为Windows用户提供了在本地...
在Lab5的实验中,我们深入探讨了Linux/Unix操作系统与Windows系统之间的差异,特别是在进程管理、内存分配、缓存机制、文件系统以及系统调用等方面。 1. **Linux/Unix中的/proc文件系统与Windows的API** Linux/...
其高速读写能力得益于内存操作,使得Redis在处理大量并发请求时表现出色。然而,纯内存存储会带来数据丢失的风险,因此Redis提供了RDB和AOF两种持久化策略来确保数据安全。 接着,让我们聚焦于这个GUI管理客户端。...
通过这些努力,开发者能够在Windows环境中享受与Linux上相似的Redis体验,包括高速缓存、消息队列和其他数据结构服务。然而,需要注意的是,虽然大部分功能得到了移植,但在某些特定场景下,性能和行为可能仍存在...
2. 安装便捷:与Linux系统中编译安装不同,Windows用户只需下载zip压缩包,解压后即可运行。 3. 运行方式:通过`redis-server.exe`启动服务,提供命令行客户端`redis-cli.exe`进行交互操作。 4. 配置文件:`redis....
与 Windows 的内存管理方式不同,Linux 更倾向于充分利用所有可用的物理内存,而不是仅在需要时分配。这一策略的核心是通过缓存(cache)和缓冲区(buffers)来提高数据访问性能,从而提升系统整体效率。 1. **页...
- **存储器高速缓存**:缓存技术用于加速内存访问,减少主存与CPU之间的通信延迟。 - **中断处理**:分为上半部和下半部,上半部快速响应并保存状态,下半部稍后执行详细处理,允许中断嵌套和优化响应时间。 4. *...