
内核设计
文章平均质量分 72
Eliot_shao
年轻人有先见之明。。。。。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
从上帝视角看进程调度
中断驱动OS这个死循环的运行。转载 2022-06-11 08:51:00 · 408 阅读 · 0 评论 -
free rtos 任务切换的理解
rtos 系统运行的几个要素:本质上,系统的运行依靠sys tick/PendSV 中断 驱动 任务管理程序完成任务切换执行不同任务程序。除sys tick/PendSV 中断 以外的中断程序执行。以及任务任务运行过程引发的任务阻塞,挂起,恢复。所以占有cpu的优先级:高优先级中断>sys tick/PendSV 中断>高优先级的任务>低优先级任务,cpu在各个代码跳来跳去。如图:引起任务阻塞的api:Tasks can enter the Blocked state...原创 2021-11-12 16:25:47 · 818 阅读 · 0 评论 -
FreeRTOS高级篇4---FreeRTOS任务切换分析
FreeRTOS任务相关的代码大约占总代码的一半左右,这些代码都在为一件事情而努力,即找到优先级最高的就绪任务,并使之获得CPU运行权。任务切换是这一过程的直接实施者,为了更快的找到优先级最高的就绪任务,任务切换的代码通常都是精心设计的,甚至会用到汇编指令或者与硬件相关的特性,比如Cortex-M3的CLZ指令。因此任务切换的大部分代码是由硬件移植层提供的,不同的平台,实现发方法也可能不同,这篇文章以Cortex-M3为例,讲述FreeRTOS任务切换的过程。FreeRTOS有两种方法触发任务切换...转载 2021-11-10 16:36:26 · 1267 阅读 · 0 评论 -
FreeRTOS的心跳
原创 2021-05-18 09:05:03 · 785 阅读 · 0 评论 -
FreeRTOS 中断使用信号量和任务同步失败
问题:在os的中断中使用信号量,和另外一个task进行同步,一段时间后会出现信号量获取失败,任务一直处于就绪状态但是无法继续运行。其他任务不受影响。测试方法:使用调试器:在isr中全局变量int_count计数和task中的全局变量int_count1基数对比,发现int_count1在运行一段时间后会停止,isr中int_count计数还在继续。ISR:int32_t CAN_IRQnCallBack(uint32_t event, uint32_t wparam, uint32_t lpa原创 2021-04-23 17:43:55 · 4416 阅读 · 1 评论 -
Select/poll 原理-中断
Select/poll 原理-中断Linux应用程序如果想判断一个设备是否可读可写,可以通过轮询的方式(io操作三种方式轮询,中断,dma),每隔一段时间去访问该设备 判断该设备是否可读可写,如果不行就返回,过一段时间再判断一次。也可以阻塞时的等待,此时进程就会睡眠。那么当有100个任务想要读写一个设备的时候,如果创建100个进程去阻塞或者轮询这个设备文件也挺夸张的。所以引入了select/poll机制(多路复用机制),只需要创建一个任务,将100个连接的句柄收集起来,传给操作系统,..原创 2020-11-03 17:10:51 · 1363 阅读 · 0 评论 -
Linux用户抢占和内核抢占详解
原文地址:https://blog.youkuaiyun.com/gatieme/article/details/51872618 前面我们了解了linux进程调度器的设计思路和注意框架周期调度器scheduler_tick通过linux定时器周期性的被激活, 进行程序调度进程主动放弃CPU或者发生阻塞时, 则会调用主调度器schedule进行程序调度在分析的过程中, 我们提到了内核抢占和用户...转载 2018-12-15 15:23:23 · 1917 阅读 · 0 评论 -
内存管理单元MMU使用实例
研究80386平台的分段寻址和分页寻址,为多任务处理提供了很多优势,但是理论写的很抽象。也有一些爱好者使用虚拟机研究x86的各种硬件机制,实现小型操作系统的。很佩服他们的定力和智慧。不过在研究他们的“著作”之前,建议参考“INTEL 80386 PROGRAMMER'S REFERENCE MANUAL 1986.pdf”,相信很多教材也是主要参考这个手册来进行讲解的。80836提出的“页式内...原创 2018-09-20 14:33:04 · 863 阅读 · 0 评论 -
操作系统内存管理--内存使用分布
一个由C/C++编译的程序占用的内存分为以下几个部分(1)栈区(stack)— 由编译器自动分配释放,存放函数的参数值,局部变量的值等。(2)堆区(heap) — 由程序员分配和释放,若程序员不释放,程序结束时可能由OS回收。(3)全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量、未初始化的静态变量在相邻的...原创 2018-09-05 11:23:06 · 1252 阅读 · 2 评论 -
链接器(LD)的工作内容
链接器做些什么 链接器之所以存在或者产生,基本上是由于程序开发的模块化。这里讲的模块,主要是编译概念上的模块,通常他们按照功能划分,比如一个.c或者.cpp文件就是一个编译单元,就是一个模块,编译后就产生一个.o目标文件。为了最终生成一个可执行文件、静态库或者动态库,就需要把各个编译单元按照特定的约定组合到一起。这里特定的约定指的就是“目标文件格式”,它定义了目标文件、库文件和可执行文件的格...原创 2018-08-29 17:58:13 · 5295 阅读 · 0 评论 -
(接上篇)反编译两种可执行文件
上篇地址:http://blog.youkuaiyun.com/eliot_shao/article/details/78648314上篇主要内容回顾:上篇内容介绍了静态编译生成静态库,然后链接静态库生成可执行文件的过程;也对比介绍了动态编译生成动态库然后链接动态库生成可执行文件的过程。我们也得出了结论:链接静态库生成的可执行文件main运行不依赖与静态库是否存在,而链接动态库生成的可执行文件ma原创 2017-11-27 20:56:28 · 9352 阅读 · 0 评论 -
linux动态编译和静态编译
为了使用方便,可以把这两个函数接口定义为动态链接库或静态链接库。用动态链接库编译生成的可执行文件需调用.so文件方可正常运行,灵活但稍显麻烦;用静态链接库编译生成的可执行文件可直接运行,不用再调用如.so般的依赖库文件,简单但不灵活。静态链接库:1、编译生成目标文件gcc -c struct.c2、创建静态库ar cqs libstruct.转载 2017-11-27 19:50:22 · 9425 阅读 · 1 评论 -
linux三种方式使用库:静态链接库,动态链接库,动态加载库
转载地址:http://blog.youkuaiyun.com/u014132659/article/details/52252298 +++原理+++linux调用库的方式有三种:1、静态链接库2、动态链接库3、动态加载库 动态链接库(共享库)和动态加载库文件没有任何区别,唯一区别是:动态链接库是程序运行一开始就要加载库,动态加载库是程序在运行到函数需要这个函数的实现的时转载 2017-11-29 13:59:32 · 1834 阅读 · 0 评论 -
从BIOS到内核的过程分析
在上一篇译文中说明了x86内存映射,在实时模式下,要做的工作还真不少,为了让操作系统放在内存开始运行起来时多么辛苦啊!下面将从整体上把握设计思想。这里主要从内存分布的角度来看这些程序。第一是BIOS,上电后cpu的IP指针指向BIOS内存区,开始执行BIOS程序。BIOS主要做的工作是POST(Power On Self Test,上电自检)创建中断向量、设置寄存器从软盘或原创 2014-11-20 17:39:43 · 3844 阅读 · 0 评论 -
x86内存映射
Contents 1 "Low" memory ( 1.1 Overview1.2 BIOS Data Area (BDA)1.3 Extended BIOS Data Area (EBDA)1.4 ROM Area2 "Upper" Memory (> 1 MiB)3 See Also3.1 External翻译 2014-11-20 17:06:45 · 3945 阅读 · 2 评论 -
Linux架构
作者:Vamei 出处:http://www.cnblogs.com/vamei转载 2014-08-18 11:09:41 · 969 阅读 · 0 评论