内存管理
任务在运行过程中对内存的需求是不断变化的不同的任务有不同的需要,OS 将内存当作一种资源来看并且在竞争的任务之间分配,这种资源就如同在竞争的任务间分配CPU 控制权一样。
 概述
在ITRON系统中所指的内存管理是通过对软件的内存区域进行动态的管理,也就是说在需要申请使用的时候就要确保,如果不需要的时候就进行归还的功能。
 图: Memory Pool示意图

在ITRON系统中,内存管理方法采用的是固定分区方式雏形,并且对内存区域分为内核区域核用户区域两个部分,并且这两个部分是单独进行管理的。系统内存池是否生成内核管理的各个对象时候使用的内存区域,这个区域里禁止作为用户内存池使用的。用户内存池是任务对内存区域进行申请时所使用的内存区域,并且这些内存池是相互独立的,所以可以通过给每个任务分配不同的内存池来避免任务见内存领域的竞争。
分区管理采用的是静态的内存分配方法, 系统分配和回收固定大小的存储块,其优点是存储块的分配和回收时间是确定的, 因为不会出现存储碎片, 因而也不需要做回收存储碎片, 进行合并等工作。
 图:内存分区

系统中, 可定义多个分区, 每个分区中存储块的大小可不同, 且可在分区中定义分区例如一个分区可以是另一个分区中的一块这就意味着存储块,可以很容易地被分为子存储块,另外还可以为同一块存储区域定义两个分区这样就可以从同一块存储区中分配两种不同尺寸的存储块。
 基本调用
cre_mpl: Generates a memory pool.
del_mpl: Deletes the memory pool.
get_blk: Acquires a memory block.
pget_blk: Acquires a memory block (by polling).
tget_blk: Acquires a memory block (with timeout setting).
rel_blk: Release a memory block.
ref_mpl: Acquires memory pool information.
vget_pid: Acquires ID information of the memory pool.
 内存池的创建
存在两种方式来创建内存池,一种是静态注册,另外一种方式是动态创建。动态创建的方法是通过cre_mpl调用来实现的。
 内存池的清除
del_mpl调用可以实现内存池的删除,当执行删除操作时,如果存在内存申请的任务处于等待状态的话,这些任务将直接迁移到Ready状态。
 内存申请
Itron系统中存在三种方式来实现内存的申请,get_blk, pget_blk,和 tget_blk,这三种调用的使用方式如下:
get_blk:申请指定大小的内存块,如果申请失败,任务状态将迁移到等待状态,直到有满足任务使用的内存被释放。
pget_blk:申请指定大小的内存块,如果申请成功,任务保持执行状态,如果失败,系统也不进行等待,直接运行其他指令。
tget_blk:如果没有申请到制订大小的内存,任务将等待指定的时间,之后迁移到Ready状态。
 内存释放
当系统发行rel_blk调用之后,内存被归还给系统。

 中断处理
中断是硬件机制,它向CPU发送信号,表示外部异步事件(无时序关系的随机事件)发生,如设备发送数据请求 内部运行异常等。
对中断的管理是OS的特征之一,一般来说当发生中断时,控制会转移到中断处理程序中,而控制转移到中断处理程序中的是硬件,软件不参与。但是在ITRON系统中,为了方便管理,内核提供了进行中断的通知,并将控制权转移给中断处理程序中的功能。
 中断处理的管理
为了提高中断的吞吐率,ITRON系统将中断分成两个处理等级来进行中断处理,一种是直接启动的中断Handler;另一种是中断任务。
 直接启动的中断Handler,处理时间可以在短时间内完成,并且要求响应速度的中断请求,这种中断Handler不需要通过OS的管理也能够启动的中断处理专用程序。
下图给出这种中断处理的执行过程。

中断任务,需要的处理时间比较长,并且对中断响应要求不是特别严格的场合使用。所谓中断任务指被中断处理程序唤醒或启动的中断处理专用任务。下图给出中断任务的处理流程。

中断例程的登录
直接启动中断的登录方法需要将中断服务Handler的地址登录到中断向量表中,但是如果中断任务就不能采用这种方式来定义,否则Itron系统将无法识别,所以中断任务的登陆方法就需要使用ITRON系统提供的支持来实现。下面图解表示了系统对中断任务的管理方式,请参考:

在Itron系统中,为了实现对中断任务的管理,在idt中登陆了缺省的中断处理程序,在调用用户注册的Isr之前,需要将中断请求登陆到Itron管理的虚拟IDT表中,这样系统就能够通过对虚拟中断向量表的管理来实现对中断任务的管理。

中断中的处理
因为中断例程的特殊性,所以在进行中断程序的设计和使用需要特别注意,否则会发生一些意想不到的问题,下面从几个方面进行说明。
 寄存器的保存和恢复;
这个部分是每个使用中断例程的系统都需要考虑的,但是这个部分需要根据实际CPU使用要求进行,本教材中仅仅提出提示,并不给出具体的限定条件。
 系统调用的限制;
一般说来,在中断例程中发行Itron系统调用与通常任务没有特别的区别,所以为了保证系统的安全性,在中断中,对于创建/删除Itron管理对象、有迁移到资源获取等待状态可能的调用以及可能产生tron式样中没有定义的状态迁移等,都被禁止使用,下面是否详细信息,请在、设计时候务必遵守。
不能被中断例程使用的系统调用:
sta_tsk、ext_tsk、ter_tsk、dis_dsp、ena_dsp、chg_pri、rot_rdq、rel_wai、sus_tsk、rsm_tsk、slp_tsk、tslp_tsk、dly_tsk、wup_tsk、set_flg、wai_flg、twai_flg、sig_sem、snd_msg、rcv_msg、trcv_msg、pget_blf、tget_blk、loc_cpu、unl_cpu等。

 时钟管理
在实时系统中,时间是操作任务过程中最基础的要素,在内核中的周期唤醒、延迟唤醒、Time Out等的操作都以它来作为基础。
 周期唤醒
对任务发行周期性的唤醒要求叫做周期唤醒。在ITRON系统中提供了周期唤醒任务来实现本机能。
下面方法实现了周期唤醒任务的实现:
def_cyc: Registers a cyclically activated handler.
act_cyc: Controls the activity state of the cyclically activated handler.
ref_cyc: Acquires cyclically activated handler information.

延迟唤醒
从当前时刻开始,经过指定的时间后唤醒的任务称作延迟唤醒。产生延迟唤醒的调用是dly_tsk,当调用发生时,系统的运行状态将迁移到等待状态,直到指定的时间Time Out之后才能迁移到Ready状态。Itron系统中管理的时钟是以毫秒为单位的,所以上面的计数都是以毫秒为单位进行累加,当计数到100时,系统唤醒任务,并切换任务到Ready状态,等待系统的调度。

Time Out指定
发行event flag等待、semaphore等待、Mailbox等待等功能调用时,可以指定等待的时间,这样的指定称作TimeOut指定。
tslp_tsk system call
twai_sem system call
twai_flg system call
trcv_msg system call

ITRON的内存管理,中断处理,时钟管理相关推荐

  1. linux内核时钟管理,Linux时钟管理透彻分析

    Linux时钟管理透彻分析.硬件资源越来越庞大和复杂,内核的另一个挑战就是要便捷的管理这些资源.同时,面对如此之多的平台不同的CPU,管理机制需要统一适用,这就需要对资源的管理抽象到更加通用的层次.C ...

  2. Linux 时钟管理

    Linux 时钟管理 时钟管理是操作系统不可或缺的一个重要组成部分.无论是应用程序还是内核本身都在大量使用各种各样的timer.本文介绍了Linux操作系统曾经使用和现在正在使用的时钟管理机制,着重阐 ...

  3. 搞懂时钟管理,看这个就好啦~

    本文分享自中移OneOS微信公众号<时钟管理>. 时钟管理包含两部分,第一部分是操作系统最小时间单位(时钟节拍),第二部分是基于时钟节拍的定时器,下面分别展开描述. 时钟节拍 时钟节拍是特 ...

  4. S3C2443时钟管理

    S3C2443时钟管理 S3C2443有两个PLL用来产生内部时钟,分别是MPLL和EPLL,其中MPLL为包括ARM,AHB和APB的总体功能模块产生内部时钟,而EPLL为比如是USB,I2S和ca ...

  5. 【原创】xenomai+linux双内核下的时钟管理机制

    双内核下的时钟管理机制 版权声明:本文为本文为博主原创文章,转载请注明出处.如有问题,欢迎指正.博客地址:https://www.cnblogs.com/wsg1100/ 文章目录 双内核下的时钟管理 ...

  6. Exynos4412芯片的时钟管理单元

    本章介绍Exynos4412芯片的时钟管理单元(CMU).CMU控制锁相环(PLL)并为Exynos4412芯片中的各个IP.总线和模块产生时钟.它们还与电源管理单元(PMU)通信,以便在进入某个低功 ...

  7. MMCME2_ADV介绍 高级混合模式时钟管理器(7 Series FPGA)

    目录 MMCME2_ADV 高级混合模式时钟管理器(Advanced Mixed Mode Clock Manager) Introduction Design Entry Method 端口描述(P ...

  8. Virtex-6器件的时钟资源、混合模式时钟管理器(MMCM)

    时钟资源 为了更好的控制时钟,Virtex-6器件分成若干个时钟区域,最小器件有6个区域,最大器件有18个区域.每个时钟区域高40个CLB.在时钟设计中,推荐使用片上专用的时钟资源,不推荐使用本地时钟 ...

  9. 【FPGA】Spartan-6的时钟管理器(CMT)

    目录 时钟管理器(CMT) DCM (1) 延时锁相环(DLL). (2) 数字频率综合器(DFS). (3) 相移单元(PS). (4) 状态逻辑. DCM原语 PLL 组成 工作原理 PLL的原语 ...

最新文章

  1. python 命令行参数-Python处理命令行参数
  2. 【Android 逆向】ELF 文件格式 ( ELF 文件类型 | ELF 文件对应 CPU 架构 | ELF 目标文件版本 | 可执行程序起始地址 )
  3. How to scroll the window using JQuery $.scrollTo() function
  4. 腾讯助力贵阳市智慧升级 共同探索创新型城市发展
  5. MAC显示隐藏文件和文件夹
  6. JavaScript 正则表达式 学习笔记(一)
  7. java 学生成绩排序
  8. 计算机原理华东理工大学期末成绩查询,华东理工大学微机原理历年真题第十一章.ppt...
  9. PostgreSQL 的 target_list分析(三)
  10. SQL显示数据库恢复挂起解决
  11. 48.XML保存衣服尺码信息
  12. 如何用python整理表格_Python 自动整理 Excel 表格
  13. 打印机服务器纸张属性不显示,为什么我的打印机能在打印机服务器属性里设置自定义纸张大小,却无法? 爱问知识人...
  14. 此pl2303驱动程序不支持win11、非旺玖原装PL2303驱动解决办法
  15. T-SQL与PL/SQL的比较
  16. android bugreport 解析
  17. 计算机原理基本概念整理
  18. 亚马逊IP关联?卖家
  19. C++函数传参int a,int *a,int a,const int a的区别
  20. TikTok英国最新热卖趋势,冲刺双旦

热门文章

  1. 计算机新建怎么没有表格,为什么新建找不到excle:为什么电脑新建项目里没有EXCEL表格?...
  2. Android仿微信朋友圈5实现朋友圈列表
  3. 计算机存储器——内存、外存详解
  4. 实现淘宝广告图片切换(display:block/none)
  5. JAVA将英文字母的大写字母转换为小写字母。
  6. PTA 【java】7-2 将数组中的数逆序存放 (20 分)
  7. 阿里云块存储团队卓越工程实践
  8. 企查查之企业信息查询自动化
  9. 英文文献翻译格式整理器
  10. 计算机的运作流程的个人感想