一、任务切换

在操作系统中当任务需要从一个任务切换到另外一个任务时,要将当前任务的现场保存到当前任务的堆栈中(当前任务现场主要指CPU相关寄存器),然后回复新任务的现场并执行新任务。这个叫做上下文切换(context switch),也可以叫任务切换。

上下文切换会给系统带来一定的负担。CPU寄存器越多,负担越重。切换时间取决于有多少寄存器需要切换。

在μC/OS-Ⅲ中,任务切换属于与处理器相关需要移植的部分。这部分代码放在几个特殊的文件中:os_cpu.h、os_cpu_c.c和os_cpu_a.asm。

在μC/OS-Ⅲ中,任务切换有两个函数:任务级切换函数---OSCtxSw()和中断级切换函数---OSIntCtxSw()。这两个函数大体功能相同,区别在于中断级任务切换函数由于仅被中断调度器调用,所以在被调用前已经进行了现场保存(进入中断时需进行现场保存),因此不需要任务级切换的现场保存内容,只需要回复新任务现场即可。任务切换原理书中介绍非常清楚,在此不再详述,具体内容参见本书第一版8.1、8.2节P111。

二、任务调度

μC/OS-Ⅲ采用可剥夺调度算法,总是执行进入就绪态的优先级最高的任务。

μC/OS-Ⅲ允许在同一优先级下有多个任务,这些任务间使用时间片轮转调度算法(即相同优先级的任务,每个任务运行一段固定的时间)。

在程序调用某些μC/OS-Ⅲ服务函数时,调度器会启动,这些时间点又叫调度点。

μC/OS-Ⅲ有两个调度器:在任务级代码使用OSSched(),在中断服务程序结束时调用OSIntExit()。二者的不同在于OSIntExit()在执行时会进行中断嵌套相关处理,并在任务切换时调用中断级任务切换,而OSSched()不处理中断嵌套,调用任务级任务切换。

μC/OS-Ⅲ系统的任务切换和任务调度的更多相关文章

  1. Mac OS 系统开发环境的一些坑

    最近换 Mac OS 系统开发,运行项目时遇到各种报错,记录下: 1.拉取项目后,需要安装依赖 npm install ,提示需要安装 xcode,报错如下. 从官网下载 xcode 时提示要更新最新 ...

  2. OS.js – 开源的 Web OS 系统,赶快来体验

    OS.js 是一个开源的 Web OS 系统,可以在浏览器中运行,提供了窗口管理器,应用程序API,用户界面开发套件和抽象的文件系统等.可以部署在 Node 或者 PHP 环境中运行.OS.js is ...

  3. OS 系统下安装MySql 配置MySql环境变量

    学习Hive需要,闲话不说 本文的内容: 下载Mysql for Mac 下载Mysql Workbench 安装 Mysql 和 Mysql Workbench 配置Mysql在OS 系统上的环境变 ...

  4. Linux 系统中用户切换

    1. Linux系统中用户切换的命令为su,语法为: su [-fmp] [-c command] [-s shell] [--help] [--version] [-] [USER [ARG]] 参 ...

  5. 首个攻击该Mac OS系统的恶意软件——KeRanger

    首个攻击该Mac OS系统的恶意软件——KeRanger 曾几何时,苹果操作系统一度被人认为是最安全的操作系统.然而近几年,针对苹果系统的攻击日益增多,影响范围也越来越大.无独有偶,近日,苹果Mac  ...

  6. 在 Linux 的 KVM虚拟机 上安装 Mac OS 系统的研究总结

    在 Linux 的 KVM虚拟机 上安装 Mac OS 系统的研究总结 一.资料来源:    网上一共找到两个方法,一个是视频上的教程,一个是网页资料. 二.视频资料方法内容:1.install qe ...

  7. Google工程师打造Remix OS系统 桌面版安卓下载

    三位前Google工程师打造的Remix OS系统终于来到了PC桌面上,现已可以下载尝鲜. Remix OS for PC基于Android-x86项目,由安卓5.1 Lollipop深度定制而来,不 ...

  8. Mac OS系统

    Mac OS系统 目录 概述 Mac OS系统常用操作 概述 Mac OS系统常用操作 显示或隐藏文件 在终端输入:defaults write com.apple.finder AppleShowA ...

  9. Linux 系统中用户切换(su user与 su - user 的区别)

    1. Linux系统中用户切换的命令为su,语法为: su [-fmp] [-c command] [-s shell] [--help] [--version] [-] [USER [ARG]] 参 ...

  10. ARM公布“物联网”嵌入式mbed OS系统软件平台

    继ARM公司发布了为嵌入式微控制器设计的Cortex-M7架构处理器,ARM又公布了专为廉价低功耗“物联网”设计的新版软件及系统平台,以加速物联网设备的发展及部署.该软件为基于ARM现有Cortex- ...

随机推荐

  1. ubantu14下vim的配置...

    日出江花红胜火,春来江水绿如蓝.---

  2. EX14 彩票中奖 (lottery.pas/c/cpp)

    [题目描述]小明想试试运气去购买彩票,所以他开始研究彩票大乐透的玩法:超级大乐透是指由购买者从01—35共35个号码中选取5个号码为前区号码,并从01—12共12个号码中选取2个号码为后区号码组合为一 ...

  3. 用css改变鼠标选中文字的样式

    打开一个页面,选中一段文字,会出现系统默认的蓝色背景和白色文字,如下图: 那么 这种选中效果我们怎么去自定制呢,比如我想让文字选中的时候背景是绿色,文字是白色 我们在css文件中插入如下代码: ::- ...

  4. RDLC 子报表

    1.RDLC 设计页面,拖入table或者矩形 2.右击表格或者矩形单元格,插入--子报表 3.输入名称和将此报表用作子报表 名称:显示在设计页面上的,仅作观看作用 将此报表用作子报表:填写目录下的需 ...

  5. 移动端上传图片iphone图片旋转以及服务端处理方法

    判断是否需要旋转 /**             *iphone判断图片方向,是否需要旋转图片             */            if(strpos($_SERVER['HTTP_U ...

  6. MemCache缓存multiget hole详解

    multiget 是什么 multiget 指的是从 memcache(或其他分布式缓存) 一次性获得多个键值,一般由 memcached client 自行实现. multiget hole是什么 ...

  7. C# 必看书籍

    C# in Depth:讲的是C#的东西.CLR via C#:讲的是运行时的东西.Framework Design Guideline:讲的是你要如何设计一个类库才能跟.NET浑然一体.——“赵三本 ...

  8. VB检测按键CTRL+C的次数

    Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vkey As Long) As IntegerPriv ...

  9. ime-mode

    2016-08-18 ime-mode 用户输入法控制,主要是防止用户输入文本符号等(比如电话号码输入时) (设定值) auto・・・和没设定一样 active・・・激活本地输入法(如中文),用户可以 ...

  10. DFA敏感词过滤

    import java.io.UnsupportedEncodingException; import java.nio.ByteBuffer; import java.util.ArrayList; ...