Linux mutex_lock慢路径MCS锁与optimistic spinning
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
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
