目录
Linux 系统调用的过程,中间发生了什么?
表格总结
Linux 中断流程,谈谈你对中断上下文的理解
中断流程
中断上下文理解
Linux schedule() 函数的原理和调用的时机
schedule() 函数原理
调用时机
页表实现机制,分页的缺点?
页表机制
分页的缺点
介绍操作系统的多级反馈调度策略,时间片轮转,在项目中如何指定优先级来调度进程完成快速响应(nice 命令)
多级反馈队列调度
时间片轮转
使用 nice 命令
聊内存分配,进程内存分配,段页式存储,缺页中断,进程间通信的方式,为什么分用户空间和内核空间
进程内存分配
段页式存储
缺页中断
进程间通信
用户空间和内核空间
详细说下进程间共享内存的分配,在哪个空间,读写速度怎么样,通信是否需要经过内核
进程间共享内存
实时操作系统的调度器设计细节?包括调度算法设计和上下文保存中的细节
设计细节
一个操作系统中哪些地方会调用调度器?
一个信号量释放之后,在调度下一个线程的时候是如何选择的?
信号量释放后的调度决策
选择机制
调度决策
表格总结
如何去评估一个操作系统的实时性是否满足要求?如何去测算中断响应时间?
评估实时性
测算中断响应时间
表格总结
MCU 上如何设计用户态和内核态?如何保障操作系统的安全性?
用户态与内核态设计
安全性保障
如果让你去开辟一个新的产品,你会想做什么?
产品方向
产品示例
平时做驱动外设的时候,有没有遇到过一些棘手的问题?如何解决的?
遇到的问题
解决方案
C++多态怎么理解?C++有哪些多态的典型例子?
多态概念
示例
C++了解吗?C++11 新特性用的多吗
C++11 新特性
C 语言字节对齐的规则,为什么要字节对齐?
字节对齐规则
为什么需要字节对齐
C 语言程序运行时的内存分配
内存区域
const 关键字的用法
const 的用途
示例
copy_from_user 实现的原理?如果需要从内核中传递大量数据怎么办?
copy_from_user 实现原理
大量数据传递
extern C 有什么用?为什么要和编译器声明 C 语言环境?C 语言环境和 C++有什么不同?
extern "C" 的作用
C 语言环境和 C++ 的不同
delete []和 delete 的区别?
delete 和 delete[] 的区别
示例
C++11 的新特性有了解过吗?
C++11 新特性
C++为什么有指针还要引用?
指针与引用的区别
线程切换是怎么设计的?
线程切换设计
表格总结
信号量、互斥量底层是怎么设计的?
信号量底层设计
互斥量底层设计
内存管理是如何设计的?
内存管理设计
中断管理是如何设计的?
中断管理设计
你自己设计的 OS 相比于别人的,有哪些创新之处?
创新之处
线程同步用过什么?
线程同步机制
示例
互斥锁注意过高低优先级翻转吗
高低优先级翻转
解决方案
示例表格
自旋锁和互斥锁的区别,在中断中使用自旋锁要怎么避免死锁
自旋锁与互斥锁的区别
在中断中使用自旋锁避免死锁
示例表格
U-cos 系统滴答时钟设置频率
U-COS 系统滴答时钟
设置滴答时钟频率
示例表格
多任务运行同步机制
同步机制概述
常见的同步机制
示例表格
能简单说一些你用过的 STM32 的一些芯片的配置吗?CPU 主频,Flash 和 RAM 分别都是多大的?
STM32 芯片配置示例
示例表格
你在 STM32 上都做过哪些开发?
开发经验
你开发过哪些驱动吗?
驱动开发经验
你了解整个 SPI 的通信过程吗?SPI 有几根线,分别是什么?你使用 SPI 的时候速率配置的是多少?
SPI 通信过程
SPI 的线路
示例表格
速率配置
有使用过 DMA 吗?解释一下什么是 DMA?
DMA 技术
DMA 的工作原理
示例表格
SPI 有 4 种模式你知道是那 4 种模式吗?
SPI 模式
示例表格
你用过 GDB 调试吗?讲一讲常用命令。如果我编译报错,怎么定位错误位置,你知道 gdb 怎么进行多线程调试吗?
GDB 常用命令
编译报错定位
多线程调试
你知道回溯的概念吗?谈一谈栈回溯,采用 gdb 怎么调试?
回溯概念
GDB 中的栈回溯调试
示例表格
在用户态开发中程序跑飞,出现段错误等情况,你通过什么方式去定位?
程序跑飞定位
运行态的错误怎么调试?
运行态错误调试
对于一个无人机产品,基于目前市面上已有的产品,你还有什么新的设计想法?
新的设计想法
如果要设计一个操作系统实现多线程,你会需要几个模块?
操作系统多线程模块
用过大疆哪些产品?RoboMaster S1
RoboMaster S1 介绍
互斥量和信号量区别
互斥量与信号量的区别
示例表格
项目中碰到的困难,怎么解决的。
项目难题解决
无人机的未来(大疆产品优缺点)
无人机的未来
大疆产品优缺点
示例表格
对于临界区数据的处理,使用互斥锁和自己通过条件来判断,哪样更好,为什么?
互斥锁与自定义条件判断
互斥锁的优势
示例表格
上下文切换的时候系统做了些什么?
上下文切换过程
示例表格
中断是如何产生的,具体的工作原理知不知道?
中断工作原理
示例表格
MMU 是什么东西?MMU 是如何实现虚拟内存和实际物理内存的切换的?
MMU(Memory Management Unit)
示例表格
未初始化的全局变量放在什么地方?bss 段省的空间是什么空间?
全局变量存储位置
示例表格
说说 u-boot 启动流程。为什么 bootloader 要分两个阶段?
U-Boot 启动流程
两阶段的原因
示例表格
bootloader 第一个阶段为什么要足够的小?
第一阶段足够小的原因
示例表格
对总线协议有哪些了解?I2C 和 SPI
I2C 和 SPI 总线协议
示例表格
I2C 的读写数据的步骤
I2C 读写数据步骤
示例表格
虚拟地址如何转换成物理地址?MMU?
MMU(Memory Management Unit)
示例表格
什么是缺页异常?
缺页异常概念
示例表格
可以举一个具体的缺页异常产生的例子吗?
缺页异常的具体例子
示例表格
用户态程序访问空指针或者 0 地址会发生什么?
访问空指针或 0 地址的结果
示例表格
操作系统如何判断想要访问的物理地址是合法的还是非法的?
判断物理地址合法性
示例表格
需要将所有的合法地址标记为合法的吗?
是否需要标记所有合法地址
示例表格
页表是如何初始化?
页表初始化过程
示例表格
一个 ELF 文件加载到内存后,各个段的分布?
ELF 文件的内存布局
示例表格
堆区和栈区之间还有什么区?
堆区和栈区之间的区域
示例表格
mmap 匿名页的映射?
mmap 匿名页映射
示例表格
mmap 返回的虚拟地址如何和具体文件关联起来?
mmap 的虚拟地址与文件关联
示例表格
gdb 使用过吗?
GDB 的使用
示例表格
阅读过汇编代码吗?
汇编语言概述
示例表格
c 语言函数的入参在汇编语言中是如何导入函数主体的?
C 语言函数入参的汇编导入
示例表格
用到的 STM32 芯片硬件有了解过吗?
STM32 芯片硬件概述
示例表格
STM32 中断控制器是什么?
STM32 中断控制器
示例表格
对嵌入式开发有哪些了解?做了哪些准备?
嵌入式开发概述
准备工作
示例表格
FreeRTOS 的内存管理怎么实现的?
FreeRTOS 内存管理
示例表格
线程之间的通信方式?
线程间通信方式
示例表格
FreeRTOS 任务抢占的机制
FreeRTOS 任务抢占机制
示例表格
FreeRTOS 内存分配
FreeRTOS 内存分配机制
示例表格
未初始化的变量的初值是怎么样的?
未初始化的变量初值
示例表格
static 变量的初始化在什么阶段?
static 变量初始化阶段
示例表格
一个程序从写完到运行起来需要经历什么阶段?
程序从写完到运行的过程
示例表格
虚函数是用来干嘛的?虚函数机制怎么实现的?虚表指针在内存中的存放位置?
虚函数及其机制
示例表格
智能指针用过吗?weak_ptr 是用来干嘛的?怎么保证用 weak_ptr 不会崩溃?
智能指针和 weak_ptr
示例表格
进程和线程的区别?
进程和线程的区别
示例表格
用过大疆哪些产品?RoboMaster S1
大疆 RoboMaster S1
互斥量和信号量区别
互斥量和信号量的区别
示例表格
Linux 系统调用的过程,中间发生了什么?
系统调用是用户态程序与内核交互的一种方式。当用户态程序需要请求内核服务时,它会通过系统调用来完成。以下是系统调用的一般过程:
-
发起系统调用:
- 用户态程序通过调用一个库函数(通常是 glibc 提供的)来发起系统调用。
- 库函数负责设置好系统调用所需的参数,并通过特定的指令(