![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux
文章平均质量分 87
馒头2870
这个作者很懒,什么都没留下…
展开
-
bcc和ftrace追踪内核网络模块实战
bcc是ebpf技术的一个前端,集成了ebpf/kprobe/uprobe的很多东西,对一些常见功能做了整合。而ebpf是近几年出现的比较热门的一项技术,它的前身是bpf(Berkeley Packet Filter),也就是我们tcpdump使用的过滤数据包的技术。ebpf对bpf进行了扩展,它能在内核中运行自定义程序, 而无需修改内核源码或者加载内核模块。ftrace有两种概念,一种是广义的ftrace框架,一种是狭义的追踪技术。原创 2022-09-02 16:45:27 · 705 阅读 · 0 评论 -
【kernel】【patch学习】一个字段使文件系统性能提升224%
一个字段,如何使文件系统性能提升224%原创 2022-07-23 19:13:57 · 485 阅读 · 0 评论 -
qemu+gdb调试内核环境搭建,亲自踩坑记录
前言想搭建个qemu+gdb的环境,看网上的文档都非常简单,结果自己弄了13个小时才给调好,赶紧记录下来以免以后再踩相同的坑原创 2021-12-18 21:22:48 · 1335 阅读 · 0 评论 -
性能分析工具
perf安装:yum install perf -y使用:perf record ./a.outperf report可以看到各个函数花费的时间。原创 2020-12-22 19:00:27 · 184 阅读 · 0 评论 -
【linux0.12】超级块、缓冲块、i节点等数据结构
因为代码中很多地方都用到了这几种数据结构,所以还是统一的放在一篇文章中把。缓冲头结构struct buffer_head { char * b_data; //指向真正缓冲块的指针 unsigned long b_blocknr; //数据的逻辑块号 unsigned short b_dev; //设备号 unsigned char b_uptodate; //更新标识:数据是否更新(有效),理解为有效更好原创 2020-12-16 16:22:39 · 360 阅读 · 0 评论 -
【linux0.12】i节点操作
TODO原创 2020-12-14 14:08:36 · 350 阅读 · 0 评论 -
【linux0.12】从open系统调用到磁头柱面扇区下篇-----代码讲解
文章目录前言sys_open前置知识代码讲解总结open_namei代码讲解总结dir_namei代码讲解总结get_dir代码讲解其他follow_link总结前言 本文只是讲解打开常规文件(不是块设备文件、字符设备文件等)过程中的主要逻辑,包括目录项的查找,文件名到i节点的映射,i节点的使用,盘块的使用,请求队列的组织与使用,限于篇幅也不会面面俱到的把代码中每个细节都讲到,只讲解其中的骨架代码,一些细节部分如i节点管理与操作,目录项管理与操作等放在单独的文章中讲解,防止主次不分。另外代码中还含有高原创 2020-12-13 16:47:18 · 164 阅读 · 0 评论 -
【linux0.12】盘块位图和i节点位图的管理与操作
TODO原创 2020-12-13 15:41:15 · 601 阅读 · 0 评论 -
【linux0.12】目录项管理与操作
TODO原创 2020-12-13 13:44:25 · 199 阅读 · 0 评论 -
【linux0.12】linux0.11下增加系统调用whoami
系统调用的初始化在系统启动main函数之后,会调用kernel/sched.c中的sched_init,里面对系统调用的初始化就一句set_system_gate(0x80,&system_call);这个0x80就是我们的中断号,而system_call函数则是中断服务程序。set_system_gate是一段宏替换,代码如下1 #define _set_gate(gate_add...原创 2020-04-18 23:25:50 · 620 阅读 · 0 评论 -
【linux0.12】文件高速缓冲区管理
概述 为什么要有高速缓冲区?直接对磁盘进行IO操作的速度与内存和cpu处理的速度是相比是非常慢的,为了提高系统性能,设立了高速缓冲区。内核访问块设备中的数据,都需要经过高速缓冲区来间接地进行操作。 高速缓冲区对外提供了三个接口,块读取函数bread、块提前预读函数breada和页块读取函数bread_page,页块读取函数一次读取一页内存所能容纳的缓冲区块数(4块)。我们只讲解其中的bread函数,用户只需提供设备号和逻辑块号就可以通过bread来进行操作高速缓冲区,以达到间接操作磁盘的目的。原创 2020-12-10 09:09:49 · 308 阅读 · 0 评论 -
【linux0.12】从open系统调用到柱面磁头扇区上篇-----原理讲解
上篇只讲原理,较少涉及代码,下篇将从代码层面进行讲解 虽然标题是从系统调用到柱面磁头扇区,但我们知道,操作系统是联系硬件和用户的一个中间层,为用户操作硬件提供了方便和高效,操作系统的任何操作最终都会落实到硬件(这里是磁盘)上,所以我选择了从硬件开始讲起,看操作系统是如何一步一步把磁盘抽象为最终的文件系统的,反过来也就是用户如何通过文件系统来达到操作磁盘的目的。磁盘先来看一下磁盘的物理结构 通过下方的图片,我们可以知道磁盘是由盘面,磁头,磁臂组成的,其他的磁道,扇区,柱面是人为的划分,物理上只原创 2020-11-12 23:52:21 · 316 阅读 · 0 评论 -
【linux0.12】linux0.12中的内存寻址过程
linux0.12是结合了分段和分页两种机制来完成程序的逻辑地址到物理地址的转换,所以地址转换分为两个阶段,第一阶段使用分段基址把逻辑地址转换为线性地址空间,第二阶段使用分页基址把线性地址转换为物理地址。下面举一个具体的例子来讲述一下linux0.11是如何把这两种机制结合使用的。 首先我们要了解,硬件为存放段选择符提供了6个段寄存器:CS、DS、ES、SS、FS、GS,其中CS专门用于代码段的寻址,DS专门用于数据段的寻址、SS专门用于堆栈段的寻址,其余三个寄存器作辅助用。 我们知道,程序运行原创 2020-11-10 22:17:33 · 142 阅读 · 0 评论 -
centos7安装vim8以及YCM等插件
准备:升级到vim8,升级到gcc最新版本,安装一些依赖安装依赖yum install python python3 python3-devel gcc gcc-c++ cmake -y升级vim8:首先卸载原先的vim:yum remove vim因为github下载vim源码过慢,所以通过wget的方式来下载:升级gcc:首先下载源码:$ wget http://ftp.gnu.org/gnu/gcc/gcc-8.3.0/gcc-8.3.0.tar.gz然后解压并进入该目录:原创 2020-11-04 18:12:15 · 657 阅读 · 0 评论 -
【linux0.12】实验楼操作系统原理与实践之实验五:基于内核栈切换的进程切换
简介 早期内核使用intel提供的基于tss切换的机制,这种机制操作十分简单,但是执行速度特别慢,无法充分利用现代cpu的一些指令流水来优化速度。关于tss切换的方式详细可以看实验楼中的描述,和完全剖析这本书。根据老师的实验,要把这种基于tss切换的方式换成现代的基于内核栈切换的方式。 基于堆栈的切换,核心就是要先在切换前保存进程的栈,然后切换到另一个进程的栈,但因原创 2020-06-25 13:18:35 · 450 阅读 · 0 评论 -
gdb使用
disassemble /rm:反汇编/r指示显示十六进制的计算机指令(raw instruction)/m指示显示汇编指令的同时,显示相应的程序源码原创 2020-06-19 15:40:04 · 291 阅读 · 0 评论 -
捕捉段错误信号,产生core文件,而不使进程挂掉
这几天老大给了个需求,说要让程序在出错的时候像python那样打印堆栈,于是网上一顿搜(面向谷歌编程),大多是说用exeinfo.h里的trace_back等函数,但无意间看见了一篇帖子,可以在程序中调用gdb打印堆栈,更加方便。附源码如下:#include <stdio.h>#include <string.h>#include <sys/wait.h>#include <sys/types.h>#include <unistd.h>原创 2020-05-10 21:57:01 · 826 阅读 · 0 评论 -
Makefile实现混合编译不同目录下不同的.c .cc .cpp文件,并以不同的编译方式编译
Makefile实现编译不同目录下不同的.c .cc .cpp文件需求要求一个makefile可编译不同目录下的所有.c .cc .cpp文件,根据build.sh传入的不同参数来实现编译不同目录文件结构如下Makefiledir1下有main.c func.c build.shdir2下有main.c func.cc build.shdir3下有main.c func.cpp bu...原创 2020-04-11 21:29:52 · 1632 阅读 · 0 评论