net.core.wmem_max = 16777216 #在每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目。...方法是在服务器上禁止 net.ipv4.tcp_timestamps = 0 #对于远端的连接请求SYN,内核会发送SYN + ACK数据报,以确认收到上一个 SYN连接请求包。...conf.all.secure_redirects = 0 #仅仅接收发给默认网关列表中网关的ICMP重定向消息 net.ipv4.conf.default.secure_redirects = 0 #该值越高则linux...内核执行启发式内存过量使用处理,方法是估算可用内存量,并拒绝明显无效的请求。遗憾的是因为内存是使用启发式而非准确算法计算进行部署,这个设置有时可能会造成系统中的可用内存超载。...#1 — 内核执行无内存过量使用处理。使用这个设置会增大内存超载的可能性,但也可以增强大量使用内存任务的性能。
前言 Linux内核是Linux操作系统的核心,也是整个Linux功能体现的核心,就如同发动机 在汽车中的重要性。内核主要功能包括进程管理、内存管理、文件管理、设备管理、网络管理等。...Linux内核是单内核设计,但却采用了微内核的模块化设计, 支持内核线程以及动态装载内核模块的能力。 Linux作为一个自由软件,在广大爱好者的支持下,内核版本不断更新。...新的内核修订了旧内核 的bug,并增加了许多新的特性。如果用户想要使用这些新特性,或想根据自己的系统定制一个更高效,更稳定的内核,就需要手动编译Linux内核。那么如 何编译内核呢?...内核编译之配置内核 编译内核首先需要安装开发环境(Development Tools和Server Platform Development),配置内核之前可以查看当前系统的设备信息,了解系统详细配置...查看grub.conf配置文件,会发现新内核的信息已经写入了 ? 以新内核启动 ? 查看新内核版本 ?
文章目录 一、打开 Linux 内核编译 菜单配置 二、菜单配置中的光标移动与选中状态 三、保存配置 四、配置项帮助文档 一、打开 Linux 内核编译 菜单配置 ---- 执行 make menuconfig...命令 , 弹出菜单配置 ; 二、菜单配置中的光标移动与选中状态 ---- 其中左侧的 * 表示选中状态 , 通过 上下箭头 按键 , 可以上下移动光标 , 按下 空格 按键 , 可以切换 选中 / 取消选中...状态 , 选中状态下 , 条目左侧会显示 * 符号 ; 按下 左右 箭头按键 , 会切换下面的 选项 ; 三、保存配置 ---- 选择 底部的 Save 选项 , 然后按回车 , 即可保存配置 ,...点击 OK , 继续下一步 , 保存完成 , 选择 Exit 退出 ; 内核的编译配置保存在了 .config 文件中 ; 四、配置项帮助文档 ---- 在菜单配置中 , 可以选择裁剪一些内核模块..., 内核越小 , 运行速度越快 ; 上面的内核编译选项 , 如果不清楚细节 , 暂时按照默认配置编译即可 ; 如果想要了解某一项配置的具体作用 , 选中指定的项 , 如 : 按下 " Shift +
文章目录 一、查看 .config 编译配置文件 二、正式编译内核 一、查看 .config 编译配置文件 ---- 在上一篇博客 【Linux 内核】编译 Linux 内核 ④ ( 打开 Linux...内核编译 菜单配置 |菜单配置中的光标移动与选中状态 | 保存配置 | 配置项帮助文档 ) 中 , 已经将编译配置保存到了 .config 文件中 ; 查看 .config 编译配置文件 , 在 linux...内核源码根目录中 , 执行 gedit .config 命令 , 查看 .config 编译配置文件 : ( 也可以使用 vi , vim 等文本编辑器查看 ) 在 .config 配置中 , #...file; DO NOT EDIT. # Linux/x86 5.6.14 Kernel Configuration # # # Compiler: gcc (Ubuntu 5.4.0-6ubuntu1...---- 在 Linux 内核源码根目录 , 执行 sudo make j4 开始编译 Linux 内核 ;
文章目录 一、安装 ncurses 二、安装 flex 三、安装 bison 四、打开 Linux 内核编译配置菜单 开始编译 Linux 内核之前 , 需要先执行 make menuconfig 命令..., 打开 Linux 内核编译配置菜单 , 进行 编译配置 ; 执行上述命令后 各种报错 , 最终排查完毕后 , 需要安装 ncurses , flex , bison 这 3 个库或软件 , 参考...【错误记录】编译 Linux 内核报错 ( Unable to find the ncurses package. ) 【错误记录】编译 Linux 内核报错 ( /bin/sh: 1: flex:...not found ) 【错误记录】编译 Linux 内核报错 ( /bin/sh: 1: bison: not found ) 博客 , 进行安装 ; 一、安装 ncurses ---- 执行 sudo...-5.6.14# 四、打开 Linux 内核编译配置菜单 ---- 再次执行 make menuconfig 命令 , 成功弹出 菜单配置图形界面 ;
这是《Linux系统调用那些事》高级部分的第一章《聊聊Linux IO》。高级部分的文章均假设读者完整的学习过Linux系统基础以及Linux系统编程相关的内容,并已有一定的工程实践经验。...图中描述了Linux下文件操作函数的层级关系和内存缓存层的存在位置。中间的黑色实线是用户态和内核态的分界线。...Linux内核中的IO栈 这一小节来看Linux内核的IO栈的结构。...先上一张全貌图[4]: 由图可见,从系统调用的接口再往下,Linux下的IO栈致大致有三个层次: 文件系统层,以 write 为例,内核拷贝了write参数指定的用户态数据到文件系统Cache中,并适时向下层同步...,内核必须将脏页写回磁盘,以便释放内存。
先来看下IDR的作用:IDR主要实现ID与数据结构的绑定。刚开始看的时候感觉到有点懵,什么叫“ID与数据结构的绑定”?举一个例子大家就会明白了:在IPC通信的时...
Linux内核中的BogoMIPS详解 一、什么是BogoMIPS?...1.1 基本定义 BogoMIPS = Bogus(虚假的) + MIPS(每秒百万条指令) 不是真实的CPU性能指标 是Linux内核启动时计算的一个校准值 用于内核内部延迟循环的时间控制 1.2 核心比喻...(每个人的语速不同) Linux内核: 运行一个校准过的循环(BogoMIPS就是"语速测量器") 二、BogoMIPS的工作原理 2.1 内核启动时的计算过程 启动流程: [BIOS/UEFI...] → [Bootloader] → [Linux内核加载] ↓ [BogoMIPS校准]...Linux内核用它来"测量"自己的时间需求,而不是用来比较不同的"桌子"(CPU)大小。
这个Linux服务器X将发送ARP请求来获取目标(或网关)的mac地址。在这种情况下,ARP请求包的源IP地址是什么呢?...其实对于大部分路由器来说ARP请求包中的源IP地址使用发送ARP请求包的网络接口上配置的IP地址(在上面的例子中为IP2)。但是,linux服务器的行为是点不同。...在Linux服务器中通过Linux的内核数据arp_announce,ARP请求中源地址的选择是完全可配置。...其实arp_announce是为了解决Linux服务器作为路由器时的arp问题,因为路由器一般是动态学习ARP包的(一般动态配置DHCP的话)。...当内网的Linux机器要发送一个到外部的ip包,那么它就会请求路由器的Mac地址,发送一个arp请求,这个arp请求里面包括了自己的ip地址和Mac地址。
/proc/sys/下的文件和子目录比较特别,它们对应的是系统内核参数,更改文件内容就意味着修改了相应的内核参数,可以简单的使用echo命令来完成修改: echo 1 > /proc/sys/net/ipv4...使用echo修改内核参数很方便,但是系统重启后这些修改都会消失,而且不方便配置参数的集中管理。/sbin/sysctl命令就是用来查看和修改内核参数的工具。...sysctl -a会列出所有内核参数当前的配置信息,比遍历目录/proc/sys/方便多了。...更常用的方式是,把需要修改的配置集中放在/etc/sysctl.conf文件中,使用sysctl -p重新加载配置使其生效。...因此放在/etc/sysctl.conf中的系统参数设置在重启后也同样生效,同时也便于集中管理修改过了哪些内核参数。 最后,哪里有比较完整的内核参数说明文档?我觉得kernel.org的文档比较全。
在Linux 内核中,container_of 函数使用非常广,例如 Linux内核链表 list_head、工作队列work_struct中 在Linux 内核中有一个大名鼎鼎的宏container_of...我们先来看看它在内核中是怎样定义的。 ? 我们先来分析一下container_of(ptr,type,member),这里面有ptr,type,member分别代表指针、类型、成员。...(struct test *)((char *)__mptr - offsetof(struct test,j)); 接着我们来看一下offsetof(struct test,j),他在内核中如下定义...在回首一下它: (struct test *)((char *)__mptr - offsetof(struct test,j)); linux内核中随随便便一个宏就有如此精妙 请输入正文
https://blog.csdn.net/u014688145/article/details/50608829 备注:本文通过三个问题,引出Linux 内核0.11的系统调用。...由图可以看出,从操作系统的角度来看,一台计算机主要分为两级:用户级以及内核级,系统调用主要作用就是连接用户级和内核级的“插座”。...因此,自然而然的一个想法就是,通过对与内核模块代码段,数据段和对用户区的代码数据段做区分来阻止用户直接访问内核模块。Linux内核通过建立段级保护机制来完成上述区分核心与用户态区域的功能。...再看(linux/include/asm/system.h): #define set_system_gate(n,addr) \ _set_gate(&idt[n],15,3,addr); #define...系统调用,基本结束了,剩下的即是内核代码的编写。在下一节中,我们将在实际的操作系统编写两段内核代码函数,让用户程序能调用系统函数。尽请期待!o(∩_∩)o
blog.csdn.net/u014688145/article/details/50615579 备注:上讲中,博猪讲到了操作系统是如何让用户程序调用系统函数的,这讲继续接上讲的话题,从一个系统内核系统函数创建的小实验来学习系统内核具体做了些什么...等等,linux 0.11内核源码的编写与编译,需要在虚拟机模拟x86环境的情况下进行,这在我的Windows下用Bochs编译运行Linux-0.11有详细阐述,不再赘述。...1、编写内核态下,系统函数具体实现iam()以及whoami()。...目录:/linux/include/unist.h(修改) // 以下是内核实现的系统调用符号常数,用于作为系统调用函数表中的索引值。...重新编译下Linux内核。
其实 Linux 内核模块也有类似的调节旋钮,今天要聊的模块参数。它能让你在加载模块时动态配置参数,不用改代码就能实现功能切换,堪称模块开发的效率神器。 一、什么是模块参数?...有了它,一行命令就能搞定配置,这也是内核模块灵活性的重要体现。...1.2 模块参数的三大特性 动态配置:不需要重新编译模块,加载时通过命令行传递参数 类型安全:支持整数、字符串、布尔值等多种类型,内核会自动校验 权限可控:可以设置参数是否允许用户态读写(比如只允许...内核灵活配置的设计哲学。...掌握模块参数不仅是模块开发的基础技能,更是理解内核动态配置机制的关键。
对 Linux 内核进行编译之前,首先要使用命令【make menuconfig】对 Linux 的编译选项进行配置。...下面详细讲解使用这个命令时所遇到的重要配置参数: 第一部分 Code maturity level options ---> 代码成熟等级选项 [ ]Prompt for development...你应该选择它,因为有许多设备可能必需选择这个选项才能进行配置,实际上它是安全的。...[ ] Kernel .config support 这将会把内核的配置信息与相关的文档说明编译进内核中,以后可以使用一些工具来提取它用来重新构建内核,一般不用选它。...Save Configuration to an Alternate File 将配置保存到一个外部文件
Linux内核的特点: 结合了unix操作系统的一些基础概念: 3. Linux内核的任务: 从技术层面讲,内核是硬件与软件之间的一个中间层。...编译脚本、配置文件、帮助文档、版权说明等辅助性文件。...Kconfig, Kbuild, Makefile, scripts/ ---- 用于内核编译的配置文件、脚本等。 COPYING ---- 版权声明。 MAINTAINERS ----维护者名单。...Linux内核体系结构简析 ▲ Linux系统层次结构 最上面是用户(或应用程序)空间。这是用户应用程序执行的地方。用户空间之下是内核空间,Linux 内核正是位于这里。...Linux内核体系结构 因为Linux内核是单片的,所以它比其他类型的内核占用空间最大,复杂度也最高。
Linux内核预备工作 理解Linux内核最好预备的知识点: 懂C语言 懂一点操作系统的知识 熟悉少量相关算法 懂计算机体系结构 Linux内核的特点: 结合了unix操作系统的一些基础概念...,例如库文件(因为Linux内核是一个自包含的内核,即内核不依赖其它的任何软件,自己就可以编译通过)、固件集合、KVM(虚拟机技术)等 编译脚本、配置文件、帮助文档、版权说明等辅助性文件 使用...Kconfig, Kbuild, Makefile, scripts/ ---- 用于内核编译的配置文件、脚本等。 COPYING ---- 版权声明。...Linux内核体系结构简析简析 ? 图1 Linux系统层次结构 最上面是用户(或应用程序)空间。这是用户应用程序执行的地方。用户空间之下是内核空间,Linux 内核正是位于这里。...Linux内核体系结构 因为Linux内核是单片的,所以它比其他类型的内核占用空间最大,复杂度也最高。
检查当前kdump服务状态1.1 检查是否已经配置加载kdump环境grep crashkernel /proc/cmdline结果确认:如果能看到crashkernel=auto字样,表示已经加载备注...1:如果当前没有加载运行,以下操作都将无效(因为kdump服务必须要在操作系统启动前先加载1个kdump的内核环境)。...(running)1.3 检查当前系统内存使用情况备注:请特别关注已用内存,free -h结果确认:记录:Mem行的total和used列1.4 检查kdump存储目录空间情况kdump.conf 配置文件里的...请修改到有足够容量的目录(或挂载点),重启kdump服务1.5 修改sysconfig kdump参数vi /etc/sysconfig/kdump# 将下面这一行注释掉,然后复制一行,去掉里面的reset_devices配置
一、卸载函数的角色:模块的 "善后专员" 模块卸载函数是当你执行rmmod命令时,内核自动调用的 "收尾函数"。它的核心任务就一个:清理加载函数申请的所有资源,把系统恢复到模块加载前的状态。...和加载函数相比,卸载函数有三个明显不同: 没有返回值(void类型),因为卸载失败也无法挽回 用__exit宏标记,告诉内核这是卸载专用函数 必须严格按 "反向顺序" 释放资源 二、卸载函数的 "身份证...:注册卸载函数,让内核知道模块卸载时该调用谁 2.2 __exit宏的特殊作用 __exit宏不仅仅是个标记,它会影响内核对函数的处理: 如果模块编译时加了CONFIG_MODULE_UNLOAD=n(...清理痕迹:卸载完成后,内核会从/proc/modules列表中移除该模块,lsmod再也查不到它的信息,就像 "从未存在过"。...排查技巧: 用slabtop查看内核内存使用,找是否有持续增长的 slab 缓存 在卸载函数中加printk日志,确认每个释放函数都被执行 检查是否漏释放资源(比如动态创建的自旋锁没销毁) 5.3 卸载时内核崩溃
,本专栏目的在于,记录学习Linux操作系统的总结 欢迎大家点赞 收藏 ⭐ 加关注哦!...Linux内核中的container_of宏详解 1. 什么是container_of宏?...1.1 基本概念 container_of是Linux内核中一个非常巧妙且常用的宏,它的作用是通过结构体成员的地址反向推导出包含该成员的结构体的地址。...2.1 问题背景 在Linux内核编程中,经常使用链表来管理各种数据结构。...// Linux内核中的真实示例(简化) struct inode { // ...