vxWorks中就绪队列小结

本文主要总结了vxWorks操作系统中关于就绪队列的实现,包括每个CPU核心的独立就绪队列初始化,以及就绪队列、tick队列和pend队列的不同操作函数集。重点讨论了如何将任务插入就绪队列以及如何从队列中取出最高优先级的任务。
摘要由CSDN通过智能技术生成

之前说过了tick队列,现在说一下就绪队列。
就绪队列也是一个全局队列,在多核的系统中,系统为每一个核都设置了一个就绪队列:


在usrSmp.c文进中为每个cpu核都定义了自己的readQueue

Q_HEAD    _WRS_DATA_ALIGN_BYTES(16) readyQSmpHead [VX_SMP_NUM_CPUS];
BMAP_LIST _WRS_DATA_ALIGN_BYTES(16) readyQSmpBMap [VX_SMP_NUM_CPUS];

相关结构体如下:
typedef struct		/* BMAP_LIST */
    {
    UINT32	metaBMap;		/* lookup table for map */

    /* lookup table for listArray */

    UINT32	bMap [Q_PRI_BMAP_MAX_PRIORITIES / 32];		

    /* doubly linked list head */

    DL_LIST	listArray [Q_PRI_BMAP_MAX_PRIORITIES];	
    } BMAP_LIST;

typedef struct		/* Q_PRI_BMAP_HEAD */
    {
    Q_PRI_NODE	*highNode;		/* highest priority node */
    BMAP_LIST	*pBMapList;		/* pointer to mapped list */
    UINT 	nPriority;		/* priorities in queue (1,288) */
    } Q_PRI_BMAP_HEAD;

typedef struct		/* Q_PRI_NODE */
    {
    DL_NODE	node;		/* 0: priority doubly linked node */
    ULONG	key;		/* 8: insertion key (ie. priority) */
    } Q_PRI_NODE;

typedef struct		/* Q_HEAD */
    {
    Q_NODE  *pFirstNode;	/* first node in queue based on key */
    UINT     qPriv1;			/* use is queue type dependent */
    UINT     qPriv2;			/* use is queue type dependent */
    Q_CLASS *pQClass;			/* pointer to queue class */
    } Q_HEAD;

typedef struct		/* Q_NODE */
    {
    UINT     qPriv1;			/* use is queue type dependent */
    UINT     qPriv2;			/* use is queue type dependent */
    UINT     qPriv3;			/* use is queue type dependent */
    UINT     qPriv4;			/* use is queue type dependent */
    } Q_NODE;

先说一下对于全局的就绪队列的初始化:
对于每个队列呢,都有自己对应的操作函数集,就绪队列有自己的函数集,tick队列也有自己的函数集,pend的队列就根据pend的情况不一样,而使用不同的操作函数集。
就绪队列获取操作函数集的函数调用:

usrInit-->kernelInit-->READY_Q_INIT-->readyQInit

readyQInit就指定了就绪队列的操作函数,
STATUS readyQInit (void)
    {
    int ix;
/*不同的核对应的就绪队列都要进行初始化*/
    for (ix = 0; ix < _WRS_CPU_CONFIGURED (); ix++)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值