内核参数管理

2019-02-12 19:40 Linux

Linux 内核有很多可以定制化的参数—— 内核参数 ( kernel parameters ), 斟酌设置内核参数对 系统调优 意义重大。 内核参数 涵盖内核的方方面面,包括 网络 ( net )、 文件系统 ( fs )等等。 本文以 fs.file-max 参数为例,介绍设置内核参数的几种不同方式。

procfs

Linux 内核通过 procfs 伪文件系统暴露 内核参数 的访问接口, 通过 procfs 接口,用户可 设置 或者 查看 指定内核参数。 内核参数位于 /proc/sys 目录下,以 fs.file-max 参数为例,路径为 /proc/sys/fs/file-max

查看参数只需读取对应文件内容 …


阅读全文

内核模块开发

2018-10-29 21:28 Linux

Linux 内核管理着计算机的所有资源,为上层应用程序提供统一的编程接口( 系统调用 ),屏蔽底层设备的差异。 由于不同用户物理设备以及对内核功能需求的差异性,需要一种类似插件的运行机制——编写插件实现所需功能,然后嵌入到内核中,与内核形成一个整体。

Linux内核模块 便是这样的插件。 作为 Linux 内核的扩展手段,可以在运行时动态加载和卸载。 那么,一个内核模块是怎么编写的呢?与普通程序编写有什么区别呢?

程序开发经常以 hello world 程序入门,因为这是最简单的。 本文也通过一个最简单的内核模块,演示如何一步步编写一个内核模块。

结构

内核模块与普通程序不同,没有执行流。 可以这样理解,内核模块实现一些函数,作为回调函数注册到内核中。 在内核加载/卸载时,或者其他应用程序调用系统调用时,注册的回调函数才得到调用。

有两个最基本的回调函数 initexit ,分别由 module_initmodule_exit 登记,分别在模块加载和卸载的时候执行。 下面实现的 hello world 内核模块 …


阅读全文

系统调用原理

2018-07-10 09:57 Linux

操作系统通过系统调用为运行于其上的进程提供服务。

当用户态进程发起一个系统调用, CPU 将切换到 内核态 并开始执行一个 内核函数 。 内核函数负责响应应用程序的要求,例如操作文件、进行网络通讯或者申请内存资源等。

举一个最简单的例子,应用进程需要输出一行文字,需要调用 write 这个系统调用:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#include <string.h>
#include <unistd.h>

int main(int argc, char *argv[])
{
    char *msg = "Hello, world!\n";
    write(1, msg, strlen(msg));

    return 0;
}

Note …


阅读全文