易截截图软件、单文件、免安装、纯绿色、仅160KB

linux信号机制


linux信号机制
 
 
信号提供了一种通知进程系统事件发生的机制,它也是作为用户进程之间通信和同步的
一种原始机制。在进程迁移的情况下,如何处理信号呢?这部分介绍了MOSIX系统对信号
机制的处理。
LINUX信号机制
信号是异步的进程间通讯机制,是在软件层次上对中断机制的一种模拟。LINUX内核的信
号机制符合POSIX.4的规定,这是POSIX.1标准的一个超集。
每个进程的task_struct结构中都有个指针sig,指向一个singal_struct结构,结构中的
数组action[]相当于一个信号向量表,每个元素确定了进程接收到一个具体的信号时应
该采取的行动。
struct signal_struct {
    atomic_t        count;
    struct k_sigaction  action[_NSIG];
    spinlock_t      siglock;
};
那么系统如何判断一个进程是否有信号在等待处理呢?这是通过task_struct结构中的si
gpending成员。task_struct结构中的blocked成员则为屏蔽信号的集合,pending成员则
为信号队列,每产生一个信号则把它挂入这个队列,信号位图signal也保存在其中。
用户常常要自己定义对信号的处理程序,并且用户的处理函数是位于用户空间的。LINUX
提供了系统调用signal(sys_signal)和sigaction(sys_sigaction 或sys_rt_sigacti
on)为信号设置处理向量。用户设置信号处理的时机我们是不能确定的,可以在进程迁
移前,也可以在进程迁移之后,进程可以在不同的节点间多次迁移,因此,如何保证信
号不被丢失并且都能被正确处理就很重要。并且我们注意到,进程在迁移时,并不将信
号向量表迁移到目标进程,而只是将进程的异步信号和强制信号信息传送到目标进程【
参见mig_send_misc()和mig_do_receive_misc()】。
struct asig_h
{
    unsigned int sigs;/*信号*/
    int nforced;/*内核发送的强制信号的个数*/
};
struct mosix_task
{。。。。。。。
uint32_t asig;      /*到达REMOTE的信号 */
siginfo_t *forced_sigs; /* REMOTE强制信号信息*/
int nforced_sigs;   /* REMOTE强制信号的个数 */
short sigmig;       /* 迁移时接收的信号 */
}
int  mig_send_misc(int credit)
{ struct mig_misc_h m;
regis


相关文档:

实战Linux Bluetooth编程(六) L2CAP编程实例

例一:发送Signaling Packet:
Signaling Command是2个Bluetooth实体之间的L2CAP层命令传输。所以得Signaling Command使用CID 0x0001.
多个Command可以在一个C-frame(control frame)中发送。
 如果要直接发送Signaling Command.需要建立SOCK_RAW类型的L2CAP连接Socket。这样才有机会自己填充Command Code,Identi ......

实战Linux Bluetooth编程 (七) SDP协议

Service Discovery Protocol(SDP)提供一种能力,让应用程序有方法发现哪种服务可用以及这种服务的特性。
服务发现协议(SDP或Bluetooth SDP)在蓝牙协议栈中对蓝牙环境中的应用程序有特殊的含意,发现哪个服务是可用的和确定这些可用服务的特征。SDP定义了bluetooth client发现可用bluetooth server服务和它们的特征的方法。 ......

Linux设备模型之input子系统详解

一:前言
最近在研究android的sensor driver,主要是E-compass,其中用到了Linux input子系统.在网上也看了很多这方面的资料,感觉还是这篇分析的比较细致透彻,因此转载一下以便自己学习,同时和大家分享!
(这篇博客主要是以键盘驱动为例的,不过讲解的是Linux Input Subsystem,可以仔细的研究一下!)
键盘驱动将检 ......

linux 播放声音文件程序代码

声音文件必须为Wave PCM unsigned 8bits mono格式
/* the *.wav must be 8000Hz 64kbps  8bits MONO(1)*/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <sys/ioctl.h>
#include <linux/soundcard.h&g ......

Linux下磁盘相关操作命令

查看磁盘以及分区命令:
fdisk -l
输出结果如下:
-----------------------------------------------------------------------
Disk /dev/sda: 160.0 GB, 160040803840 bytes
255 heads, 63 sectors/track, 19457 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
   Device Boot   ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号