当前位置: 首页 > news >正文

第10章 无持久存储的文件系统 (1)

目录

前言

10.1 proc文件系统

10.1.1 /proc 内容


本专栏文章将有70篇左右,欢迎+关注,查看后续文章。

前言

即存在于内存中的文件系统。如:

        proc:

        sysfs:

                即/sys目录。

                内容不一定是ASCII文本,可能是二进制。

                收集内核对象kobject的拓扑信息。

        debugfs:

                作用:快速向应用层导出,或从应用层导入值

                原理:使用了 libfs+顺序文件。

10.1 proc文件系统

procfs,即 process data filesystem。

proc 文件系统作用:

        1. cat 文件时,动态生成相关信息。

        2. echo " " > 文件,修改系统配置。

10.1.1 /proc 内容

proc 信息分为几类:

        1. 内存管理

        2. 进程信息

        3. 文件系统

        4. 设备驱动

        5. 系统总线

        6. 电源管理

        7. 系统控制参数

1. 特定于进程的数据

cat /proc/3883/         数字为进程 PID

        cmdline:开启该进程的命令,如 ./a.out 1 2

        environ:该进程设置的环境变量。

        maps:进程本身,及其使用的库的内存映射(可用于定位进程crash)

        status

        fd: 进程打开的文件描述符,都是链接文件。

                如:

                        /proc/2820/fd/1 -> /dev/null

                        /proc/2820/fd/4 -> socket:[10030]

        cwd:进程当前的工作目录。

        exe:链接指向进程的二进制程序。

                如:

                        /proc/2820/exe -> /bin/cbsd

举例:

cat   /proc/906/status

        Name:      systemd         对应可执行文件名字。

        Umask:     0022             该进程创建文件的默认权限掩码。

        State:       S (sleeping)

        Tgid:         906                线程组ID。

        Ngid:        0                     下一个可用的线程组ID。

        Pid:          906                 进程ID。

        PPid:         1                    父进程ID。

        TracerPid: 0                    跟踪该进程的调试器进程ID。

        Uid:         0 0 0 0

                实际用户ID、有效用户ID、保存的设置用户ID、文件系统用户ID。

        Gid:         0 0 0 0

                进程的实际组ID、有效组ID、保存的设置组ID、文件系统组ID。

        FDSize:     1024                进程的文件描述符限制大小。

        Groups:

        NStgid:          906         NS=namespace

        NSpid:          906

        NSpgid:         906

        NSsid:           906

        VmPeak:       1311540 kB

                进程使用的虚拟内存峰值。

        VmSize:         1071592 kB

                进程使用的虚拟内存当前值。

                不等于实际使用物理内存(如部分数据可存储在交换区)。

        VmLck:         0 kB

                锁定的内存区域大小。

                即不被swap到磁盘,也无法回收。

        VmHWM:         244276 kB         进程使用的物理内存峰值。

        VmRSS:         239916 kB          进程当前使用物理内存值。

        RssAnon:         36428 kB          进程的匿名内存的大小(如堆、栈、共享内存)

        RssFile:          10140 kB           进程文件缓存页大小。

        RssShmem:     0 kB                  进程使用的共享内存的总大小。

        VmData:         628048 kB         数据段大小。

        VmStk:          136 kB                 栈大小。

        VmExe:         32 kB                   代码段大小。

        VmLib:          57908 kB              库大小。

        VmPTE:        2388 kB               页表的大小。

        VmSwap:       0 kB                     使用swap的大小。

        Threads:         1

        SigQ:           0/13035                         当前未处理信号数量 / 进程可接收信号最大数量。

        SigPnd:       0000000000000000         等待处理的信号位掩码。

        ShdPnd:      0000000000000000         共享的挂起信号掩码。

        SigBlk:         0000000000000000         进程阻塞信号掩码。

        SigIgn:         0000000000001000         进程忽略的信号掩码。

        SigCgt:         0000000000002000         进程可接收并可处理的信号。

        CapInh:         00000000a80425fb         从父进程继承的能力。

        CapPrm:        00000000a80425fb         进程当前的能力集合。

        CapEff:          00000000a80425fb         当前实际拥有的能力集合

        CapBnd:         00000000a80425fb         进程不能超出的能力集合。

        CapAmb:                      0000000000000000         可接受的能力集合。

        NoNewPrivs:                0

                是否设置Privileges位,即不可增加特权。若设置,execve程序不能有更高权限。

        Seccomp:                     0                         安全计算模式,限定进程可使用的系统调用

        Cpus_allowed:              f                          允许允许的CPU掩码。

        Cpus_allowed_list:        0-3

        Mems_allowed:         00000000,00000001         允许使用的内存节点的掩码。

        Mems_allowed_list:                         0

        voluntary_ctxt_switches:               397

                主动放弃CPU的次数,如进程阻塞I/O。

        nonvoluntary_ctxt_switches:         253

                被迫放弃CPU的次数,如时间片用完。

mlock系统调用:

        作用:将进程指定的虚拟内存区域锁定在物理内存中,防止被交换出去。

RSS:常驻集大小(Resident Set Size)

        当前驻留在物理内存中的大小。不包括被换出到交换空间(Swap)的部分。

当一个信号被设置为阻塞后,当进程收到该信号时不会立即处理,而是挂起信号,直到解除信号阻塞状态后才能处理。

如何阻塞SIGINT信号?

        sigaddset(&block_set, SIGINT);

        sigprocmask(SIG_BLOCK, &block_set, NULL);

信号在内核中状态:

        1. 递达:Delivery。收到信号,并执行信号处理函数。

        2. 未决 / 挂起:Pending。进程正处理一个信号时,收到的其余信号被挂起。

        3. 阻塞:Block。进程解除信号阻塞,立即执行信号处理函数。即延时接收。

运用场景:

        挂起信号:优先处理某些紧急信号,推迟处理其他信号。

        阻塞信号:临时忽略某信号。例如在某些关键性操作期间,可防止信号干扰进程。

进程常见能力包括:

        CAP_CHOWN:

                更改文件的所有者的的能力。 即可执行chown

        CAP_DAC_READ_SEARCH:

                读取任意文件和目录的能力。

        CAP_NET_RAW:

                使用原始网络套接字的能力。

                !ns_capable(net->user_ns, CAP_NET_RAW)

        CAP_SYS_ADMIN: 管理系统的能力

        CAP_SYS_RESOURCE:

                允许进程配置系统资源。如nice setrlimit mlock

        CAP_SYS_PTRACE:

                跟踪其他进程的能力。

        CAP_IPC_LOCK:

                锁定内存的能力。

内核如何判断进程的能力:

        与current->cred->cap_effective掩码计算。

相关命令:

        sudo    setcap    cap_net_raw   +   ep   /usr/bin/ping

        sudo    getcap

2. 系统信息

iomem:即IO内存。

IO内存的使用方法:

        1. request_mem_region(start, size, "name"); 请求一块物理地址内存区域。

        2. ioremap; 将物理地址映射到虚拟地址空间。

/proc/iomem

        IO内存信息,包括系统物理地址布局。

/proc/ioports

        IO端口信息。

/proc/buddyinfo

        不同大小阶的页大小,都有多少可用。

/proc/slabinfo

        slab分配器信息。

        内容举例:

                # name : tunables : slabdata

                kmalloc-16 0 0 16 256 1 : tunables 0 0 0 : slabdata 0 0 0

                kmalloc-192 29 30 192 30 1 : tunables 0 0 0 : slabdata 1 1 0

                ext4_inode_cache 35 35 1000 7 2 : tunables 0 0 0 : slabdata 5 5 0

                active_objs: 该slab缓存当前活动对象数量。

                num_objs: 可用总对象数。

                objsize: 单个对象大小。

                objperslab: 每个slab缓存中包含对象数。

                pagesperslab:每个slab缓存中占用的页数。

/proc/meminfo

        MemTotal:         16218688 kB         实际管理的内存 = 物理内存 - 预留内存。

        MemFree:         2576640 kB           空闲内存。

        MemAvailable: 8374184 kB

                可用内存。已使用,但回收后仍可用,所以大于MemFree。

        Buffers:         50828 kB         块设备占用页缓存大小,如超级块所用的缓存页。

        Cached:         8665304 kB     普通文件页缓存大小。

        SwapCached: 2096 kB         交换分区缓存的大小,即用于匿名页换入换出的缓存。

        Active:             7965496 kB

                active(file) + active(anon) 内存页总和(最近使用的内存页)。

        Inactive:         4651356 kB

                Inactive(file)和Inactive(anon)内存页总和(最近未使用的页)。

        Active(anon):         3603464 kB         最近使用的匿名页。

        Inactive(anon):      1225800 kB         最近未使用的匿名页。

        Active(file):             4362032 kB         最近使用的文件页。

        Inactive(file):           3425556 kB        最近未使用的文件页。

        Unevictable:         25840 kB         不可回收页,如内核进程或驱动使用。

        Mlocked:               25840 kB         页被进程锁定,不能被移动交换回收。

        SwapTotal:            8388604 kB     交换分区总大小。

        SwapFree:            8384060 kB     未使用的交换分区大小。

        Dirty: 8 kB

        Writeback:             0 kB                 正回写页。

        AnonPages:         4198028 kB      匿名页的大小。

        Mapped:               1579700 kB      驱动映射和共享内存。

        Shmem:               130352 kB         共享内存。

        Slab:                     360424 kB        slab缓存大小。

        SReclaimable:       312900 kB        slab中可回收内存大小。

        SUnreclaim:         47524 kB           slab中不可回收内存。

        KernelStack:         4136 kB            当前内核线程的栈大小。

        PageTables:         6812 kB             页表占用内存大小。

        NFS_Unstable:    0 kB                   NFS客户端使用。

        VmallocTotal:        34359738367 kB         vmalloc虚拟地址空间大小。

        VmallocUsed:         329676 kB

        VmallocChunk:       34359396996 kB         vmalloc区域最大连续空闲块的大小。

        HardwareCorrupted:         0 kB

        ShmemPmdMapped:        0 kB

        CmaTotal:                 524288 kB         连续内存区域的总大小。

        CmaFree:                 357464 kB         连续内存区域中可用大小。

        HugePages_Total:         0                   大页。

        Hugepagesize:       2048 kB

        DirectMap4k:         144344 kB

        DirectMap2M:         8146944 kB

        DirectMap1G:         8388608 kB         管理的大内存,1G页对应一个页表,可减少页表。

        

kswapd线程周期性把Active list中符合条件页移到Inactive list中。

/proc/vmstat 内存页使用统计

        nr_free_pages               30248

        nr_inactive_anon           0

        nr_active_anon              2684

        nr_inactive_file               2534

        nr_active_file                  1462

        nr_unevictable                 0

        nr_mlock                         0

        nr_anon_pages               2689

CMA(Contiguous Memory Allocator)

        内核启动时预留CMA的内存大小和位置(由内核启动参数或设备树配置)。

        使用方法:

                驱动申请使用CMA内存时,内核从预留的CMA内存池中分配一块连续物理内存,并返回虚拟地址,供驱动设备DMA操作。

        使用场景:

                USB,网络包处理,图形子系统等。

        内核参数:cma = 256M

/proc/kallsyms

        内核符号表,及其虚拟地址(内核虚拟地址空间)。

        原理:

                编译时,将所有函数和全局变量的地址组成一个数据块,并链接到vmlinux。

                cat /proc/kallsyms 时读取该数据块。

        编译选项:

                CONFIG_KALLSYMS

System.map文件:

        80004000 A swapper_pg_dir 内核虚拟地址空间中的地址。

System.map如何生成?

        linux-3.x/ scripts/ mksysmap,该脚本中执行 nm vmlinux > System.map 生成。

System.map不包含驱动模块中符号。

/proc/kallsyms包含模块等所有符号(即使没有EXPORT_SYMBOL)。

/proc/interrupts

        中断统计信息,包括中断号,中断次数,所属中断控制器。

3. 网络信息

/proc/net/udp

/proc/net/tcp

        包含socket fd、本地地址和端口号、远程地址和端口号、状态,发送队列等信息。

/proc/net/arp         ARP表信息。

        IP address HW type Flags HW address Mask Device

        192.168.150.123 0x1 0x2 6c:b3:11:3f:47:fb * br0

        Flags 0x2:表示该ARP已验证,可使用。

/proc/net/dev 所有网卡统计信息。

        fifo:因队列满的丢包数。

        frame:因帧错误的丢包数。

        carrier:因载波问题的丢包数。

4. 系统控制参数

/proc/sys/ 可写,从而控制系统。

        debug/ dev/ fs/ /kernel/ net/ vm/

cat /proc/sys/vm/swappiness

        查看页交换积极程度。

相关文章:

第10章 无持久存储的文件系统 (1)

目录 前言 10.1 proc文件系统 10.1.1 /proc 内容 本专栏文章将有70篇左右,欢迎关注,查看后续文章。 前言 即存在于内存中的文件系统。如: proc: sysfs: 即/sys目录。 内容不一定是ASCII文本,可能是二进…...

如何把命令行创建python虚拟环境与pycharm项目管理更好地结合起来

1. 问题的提出 我在linux或windows下的某个目录如“X”下使用命令行的方式创建了一个python虚拟环境(参考文章),对应的目录为myvenv, 现在我想使用pycharm创建python项目myproject,并且利用虚拟环境myvenv,怎么办&…...

keepalived+lvs高可用负载均衡集群配置方案

配置方案 一、配置主备节点1. 在主备节点上安装软件2. 编写配置文件3. 启动keepalived服务 二、配置web服务器1. 安装并启动http服务2. 编写主页面3.配置虚拟地址4. 配置ARP 三、测试 服务器IP: 主负载均衡服务器 master 192.168.152.71备负载均衡服务器 backup 192…...

Azure OpenAI Swagger Validation Failure with APIM

题意:Azure OpenAI Swagger 验证失败与 APIM 问题背景: Im converting the Swagger for Azure OpenAI API Version 2023-07-01-preview from json to yaml 我正在将 Azure OpenAI API 版本 2023-07-01-preview 的 Swagger 从 JSON 转换为 YAML。 My S…...

haproxy高级功能配置

介绍HAProxy高级配置及实用案例 一.基于cookie会话保持 cookie value:为当前server指定cookie值,实现基于cookie的会话黏性,相对于基于 source 地址hash 调度算法对客户端的粒度更精准,但同时也加大了haproxy负载,目前此模式使用…...

XXL-JOB分布式定时任务框架快速入门

文章目录 前言定时任务分布式任务调度 1、XXL-JOB介绍1.1 XXL-JOB概述1.2 XXL-JOB特性1.3 整体架构 2、XXL-JOB任务中心环境搭建2.1 XXL-JOB源码下载2.2 IDEA导入xxljob工程2.3 初始化数据库2.4 Docker安装任务管理中心 3、XXL-JOB任务注册测试3.1 引入xxl-job核心依赖3.2 配置…...

直流电机及其驱动

直流电机是一种将电能转换为机械能的装置,有两个电极,当电极正接时,电机正转,当电极反接时,电机反转。 直流电机属于大功率器件,GPIO口无法直接驱动,需要配合电机驱动电路来操作 TB6612是一款双…...

Java-判断一个字符串是否为有效的JSON字符串

在 Java 中判断一个字符串是否为有效的 JSON 字符串,可以使用不同的库来进行验证。常见的库 包括 org.json、com.google.gson 和 com.alibaba.fastjson 等。这里我将展示如何使用 com.alibaba.fastjson 库来实现一个简单的工具类,用于判断给定的字符串…...

FPGA开发板的基本知识及应用

FPGA开发板是一种专门设计用于开发和测试现场可编程门阵列(Field-Programmable Gate Array, FPGA)的硬件平台。FPGA是一种高度可配置的集成电路,能够在制造后被编程以执行各种数字逻辑功能。FPGA开发板通常包含一个FPGA芯片以及一系列支持电路和接口,以便…...

JVM知识总结(性能调优)

文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 性能调优 何时进行JVM调优? 遇到以下情况&#xff0c…...

基于Ascend C的Matmul算子性能优化最佳实践

矩阵乘法是深度学习计算中的基础操作,对于提升模型训练和推理速度至关重要。昇腾AI处理器是一款专门面向AI领域的AI加速器,其AI Core采用达芬奇架构,以高性能Cube计算引擎为基础,针对矩阵运算进行加速,可大幅提高单位面…...

SQL注入之EVAL长度限制突破技巧

要求: PHP Eval函数参数限制在16个字符的情况下 ,如何拿到Webshell? widows小皮环境搭建: 使用phpstudy搭建一个网站。 随后在该eval文件夹下创建一个webshell.php文件,并在其输入代码环境 解题思路: 通…...

稀疏注意力:时间序列预测的局部性和Transformer的存储瓶颈

时间序列预测是许多领域的重要问题,包括对太阳能发电厂发电量、电力消耗和交通拥堵情况的预测。在本文中,提出用Transformer来解决这类预测问题。虽然在我们的初步研究中对其性能印象深刻,但发现了它的两个主要缺点:(1)位置不可知性:规范Tran…...

详谈系统中的环境变量

目录 前言1. 指令背后的本质2. 环境变量背后的本质3. 环境变量到底是什么4. 命令行参数5. 本地变量 与 内置命令6. 环境变量的相关命令 前言 相信在 it 行业学习或者工作的小伙伴们,基本都配置过环境变量(windows环境下),如果你也…...

RAG与LLM原理及实践(11)--- Milvus hybrid search 源码分析及思想

目录 背景 hybrid search 源码分析 WeightedRanker 源码 hybrid search 核心 参数详解 基本入参 扩展入参 aysnc方式代码调用案例 说明 源码逻辑 prepare 调用过程 stub 调用结果 stub 调用过程 blocking 与 async 调用方式 深入内部core weightedRanker 的ch…...

JavaScript模拟空调效果

JavaScript模拟空调效果https://www.bootstrapmb.com/item/15074 在JavaScript中模拟空调效果主要依赖于前端界面的交互和状态变化,因为实际的温度调节、风扇速度调整等硬件操作无法直接通过JavaScript在浏览器中实现。不过,我们可以通过JavaScript来模…...

14.2 Pandas数据处理

欢迎来到我的博客,很高兴能够在这里和您见面!欢迎订阅相关专栏: 工💗重💗hao💗:野老杂谈 ⭐️ 全网最全IT互联网公司面试宝典:收集整理全网各大IT互联网公司技术、项目、HR面试真题. ⭐️ AIGC时代的创新与未来:详细讲解AIGC的概念、核心技术、应用领域等内容。 ⭐…...

python学习7---多进程

一、介绍 多进程是指在同一程序中创建多个独立的进程来执行任务。每个进程都有自己独立的内存空间,相互之间不干扰。 因为GIL锁的存在,对于CPU密集型任务(例如计算密集型操作),使用多进程可以提高程序的效率。 优点&am…...

基于Spring + Vue的旅游景区项目+源代码+文档说明

文章目录 源代码下载地址项目介绍项目功能界面预览 项目备注源代码下载地址 源代码下载地址 点击这里下载源码 项目介绍 基于Spring Vue的旅游景区项目 项目功能 民宿管理员:订单数量统计,订单交易额统计,客房统计饼图,酒店…...

Java后端面试题

Redis缓存穿透、雪崩、击穿,布隆过滤器 一致性hash 一致性hash sharding-jdbc实现一致性hash #一致性hash, 应用在mysql数据库的分库分表上, 现在已经完成了分库分表, 现在的问题出现了, 需要继续新增数据库节点, 请…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能

下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

大型活动交通拥堵治理的视觉算法应用

大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...

JVM垃圾回收机制全解析

Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...

全球首个30米分辨率湿地数据集(2000—2022)

数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

家政维修平台实战20:权限设计

目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色&#xf…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)

文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...

什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南

文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/55aefaea8a9f477e86d065227851fe3d.pn…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2

每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)

船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...