




已阅读5页,还剩28页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
嵌入式Linux操作系统 陈虎tommychen74 主要内容 任务调度存储管理中断系统驱动程序多线程程序设计 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 voidschedule void if 存在中断下半部分服务请求 调用do bottom half来运行中断处理的后半截 if 当前进程是时间片轮转的实时进程 根据当前进程的状态进行相应处理 while 遍历整个可运行态的队列 if 当前位置的进程可以被调度 调用goodness来计算当前位置进程的权值 if 返回的权值大于以前保存的最大权值 保存这个权值以及进程 使用switch to宏来切换当前进程和选中进程的上下文 进程调度的时机 增加一个新进程进程状态转换系统调用执行完毕返回用户态中断处理完毕返回到用户态当前进程的时间片使用完毕 Linux的存储器管理 虚拟存储管理 省略 内存分配策略伙伴系统算法Slab分配器 伙伴系统 每个空间按照尺寸为2U大小的块如果申请空间的尺寸s满足2U 1 s 2U 则分配整个块通过不断对分大内存块来获得小内存块 并尽可能合并空闲块 当一个内存块被对分后 每一部分成为对方的伙伴 Linux中的伙伴系统 所有页面分成10组不同大小的页块 每组中的块大小分别是1 2 4 8 512个页面 分别通过一个free area struct结构管理将10个free area struct结构组成一个free area 数组 若所请求的页面数目不是2的幂次方 则按稍大于此数目的2的幂次方在页块组中查找空闲页块 如果对应的页块链表中没有空闲页块 则在更大的页块链表中查找 释放页面时 伙伴系统会将页面插入到对应的页面链表中 并且检查新插入的页面能否和原有的页块组合构成一个更大的页块 如果有两个块的大小相同且这两个块的物理地址连续 则合并成一个新页块并加入到对应的页块链表中 并迭代此过程直到不能合并为止 Slab 如果每次都从伙伴系统中按页框为单位分配和释放内存块 不仅造成大量的内碎片 而且严重影响系统的运行性能 Slab分配器通过预先分配一块内存区域当作缓冲区 当要求分配对象时 就直接从缓冲区中返回 释放对象时Slab分配器只是将对象归还到缓冲区以供下次分配时使用 这样就可以避免频繁地调用伙伴系统的申请和释放操作 从而加快申请和释放对象的时间 Linux中的Slab分配器 三层基本结构缓存 cache Slab对象 object Linux中断处理流程 确定该次中断的来源 保存现场 把中断发生前所有寄存器的内容都保存在堆栈中 do IRQ 函数根据中断号 然后进行中断处理 irq exit 函数执行软中断 Linux的基本数据结构 中断描述符 structirqdesc unsignedintnomask 1 IRQdoesnotmaskinIRQ unsignedintenabled 1 IRQiscurrentlyenabled unsignedinttriggered 1 IRQhasoccurred unsignedintprobing 1 IRQinuseforaprobe unsignedintprobe ok 1 IRQcanbeusedforprobe unsignedintvalid 1 IRQclaimable unsignedintnoautoenable 1 don tautomaticallyenableIRQ unsignedintunused 25 void mask ack unsignedintirq MaskandacknowledgeIRQ void mask unsignedintirq MaskIRQ void unmask unsignedintirq UnmaskIRQ structirqaction action IRQlockdetection structirqdescirq desc NR IRQS 中断描述符表 中断处理相应结构 structirqaction void handler int void structpt regs unsignedlongflags unsignedlongmask constchar name void dev id structirqaction next do IRQ asmlinkagevoiddo IRQ intirq structpt regs regs structirqdesc desc structirqaction action intcpu if irq NR IRQS gotobad irq desc irq desc irq spin lock do IRQ action desc action if action intstatus 0 遍历所有的中断相应块 并执行相应程序do status action flags action handler irq action dev id regs action action next while action 软中断 if softirq pending cpu do softirq return bad irq irq err count 1 printk KERN ERR IRQ spuriousinterrupt d n irq return 驱动程序申请中断 intrequest irq unsignedintirq void handler int void structpt regs unsignedlongirq flags constchar devname void dev id irq 要申请的中断号 handler 中断处理函数指针 irq flags 中断管理掩码 devname 设备名称 dev id 设备相关的私用存储区 用于标示自身 申请中断的实现 intrequest irq unsignedintirq void handler int void structpt regs unsignedlongirq flags constchar devname void dev id unsignedlongretval structirqaction action action structirqaction kmalloc sizeof structirqaction GFP KERNEL if action return ENOMEM action handler handler action flags irq flags action mask 0 action name devname action next NULL action dev id dev id retval setup arm irq irq action if retval kfree action returnretval 释放中断 voidfree irq unsignedintirq void dev id irq 中断号dev id 中断处理程序标示 释放中断的实现 voidfree irq unsignedintirq void dev id structirqaction action p unsignedlongflags if irq NR IRQS irq desc irq valid 错误处理return spin lock irqsave 中断处理程序 voidhandler intirq void dev id structpt regs regs irq 中断号dev id 驱动程序标示regs 上下文寄存器现场 软中断 tasklet 小任务 和下半部分 为什么要引入软中断 延迟任务 在上述硬件中断的处理过程中 需要关闭中断 如果中断处理程序的处理过于复杂 则导致不能及时响应中断 将比较简单的任务放到硬件中断处理过程 把复杂的操作放到软中断操作过程 提高内核的响应中断速度 软中断可以被硬件中断所打断 软中断 tasklet 小任务 和下半部分 软中断 tasklet 下半部分 软中断 系统中固定有4种软中断软中断存放在一个softirq vec数组中 数据类型为softirq action softirq action包含了软中断函数指针和相关数据结构 软中断调用的时机 通过调用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初始化voidshort do tasklet unsignedlong DECLARE TASKLET sho
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年护士中级面试技巧及护理实操模拟题答案全攻略
- 2025年化工工艺专业基础与炼油装置操作实践模拟题集
- 2025年仓库安全员招聘面试题库从基础到进阶
- 2025年炼油装置中级操作工面试题集与答案解析
- 2025年水资源保护与生态流量管理实战手册与考试题库及答案
- 2025年销售代表初级面试模拟题及答案全收录
- 电剪安全知识培训课件
- 2025年财务管理主管竞聘面试题集与答案
- 2025年仓库设备维护与操作笔试模拟题及答案解析
- 2025年烹饪技艺初级考核试题集
- 活鹅宰杀协议书
- AI技术提升医学人才培养质量的探索与实践
- 美宜佳转让协议合同
- 混改公司合同协议模板
- 儿童多种维生素课件
- 江苏常州2025年公开招聘农村(村务)工作者笔试题带答案分析
- 2025年职工职业技能竞赛(物业管理师)参考试题(附答案)
- 维修框架协议书范本
- 成人肠造口护理要点与实践课件
- 行李员行李员试卷(练习题库)
- 会务服务面试题及答案
评论
0/150
提交评论