当前位置:首页 > 嵌入式 > 嵌入式软件
[导读]Linux的同步机制从2.0到2.6以来不断发展完善。从最初的原子操作,到后来的信号量,从大内核锁到今天的自旋锁。这些同步机制的发展伴随Linux从单处理器到对称多处理器的过渡。 伴随着从非抢占内核到抢占内核的过度。Linux的锁机制越来越有效,也越来越复杂。

Linux的同步机制从2.0到2.6以来不断发展完善。从最初的原子操作,到后来的信号量,从大内核锁到今天的自旋锁。这些同步机制的发展伴随Linux从单处理器到对称多处理器的过渡。

伴随着从非抢占内核到抢占内核的过度。Linux的锁机制越来越有效,也越来越复杂。

1)Linux的内核锁主要是自旋锁和信号量。

自旋锁最多只能被一个可执行线程持有,如果一个执行线程试图请求一个已被争用(已经被持有)的自旋锁,那么这个线程就会一直进行忙循环——旋转——等待锁重新可用。要是锁未被争用,请求它的执行线程便能立刻得到它并且继续进行。自旋锁可以在任何时刻防止多于一个的执行线程同时进入临界区。

Linux中的信号量是一种睡眠锁。如果有一个任务试图获得一个已被持有的信号量时,信号量会将其推入等待队列,然后让其睡眠。这时处理器获得自由去执行其它代码。当持有信号量的进程将信号量释放后,在等待队列中的一个任务将被唤醒,从而便可以获得这个信号量。

信号量的睡眠特性,使得信号量适用于锁会被长时间持有的情况;只能在进程上下文中使用,因为中断上下文中是不能被调度的;另外当代码持有信号量时,不可以再持有自旋锁。

Linux 内核中的同步机制:原子操作、信号量、读写信号量和自旋锁的API,另外一些同步机制,包括大内核锁、读写锁、大读者锁、RCU (Read-Copy Update,顾名思义就是读-拷贝修改),和顺序锁。

 

2) Linux中的用户模式和内核模式是什么含意?

MS-DOS等操作系统在单一的CPU模式下运行,但是一些类Unix的操作系统则使用了双模式,可以有效地实现时间共享。在Linux机器上,CPU要么处于受信任的内核模式,要么处于受限制的用户模式。除了内核本身处于内核模式以外,所有的用户进程都运行在用户模式之中。

内核模式的代码可以无限制地访问所有处理器指令集以及全部内存和I/O空间。如果用户模式的进程要享有此特权,它必须通过系统调用向设备驱动程序或其他内核模式的代码发出请求。另外,用户模式的代码允许发生缺页,而内核模式的代码则不允许。

在2.4和更早的内核中,仅仅用户模式的进程可以被上下文切换出局,由其他进程抢占。除非发生以下两种情况,否则内核模式代码可以一直独占CPU:

(1) 它自愿放弃CPU;

(2) 发生中断或异常。

2.6内核引入了内核抢占,大多数内核模式的代码也可以被抢占。

3) 怎样申请大块内核内存?

在Linux内核环境下,申请大块内存的成功率随着系统运行时间的增加而减少,虽然可以通过vmalloc系列调用申请物理不连续但虚拟地址连续的内存,但毕竟其使用效率不高且在32位系统上vmalloc的内存地址空间有限。所以,一般的建议是在系统启动阶段申请大块内存,但是其成功的概率也只是比较高而已,而不是100%。如果程序真的比较在意这个申请的成功与否,只能退用“启动内存”(Boot Memory)。下面就是申请并导出启动内存的一段示例代码:

void* x_bootmem = NULL;

EXPORT_SYMBOL(x_bootmem);

unsigned long x_bootmem_size = 0;

EXPORT_SYMBOL(x_bootmem_size);

staTIc int __init x_bootmem_setup(char *str)

{

x_bootmem_size = memparse(str, &str);

x_bootmem = alloc_bootmem(x_bootmem_size);

printk(“Reserved %lu bytes from %p for xn”, x_bootmem_size, x_bootmem);

return 1;

}

__setup(“x-bootmem=”, x_bootmem_setup);

可见其应用还是比较简单的,不过利弊总是共生的,它不可避免也有其自身的限制:

内存申请代码只能连接进内核,不能在模块中使用。

被申请的内存不会被页分配器和slab分配器所使用和统计,也就是说它处于系统的可见内存之外,即使在将来的某个地方你释放了它。

一般用户只会申请一大块内存,如果需要在其上实现复杂的内存管理则需要自己实现。

在不允许内存分配失败的场合,通过启动内存预留内存空间将是我们唯一的选择。

4) 用户进程间通信主要哪几种方式?

(1)管道(Pipe):管道可用于具有亲缘关系进程间的通信,允许一个进程和另一个与它有共同祖先的进程之间进行通信。

(2)命名管道(named pipe):命名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信。命名管道在文件系统中有对应的文件名。命名管道通过命令mkfifo或系统调用mkfifo来创建。

(3)信号(Signal):信号是比较复杂的通信方式,用于通知接受进程有某种事件发生,除了用于进程间通信外,进程还可以发送信号给进程本身;linux除了支持Unix早期信号语义函数sigal外,还支持语义符合Posix.1标准的信号函数sigacTIon(实际上,该函数是基于BSD的,BSD为了实现可靠信号机制,又能够统一对外接口,用sigacTIon函数重新实现了signal函数)。

(4)消息(Message)队列:消息队列是消息的链接表,包括Posix消息队列system V消息队列。有足够权限的进程可以向队列中添加消息,被赋予读权限的进程则可以读走队列中的消息。消息队列克服了信号承载信息量少,管道只能承载无格式字节流以及缓冲区大小受限等缺

(5)共享内存:使得多个进程可以访问同一块内存空间,是最快的可用IPC形式。是针对其他通信机制运行效率较低而设计的。往往与其它通信机制,如信号量结合使用,来达到进程间的同步及互斥。

(6)信号量(semaphore):主要作为进程间以及同一进程不同线程之间的同步手段。

(7)套接字(Socket):更为一般的进程间通信机制,可用于不同机器之间的进程间通信。起初是由Unix系统的BSD分支开发出来的,但现在一般可以移植到其它类Unix系统上:Linux和System V的变种都支持套接字。

5) 通过伙伴系统申请内核内存的函数有哪些?

在物理页面管理上实现了基于区的伙伴系统(zone based buddy system)。对不同区的内存使用单独的伙伴系统(buddy system)管理,而且独立地监控空闲页。相应接口alloc_pages(gfp_mask, order),_ _get_free_pages(gfp_mask, order)等。

6) 通过slab分配器申请内核内存的函数有?

7) Linux的内核空间和用户空间是如何划分的(以32位系统为例)?

8) vmalloc()申请的内存有什么特点?

9) 用户程序使用malloc()申请到的内存空间在什么范围?

10) 在支持并使能MMU的系统中,Linux内核和用户程序分别运行在物理地址模式还是虚拟地址模式?

11) ARM处理器是通过几级也表进行存储空间映射的?

12) Linux是通过什么组件来实现支持多种文件系通的?

13) Linux虚拟文件系统的关键数据结构有哪些?(至少写出四个)

14) 对文件或设备的操作函数保存在那个数据结构中?

15) Linux中的文件包括哪些?

16) 创建进程的系统调用有那些?

17) 调用schedule()进行进程切换的方式有几种?

18) Linux调度程序是根据进程的动态优先级还是静态优先级来调度进程的?

19) 进程调度的核心数据结构是哪个?

20) 如何加载、卸载一个模块?

21) 模块和应用程序分别运行在什么空间?

22) Linux中的浮点运算由应用程序实现还是内核实现?

23) 模块程序能否使用可链接的库函数?

24) TLB中缓存的是什么内容?

25) Linux中有哪几种设备?

26) 字符设备驱动程序的关键数据结构是哪个?

27) 设备驱动程序包括哪些功能函数?

28) 如何唯一标识一个设备?

29) Linux通过什么方式实现系统调用?

30) Linux软中断和工作队列的作用是什么?

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

联发科与高通骁龙的对决可以说是一场性能与价值的较量,那么,你对两者的芯片有了解吗?在移动设备领域,芯片制造商的竞争愈发激烈。其中,来自台湾的联发科(MediaTek)与美国的高通(Qualcomm)无疑是该领域的两大巨头...

关键字: 联发科 高通骁龙 CPU 处理器

云和超大规模服务运营商正不断增大计算密度。随着 Microsoft Cobalt、阿里巴巴的倚天 710、AmpereOne等配置 128 核或以上的 CPU 设计进入市场,单个封装可实现的性能更强,且下一代的目标还将远...

关键字: CPU 处理器

虽然嵌入式芯片架构市场上有明确的引领者,但该行业正在快速扩张,预计未来几年将出现许多新的机会。当然,在这样的热门行业中,永远有创新技术和新产品的一席之地。

关键字: 嵌入式 处理器 RISC-V

通过与北美J-Squared Technologies、南美Macnica DHW以及日本NEXTY Electronics三家企业深化合作,Hailo实现了迅速成长,并逐步拓宽了其全球商业版图。

关键字: 人工智能 处理器 芯片

双核处理器将是下述内容的主要介绍对象,通过这篇文章,小编希望大家可以对它的相关情况以及信息有所认识和了解,详细内容如下。

关键字: 处理器 双核处理器

双系统将是下述内容的主要介绍对象,通过这篇文章,小编希望大家可以对双系统的相关情况以及信息有所认识和了解,详细内容如下。

关键字: 双系统 Windows Linux

康佳特扩展边缘服务器生态系统, 推出 µATX 服务器载板和基于最新英特尔至强处理器的 COMHPC Server模块

关键字: 处理器 服务器 AI

在这篇文章中,小编将为大家带来CPU的相关报道。如果你对本文即将要讲解的内容存在一定兴趣,不妨继续往下阅读哦。

关键字: CPU 集成电路 处理器

芯原可扩展且灵活的DC8200 IP可提供显示设备自适应能力和高质量显示效果,赋能沉浸式视觉体验

关键字: 处理器 人机界面 RISC-V

第五代至强可扩展处理器发布至今,它到底有哪些新特性值得关注?具体应用实践情况又是如何?为了让大家有个全面的了解,在近日举办的2024英特尔数据中心产品技术媒体分享会上,多位英特尔技术专家从技术特性、产品价值、实践应用等角...

关键字: AI 处理器
关闭
关闭