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

湖北网站seo工商部门在线咨询

湖北网站seo,工商部门在线咨询,长沙中企动力怎么样,专业简章一、自旋锁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/630435/

相关文章:

  • 购物网站销售管理合肥网络推广平台
  • 网站建设规划书txt微盘注册帐号
  • 小说网站开发实训报告企业网盘收费标准
  • mvc网站开发医疗医院网站建设
  • 天津市建设厅官方网站wordpress设置404
  • 贵阳好的网站建设免费正能量网站下载ww
  • 免费学习的网站平台自建站seo如何做
  • 海南三亚做网站公众号版面设计创意
  • 学校网站建设目的与意义合肥网页定制
  • 网站查询地址网站建设与维护费用
  • 做网站哪些软件比较好合肥外贸网站建设公司
  • 建网站需要哪些条件专业网站设计报价
  • 定制网站开发技术化妆品的网站布局设计图片大全
  • 网站模糊设计发布产品的免费平台有哪些
  • 网站建站什么目录桂林网站建设内容
  • 光明新区城市建设局网站长沙营销型网站制作费用
  • 网站建设制度制定wordpress主题哥
  • 门户网站的种类php网站开发实训心得
  • 流程图制作网页网络优化seo
  • 个人公益网站怎么制作wordpress flat theme
  • 做营销型网站的公司篇高端网站愿建设
  • 五莲网站建设维护推广凡科做网站的方法
  • 山东省住房建设厅网站首页网站文章更新怎么通知搜索引擎
  • 商务网站的可行性分析包括大流量网站 优化
  • 推广网站有效的方法网站数据统计
  • 自建视频网站WordPress数据库添加管理员
  • 新民电商网站建设价格咨询网站建设高效解决之道
  • 做网站需要哪些步骤网站设计介绍
  • 物流网站制作目的国外中文网站排行榜单
  • 苏州网站建设招标网站ftp的所有权归谁