当前位置:
文档之家› 嵌入式操作系统原理和Linux系统
嵌入式操作系统原理和Linux系统
信号量
信号量 semaphore - 控制共享资源的使用权 - 标志某个事件发生 - 使两个任务的行为同步 二进制信号量 - 信号只有两个值0和1 计数式信号量 - 信号有一个取值范围,例如0-255
信号量
信号量的操作 创建 Create - 初始化二进制或计数式信号量的信号值 等待 Wait - 如果信号量值非0,则得到信号,信号量 值减1 给信号 Signal - 信号量值加1
消息队列
消息队列 message queue - 消息队列实际上是邮箱阵列。 - 通过内核一个任务或一个中断服务程序可以把一 则消息(一个指针)放到消息队列中。 - 通过内核一个或多个任务可以通过内核接收这则 消息。 - 每个消息队列有相应的等待消息的任务列表,如 果消息队列为空,则等待消息的任务将被挂起。 - 每个消息队列也应该有相应的发送消息的任务列 表,如果消息队列满,则发送消息的任务将被挂 起。
操作系统基本原理
1、嵌入式操作系统基本原理 2、嵌入式LINUX操作系统
操作系统
操作系统:操作系统层通常是最靠近硬件层的软件层,主要 完成计算机硬件资源的调度和分配、信息的存储和保护以及 并发活动的协调和控制等工作。
应用软件 操作系统 计算机硬件系统
POSIX 可移植操作系统接口:Portable Operating System Interface of UNIX
Linux进程概述
程序映像 存放在磁盘上的可执行文件的代码和数据的集合称为 可执行映象(Executable Image),即程序 当一个程序(可执行映象)装入系统中运行时,它就 形成了一个进程 进程映像 进程是由正文段(text)、用户数据段(user segment)和系 统数据段(system segment)组成的一个动态实体。 正文段中存放着进程要执行的指令代码,具有只读的 属性, 用户数据段是进程在运行过程中处理数据的集合,它 们是进程直接进行操作的所有数据, 以及进程使用的 进程堆栈。 系统数据段存放着进程的控制信息。其中包括进程控 制块PCB。
内核层次
内核在系统中的位置
用户进程 系统调用接口 内核 硬件 从程序员的角度 从用户的角度 Android webos meego
什么是Linux内核?
操作系统的体系架构,由其底层(Base Layer)、中间件层 (Middle Ware Layer)、用户体验层(User Experience Layer) 以及独立配置的软件模块,如安全模块(Secarity Module) 所构成。 底层主要是其内核(Kernel);对中间件层,从开发者角度看 ,主要指开发环境和运行环境(Development Environment and Runtime Environment),从用户角度看,主要指各种功 能模块(Functional Modules)或应用架构(Application Framework);用户体验层(UE=UI+Applicaions),由用户界面 和各种应用程序所构成。所以,操作系统是一个多层架构 、多元协议、许多构件构成的系统。
系统调用
内核提供的一套C语言函数库称为系统调用 应用程序使用系统调用完成编程任务 系统调用分类
进程管理 进程间通信(IPC) 文件系统管理 网络编程(Socket)
Linux结构
Linux进程管理
Linux是一个多任务多用户操作系统 一个任务(task)就是一个进程(process) 每一个进程都具有一定的功能和权限,它 们都运行在各自独立的虚拟地址空间。 在Linux中,进程是系统资源分配的基本单 位,也是使用CPU运行的基本调度单位
中断处理
中断处理流程 - 关闭中断 - 保存当前上下文 - 确定中断源 - 查中中断向量 - 打开中断 - 调用中断处理程序 - 恢复被中断的上下文 - 中断返回
中断嵌套
中断的性能指标
中断延迟 - 中断关闭的时间长度。 对于非占先式和占先式内核:
中断延迟 = 关中断的最长时间 + 开始执行 中断服务子程序的第一条指令的时间
中断
中断是一种硬件机制,用于通知CPU有个异步事 件发生了。 中断一旦被识别,CPU保存部分(或全部)上下文 (context),即部分或全部寄存器的值,跳转到专门 的中断服务子程序ISR,进行中断处理。处理完毕 后,程序回到: - 对于非占先式内核而言,程序回到被中断了的任 务。 - 对于占先式内核而言,让进入就绪态的优先级最 高的任务开始运行。
进程控制块PCB
进程控制块PCB是名字为task_struct的数据结构,称为任务 结构体 任务结构体中容纳了一个进程的所有信息,是系统对进程 进行管理和控制的有效手段,是系统实现进程调度的主要 依据 当一个进程被创建时,系统就为该进程建立一个 task_struct任务结构体。当进程运行结束时,系统撤消该 进程的任务结构体 Linux在内存空间中开辟了一个专门的区域存放所有进程 的任务结构体,在操作系统的内核空间设置了一个task数 组,该数组的每一个元素是一个指向任务结构体的指针,所 以task数组又称为task向量。 进程的任务结构体是进程存在的唯一标志,调度程序维护 current指针,它指向当前正在运行的进程。
非占先式内核中断的性能指标
占先式内核中断的性能指标
嵌入式LINUX操作系统开发
体系结构概览 进程与调度管理 内存管理 文件系统 系统调用
体系结构概览
体系结构概览
内核的功能
进程控制(process management) 内存管理(Memory management) 文件系统管理(Filesystem management) 设备驱动程序(Device control) 网络(Networking)
非占先式内核
非占先式内核 non-preemptive - 内核要求每个任务自我放弃CPU的所有权。 - 中断可以使一个高优先级的任务由挂起状态变为 就绪态,但中断服务以后控制权还是回到原来被 中断的那个任务,直到该任务主动放弃CPU的使 用权。 - 更高优先权的任务不能打断正在执行的较低优先 权的任务,直到较低优先权任务主动放弃CPU的 控制权。
同步
利用信号量进行同步
事件标志
应用于任务和多个事件同步的场合。 独立型事件标志 - 任何等待的一个事件发生,则唤醒任务
关联型事件标志 - 所有等待的事件同时发生,则唤醒任务
事件标志
消息邮箱
消息邮箱 message mail box - 通过内核一个任务或一个中断服务程序可以把一 则消息(一个指针)放到邮箱中。 - 通过内核一个或多个任务可以通过内核接收这则 消息。 - 每个邮箱有相应的等待消息的任务列表,如果邮 箱为空,则等待消息的任务将被挂起。 - 每个邮箱也应该有相应的发送消息的任务列表, 如果邮箱满,则发送消息的任务将被挂起。
优先级反转问题实例
优先级反转的解决方法
优先级继承 - 拥有资源的低优先级任务被高优先级抢占。 - 高优先级任务开始申请被低优先级占据的资源。 - 此时,拥有该资源的低优先级任务的优先级上升 到高于高优先级的任务。 - 拥有资源的任务得到运行机会,就有机会尽快释 放资源。 - 释放资源,该任务回到原来的优先级。 - 高优先级任务得到运行机会,占有资源。
二进制信号量
计数式信号量
死锁
死锁 dead lock - 指两个任务无限期地互相等待对方控制的资源。 防止死锁的方法 - 先得到全部的资源再做下一步工作。 - 所有任务用同样的顺序去申请多个资源。 - 释放资源时使用相反的顺序。 - 定义任务等待资源的时间,如果一段时间内没有 等到资源就产生超时,化解死锁。Linu Nhomakorabea调度分析
Linux进程的状态变化
进程状态
运行态:进程正在使用CPU运行的状态。处于运行态的进 程又称为当前进程(current process) 可运行态:进程已分配到除CPU外所需要的其它资源,等 待系统把CPU分配给它之后即可投入运行 等待态:又称睡眠态,它是进程正在等待某个事件或某个 资源时所处的状态。 等待态进一步分为可中断的等待态和 不可中断的等待态。处于可中断等待态的进程可以由信号 (signal)解除其等待态。处于不可中断等待态的进程,一般 是直接或间接等待硬件条件。 它只能用特定的方式来解除, 例如使用唤醒函数wake_up()等 暂停态:进程需要接受某种特殊处理而暂时停止运行所处 的状态。通常进程在接受到外部进程的某个信号进入暂停 态,例如,正在接受调试的进程就处于这种状态。 僵死态:进程的运行已经结束,但它的任务结构体仍在系 统中。
中断的性能指标
中断响应 - 从中断发生到开始执行用户的中断服务子程序的 时间。 对于非占先式内核 - 中断响应时间 = 中断延迟 + 保存CPU内部寄存 器的时间 对于占先式内核 - 中断响应时间 = 中断延迟 + 保存CPU内部寄存 器的时间 + 内核进入中断服务函数的执行时间
中断的性能指标
中断恢复时间 - CPU返回到被中断了的程序代码所需要的时间。 对于非占先式内核 - 中断恢复时间 = 恢复CPU内部寄存器值的时间 + 执行中断返回指令的时间 对于占先式内核 - 中断恢复时间 = 判定是否有优先级更高的任务 进入了就绪态 + 恢复那个优先级更高任务的CPU 内部寄存器的时间 + 执行中断返回指令的时间
时间片轮转调度 round-robin scheduling 当两个或两个以上的任务具有同样的优先级,内 核运行一个任务运行事先确定的一段时间,叫做 时间额度(quantum),然后切换给另一个任务。 满足下列条件时,把CPU控制权交给下一个就绪 任务 - 当前任务无事可作。 - 当前任务的时间片还没有用完任务就结束了。 - 当前任务的时间片用完了。