学习Linux系统编程-Day(4)

1.内存映射mmap机制是Linux中非常重要的机制之一,它可以用来提升文件访问效率进程间通信等。注意mmap系统成功调用时返回的是映射区的起始地址,此后在代码中(用户地址空间下)对此区域的读写在逻辑上等价于对被映射区域的读写。这部分是一个比较大的话题,可以参考更多书籍和博客来加深对mmap的理解。以我的经验,在FPGA加速器的开发中,由于MMU的存在,硬件加速器寄存器地址也需要通过mmap映射到用户空间,在此基础上再编写加速器的主控逻辑,这部分也同样需要mmap函数,在此略过。

2.静态库与共享库都是目标库的常见种类,目标库是指将逻辑相关的一组代码加以编译并保存在同一个文件下,以备其他程序调用。静态库,也叫档案文件(archives),它在被引用时是将所需模块的副本直接复制到可执行文件中。这样就造成了三个方面的弊端:第一是在不同的可执行文件种可能都存在对同一个静态库的引用副本,这部分代码是完全重复的,浪费了磁盘空间。第二是在可执行文件运行时,若它们都引用了同一静态库中的相同模块,这部分相同的模块就会在内存中驻留多个完全相同的副本,耗费大量内存。第三是当静态库中的模块更新时,所有引用此模块的可执行文件都必须重新更新和编译,这样维护代码的成本很高。共享库的出现就是为了解决静态库的弊端,它只在可执行文件引用库模块的地方插入一条记录,在执行时由链接器来寻找对应库的模块并载入内存,在运行时链接,这样上述三个问题都得到了解决。关于库的制作,请参考博客库的制作

3.进程之间的通信和同步(IPC)机制种类非常繁复,本质原因在于早期UNIX系统标准不统一,不同的UNIX标准实现IPC的方法不同。主要可以分为下面的一些方法:
信号(signal):表示某一个事件的发生,用来协调和控制进程同步。
管道和FIFO:在进程间传递数据
套接字:同一台主机或联网的不同主机之间传递数据
文件锁:为了防止其他进程对文件进行读取或修改,可以对文件的部分区域加锁
消息队列:用来在进程间交换信息
信号量(semaphore):用来同步进程动作
共享内存:使用共享的一块内存区域来进行进程的数据交换

4.信号也就是常说的“软件中断”。进程收到信号时可以忽略信号被信号杀死或者挂起等待唤醒。接收进程如果正在执行,信号会立即送达,当然接收进程也可以设置信号屏蔽来过滤掉一些信号,对其不作任何反应。

猜你喜欢

转载自blog.csdn.net/zzy980511/article/details/113780842