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

网站设置关键词江西建设监督网新网站

网站设置关键词,江西建设监督网新网站,wordpress mylife,做石膏选图形的网站一、自旋锁spinlock的实现 自旋锁#xff0c;顾名思义#xff1a;自己在原地打转#xff0c;等待资源可用#xff0c;一旦可用就上锁霸占它。 ① 原地打转的是CPU x#xff0c;以后CPU y会解锁#xff1a;这涉及多个CPU#xff0c;适用于SMP系统#xff1b; ② 对于单…一、自旋锁spinlock的实现 自旋锁顾名思义自己在原地打转等待资源可用一旦可用就上锁霸占它。 ① 原地打转的是CPU x以后CPU y会解锁这涉及多个CPU适用于SMP系统 ② 对于单CPU系统自旋锁的“自旋”功能就去掉了只剩下禁止抢占、禁止中断 要理解spinlock要通过2个情景来分析 ① 一开始怎么争抢资源不能2个程序都抢到。 这挺好解决使用原子变量就可以实现。 ② 某个程序已经获得资源怎么防止别人来同时使用这个资源。 这是使用spinlock时要注意的地方对应会有不同的衍生函数(_bh/_irq/_irqsave/_restore)。 1.1、自旋锁的内核结构体 上述__raw_tickets结构体中有owner、next两个成员这是在SMP系统中实现spinlock的关键。 1.2、spinlock在单CUP系统中的实现 对于单CPU系统没有“其他CPU”如果内核不支持preempt当前在内核态执行的线程也不可能被其他线程抢占也就“没有其他进程/线程”。所以对于不支持preempt的单CPU系统spin_lock是空函数不需要做其他事情。 如果单CPU系统的内核支持preempt即当前线程正在执行内核态函数时它是有可能被别的线程抢占的。这时spin_lock的实现就是调用“preempt_disable()”你想抢我我干脆禁止你运行。 在单CUP系统中spin_lock函数定义如下 对于spin_lock_irq()在UP系统中就退化为local_irq_disable()和preempt_disable()如下图所示 对于spin_lock_bh()在UP系统中就退化为禁止软件中断和preempt_disable()如下图所示 对于spin_lock_irqsave它跟spin_lock_irq类似只不过它是先保存中断状态再禁止中断如下 1.3、spinlock在SMP系统中的实现 在ARMv6及以上的ARM架构中支持SMP系统。它的spinlock结构体定义如下 spin_lock函数调用关系如下核心是arch_spin_lock arch_spin_lock代码如下 假设第1个程序取到了号码它访问了临界资源后调用spin_unlock代码如下 我借用这篇文章的例子讲解餐厅里只有一个座位去吃饭的人都得先取号、等叫号。注意有2个动作顾客从取号机取号电子叫号牌叫号。 ① 一开始取号机待取号码为0 ② 顾客A从取号机得到号码0电子叫号牌显示0顾客A上座 取号机显示下一个待取号码为1。 ③ 顾客B从取号机得到号码1电子叫号牌还显示为0顾客B等待 取号机显示下一个待取号码为2。 ④ 顾客C从取号机得到号码2电子叫号牌还显示为0顾客C等待 取号机显示下一个待取号码为3。 ⑤ 顾客A吃完离座电子叫号牌显示为1顾客B的号码等于1他上座 ⑥ 顾客B吃完离座电子叫号牌显示为2顾客C的号码等于2他上座 在这个例子中有2个号码取号机显示的“下一个号码”顾客取号后它会自动加1电子叫号牌显示“当前号码”顾客离座后它会自动加1。某个客户手上拿到的号码等于电子叫号牌的号码时该客户上座。 在这个过程中即使顾客B、C同时到店只要保证他们从取号机上得到的号码不同他们就不会打架。 所以关键点在于取号机的号码发放必须互斥保证客户的号码互不相同。而电子叫号牌上号码的变动不需要保护只有顾客离开后它才会变化没人争抢它。 1.4、信号量semaphore的实现 1.4.1、semaphore的内核结构体 信号量的定义及操作函数都在Linux内核文件include\linux\semaphore.h中定义如下 初始化semaphore之后就可以使用down函数或其他衍生版本来获取信号量使用up函数释放信号量。 1.4.2、down函数的实现 如果semaphore中的count大于0那么down函数就可以获得信号量否则就休眠。在读取、修改count时要使用spinlock来实现互斥。 休眠时要把当前进程放在semaphore的wait_list链表中别的进程释放信号量时去wait_list中把进程取出、唤醒。 代码如下 1.4.3、 up函数的实现 如果有其他进程在等待信号量则count值无需调整直接取出第1个等待信号量的进程把信号量给它共把它唤醒。 如果没有其他进程在等待信号量则调整count。 整个过程需要使用spinlock来保护代码如下 1.5、互斥量mutex的实现 1.5.1、mutex的内核结构体 mutex的定义及操作函数都在Linux内核文件include\linux\mutex.h中定义如下 我们使用mutex的目的一般是用来保护一小段代码这段代码运行的时间很快。这意味着一个获得mutex的进程可能很快就会释放掉mutex。 1.5.2、mutex_lock函数的实现 1.5.2.1、fastpath 首先要知道mutex的操作函数中有fastpath、slowpath两条路径(快速、慢速)如果fastpath成功就不必使用slowpath。 对于ARMv6以下的架构使用include/asm-generic/mutex-xchg.h中的__mutex_fastpath_lock函数对于ARMv6及以上的架构使用include/asm-generic/mutex-dec.h中的__mutex_fastpath_lock函数。这2个文件中的__mutex_fastpath_lock函数是类似的mutex-dec.h中的代码如下 大部分情况下mutex当前值都是1所以通过fastpath函数可以非常快速地获得mutex。 1.5.2.1、slowpath 如果mutex当前值是0或负数则需要调用__mutex_lock_slowpath慢慢处理可能会休眠等待。 __mutex_lock_common函数也是在内核文件kernel/locking/mutex.c中实现的下面分段讲解。 ① 分析第一段代码 ② 分析第二段代码 ③ 分析第三段代码 这个wait_list是FIFO(Firt In Firs Out)谁先排队谁就可以先得到mutex。 ④ 分析第四段代码for循环这是重点 ⑤ 分析第五段代码收尾工作 1.5.3、mutex_unlock函数的实现 mutex_unlock函数中也有fastpath、slowpath两条路径(快速、慢速)如果fastpath成功就不必使用slowpath。 代码如下 1.5.3.1、fastpath 对于ARMv6以下的架构使用include/asm-generic/mutex-xchg.h中的__mutex_fastpath_lock函数对于ARMv6及以上的架构使用include/asm-generic/mutex-dec.h中的__mutex_fastpath_lock函数。这2个文件中的__mutex_fastpath_lock函数是类似的mutex-dec.h中的代码如下 大部分情况下加1后mutex的值都是1表示无人等待mutex所以通过fastpath函数直接增加mutex的count值为1就可以了。 如果mutex的值加1后还是小于等于0就表示有人在等待mutex需要去wait_list把它取出唤醒这需要用到slowpath的函数__mutex_unlock_slowpath。 1.5.3.2 、slowpath __mutex_unlock_common_slowpath函数代码如下主要工作就是从wait_list中取出并唤醒第1个进程
http://www.w-s-a.com/news/610448/

相关文章:

  • 个人做网站还是公众号赚钱好部门网站建设和维护
  • 系列图标设计网站推荐建商城网站
  • 中牟建设工程信息网站黑龙江 哈尔滨
  • 网站设计基本结构wap自助建论坛网站
  • 专业番禺网站建设爱做网站外国
  • 深圳罗湖网站设计公司价格制作网站的公司办什么营业执照
  • 长清网站建设价格群辉NAS搭建wordpress
  • 变更股东怎样在工商网站做公示网站建设和网站优化哪个更重要
  • 西安手机网站python网站开发效率
  • 深圳建站的公司羽毛球赛事2022直播
  • j2ee网站开发搜索推广的流程
  • 网站目录结构图虚拟主机如何安装WordPress
  • 信产部网站备案保定软件开发网站制作
  • 东莞网站设计定做东莞网站建设最牛
  • 网站开发的软件天猫的网站导航怎么做的
  • 做链接哪个网站好网站建设平台方案设计
  • 资质升级业绩备案在哪个网站做网站建设方案费用预算
  • 做网站找哪个平台好wordpress 3.9 性能
  • 大兴模版网站建设公司企业网站备案案例
  • h5建站是什么wordpress客户端 接口
  • 济南自适应网站建设制作软件下载
  • 望都网站建设抖音广告投放收费标准
  • 网站制作软件排行榜上海市网站建设公司58
  • 什么是网站风格中国工商网企业查询官网
  • 专业建设专题网站wordpress lnmp wamp
  • 环保网站 下载页网站
  • 开源小程序模板江门关键词优化排名
  • 网站开发 知乎房地产型网站建设
  • 买完域名网站怎么设计wordpress 纯代码
  • 公司网站怎么做百度竞价宁波网络公司哪家好