自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(36)
  • 收藏
  • 关注

转载 Linux进程调度-应用内核设置调度策略和优先级

一、进程调度策略设置1. 函数使用说明#include <sched.h>int sched_setscheduler(pid_t pid, int policy, const struct sched_param *param);int sched_getscheduler(pid_t pid);struct sched_param { ... int sched_priority; ...};描述:sched_setscheduler()为pi

2022-01-23 23:25:59 1764

转载 《Linux内核设计与实现》- 进程地址空间(kernel 2.6.32.60)

进程地址空间也就是每个进程所使用的内存,内核对进程地址空间的管理,也就是对用户态程序的内存管理。主要内容:地址空间(mm_struct) 虚拟内存区域(VMA) 地址空间和页表1. 地址空间(mm_struct)地址空间就是每个进程所能访问的内存地址范围。这个地址范围不是真实的,是虚拟地址的范围,有时甚至会超过实际物理内存的大小。现代的操作系统中进程都是在保护模式下运行的,地址空间其实是操作系统给进程用的一段连续的虚拟内存空间。地址空间最终会通过页表映射到物理内存上,因为内核操

2021-12-10 17:08:51 92

转载 关于 Linux 内核的 30 件你不知道的事

Linux 内核今年 30 岁了。Linux 内核今年 30 岁了。这开创性的开源软件的三个十年,让用户能够运行自由软件,让他们能从运行的应用程序中学习,让他们能与朋友分享他们所学到的知识。有人认为,如果没有 Linux 内核,我们如今所享受的 开源文化 和自由软件的累累硕果,可能就不会应时而出现。如果没有 Linux 作为催化剂,苹果、微软和谷歌所开源的那些就不可能开源。Linux 作为一种现象,对开源文化、软件开发和用户体验的影响,是怎么强调都不为过的,但所有这一切,都滥觞于一个 Linux 内核。

2021-12-09 21:31:14 52

原创 Linux内核源码分析

Linux内核源码讲解合集,求一键三连!!后续持续更新、知识点有操作系统原理、内核组件与调试、进程管理、内存管理、设备驱动、网络协议栈、文件系统、内核项目实战

2021-12-09 14:05:13 2004

转载 跟踪分析Linux内核5.0系统调用处理过程

实验内容 下载并编译Linux5.0内核 选择系统调用号进行跟踪   实验环境 Ubuntu 18.04 VMware workstation Pro 14 实验步骤1.编译Linux5.0内核 cd mykernel/     wget https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/linux-5.0.1.tar.xz xz -d linux-5.0.1.tar.xz

2021-12-07 22:25:54 97

转载 linux内核数据结构之链表

1、前言   最近写代码需用到链表结构,正好公共库有关于链表的。第一眼看时,觉得有点新鲜,和我之前见到的链表结构不一样,只有前驱和后继指针,而没有数据域。后来看代码注释发现该代码来自linux内核,在linux源代码下include/Lish.h下。这个链表具备通用性,使用非常方便。只需要在结构定义一个链表结构就可以使用。2、链表介绍  链表是非常基本的数据结构,根据链个数分为单链表、双链表,根据是否循环分为单向链表和循环链表。通常定义定义链表结构如下:typedef struct nod

2021-12-06 21:30:00 239

转载 Linux内核DTB文件启动的几种方式

1. Device Tree简介Linus Torvalds在2011年3月17日的ARM Linux邮件列表宣称“this whole ARM thing is a fucking pain in the ass”,引发ARM Linux社区的地震,随后ARM社区进行了一系列的重大修正。在过去的ARM Linux中,arch/arm/plat-xxx和arch/arm/mach-xxx中充斥着大量的垃圾代码,相当多数的代码只是在描述板级细节,而这些板级细节对于内核来讲,不过是垃圾,如板上的platfo

2021-12-06 16:19:34 1040

转载 Linux内核中双向链表的经典实现

Linux中的两个经典宏定义倘若你查看过Linux Kernel的源码,那么你对 offsetof 和 container_of 这两个宏应该不陌生。这两个宏最初是极客写出的,后来在Linux内核中被推广使用。1. offsetof1.1 offsetof介绍定义:offsetof在linux内核的include/linux/stddef.h中定义。#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)

2021-12-06 15:18:44 241

转载 编译linux内核源码,安装、删除内核

Linux内核编译、安装流程此处只讲linux内核编译步骤至于安装虚拟机,安装ubuntu操作系统请自行百度环境信息:Linux操作系统:ubuntu16.04内核版本:4.15.0-29-generic需要编译和安装的内核源码版本:4.19第一步:下载linux内核源码官网地址地址:https://www.kernel.org/官网大致是这个样子,大家关注我标出的位置就OK了第一列:mainline当前在开发的内核新版本stable 稳定的内核版本lon

2021-12-04 20:33:14 611

转载 Linux内核(内核模块)的加载过程(超详细)

GRUB 加载了内核之后,内核首先会再进行二次系统的自检,而不一定使用 BIOS 检测的硬件信息。这时内核终于开始替代 BIOS 接管 Linux 的启动过程了。内核完成再次系统自检之后,开始采用动态的方式加载每个硬件的模块,这个动态模块大家可以想象成硬件的驱动(默认 Linux 硬件的驱动是不需要手工安装的,如果是重要的功能,则会直接编译到内核当中;如果是非重要的功能,比如硬件驱动会编译为模块,则在需要时由内核调用。不过,如果没有被内核硬件,要想驱动,就需要手工安装个硬件的硬块了。具体的安装方法会在后续

2021-12-04 19:56:58 970

转载 Linux内核版本介绍与查询

Linux内核版本命名在不同时期有着不同的规范,在涉及到Linux版本问题时经常容易混淆,主线版本/稳定版/长期支持版本经常搞不清楚,本文主要记录下内核版本命名的规则以及如何查看Linux系统版本信息。Linux内核(Linux kernel)简介内核是操作系统的核心 ,其主要功能有:1.响应中断,执行中断服务程序   2.管理多个进程,调度和分享处理器的时间  3.管理进程地址空间的内存管理   4.网络和进程间通信等系统服务程序内核的活动范围:1.运行于用户空间,执行用

2021-12-02 17:51:43 292

转载 Linux内核模块简介

一. 摘要这篇文章主要介绍了Linux内核模块的相关概念,以及简单的模块开发过程。主要从模块开发中的常用指令、内核模块程序的结构、模块使用计数以及模块的编译等角度对内核模块进行介绍。在Linux系统开发过程中,以模块的形式开发其重要性不言自明,而在嵌入式设备驱动开发中将驱动程序以模块的形式发布,更是极大地提高了设备使用的灵活性——用户只需要拿到相关驱动模块,再插入到用户的内核中,即可灵活地使用你的设备。二. 文章提纲1. 摘要2. 文章提纲3. 概述4. 模块开发常用的指令5.

2021-12-02 15:35:32 87

转载 「源码分析」Linux内核同步机制之信号量与锁

Linux内核同步控制方法有很多,信号量、锁、原子量、RCU等等,不同的实现方法应用于不同的环境来提高操作系统效率。首先,看看我们最熟悉的两种机制——信号量、锁。一、信号量首先还是看看内核中是怎么实现的,内核中用struct semaphore数据结构表示信号量(<linux/semphone.h>中):struct semaphore { spinlock_t lock; unsigned int count; s

2021-12-01 20:45:08 147

原创 【知识分享】linux内核源码分析从入门到入坟、操作系统原理、内核组件与调试、进程管理、内存管理、设备驱动、网络协议栈、文件系统、内核项目实战

【纯干货】linux内核源码分析从入门到入坟、操作系统原理、内核组件与调试、进程管理、内存管理、设备驱动、网络协议栈、文件系统、内核项目实战

2021-12-01 17:30:12 1913

转载 Linux内核源码分析方法

一、内核源码之我见Linux内核代码的庞大令不少人“望而生畏”,也正因为如此,使得人们对Linux的了解仅处于泛泛的层次。如果想透析Linux,深入操作系统的本质,阅读内核源码是最有效的途径。我们都知道,想成为优秀的程序员,需要大量的实践和代码的编写。编程固然重要,但是往往只编程的人很容易把自己局限在自己的知识领域内。如果要扩展自己知识的广度,我们需要多接触其他人编写的代码,尤其是水平比我们更高的人编写的代码。通过这种途径,我们可以跳出自己知识圈的束缚,进入他人的知识圈,了解更多甚至我们一般短期内无法了

2021-12-01 16:34:19 273

转载 linux内核源码分析Linux进程调度原理

Linux进程调度原理Linux进程调度的目标1.高效性:高效意味着在相同的时间下要完成更多的任务。调度程序会被频繁的执行,所以调度程序要尽可能的高效;2.加强交互性能:在系统相当的负载下,也要保证系统的响应时间;3.保证公平和避免饥渴;4.SMP调度:调度程序必须支持多处理系统;5.软实时调度:系统必须有效的调用实时进程,但不保证一定满足其要求;Linux进程优先级  进程提供了两种优先级,一种是普通的进程优先级,第二个是实时优先级。前者适用SCHED_NORMAL调度策略,后

2021-11-30 21:15:00 605

转载 linux内核源码分析Linux设备驱动—内核定时器

内核定时器使用内核定时器是内核用来控制在未来某个时间点(基于jiffies)调度执行某个函数的一种机制,其实现位于 <Linux/timer.h> 和 kernel/timer.c 文件中。被调度的函数肯定是异步执行的,它类似于一种“软件中断”,而且是处于非进程的上下文中,所以调度函数必须遵守以下规则:1) 没有 current 指针、不允许访问用户空间。因为没有进程上下文,相关代码和被中断的进程没有任何联系。2) 不能执行休眠(或可能引起休眠的函数)和调度。3) 任何被访问

2021-11-30 20:08:00 79

转载 【linux内核源码分析】从内核文件系统看文件读写过程

系统调用操作系统的主要功能是为管理硬件资源和为应用程序开发人员提供良好的环境,但是计算机系统的各种硬件资源是有限的,因此为了保证每一个进程都能安全的执行。处理器设有两种模式:“用户模式”与“内核模式”。一些容易发生安全问题的操作都被限制在只有内核模式下才可以执行,例如I/O操作,修改基址寄存器内容等。而连接用户模式和内核模式的接口称之为系统调用。应用程序代码运行在用户模式下,当应用程序需要实现内核模式下的指令时,先向操作系统发送调用请求。操作系统收到请求后,执行系统调用接口,使处理器进入内核模式。当

2021-11-30 16:39:20 222

转载 操作系统项目:向Linux内核添加一个系统调用

内容: 向Linux增加一个系统调用 撰写一个应用测试程序调用该系统调用 使用ptrace或类似的工具对该测试程序进行跟踪调 小编自己整理了一些个人觉得比较好的学习书籍、视频资料有需要的可以【点击】自行免费领取! 环境:1.vmware workstation 15.0.02.ubuntu-18.10-desktop3.linux-4.18.14步骤:一.准备环境在终端操作:sudo apt-get update //更新系统源码 s

2021-11-29 21:59:50 120

转载 实验:Linux内核编译及添加系统调用(HDU)

花了一上午的时间来写这个,良心制作,发现自己刚学的时候没有找到很详细的,就是泛泛的说了下细节地方也没有,于是自己写了这个,有点长,如果你认真的看完了,也应该是懂了。一、前期准备工作需要准备虚拟机上安装Ubuntu,笔者安装的是Ubuntu18.04,安装的教程自行百度解决,教程很多。有几点需要提一下,就是内存分配至少60G,核分配4个最好,为了在编译的时候别崩溃。建议去熟悉一下Linux下面的文件目录结构,根目录下每个目录一般会存放什么样的文件,然后常见命令操作也要熟悉一下。2.下载Linu.

2021-11-29 20:16:12 713

转载 Linux 内核启动及文件系统加载过程

Linux 内核启动及文件系统加载过程当u-boot 开始执行 bootcmd 命令,就进入 Linux 内核启动阶段。普通 Linux 内核的启动过程也可以分为两个阶段。本文以项目中使用的 linux-2.6.37 版源码为例分三个阶段来描述内核启动全过程。第一阶段为内核自解压过程,第二阶段主要工作是设置ARM处理器工作模式、使能 MMU 、设置一级页表等,而第三阶段则主要为C代码,包括内核初始化的全部工作。最后小编自己整理了一些个人觉得比较好的学习书籍、视频资料有需要的可以私信【内核】免费领取

2021-11-29 17:30:48 1143

转载 linux内核-内存管理 - 物理内存

本篇从我自己的角度来写对物理内存管理的理解。由于 Linux 引入了虚拟内存的概念,应用程序对物理内存的访问都是由内核模块来接管的,因此带着以下问题,逐步揭开相关的细节:内核是使用什么地址访问物理内存的? 物理内存为何需要分区? 伙伴系统和 SLAB 系统 有何区别?页框管理想要管理内存,首先要知道有哪些内存,并且把内存状态记录下来。物理内存默认以 4k 分割为一个个的单元,每个单元被称为页框(page frame)。内核使用struct page数组跟踪内存中每个页框的当前状态。数组的每个元..

2021-11-24 19:55:39 207

转载 内核该怎么学?Linux进程管理工作原理(代码演示)

前言:Linux内核里大部分都是C语言。建议先看《Linux内核设计与实现(Linux Kernel Development)》,Robert Love,也就是LKD。Linux是一种动态系统,能够适应不断变化的计算需求。Linux计算需求的表现是以进程的通用抽象为中心的。进程可以是短期的(从命令行执行的一个命令),也可以是长期的(一种网络服务)。因此,对进程及其调度进行一般管理就显得极为重要。在用户空间,进程是由进程标识符(PID)表示的。从用户的角度来看,一个 PID 是一个数字值,可惟一标识一

2021-11-20 21:33:06 80

转载 【Linux内核源码分析】 Linux内核中watchdog

在linux内核中有三个watchdog(看门狗),它们都需要被悉心的喂养照料,分别是:1. /dev/watchdog2.softlockup检测机制3.hardlockup检测机制首先看 1./dev/watchdog,此看门狗该怎样喂养呢,linux内核中有一段样例代码:samples/watchdog/watchdog-simple.c 1// SPDX-License-Identifier: GPL-2.0 2#include <stdio.h> 3#inclu

2021-11-19 21:41:56 202

转载 一文完全读懂 | Linux中断处理

什么是中断中断是为了解决外部设备完成某些工作后通知CPU的一种机制(譬如硬盘完成读写操作后通过中断告知CPU已经完成)。早期没有中断机制的计算机就不得不通过轮询来查询外部设备的状态,由于轮询是试探查询的(也就是说设备不一定是就绪状态),所以往往要做很多无用的查询,从而导致效率非常低下。由于中断是由外部设备主动通知CPU的,所以不需要CPU进行轮询去查询,效率大大提升。从物理学的角度看,中断是一种电信号,由硬件设备产生,并直接送入中断控制器(如 8259A)的输入引脚上,然后再由中断控制器向处理器发.

2021-11-19 21:19:00 344

转载 linux内核源码分析进程的管理与调度

进程管理进程描写叙述符及任务结构 进程存放在叫做任务队列(tasklist)的双向循环链表中。链表中的每一项包括一个详细进程的全部信息,类型为task_struct,称为进程描写叙述符(process descriptor),该结构定义在<linux/sched.h>文件里。 Linux通过slab分配器分配task_struct结构,这样能达到对象复用和缓存着色(cache coloring)的目的。还有一方面,为了避免使用额外的寄存器存储专门记录,让像x86这样寄存器...

2021-11-18 22:25:03 336

转载 【无标题】

检查一下你的系统所使用的 Linux 内核版本,你十有八九会发现,按照 Linux 内核官网提供的信息,该内核版本已经达到使用寿命终期(EOL)了。一个软件一旦达到了使用寿命终期,那么就意味着它再也不会得到 bug 修复和维护了。这自然会引发一连串问题:为什么我的 Linux 发行版会使用一个已经达到使用寿命终期的内核呢?这样做有没有安全风险?我的系统还安全吗?下面将逐一解答这些问题。总结 上游内核维护与你的发行版的内核维护是两个不同的概念。 例如,根据 Linux 内核官网,Linux

2021-11-17 21:05:11 17

转载 为什么你的发行版仍然在使用“过时的”Linux内核?

检查一下你的系统所使用的 Linux 内核版本,你十有八九会发现,按照 Linux 内核官网提供的信息,该内核版本已经达到使用寿命终期(EOL)了。一个软件一旦达到了使用寿命终期,那么就意味着它再也不会得到 bug 修复和维护了。这自然会引发一连串问题:为什么我的 Linux 发行版会使用一个已经达到使用寿命终期的内核呢?这样做有没有安全风险?我的系统还安全吗?下面将逐一解答这些问题。总结上游内核维护与你的发行版的内核维护是两个不同的概念。例如,根据 Linux 内核官网,Linu

2021-11-17 20:59:26 69

转载 Linux 内核静态追踪技术的实现

本文简单分享一下内核的静态追踪技术的实现。追踪,其实就是收集代码在执行时的一些信息,以便协助排查问题。前言:最近在探索 Node.js 调试和诊断方向的内容,因为 Node.js 提供的能力有时候可能无法解决问题,比如堆内存没有变化,但是 rss 一直上涨。所以需要深入一点去了解更多的排查问题方式。而这些方向往往都涉及到底层的东西,所以就自然需要去了解内核提供的一些技术,内核提供的能力,经过多年的发展,可谓是百花齐放,而且非常复杂。本文简单分享一下内核的静态追踪技术的实现。追踪,其实就是收集代码在执行时

2021-11-17 20:49:20 157

转载 linux网络协议该如何去理解

Linux网络协议栈基于分层的设计思想,总共分为四层,从下往上依次是:物理层,链路层,网络层,应用层。Linux网络协议栈其实是源于BSD的协议栈,它向上以及向下的接口以及协议栈本身的软件分层组织的非常好。 Linux的协议栈基于分层的设计思想,总共分为四层,从下往上依次是:物理层,链路层,网络层,应用层。物理层主要提供各种连接的物理设备,如各种网卡,串口卡等;链路层主要指的是提供对物理层进行访问的各种接口卡的驱动程序,如网卡驱动等;网路层的作用是负责将网络数据包传输到正确的位置,最重要的网

2021-11-16 21:29:53 35

转载 【驱动】网卡驱动·linux内核网络分层结构

Preface Linux内核对网络驱动程序使用统一的接口,并且对于网络设备采用面向对象的思想设计。 Linux内核采用分层结构处理网络数据包。分层结构与网络协议的结构匹配,既能简化数据包处理流程,又便于扩展和维护。内核网络结构在Linux内核中,对网络部分按照网络协议层、网络设备层、设备驱动功能层和网络媒介层的分层体系设计。网络驱动功能层主要通过网络驱动程序实现。在Linux内核,所有的网络设备都被抽象为一个接口处理,该接口提供了所有的网络操作。net...

2021-11-16 21:25:00 120

转载 【Linux技术】探究linux内核,超详细解析子系统

Linux内核的子系统内核是操作系统的核心。Linux内核提供很多基本功能,如虚拟内存、多任务、共享库、需求加载、共享写时拷贝(Copy-On-Write)以及网络功能等。增加各种不同功能导致内核代码不断增加。Linux内核把不同功能分成不同的子系统的方法,通过一种整体的结构把各种功能集合在一起,提高了工作效率。同时还提供动态加载模块的方式,为动态修改内核功能提供了灵活性。系统调用接口 用户程序通过软件中断后,调用系统内核提供的功能,这个在用户空间和内核提供的服务之间的接口称...

2021-11-16 21:16:39 192

转载 linux内核最小模块代码

linux内核最小模块在 Linux 里整体的框架是十分庞大的,里面包含了各种各样的组件,文件的数量也十分的庞大。那么怎样把这些文件加载到内核里面呢?Linux 对驱动有两种处理方式:把需要的功能在一开始全部编译进内核 动态加载内核最小模块代码(打印语句)#include <linux/init.h> /*module_init module_exit*/#include <linux/module.h> /*包含MODULE_LICENSE 文件*/

2021-11-13 20:35:30 48

转载 linux 内核开发huu红山竹发布于 2019-12-23linux的体系结构

linux的体系结构从大的方面可以分为用户空间(User Space)和内核空间(Kernal Space)。用户空间C库 用户应用程序 shell(某些体系包含)内核空间硬件平台 平台依赖代码 内核 系统调用接口系统分层从程序员的角度:将 linux 底层和和应用分开,将 linux 底层和应用分开,做应用的做应用,做底层的做底层,各干各的。经济学的基本原理是,分工产生效率。从安全的角度:为了保护内核。以 ARM 为例:ARM 实现了 7 种工作模式,不同模

2021-11-13 20:32:40 41

转载 linux-版本相关

查看内核版本命令:uname -rversion解析:3.10.0-128.el7.x86_643.10.0:主版本.次版本.释出版本-修改版本3.10:3.10版内核128: 表示这个当前版本的第5次微调patchEL7: EL :Red hat Enterprise Linux7: 用于red hat 7、centos7版本分类2.6之前:奇数,偶数区分版本主、次版本号为奇数:发展中版本(development): ex:2.5.xx主、次版本号为偶数:稳定版(stbl

2021-11-13 20:27:18 76

转载 Linux 内核及 GNU/Linux 操作系统的基本体系结构

1. Linux 内核简介内核:在计算机科学中是一个用来管理软件发出的数据 I/O(输入与输出)要求的计算机程序,将这些要求转 译为数据处理的指令并交由中央处理器(CPU)及计算机中其他电子组件进行处理,是现代操作系统中最基本 的部分。它是为众多应用程序提供对计算机硬件的安全访问的一部分软件,这种访问是有限的,并由内核决定 一个程序在什么时候对某部分硬件操作多长时间。直接对硬件操作是非常复杂的。所以内核通常提供一种硬件 抽象的方法,来完成这些操作。通过进程间通信机制及系统调用,应用进程可间接控制所需的硬

2021-11-10 19:42:03 151

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除