当前位置: 首页 > news >正文

做交易网站需要用到的软件有哪些灰色关键词排名代做

做交易网站需要用到的软件有哪些,灰色关键词排名代做,免费做爰小说网站,怎么建设淘宝那样的网站Linux内核中 spinlock相关数据结构和代码实现涉及的文件还是挺多的,这篇博客尝试从文件的角度来梳理一下 spinlock的相关数据结构和代码实现,适合想大概了解 Linux内核中 spinlock从上层 API到底层实现间的调用路径和传参变化,尤其适合了解 s…

Linux内核中 spinlock相关数据结构和代码实现涉及的文件还是挺多的,这篇博客尝试从文件的角度来梳理一下 spinlock的相关数据结构和代码实现,适合想大概了解 Linux内核中 spinlock从上层 API到底层实现间的调用路径和传参变化,尤其适合了解 spinlockqspinlock之间的关系。

这里只以 spinlock加锁函数 为切入点,梳理该函数从上层 API到底层实现涉及的文件。

1. 关注 spin_lock()

spinlock的加锁函数是 spin_lock()
spin_lock()的位置:include/linux/spinlock.h
spin_lock()的内容:

static __always_inline void spin_lock(spinlock_t *lock)
{raw_spin_lock(&lock->rlock);
}

看到这里,需要关注该函数的入参类型:spinlock_t
spinlock_t的位置: include/linux/spinlock_types.h
spinlock_t的内容:

typedef struct spinlock {union {struct raw_spinlock rlock;#ifdef CONFIG_DEBUG_LOCK_ALLOC
# define LOCK_PADSIZE (offsetof(struct raw_spinlock, dep_map))struct {u8 __padding[LOCK_PADSIZE];struct lockdep_map dep_map;};
#endif};
} spinlock_t;

2. 关注 __raw_spin_lock()

从上面可以看到,spin_lock()调用了 raw_spin_lock(), 而 raw_spin_lock()是一个宏,将它展开后得到:__raw_spin_lock(),同时假定 CONFIG_INLINE_SPIN_LOCK配置项打开,则
__raw_spin_lock()的位置:include/linux/spinlock_api_smp.h
__raw_spin_lock()的内容:

static inline void __raw_spin_lock(raw_spinlock_t *lock)                                       
{preempt_disable();spin_acquire(&lock->dep_map, 0, 0, _RET_IP_);LOCK_CONTENDED(lock, do_raw_spin_trylock, do_raw_spin_lock);
}

__raw_spin_lock()的参数类型是:raw_spinlock_t,它和 struct raw_spinlock是同一个类型,对应 spinlock_trlock成员变量的类型
raw_spinlock_t的位置:include/linux/spinlock_types.h
raw_spinloct_t的内容:

typedef struct raw_spinlock {arch_spinlock_t raw_lock;
#ifdef CONFIG_DEBUG_SPINLOCK          unsigned int magic, owner_cpu;void *owner;                
#endif                                
#ifdef CONFIG_DEBUG_LOCK_ALLOC        struct lockdep_map dep_map;
#endif                                
} raw_spinlock_t;

3. 关注 do_raw_spin_lock()

从上面可以看到, __raw_spin_lock()调用了 do_raw_spin_lock()
do_raw_spin_lock()的位置:include/linux/spinlock.h
do_raw_spin_lock()的内容:

static inline void do_raw_spin_lock(raw_spinlock_t *lock) __acquires(lock)
{__acquire(lock);arch_spin_lock(&lock->raw_lock);
}

4. 关注 arch_spin_lock() 和 arch_spinlock_t

从上面可以看到,do_raw_spin_lock()调用了 arch_spin_lock()
arch_spin_lock()和它的入参 arch_spinlock_t是与体系结构相关的,这里面基本能分成两派,
一派是自己实现 arch_spin_lock()arch_spinlock_t
一派是使用通用的 qspinlock实现,也即 #define arch_spin_lock(l) queued_spin_lock(l)typedef struct qspinlock {...} arch_spinlock_t

体系结构自己实现的架构包括:alpha, arc, arm, hexagon, ia64, parisc, powerpc, riscv, s390, sh, sparc-32, xtensa
具体列举其中的 5 个:
alpha架构
arch_spin_lock()的位置:arch/alpha/include/asm/spinlock.h
arch_spinlock_t的位置:arch/alpha/include/asm/spinlock_types.h

arc架构
arch_spin_lock()的位置:arch/arc/include/asm/spinlock.h
arch_spinlock_t的位置:arch/arc/include/asm/spinlock_types.h

arm架构
arch_spin_lock()的位置:arch/arm/include/asm/spinlock.h
arch_spinlock_t的位置:arch/arm/include/asm/spinlock_types.h

hexagon架构
arch_spin_lock()的位置:arch/hexagon/include/asm/spinlock.h
arch_spinlock_t的位置:arch/hexagon/include/asm/spinlock_types.h

ia64架构
arch_spin_lock()的位置:arch/ia64/include/asm/spinlock.h
arch_spinlock_t的位置:arch/ia64/include/asm/spinlock_types.h

使用 qspinlock实现的架构包括:mips, sparc-64, x86, arm64, openrisc
queued_spin_lock()的位置:include/asm-generic/qspinlock.h
queued_spin_lock()的内容是:

static __always_inline void queued_spin_lock(struct qspinlock *lock)
{u32 val;val = atomic_cmpxchg_acquire(&lock->val, 0, _Q_LOCKED_VAL);if (likely(val == 0)) return;queued_spin_lock_slowpath(lock, val);
}

struct qspinlock的位置:include/asm-generic/qspinlock_types.h
struct qspinlock的内容是:

typedef struct qspinlock {union {atomic_t val;/** By using the whole 2nd least significant byte for the* pending bit, we can allow better optimization of the lock* acquisition for the pending bit holder.*/
#ifdef __LITTLE_ENDIANstruct {u8  locked;u8  pending;};struct {u16 locked_pending;u16 tail;};
#elsestruct {u16 tail;u16 locked_pending;};struct {u8  reserved[2];u8  pending;u8  locked;};
#endif};
} arch_spinlock_t;
http://www.hkea.cn/news/927412/

相关文章:

  • 怎么访问日本竹中建设网站外贸seo推广
  • 惠阳建设局网站引流推广接单
  • 北京通州网站建设公司如何建立公司网站网页
  • 网站换程序301seo优化按天扣费
  • html5 网站自适应长尾关键词挖掘爱站工具
  • 网站设计公司(信科网络)潍坊网站定制模板建站
  • 番禺网站开发报价百度竞价排名软件
  • 做企业网站接单seo网站优化技术
  • 建设网站行业云网络推广理实一体化软件
  • 如何用自己公司网站做邮箱关键字是什么意思
  • 古典网站建设欣赏马鞍山网站seo
  • 商城网站建设报价方案免费建网站软件下载
  • 中国做美国酒店的网站好竞价托管收费标准
  • 网站开发与设计静态网页源代码站长之家app下载
  • 松原做网站app运营推广是干什么
  • 做简单的网站链接2024新闻热点摘抄
  • 百度网站站长环球网疫情最新
  • 颍上做网站西安seo网站关键词优化
  • 有没有兼职做设计的网站吗知名网络软文推广平台
  • 数据百度做网站好用吗米拓建站
  • 网站维护运营怎么做搜索引擎优化通常要注意的问题有
  • 圆梦科技专业网站建设恶意点击软件有哪些
  • 如何做vip电影解析网站竞价恶意点击器
  • 开发简单小程序公司深圳网站优化哪家好
  • 网站开发劣势搜索引擎排名优化
  • 桂林网站优化公司企业网络营销顾问
  • 上海外贸出口代理公司排名搜索引擎优化的主要工作有
  • 一般做企业网站需要什么资料广告咨询
  • 广州网站建设兼职网站为什么要做seo
  • 中企动力官网 网站怎么在平台上做推广