笔试题
1.volatile的特点及其例子
volatile具有易变性,如果用该关键字修饰一个变量,可以防止编译器对该变量进行优化,三个应用案例:
- 在多线程中使用的全局变量。
- 使用寄存器中,应使用volatile修饰。
- 在中断服务程序中使用全局变量时。
2.死锁是什么,通常需要满足什么条件
死锁指的是两个或多个进程在执行过程中,因争夺资源造成的无限期的等待状态。
通常需要满足四个条件:资源互斥,请求且保持,循环等待,不可剥夺。
3.回调函数是什么及其注意事项
一般是作为函数参数使用的,也就是一个函数的地址作为另一个函数的参数,回调函数不一定被执行,当用户调用了函数时,函数才会执行。
注意事项:回调函数的参数和返回值都应该为空,例如 void * task(void *arg)。
4.请简述Linux内核的作用
Linux内核的四大作用:内存管理,文件系统管理,进程管理,网络管理
5.请简述Linux系统启动过程
上电 -> 执行启动引导程序bootloader -> 加载Linux内核 -> 挂载rootfs根文件系统 -> 安装驱动程序并执行脚本文件 ->提供字符终端,执行应用程序
6.标准IO和系统IO的区别
1)标准IO可以看成是在系统IO的基础上封装了缓冲机制(减低输入输出的次数)。
2)管理方式:标准IO的内核管理方式是链表管理,系统IO的内核管理方式是顺序表管理。
3)返回值:标准IO返回指针,系统IO返回下标。
7.以空间换时间的案例
1)(计算机结构体类型的大小)考虑计算机字节对齐
2)循环队列(空出最后一个空间不使用)
3)刷新缓冲区(输入输出)
4)申请堆内存作为缓冲区,以一块字符读取
5)设置字节对齐,恢复字节对齐#pragma pack(1)
6)32bit系统下读取图片m每行不足四的倍数进行行字节对齐
8.以时间换空间的案例
1)取消字节对齐#pragma pack()
2)一个个字符读取然后写入文件
9.开发板传输文件
开发板的Linux系统不具备程序的编辑能力和程序的编译能力,只具有程序的运行能力。需要在电脑的Linux系统中去完成程序的编辑和程序的编译,然后把生成的可执行文件传输到开发板,在开发板中运行。