没有合适的资源?快使用搜索试试~ 我知道了~
嵌入式常见面试题汇总.doc
需积分: 12 2 下载量 60 浏览量
2021-04-26
14:35:09
上传
评论
收藏 1.34MB DOC 举报
温馨提示
试读
27页
嵌入式
资源详情
资源评论
资源推荐
1、作用域类型:
变量从低到高的优先级以下面展示:
文件作用域;变量在全局从文件开头到结尾一直有效即全局变量
函数作用域:也称局部变量
代码块作用域;用花括号内的定义的变量;都是在代码块{}中有效 如:
循环的代码块
函数的声明作用域:那变量只在声明的开始到声明参数的结束
2、进程与线程的区别
、进程:指在系统中正在运行的一个应用程序;程序一旦运行就是进程;
、线程:系统分配处理器时间资源的基本单元,进程之内独立执行的一个单元执行流。
、根本区别:进程是操作系统资源分配的基本单位,而线程是任务调度和执行的基本单
位
、在开销方面:每个进程都有独立的代码和数据空间(程序上下文),程序之间的切换
会有较大的开销;线程可以看做轻量级的进程,同一类线程共享代码和数据空间,每个线
程都有自己独立的运行栈和程序计数器(),线程之间切换的开销小。
、所处环境:在操作系统中能同时运行多个进程(程序);而在同一个进程(程序)中
有多个线程同时执行(通过 调度,在每个时间片中只有一个线程执行)
、内存分配方面:系统在运行的时候会为每个进程分配不同的内存空间;而对线程而言,
除了 外,系统不会为线程分配内存(线程所使用的资源来自其所属进程的资源),线
程组之间只能共享资源。
、包含关系:没有线程的进程可以看做是单线程的,如果一个进程内有多个线程,则执
行过程不是一条线的,而是多条线(线程)共同完成的;线程是进程的一部分,所以线程
也被称为轻权进程或者轻量级进程。
、进程结束,其中线程也结束;
3、为什么要用线程:
、进程技术的劣势:
进程间切换开销大
进程间通信麻烦而且效率低
、线程技术
线程技术保留了进程技术实现多任务的特性。
线程的改进就是在线程间切换和线程间通信上提升了效率。
多线程在多核心 上面更有优势。
3、Kmalloc、Vmalloc、malloc 的区别
(1)kmalloc()
、用于申请较小的、连续的物理和虚拟内存,一般用于结构体分配内存
、 以字节为单位进行分配,在 !"#$%&'中
、 原型:()*+%,$-.$-/ 0%1$
、(*, $()2释放由 *+%,分配出来的内存块
(2)vmalloc()
、用于申请较大的内存空间,内存虚拟地址上连续,物理地址不连续,一般用于给模块
分配内存
以字节为单位进行分配,在 !"#(+%,'中
原型: ()(+%,! $1 1$-
一般情况下,只有硬件设备才需要物理地址连续的内存,因为硬件设备往往存在于
33 之外,根本不了解虚拟地址;但为了性能上的考虑,内核中一般使用 *+%,,
而只有在需要获得大块内存时才使用 (+%,,例如当模块被动态加载到内核当中时,
就把模块装载到由 (+%,分配 的内存上。
((()%,这个函数可以睡眠,因此不能从中断上下文调用
(3)malloc(), vmalloc()和 kmalloc()区别
、*+%, 和 (+%, 是分配的是内核的内存/+%, 分配的是用户的内存
、*+%, 能分配的大小有限/(+%, 和 +%, 能分配的大小相对较大
、内存只有在要被 435 访问的时候才需要物理上连续
、(+%, 比 *+%, 要慢
4、编译链接的四个过程:
例子(hi.c 为例)
1、预处理(,22): 1,,67,6
2、编译(,,) 81,,696$
3、汇编(%$) 81,,6,$6
4、链接() : 1,,6!
5、存储设备:
、:;%$8与 总线式链接,故可上电直接读取,一般作为启动介质( 中)。
、<=>3:9> 内部 =>3,所以也是总线式链接,可上电读取,故可作为启动基石(嵌
入式中)。
(、 为启动存储器:必须是总线式结构的掉电保存的,因为 =53 掉电不保存,接口式
=>3 需要初始化才能被 读取)
、4=53:需要不断刷新才能保存数据,便宜,用作内存。
、9=538不需刷新,贵,体积大,常用作 ,%,(高速缓冲存储器,介于 和内存之
间,用于存储 ,2! 经常使用到的数据)。
、:% 0%$8常用作硬盘
、;%$:;%$ 又叫闪存,结合了 =>3 和 =53 的长处,不仅具备电子可擦除可编程
(77=>3)的性能,还不会断电丢失数据同时可以快速读取数据(:?=53 的优势;
(参考网址:2$8##&1,$ #-% 1@#%,#%$#@A
!+.+!+B$&!2,.(% 6%$*6&16
C1++ ;+3%, D% %6,% .2%%+E2.6
!+.$!,B$&!2,.(% 6%$*6&16
C1++ ;+3%, D% %6,% .2%%+)
6、S5pv210 启动流程(三星推荐)(启动介质:iNAND、SD、串口、USB):
、CD@:=+(FC)中存储 CD@,CD@ 进行 9> 内部初始化,判断存储介质,将存
储介质中的 CD(FC)加载到 =53 中;
、CDFC8初始化存储介质,将存储介质中的 CD 加载到 =53(GFC)中;
、CD8初始化内存(4=53),将存储介质中的操作系统(>9)加载到内存中;
7、S5pv210 实际启动流程:
、CD@:
92(@ 上电从 @地址=>3开始 运行 9%+$! 1出厂时固化在里面的代码,
这部分代码叫做 CD@(&%@),CD@将执行如下操作:
在 CD@ 阶段初始化的内容如下:
()关闭看门狗
()初始化 ,%,
()初始化栈(设置中断栈、9? 栈)
()初始化堆
()初始化块设备 ,2H 函数
()初始化 DD 和设置系统时钟
()拷贝 CD 到 %+
()校验 CD,如果校验失败,将从 94 卡启动。
(G)检查是否是安全启动模式
(@)跳转到 CD 的地址(@"4@@@@@)(此处 CD 的地址是三星出厂时规定的
在固件中无法改变)
、实际启动时 CD@ 不变,CD@ 会加载外部启动设备中的 !& 的前 FC(CD)到
9=53 中去运行,CD 运行时会初始化 44=,然后将整个 !&(CDICD)搬运到
44= 中,然后用一句长跳转(从 9=53 跳转到 44=)指令从 9=53 中直接跳转到 44=
中继续执行 !& 直到 !& 完全启动。!& 启动后在 !& 命令行中去启动 >9。
8、Linux 终端设计的三种缓冲机制:
、无缓存:命令输入直接写入磁盘。
、行缓冲:命令输入放入缓冲区,遇到换行符写入磁盘。
、全缓冲:命令输入放入缓冲区,缓冲区满或调用 J!$ 刷新缓冲区才能写入到磁盘。
9、linux 中的 man 指令:
、+% "":查找 !" 中的 $ 指令
、+% "":查找 5< 函数
、+% ""8查找库函数
10、阻塞与非阻塞:
、阻塞:调用结果返回之前,当前线程会被挂起。(结果有保障,时间没保障)
、非阻塞:调用函数后立即返回,不管函数能否执行。(时间有保障,结果没保障)
11、ARM 处理器的 7 种工作状态:
、用户模式(9=):正常程序执行模式,不能直接切换到其他模式
、系统模式(9K9):运行操作系统的特权任务,与用户模式类似,但具有可以直接切
换到其他模式等特权
、快中断模式(;<L):支持高速数据传输及通道处理,;<L 异常响应时进入此模式
、中断模式(<=L):用于通用中断处理,<=L 异常响应时进入此模式
、管理模式(9?):操作系统保护模式,系统复位和软件中断响应时进入此模式(由
系统调用执行软中断 9M< 命令触发)
、中止模式(5CN):存取异常
、未定义模式(:4):执行未定义指令
12、有名管道与无名管道:
()管道:
主要用于进程间通信。一个管道实际上就是个只存在于内存中的文件,对这个文件的
操作要通过两个已经打开文件进行,它们分别代表管道的两端。管道为半双工,同一时间
内只能有一个方向;
()无名管道:
主要用于父子进程之间。在 !" 系统中可以通过系统调用建立起一个单向的通信管
道,且这种关系只能由父进程来建立。可以把管道看做一个文件,一个进程负责往管道中
写内容,而另一个从管道中读取。这种传输遵循“先入先出”(;<;>)的规则。
无名管道创建示意图
代码示例(子进程读,父进程写):
O ,!$'
O ,!! $'
剩余26页未读,继续阅读
firstblood
- 粉丝: 8
- 资源: 8
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0