嵌入式面试八股文(九)·FreeRTOS与Linux的区别与相同点、多进程与多线程的区别、为什么项目使用多线程

目录

1.  FreeRTOS与Linux的区别与相同点

1.1  相同点

1.1.1  任务调度

1.1.2  多任务支持

1.1.3  内存管理

1.1.4  中断处理

1.1.5  同步机制

1.2  不同点

1.2.1  设计目标

1.2.2  实时性

1.2.3  内存管理

1.2.4  进程管理

1.2.5  多核支持

1.2.6  硬件支持

1.2.7  文件系统

1.2.8  用户空间与内核空间

1.2.9  开发工具与生态

1.2.10  大小和资源占用

2.  在64位操作系统中,double型的指针变量占几个字节

3.  多进程与多线程的区别

3.1  概念

3.2  资源消耗

3.3  通信方式

3.4  并发性

3.5  崩溃隔离

3.6  创建和销毁

4.  为什么项目使用多线程


1.  FreeRTOS与Linux的区别与相同点

1.1  相同点

1.1.1  任务调度

        两者都支持任务(进程或线程)调度。都有任务调度机制,支持优先级调度。

  • FreeRTOS 使用任务(Tasks)的概念。
  • Linux 使用进程(Processes)和线程(Threads)。

1.1.2  多任务支持

        FreeRTOS 和 Linux 都支持多任务并发执行,允许多个任务(或进程/线程)在 CPU 上交替执行。

1.1.3  内存管理

        都有内存管理机制,虽然实现不同,但 FreeRTOS 和 Linux 都为任务提供堆栈空间和动态内存分配功能。

        Linux 提供了复杂的内存管理(如虚拟内存),而 FreeRTOS 的内存管理通常较为简单。

1.1.4  中断处理

        FreeRTOS 和 Linux 都支持中断机制,用于响应硬件事件和外部输入。

  • FreeRTOS 中断服务例程(ISR)通常执行简单的操作。
  • Linux 中断处理较为复杂,通常涉及内核模块和更多的资源管理。

1.1.5  同步机制

        两者都提供同步机制,如信号量、互斥量、队列、事件等。

  • FreeRTOS 提供了类似的机制(信号量、互斥量、事件组等)用于任务间的同步。
  • Linux 提供了进程间的信号量、互斥锁、条件变量、读写锁等。

1.2  不同点

1.2.1  设计目标

        FreeRTOS:FreeRTOS 是为嵌入式系统设计的实时操作系统,目标是低资源消耗、高响应性、简洁性。它适用于小型、资源有限的设备,如微控制器(MCU)和嵌入式系统。

        Linux:Linux 是为通用计算设备(如个人电脑、服务器和嵌入式系统)设计的多任务操作系统,目标是高度灵活、功能丰富,支持复杂的硬件和软件环境。

1.2.2  实时性

         FreeRTOS:是一个实时操作系统(RTOS),提供非常短的任务切换时间和可预测的中断响应,适用于需要精确时间控制的实时任务。

        Linux:Linux 是一个通用操作系统,尽管它有实时扩展(如 RT-Patch、PREEMPT-RT),但它的实时性能不如专用的实时操作系统。Linux 主要面向多任务和大规模的用户级应用。

1.2.3  内存管理

        FreeRTOS:不提供复杂的虚拟内存管理。FreeRTOS 通常直接管理物理内存,适合内存资源有限的嵌入式设备。

        Linux:支持复杂的虚拟内存管理,提供内存保护和分段机制,每个进程都在独立的虚拟地址空间中运行,内核管理物理内存和交换空间(swap)。

1.2.4  进程管理

        FreeRTOS:没有传统意义上的进程,只有任务。任务之间通常共享相同的地址空间,通信主要通过队列、信号量等机制实现。

        Linux:有完整的进程管理机制,支持多进程、多线程,支持独立的进程地址空间、进程调度、信号处理等。

1.2.5  多核支持

        FreeRTOS:基本支持多核,但通常需要额外的配置和开发。FreeRTOS 的多核支持相对较简单,通常使用对称多处理(SMP)或非对称多处理(AMP)。

        Linux:原生支持多核处理器,能够在多个 CPU 上并行执行多个进程。Linux 通过内核的调度器来管理多核系统,支持多核系统的负载均衡。

1.2.6  硬件支持

        FreeRTOS:适用于资源受限的嵌入式硬件,通常用于 8-bit、16-bit、32-bit 微控制器上,支持大量低功耗设备。

        Linux:主要支持更高端的硬件,如基于 x86、ARM、PowerPC 等架构的多核处理器,支持复杂的硬件设备和外设。

1.2.7  文件系统

        FreeRTOS:默认不提供文件系统,开发者可以通过外部库(如 FatFS)实现文件系统。

        Linux:提供强大的文件系统支持,内核支持多种文件系统(如 ext4、xfs、btrfs、ntfs 等),并且可以动态挂载、卸载文件系统。

1.2.8  用户空间与内核空间

        FreeRTOS:没有用户空间和内核空间的区分,任务直接在内核空间中运行。

        Linux:有严格的用户空间和内核空间的区分,用户进程不能直接访问内核空间,只有通过系统调用(syscall)才能与内核交互。

1.2.9  开发工具与生态

        FreeRTOS:开发工具主要是基于嵌入式开发环境(如 Keil、IAR、GCC 等),并且使用的库和驱动通常比较精简,易于定制。

        Linux:有丰富的开发工具和庞大的生态系统,支持大量的编程语言(如 C、C++、Python、Java 等),并且有强大的调试、性能分析工具(如 GDB、perf、strace 等)。

1.2.10  大小和资源占用

        FreeRTOS:非常轻量级,内核代码非常小,通常在几 KB 的内存中就能运行。适合嵌入式系统中资源有限的场景。

        Linux:相对较重,需要较多的内存和存储空间,最小配置可能需要几十 MB 的空间。

2.  在64位操作系统中,double型的指针变量占几个字节

类型16位32位64位
char111
short int222
int244
unsigned int244
float444
double888
long448
long long888
unsigned long448

3.  多进程与多线程的区别

3.1  概念

        多进程:指的是操作系统同时运行多个进程,每个进程拥有独立的地址空间、内存和资源。进程间相互独立,不能直接访问对方的内存。

        多线程:指的是一个进程内同时运行多个线程,这些线程共享同一个进程的地址空间和资源。线程之间可以直接访问共享数据。

3.2  资源消耗

        多进程:每个进程都有自己的地址空间、堆栈、内存等资源,进程间的切换和通信相对较重。进程的创建和销毁比较耗费资源。

        多线程:线程是轻量级的,多个线程共享同一进程的资源,因此资源开销较小。线程之间的上下文切换比进程更轻便。

3.3  通信方式

        多进程:进程间通信(IPC)通常较为复杂和低效,需要通过管道、消息队列、共享内存等方式来实现。由于进程之间相互独立,它们的内存不可直接共享。

        多线程:线程间的通信非常方便,因为它们共享相同的内存空间,可以通过共享变量等方式来传递数据。

3.4  并发性

        多进程:在多核系统中,可以实现真正的并行,因为每个进程都可以在不同的核心上独立运行。

        多线程:多线程也可以实现并发,在多核系统中,如果操作系统支持,它们也能在不同的核上并行执行。但由于线程共享内存,线程之间的调度和同步需要特别注意。

3.5  崩溃隔离

        多进程:由于进程之间相互独立,一个进程崩溃不会直接影响其他进程,这种隔离性提高了系统的稳定性。

        多线程:由于多个线程共享同一进程的内存空间,某个线程的崩溃可能导致整个进程崩溃。

3.6  创建和销毁

        多进程:创建和销毁进程比线程更为复杂和消耗资源,因为操作系统需要为每个进程分配独立的资源。

        多线程:线程的创建和销毁相对简单,因为它们共享同一个进程的资源。

4.  为什么项目使用多线程

共享内存资源: 多线程的最大优点之一是线程间能够共享同一进程的内存空间,数据传递和通信效率高,不需要通过复杂的进程间通信机制,这对于一些需要频繁数据交换和共享资源的应用来说,能显著提升性能。

较低的开销: 线程的创建和销毁比进程轻量,不需要为每个线程分配独立的内存空间,相较于多进程,系统资源消耗较小。尤其在需要频繁创建和销毁的场景下,使用线程可以减少系统开销。

适用于并发任务: 多线程非常适合并发任务处理,例如 Web 服务、图形渲染、数据库连接池等多种场景,线程可以在多个任务中共享处理器时间,利用 CPU 的多核能力,实现高效并发。

响应性和交互性: 在一些需要响应用户操作的应用程序(如图形界面程序、Web 应用)中,使用多线程可以让主线程负责用户界面交互,而其他线程则执行后台处理任务。这种分工可以保持界面的流畅性和响应性。

I/O 密集型任务: 多线程对于 I/O 密集型应用(如网络请求、文件读写等)特别有用。在这类应用中,线程在等待 I/O 操作完成时可以被挂起,其他线程可以继续运行,不会浪费 CPU 资源。

并行计算: 在一些计算密集型任务中,通过多线程将计算任务划分到不同的核心上并行执行,能够大幅提高计算效率,尤其是在多核处理器的环境下。

减少阻塞和提高吞吐量: 通过多线程,一个线程阻塞的时间(比如等待 I/O 或网络请求的响应)可以让其他线程继续工作,减少了 CPU 的空闲时间,提高了系统的吞吐量和响应速度。

千题千解·嵌入式工程师八股文详解_时光の尘的博客-CSDN博客

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

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

相关文章

SpringBoot(8)-任务

目录 一、异步任务 二、定时任务 三、邮件任务 一、异步任务 使用场景:后端发送邮件需要时间,前端若响应不动会导致体验感不佳,一般会采用多线程的方式去处理这些任务,但每次都需要自己去手动编写多线程来实现 1、编写servic…

css:感觉稍微高级一点的布局

精灵图 有时候我们下载网页里的小元素图片的时候,就会一下子下载一大张,这就是精灵图,也叫雪碧图(sprites) 一个网页由很多图像作为修饰,当网页中图像过多时,服务器会频繁地解释和发送氢气图片…

docker安装zabbix +grafana

安装zabbix grafana 1、部署 mkdir -p /opt/zabbix/{data,backups}mkdir -p /opt/grafanasudo chown -R 472:472 /opt/grafanasudo chmod -R 755 /opt/grafanacat > docker-compose.yml <<-EOF version: 3.3services:mysql-server:image: mysql:8.1container_name: m…

什么是Hadoop

Hadoop 介绍 Hadoop 是由 Apache 开发的开源框架&#xff0c;用于处理分布式环境中的海量数据。Hadoop 使用 Java 编写&#xff0c;通过简单的编程模型允许在集群中进行大规模数据集的存储和计算。它具备高可靠性、容错性和扩展性。 分布式存储&#xff1a;Hadoop 支持跨集群…

六大核心应用场景,解锁AI检测系统的智能安全之道

AI检测系统基于深度学习、计算机视觉和多模态数据融合技术&#xff0c;广泛应用于工业、能源、制造等高风险作业领域&#xff0c;旨在实现作业安全、流程规范和效率提升的智能化管理。以下是系统主要应用场景的概述&#xff1a; 1. 高风险作业安全监控 应用场景&#xff1a;高压…

Verilog HDL可综合与不可综合语句

目录 什么是逻辑综合 可综合语句 不可综合语句 逻辑综合建模建议 综合流程 什么是逻辑综合 所谓逻辑综合就是在标准单元库和特定的设计约束的基础上&#xff0c;把设计的高层次描述转换成优化的门级网表的过程。 标准单元库&#xff08;工艺库&#xff09;可以包含简单的…

SpringBoot中设置超时30分钟自动删除元素的List和Map

简介 在 Spring Boot 中&#xff0c;你可以使用多种方法来实现自动删除超时元素的 List 或 Map。以下是两种常见的方式&#xff1a; 如果你需要简单的功能并且不介意引入外部依赖&#xff0c;可以选择 Guava Cache。如果你想要更灵活的控制&#xff0c;使用 Spring 的调度功能…

@RequestBody、@Data、@Validated、@Pattern(regexp=“?“)(复习)

目录 一、注解RequestBody。 二、注解Data。 三、注解Validated、Pattern(regexp"?")。 1、完成实体参数&#xff08;对象属性&#xff09;校验。 2、NotNull、NotEmpty、Email。 一、注解RequestBody。 &#xff08;如&#xff1a;JSON格式的数据——>Java对象&…

使用uniapp开发微信小程序使用uni_modules导致主包文件过大,无法发布的解决方法

在使用uniapp开发微信小程序时候&#xff0c;过多的引入uni_modules的组件库&#xff0c;会导致主包文件过大&#xff0c;导致无法上传微信小程序&#xff0c;主包要求大小不超过1.5MB.分包大小每个不能超过2M。 解决方法&#xff1a;分包。 1.对每个除了主页面navbar的页面进…

NVR录像机汇聚管理EasyNVR大华NVR管理平台:深耕视频监控市场的多元化兼容

在当今快速发展的视频监控行业中&#xff0c;技术的日新月异与设备种类的繁多给系统集成与运维带来了前所未有的挑战。为了应对这一现状&#xff0c;EasyNVR作为一款集视频流接收、转发、存储、管理于一体的综合型视频服务平台&#xff0c;凭借其深厚的技术积累和对市场的精准洞…

游戏行业趋势:“AI、出海、IP”大热下,如何提升竞争力?

游戏&#xff1a;新品供给影响业绩释放节奏&#xff0c;后续游戏新品逐步上线&#xff0c;或驱动板块业绩修复 2024年前三季度A股游戏板块实现营业收入681.8亿元&#xff0c;同比增长5.1%&#xff0c;实现归母净利润73.3亿元&#xff0c;同比下滑30.4%&#xff0c;或主要受 20…

【vba源码】导入excel批注信息

Hi&#xff0c;大家好呀&#xff01; 又到了一周一分享的时间&#xff0c;上周繁忙的我都没有给大家直播&#xff0c;视频也没更新&#xff0c;那这周大家放心&#xff0c;都会给大家更新&#xff0c;今天我们来讲点啥呢&#xff1f;每周找优质的内容给大家更新是我最最痛苦的…

Spark SQL大数据分析快速上手-完全分布模式安装

【图书介绍】《Spark SQL大数据分析快速上手》-CSDN博客 《Spark SQL大数据分析快速上手》【摘要 书评 试读】- 京东图书 大数据与数据分析_夏天又到了的博客-CSDN博客 Hadoop完全分布式环境搭建步骤-CSDN博客,前置环境安装参看此博文 完全分布模式也叫集群模式。将Spark目…

nginx代理解决跨域问题CORS错误

配置如下 # 允许跨域请求add_header Access-Control-Allow-Origin *;# 允许带身份验证信息的跨域请求add_header Access-Control-Allow-Credentials true;# 允许的请求方法add_header Access-Control-Allow-Methods GET, POST, OPTIONS;# 允许的请求头add_header Access-Contro…

H.264/H.265播放器EasyPlayer.js视频流媒体播放器关于websocket1006的异常断连

EasyPlayer.js无插件H5播放器属于一款高效、精炼、稳定且免费的流媒体播放器&#xff0c;可支持多种流媒体协议播放&#xff0c;无须安装任何插件&#xff0c;起播快、延迟低、兼容性强&#xff0c;使用非常便捷。 EasyPlayer.js播放器不仅支持H.264与H.265视频编码格式&#x…

uniapp开发微信小程序笔记3-全局配置、导航栏配置、tabBar配置

前言&#xff1a; 本文记录的是微信小程序的全局配置、导航栏配置、tabBar配置 一、全局配置&#xff1a; 可以直接查官方文档&#xff1a;pages.json 页面路由 | uni-app官网&#xff0c;有非常详细的文档说明 都是在 pages.json里面做配置的&#xff0c;我们可以看到已经有…

STM32芯片EXIT外部中断的配置与原理以及模板代码(标准库)

配置EXIT外部中断其实就是把GPIO刀NVIC的各个外设配置好 第一步&#xff1a;配置RCC&#xff0c;把我们涉及到的外设的时钟都打开 &#xff08;此处EXTI是默认打开的&#xff0c;而NVIC是内核外设无需配置&#xff09; 第二步&#xff1a;配置GPIO,选择端口为输入模式 第三…

【QT】绘图

个人主页~ 绘图 一、绘图1、基础内容2、绘制形状&#xff08;1&#xff09;线段&#xff08;2&#xff09;矩形&#xff08;3&#xff09;圆形&#xff08;4&#xff09;文本&#xff08;5&#xff09;画笔&#xff08;6&#xff09;画刷 3、绘制图片&#xff08;1&#xff09;…

Quality minus junk论文阅读

Quality minus junk论文阅读 文章目录 Quality minus junk论文阅读 AbstractTheoretical FrameworkEmpirical AnalysisDataQuality scorePortfoliosEx ante quality forecasts fundamentals Results and DiscussionThe price of qualityUnderstanding the price of quality: th…

葡萄酒(wine)数据集——LDA、贝叶斯判别分析

1 葡萄酒(wine)数据集介绍 葡萄酒识别数据集(Wine Recognition dataset)通常用于多类别分类问题建模。数据集包括从三个不同的品种(类别)的葡萄酒中测得的13种不同的化学特征,共178个样本。这些化学特征包括酸度、灰分、酒精浓度等。 该数据集是由UCI机器学习库提供,并…