在 32位的 Linux 内核中,每个进程都独有 4GB 的虚拟内存空间,但所有进程却共用相同的物理内存空间。...vm_area_struct 结构 在Linux内核中,虚拟内存是用过结构体 vm_area_struct 来管理的,通过 vm_area_struct 结构体可以把虚拟内存划分为多个用途不相同的内存区
EPOLL_CTL_DEL 的实现调用的是 ep_remove 函数,函数只是清除ADD时, 添加的各种结构,EPOLL_CTL_MOD 的实现调用的是ep...
实际linux内核设计: * 每个wait_queue_t的private字段指向同一个poll_wqueues,然后 * 共用的poll_wqueues中保存了指向调用进程
继前篇介绍完sendto 数据发送函数 后,这里介绍数据接收函数 recvfrom。
本文将结合用户态的接口以及内核态的实现剖析文件IO。...Reference: The Linux Programming Interface: Chapter 4/14/15, Kernel/fs 通用接口 通用IO包含open/read/write/close...fsync(fd)强制其刷新到磁盘上 fdatasync(fd)不刷新metadata的时间戳 sync()刷新所有的缓冲区(Linux要求等待所有操作完成才能返回)。...因为这个原因,写操作并不能实时的进行持久化,需要linux使用journal机制来保证文件系统的崩溃一致性,然而journal机制本身又需要进行flush。...通过间接层处理空洞 - 当我们进行SEEK_END时,END到当前的pos会存在空洞,那么Linux并不会为空洞分配block存储,空洞通过为inode系统中的指针打上标记0表明其并未指向实际磁盘块即可
稀疏语义接口 稀疏文件的应用 Go 语言实现 `cp` 的秘密 spare 三大策略 深入剖析 `cp --sparse` 源码 cp 快速的原因 稀疏文件的应用 一起做个实验 初始条件准备 cp 的实验验证...是的,就是 Linux 是 Linux 下最常用的命令之一,copy 的简写,小伙伴 100% 都用过。...深入剖析 cp --sparse 源码 上面的都是结论,现在我们通过源码再深入理解下 cp 的原理,一起围观下 cp 的代码实现。...找一台 linux 机器,跟着运行下面的命令。 初始条件准备 步骤一:创建一个文件(预期占用 1 个 block)。...punch hole 应用有很多场景,通常是用来快速释放空间,比如镜像文件; ~完~ 后记 本文通过一个日常随处可见、所有人都用过,但是都没有细想过的 cp 命令切入,通过一个常常被我们忽略的现象来剖析其中的原理
哈勃沙箱技术总览 第一节 哈勃linux沙箱 今天说的哈勃沙箱是腾讯哈勃检测系统中,linux恶意文件检测部分的开源代码。...今天是源码剖析的第一篇,目标是简要介绍一下沙箱使用的检测手段和主要技术点。从github中输出的html报表里,监控的信息还是挺丰富的。...从static_analyzer.py来看,哈勃linux沙箱静态检测,获取的信息主要有六个方面: ? 1....文件类型信息 通过file命令获取文件信息,比如是二进制还是其他类型文件,在linux中是无法通过后缀判断它是什么文件的。 ? 2.
Linux 网络设备驱动架构 驱动架构自上而下分为4层: 协议接口层 设备接口层 设备驱动功能层 网络设备与媒介层 协议接口层 协议接口层主要功能是给上层协议提供接收和发送的接口。...传递的数据被描述为套接字缓冲区,用struct sk_buff结构描述,该结构体定义位于include/linux/skbuff.h中,用于在Linux网络子系统中的各层之间传输数据,该结构在整个网络收发过程中贯穿始终
何为Misc设备 Linux驱动分为字符设备驱动、块设备驱动和网络设备驱动,而字符设备又包括很多种,内核使用主设备号来区分各个字符设备驱动,在include/linux/major.h文件中已经预先定义好了各类字符设备的主设备号
我主要关心的是Linux操作系统,它是目前服务器端的主流操作系统。下面的内容针对的是Debian发行版,因为我对其他发行版不够熟悉。...它们在Windows叫做"服务"(service),在Linux就叫做"守护进程"(daemon)。 init进程的一大任务,就是去运行这些开机启动的程序。...Linux允许为不同的场合,分配不同的开机启动程序,这就叫做"运行级别"(runlevel)。也就是说,启动时根据"运行级别",确定要运行哪些程序。 ? Linux预置七种运行级别(0-6)。...Linux的解决办法,就是七个 /etc/rcN.d 目录里列出的程序,都设为链接文件,指向另外一个目录 /etc/init.d ,真正的启动脚本都统一放在这个目录中。...顺便提一下,除了Linux以外, Mac OS X 使用的shell也是Bash。但是,它只加载.bash_profile,然后在.bash_profile里面调用.bashrc。
三个重要结构体 都定义在include/linux/input.h中。...根据Linux设备模型的原理,直接进入到usb_mouse_probe函数进行分析。
附: 本文默认读者熟悉Linux设备驱动模型,不熟悉的可以先阅读这两篇blog。...Linux驱动之I2C子系统剖析 Linux驱动之SPI子系统剖析 PCI寻址 PCI系统总体布局组织为树状,从CPU连接的Host Bridge引出PCI主桥,主桥连接的是PCI总线0,可以直接连接PCI...Linux内核启动时会从PCI设备的配置寄存器里读取内存/IO起始地址以及irq,并把这些信息赋值给struct pci_dev的相应成员来生成软件描述的PCI设备。...当linux系统启动时,会探测系统中的所有PCI设备,并为探测到的每个PCI设备做如下操作: 1.分配一个struct pci_dev结构体,用来表示相应的PCI设备 2.为这个结构体填充设备vendor
epoll 的实现比poll/select 复杂一些,这是因为: 1. epoll_wait, epoll_ctl 的调用完全独立开来,内核需要锁机制对这些操作...
系统级性能优化通常包括两个阶段:性能剖析(performance profiling)和代码优化。性能剖析的目标是寻找性能瓶颈,查找引发性能问题的原因及热点代码。...perf是一款Linux性能分析工具。...Linux性能计数器是一个新的基于内核的子系统,它提供一个性能分析框架,比如硬件(CPU、PMU(Performance Monitoring Unit))功能和软件(软件计数器、tracepoint)...20 timechart 针对测试期间系统行为进行可视化的工具 21 top 类似于linux的top命令,对系统性能进行实时分析。 22 trace 关于syscall的工具。...可视化工具perf timechart perf timechart record记录事件; perf timechart生成output.svg文档; 火焰图 火焰图(Flame Graph)是由Linux
/spi.c SPI总线驱动层(主机控制器驱动层):drivers/spi/spi_s3c24xx. c SPI设备驱动层:drivers/spi/spidev.c (内核提供的SPI通用设备驱动) Linux...具体的分离策略详细分析可参考Linux驱动之I2C子系统剖析中内核对I2C子系统框架的阐述。笔者在这与I2C子系统类比,列出数据结构名。...i2c_msg struct spi_transfer 多个完整数据包的封装 无 struct spi_message 源码分析 由于子系统架构与I2C等总线类似,所以不会在一些重复部分展开,具体分析可以参考的Linux...驱动之I2C子系统剖析中的分析方法。
在揭秘这 3 个命令之前,我们必须先复习文件的基础知识点,Linux 的文件和目录的关系。 ? Linux 的文件和目录 ?...在 深度剖析 Linux cp 的秘密 一文中,我们详细剖析了文件系统的形态。...问题来了:Linux 的目录是一个倒挂的树形结构呀,为什么上面说 inode 是平坦的结构?如下: ? Linux 的文件确实是树形结构,inode 也确实是平坦的结构。...读取源文件,写入目标位置,生成一个全新的目标文件副本; 这里调用的 copy_reg 的函数封装(要知道这个函数是 cp 命令的核心函数,在 深度剖析 Linux cp 的秘密 有深入剖析过 ); ln...cp 命令也是我之前花了万字篇幅分析的命令,详细可见:深度剖析 Linux cp 的秘密。这里就不再赘述,下面提炼出关于拷贝的 3 种模式。
1、前面说的 我在好几年前读linux 驱动代码的时候看到这个宏,百度了好久,知道怎么用了,但是对实现过程和原理还是一知半解。...container_of宏 在linux内核代码里面使用次数非常非常多,对于喜欢linux编程的同学来说,了解其实现方法,对以后看内核代码,写内核驱动的帮助都非常大,当然,我不是说了解这个就可以为所欲为了...,内核博大精深,先宏观再微观去学习,不积跬步何以致千里,不要想着一口就能吃成一个胖子,我这篇文章主要剖析一下这个函数的实现原理,希望对大家学习过程中有所帮助。...4、container_of 用到的知识点 剖析 4.1、({})的作用 ({})、第一个先说这个表达式,很多人可能懂,可能在很多地方见到这个表达式,但是自己却没有注意,这个表达式返回最后一个表达式的值...const __mptr;//表示__mptr的值不能改变 //和 const int * const __mptr; //表示__mptr不能改变而且指向的内容也不能改变 5、 container_of 剖析
sort -k4nr | head -n 10 //查看前10个最占用内存的进程 但是通过以上的方法获取到服务器占用资源的进程之后,还是不知道CPU使用究竟耗时在哪里,不清楚瓶颈在哪里,此时就可以通过Linux...在制作火焰图之前,需要先来说说这个Linux性能分析工具perf,该工具是一个相对简单易上手的性能分析工具,是Performance单词的缩写,通过其perf的命令选项完成系统事件的采集到解析,我们来简单的认识一下...: linux上的性能分析工具Perf 安装perf 我目前的服务器发行版是Ubuntu 16.04.6 LTS因此需要先安装perf才能使用,该工具由linux-tools-common提供,但是它需要安装后面的依赖...#安装 root@master:~# apt install linux-tools-common linux-tools-4.4.0-142-generic linux-cloud-tools-4.4.0
领取专属 10元无门槛券
手把手带您无忧上云