学习操作系统的必备教科书《操作系统:原理与实现》| 文末赠书4本

news2025/7/11 3:54:29

使用了6年的实时操作系统,是时候梳理一下它的知识点了

摘要:

本文简单介绍了博主学习操作系统的心路历程,同时还给大家总结了一下当下流行的几种实时操作系统,以及在工程中OSAL应该如何设计。希望对大家有所启发和帮助。

文章目录

  • 1 写在前面
  • 2 操作系统的定义
    • 2.1 什么是操作系统?
    • 2.2 什么是实时操作系统?
  • 3 常见常用的主流实时操作系统对比
  • 4 工程中的实时操作系统
  • 5 友情推荐
  • 6 文末福利

1 写在前面

操作系统一直伴随着我的工作,早些年我刚出来的工作的时候,那时候用的是芯片平台是 飞思卡尔的MC9S12DG128,然后跑的是uCOS-II 的实时操作系统。

由于在大学期间没有上过操作系统相关的专业课程,说来也惭愧,在学校都是51单片机编程,顶多用了一下AVR单片机(16位),那时候想用STM32之类的高级单片机简直就是一种奢侈。印象很深刻的是,大三的时候出去实习,公司那边用的还都是8位单片机那种,主要是产品逻辑简单、硬件成本要求低。

受困于单片机平台的低端,自然没有想过要给它上操作系统,直到大四毕业找工作的时候,才发现原来自己学校做的那些课程实验、那些所谓的“业余比赛”,压根不够看,面试官直接忽略不计。

就这么大四第一学期的9月10月基本就是在这样的面试鄙视的尴尬场面中度过,也正是那个时候,我觉得我TM是不是应该整点操作系统这种高卡东西,不然面试老是面不上啊!

经过一番打听,得知嵌入式Linux操作系统在我们这一行还是很吃香的,于是我第一时间在学校的BBS上(对,当时学校的BBS还是有点流行)发了一个帖子,说征集学一起学习嵌入式Linux的童鞋,可以现学现卖,参加当年的挑战杯项目。

由于在学校也没啥影响力,这个帖子很快就沉下去了,连个泡泡都没有,自然也没找到合适的人一起学习嵌入式Linux。

苦于无奈执行,我只能寄希望于我的毕设,由于学院几个毕设的指导老师都没有嵌入式Linux相关的课题,于是我厚着脸皮去找我们的系主任,说我们想搞一个嵌入式Linux相关的毕业题目,能不能请老师通融下,给我们一次自拟定毕业题目的机会。好在系主任爽快地答应了,只是说选好了课题就要真真正正地去学,还是糊弄我们混个毕设。

这段对话其实还是蛮打动我的,自然我也没有辜负他的期望,还是把嵌入式Linux相关的基础知识学习了一遍。可能是幸运的降临,就在第一学期的12月份,我有幸收到了第一份OFFER,来自一个电力软件行业的大厂,给出的薪资在当时同行来说还是比较高的。当然对比现在看到的动则年薪20W-30W起,我那比不上了,但总算是上岸了。

我还是很感谢那段时间努力学习的自己,到底还是现学现卖的操作系统知识帮了我一把,让我也成为同届同学中,令人羡慕的那一批人。

对了,如果我没记错的话,当时我的毕设题目大概应该是:《基于S3C2410的MP3播放器》,当时是在ARM9上面跑的嵌入式Linux操作系统。

2 操作系统的定义

上面回忆当初在毕业前夕学习操作系统的一些故事,下面这一章节给大家稍微总结一些操作系统的基本定义和概念。

2.1 什么是操作系统?

操作系统(Operation System, OS) 是指控制和管理整个计算机系统的硬件和软件资源,并合理的组织和调度计算机的工作和资源的分配,以提供给用户和其它软件方便的接口和环境,它是计算机系统中最基本的系统软件。

它的计算机体系中的位置如下面这种图所示:

image-20230305224054995

从上图可以看出,层次越往下,就越靠近硬件,而操作系统正是在应用软件与计算机硬件之间的一个重要桥梁,也正是因为有了操作系统这一层次的存在,才有了上层各式各样的应用软件,也直接方便了顶层计算机用户的操作,提升了用户体验。

2.2 什么是实时操作系统?

实时操作系统(Real-time operating system, RTOS),又称即时操作系统,它会按照排序运行、管理系统资源,并为开发应用程序提供一致的基础。

实时操作系统与一般的操作系统相比,最大的特色就是 “实时性”,如果有一个任务需要执行,实时操作系统会马上(在较短时间内)执行该任务,不会有较长的延时。这种特性保证了各个任务的及时执行。

有关实时性的定义,可以参加维基百科的说法:

实时运算(Real-time computing)是计算机科学中对受到“实时约束”的计算机硬件和计算机软件系统的研究,实时约束像是从事件发生到系统回应之间的最长时间限制。实时程序必须保证在严格的时间限制内响应。

往往我们评估一个实时操作系统是否足够优秀,除了一些接口设计的人性化之外,其中一个很重要的特性就是评估其 实时性 。毕竟在嵌入式开发领域,某些项目场景下,实时性可是整个系统的命脉,一旦出现 非实时 的缺陷,可能问题就是致命的。

3 常见常用的主流实时操作系统对比

根据上面的大类说法,我们可以知道嵌入式操作系统并不一定都是实时操作系统,比如嵌入式Linux系统,它严格意义上就不是一个实时操作系统。但不得不承认,大部分的嵌入式操作系统都是实时操作系统。比如,我前文提及的 uCOS-II 操作系统。

本章节,我想给大家对主流的实时操作系统做个对比,以便于后续大家做操作系统选型参考:

image.png

里面罗列总结的,不一定都对,仅供参考,有疑问欢迎讨论。

4 工程中的实时操作系统

本章节,我会从工程实践的角度,总结一下实时操作系统的几个核心模块。

这两年我自己一直在做嵌入式系统架构设计这块,我们有个核心需求就是,要求我们的代码在各个硬件平台,无论它跑什么嵌入式操作系统,我们上层的应用代码都必须无缝衔接。

为了满足这样的需求,我们的软件架构设计中,独立设计了一层叫 OSAL(Operation System Abstract Layer),这一层它要解决的问题就是隔离具体的操作系统,对上提供统一的操作系统接口。

它的逻辑架构架构图如下所示:

image-20230305230153978

下面针对这个OSAL层,简单介绍一下我们的设计:

其实要想把底层各式各样的操作系统隔离隔离开,那么我们必须识别出,一般的操作系统都提供哪些系统能力,在这里我直接把我的答案写上来,欢迎大家补充。

操作系统的几个核心能力包括:

  • 多任务(多线程):这是属于任务管理的范畴,任何一个操作系统都必须提供类似的能力;
  • 内存管理:严格来说,这不是操作系统的专有模块,因为很多不上操作系统的工程也能看到类似的内存管理模块;但一般带操作系统的工程,都有类似的内存管理模块;
  • 互斥锁:这个基本是操作系统的必备能力,用于对一些临界区资源的操作保护;
  • 信号量:这个也是操作系统的必备能力,用于应对一些 逻辑同步 的应用场景;
  • 消息队列:这个基本也是操作系统的标配,用于解决不同线程、任务直接的消息通讯问题;
  • 事件组:这个可能不是每个操作系统都有,它的作用有点类似于消息队列,但是它的实现比消息队列更轻量;用于实现多个事件同步;
  • 定时器:这个也基本是操作系统的必选能力,用于提供给用户一些软件定时器的操作;

识别出了以上几个核心模块之后,剩下的就是接口抽象设计了,我想这一块应该难不倒大家了。有兴趣的可以一起多交流交流。

5 友情推荐

通过上面的介绍,大家对操作系统应该有一定的认识了,但我想,仅仅了解这些是远远不够的。

操作系统是一块很庞大的知识体系,建议大家系统地去学习一遍。

在这里我给大家推荐一本行业顶级的操作系统相关的工具书,它就是 《操作系统:原理与实现》

在这里插入图片描述

image-20230305232839241

本书的详细介绍,可以参加我的 社区文章

6 文末福利

为了鼓励大家好好学习《操作系统》,我在我的技术社区组织赠书活动,为大家送上五本《操作系统:原理与实现》,大家感兴趣的 戳这里。

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

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

相关文章

技术瓶颈?如何解决MongoDB超大块数据问题?

目录一、MongoDB服务器管理1、添加服务器2、修改分片中的服务器3、删除分片二、均衡器三、修改块的大小四、超大块1、分发超大块2、分发超大块步骤:3、避免出现超大块4、输出内容详解:五、系统分析器六、一些常见的辅助命令大家好,我是哪吒&a…

阿里巴巴高并发架构,到底如何对抗双十一亿级并发流量

前言 我们知道,高并发代表着大流量,高并发系统设计的魅力就在于我们能够凭借自己的聪明才智设计巧妙的方案,从而抵抗巨大流量的冲击,带给用户更好的使用体验。这些方案好似能操纵流量,让流量更加平稳得被系统中的服务…

【Linux】网络编程套接字(中)

🎇Linux: 博客主页:一起去看日落吗分享博主的在Linux中学习到的知识和遇到的问题博主的能力有限,出现错误希望大家不吝赐教分享给大家一句我很喜欢的话: 看似不起波澜的日复一日,一定会在某一天让你看见坚持…

【Linux】第一座高山——进程地址空间

大家好我是沐曦希💕 文章目录一、什么是进程地址空间二、进程地址空间的管理1.区域划分和调整三、为什么存在进程地址空间四、写在最后一、什么是进程地址空间 我们在学习C/C的动态内存空间,习惯把地址空间划分为几个区域: 但是这并不是真的的地址空间…

2023年网络安全趋势

数据安全越来越重要。 我国《数据安全法》提出“建立健全数据安全治理体系”,各地区部门均在探索和简历数据分类分级、重要数据识别与重点保护制度。 数据安全治理不仅是一系列技术应用或产品,更是包括组织构建、规范制定、技术支撑等要素共同完成数据…

node - 下载安装指定版本

文章目录前言一、什么是Node?二、安装1.打开 Node官网2.点击DOWNLOADS3.点击 All download options4.修改地址栏中对应的版本号修改版本号后选择需要的文件下载即可 ![在这里插入图片描述](https://img-blog.csdnimg.cn/049c33e7ebad4114937f23447c5d8c71.png)前言 node 下载…

python实现——处理Excel表格(超详细)

目录xls和xlsx基本操作1:用openpyxl模块打开Excel文档,查看所有sheet表2.1:通过sheet名称获取表格2.2:获取活动表3.1:获取表格的尺寸4.1:获取单元格中的数据4.2:获取单元格的行、列、坐标5&…

Linux- 系统随你玩之--玩出花活的命令浏览器上

文章目录1、背景2、命令浏览器2.1、命令浏览器介绍2.2、特点2.3 常用功能选项3、实操3.1、使用 wget 下载文件3.2、 断点续传3.3、镜像整个站点4、 总结1、背景 一位友人说他有台服务器,需要下载一个文件,但是没有视窗界面与下载工具,怎么办…

Cobalt Strike----(1)

团队服务器 Cobalt Strike 分为客户端组件和服务器组件。服务器组件,也就是团队服务器,是Beacon payload 的控制器,也是 Cobalt Strike 社会工程功能的托管主机。团队服务器还存储由Cobalt Strike 收集的数据,并管理日志记录。Cob…

猿创征文|【Typescript】搭建TS的编译环境

🍳作者:贤蛋大眼萌,一名很普通但不想普通的程序媛\color{#FF0000}{贤蛋 大眼萌 ,一名很普通但不想普通的程序媛}贤蛋大眼萌,一名很普通但不想普通的程序媛🤳 🙊语录:多一些不为什么的…

vue修改 el-input 输入框默认背景色

vue修改 el-input 输入框默认背景色 实际项目需要修改默认的 输入框背景色 &#xff0c;因为原本的默认框背景色设置属性 :disabledtrue 之后显示不是很清晰&#xff0c;所以需要配置相应的规则 原本的不能修改的输入样式&#xff0c;显示的不是很清晰 加上样式之后的效果 <…

自学黑客,一般人我劝你还是算了吧

写在开篇 笔者本人 17 年就读于一所普通的本科学校&#xff0c;20 年 6 月在三年经验的时候顺利通过校招实习面试进入大厂&#xff0c;现就职于某大厂安全联合实验室。 我为啥说自学黑客&#xff0c;一般人我还是劝你算了吧。因为我就是那个不一般的人。 首先我谈下对黑客&…

十大经典排序算法(上)

目录 1.1冒泡排序 1. 算法步骤 3.什么时候最快 4. 什么时候最慢 5.代码实现 1.2选择排序 1. 算法步骤 2. 动图演示 3.代码实现 1.3 插入排序 1. 算法步骤 2. 动图演示 3. 算法实现 1.4 希尔排序 1. 算法步骤 2. 动图演示 3.代码实现 1.5 归并排序 1. 算法步骤 2…

Android: 彻底搞懂Lifecycle——使用篇

系列文章目录 第一章 Android: 彻底搞懂Lifecycle——使用篇 第二章 Android: 彻底搞懂Lifcycle——原理篇 文章目录系列文章目录前言一、Lifecycle是什么&#xff1f;1. 应用场景2. 示例二、Lifecycle使用1. 泳&#xff08;用&#xff09;裤&#xff08;库&#xff09;第一步…

PyQt5(一) PyQt5安装及配置,从文件夹读取图片并显示,模拟生成素描图像

目录 一、环境配置 1.1 安装PyQt5 1.2 安装Qt工具包 1.3 配置环境变量 1.4 测试PyQt5 1.5 配置PyCharm 二、QtDesigner 窗口简单介绍 2.1 初始界面 2.2 控件介绍 三、相关函数 3.1 读取文件函数 3.1.1 打开本地图片 3.1.2 保存图片到本地 3.1.3 打开文件夹 3.1.4 打…

微信小程序|基于小程序+C#制作一个考试答题小程序

基于小程序+C#制作一个考试答题小程序打破传统线下考试答题的边界线问题,使考试不用再局限与某个统一的场所,只要有设备,哪里都能考试。 一、小程序

【动态规划】最长上升子序列、最大子数组和题解及代码实现

Halo&#xff0c;这里是Ppeua。平时主要更新C语言&#xff0c;C&#xff0c;数据结构算法......感兴趣就关注我吧&#xff01;你定不会失望。 &#x1f308;个人主页&#xff1a;主页链接 &#x1f308;算法专栏&#xff1a;专栏链接 我会一直往里填充内容哒&#xff01; &…

功能测试用例多次录制后,我丢掉了selenium,选择龙测AI-TestOps云平台

目录一、如何使用龙测AI-TestOps云平台1、进入龙测AI-TestOps云平台2、新建项目3、新建流程图4、创建任务5、查看任务状态6、查看报告、图片7、下载流程图、测试报告、excel用例二、龙测AI-TestOps云平台AI功能介绍1、NLP2、视频AI转流程图三、总结功能测试用例多次录制后&…

写着简单跑得又快的数据库语言 SPL

数据库语言的目标SQL为什么不行SPL为什么能行 数据库语言的目标 要说清这个目标&#xff0c;先要理解数据库是做什么的。 数据库这个软件&#xff0c;名字中有个“库”字&#xff0c;会让人觉得它主要是为了存储的。其实不然&#xff0c;数据库实现的重要功能有两条&#xf…

【微信小程序】按钮还能这样用?

目录 &#x1f353;button 按钮的基本使用 &#x1f349;各种神奇的按钮 &#x1f353;button 按钮的基本使用 按钮组件 功能比 HTML 中的 button 按钮丰富 通过 open-type 属性可以调用微信提供的各种功能&#xff08;客服、转发、获取用户授权、获取用户信息等&#xff09;…