TUPELO Blog

Thinking will not overcome fear but action will.

Linux内核16-中断和异常

理解中断和异常的基本概念

1 中断和异常 中断定义:通常被定义为改变CPU指令执行序列的事件。 中断可以分为异步和同步中断: 同步中断,是由CPU在执行指令时由CPU控制单元产生的中断。这意味着,CPU必须停止指令的执行,转而响应中断。通常情况下,同步中断就是指 异常。 异步中断,是由外部设备随机产生的,信号采样按照CPU时钟信号。异步中断就是我们通常情况下所指的中断。一般是...

Linux内核15-_do_fork()

分析Linux内核创建进程的过程

1. _do_fork()函数 不论是clone()、fork()还是vfork(),它们最核心的部分还是调用_do_fork()(一个与体系无关的函数),完成创建进程的工作。它具有如下参数: 早期版本中是调用do_fork()函数。其实,_do_fork和do_fork在进程的复制的时候并没有太大的区别, 他们就只是在进程tls复制的过程中实现有细微差别 下面是_do_for...

Linux内核14-clone()、fork()和vfork()的区别

分析Linux内核中三个创建子进程的系统调用之间的差异

在分析这三个系统调用之前,先来理解一下进程的4要素: 执行代码 每个进程或者线程都要有自己的执行代码,不论是独立的,还是共享的一段代码。 私有堆栈空间 进程具有自己独立的堆栈空间,但是对于线程来说它是共享的。 进程控制块(task_struct) 不论是进程还是线程,都有自己的task_struct。Li...

Linux内核13-进程切换

linux内核进程切换是如何实现的

1 进程切换 进程切换,又称为任务切换、上下文切换、或者任务调度。本文就研究Linux内核的进程切换。我们首先理解几个概念。 1.1 硬件上下文 我们知道每个进程都有自己的地址空间,但是所有的进程却共享CPU寄存器。所以,在恢复进程执行之前,内核必须保证该进程在挂起时的寄存器值重新加载到CPU的寄存器中。 这些需要加载到CPU寄存器中的值就成为硬件上下文。硬件上下文是进程执行上下文的...

linux内核1-GNU汇编入门_X86-64&ARM

本文是汇编语言的一个入门资料

1 引言 为了阅读Linux内核源代码,是需要一些汇编语言知识的。因为与架构相关的代码基本上都是用汇编语言编写的,所以掌握一些基本的汇编语言语法,能够更好地理解Linux内核源代码,甚至可以对各种架构的差异有一个更深入的理解。 大部分人可能认为汇编语言晦涩难懂,阅读手册又冗长乏味。但是,经过本人的经验,可能常用的指令也就是30个。许多其它的指令都是解决特定的情况而出现,比如浮点运算和多媒...

Linux内核12-进程资源限制

进程资源的限制及其种类

进程资源限制 每个进程都需要进行资源限制,避免把系统搞垮(比如对CPU的使用,硬盘空间的占用等等)。基于这个目的,Linux内核在每个进程的进程描述符中还应该包含资源限制的数据结构,Linux使用了一个数组成员,该数组成员的包含关系为current->signal->rlim,数组的定义如下所示: struct rlimit rlim[RLIM_NLIMITS]; 其中...

Linux内核11-进程之间的关系

进程关系是通过怎样的数据结构实现的

1 进程之间关系 我们已经或多或少知道,进程具有父子关系,不仅如此,还有兄弟关系。所以,进程描述符中必须有几个成员是记录这种关系的(P是创建的进程),具体可以参考下表。进程0和1是由内核创建的,后面我们会看到,进程1(init)是所有其它进程的祖先。 表3-3 进程中用来表述父子、兄弟关系的成员 成员名称 描述 ...

Linux内核10-list_head和hlist_head的理解

对linux内核中使用的链表结构做一个深入的研究

1 概述 在Linux内核中,对于数据的管理,提供了2种类型的双向链表:一种是使用list_head结构体构成的环形双向链表;另一种是使用hlist_head和hlist_node2个结构体构成的具有表头的链型双向链表。 list_head的结构体如下所示: struct list_head { struct list_head *next, *prev; }; hlist...

嵌入式Linux学习路线

自己总结的个人学习linux的路线,主要是嵌入式方向

自己总结的Linux学习路线,还在这条路上继续奔跑着… 我将其总结为4个阶段吧: 入门 - 抛弃旧的思维习惯,熟练使用 Linux 命令行 从Window切换到Linux是一件很痛苦的事情,因为人类接受信息最快的方式就是图形化的信息。所以,我们需要先从熟悉命令行开始。在这一阶段,推荐的书籍是《鸟哥的私房菜》、《linux shell脚本攻略》。 ...

Linux内核0-使用QEMU和GDB调试Linux内核

基于x86架构搭建Linux内核调试环境

(文章大部分转载于:https://consen.github.io/2018/01/17/debug-linux-kernel-with-qemu-and-gdb/) 排查Linux内核Bug,研究内核机制,除了查看资料阅读源码,还可通过调试器,动态分析内核执行流程。 QEMU模拟器原生支持GDB调试器,这样可以很方便地使用GDB的强大功能对操作系统进行调试,如设置断点;单步执行;查看...