Linux user & kernel
文章平均质量分 87
那个少年
一个瞎搞的IT男
展开
-
Linux内核-CFS调度下带宽控制(Bandwidth Control)
术语CFS:Completely Fair Scheduler--完全公平调度。对应的调度策略为:SCHED_NORMAL。CFS调度下的带宽控制是:通过允许一个特点进程组在某个周期(period)下的CPU配额(quota)控制其带宽。主要有两个参数:cpu.cfs_period_us:周期(us)cpu.cfs_quota_us:配额(us)此上两个配置通过cgroup文件系统配置。原文The bandwidth allowed for a group is specified原创 2022-04-16 20:58:28 · 1391 阅读 · 0 评论 -
《深入linux内核架构》C3 内存管理--之1--内存模型
前言 本章篇幅过长,拆分几篇博文简述个人对Linux内核内存管理的理解。本博主要描述物理内存在系统的组织模型。概述 我们或许已经知道,操作系统中的每个进程都分配有虚拟内存空间(虚拟地址空间),此虚拟内存空间由内核负责划分与运维,虚拟地址空间与物理内存间通过页表映射。Linux X86内核架构下通常是4G的虚拟地址空间,按照3:1进行划分,底部3G用于进程用户...原创 2019-06-22 21:27:21 · 399 阅读 · 0 评论 -
linux内核编程--0内核源码目录(3.0.1版本)
一、 官网下载的3.0.1内核源码解压说明:之所有选择3.0.1内核版本源码,是因为其相对于2.6.24及后续2.6版本比较新,而相对于最新的内核版本源码(4.16)也不算太古老。Linux内核以稳定闻名,因而选择中间3.0第一个版本进行分析,后续内核代码更新也与此版本差异不大,读者可以基于此目录分析自行查阅。二、 Linux内核源码目录普通文件.gitignoregit的版本管理文件。我们都...原创 2018-04-27 12:44:13 · 1382 阅读 · 0 评论 -
linux内核编程--3系统调用与宏参数字符串化
系统调用1. 简介linux内核中设置了一组用于实现系统功能的子程序,称为系统调用。系统调用和普通库函数调用非常相似,只是系统调用由操作系统核心提供,运行于核心态,而普通的函数调用由函数库或用户自己提供,一般运行于用户态(也可能间接调用系统调用)。2. 内核系统调用申明与实现Linux内核提供的系统调用大多声明在文件:include\linux\syscalls.h,而具体函数...原创 2017-12-08 22:11:39 · 475 阅读 · 0 评论 -
linux内核编程--6字符设备
1. 概念 字符设备是Linux三大设备之一(另外两种:块设备、网络设备)。 字符设备:是指只能一个字节一个字节进行读写操作的设备,不能随机读取设备中的某一数据、读取数据要按照先后数据。字符设备是面向流的设备,常见的字符设备有鼠标、键盘、串口、控制台和LED等。 Linux自带的字符设备和块设备一般都会在/dev目录(可以是任意目录,这样是为了统一)下对应一个原创 2018-03-27 22:57:18 · 615 阅读 · 0 评论 -
linux内核编程--5内核定时器
1. 用户态定时器Linux用户态定时器想必大家都有所了解,以下只列出相关API,如:1) alarm:超时产生SIGALRM信号的那种;2) 间隔定时器:getitimer、setitimer;3) timerfd系列:timerfd_create、timerfd_settime、timerfd_gettime;4) POSIX原创 2018-04-09 23:07:53 · 628 阅读 · 0 评论 -
Linux内核编译与安装:4.4.0-21→4.14.0
1. 背景从事Linux环境下开发工作,一直想自己玩,纯属好奇,没撒背景。2. 编译环境zg-Linux etc # uname–a(查看内核)Linux zg-Linux 4.4.0-21-generic #37-UbuntuSMP Mon Apr 18 18:34:49 UTC 2016 i686 i686 i686 GNU/Linuxzg-Linux etc # lsb_re...原创 2018-03-11 11:07:39 · 25536 阅读 · 0 评论 -
linux内核编程--4netfiter钩子函数
1. 背景京东金融资深C/C++开发工程师 岗位被面试到,本来在《深入linux内核架构》一书中见过,但由于整本书看的不是很懂,也没实验,当时吱吱唔唔的回答了,答案不是很理想。后来也就没有了后来······2. 概述netfilter是自2.4内核的一个数据包过滤框架。可以过滤数据包,网络地址和端口转换(nat和napt技术),以及其他操作数据包的功能。主要工作原理是在内核模块注册回调函数(hoo...原创 2018-03-09 22:16:51 · 5584 阅读 · 2 评论 -
<深入linux内核架构>--第七章 模块
内容简介:主要讲解了内核与模块的交互方式,也就是:模块如何装载和卸载,以及内核如何检测不同模块间的相互依赖。7.1 概述略7.2 使用模块 主要讲述了modutils工具包:1. 添加和移除modprobe :从内核中添加或移除模块,考虑模块间可能的依赖关系;insmode:添加单个模块;lsmod:显示内核模块状态----也就是翻译/pr原创 2017-11-29 21:28:32 · 378 阅读 · 0 评论 -
linux内核编程--2自定义内核与用户态通信方式(sock选项)
1. 简介前篇博文(linux内核编程一:模块的装载和卸载)中我们已经知道了自定义内核模块的装载和卸载。由于linux内核本身非常强大,编写自定义的内核模块往往是为了实现我们独特的功能或需求,这经常涉及到内核态与用户态之间通信。Linux本身提供丰富的系统调用(如ioctl、open)来实现用户态与内核态交互,此文基于getsockopt系统调用,介绍一种简单的用户态与内核态通信方法:增加原创 2017-11-19 21:39:28 · 1872 阅读 · 0 评论 -
linux内核编程--1模块的装载和卸载
1. 简介linux模块是具有独立功能的程序,它可以被单独编译,但不能独立运行。它在运行时被链接到内核作为内核的一部分在内核空间运行,这与运行在用户空间的进程是不同的。模块通常由一组函数和数据结构组成,用来实现一种文件系统、一个驱动程序或其他内核上层的功能。也就是说:模块就是整个内核的一部分。但是跟C程序中函数不一样的一点是,内核模块可以在它所认为适当的时候,插入到内核或者从内核中删除,而且还...原创 2017-11-06 23:18:18 · 2320 阅读 · 0 评论 -
打印动态链接时进程堆栈的初始化信息(摘自<程序员的自我修养>)
进程在初始化时,堆栈里面保存了关于进程执行环境和命令行参数等信息。此外,还保存了动态链接器所需要的辅助信息数组。辅助信息的格式如下数组:typedef struct { uint32_t a_type; union { uint32_t a_val; }a_un;}Elf32_auxv_t;以下小程序可以堆栈的初始化信息:#incl原创 2016-12-11 10:54:55 · 534 阅读 · 0 评论