嵌入式C语言面试相关知识——CPU、进程和线程相关(相关问题很多,会经常过来更新)
嵌入式C语言面试相关知识——CPU、进程和线程相关
- 一、博客声明
- 二、自问题目——CPU相关
- 1、什么是中断?如何处理中断?
- 2、解释上下文切换(Context Switch)?
- 3、在嵌入式中如何优化CPU使用?
- 三、自问题目——进程相关
- 1、什么是进程?
- 2、嵌入式系统中进程和线程的区别是什么?
- 3、在嵌入式系统中如何创建和管理进程?
- 四、自问题目——线程程相关
- 1、什么是线程?
- 2、如何实现多线程编程?
- 3、什么事线程同步?为什么需要线程同步?
- 4、在嵌入式系统中如何避免死锁?
- 四、自问题目——其他问题
- 1、CPU核心数和线程数量关系?
一、博客声明
又是一年一度的秋招,怎么能只刷笔试题目呢,面试题目也得看,想当好厂的牛马其实也不容易呀O(∩_∩)O。注意:这篇博客大部分是来自网上的资源,通过自问或者他问,然后寻找答案,为了加深印象,总结和抄一遍。并且会不定期更新这个方面的内容。
二、自问题目——CPU相关
1、什么是中断?如何处理中断?
中断是硬件或软件事件,它打断当前程序的执行以处理紧急任务。处理中断通常涉及:
- 保存当前CPU状态。
- 执行中断服务程序(ISR)。
- 恢复CPU状态,进行执行被中断的任务。
2、解释上下文切换(Context Switch)?
上下文切换是指操作系统从一个进程或线程切换到另外一个进程或线程的过程。上下文切换包括保存当前进程的状态(寄存器,程序计数器等)并恢复另外一个进程的状态。虽然上下文切换允许多任务并行处理,但频繁的上下文切换会导致性能开销。
3、在嵌入式中如何优化CPU使用?
- 使用高效的数据结构和算法。
- 尽量减少上下文切换。
- 使用中断而不是轮询来处理外部事件。
- 调整任务的优先级以确保关键任务得到及时的处理。
三、自问题目——进程相关
1、什么是进程?
进程是一个正在执行的程序的示例,它拥有自己的内存空间和系统资源。进程是操作系统分配资源和调度的基本单位。
2、嵌入式系统中进程和线程的区别是什么?
进程是独立运行的实体,每个进程都有自己的内存空间。而线程是进程中的一个执行单元,同一个进程中的线程共享内存和资源。线程切换比进程切换更快,因为线程共享同一个进程的地址空间。
3、在嵌入式系统中如何创建和管理进程?
在嵌入式系统中,进程管理通常是由实时操作系统(RTOS)或者内核负责。进程的创建和管理包括了分配内存、初始化进程控制块(PCB)、设置优先级和调度策略等。
四、自问题目——线程程相关
1、什么是线程?
线程是进程中的一个独立执行流,它与同一进程中的其他线程共享进程的内存空间和系统资源。线程是操作系统调度的基本单元。
2、如何实现多线程编程?
多线程编程可以通过创建多个线程让他们并发执行任务来实现。在C语言中可,可以使用POSIX线程(pthreads)库来创建和管理线程。关键函数包括pthread_create、pthread_join、pthread_mutex_lock、pthread_mutex_unlock等。
3、什么事线程同步?为什么需要线程同步?
线程同步是指协调多个线程对共享资源的访问,以避免数据竞争和不一致。常用的线程同步机制包括互斥锁(mutex)、信号量(semaphore)、条件变量(condition variable)等。线程同步确保多个线程安全地访问共享资源,防止竞态条件。
4、在嵌入式系统中如何避免死锁?
-
出现死锁的原因:
- 资源竞争:多个任务或线程同时请求相同的资源(如互斥锁、信号量、内存块等),如果这些资源没有得到适当的管理,就可能导致死锁。例如,两个任务A和B分别持有资源R1和R2,任务A请求R2,而任务B请求R1,此时就会产生死锁。
- 资源获取顺序不一致:如果不同的任务或线程在获取多个资源时,按照不同的顺序请求资源,也可能导致死锁。例如,任务A按照R1 -> R2的顺序请求资源,而任务B按照R2 -> R1的顺序请求资源,这种不一致的顺序会增加死锁的风险。
- 资源未能及时释放:任务或线程在获得资源后,由于编程错误或异常情况未能及时释放资源,导致其他任务或线程无法获取所需资源,从而可能引发死锁。
- 环形等待:当一个任务等待另一个任务所持有的资源,而后者又在等待前者所持有的资源时,就会形成环形等待。环形等待是死锁的必要条件之一。
- 互斥使用:某些资源在同一时间只能被一个任务或线程使用,这种互斥使用资源的特性会增加死锁的可能性。例如,互斥锁在同一时间只能被一个任务或线程持有,其他任务或线程必须等待。
- 持有并等待:任务或线程在持有一个资源的同时,继续请求其他资源,而不释放已持有的资源。这种情况如果发生在多个任务或线程之间,就可能导致死锁。
-
避免死锁的方法:
- 避免嵌套锁:尽量减少多个锁的嵌套使用。
- 按序申请资源:按照预定顺序申请资源,避免循环等待。
- 超时机制:为锁的申请设置超时,超时后释放已获得的锁。
- 使用非阻塞算法和数据结构:使用非阻塞算法和数据结构,如无锁队列、无锁栈等,可以减少对互斥锁等资源的依赖,降低死锁风险。
四、自问题目——其他问题
1、CPU核心数和线程数量关系?
一般来说,一个物理核心只能处理一个线程;多个物理核心,每个核心都可以独立执行一个线程,实现真正的并行。多核处理器可以执行多个进程或线程;超线程技术,通过超线程技术,每个物理核心可以处理多个线程。例如intel的一些四核处理器可能有逻辑核心,可以同时执行八个线程。
相关文章:
嵌入式C语言面试相关知识——CPU、进程和线程相关(相关问题很多,会经常过来更新)
嵌入式C语言面试相关知识——CPU、进程和线程相关 一、博客声明二、自问题目——CPU相关1、什么是中断?如何处理中断?2、解释上下文切换(Context Switch)?3、在嵌入式中如何优化CPU使用? 三、自问题目——进程相关1、什么是进程&a…...
Linux学习看这一篇就够了,超超超牛的Linux基础入门
引言 小伙伴们,不管是学习c还是学习其他语言在我们学的路上都绕不过操作系统,而且,老生常谈的Linux更是每个计算机人的必修,那么我们对Linux的了解可能只是从别人那听到的简单的这个系统很牛,巴拉巴拉的,但…...
el-scrollbar组件使用踩坑记录
一、el-scrollbar和浏览器原生滚动条一起出现 问题描述 el-scrollbar组件主要用于替换浏览器原生导航条。如下图所示,使用el-scrollbar组件后,发现未能成功替换掉浏览器原生导航条,二者同时出现。 引发原因 el-scrollbar的height属性如果…...
Linux计算机结构
1.计算机设计原理 冯诺依曼体系结构 通过该结构得出:中央处理器 2.操作系统整体框架 操作系统是不会让你直接乱使用底层的各种硬件,但为了依旧能够让你使用到该资源则会给你预留一些窗口去让你与其交互(类比银行,直接小窗口交互,…...
应用进程、SurfaceFlinger进程、HWC进程 之间的关系
应用进程、SurfaceFlinger进程、HWC(Hardware Composer)进程在Android系统中扮演着重要的角色,它们之间的关系和通信流程是Android图形显示系统的核心部分。以下是这三者之间关系和通信流程的详细分析: 一、三者之间的关系 应用进…...
66.Python-web框架-Django-免费模板django-datta-able的分页的一种方式
目录 1.方案介绍 1.1实现效果 1.2django.core.paginator Paginator 类: Page 类: EmptyPage 和 PageNotAnInteger 异常: 1.3 templatetags 2.方案步骤 2.1创建一个common app 2.2创建plugins/_pagination.html 2.3 其他app的views.py查询方法 2.4在AIRecords.html里…...
Python编程学习笔记(1)--- 变量和简单数据类型
1、变量 在学习编程语言之前,所接触的第一个程序,绝大多数都是: print("Hello world!") 接下来尝试使用一个变量。在代码中的开头添加一行代码,并对第二行代码进行修改,如下: message "…...
第二证券:资金抱团“高股息”,超三成A股年内创历史新低!
A股商场行情冰火两重天。 “预制菜榜首股”跌破发行价 7月8日,味知香盘中最低跌至19.26元/股,股价跌破发行价,并创前史新低。揭露资料显现,公司是集研发、生产、销售为一体的半成品菜企业,现在具有8大产品系列&#…...
ASAN排查程序中内存问题使用总结
简介 谷歌有一系列Sanitizer工具,可用于排查程序中内存相关的问题。常用的Sanitizer工具包括: Address Sanitizer(ASan):用于检测内存使用错误。Leak Sanitizer(LSan):用于检测内存…...
day01:项目概述,环境搭建
文章目录 软件开发整体介绍软件开发流程角色分工软件环境 外卖平台项目介绍项目介绍定位功能架构 产品原型技术选型 开发环境搭建整体结构:前后端分离开发前后端混合开发缺点前后端分离开发 前端环境搭建Nginx 后端环境搭建熟悉项目结构使用Git进行版本控制数据库环…...
Python爬虫与数据可视化:构建完整的数据采集与分析流程
Python爬虫技术概述 Python爬虫是一种自动化的数据采集工具,它可以模拟浏览器行为,访问网页并提取所需信息。Python爬虫的实现通常涉及以下几个步骤: 发送网页请求:使用requests库向目标网站发送HTTP请求。获取网页内容…...
Java---包装类与泛型
1.包装类 1.1 包装类 在Java中,由于基本数据类型不是继承Object类,为了在泛型代码中可以支持基本数据类型,Java给每个基本数据类型各自提供了一个包装类。 如下图 除了char和int基本数据类型的包装类型有点特别,其他的都是首字…...
如何优化 PostgreSQL 中对于复杂数学计算的查询?
文章目录 一、理解复杂数学计算的特点二、优化原则(一)索引优化(二)查询重写(三)数据库配置调整(四)使用数据库内置函数的优势 三、具体的优化方案和示例(一)…...
前端面试题27(在实际项目中,如何有效地利用Vue3的响应式系统提高性能?)
在实际项目中,有效利用Vue3的响应式系统提高性能主要涉及以下几个关键点: 1. 合理使用reactive和ref reactive:用于将复杂的数据结构(如对象或数组)转换成响应式版本。确保只将需要实时更新的数据结构声明为响应式&am…...
掌握Vue 3生命周期:从组合式API到高效代码实践
引言 在 Vue 3 中,生命周期的概念得到了进一步的优化和简化。Vue 3 引入了组合式 API(Composition API),这为开发者提供了更灵活的方式来组织和重用代码逻辑。与传统的选项式 API(Options API)相比&#x…...
使用cgroup对pgsql进行分库资源限制
系统:Centos7 pg版本:14.11 自建pgsql14中有很多个库,一个库对应一个租户,偶尔会出现单个租户执行慢sql影响全局的问题,目前官方也没有比较合适的处理方案或者插件 解决方案: 因为pgsql是多进程应用,所以正好可以使用linux自带的cgroup功能进行资源限制。定时将进程中…...
【网络安全】一文带你了解什么是【网络劫持】
网络劫持(Network Hijacking)是一种网络攻击,攻击者通过非法手段劫持网络通信,导致合法用户的数据流被拦截、篡改或重定向到攻击者控制的系统。这种攻击可以在各种网络层面上进行,包括域名系统(DNS…...
springcloud分布式架构网上商城 LW +PPT+源码+讲解
3系统分析 3.1可行性分析 在开发系统之前要进行系统可行性分析,目的是在用最简单的方法去解决最大的问题,程序一旦开发出来满足了用户的需要,所带来的利益也很多。下面我们将从技术、操作、经济等方面来选择这个系统最终是否开发。 3.1.1技术…...
【Linux】动态库的制作与使用
💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃个人主页 :阿然成长日记 …...
Vue框架引入
vue简介 1.1.vue是什么?Vue官网 英文官网: https://vuejs.org/中文官网: https://cn.vuejs.org/ vue是一套构建用户界面的渐进式javascript框架 构建用户界面:将我们手里拿到的数据通过某种办法变成用户可以看见的界面前端工程师的职责:就是在合适的时候发出合适的请求,然后…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...
Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...
HTML前端开发:JavaScript 常用事件详解
作为前端开发的核心,JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例: 1. onclick - 点击事件 当元素被单击时触发(左键点击) button.onclick function() {alert("按钮被点击了!&…...
微信小程序云开发平台MySQL的连接方式
注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...
ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...
如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...
算法:模拟
1.替换所有的问号 1576. 替换所有的问号 - 力扣(LeetCode) 遍历字符串:通过外层循环逐一检查每个字符。遇到 ? 时处理: 内层循环遍历小写字母(a 到 z)。对每个字母检查是否满足: 与…...
