Linux内核设计与实现 读书笔记(2)内核开发的准备

《Linux内核设计与实现》 第一章 读书笔记 Linux内核简介 《Linux内核设计与实现》 第一章 读书笔记 Linux内核简介 面试被怼了Linux内核,于是决定好好看一下这本书。作为经典书籍,Linux内核设计与实现是一本很重要的书籍。在大学本科的课程中已经学习过有关操作系统的内容,但只是比较粗略的学习。所以在这里看下《Linux内核设计与实现》,希望能对Linux内核有更加深入的理解。 第一章只是比较简单的介绍了Linux内核,包括它的历史,操作系统和内核简介,对比了Linux内核和传统Unix内核。并且介绍了Linux内核开发者社区。 操作系统和内核简介 内核是管理者或者是操作系统的核心,一个内核负责响应中断的中断服务程序,负责管理多个进程从而 立即下载

主要内容:

  • 获取内核源码
  • 内核源码的结构
  • 编译内核的方法
  • 内核开发的特点

 

1. 获取内核源码

内核是开源的,所有获取源码特别方便,参照以下的网址,可以通过git或者直接下载压缩好的源码包。

http://www.kernel.org

 

2. 内核源码的结构

 

目录 说明
arch 特定体系结构的代码
block 块设备I/O层
crypo 加密API
Documentation 内核源码文档
drivers 设备驱动程序
firmware 使用某些驱动程序而需要的设备固件
fs VFS和各种文件系统
include 内核头文件
init 内核引导和初始化
ipc 进程间通信代码
kernel 像调度程序这样的核心子系统
lib 同样内核函数
mm 内存管理子系统和VM
net 网络子系统
samples 示例,示范代码
scripts 编译内核所用的脚本
security Linux 安全模块
sound 语音子系统
usr 早期用户空间代码(所谓的initramfs)
tools 在Linux开发中有用的工具
virt 虚拟化基础结构

 

3. 编译内核的方法

还未实际尝试过手动编译内核,只是用yum更新过内核。这部分等以后手动编译过再补上。

安装新的内核后,重启时会提示进入哪个内核。当多次安装新的内核后,启动列表会很长(因为有很多版本的内核),显得不是很方便。

下面介绍3种删除那些不用的内核的方法:(是如何安装的就选择相应的删除方法)

3.1 rpm 删除法

   rpm -qa | grep kernel*  (查找所有linux内核版本)
   rpm -e kernel-(想要删除的版本)

3.2 yum 删除法

   yum remove kernel-(要删除的版本)

3.3 手动删除

   删除/lib/modules/目录下不需要的内核库文件
   删除/usr/src/kernel/目录下不需要的内核源码
   删除/boot目录下启动的核心档案禾内核映像
   更改grub的配置,删除不需要的内核启动列表

 

4. 内核开发的特点

4.1  无标准C库

为了保证内核的小和高效,内核开发中不能使用C标准库,所以连最常用的printf函数也没有,但是还好有个printk函数来代替。

4.2 使用GNU C,推荐用gcc 4.4或以后的版本来编译内核

因为使用GNU C,所有内核中常使用GNU C中的一些扩展:

4.2.1 内联函数

内联函数在编译时会在它被调用的地方展开,减少了函数调用的开销,性能较好。但是,频繁的使用内联函数也会使代码变长,从而在运行时占用更多的内存。

所以内联函数使用时最好要满足以下几点:函数较小,会被反复调用,对程序的时间要求比较严格。

内联函数示例:static inline void sample();

4.2.2 内联汇编

内联汇编用于偏近底层或对执行时间严格要求的地方。示例如下:

unsigned int low, high;
asm volatile("rdtsc" : "=a" (low), "=d" (high));
/* low 和 high 分别包含64位时间戳的低32位和高32位 */
4.2.3 分支声明

如果能事先判断一个if语句时经常为真还是经常为假,那么可以用unlikely和likely来优化这段判断的代码。

复制代码
/* 如果error在绝大多数情况下为0(假) */
if (unlikely(error)) {
    /* ... */
}

/* 如果success在绝大多数情况下不为0(真) */
if (likely(success)) {
    /* ... */
}
复制代码
4.3 没有内存保护

因为内核是最低层的程序,所以如果内核访问的非法内存,那么整个系统都会挂掉!!所以内核开发的风险比用户程序开发的风险要大。

而且,内核中的内存是不分页的,每用一个字节的内存,物理内存就少一个字节。所以内核中使用内存一定要谨慎。

4.4 不使用浮点数

内核不能完美的支持浮点操作,使用浮点数时,需要人工保存和恢复浮点寄存器及其他一些繁琐的操作。

4.5 内核栈容积小且固定

内核栈的大小有编译内核时决定的,对于不用的体系结构,内核栈的大小虽然不一样,但都是固定的。

查看内核栈大小的方法:

ulimit -a | grep "stack size"
4.6 同步和并发

Linux是多用户的操作系统,所以必须处理好同步和并发操作,防止因竞争而出现死锁。

4.7 可移植性

Linux内核可用于不用的体现结构,支持多种硬件。所以开发时要时刻注意可移植性,尽量使用体系结构无关的代码。

泛微OA提交流程到下一个节点 泛微OA后端接口强制流程归档 阅读详情

相关推荐

飞腾Ubantu22.04.3安装OpenNebula测试

因OpenneBula官方镜像源只有AMD架构的镜像包不存在ARM的镜像包,借此用源码编译进行测试。

坚持就是胜利的博客 1010

linux内核设计与实现(读书笔记)

阅读书籍——Linux内核设计与实现的读书笔记。

weixin_44870037的博客 301

【verilog语法详解:从入门到精通】

Verilog语法详解:从入门到精通 摘要:本文系统讲解Verilog硬件描述语言的核心语法与应用。Verilog作为数字电路设计标准,具有并行执行、硬件映射和层次化三大特点。文章从基础语法框架入手,详细介绍了模块定义、端口类型(input/output/inout)声明规范,以及线网型(wire)和寄存器型(reg)两种核心数据类型的区别与应用场景。重点讲解了组合逻辑(assign连续赋值)和时序逻辑(always块)的实现方式,包括阻塞赋值(=)与非阻塞赋值(<=)的关键差异。此外,还涵盖了参数(

m0_58476824的博客 4683

【读书笔记-《Linux内核设计与实现》-1 进程管理】

本篇主要总结Linux操作系统中进程相关的基本内容。

Ocean1994的博客 819

深入NAND Flash信号与接口:结合ONFI 5.0协议,聊聊DBI、ODT和差分信号到底在解决什么实际问题

本文深入探讨了NAND Flash信号与接口设计,结合ONFI 5.0协议,详细解析了DBI、ODT和差分信号等技术如何解决高速数据传输中的信号完整性问题。通过实际案例和数据,展示了这些技术在降低功耗、减少噪声和提升抗干扰能力方面的显著效果,为存储工程师提供了宝贵的实践参考。

weixin_33736649的博客 343

超实用!VS Code配置C/C++开发环境全攻略

本文提供了一份详细的VS Code配置C/C++开发环境全攻略。从MinGW-w64编译器的选择与安装,到VS Code核心扩展的配置,再到tasks.json构建任务与launch.json调试环境的设置,手把手指导初学者完成从环境搭建到高效开发与调试的全过程,帮助开发者快速上手C/C++项目。

weixin_28829479的博客 185

《Linux内核设计与实现》读书笔记

《Linux内核设计与实现》读书笔记,我的评价是,不行

weixin_42065178的博客 1102

运算放大器多谐振荡器设计实战:从施密特触发器到波形生成

本文详细介绍了运算放大器在多谐振荡器设计中的实战应用,涵盖施密特触发器的迟滞比较原理、非稳态振荡器的自激机制以及单稳态和双稳态电路的设计技巧。通过具体案例和参数计算,帮助工程师掌握波形生成与信号处理的核心技术,提升电路设计效率与稳定性。

pz89012345的博客 217

《Linux内核设计与实现》读书笔记(二)- 内核开发的准备

在尝试内核开发之前,需要对内核有个整体的了解。 主要内容: 获取内核源码 内核源码的结构 编译内核的方法 内核开发的特点   1. 获取内核源码 内核是开源的,所有获取源码特别方便,参照以下的网址,可以通过git或者直接下载压缩好的源码包。 http://www.kernel.org   2. 内核源码的结构   目录 说明 arch ...

weixin_33672400的博客 124

Unity 工具 之 Natcorder 插件实现录频、拍照jpg、生成Gif动图功能(适用移动端)

Unity 工具 之 插件实现录频、拍照jpg、生成Gif动图功能(适用移动端) 目录 Unity 工具 之 插件实现录频、拍照jpg、生成Gif动图功能(适用移动端) 一、简单介绍 二、插件导入使用 三、几个 Demo 演示效果 四、关键代码 五、下载地址 一、简单介绍 Unity 工具类,自己整理的一些游戏开发可能用到的模块,单独独立使用,方便游戏开发。 本节介绍,使用Unity插件,进行屏幕录制,生成图片,gif 动图,以及mp4文件等;能录制场景,也能录制摄像头,多功能录

仙魁XAN 7559

流程图详解Transformer最核心的多头注意力机制,QKV流向清晰明了

本文详细讲解了Transformer模型中的多头注意力机制(Multi-head Attention)。通过类比多人评估同一事物的不同视角,说明多头机制能综合多个注意力权重获得更有效的输出。文章逐步推导了多头注意力的计算过程:将输入矩阵X(4×512维)分别与8组Q、K、V权重矩阵相乘,得到8组head(每组4×64维),拼接后经Wo矩阵变换恢复为4×512维输出。整个过程涉及37个待训练参数矩阵(1个Wo、8组Wq/Wk/Wv)。该机制通过并行计算多个注意力头,能更全面捕捉输入特征间的复杂关系。

人工智能研究所的博客 259

Linux内核设计与实现

《Linux内核设计与实现》读书笔记 目录: 《Linux内核设计与实现》读书笔记(一)-内核简介 《Linux内核设计与实现》读书笔记(二)- 内核开发的准备 《Linux内核设计与实现》读书笔记(三)- Linux的进程 《Linux内核设计与实现》读书笔记(四)- 进程的调度 《Linux内核设计与实现》读书笔记(五)- 系统调用 《Linux内核设计与实现》读书笔记(六)...

YBAdiam的博客 1470

OpenCV计算机视觉实战(12)——图像金字塔与特征缩放

图像金字塔技术通过对原始图像按不同分辨率进行多层次表示,不仅能提升计算效率,还能为图像融合、检测与识别提供多尺度特征。高斯金字塔 (Gaussian Pyramid) 用于构建多级低通图像,拉普拉斯金字塔 (Laplacian Pyramid) 则提取各层之间的细节信息。本节将深入介绍如何使用 OpenCV 构建高斯与拉普拉斯金字塔,并以经典的图像融合案例,展示图像金字塔在特征缩放与融合中的强大应用。

qq_30167691的博客 1404

《Linux内核设计与实现》读书笔记 - 目录 (完结)

读完这本书回过头才发现, 第一篇笔记居然是 2012年8月发的, 将近一年半的时间才看完这本书(汗!!!). 为了方便以后查看, 做个《Linux内核设计与实现》读书笔记 的目录: 《Linux内核设计与实现》读书笔记(一)-内核简介 《Linux内核设计与实现》读书笔记(二)- 内核开发的准备 《Linux内核设计与实现》读书笔记(三)- Linux的进程 《L...

weixin_30586085的博客 425

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Linux内核设计与实现学习笔记目录

读了一篇学习笔记,发现非常好,遂将目录搂过来,茶余饭后,好好品、细品. 人家是2013年就写出来了,想想自己2013年的时候干啥来,low逼一个, 我就不明白,同样两条胳膊两条腿、同样享受高等教育,为何别人如此优秀,我确确如此垃圾 1、《Linux内核设计与实现》读书笔记(一)-内核简介 2、《Linux内核设计与实现》读书笔记(二)- 内核开发的准备 3、《Linux内核设计与实现》读书笔记(三)- Linux的进程 4、《Linux内核设计与实现》读书笔记(四)- 进程的调度 5、《Linux内核设计与

baron-周贺贺-代码改变世界ctw 2038

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

《Linux内核设计与实现》读书笔记 - 目录

《Linux内核设计与实现》读书笔记 - 目录 (完结) 读完这本书回过头才发现, 第一篇笔记居然是 2012年8月发的, 将近一年半的时间才看完这本书(汗!!!). 为了方便以后查看, 做个《Linux内核设计与实现》读书笔记 的目录: 《Linux内核设计与实现》读书笔记(一)-内核简介 《Linux内核设计与实现》读书笔记(二)- 内核开发的准备 《Linux内核设计与实现》读书笔记(三)-...

mhHao的博客 345

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

《Linux内核设计与实现》读书笔记—进程管理

进程 进程并不仅仅局限于一段可执行程序代码。通常进程还要包含其他资源,像打开的文件,挂起的信号,内核内部数据,处理器状态,一个或多个具有内存映射的内存地址空间,一个或多个执行线程,存放全局变量的数据段。 每个线程都拥有一个独立的线程栈,线程寄存器和程序计数器。 一般会在栈顶创建一个结构体struct Thread_Info,该数据结构中保存指向进程描述符task_struct的指针。 内核通过一个唯一的进程标识符PID来 标识每个进程 一个进程必然处于五种进程状态中的一种:TASK_RUNN

breakfei11的博客 502

《操作系统实践-基于Linux应用与内核编程》第10章-Linux综合应用

内容参考《操作系统实践-基于Linux应用与内核编程》一书的示例代码和教材内容,所做的读书笔记。本文记录再这里按照书中示例做一遍代码编程实践加深对操作系统的理解。本节介绍系统需求以及本章的内容安排,以便读者了解本章知识轮廓和与前面一些章节的关系。

小狗爱吃黄桃罐头的博客 1018

千里之行,始于足下的博客园《Linux内核设计与实现》读书笔记

当前标签: linux-kernel 1、《Linux内核设计与实现》读书笔记(一)-内核简介 wang_yb 2012-08-15 23:33 阅读:1719 评论:2   2、《Linux内核设计与实现》读书笔记(二)- 内核开发的准备 wang_yb 2012-08-16 10:20 阅读:1474 评论:0   3、《Linux内核设计

蓝旭晨枫╮ 569

《Linux内核设计与实现》Chapter 18 读书笔记

《Linux内核设计与实现》Chapter 18 读书笔记 一、准备开始 一个bug 一个藏匿bug的内核版本 知道这个bug最早出现在哪个内核版本中。 相关内核代码的知识和运气 想要成功进行调试: 让这些错误重现 抽象出问题 从代码中搜索 二、内核中的bug 1.内核bug的表象: 错误代码 同步时发生的错误,例如共享变量锁定不...

aochandao4900的博客 179
上一篇: Linux内核设计与实现 读书笔记(1)内核简介
下一篇: Linux内核设计与实现 读书笔记(3)Linux的进程
LinuxBreak
博客等级 码龄12年 2粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值