Linux源码 | Thermal框架源码剖析

1. 框架结构thermal core:thermal主要的程序,驱动初始化程序,维系thermal zone、governor、cooling device三者的关系。thermal zone device:创建thermal zone节点和连接thermal sensor,在/sys/class/thermal/目录下的thermal_zone*,通过dtsi文件进行配置生成。thermal

- 阅读全文 -

Linux内核 | 进程调度

1. 进程调度原理最大限度地利用处理器时间,只要有可以执行的进程,那么就总会有进程正在执行。按多任务系统分类抢占式多任务非抢占式多任务按进程分类IO消耗型:进程的大部分时间用来提交I/O请求或是等待I/O请求。处理器消耗型:进程的大部分时间在执行代码1.1 进程优先级根据进程的价值和其对处理器的时间需求对进程进行分级。Linux采用了两种优先级范围nice值,范围[-20,19],nice值越大,

- 阅读全文 -

Linux内核 | 进程管理

1. 进程和线程1.1 定义进程是处于运行状态的程序和相关资源的总称,是资源分配的最小单位。线程是进程的内部的一个执行序列,是CPU调度的最小单位。有一段可执行程序代码。有一段进程专用的系统堆栈空间和系统空间堆栈。有进程描述符,用于描述进程的相关信息。有独立的存储空间,也就是专有的用户空间,相应的又会有用户空间堆栈。Linux系统对于线程实现非常特殊,他并不区分线程和进程,线程只是一种特殊的进程罢

- 阅读全文 -

嵌入式 | ARM中断异常

<div align=center></div> <div align=center></div> 异常优先级:<div align=center></div> ARM处理器的异常空间:<div align=center></div> 在所有异常的入口,IRQ 中

- 阅读全文 -

汇编 | CPU提供的栈机制

CPU提供的栈机制:push 寄存器/段寄存器/内存单元:将寄存器/段寄存器/内存单元中的数据压入栈中 pop 寄存器/段寄存器/内存单元:从栈顶取出的数据送入寄存器/段寄存器/内存单元中push和pop实质上是一种内存传送指令。8086CPU的push和pop都是以字为单位进行。栈顶的段地址存放在SS中,偏移地址存放在SP中。SS:SP指向栈中的第一个元素。**注:栈顶在上面,低位在上面。在80

- 阅读全文 -

汇编 | 寄存器篇

8086CPU内存中字的存储:CPU中,用16位寄存器来存储一个字,高8位存放高位字节,低8位存放低位字节。在内存中存储时,由于内存单元是字节单元,一个字要用两个地址连续的内存单元来存放。字的低位字节存在低位地址单元中,字的高位字节存在高位地址单元。起始地址(低位)为N,则为N地址字单元。CPU中DS寄存器通常用来存放要访问数据的段地址。 如下几种形式:mov 寄存器,数据 mov 寄存器,寄存器

- 阅读全文 -

汇编 | loop和[bx]指令解析篇

编译运行过程编程 :asm编译:obj连接:exe加载内存中的程序运行DS寄存器是存的是程序段地址,IP是程序偏移地址,DS:IP是程序起点,程序前面先创建PSP(256字节)(程序段前缀)的数据区,DOS利用PSP和加载的程序进行通信,256字节后为程序区。CS:IP是程序入口,存在程序区。 inc bx是bx中的内容加1 注意点:在cx中存放循环的次数loop指令中的标号所标识地址要在前面要循

- 阅读全文 -

汇编 | 入门代码篇

assume 寄存器:段名 ;将寄存器和代码段联系一起 段名 segment ;一个段的开始 ... ... 段名 ends ;一个段的结束 mov ax,4c00H ;程序返回 int 21H end

- 阅读全文 -

算法 | 求解约瑟夫环问题(循环单链表)

问题利用循环单链表求解约瑟夫环问题(即n个人围成一个圆圈,然后从第一个人开始,按:1,2,3,…,m报数,数到m的人出圈,并有出圈者的下一个人重新开始报数,数到m又要出圈,如此类推,直到所有人都出圈,打印出圈的次序,其中n和m为输入数据)测试用例 输入 9 3 输出 3,6,9,4,8,5,2,7,1代码实现#include <stdio.h> #include <stdli

- 阅读全文 -