嵌入式OS入门笔记-以RTX为案例:一.简介

嵌入式OS入门笔记-以RTX为案例:一.简介

 

        最近在做OS相关的项目,一方面涉及到大量(通用)操作系统的概念和理解,另一方面要深入到一个小实时操作系统的源代码中,并在此操作系统上开发应用。虽然说内容上并不难,但是操作系统本身是一个非常基础,影响深远的计算机科技的小分支,所以把操作系统的知识重新整理一遍,同时结合实时操作系统的实际情况,形成这样一套笔记,一是对项目的一个回顾,另外也方便将来回来查阅吧。

 

1.操作系统的角色

        OS其实是一个很宏大的概念,不好捉摸。根据维基百科的定义,OS是一组管理硬件和为应用软件提供服务的软件。这个说法很精练但依然抽象。我觉得大部分OS扮演着两个最主要的角色:硬件的抽象表达者和资源的管理者

 

硬件的抽象

        如果要读取硬盘中的某一个数据,首先得确定盘片,然后确定磁道和扇区,最后通过磁头读取进内存。这实际上是一系列复杂的机械和电子的操作,虽然说复杂,但是影响最终运作结果的因素(读写地址)不多,大部分操作是对于不同的读写都是相同的。如果每一次执行读写硬盘操作,应用程序都要明确地对硬件作出准确的指示,那么应用程序会臃肿无比,程序员也会为编写这样的程序感到非常无趣。

 

        正如David Wheeler的那句名言:“Any problem in computer science can besolved with another layer of indirection.”OS的首要任务正是把这些繁杂的底层硬件的执行细节隐藏,提供给程序和用户一个相对抽象的概念。例如把一系列的机械和电子操作转化为简单的一句代码-读取硬盘(地址)。

 

        一般普通计算机使用者之所以不熟悉底层的这些细节,也正是因为有OS,这个硬件的抽象的存在。他们对计算机运作的认识,只是一个建立在OS基础之上的心理模型(mental model)。

  

Hard  Disk Driver - 《Operating System Concepts》

 

资源的管理

        最早期的计算机是没有操作系统的,一般会有一个操作人员(operator)负责给程序排序,安排下一个时间段运行何程序。其实这就是操作系统的雏形,而这时这个操作人员的主要任务就是分配计算机资源。操作系统的核心其实就是资源的分配和管理,特别是在多程序(multiprogramming)的环境下。如何优化资源的分配,减少有害的竞争,提高某些资源的共享效率,都是操作系统关心的核心话题。这里说的资源主要指的是硬件资源,例如内存,CPU,网络带宽和I/O等等。

  

        其实纵观很多OS的教科书的组织,一般主要的讨论话题不外乎进程内存外设。这些话题都离不开OS的这两个角色,例如进程管理,很大一部分就是关于资源的分配,而进程本身又是OS对程序的一个抽象。所以我觉得具体学习研究OS时,只要能够抓住1.它抽象的对象和抽象的程度;2.如何合理的优化资源的安排,就能够达到学习研究的目的。

 

2.实时操作系统

        其实嵌入式操作系统不一定就是实时操作系统(RTOS),反之亦然。但很多场合下嵌入式开发应用都对实时性的要求很高,所以这两个概念经常混用。RTOS最突出的就是它要在deadline之前完成任务,其中又分两种,一种是硬deadline,如果不能在规定deadline前完成,那么后果会很严重甚至产生一些致命的错误;而软deadline则稍微宽松一点,即使不能够在deadline前完成,deadline后继续完成任务直至完成也是可以接受的。

 

        一个很通常的误区就是,RTOS和通用OS的最大差别是RTOS要快。虽然速度快很重要,但这不是RTOS的核心特征。RTOS最为重要的是其行为的决定性(determinism)可预测性(Predictability),同时RTOS对系统的响应速度要求也很高。当然,RTOS的容错,纠错能力也要足够强。

 

        这些特性其实都是一些极端工业环境下对OS的要求,例如在核反应和化学反应中,非常精确的控制,特别是在时间上的控制,往往决定了整个工业过程的成败,而且失败的代价往往非常高。所以一个好的RTOS,虽然没有一些通用的操作系统全面,但其行为的差异(variance)会比通用OS小得多。


3.RTX

我会以Keil开发的RTX实时操作系统作为主要的参考操作系统。这里面有几个原因:

  • RTX五脏俱全,是个完整且优秀的实时操作系统
  • RTX对ARM设备Cortex-M系列的芯片有比较好的支持(自家产品)
  • 更重要的是,RTX不仅免费,而且其代码是开放的,是可以自由查阅的!


这些基本情况就写到这里,下次我会更具体地介绍一下RTX和其他涉及到的工具。

 

文章转载自:http://blog.csdn.net/raym0ndkwan/article/details/32859989

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/466048.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux进程O(1)调度算法,面试必考哦

进程调度有很多方法,这里只讨论Linux下的进程调度,先说下,这个是高端面试必考题,既然我发文了,大家最好看看,而且目前看到的写得最好的文章,推荐给大家。Linux是一个支持多任务的操作系统&#…

让Visual Studio 也支持JS代码折叠 —— 续 [ Visual Studio | Js | ScriptOutline | SmallOutline ]...

前言 上文让JS代码折叠的功能能用了,本文将对代码继续改进以期更好用、更实用,随后有介绍Visual Studio JS方面的几个插件。 文章 1. VS2003折叠代码的Micro 2. MSDN 3. Document Outline for Client Script in Visual Studio 2005 正文 …

嵌入式OS入门笔记-以RTX为案例:二.快速移植到RTX

嵌入式OS入门笔记-以RTX为案例:二.快速移植到RTX本篇笔记将简单介绍RTX,包括基本架构,如何在Keil中配置。需要安装ARM-MDK和一块硬件板,笔记以STM32F4Discovery为例子。1.为什么要用RTOS?尽管把所有程序放在一个大的循…

再解析下内核自旋锁和优先级翻转问题

[内核同步]自旋锁spin_lock、spin_lock_irq 和 spin_lock_irqsave 分析漫画|Linux 并发、竞态、互斥锁、自旋锁、信号量都是什么鬼?Linux内核自旋锁之前写的自旋锁的文章,现在再加一篇,可能单纯的一两次说明不能把问题说清楚。所以再写一篇文…

ios 逆向编程(环境搭建)

首先如果你想要逆向其他的APP 动态的查看 或者修改人家APP里面的东西 1, 首先要有一台越狱的手机 最好是9.1以下的,因为9.2以上(包括9.2)就不能完美越狱了 2,手机也要5s以上的(因为从5S开始支持arm64架构&…

最大、最小堆的实现

最大最小堆 堆是一种经过排序的完全二叉树,其中任一非终端节点的数据值均不大于(或不小于)其左子节点和右子节点的值。 最大堆和最小堆是二叉堆的两种形式。 最大堆:根结点的键值是所有堆结点键值中最大者。 最小堆:根…

嵌入式OS入门笔记-以RTX为案例:四.简单的时间管理

嵌入式OS入门笔记-以RTX为案例:四.简单的时间管理 上一节简单记录了进程task。有了进程以后,我们需要关心怎么样分配CPU资源(或者运行时间)给每个进程。那么就要引入排程(scheduling)的概念。排程一般都是O…

我等这个含蓄的技术男当上了CEO

大家好,祝大家五一节日快乐!今天没有写技术文章,今天想吹一个人,他是我的朋友,他做公众号很久了,技术文章写的也不错,但是阅读和关注量一直没有上来,我之前好几次在公众号上转发了他…

广东总冠军

lets go tiger 看这篇文章之前,先看看我们看球的视频 恭喜广东拿下总冠军! 恭喜胡明轩夺得FMVP! 我当时预测的是周鹏或者胡明轩拿下FMVP,最后是胡明轩,广东后场三条枪表现都非常亮眼。如果是上一场广东夺冠&#xff0c…

每日一题(1) —— 数组计算

判断下面代码是否可执行&#xff1f;如果可执行&#xff0c;执行结果是多少&#xff1f; #include <stdio.h>int main(void) {int array[10] {0, 2, 3, 4, 5, 6, 7, 8, 9, 10};0[array] 1;printf("%d\n", (-1)[array 5]);return 0; } 分析&#xff1a; C语…

内存文章汇总,并剖析mmap

在看这篇文章之前&#xff0c;可以先看看下面这几篇文章Linux内存&#xff0c;先看这篇文章Linux内存寻址方式Linux虚拟内存TLBLinux物理内存初始化Linux io内存存在的意义~修改cmdline 把内存改成512MB用mtrace定位内存泄漏什么是内存泄漏&#xff1f;Linux内存管理slub分配器…

[综述泛读] A survey on web services composition (IJWGS, 2005)

Time: 2.5 hours Dustdar S, Schreiner W. "A survey on web services composition." International Journal of Web and Grid Services: 1-30. 2005 (30 pages, 单栏) (gs:169) Schahram Dustdar (维也纳技术大学, full prof) Dusdar是Distributed Systems Group的老…

韦老师的开发板和嵌入式书籍赠送

大家五一快乐&#xff01;我知道这个时候大家都没有什么心思学习&#xff0c;所以找了联合了几个朋友一起给大家送点东西。这几个技术号主都非常用心的给大家分享技术文章&#xff0c;我相信&#xff0c;跟他们一起&#xff0c;你们也能变得更加优秀。奖品包括&#xff1a;1. 韦…

每日一题(2)—— -2与2的比较

分析下面的代码&#xff0c;求运行结果。 #include <stdio.h>int main(void) {if(-2 > 2){printf("11111\r\n");}else{printf("22222\r\n");}return 0; }分析&#xff1a; -2和2都没有声明存储类型&#xff0c;编译器默认按int存储&#xff0c;所…

truffle unbox react 出坑指南

最近几天差点就被这鬼东西给逼疯了&#xff0c;truffle init 、truffle unbox webpack 不管我怎么运行都是对的&#xff0c;唯独truffle unbox react 不管在哪个windows都会报错&#xff0c;换了好几台电脑&#xff0c;心都累完了&#xff0c;还好我坚持了下来&#xff0c;找了…

单片机6年想转嵌入式Linux ,不知如何下手?

刷知乎看到下面这个提问。单片机6年想转嵌入式Linux &#xff0c;不知如何下手&#xff1f;现在挺尴尬&#xff0c;做的单片机产品总是感觉重复重复再重复&#xff0c;想学习点新东西&#xff0c;不知道如何转。说实话&#xff0c;这个问题自己关注了很久。今天就借题主这个问题…

每日一题(3)—— -2与2的比较(二)

分析下面的代码&#xff0c;求运行结果。 #include <stdio.h>int main(void) {if(-2L > 2UL){printf("11111\r\n");}else{printf("22222\r\n");}return 0; }分析&#xff1a; 常量后面接L表示long型存储&#xff0c;UL表示unsigned long型存储&a…

嵌入式技术面试时的10大潜规则

编排 | strongerHuang微信公众号 | 嵌入式专栏找工作也是一门技能&#xff0c;有的人很快就找到自己喜欢的工作&#xff0c;有的人找了很久也没找到合适的工作。下面给大家分享几点找工作过程中存在的“潜规则”内容。嵌入式专栏1面试的本质不是考试&#xff0c;而是告诉面试官…

每日一题(4)—— (a ^ b 2)

分析下面的代码&#xff0c;求运算结果。 #include <stdio.h>int main(void) {int a 6, b 4;printf("%d\n", a ^ b << 2);return 0; }分析&#xff1a; 主要是考的是“优先级”和按位“异或”&#xff0c; 左移运算符优先级高于按位异或运算符&#…

轻轻的你来了,悄悄的你走了,邓总没有带走一个bug

写这篇文章的时候&#xff0c;比较晚&#xff0c;所以思绪是清晰的&#xff0c;这个时候刚好是邓总来公司跟我交接离职的最后一天。给邓总制作的告别MV&#xff1a;我跟邓总2017年12月在恒大认识&#xff0c;我们入职时间相差一周&#xff0c;我入职的时候就开始注意到旁边的这…