操作系统
文章平均质量分 85
一只牛_007
这个作者很懒,什么都没留下…
展开
-
互斥锁与自旋锁(用户态)的性能比较
故系统可能会在临界区调度到其他线程,最坏的情况是其他线程不停的尝试获取这个锁,但因为获取到这个锁的线程还在等待下一次调度,导致白白浪费宝贵的CPU时间,故我们可以在lock()函数中插入一条。但如果临界区内的任务非常轻量,甚至轻量到比加锁解锁的开销还小的情况下,再去维护这个队列的话,从开销上来看就不那么划算,反而直接使用自旋锁这种简单的机制能获得更高的效率。我把yield去掉以后确实自旋锁慢了好几倍,但是我不理解的是,我只开了三个线程,我是8核心16线程的电脑,按理说这三个线程都不应该被切掉啊。原创 2024-01-26 20:52:44 · 1132 阅读 · 0 评论 -
linux核隔离实操
linux系统CPU隔离isolcpu参数设置_放学有种别跑、的博客-CSDN博客_linux cpu隔离【Linux】隔核绑核_熠熠微光的博客-CSDN博客_linux绑核命令原创 2023-02-09 12:28:36 · 805 阅读 · 0 评论 -
续说零拷贝(Zero-Copy) - DMA技术
如果想理解Kafaka为什么这么快,得先看DMA是什么.DMA: 无论 I/O 速度如何提升,比起 CPU,总还是太慢。SSD 硬盘的 IOPS 可以到 2 万、4 万,但是我们 CPU 的主频有 2GHz 以上,也就意味着每秒会有 20 亿次的操作.如果我们对于 I/O 的操作,都是由 CPU 发出对应的指令,然后等待 I/O 设备完成操作之后返回,那 CPU 有大量的时间其实都是在等待 I/O 设备完成操作。但是,这个 CPU 的等待,在很多时候,其实并没有太多的实际意义。我们...原创 2021-02-14 16:56:26 · 578 阅读 · 0 评论 -
从内核文件系统看文件读写过程
阅读目录系统调用 虚拟文件系统 I/O 缓冲区 Page Cache Address Space 文件读写基本流程系统调用操作系统的主要功能是为管理硬件资源和为应用程序开发人员提供良好的环境,但是计算机系统的各种硬件资源是有限的,因此为了保证每一个进程都能安全的执行。处理器设有两种模式:“用户模式”与“内核模式”。一些容易发生安全问题的操作都被限制在只有内核模式下才可以执行,例如I/O操作,修改基址寄存器内容等。而连接用户模式和内核模式的接口称之为系统调用。应用程序代码运行在用户模式原创 2021-02-20 21:30:51 · 237 阅读 · 1 评论 -
linux文件系统体系结构 和 虚拟文件系统(VFS)
图 1. Linux 文件系统组件的体系结构用户空间包含一些应用程序(例如,文件系统的使用者)和 GNU C 库(glibc),它们为文件系统调用(打开、读取、写和关闭)提供用户接口。系统调用接口的作用就像是交换器,它将系统调用从用户空间发送到内核空间中的适当端点。VFS 是底层文件系统的主要接口。这个组件导出一组接口,然后将它们抽象到各个文件系统,各个文件系统的行为可能差异很大。有两个针对文件系统对象的缓存(inode 和 dentry)。它们缓存最近使用过的文件系统对象。每个文件系统实现(.原创 2021-02-17 19:14:43 · 352 阅读 · 0 评论 -
Linux内核如何管理内存
在学习了进程的虚拟地址布局之后,让我们回到内核,来学习它管理用户内存的机制。这里再次使用 Gonzo:Linux kernel mm_structLinux 进程在内核中是作为进程描述符task_struct(LCTT 译注:它是在 Linux 中描述进程完整信息的一种数据结构)的实例来实现的。在 task_struct 中的mm域指向到内存描述符,mm_struct是一个程序在内存中的执行摘要。如上图所示,它保存了起始和结束内存段,进程使用的物理内存页面的数量(RSS 常...原创 2021-02-21 21:51:58 · 254 阅读 · 0 评论 -
虚拟地址布局
内存管理是操作系统的核心任务;它对程序员和系统管理员来说也是至关重要的。在接下来的几篇文章中,我将从实践出发着眼于内存管理,并深入到它的内部结构。虽然这些概念很通用,但示例大都来自于 32 位 x86 架构的 Linux 和 Windows 上。这第一篇文章描述了在内存中程序如何分布。在一个多任务操作系统中的每个进程都运行在它自己的内存“沙箱”中。这个沙箱是一个虚拟地址空间virtual address space,在 32 位的模式中它总共有 4GB 的内存地址块。这些虚拟地址是通过内核页表page原创 2021-02-21 19:07:11 · 243 阅读 · 0 评论 -
mmap 源码分析
mmap 源码分析准备 函数原型 虚拟内存区域管理 The Memory Descriptor(内存描述符) Virtual Memory Area(虚拟内存区域描述符) mmap映射执行流程 源码分析 do_mmap() mmap_region() 匿名映射 总结 Q&A准备内核版本: 4.20.1上一篇Linux环境写文件如何稳定跑满磁盘I-O带宽我们使用了mmap来帮助我们写文件稳定的跑满了磁盘I/O,这篇我们来详细介绍原创 2021-02-21 15:23:23 · 698 阅读 · 0 评论 -
malloc 背后的虚拟内存 和 malloc实现原理
面试的时候经常会被问到 malloc 的实现。从操作系统层面来说,malloc 确实是考察面试者对操作系统底层的存储管理理解的一个很好的方式,涉及到虚拟内存、分页/分段等。下面逐个细说。1. 虚拟内存首先需要知道的是程序运行起来的话需要被加载的物理内存中,具体到计算机硬件就是内存条。操作系统启动的时候先把自己加载到物理内存的固定位置(一般为底部),物理内存的其他位置就用来运行用户程序。程序就是一堆指令,程序运行可以简单抽象为把指令加载到内存中,然后 CPU 将指令从内存载入执行。1. 为什么需要原创 2021-02-20 21:39:15 · 1583 阅读 · 0 评论 -
内存映射mmap基本原理
内存映射是linux中的一个重要机制,它和虚拟内存管理和文件IO都有直接的关系,本篇将详细介绍linux中内存映射的原理。mmap基本概念 在介绍内存映射之前,首先知道现代计算机系统普遍采用虚拟内存的方式管理物理内存。在32位机器上每个进程都有自己的4G虚拟内存空间,其中0-3G属于用户空间,是该进程独有的;3-4G之间的是内核空间,是计算机中的所有进程的内核空间和内核进程所共享的地址空间。必须明确的一点是:用户空间和内核空间属于虚拟地址空间,是虚拟内存中的概念。进程地址空间的划分如图...原创 2021-02-17 19:11:16 · 803 阅读 · 0 评论