✅作者简介:大家好我是:嵌入式基地,是一名嵌入式工程师,希望一起努力,一起进步!
📃个人主页:嵌入式基地 🔥系列专栏:嵌入式习题专栏


嵌入式软件工程师面试题(五)

  • 1、逻辑地址、线性地址、物理地址、总线地址、虚拟地址的区别?
  • 2、用户空间与内核空间有哪些通信方式?
  • 3、怎样预防死锁?
  • 4、硬链接与软链接的区别?
  • 5、Linux系统的挂起、待机、休眠?
  • 6、TCP、UDP的区别?
  • 7、简述TCP三次握手的过程。
  • 8、TCP为什么需要三次握手,第三次握手去掉行不行?
  • 9、简述TCP四次挥手的过程。
  • 10、为什么TCP建立连接是三次握手,而关闭连接却是四次挥手?


1、逻辑地址、线性地址、物理地址、总线地址、虚拟地址的区别?

逻辑地址指的是与内存段相关的偏移地址部分。
线性地址:线性地址 = 逻辑地址 + 基地址。

  • 如果启用了分页机制,那么线性地址使用页表项变换后就是物理地址。
  • 如果没有启用分页机制,那么线性地址就是物理地址。

总线地址其实就是物理地址。
虚拟地址是通过MMU内存管理虚拟映射出来的地址。

2、用户空间与内核空间有哪些通信方式?

1、系统调用,提供特定的用户空间与内核空间的信息传递。
2、信号,内核空间出现一些异常时候会发送信号给进程,如SIGSEGV、SIGPIPE等。
3、/proc,proc可以读取内核空间的配置信息和运行状态并且设置部分属性的值。
4、文件,可以通过指定文件的读写操作来实现通信。
5、netlink,类似socket通信方式,可以读写大量的数据,实现稍微复杂。
6、ioctl,可以实现数据量比较少时候的通信

3、怎样预防死锁?

1、打破互斥条件:改造独占性资源为虚拟资源,大部分资源已无法改造。
2、打破不可抢占条件:当一进程占有一独占性资源后又申请一独占性资源而无法满足,则退出原占有的资源。
3、打破占有且申请条件:采用资源预先分配策略,即进程运行前申请全部资源,满足则运行,不然就等待,这样就不会占有且申请。
4、打破循环等待条件:实现资源有序分配策略,对所有设备实现分类编号,所有进程只能采用按序号递增的形式申请资源。

4、硬链接与软链接的区别?

1、硬链接与原文件公用一个inode号,他们是同一个文件,而软链接与原文件拥有不同的inode号,他们是两个不同的文件
2、在文件属性上软链接明确写出了是链接文件,而硬链接没有写 出来,因为在本质上硬链接文件和原文件是完全平等关系;
3、软链接的链接数目不会增加,硬链接没增加一个,链接数目就会加1;
4、硬链接文件显示的大小是跟原文件是一样的,软连接不一定。

5、Linux系统的挂起、待机、休眠?

1、挂起:CPU、内存工作,而硬盘、显示器等外部设备停止工作。
2、待机:只对内存供电,CPU、外设停止工作。
3、休眠:CPU、内存停止工作,内存中的数据保存在硬盘中,外部设备也停止工作。

6、TCP、UDP的区别?

1、TCP是面向连接的,UDP是面向无连接的。
2、TCP是面向字节流的,UDP是基于数据报的。
3、TCP提供可靠服务(正确性、顺序性),UDP提供不可靠服务。
4、TCP程序结构复杂,占用资源多;UDP程序结构简单,占用资源少。
5、TCP有拥塞控制;UDP没有拥塞控制。
6、TCP只支持一对一;UDP支持一对一、一对多、多对一、多对多。

7、简述TCP三次握手的过程。

1、第一次握手:客户端创建传输控制块,然后向服务器发出连接请求报文(将标志位SYN置1,随机产生一个序列号seq=x),接着进入SYN-SENT状态。
2、第二次握手:服务器收到请求报文后由SYN=1得到客户端请求建立连接,回复一个确认报文(将标志位SYN和ACK都置1,ack=x+1,随机产生一个序列号seq=y),接着进入SYN-RCVD状态。此时操作系统为该TCP连接分配TCP缓存和变量。
3、第三次握手:客户端收到确认报文后,检查ack是否为x+1,ACK是否为1,是则发送确认报文(将标志位ACK置1,ack=y+1,序列号seq=x+1),此时操作系统为该TCP连接分配TCP缓存和变量。服务器收到确认报文并检查无误后则连接建立成功,两者都进入ESTABLISHED状态,完成三次握手。

8、TCP为什么需要三次握手,第三次握手去掉行不行?

进行三次握手的主要作用就是为了确认双方的接收能力和发送能力是否正常、指定自己的初始化序列号为后面的可靠性传送做准备。
第三次握手不能去掉,第三次握手能防止发生死锁,因为若为两次握手且服务器发出第二次握手而客户端没有收到,服务器开始传输数据报后客户端便不会理会,导致服务器以为丢包而源源不断地发送数据报,造成死锁。

9、简述TCP四次挥手的过程。

1、第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。
2、 第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。
3、第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。
4、 第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。

10、为什么TCP建立连接是三次握手,而关闭连接却是四次挥手?

1、建立连接的时候,服务器在LISTEN状态下,不需要等待,可以立即建立连接,把ACK和SYN放在一个报文里发送给客户端,因此只需要三次握手。
2、 关闭连接时,服务器收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接受数据,而自己未必将所有数据都发送完了,所以服务器可以立即关闭,也可以发送一些数据后再关闭,所以服务器的确认报文(ACK=1)和连接释放报文(FIN=1,ACK=1)一般分开发送,因此形成四次握手。