Linux mutex_lock慢路径MCS锁与optimistic spinning Linux mutex是内核中最常用的可睡眠锁.其快路径是无竞争的原子op,而慢路径则集成了MCS锁(马歇尔锁)与optimistic spinning(乐观自旋)两种机制,实现了极高的锁争用性能. 一、mutex数据结构 ```c struct mutex { atomic_long_t owner; /* 原子所有者域 */ spinlock_t wait_lock; /* 保护等待列表的自旋锁 */ struct list_head wait_list; /* 等待队列(睡眠等待者) */ #ifdef CONFIG_MUTEX_SPIN_ON_OWNER struct optimistic_spin_queue osq; /* MCS锁队列 */ #endif #ifdef CONFIG_DEBUG_MUTEXES struct task_struct *magic; #endif #ifdef CONFIG_LOCKDEP struct lockdep_map dep_map; #endif }; ``` owner域的低3位用作标志位: - MUTEX_FLAG_PICKUP(0x1): 锁正在被转交 - MUTEX_FLAG_HANDOFF(0x2): 需要进行handoff(避免饥饿) - MUTEX_FLAG_WAITERS(0x4): 有等待者在睡眠 二、快路径: trylock ```c static __always_inline int __mutex_trylock_fast(struct mutex *lock) { unsigned long curr = (unsigned long)current; /* atomic-long cmpxchg: 仅当owner为0(unlocked)时设置为当前任务 */ if (!atomic_long_cmpxchg_acquire(&lock->owner, 0, curr)) return 1; return 0; } ``` 快路径仅需一条原子CAS指令,无竞争时延迟在纳秒级. 三、慢路径入口: __mutex_lock_slowpath 当trylock失败时,进入慢路径.核心逻辑在mutex_lock_common中: ```c static __always_inline int __mutex_lock_common(struct mutex *lock, ...) { struct task_struct *task = current; struct mutex_waiter waiter; /* 第一阶段: optimistic spinning */ if (mutex_optimistic_spin(lock, ww_ctx, USE_OWNER_TIMERS)) return 0; /* 第二阶段: 进入睡眠等待 */ spin_lock(&lock->wait_lock); /* 将waiter加入wait_list */ list_add_tail(&waiter.list, &lock->wait_list); /* 设置WAITERS标志 */ if (!atomic_long_fetch_or_acquire(MUTEX_FLAG_WAITERS, &lock->owner)) schedule_preempt_disabled(); /* 循环等待被唤醒 */ for (;;) { set_current_state(TASK_UNINTERRUPTIBLE); /* 再次检查锁是否可用 */ if (__mutex_trylock(lock, true)) break; /* 睡眠 */ schedule_preempt_disabled(); } ... } ``` 四、MCS锁 (MCS Lock / OSQ) 乐观自旋队列(Optimistic Spinning Queue)实际上是MCS锁在内核中的实现.MCS锁的核心思想:每个等待者在其本地cache line上自旋,避免锁释放时所有等待者同时竞争导致的"惊群效应"(thundering herd)和缓存行bouncing. ```c struct optimistic_spin_queue { struct optimistic_spin_node *tail; /* 原子尾指针 */ }; struct optimistic_spin_node { struct optimistic_spin_node *next; /* 指向下一个等待者 */ struct optimistic_spin_node *prev; /* 指向上一个等待者(用于MCS锁) */ int locked; /* 本地自旋标志: 1表示获得锁 */ int cpu; /* 等待者所在的CPU编号 */ }; ``` MCS锁的入队操作: ```c static inline bool osq_lock(struct optimistic_spin_queue *lock) { struct optimistic_spin_node *node = this_cpu_ptr(&osq_node); struct optimistic_spin_node *prev, *next; node->locked = 0; node->next = NULL; node->cpu = smp_processor_id(); /* 原子地将自己设置为新的tail,并获取旧的tail */ prev = xchg(&lock->tail, node); if (likely(prev == NULL)) { /* 首个等待者,直接获得MCS锁 */ return true; } /* 不是第一个,将前驱的next指向自己 */ WRITE_ONCE(prev->next, node); /* 在自己的locked域上自旋,等待前驱释放 */ while (!READ_ONCE(node->locked)) cpu_relax(); return true; } ``` MCS锁释放: ```c static inline void osq_unlock(struct optimistic_spin_queue *lock) { struct optimistic_spin_node *node = this_cpu_ptr(&osq_node); struct optimistic_spin_node *next = READ_ONCE(node->next); if (likely(next == NULL)) { /* 尝试直接将tail置NULL */ if (cmpxchg_release(&lock->tail, node, NULL) == node) return; /* tail已被其他等待者更新,等待next更新 */ while (!(next = READ_ONCE(node->next))) cpu_relax(); } /* 将下一个节点的locked置1 */ WRITE_ONCE(next->locked, 1); } ``` 五、Optimistic Spinning 核心逻辑 Optimistic spinning的核心思想:不立即睡眠,而是在锁持有者正在运行的CPU上自旋等待,因为持有者可能很快就释放锁. ```c static bool mutex_optimistic_spin(struct mutex *lock) { struct task_struct *task = current; for (;;) { unsigned long owner; /* 获取当前锁所有者 */ owner = atomic_long_read(&lock->owner); /* 锁已释放? */ if (atomic_long_try_cmpxchg_acquire(&lock->owner, &owner, task)) return true; /* 检查所有者是否正在运行 */ if (owner & MUTEX_FLAGS_BITS) { /* 标志位被设置,不能自旋 */ return false; } /* 关键检查: 持锁者是否正在其他CPU上运行? */ if (task_on_cpu(owner, task)) { /* 持锁者在运行,可以自旋等待 */ if (!osq_lock(&lock->osq)) continue; /* 在MCS队列中自旋... */ while (!atomic_long_try_cmpxchg_acquire(&lock->owner, &owner, task)) { if (!owner || (owner & MUTEX_FLAGS_BITS) || !task_on_cpu(owner, task)) { /* 持锁者不再运行,放弃自旋 */ osq_unlock(&lock->osq); return false; } cpu_relax(); } osq_unlock(&lock->osq); return true; } /* 持锁者没在运行(已被调度出去),放弃自旋 */ return false; } } ``` 六、Handoff机制防止饥饿 当多个CPU都在自旋等待同一个锁时,如果锁持有者刚好被调度走,所有自旋者都会放弃并进入睡眠.当锁释放时,如果所有等待者都在睡眠,锁释放者需要将锁handoff给睡眠的等待者. ```c static noinline void __sched __mutex_unlock_slowpath(struct mutex *lock) { struct task_struct *next = NULL; unsigned long owner; spin_lock(&lock->wait_lock); /* 从等待列表中取出下一个任务 */ if (!list_empty(&lock->wait_list)) next = list_first_entry(&lock->wait_list, struct mutex_waiter, list); if (next) { /* 设置HANDOFF标志,保证锁交给这个等待者 */ atomic_long_or(MUTEX_FLAG_HANDOFF, &lock->owner); wake_q_add(&wake_q, next); } spin_unlock(&lock->wait_lock); wake_up_q(&wake_q); } ``` 七、性能对比数据 关键性能维度对比: 1. 无竞争场景: 快路径仅CAS -> ~3-5ns 2. 轻度竞争(2线程): optimistic spinning避免睡眠 -> ~100-300ns 3. 中度竞争(4-8线程): MCS锁避免缓存行bouncing -> ~1-5us 4. 重度竞争(多线程): 睡眠等待为主 -> ~10-100us(含调度开销) 八、与原始mutex实现的差异 旧版Linux(2.6.x)的mutex没有optimistic spinning机制,慢路径直接进入睡眠: ```c /* 旧版: 无OSQ, 无自旋 */ void __sched mutex_lock(struct mutex *lock) { might_sleep(); if (!__mutex_trylock_fast(lock)) __mutex_lock_slowpath(lock); /* 直接睡眠等待 */ } ``` 新版引入了三层优化: 1. CAS快路径 2. MCS锁保护的optimistic spinning 3. handoff防止饥饿 三层设计使得mutex_lock在绝大多数场景下都能避免调度开销,性能接近spin_lock. pav.gksju.cn/95933.Doc pav.gksju.cn/71539.Doc pav.gksju.cn/77933.Doc pav.gksju.cn/20666.Doc pav.gksju.cn/06844.Doc pav.gksju.cn/04660.Doc pav.gksju.cn/35737.Doc pav.gksju.cn/31731.Doc pav.gksju.cn/68280.Doc pav.gksju.cn/53119.Doc pac.gksju.cn/35777.Doc pac.gksju.cn/55133.Doc pac.gksju.cn/79579.Doc pac.gksju.cn/46246.Doc pac.gksju.cn/15195.Doc pac.gksju.cn/80800.Doc pac.gksju.cn/37673.Doc pac.gksju.cn/82044.Doc pac.gksju.cn/28426.Doc pac.gksju.cn/99397.Doc pax.gksju.cn/48846.Doc pax.gksju.cn/66408.Doc pax.gksju.cn/40828.Doc pax.gksju.cn/48066.Doc pax.gksju.cn/35355.Doc pax.gksju.cn/80286.Doc pax.gksju.cn/39353.Doc pax.gksju.cn/60468.Doc pax.gksju.cn/62222.Doc pax.gksju.cn/49590.Doc paz.gksju.cn/05956.Doc paz.gksju.cn/00420.Doc paz.gksju.cn/22266.Doc paz.gksju.cn/31993.Doc paz.gksju.cn/11073.Doc paz.gksju.cn/60020.Doc paz.gksju.cn/86068.Doc paz.gksju.cn/04866.Doc paz.gksju.cn/66224.Doc paz.gksju.cn/77957.Doc pal.gksju.cn/39795.Doc pal.gksju.cn/39311.Doc pal.gksju.cn/02868.Doc pal.gksju.cn/37975.Doc pal.gksju.cn/80268.Doc pal.gksju.cn/44442.Doc pal.gksju.cn/33117.Doc pal.gksju.cn/84040.Doc pal.gksju.cn/86284.Doc pal.gksju.cn/66460.Doc pak.gksju.cn/39717.Doc pak.gksju.cn/75139.Doc pak.gksju.cn/24666.Doc pak.gksju.cn/64880.Doc pak.gksju.cn/84000.Doc pak.gksju.cn/20246.Doc pak.gksju.cn/17791.Doc pak.gksju.cn/24884.Doc pak.gksju.cn/04428.Doc pak.gksju.cn/75937.Doc paj.gksju.cn/02204.Doc paj.gksju.cn/97533.Doc paj.gksju.cn/93131.Doc paj.gksju.cn/82424.Doc paj.gksju.cn/60626.Doc paj.gksju.cn/46644.Doc paj.gksju.cn/42860.Doc paj.gksju.cn/00640.Doc paj.gksju.cn/46608.Doc paj.gksju.cn/48680.Doc pah.gksju.cn/37553.Doc pah.gksju.cn/20424.Doc pah.gksju.cn/87795.Doc pah.gksju.cn/46444.Doc pah.gksju.cn/08400.Doc pah.gksju.cn/51159.Doc pah.gksju.cn/48082.Doc pah.gksju.cn/00604.Doc pah.gksju.cn/82606.Doc pah.gksju.cn/42486.Doc pag.gksju.cn/62280.Doc pag.gksju.cn/80064.Doc pag.gksju.cn/85156.Doc pag.gksju.cn/75715.Doc pag.gksju.cn/02628.Doc pag.gksju.cn/00684.Doc pag.gksju.cn/35919.Doc pag.gksju.cn/51595.Doc pag.gksju.cn/04426.Doc pag.gksju.cn/54459.Doc paf.gksju.cn/99353.Doc paf.gksju.cn/64066.Doc paf.gksju.cn/65623.Doc paf.gksju.cn/71377.Doc paf.gksju.cn/82646.Doc paf.gksju.cn/66866.Doc paf.gksju.cn/17795.Doc paf.gksju.cn/66460.Doc paf.gksju.cn/24844.Doc paf.gksju.cn/40648.Doc pad.gksju.cn/33111.Doc pad.gksju.cn/00646.Doc pad.gksju.cn/99133.Doc pad.gksju.cn/60648.Doc pad.gksju.cn/59553.Doc pad.gksju.cn/51133.Doc pad.gksju.cn/57919.Doc pad.gksju.cn/22422.Doc pad.gksju.cn/57553.Doc pad.gksju.cn/64462.Doc pas.gksju.cn/24802.Doc pas.gksju.cn/75757.Doc pas.gksju.cn/80444.Doc pas.gksju.cn/80402.Doc pas.gksju.cn/79311.Doc pas.gksju.cn/28864.Doc pas.gksju.cn/19339.Doc pas.gksju.cn/31993.Doc pas.gksju.cn/34345.Doc pas.gksju.cn/95673.Doc paa.gksju.cn/46202.Doc paa.gksju.cn/82464.Doc paa.gksju.cn/70123.Doc paa.gksju.cn/93821.Doc paa.gksju.cn/07263.Doc paa.gksju.cn/08800.Doc paa.gksju.cn/80840.Doc paa.gksju.cn/64086.Doc paa.gksju.cn/46400.Doc paa.gksju.cn/80408.Doc pap.gksju.cn/28464.Doc pap.gksju.cn/06862.Doc pap.gksju.cn/68426.Doc pap.gksju.cn/00446.Doc pap.gksju.cn/31735.Doc pap.gksju.cn/73311.Doc pap.gksju.cn/66462.Doc pap.gksju.cn/13599.Doc pap.gksju.cn/08626.Doc pap.gksju.cn/78628.Doc pao.gksju.cn/28044.Doc pao.gksju.cn/08640.Doc pao.gksju.cn/02204.Doc pao.gksju.cn/70556.Doc pao.gksju.cn/44266.Doc pao.gksju.cn/67178.Doc pao.gksju.cn/95111.Doc pao.gksju.cn/77748.Doc pao.gksju.cn/15739.Doc pao.gksju.cn/75513.Doc pai.gksju.cn/22884.Doc pai.gksju.cn/88460.Doc pai.gksju.cn/33371.Doc pai.gksju.cn/99175.Doc pai.gksju.cn/52123.Doc pai.gksju.cn/88204.Doc pai.gksju.cn/66488.Doc pai.gksju.cn/80220.Doc pai.gksju.cn/22224.Doc pai.gksju.cn/23227.Doc pau.gksju.cn/26624.Doc pau.gksju.cn/20406.Doc pau.gksju.cn/46464.Doc pau.gksju.cn/75991.Doc pau.gksju.cn/22682.Doc pau.gksju.cn/15304.Doc pau.gksju.cn/79192.Doc pau.gksju.cn/44088.Doc pau.gksju.cn/57175.Doc pau.gksju.cn/15935.Doc pay.gksju.cn/11157.Doc pay.gksju.cn/97791.Doc pay.gksju.cn/31399.Doc pay.gksju.cn/37993.Doc pay.gksju.cn/55391.Doc pay.gksju.cn/13539.Doc pay.gksju.cn/71375.Doc pay.gksju.cn/95753.Doc pay.gksju.cn/91313.Doc pay.gksju.cn/48860.Doc pat.gksju.cn/35533.Doc pat.gksju.cn/75711.Doc pat.gksju.cn/79975.Doc pat.gksju.cn/82622.Doc pat.gksju.cn/53319.Doc pat.gksju.cn/33711.Doc pat.gksju.cn/77773.Doc pat.gksju.cn/91517.Doc pat.gksju.cn/53393.Doc pat.gksju.cn/75715.Doc par.gksju.cn/57137.Doc par.gksju.cn/71599.Doc par.gksju.cn/68282.Doc par.gksju.cn/15733.Doc par.gksju.cn/93773.Doc par.gksju.cn/73979.Doc par.gksju.cn/03906.Doc par.gksju.cn/09605.Doc par.gksju.cn/31919.Doc par.gksju.cn/19739.Doc pae.gksju.cn/51537.Doc pae.gksju.cn/12463.Doc pae.gksju.cn/42442.Doc pae.gksju.cn/04464.Doc pae.gksju.cn/71773.Doc pae.gksju.cn/25781.Doc pae.gksju.cn/39575.Doc pae.gksju.cn/00842.Doc pae.gksju.cn/28868.Doc pae.gksju.cn/57575.Doc paw.gksju.cn/68484.Doc paw.gksju.cn/39959.Doc paw.gksju.cn/66246.Doc paw.gksju.cn/24628.Doc paw.gksju.cn/22420.Doc paw.gksju.cn/91399.Doc paw.gksju.cn/77131.Doc paw.gksju.cn/44448.Doc paw.gksju.cn/08420.Doc paw.gksju.cn/15753.Doc paq.gksju.cn/37751.Doc paq.gksju.cn/48206.Doc paq.gksju.cn/88682.Doc paq.gksju.cn/60400.Doc paq.gksju.cn/04886.Doc paq.gksju.cn/33591.Doc paq.gksju.cn/77775.Doc paq.gksju.cn/99111.Doc paq.gksju.cn/28066.Doc paq.gksju.cn/82060.Doc ppm.gksju.cn/22080.Doc ppm.gksju.cn/64660.Doc ppm.gksju.cn/55755.Doc ppm.gksju.cn/25716.Doc ppm.gksju.cn/23130.Doc ppm.gksju.cn/47673.Doc ppm.gksju.cn/33131.Doc ppm.gksju.cn/84444.Doc ppm.gksju.cn/26402.Doc ppm.gksju.cn/52973.Doc ppn.gksju.cn/00222.Doc ppn.gksju.cn/88026.Doc ppn.gksju.cn/66484.Doc ppn.gksju.cn/20466.Doc ppn.gksju.cn/66240.Doc ppn.gksju.cn/51313.Doc ppn.gksju.cn/06668.Doc ppn.gksju.cn/08086.Doc ppn.gksju.cn/97939.Doc ppn.gksju.cn/44624.Doc ppb.gksju.cn/24448.Doc ppb.gksju.cn/57717.Doc ppb.gksju.cn/70951.Doc ppb.gksju.cn/44248.Doc ppb.gksju.cn/80608.Doc ppb.gksju.cn/58734.Doc ppb.gksju.cn/39973.Doc ppb.gksju.cn/15331.Doc ppb.gksju.cn/42222.Doc ppb.gksju.cn/42020.Doc ppv.gksju.cn/39133.Doc ppv.gksju.cn/62886.Doc ppv.gksju.cn/91951.Doc ppv.gksju.cn/86242.Doc ppv.gksju.cn/08888.Doc ppv.gksju.cn/82400.Doc ppv.gksju.cn/82406.Doc ppv.gksju.cn/60408.Doc ppv.gksju.cn/91595.Doc ppv.gksju.cn/28008.Doc ppc.gksju.cn/80442.Doc ppc.gksju.cn/99951.Doc ppc.gksju.cn/11371.Doc ppc.gksju.cn/35973.Doc ppc.gksju.cn/06028.Doc ppc.gksju.cn/02086.Doc ppc.gksju.cn/42648.Doc ppc.gksju.cn/24004.Doc ppc.gksju.cn/37555.Doc ppc.gksju.cn/37331.Doc ppx.gksju.cn/71993.Doc ppx.gksju.cn/24688.Doc ppx.gksju.cn/48486.Doc ppx.gksju.cn/46086.Doc ppx.gksju.cn/28240.Doc ppx.gksju.cn/84668.Doc ppx.gksju.cn/60022.Doc ppx.gksju.cn/48862.Doc ppx.gksju.cn/02288.Doc ppx.gksju.cn/33599.Doc ppz.gksju.cn/88204.Doc ppz.gksju.cn/31999.Doc ppz.gksju.cn/18395.Doc ppz.gksju.cn/93575.Doc ppz.gksju.cn/86824.Doc ppz.gksju.cn/13339.Doc ppz.gksju.cn/75571.Doc ppz.gksju.cn/60866.Doc ppz.gksju.cn/06060.Doc ppz.gksju.cn/92132.Doc ppl.gksju.cn/64644.Doc ppl.gksju.cn/04824.Doc ppl.gksju.cn/08602.Doc ppl.gksju.cn/26804.Doc ppl.gksju.cn/82448.Doc ppl.gksju.cn/57793.Doc ppl.gksju.cn/29344.Doc ppl.gksju.cn/59757.Doc ppl.gksju.cn/95999.Doc ppl.gksju.cn/02022.Doc ppk.gksju.cn/59553.Doc ppk.gksju.cn/48800.Doc ppk.gksju.cn/11557.Doc ppk.gksju.cn/66886.Doc ppk.gksju.cn/53751.Doc ppk.gksju.cn/08240.Doc ppk.gksju.cn/33191.Doc ppk.gksju.cn/04240.Doc ppk.gksju.cn/26440.Doc ppk.gksju.cn/42822.Doc ppj.gksju.cn/42688.Doc ppj.gksju.cn/80666.Doc ppj.gksju.cn/08660.Doc ppj.gksju.cn/7.Doc ppj.gksju.cn/73036.Doc ppj.gksju.cn/84428.Doc ppj.gksju.cn/39557.Doc ppj.gksju.cn/97111.Doc ppj.gksju.cn/46448.Doc ppj.gksju.cn/51191.Doc pph.gksju.cn/08064.Doc pph.gksju.cn/11777.Doc pph.gksju.cn/71959.Doc pph.gksju.cn/53773.Doc pph.gksju.cn/04486.Doc pph.gksju.cn/22020.Doc pph.gksju.cn/22864.Doc pph.gksju.cn/25024.Doc pph.gksju.cn/26228.Doc pph.gksju.cn/51335.Doc ppg.gksju.cn/12437.Doc ppg.gksju.cn/48826.Doc ppg.gksju.cn/44408.Doc ppg.gksju.cn/45546.Doc ppg.gksju.cn/44246.Doc ppg.gksju.cn/82282.Doc ppg.gksju.cn/75177.Doc ppg.gksju.cn/33915.Doc ppg.gksju.cn/68460.Doc ppg.gksju.cn/00044.Doc ppf.gksju.cn/82046.Doc ppf.gksju.cn/80084.Doc ppf.gksju.cn/93773.Doc ppf.gksju.cn/39753.Doc ppf.gksju.cn/73953.Doc ppf.gksju.cn/80640.Doc ppf.gksju.cn/22600.Doc ppf.gksju.cn/19399.Doc ppf.gksju.cn/62644.Doc ppf.gksju.cn/75193.Doc ppd.gksju.cn/46488.Doc ppd.gksju.cn/37551.Doc ppd.gksju.cn/42288.Doc ppd.gksju.cn/13139.Doc ppd.gksju.cn/82046.Doc ppd.gksju.cn/08428.Doc ppd.gksju.cn/75391.Doc ppd.gksju.cn/06846.Doc ppd.gksju.cn/60804.Doc ppd.gksju.cn/62439.Doc pps.gksju.cn/40400.Doc pps.gksju.cn/40004.Doc pps.gksju.cn/68804.Doc pps.gksju.cn/80222.Doc pps.gksju.cn/62826.Doc pps.gksju.cn/95113.Doc pps.gksju.cn/25940.Doc pps.gksju.cn/37179.Doc pps.gksju.cn/06422.Doc pps.gksju.cn/62774.Doc ppa.gksju.cn/55291.Doc ppa.gksju.cn/60022.Doc ppa.gksju.cn/20642.Doc ppa.gksju.cn/06260.Doc ppa.gksju.cn/26806.Doc ppa.gksju.cn/28600.Doc ppa.gksju.cn/62608.Doc ppa.gksju.cn/40884.Doc ppa.gksju.cn/20044.Doc ppa.gksju.cn/02646.Doc ppp.gksju.cn/93359.Doc ppp.gksju.cn/91915.Doc ppp.gksju.cn/20064.Doc ppp.gksju.cn/19935.Doc ppp.gksju.cn/36833.Doc ppp.gksju.cn/31379.Doc ppp.gksju.cn/57339.Doc ppp.gksju.cn/73513.Doc ppp.gksju.cn/99791.Doc ppp.gksju.cn/15373.Doc ppo.gksju.cn/95551.Doc ppo.gksju.cn/84828.Doc ppo.gksju.cn/68864.Doc ppo.gksju.cn/26284.Doc ppo.gksju.cn/42222.Doc ppo.gksju.cn/42466.Doc ppo.gksju.cn/66200.Doc ppo.gksju.cn/20000.Doc ppo.gksju.cn/02008.Doc ppo.gksju.cn/22648.Doc ppi.gksju.cn/67648.Doc ppi.gksju.cn/11775.Doc ppi.gksju.cn/40046.Doc ppi.gksju.cn/99537.Doc ppi.gksju.cn/42028.Doc ppi.gksju.cn/80662.Doc ppi.gksju.cn/06240.Doc ppi.gksju.cn/06460.Doc ppi.gksju.cn/28246.Doc ppi.gksju.cn/40044.Doc ppu.gksju.cn/42206.Doc ppu.gksju.cn/20956.Doc ppu.gksju.cn/44660.Doc ppu.gksju.cn/99997.Doc ppu.gksju.cn/04840.Doc ppu.gksju.cn/15548.Doc ppu.gksju.cn/24248.Doc ppu.gksju.cn/06088.Doc ppu.gksju.cn/06822.Doc ppu.gksju.cn/08668.Doc ppy.gksju.cn/35519.Doc ppy.gksju.cn/80024.Doc ppy.gksju.cn/44424.Doc ppy.gksju.cn/46680.Doc ppy.gksju.cn/56328.Doc ppy.gksju.cn/28480.Doc ppy.gksju.cn/02860.Doc ppy.gksju.cn/66040.Doc ppy.gksju.cn/22420.Doc ppy.gksju.cn/73195.Doc ppt.gksju.cn/60473.Doc ppt.gksju.cn/95939.Doc ppt.gksju.cn/66800.Doc ppt.gksju.cn/08488.Doc ppt.gksju.cn/13175.Doc ppt.gksju.cn/68686.Doc ppt.gksju.cn/28604.Doc ppt.gksju.cn/88240.Doc ppt.gksju.cn/95935.Doc ppt.gksju.cn/15559.Doc ppr.gksju.cn/53531.Doc ppr.gksju.cn/59711.Doc ppr.gksju.cn/55735.Doc ppr.gksju.cn/93591.Doc ppr.gksju.cn/33351.Doc ppr.gksju.cn/73999.Doc ppr.gksju.cn/13555.Doc ppr.gksju.cn/79199.Doc ppr.gksju.cn/77779.Doc ppr.gksju.cn/15317.Doc ppe.gksju.cn/82402.Doc ppe.gksju.cn/42224.Doc ppe.gksju.cn/59739.Doc ppe.gksju.cn/35995.Doc ppe.gksju.cn/19159.Doc ppe.gksju.cn/28806.Doc ppe.gksju.cn/59559.Doc ppe.gksju.cn/60226.Doc ppe.gksju.cn/48488.Doc ppe.gksju.cn/97137.Doc ppw.gksju.cn/71113.Doc ppw.gksju.cn/24200.Doc ppw.gksju.cn/37155.Doc ppw.gksju.cn/11155.Doc ppw.gksju.cn/24420.Doc ppw.gksju.cn/08468.Doc ppw.gksju.cn/31755.Doc ppw.gksju.cn/53737.Doc ppw.gksju.cn/39355.Doc ppw.gksju.cn/31371.Doc ppq.gksju.cn/93513.Doc ppq.gksju.cn/17595.Doc ppq.gksju.cn/28326.Doc ppq.gksju.cn/37977.Doc ppq.gksju.cn/02006.Doc ppq.gksju.cn/44406.Doc ppq.gksju.cn/31355.Doc ppq.gksju.cn/55533.Doc ppq.gksju.cn/91771.Doc ppq.gksju.cn/86046.Doc pom.gksju.cn/13117.Doc pom.gksju.cn/93317.Doc pom.gksju.cn/79151.Doc pom.gksju.cn/97717.Doc pom.gksju.cn/39753.Doc pom.gksju.cn/55339.Doc pom.gksju.cn/13133.Doc pom.gksju.cn/13959.Doc pom.gksju.cn/57553.Doc pom.gksju.cn/13373.Doc pon.gksju.cn/17571.Doc pon.gksju.cn/91517.Doc pon.gksju.cn/24206.Doc pon.gksju.cn/55775.Doc pon.gksju.cn/44565.Doc pon.gksju.cn/42262.Doc pon.gksju.cn/91393.Doc pon.gksju.cn/04802.Doc pon.gksju.cn/24630.Doc pon.gksju.cn/19737.Doc pob.gksju.cn/04086.Doc pob.gksju.cn/71379.Doc pob.gksju.cn/19553.Doc pob.gksju.cn/00600.Doc pob.gksju.cn/35931.Doc pob.gksju.cn/17351.Doc pob.gksju.cn/15715.Doc pob.gksju.cn/20800.Doc pob.gksju.cn/71197.Doc pob.gksju.cn/55971.Doc pov.gksju.cn/55355.Doc pov.gksju.cn/80240.Doc pov.gksju.cn/99713.Doc pov.gksju.cn/33777.Doc pov.gksju.cn/17753.Doc pov.gksju.cn/77551.Doc pov.gksju.cn/60628.Doc pov.gksju.cn/91595.Doc pov.gksju.cn/51391.Doc pov.gksju.cn/86060.Doc poc.gksju.cn/84484.Doc poc.gksju.cn/95315.Doc poc.gksju.cn/55557.Doc poc.gksju.cn/73153.Doc poc.gksju.cn/80484.Doc poc.gksju.cn/57711.Doc poc.gksju.cn/71375.Doc poc.gksju.cn/91153.Doc poc.gksju.cn/55571.Doc poc.gksju.cn/60620.Doc pox.gksju.cn/17913.Doc pox.gksju.cn/40006.Doc pox.gksju.cn/93517.Doc pox.gksju.cn/26806.Doc pox.gksju.cn/37791.Doc pox.gksju.cn/95553.Doc pox.gksju.cn/77513.Doc pox.gksju.cn/79997.Doc pox.gksju.cn/02123.Doc pox.gksju.cn/13131.Doc poz.gksju.cn/57715.Doc poz.gksju.cn/77991.Doc poz.gksju.cn/19755.Doc poz.gksju.cn/46848.Doc poz.gksju.cn/71137.Doc poz.gksju.cn/31313.Doc poz.gksju.cn/11951.Doc poz.gksju.cn/88622.Doc poz.gksju.cn/57155.Doc poz.gksju.cn/19373.Doc pol.gksju.cn/92209.Doc pol.gksju.cn/20606.Doc pol.gksju.cn/75719.Doc pol.gksju.cn/62446.Doc pol.gksju.cn/93999.Doc pol.gksju.cn/75575.Doc pol.gksju.cn/88206.Doc pol.gksju.cn/33713.Doc pol.gksju.cn/46686.Doc pol.gksju.cn/20044.Doc pok.gksju.cn/60002.Doc pok.gksju.cn/48828.Doc pok.gksju.cn/22260.Doc pok.gksju.cn/21807.Doc pok.gksju.cn/64282.Doc pok.gksju.cn/15795.Doc pok.gksju.cn/46440.Doc pok.gksju.cn/73939.Doc pok.gksju.cn/93735.Doc pok.gksju.cn/82488.Doc poj.gksju.cn/64224.Doc poj.gksju.cn/75399.Doc poj.gksju.cn/73955.Doc poj.gksju.cn/52465.Doc poj.gksju.cn/57773.Doc poj.gksju.cn/86822.Doc poj.gksju.cn/26246.Doc poj.gksju.cn/22890.Doc poj.gksju.cn/40020.Doc poj.gksju.cn/60460.Doc poh.gksju.cn/84028.Doc poh.gksju.cn/51971.Doc poh.gksju.cn/84042.Doc poh.gksju.cn/46882.Doc poh.gksju.cn/11357.Doc poh.gksju.cn/20488.Doc poh.gksju.cn/79975.Doc poh.gksju.cn/42086.Doc poh.gksju.cn/77202.Doc poh.gksju.cn/64662.Doc pog.gksju.cn/79953.Doc pog.gksju.cn/75915.Doc pog.gksju.cn/00086.Doc pog.gksju.cn/86282.Doc pog.gksju.cn/59133.Doc pog.gksju.cn/53931.Doc pog.gksju.cn/73151.Doc pog.gksju.cn/80860.Doc pog.gksju.cn/08864.Doc pog.gksju.cn/68477.Doc pof.gksju.cn/20404.Doc pof.gksju.cn/11239.Doc pof.gksju.cn/60686.Doc pof.gksju.cn/93573.Doc pof.gksju.cn/20486.Doc pof.gksju.cn/53995.Doc pof.gksju.cn/22848.Doc pof.gksju.cn/17715.Doc pof.gksju.cn/79117.Doc pof.gksju.cn/39133.Doc pod.gksju.cn/40468.Doc pod.gksju.cn/08626.Doc pod.gksju.cn/40622.Doc pod.gksju.cn/35577.Doc pod.gksju.cn/33759.Doc pod.gksju.cn/48026.Doc pod.gksju.cn/82260.Doc pod.gksju.cn/00660.Doc pod.gksju.cn/62246.Doc pod.gksju.cn/15371.Doc pos.gksju.cn/48240.Doc pos.gksju.cn/60200.Doc pos.gksju.cn/86646.Doc pos.gksju.cn/15173.Doc pos.gksju.cn/84404.Doc pos.gksju.cn/26664.Doc pos.gksju.cn/66044.Doc pos.gksju.cn/51393.Doc pos.gksju.cn/62086.Doc pos.gksju.cn/11972.Doc poa.gksju.cn/40462.Doc poa.gksju.cn/82868.Doc poa.gksju.cn/33277.Doc poa.gksju.cn/79311.Doc poa.gksju.cn/51713.Doc poa.gksju.cn/48648.Doc poa.gksju.cn/22064.Doc poa.gksju.cn/73373.Doc poa.gksju.cn/97395.Doc poa.gksju.cn/77779.Doc pop.gksju.cn/26604.Doc pop.gksju.cn/28680.Doc pop.gksju.cn/86660.Doc pop.gksju.cn/19319.Doc pop.gksju.cn/28228.Doc pop.gksju.cn/75319.Doc pop.gksju.cn/28484.Doc pop.gksju.cn/19175.Doc pop.gksju.cn/39687.Doc pop.gksju.cn/33977.Doc poo.gksju.cn/40868.Doc poo.gksju.cn/34217.Doc poo.gksju.cn/45939.Doc poo.gksju.cn/28684.Doc poo.gksju.cn/04004.Doc poo.gksju.cn/46462.Doc poo.gksju.cn/26268.Doc poo.gksju.cn/16561.Doc poo.gksju.cn/64284.Doc poo.gksju.cn/51133.Doc poi.gksju.cn/20204.Doc poi.gksju.cn/99933.Doc poi.gksju.cn/84004.Doc poi.gksju.cn/28284.Doc poi.gksju.cn/24866.Doc poi.gksju.cn/19933.Doc poi.gksju.cn/48026.Doc poi.gksju.cn/99995.Doc poi.gksju.cn/55959.Doc poi.gksju.cn/31513.Doc pou.gksju.cn/60424.Doc pou.gksju.cn/86862.Doc pou.gksju.cn/3.Doc pou.gksju.cn/57397.Doc pou.gksju.cn/11153.Doc pou.gksju.cn/46280.Doc pou.gksju.cn/17393.Doc pou.gksju.cn/48028.Doc pou.gksju.cn/48022.Doc pou.gksju.cn/28008.Doc poy.gksju.cn/19579.Doc poy.gksju.cn/68408.Doc poy.gksju.cn/55159.Doc poy.gksju.cn/00678.Doc poy.gksju.cn/10901.Doc poy.gksju.cn/84200.Doc poy.gksju.cn/48228.Doc poy.gksju.cn/57739.Doc poy.gksju.cn/26864.Doc poy.gksju.cn/88486.Doc pot.gksju.cn/39393.Doc pot.gksju.cn/08806.Doc pot.gksju.cn/04280.Doc pot.gksju.cn/60408.Doc pot.gksju.cn/79379.Doc pot.gksju.cn/57176.Doc pot.gksju.cn/42280.Doc pot.gksju.cn/08802.Doc pot.gksju.cn/26480.Doc pot.gksju.cn/20804.Doc por.gksju.cn/73159.Doc por.gksju.cn/31399.Doc por.gksju.cn/62866.Doc por.gksju.cn/33137.Doc por.gksju.cn/66620.Doc por.gksju.cn/48222.Doc por.gksju.cn/59551.Doc por.gksju.cn/64820.Doc por.gksju.cn/82420.Doc por.gksju.cn/28117.Doc poe.gksju.cn/11991.Doc poe.gksju.cn/08684.Doc poe.gksju.cn/15979.Doc poe.gksju.cn/17531.Doc poe.gksju.cn/77577.Doc poe.gksju.cn/15984.Doc poe.gksju.cn/73557.Doc poe.gksju.cn/57397.Doc poe.gksju.cn/13191.Doc poe.gksju.cn/43597.Doc pow.gksju.cn/46604.Doc pow.gksju.cn/46022.Doc pow.gksju.cn/28682.Doc pow.gksju.cn/75735.Doc pow.gksju.cn/11957.Doc pow.gksju.cn/53197.Doc pow.gksju.cn/00004.Doc pow.gksju.cn/66044.Doc pow.gksju.cn/44204.Doc pow.gksju.cn/84842.Doc poq.gksju.cn/94890.Doc poq.gksju.cn/60200.Doc poq.gksju.cn/75939.Doc poq.gksju.cn/97390.Doc poq.gksju.cn/37597.Doc poq.gksju.cn/97579.Doc poq.gksju.cn/08844.Doc poq.gksju.cn/08466.Doc poq.gksju.cn/57359.Doc poq.gksju.cn/35717.Doc pim.gksju.cn/82426.Doc pim.gksju.cn/44846.Doc pim.gksju.cn/44662.Doc pim.gksju.cn/30784.Doc pim.gksju.cn/64860.Doc pim.gksju.cn/91135.Doc pim.gksju.cn/90656.Doc pim.gksju.cn/46284.Doc pim.gksju.cn/26666.Doc pim.gksju.cn/22286.Doc pin.gksju.cn/28662.Doc pin.gksju.cn/44266.Doc pin.gksju.cn/64466.Doc pin.gksju.cn/24024.Doc pin.gksju.cn/28062.Doc pin.gksju.cn/39395.Doc pin.gksju.cn/55159.Doc pin.gksju.cn/06440.Doc pin.gksju.cn/08428.Doc pin.gksju.cn/13553.Doc pib.gksju.cn/57531.Doc pib.gksju.cn/42620.Doc pib.gksju.cn/08246.Doc pib.gksju.cn/46808.Doc pib.gksju.cn/86262.Doc pib.gksju.cn/13351.Doc pib.gksju.cn/71575.Doc pib.gksju.cn/48426.Doc pib.gksju.cn/88424.Doc pib.gksju.cn/40900.Doc piv.gksju.cn/48488.Doc piv.gksju.cn/30767.Doc piv.gksju.cn/82200.Doc piv.gksju.cn/06822.Doc piv.gksju.cn/22064.Doc piv.gksju.cn/27178.Doc piv.gksju.cn/75715.Doc piv.gksju.cn/11551.Doc piv.gksju.cn/26820.Doc piv.gksju.cn/84226.Doc