现代操作系统都在各个级别应用了高速缓存的策略,从而可以平滑化物理硬件的访问差异。一般的高速缓存分为两级,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 的设计更好一些,最起码,它可以减少一次次缺页处理。
这是我发现两大系统很不同的一个方面,孰优孰劣,我认为这个问题很愚蠢,只能分类讨论,就像我前面引用的文章,你能说出古罗马和汉朝的战争结果吗?
今天下午看了一下《陆地和海洋》,收获颇深!
相关推荐
Smartdrv磁盘高速缓存
Smartdrv.exe这个文件主要作用是为磁盘文件读写增加高速缓存。内存的读写速度比磁盘高得多,如果将内存作为磁盘读写的高速缓存可以有效提高系统运行效率。Smartdrv.exe这个文件在Windows各个版本的安装光盘中或是硬盘上的Windows/command/里都有,只有几十KB,把这个文件复制到软盘下,启动系统后DOS下直接运行这个程序(可以不加参数,该程序会自动根据内存大小分配适当的内存空间作为高速缓存),再安装Windows XP即可。另外提醒大家,这个程序在安装完Windows后,不要运行,否则Windows可用内存将减少
Linux DNS 服务器与windows 系统交互 缓存问题解析/清除浏览器数据无法解决缓存问题
因为自己在实验过程中总是发现DNS缓存的导致的诸多问题,因此对清除浏览器数据就能清除缓存问题的存在疑惑并加以实验验证(浏览器数据一般就是cook)两台dns配置为双向地址解析所以可以当作是备份dns(任何一台服务器停止运行,另一台依然能够提供地址解析服务)现在有两台Linuxdns服务器已经配置完成PC浏览器可以通过域名或者IP访问网页。通过清除浏览器数据从而清除DNS缓存从而刷新网页,不可靠当然得具体问题具体分析。DNS缓存会导致网站不能及时更新,查看到的依然是旧的内容。......
STM32 USB AUDIO实战指南——从零构建音频设备
本文详细介绍了如何使用STM32F407构建USB音频设备,从硬件准备到软件配置,再到音频播放和录制功能的实现。通过STM32CubeMX配置和实战代码示例,帮助开发者快速掌握USB Audio Class规范,实现低延迟、高质量的音频传输,适用于语音交互、音乐播放等多种场景。
Linux固态硬盘 设置写入缓存,Win10下的写入缓存策略严重影响SSD硬盘的性能!
SSD在Windows的设备管理器上有个策略选择,不同的设置会产生不同的效果。很多人可能并没有关注过这部分的差别,今天就有人问小编怎么优化SSD,于是小编就想到这个事情了。今天咱们正好就说说这个设置带来的性能差异。在设备管理器中(Win+X组合键后选择设备管理器)找到磁盘驱动器,双击在下拉菜单中自己的SSD,切换选项卡到“策略”上就能看到小编所说的这个“写入缓存策略”了。打开和关闭的这个选项意义在...
Smali语言基础语法
定义、声明、调用 Smali数据类型 定义:与Java相同,Smali中也有一套数据类型体系,且该体系实质上是同Java一一对照的。 示例1:Smali——Java数据类型对照表 PS:如上图所示,Smali语言中的数据类型的关键词基本上为Java中同名数据类型的首字母大写,需要着重记忆的例外为:1.long类型的关键词为大写J;2.boolean类型的关键词为大写Z;3.数组的关键词为左半边中括号[;4.object类型(各种类)的关键词为大写L加上该类的全类名路径,路径中的层级用/分割。
激光条纹中心提取——Steger
激光条纹中心提取-Steger 好久没有记录了,记录一下今天学习的内容,据说Steger在激光条纹中心提取上神一般的存在。文章和代码都分享给大家了哈,其中有四个文件,3个C++,一个python,python一个抠图文件,3个c++包含背景图+原图, 单张图提取, 多张图提取。 分享代码 #include <opencv2\core.hpp> #include <opencv2\highgui.hpp> #include <opencv2\imgproc.hpp> #i
Linux与Windows高速缓存处理机制
现代操作系统都在各个级别应用了高速缓存的策略,从而可以平滑化物理硬件的访问差异。一般的高速缓存分为两级,cpu和内存之间一般会设置高速缓存,但是 这一般是硬件实现的,还有一个高速缓存存在于内存和磁盘之间,这个一般由操作系统实现,当然为了给应用程序提供灵活的策略自定义机制,在某些情况下也可以由应用程序实现高速缓存,比如Oracal,当然,这必须要求操作系统有直接IO的机制。先说Linux吧。 在
esp32-C3固件烧录用户手册
温馨提示:1.esp32-C3 BOOT脚为GPIO9,需要从芯片小板中焊接引出2.芯片小板中已经预留了所有烧录相关的引脚,大家可以按需焊接引线3.程序下载完,使用串口查看log时,需要使用220v供电使用(请务必准守用电安全)。原因:由于插座中包含继电器,计量计等耗电设备,所以usb转串口提供的3.3V电压和电流可能会出现供电不足,表现为usb转串口与电脑连接断断续续,导致无法查看log。
page cache
上次我们考察了内核如何为一个用户进程管理虚拟内存,但是没有涉及文件及I/O。这次我们的讨论将涵盖非常重要且常被误解的文件与内存间关系的问题,以及它对系统性能的影响。提到文件,操作系统必须解决两个重要的问题。首先是硬盘驱动器的存取速度缓慢得令人头疼(相对于内存而言),尤其是磁盘的寻道性能。第二个是要满足’一次性加载文件内容到物理内存并在程序间共享’的需求。如果你使用进程浏览器翻看Windows进程,就
Spark Catalog详解
旁边的实习生说:我想要用spark代码中对hive库中的内部表和外部表进行删除(包括数据),咋感觉网上搜了一圈都找不到解决方案啊,spark这么鸡肋吗?我:你应该静下心来好好把spark基础知识进行全面学习。实习生:难道spark有这功能,而我没有学习过?咋弄啊?我:学习一下Spark Catalog。实习生:啥是Catalog啊?Spark Catalog是Spark SQL中的一个元数据管理组件,它提供了一个集中化的存储和查询表、视图和函数的位置。
2023华为od机试C卷【宽度最小的子矩阵】Python 实现
给定一个矩阵,包含N*M个整数,和一个包含K个整数的数组现在要求在这个矩阵中找一个宽度最小的子矩阵,要求子矩阵包含数组中所有的整数。
PPO工程化实践:六颗必须拧紧的策略优化螺丝
近端策略优化(PPO)是强化学习中面向稳定训练的主流策略梯度方法,其核心在于通过约束更新步长、校准优势估计、协同Actor-Critic结构来平衡偏差与方差。技术原理上,PPO依托GAE优势估计、clip机制与KL控制实现策略的可复现迭代;工程价值体现在对连续动作空间、高维状态反馈及工业实时性等复杂场景的适配能力;典型应用场景涵盖机器人控制、金融交易仿真与游戏AI;而实际落地常因reward scaling失当、log_prob数值溢出、Critic bias污染或clip阈值僵化导致训练崩溃。本文聚焦PP
SwinTransformer 改进:SSPCAB模块(2024最新改进方法)
SSPCAB(Spatial Pyramid Pooling with Channel Attention Block)是2024年提出的一种新型神经网络架构改进方法,专注于在保持高精度的同时显著降低计算复杂度和参数量。该方法通过创新的空间金字塔池化与通道注意力机制的结合,实现了网络结构的紧凑化和运算效率的大幅提升。核心创新点1. 混合空间金字塔池化(Hybrid Spatial Pyramid Pooling, HSPP)多尺度动态核池化:根据输入特征图尺寸动态调整池化核大小和步长交叉级联结构。
Redis(入门)
Redis入门 概述 Redis是什么? Redis(Remote Dictionary Server ),即远程字典服务! 是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。 Redis能干嘛? 1、内存存储、持久化,内存是断电即失,所以说持久化很重要(RDB、AOF) 2、熊率高,可用于高速缓存 3、发布订阅系统 4、地图信息分析 5、计时器、计数器(浏览量!) … 特性 1、多样的数据类型 2、持久化 3、集群
python爬虫项目(一百九十八):电商平台用户行为数据分析与推荐系统、爬取电商平台用户行为数据
本文详细介绍了如何通过爬虫技术抓取电商平台的用户行为数据,并结合数据分析技术,构建一个简单的推荐系统。使用Selenium模拟用户操作抓取动态网页数据,并通过API接口直接获取用户行为数据,能够为后续的用户行为分析提供基础数据。我们结合了基于用户协同过滤、基于商品协同过滤和矩阵分解等方法,构建了不同的推荐系统。实际应用中,可以进一步优化推荐算法,利用更复杂的深度学习技术和更高效的数据处理方法,提升推荐的准确性和个性化程度。
怀旧版电脑GBC模拟器
再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。
LINUX的内存机制
在Linux中经常发现空闲内存很少,似乎所有的内存都被系统占用了,表面感觉是内存不够用了,其实不然。这是Linux内存管理的一个优秀特性,在这方 面,区别于 Windows的内存管理。主要特点是,无论物理内存有多大,Linux 都将其充份利用,将一些程序调用过的硬盘数据读入内存,利用内存读写的高速特性来提高Linux系统的数据访问性能。而Windows 是只在需要内存时,才为应用程序分配内存,并不能充分利用大容量的内存空间。换句话说,每增加一些物理内存,Linux 都将能充分利用起来,发挥了硬件投资带来的好
霍尼韦尔SoftMaster使用说明
霍尼韦尔SoftMaster使用说明
Windows内核-10-10-12页表机制
以下参考资料:水滴教程,针对的是80386系统。 CR3寄存器 每一个进程对应一个CR3寄存器,CR3寄存器中存放的是PDT(页目录表)的地址。 PDT\PDE PDT页目录表,一共占4KB,每一个页目录表项PDE占4B,即一共1024个PDE项,指向一个PTT页表。(其实实际实现时,PDT是一个特殊的PTT表,即上图转变成如下的图。) PTT\PTE PTT页表,每一个PDE指向一个PTT页...
VC中sqlite的使用
在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示
jre9下载 jdk9
(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】
极具职场竞争力的操作系统背景知识学习笔记(Windows+Linux)
《Windows篇》对于每天都要在windows平台上进行逆向工程任务的我们而言,稍微了解一些系统底层的机制与实现原理,用这些背景知识来武装自己总是好的。调试器,反汇编器,加包,解包器,虚拟机,等等,无一不是运行在windows系统上,甚至对内核调试器如SoftICE,WinDbg等工具的使用,也要求了解一些系统的内幕。最近抽空在阅读《深入解析windows操作系统第6版上册...
linux复习 --个人快速复习&乱写
1.系统概述 1.1.1计算机组成-硬件 计算机体系结构沿用Von Neumann(冯 诺依曼)体系结构 现代计算机硬件系统由于 cpu 内存,若干i/o设备组成,从功能上由五大功能部件组成:运算器,控制器,存储器,输入设备,输出设备 1.CPU: 从内存(或高速缓存)中取出指令并执行,基本工作过程:提取指令,译码分析,执行指令. 2.存储器: 高速缓存,内存,磁盘,光盘等. CPU可以直接存取高速缓存和内存中的程序或数据. 现在磁盘一般专指硬磁盘,存取速度低于内存,价格便宜. 3.I/O设备: 控制器是
linux7空闲内存,centos7 内存占用率高处理问题
一、内存占用高是正常现象吗?在Linux中经常发现空闲内存很少,似乎所有的内存都被系统占用了,表面感觉是内存不够用了,其实不然。这是Linux内存管理的一个优秀特性,在这方面,区别于 Windows的内存管理。主要特点是,无论物理内存有多大,Linux都将其充份利用,将一些程序调用过的硬盘数据读入内存,利用内存读写的高速特性来提高Linux系统的数据访问性能。而Windows是只在需要内存时,才为...
linux windows 结构体,Windows内存管理与结构体MEMORY_BASIC_INFORMATION
注:基于32位Windows1. 进程地址空间软件的进程运行于32位系统上,其寻址位也是32位,能表示的空间是2的32 =4G,范围从0x0000 0000~0xFFFF FFFF。· NULL指针分区范围:0x0000 0000~0x0000 FFFF作用:保护内存非法访问例子:分配内存时,如果由于某种原因分配不成功,则返回空指针0x0000 0000;当用户继续使用比如改写数据时...
【Linux线程】线程的深度解析(线程是什么?线程与进程区别是什么?)
将一份【代码成功编译】后,可以得到一个【可执行程序】,程序运行后,相关代码和数据被 【load】 到内存中,并且操作系统会生成对应数据结构(比如 PCB)对其进行管理及分配资源,准备工作做完之后,我们就可以得到一个运行中的程序,简称为 进程,对于操作系统来说,只有 进程 的概念是无法满足高效运行的需求的,因此需要一种执行粒度更细、调度成本更低的执行流,而这就是 线程
Linux进程通信机制原理详解及实现步骤
管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。 一个进程写入管道的所有数据都由内核定向到另外一个进程,另外一个进程由此就可以从管道中读取数据。 创建一个管道的步骤: 1.调用get_pipe_inode()函数,在pipefs文件系统中为管道分配一个新的索引节点对象,并对其进行初始化。 2.为管道
linux查看发送文件次数,Linux和Unix查看文件个数和目录个数
51CTO博客开发OpenBSD忘记密码后进行恢复步骤如下:1、开机进入单人模式,在开启启动后出现boot〉提示符好,并开始倒数5秒时,键入以下命令:boot -s2、等待进入以下提示符Enter path name of shell or return for sh:后按下Enter键3、键入一下命令#fsck -p /一、NIM配置1.安装NIMServer前准备1.1.配置IP地址#ifco...
839



被折叠的 条评论
为什么被折叠?



