17.嵌入式Linux操作系统.ppt

  1. 1、本文档共33页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
软中断 系统中固定有4种软中断 软中断存放在一个softirq_vec数组中,数据类型为softirq_action。 softirq_action包含了软中断函数指针和相关数据结构。 软中断 优先级 描述 HI_SOFTIRQ 0 高优先级tasklet和软中断 NET_TX_SOFTIRQ 1 网络发送软中断 NET_RX_SOFTIRQ 2 网络接收软中断 TASKLET_SOFTIRQ 3 tasklet 软中断调用的时机 通过调用softirq_pending 判断是否有软中断 如果有软中断则执行do_softirq ; 判断的时机包括: do_IRQ 完成了中断处理程序 smp_apic_timer_interrupt完成本地时钟中断 当一个特定的ksoftirqd内核线程被唤醒 … tasklet 建立在HI_SOFTIRQ和TASKLET_SOFIRQ的软中断之上 tasklet存放在tasklet_vec和tasklet_hi_vec数组中,每个tasklet的数据结构包括: next: tasklet的链表指针; state: 状态; count: 锁计数器 func: 函数指针 data:无符号函数,作为tasklet的函数输入 如何使用tasklet 分配一个tasklet_struct数据结构 通过tasklet_init 初始化它 通过tasklet_schedule 调度运行它(一般是硬中断处理程序) 通过tasklet_disable 禁止一个tasklet 例子: //tasklet初始化 void short_do_tasklet unsigned long ; DECLARE_TASKLET short_tasklet, short_do_tasklet, 0 ; …… //中断处理程序中 tasklet_schedule short_tasklet ; void short_do_tasklet unsigned long unused //tasklet处理程序 下半部分 下半部分是一个不能与其他下半部分并发执行的高优先级tasklet 使用bh_base数组组织所有的下半部分,系统中有32个下半部分可以使用,Linux只使用了一半左右,包括: TIMER_BH 定时器 TQUEUE_BH 周期性任务 SERIAL_BH 串行端口 …… 南京大学计算机系 南京大学计算机系 嵌入式Linux操作系统 陈虎 tommychen74@y 主要内容 任务调度 存储管理 中断系统 驱动程序 多线程程序设计 Linux的历史 Linux 操作系统是UNIX 操作系统的一种克隆系统。它诞生于1991 年的10 月5 日(这是第一次正式向外公布的时间)。 现已成为今天世界上使用最多的一种UNIX 类操作系统,并且使用人数还在迅猛增长。 Linux 操作系统的诞生、发展和成长过程始终依赖着以下五个重要支柱:UNIX 操作系统、MINIX 操作系统、GNU 计划、POSIX 标准和Internet 网络。 进程状态 运行态:正在使用CPU 运行的状态 可运行态: 进程已分配到除CPU 外所需要的其它资源。 等待态:正在等待某个事件或某个资源时所处的状态。 处于可中断等待态的进程可以由信号解除其等待态。 处于不可中断等待态的进程,一般是直接或间接等待硬件条件,它只能用特定的方式来解除。 暂停态:进程需要接受某种特殊处理而暂时停止运行所处的状态。例如,正在接受调试的进程就处于这种状态。 僵死态:进程的运行已经结束,但它所占的资源还未释放。 优先级策略 系统中所有进程的优先级在[ 0,MAX_PRIO-1] 之间, 数值越低优先级越高; 实时进程的优先级范围在[0,MAX_RT_PRIO-1],优先级从创建之初便已确定, 不会改变; 非实时进程的优先级在[MAX_RT_PRIO, MAX_PRIO]之间,优先级分为静态和动态两方面。 静态优先级在进程产生的时候确定:static_prio MAX_RT_PRIO+nice+20 动态优先级在运行时随着进程状态而动态变化: 调度策略 相同优先级的实时进程的调度策略有两种: SCHED_RR: 时间片轮转;在运行了指定的时间片后会被抢占并重新调度 SCHED_FIFO: 先入先出方式,每一个可以运行的实时进程按照它在调度队列中的固定顺序运行 非实时进程的调度策略 SCHED_OTHER:以时间片轮转为基础, 根据每个进程的情况进行一定的优化使得进程调度可以公平有效而又不损失响应时间。 调度程序Schedule void schedule void if 存在 中断下半部分 服务请求 调用do

文档评论(0)

神话 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:5203223011000000

1亿VIP精品文档

相关文档