必背八股文-Linux(2)
内核程序中申请内存使用什么函数?
- kmalloc(size_t size, int flags):该函数用于在内核堆中动态申请指定大小的内存。参数size指定所需内存的大小,flags参数表示内存分配的标志,例如GFP_KERNEL表示在可睡眠上下文中分配内存,GFP_ATOMIC表示在不可睡眠上下文中分配内存等。
- kcalloc(size_t n, size_t size, int flags):该函数用于在内核堆中动态申请指定数量和大小的内存块,并将其初始化为0。
- vmalloc(unsigned long size):该函数用于在内核虚拟内存区域中动态申请指定大小的内存。vmalloc函数可以处理大于一个页面的内存申请。
- kzalloc(size_t size, int flags):该函数与kmalloc函数类似,用于在内核堆中动态申请指定大小的内存,并将其初始化为0。
内核程序中申请内存和应用程序时申请内存有什么区别?
- 内核程序中申请内存时,不能使用用户空间地址,而是需要使用内核空间地址。
- 内核程序中申请内存时,不能使用用户空间申请内存的函数(例如malloc、calloc等),而是需要使用专门的内核内存分配函数(例如kmalloc、vmalloc等)。
- 内核程序中申请内存时,需要遵循一些特定的规则和约束,例如不能在中断上下文中分配内存,不能在不可睡眠上下文中使用可能会导致睡眠的函数等。
- 内核程序中申请内存时,需要手动管理内存的生命周期,例如在不需要使用该内存时,需要及时释放,以避免内存泄漏和资源浪费。
- 应用程序中申请的内存通常只能在应用程序内部使用,不能直接被内核程序访问和操作。
Linux中断的原理和开发方法?
Linux中断是操作系统用来处理硬件设备事件的一种机制。当硬件设备需要通知CPU某个事件发生时(如I/O完成、计时器到期等),它会触发一个中断信号。Linux内核会响应这个信号,暂停当前执行的任务,转而执行与中断相关的处理程序,即中断处理程序(Interrupt Service Routine, ISR)。中断处理完毕后,CPU会恢复被中断的任务。
开发Linux中断涉及以下几个关键步骤:
- 编写中断处理程序(ISR):中断处理程序是一个函数,用于处理特定中断信号。通常,它会完成与硬件设备交互的工作,如读取或清除设备状态,处理数据等。ISR应尽可能地简短高效,因为在执行ISR期间,其他中断可能被延迟或屏蔽。
- 注册中断处理程序:要让内核在收到特定中断信号时调用ISR,需要将ISR注册到内核中。在Linux内核中,可以使用request_irq()函数进
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
嵌入式软件开发笔试与面试手册 文章被收录于专栏
本专栏主要是介绍嵌入式软件开发岗位的相关知识和学习攻略,为大家提供一份笔试与面试手册。包括有嵌入式软件开发岗位介绍与学习攻略;校园招聘和offer疑惑问题的介绍;在笔试方面,如何刷题为笔试作准备,提供往年笔试真题;在面试方面,提供相关知识的复习重点,提供面试真题。包括有:华为、蔚来、文远、大疆、三一、深信服、亚马逊、Intel、百度、科大讯飞、OPPO、京东、中兴、比特大陆|算能、美团等等