计算机底层原理
文章平均质量分 93
操作系统、Linux系统槟城
非科班大厂码农(同名公众号)
这个作者很懒,什么都没留下…
展开
-
性能优化理论篇 | 如何保证数据安全落盘,5分钟彻底弄懂 一次write中的各种缓冲区 !
由于传输的数据量已经确定,并且考虑到网络通信的特点(数据可能是突发的),我们决定使用libc库的流函数(fwrite() 和 fflush(),对应上图中的“Library Buffers”)进一步缓冲数据。然后,在@6处,程序调用fsync()函数,将内核缓冲区中的数据强制刷新到物理存储设备(如磁盘)上,直到现在,数据才被保存到上图所示的“稳定存储”层。@1处是应用程序缓冲区的示例,这是我们自己在代码中显示创建的,对应上图中的Application Buffers,从套接字读取的数据放入此缓冲区。原创 2024-08-18 14:25:30 · 905 阅读 · 0 评论 -
性能优化理论篇 | Cache VS Buffer,傻傻分不清 ?
再切换到运行“ vmstat 2”命令的窗口,观察“ buff”列和“ cache”列的变化,您会注意到,在使用 dd 命令读取磁盘时,缓冲区buffer和缓存cache的大小都会增加,但缓冲区buffer的增长速度明显更快。现在,立即切换回之前运行“ vmstat 2”命令的终端窗口,观察“ buff”列和“ cache”列的变化,“ cache”列的值一直在增加,而“ buff”列的值基本不变。上图中,大家只需要关注“ buff”这个表示缓冲区的列,以及“ cache”这个表示缓存的列,单位都是KB。原创 2024-08-18 14:22:04 · 1248 阅读 · 0 评论 -
性能优化理论篇 | swap area是个什么东西
为了理解启用交换空间对 Linux 性能的影响,我们首先需要了解交换空间的概念。从物理层面(存储层面)看,交换空间只是辅助存储器(Secondary Memory)如硬盘上的一个特殊区域,用于在 RAM 不足时临时存储数据。当系统内存(RAM)不足时,操作系统会将一些不常使用的数据从 RAM 中移出,暂时存放在这个交换空间中,以腾出 RAM 空间给需要的程序。从虚拟内存的概念来看,交换空间是虚拟内存的一部分。虚拟内存是操作系统通过将物理内存(RAM)和硬盘上的交换空间结合起来使用的一种机制。原创 2024-08-17 10:57:54 · 1181 阅读 · 0 评论 -
性能优化理论篇 | 彻底弄懂系统平均负载
这是最常见的一个误解(由于对进程状态缺乏了解而导致的),正如我们上面多次强调的那样,平均负载包括处于 R 状态(正在运行和准备运行)和 D 状态(不可中断睡眠状态)的进程。而对于下图,系统中的“平均负载”一直在减少,该系统15 分钟的“平均负载”为“5.05”。5 分钟的“平均负载”为“3.53”,而最近 1 分钟的“平均负载”为“0。下图中系统中的“平均负载”一直在增加,该系统15 分钟的“平均负载”为“3.25”。5 分钟的“平均负载”为“5.48”,而最近 1 分钟的“平均负载”为“6.00”。原创 2024-08-17 10:55:31 · 937 阅读 · 0 评论 -
为什么你删了链接文件,原文件也被删除了?
Inode 本质上是用于描述文件的数据结构,innode主要存储了如文件权限、文件类型、文件大小等文件元数据信息,但最重要的是存储了该文件的真实数据存放在磁盘上的哪些块中。需要注意的是文件名不是 inode 的一部分。原创 2024-07-09 15:47:57 · 805 阅读 · 0 评论 -
世界上有两种人:懂二进制的和不懂二进制的
如果您从事计算机方面的工作,或者是使用过计算机,你很有可能听过这样一种理念:计算机只是“一堆1和0”,这也是我在进入软件行业之前对计算机了解的少数事情之一。刚开始,我并不完全理解这句话,直到我学会了编程后,我才真正理解这意味着什么。是的,计算机依靠 1 和 0 运行。它肯定比这复杂一些,但也没有复杂到我们无法理解!事实上,计算机是一种称为二进制的数字系统,二进制数字系统基于一个简单的想法,即您可以只用两个数字来计数,而不是像我们在幼儿园学到的那样用 10 个数字来计数。原创 2024-07-09 15:40:05 · 1138 阅读 · 0 评论 -
深入理解DMA:高效数据传输与系统性能优化
DMA,即直接内存访问是计算机系统中用于高效地进行数据传输的一种技术和机制,主要用于解决外围设备和内存之间数据传输效率低下的问题。传统上,CPU 负责管理这些传输,从而形成瓶颈,影响整个系统的性能。而DMA允许外部设备(如硬盘控制器、网络接口卡、音频设备等)直接访问主内存,而不需要 CPU 的直接干预和参与。减轻 CPU 在数据传输过程中的负担,提高系统的性能和效率。原创 2024-07-08 19:33:03 · 784 阅读 · 0 评论 -
万字图文揭秘零拷贝 !
首先,当应用程序调用 read() 命令时,会发生从用户态到内核态的模式切换。使用 sendfile(),需要进行3次数据复制(1次CPU复制,2次DMA复制),以及2次用户态与内核态的切换,相比最初的read() 和 write(),节省了1次CPU数据复制,2次用户态与内核态的切换。最后从内核态切换到用户态。mmap 函数的返回值是一个 void * 类型的指针,指向被映射到文件的内存映射区域的起始地址,有了这个指针,后续就可以通过它来访问映射区域中的数据,也就是对应映射文件的内容。原创 2024-07-08 19:31:33 · 951 阅读 · 0 评论 -
C 语言中通过文件描述符处理文件
在 Unix 类型系统中,文件描述符(fd)是一个小的正整数,用于引用进程中打开的文件。在类Unix 系统中,从操作系统的角度来看,文件不仅仅是我们作为用户所认为的文本文件,文件还可以是目录,甚至是其他类型的输入/输出资源,例如键盘、屏幕、管道或网络套接字。记住,类Unix 系统中,一切皆文件!默认情况下,每个进程有三个打开的文件描述符:为什么要使用文件描述符作为标识符?这是因你我对于计算机来说,处理整数比处理文件的长路径字符串要简单得多。原创 2024-07-08 16:24:48 · 990 阅读 · 0 评论