Linux驱动开发
文章平均质量分 93
总结linux嵌入式的面试知识点
木木小方方
这个作者很懒,什么都没留下…
展开
-
Linux进/线程同步方式4——信号量
信号量是一种用于提供不同进程间或一个给定进程下的不同线程间进行同步的手段。信号量类别使用方式Posix有名信号量使用Posix IPC名字标识Posix基于内存的信号量存放在共享内存区System V信号量在内核中维护。原创 2024-07-28 16:04:45 · 606 阅读 · 0 评论 -
Linux进/线程同步方式3——自旋锁
自旋锁是为实现保护共享资源而提出的一种锁机制。其实,自旋锁与互斥锁比较类似,它们都是为了解决对某项资源的互斥使用。无论是互斥锁还是自旋锁,在任何时刻,最多只能有一个保持者,也就是说,在任何时刻最多只能有一个执行单元获得锁。两者在调度机制上略有不同。对于互斥锁,如果资源已经被占用,资源申请者只能进入睡眠状态。但是自旋锁不会引起调用者睡眠。如果自旋锁已经被别的执行单元保持,调用者就一直循环在那里看是否该自旋锁的保持者已经释放了锁(忙循环)。原创 2024-07-28 11:29:54 · 618 阅读 · 0 评论 -
Linux进/线程同步方式2——条件变量
互斥锁是线程程序必须的工具,但并非是万能的。例如,如果一个线程正在等待共享数据内某个条件出现,那会发生什么呢?它可能重复地对互斥对象进行锁定和解锁,每次都会检查共享数据结构,以查找某个值是否满足要求。但这是在浪费时间和资源,而且这种繁忙查询的效率非常低。在每次检查之间,可以让调用线程短暂地进入睡眠,比如睡眠3秒,但是由此线程代码就无法最快做出响应。那是否有这样的一种方式呢:当线程在等待满足某些条件时使线程进入睡眠状态,一旦条件满足,就唤醒因等待满足特定条件而睡眠的线程。原创 2024-07-14 16:37:23 · 630 阅读 · 1 评论 -
Linux进/线程同步方式1——互斥锁
当互斥锁已经被其他线程锁住时,调用pthread_mutex_ trylock()函数尝试对互斥锁进行加锁,如果互斥锁处于未锁住状态,那么将锁住互斥锁并立即返回;如果互斥锁已经被其他线程锁住,那么将加锁失败,但不阻塞线程,而是返回错误码EBUSY。持有锁的线程执行完临界区的代码后,执行解锁操作unlock()。注意:对共享资源的访问,要对互斥量进行加锁,如果互斥量已经上了锁,调用线程会阻塞,直到互斥量被解锁。返回值:成功返回0,出错返回错误编号,如果目标互斥锁已经被其他线程锁住,则返回EBUSY。原创 2024-07-13 13:49:19 · 572 阅读 · 0 评论 -
Linux系统中的POSIX消息队列
消息队列是Linux IPC中很常见的一种通信方式,它通常用来在不同进程(线程)间发送特定格式的消息数据。一个进程向消息队列写入消息之前,并不需要某个进程在该队列上等待消息的到达,而管道和FIFO是相反的,进程向其中写消息时,管道和FIFO必须已经打开来读。IPC的持续性不同。当管道和FIFO最后一次关闭发生时,仍在管道和FIFO中的数据会被丢弃。消息队列是随内核的持续性,即一个进程向消息队列写入消息后,然后终止,另外一个进程可以在以后的某个时刻打开该队列读取消息。原创 2024-07-11 00:16:57 · 962 阅读 · 0 评论 -
Linux系统中的mmap底层详解
通过上图我们可以知道mmap是操作硬件设备的一种方法,所谓操作设备,比如IO端口(点亮一个LED)、LCD控制器、磁盘控制器,实际上就是往设备的物理地址上读写数据。但是,由于应用程序不能直接操作设备硬件地址,所以操作系统提供了这样一种机制——内存映射,把设备地址映射到进程虚拟地址,mmap就是实现内存映射的接口。操作设备还有很多方法,如ioctl、ioremap等。原创 2024-07-06 18:24:06 · 586 阅读 · 0 评论 -
Linux驱动基础
也就是说,使用mmap时,通过/dev/mem做了一个巧妙的转换,原本填写文件句柄的参数,只需要填上open /dev/mem之后的文件句柄,就可以直接完成对物理内存的映射。虚拟内存区域是进程的虚拟地址空间中的一个同质区间,即具有同样特性的连续地址范围。[5] 为映射分配了新的虚拟地址区域后,通过待映射的文件指针,在文件描述符表中找到对应的文件描述符,通过文件描述符链接到内核“已打开文件集”中该文件的文件结构(struct file),每个文件结构体维护着和这个已打开文件相关各项信息。原创 2024-04-23 11:18:49 · 802 阅读 · 0 评论 -
C语言基础八股文
解体要点:malloc能够申请的空间大小与物理内存的大小没有直接关系,仅与程序的虚拟地址空间相关。程序运行时,堆空间只是程序向操作系统申请划出来的一大块虚拟地址空间。应用程序通过malloc申请空间,得到的是在虚拟地址空间中的地址,之后程序运行所提供的物理内存是由操作系统完成的。1、在1G内存的计算机中能否malloc(1.2G),为什么?答:是有可能申请1.2G的内存的。原创 2023-09-12 19:46:23 · 2443 阅读 · 1 评论