- 博客(10)
- 资源 (7)
- 收藏
- 关注
原创 ARMv8-A Exception Handling
本节来详细描述下ARMv8-A下的异常处理。异常的概述:当设备正在愉快的执行时候,此时发生了一个异常,处理器就必须暂停当前的任务,转而去处理发生的异常。当异常处理完毕后,处理就会发回到被打断的程序继续执行。此图就是描述异常的处理流程。异常的分类:异常分为同步异常和异步异常,而这两种异常的区别是:同步异常:如果异常的产生是通过执行指令,而且返回结果提供了产生异...
2020-03-31 18:26:52 1344
原创 ARMv8-A Process State, PSTATE
在ARMv8架构中,使用PSTATE用来描述当前处理器的状态信息。如下的图描述了PSTATE的每个字段的意义上面是PSTATE的各个bit位的含义,我们可以将其分为三组状态标志位 N Z C V 异常状态控制位 SS IL nRW EL SP 异常屏蔽位 D A I F 下面来详细描述下各个字段的含义:状态标志位 N(...
2020-03-30 17:55:59 7380 1
原创 ARMv8-A vs ARMv7 Registers
ARMv8-A General-Puspose RegistersARM8v-A提供了31个通用寄存器,分别是X0-X30。每个寄存器是64bits,可以在任何Exception Level访问。可以看到ARMv8-A总共提供了31个通用寄存器,分别为X0-X30。其中X29是栈帧寄存器,X30是LR链接寄存器。因为ARMv8-A为了兼容32位应用程序,所以放ARMv8-A中运行3...
2020-03-29 13:47:48 1201
原创 ARMv7 Processor modes
在ARMv7中定义了不同的特权级别。分别是PL0, PL1, PL2。而每种特权级别依赖处理器模式Processor modes在ARMv7中定义了九种不同的处理器模式User:就是所谓的用户模式,所处的级别最低,不能访问系统的所有资源。特权级别属于PL0FIQ:Fast IRQ,快速中断模式,特权级别属于PL1IRQ:中断模式,特权级别属于PL1Supervisor...
2020-03-27 17:29:37 3735
原创 ARMv8-A Exception Levels
在ARMv8中首次引入了Exception Level的概念,每个Exception Level代表了不同的特权级别。当然了ARMv7也存在同样的特权级别,只不过名字是用PL定义的。先来看下ARMv8的Exception Level的定义:ARMv8将特权级别分为4个level,分别是EL0,EL1,EL2,EL3。而每个level的特权不一样的,特权大小EL0<EL1...
2020-03-21 15:08:29 5566
原创 ARMv8-A architecture overview
从今天起,正式学习ARMv8-A架构的知识,其中会涉及到ARMv7-A的一些知识,用来和ARMv8-A做对比使用。学习过程中使用的文档:ARM Architecture Reference Manual for ARMv7, ARMv8 ARM Cortex-A75, A76 Core Technical Reference Manual(TRM) https://develop...
2020-03-20 18:32:21 2233
原创 Android tombstone文件是如何生成的
本节内容我们聚焦到androidQ上,分析android中一个用于debug的功能,那就是tombstone,俗称“墓碑”。现实生活中墓碑一般是给死人准备的,而在android系统中“墓碑”则是给进程准备的。为何Android要设计出这样一个东西呢? 因为android系统是运行在Linux Kernel内核之上的,当内核出现异常,则内核异常机制会分辨出是什么原因,处理不了的直接panic。而...
2020-03-14 14:44:08 12444 1
原创 NULL指针的奇妙之旅
今天带大家了解下NULL指针是如何形成的? 当然了我们要深入到操作系统中去看看为何访问一个NULL指令会报Segment Fault的错误。想必大家在接触计算机时都写过NULL指针的程序,尤其是玩C语言的小伙伴们。比如刚初始化的一个int类型指针,还没有赋值的时候就往这个指针赋值,然后运行就会出现Segment Fault的错误。#include <stdio.h>int...
2020-03-11 16:55:56 1202
原创 CFS调度主要代码分析二
在上一篇文章中我们分析CFS的主要代码,设计的内容有:进程创建时调度器是如何初始化一个进程的 进程是如何添加到CFS运行队列中 当进程添加到CFS运行队列中,是如何选择下一个进程运行的本节在围绕一个进程的生命周期,继续分析一个进程是如何被抢占? 如果睡眠? 如何被调度出去的?Schedule_tick(周期性调度)周期性调度就是Linux内核会在每一个tick的时候会去更新当前进...
2020-03-07 19:39:16 654
原创 CFS调度主要代码分析一
在前面学习了CFS调度的原理和主要的数据结构,今天我们就来进入代码分析环节。当然了代码分析只看主要主干不看毛细,同时我们也是根据一个进程是如何被调度的思路来分析一些重要的代码。在分析代码之前,有一些小函数需要先分析下,俗话说万丈高楼平地起,这些小函数还是很重要的。calc_delta_faircalc_delta_fair函数是用来计算进程的vruntime的函数。在之前CFS原理篇了...
2020-03-01 14:49:04 1611
ARMGIC手册详解.zip
2020-03-21
ARM_v8_architecture参考手册.zip
2020-03-21
ARMv8-A_Architecture.zip
2020-03-21
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人