linux 线程

###1. 多进程 / 多线程 很多需要并发处理的任务,如数据库的服务器端、网络服务器等, 可以使用多进程来实现, 也可以使用多线程来实现 使用多进程, 存在如下的优缺点: fork一个子进程的消耗是很大的,即使使用现代的写时复制(copy-on-write)技术。 各个进程拥有自己独立的地址空间,进程间的协作需要复杂的IPC技术,如pipe,共享内存, unix socket等 多进程可以避免内存泄漏 多进程可以实现特权分离 使用多线程, 则存在如下的优缺点 建立新的线程的开销较小 线程共享进程的代码可全局数据, 线程间通信方便 线程共享进程的代码可全局数据, 可能存在竞争, 需要同步 ###2. 用户空间线程 这里的用户线程指的是完全建立在用户空间的线程库,用户线程的建立,同步,销毁,调度完全在用户空间完成,不需要内核的帮助, 内核并没有直接对用户线程进程调度,内核的调度对象和传统进程一样,还是进程本身,内核并不知道用户线程的存在,用户线程之间的调度由在用户空间实现的线程库实现 因为用户空间线程完全在用户态实现线程,因此也就和具体的内核没有什么关系,可移植性和扩展性方面比较好 用户空间线程的缺点是一个用户线程如果阻塞在系统调用中,则整个进程都将会阻塞 ###3. 内核空间线程 内核空间线程是指由内核来负责建立,同步, 销毁, 调度的线程,因为内核空间实现的线程由内核负责调度, 因此它能够利用多处理器的优势, 并且, 某一个线程阻塞不会导致其所属的进程阻塞 ###4. 轻量级进程LWP LWP本质仍然是进程,与普通进程相比:...

linux NFC subsystm

###1. linux上传统的nfc软件架构 nfc chip 一般使用 I2C, SPI, USB这些接口同host连接, 在linux上, 各厂商通常各自开发driver, 然后使用不同的方式实现driver和userspace的交互(例如使用一个misc设备,并且实现用户操作), 而在userspace中, 需要适配 libnfc-nci , 最后利用 libnfc-nci 来开发应用 以 android 为例, 其 nfc 的软件架构为: nfc driver 建立一个misc设备文件, 并且实现其文件操作方法 Hal 层实现 libnfc-nci 定义的方法, 利用文件操作misc 设备的文件操作接口同driver通信 libnfc-nci 利用 Hal 层, 使用 NCI...

NFC CE 模式

###1. NFC CE mode NFC CE模式允许具备NFC芯片的设备能够充当智能卡(例如信用卡)来使用, 该模式所支持的应用场景极具前景, 例如, 支持该功能的Android智能手机来完成购票, 支付, 公交卡, 门禁卡等 NFC CE mode有两种实现: 虚拟卡模拟 : 基于硬件,这种模式下,需要提供SE单元, nfc芯片作为通信的前端模块, 将收到的操作命令, 转发到SE, 由SE负责处理 主机卡模拟 : 基于软件,这种模式下,由运行在主机上的应用来充当SE 关于NFC CE mode, NFC Forum暂时还没有相关的规范 ###2. 虚拟卡模拟 虚拟卡模拟能够模拟的卡类型, 取决于nfc 芯片, 例如NXP的芯片,可以方便的模拟M1和ULTRALIGHT等 ####2.1 SE与nfc芯片的连接 虚拟卡模拟依赖SE单元, 安全单元为NFC设备上专用的微处理芯片。该芯片可以与NFC控制器集成在一起。另外也可以集成在NFC设备中的其它智能卡/安全设备中,...

NFC P2P 模式

###1. nfc p2p mode 在nfc的 R/W 和 CE 模式中, nfc device 只能单向和 nfc tag交互, 即只能由nfc device发起读写操作 事实上, nfc技术实际上可以支持nfc device之间互相交互, 为此, nfc forum 定义了 P2P 模式 ###2. LLCP nfc 的P2P 协议栈的最高层为 LLC (Logic Link Control), 这一协议称为为 LLCP LLC层考虑的的是物理寻址, 链路管理, 数据传输, LLCP向上提供了2种服务...

linux debugfs

###1. debugfs “/proc” 和 “/sys” 文件系统都可以通过文件来导出内核信息, 内核模块也可以通过在其中添加文件来导出调试信息, 但是, procfs的是反映进程的状态信息,而sysfs主要用于Linux设备模型, 使用它们来实现debug偏离了它们的本意, 为此, linux中添加了debugfs ###2. enable debugfs 让内核支持DEBUGFS,使能宏CONFIG_DEBUG_FS,在内核配置中选中,一般是在Kernel hacking中 Kernel Hacking ---> [] Debug Filesystem debugfs 挂载在 “/sys/kernel/debug” 目录下, 如果没有挂载, 可以使用如下命令来挂载或者添加到 fstab 中来自动挂载 mount -t debugfs none /sys/kernel/debug ###3. debugfs API 要使用debugfs提供的api必须包含头文件...