你好,这里是风筝的博客,

欢迎和我一起交流。

寒假那段时间开始接触UCOS实时操作系统,感觉真的很神奇,还借了任哲和邵贝贝的书的来看,原来代码还可以写得那么美妙。

后来,在知乎上看到一位答主的文章(https://www.zhihu.com/question/25628124/answer/133388181),顿时对操作 系统兴趣大增,想着自己也简单写一个轻量级的嵌入式操作系统。

现在好几个月过去了,这个操作系统我用着感觉还不错,非常的小(自己写的嘛,功能有限,呵呵呵)。当然,当初写这个也是为了好玩而已,并不保证严格的实际用途。

就想着开源出来,与大家一起分享。

这一章并不打算就这样裸讲程序,感觉先把概念说一下比较好:

什么是操作系统?

所谓操作系统就是能有效地管理计算机系统中的各种硬件\软件资源、合理的组织计算机的工作流程,从而为程序员\操作员和各类用户创造良好的工作环境的系统软件.

由于我学习的操作系统为UCOS,所以也将参照他的风格来写。而且由于实时操作系统与通用操作系统的基本设计原则差别很大,因此在很多资源调度策略的选择上以及操作系统实现的方法上两者都具有较大的差异。

我们需要完成以下部分:

a.任务调度策略

b.内存管理

c.中断处理

d.共享资源的访问

恩.....大概就这些吧,反正我只实现了这些,,,,,,

我的实验平台为ST公司的STM32F1系列的板子,Cortex-M3的内核,属于ARMv7家族。

好了,写代码之前,我们得先确定下a点,任务调度策略:

采用基于优先级的抢先式调度策略。

但是我们怎么实现任务抢占(即任务切换)呢?

当一个运行中的任务A因为某种原因要切换到其他任务去运行时,A必须保存自己的"上下文"(进程的状态以及堆栈中的内容被称为该进程的上下文),以保证以后再次切换回A运行时,能从已保存的"上下文"中恢复回来。这样当A再次运行时,对A而言"上下文"根本没有变化过,好像从来没有进行过任务切换一样。

如果用汇编写程序就知道,很多东西都是存在寄存器里的。查看下《Cortex-M3权威指南》可以知道:

Cortex-M3有两个堆栈指针,但是同一时刻只能用一个,我们可以用一个来作为任务切换时保存"上下文"。如图

抽象图,嘿嘿。。。。。。。

此时在cpu在跑任务B,任务切换时,把运行任务B时的寄存器参数入栈保存到任务B栈中,再把任务A栈里的内容出栈处理,这样就可以实现任务切换了,从任务B切换到任务A。

其实在权威指南里也说有:

使用双堆栈指针。注意哦,M3的堆栈是"向下"的哦。

这图明显没我灵魂画师画得好,嘿嘿。不过看到一个有用的信息:SysTick作为系统"心跳"。

好了,知道是怎么切换任务的了,那问题又来了,谁来做这些操作呢?

当然是从权威指南里找答案了:

还有一张图,带你理解PendSV,真贴心:

到这里。任务切换部分算是知道是怎么回事了。。。

b.内存管理,这个以后再说。

c.中断处理,从之前的图可以看出,系统应当采用SysTick(滴答定时器)作为系统"心跳"。

因为是基于基于优先级的调度策略,所以每次"心跳",都要去检测有没有比当前任务更高优先级的任务产生,如果有,通过PendSV进行任务切换。当然,任务切换不仅限于此,可能还是任务自身让出CPU使用权。

d.共享资源的访问,因为是单核的CPU,打个比方,厕所(资源)只有一个,小A(任务A)和小B(任务B)都想去上厕所(资源),那不就出问题了吗?所以之后我们要注意这个问题,之后再深入讨论这个。

恩,,,,,,码了那么多,感觉就那么多了,就先这样了。下一章再分析具体程序。

先放个交流群:136045527

下一章:自编STM32轻量级操作系统(二)------任务调度

自编STM32轻量级操作系统(一)------操作系统实现相关推荐

  1. 自编STM32轻量级操作系统(五)------互斥量

    你好,这里是风筝的博客, 欢迎和我一起交流. 上一章讲了信号量:自编STM32轻量级操作系统(四)------信号量的实现 但是信号量会出现一个问题:优先级反转! 什么是优先级反转呢? 优先级反转是指 ...

  2. 轻量级物联网嵌入式操作系统 AliOS

    origin: https://www.itcodemonkey.com/article/988.html 轻量级物联网嵌入式操作系统 AliOS 授权协议:Apache 2.0 开发语言:C/C++ ...

  3. 《求职》第四部分 - 操作系统篇 - 操作系统基础

    1.计算机系统概述 1.1 基本构成 计算机的四个主要组件 处理器:控制计算机的操作,执行数据处理功能. 内存:存储数据和程序. I/O模块:计算机内部和外部之间交换数据. 系统总线:在CPU.内存和 ...

  4. python操作系统-Python操作系统

    一 为什么要有操作系统 (两本书:现代操作系统.操作系统原理,学好python以后再去研究吧~~) 现代的计算机系统主要是由一个或者多个处理器,主存,硬盘,键盘,鼠标,显示器,打印机,网络接口及其他输 ...

  5. 1.1.3操作系统的发展与分类(多道批处理 单道批处理系统 分时操作系统 实时操作系统)

    目录 1.知识总览 ​2.手工操作阶段 3.单道批处理系统 4.多道批处理系统 5.多道批处理系统和单道批处理系统比较 6.分时操作系统 7.实时操作系统 8.其他几种操作系统 1.知识总览 2.手工 ...

  6. 杂项-操作系统:操作系统百科

    ylbtech-杂项-操作系统:操作系统百科 操作系统(英语:operating system,缩写作 OS)是管理计算机硬件与软件资源的计算机程序,同时也是计算机系统的内核与基石.操作系统需要处理如 ...

  7. 操作系统:操作系统总复习(综述篇)

    操作系统综述篇 文章目录 操作系统综述篇 前言 一.什么是操作系统? 二.操作系统的作用是什么? 三.操作系统的基本特性 并发性 共享性 虚拟性 异步性 四.微内核OS结构 特点 功能 问题 总结 前 ...

  8. 第一章 操作系统引论-操作系统原理和实践

    目录 三课合一: 要求学完要做到什么? 教材 目录 第一章操作系统引论 引例:操作系统在做什么? 你知道哪些操作系统的名字? 什么是OS操作系统? 1.1 操作系统的目标和作用 目标:方便性.有效性. ...

  9. 局域网服务器常用的操作系统,局域网操作系统

    局域网操作系统 网络操作系统是相对于单机操作系统而言的,早期的网络操作系统实际上在原来单机操作系统的基础上增加了 具有实现网络访问功能的模块.需要说明的是,随着网络技术的发展,目前许多单机操作系统(如 ...

最新文章

  1. 中科创星米磊:从五个方向筛选“硬科技”企业
  2. PCM转MP3工具的封装
  3. 什么是云计算基础设施?
  4. 基础贪心算法(HDU2037今年暑假不AC)
  5. 生成0到1之间随机数的C代码
  6. LINQ之路 5:LINQ查询表达式
  7. 路由协议和路由算法的不同
  8. 229页,CMU博士张昊毕业论文~探索机器学习并行化的奥秘
  9. Codevs 1191 数轴染色
  10. 【免费下载】2021年7月热门报告盘点(附热门报告列表及下载链接)
  11. 【论文总结】TextGCN
  12. hexo sever端口占用,localhost:4000无响应
  13. c语言的程序扩展,C语言符号扩展
  14. 公司与公司保密协议范本
  15. 基于labview的虚拟简单信号发生器
  16. 网络安全笔记-业务安全
  17. 企业邮箱怎么写加密邮件,企业邮箱支持吗?
  18. 微雨燕双飞,落花人独立 。是什么意思
  19. 安卓应用设置第一个显示的界面
  20. 开源神器:让你一键卸载 Windows 默认程序!

热门文章

  1. Spark:The Definitive Guide--读书小结(五)
  2. html 滚动条 scrolltop scrollheight,JavaScript之scrollTop、scrollHeight、offsetTop、offsetHeight等属性学习笔记...
  3. 微信小程序入门解读-③
  4. SVD分解正确分解流程
  5. 非官方云小票机SDK,支持飞鹅云,芯烨云,易联云,快递100,映美云,中午云,佳博云,优声云,365智能云打印等
  6. Java网络聊天程序
  7. 如何使用JSP+MySQL创建留言本
  8. git笔记分享-b站黑马教程学习
  9. 虚拟化身的社交叙事:想象空间没有尽头
  10. 解析新STEAM教育对国内中高考的影响