嵌入式面试

1、中断

外围设备与主芯片之间进行数据交互,那么中断就是一个非常重要的手段,CPU要应付一些突发事件,而这些突发的事件都有一个渠道来告知cpu,这个渠道就是中断,换句话说,中断是一个需要非常及时的去响应,但又不耽误正常工作的的事件;拓展:我又一个外部设备,这个外部设备现在有个输入需要cpu去处理,那么可以用什么方式呢?

答:中断和轮询

问:中断和轮询有什么区别?

答:中断是cpu被动接受外围设备的信号,外围设备告诉cpu说,你要开始帮我处理事情了;

而轮询是:cpu主动询问外围设备,你们有没有什么事需要我处理;

主动的轮询的时间间隔是确定的, 这就有一个实时任务与非实时任务的区别,具体来说就是:轮询是实时可控,而中断是随机,不可控;比方说有的外围设备每半小时更新一次状态,那我每半小时查一次就可以了,这就适合用轮询,本质其实就是:针对不同的设备使用不同的IO处理方式,

2、中断的类型,中断和异常有什么区别?

外部中断,内部中断,所谓的内部中断就是cpu自己给自己发了一个中断,形象解释就是:内部中断:你走在路上,女友打电话让你去陪她逛街,你接完电话后就去陪她逛街了;外部中断:你走在路上,突然觉得肚子不舒服,你需要找个厕所解决,这是你身体自己给自己发出的中断;

区别:中断和异常都是处理的一种方式,异常极有可能引发中断,然后用中断的方式去处理当前的异常

3、中断是怎么被使用的?

接收到中断信号---现场保持----响应中断(不一定处理,只处理最紧急的任务)----返回---(这是中断上文做的)

处理中断-------(这是中断下文做的)

比如说,你女朋友打电话给您让你订好位置晚上吃饭,那么接到电话就是中断信号,中断上文做的就是答应你女朋友你会去办这件事(响应),中断下文做的就是在晚上吃饭前订好位置(处理)。

中断上文就是紧急响应,中断下文就是紧急处理

第3讲

进程和线程

系统的任务都是在进程或线程中执行的

进程和线程的区别是什么(什么时候用进程?什么时候用线程?)

进程是资源分配的单元,线程是资源调度的单元,先看进程和线程之间的关系,进程就好比一栋房子,线程就好比房子里的房间,所以进程里包含了很多线程,一个线程肯定只能属于一个进程;

进程与进程之间的通信比较麻烦(类比于房子与房子间的通信),线程与线程之间的通信比较方便,因为他们之间有一个公共资源(就好比房间与房间之间有一些“楼梯”、“过道”这种公共资源),当然,进程与进程之间也有公共资源,但不能像线程那样方便使用,所谓的公共资源其实可以类比于:房间的空间其实也是这栋房子的空间的一部分,所以线程里的空间一定是进程里的空间,而这个空间就是公共资源,

进程和线程在通讯上的差异:

由于线程有共享空间,所以相比于进程,线程的通讯方式更加多,线程有13种通讯方式,进程有5种通讯方式,分别是:(管道、匿名管道),socket,共享内存,消息队列,信号量,共享一般都是共享全局变量,

为什么进程是资源分配?

比如说有一块地,现在要在这块地上盖房子,那么分配的单位就是房子而不是房间

怎么理解线程是调度的单位?

系统会把每个房间看成单独的个体,在调度的时候,系统会指定某一栋房子某一个房间执行任务

在执行效率上,是进程快还是线程快呢?

系统执行时,包括数据和指令,系统会把数据和指令都放到一片缓存中,效率高低的本质还是在于地址切换,什么时候线程之间的切换效率很高?答:只有一个进程,或者说有多个进程但前后两次执行的线程任务都在同一个进程里面,不存在太多的地址切换的地址开销,这才是提升效率的根本。但这种情况并不是必然发生,如果先执行A进程中的A1线程,再执行B进程中的B1线程,那么这种情况下,线程的执行效率和进程的执行效率是没有本质差异的

为什么在创建任务的时候不能只用线程而不用进程呢?

这涉及

1、鲁棒性的问题,比如说,如果这个进程的某个线程奔溃了,那么这个进程可能就都奔溃了,而使用多个进程,就能提高系统鲁棒性

2、安全性的问题,由于线程间的共享空间(公共空间)的存在,导致安全性不够,所以使用多个进程

根据什么来选择使用进程还是线程?

答:在一个任务执行的时候,先判断和当前的进程关系大不大,如果关系比较紧密,那就使用线程

这个任务奔溃了对原来的进程影响大不大,如果影响大,那就另开一个进程

这个任务执行的效率要不要考虑

第4讲:

与linux内核相关的用户态和内核态

1、用户态和内核态有什么区别?

linux为了安全,不是所有的进程都能操作所有资源,所以呢,linux就把资源操作权限分成了用户态和内核态,用户态是无法调度内核态的相关资源的,同样的,内核态也不会干涉用户态的资源使用,他们相互协作,但执行权限不一样,他们之间不能互相访问,一旦互相访问,那么用户态就出现异常,告诉你说,这个进程在访问非法地址,直接退出,内核直接奔溃,当然,这是默认情况。

那么用户态的东西能访问内核态吗?答:是可以的,1、系统调用,2、中断,3、异常(一旦出现异常,会发信号给内核,然后内核就会进入内核态),

内核态能否访问用户空间的一些数据?答:是可以的,内核态通过临时将内核空间从3G-4G扩展为0G-4G,然后立马访问用户空间的数据,访问完后,重新声明0G-3G是用户态空间,3G-4G是内核态空间。

他们的运行空间不一样,用户态被分配的可使用的进程空间一般是0-3G,内核态被分配的可使用进程空间一般是3-4G,一个系统只有1个内核,那就是说,所有用户态进程共享一个内核态,

用户态到内核态是一个权限切换,地址空间切换,为什么把系统调用叫做“用户态切换到内核态,内核态帮助用户态执行相应的任务,或者说,用户态嵌入到了内核态”?答:我们的每一个任务,不管他是用户进程还是内核进程,他都有一个他task去记录当前的任务,那如果你做了一个系统调用,那么就会产生一个异常也好,中断也好,或者其他方式也好,进入到内核态去执行这个系统调用,比如,你现在要向串口写一个指令,那么,你肯定会调用相应的接口,然后你就会执行一些任务,比如说执行过程中,你做了系统调用(比如说调用了文件的读写),那么,这种情况下pid是多少?(pid就是指向了当前CPU正在执行的任务),如果用户态进行了系统调用,这时切换到了内核态执行,pid还是指向用户态的那个进程,但是这时是在内核态执行的;这个过程就叫:用户态嵌入到了内核态

用户态和内核态怎么通讯?

答:IO control,发消息,socket

第5讲

 

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值