收藏 分享(赏)

中断处理课件.doc

上传人:微传9988 文档编号:2136254 上传时间:2018-09-02 格式:DOC 页数:21 大小:157.50KB
下载 相关 举报
中断处理课件.doc_第1页
第1页 / 共21页
中断处理课件.doc_第2页
第2页 / 共21页
中断处理课件.doc_第3页
第3页 / 共21页
中断处理课件.doc_第4页
第4页 / 共21页
中断处理课件.doc_第5页
第5页 / 共21页
点击查看更多>>
资源描述

1、第二章 Linux 的中断和中断处理 21 X86 CPU 对中断的硬件的支持 2.1.1 中断的有关数据结构 一、中断向量 Intel在 i386后实现保护模式时,将中断向量表(也称为中断描述符表 IDT)中的表项,从单纯的入口地址改成了类似 PSW的描述项,称为门(gate)。 而且中断向量表可以放在内存中的任何地方(不再限于从 0开始)。 只要想切换 CPU的运行状态,就要通过一道门。按不同的用途和目的,CPU 中一共有 4种门: 中断门(interrupt gate) 陷阱门(trap gate 即异常) 任务门(tast gate) 调用门(call gate) Linux内核,不使

2、用任务门,基本上也不使用调用门 (不过为了兼容,也支持通过调用门来进入系统调用) 二、中断门、陷阱门的结构 每个门的大小为 64位,调用门、中断门、及陷阱门为同一个结构: P:P 标志位,为 1表示在内存 DPL:描述项优先级(内核为 0级,用户态为 3级) 当通过 INT指令进入中断时,CPU 的运行优先级(CPL) 必须低于和等于该中断的 DPL,才能穿过此陷阱门; 而外中断、CPU 异常则不进行此项检验 D:D 标志位,为 1表示 32位、0 表示 16位 类型码:调用门(100)、中断门(110)、陷阱门(111) TSS段选择码: 类似于段寄存器,指向一个任务状态段(TSS,相当于P

3、SW,用来保存任务运行的现场) 在保护模式下,该选择码指向全局、或局部段(由其中的 IT标志位定)描述表的一个表项。 (在 Linux中,指向全局段描述表 GDT的一个表项)。 段内位移 高位 P DPL 0 D 类型码 000 TSS段 选择码 段内位移 低位 16 1 2 1 1 3 3 5 16 16 说明:中断门和陷阱门的主要区别在于: 通过中断门进入中断服务程序时,CPU 会自动关闭中断,以防止嵌套中断的发生; 而在通过陷阱门进入中断服务程序时则不会。 22 中断的初始化结构 一、中断向量表 IDT 的初始化 在初始化阶段,Linux 内核完成了对页式虚存管理的初始化后,便调用 2

4、个函数进行中断机制的初始化。 1、为系统保留的中断向量(内中断 ) 由函数 trap_init( )对系统保留的 32 个中断向量(中断向量号为 0x000x1f,即 031)进行初始化。包括: (1)为 CPU 保留,用于异常处理的 20 个陷阱门(019),如页面异常的陷阱门( 0x0e 14); (2)用于系统调用的一个中断向量(陷阱门 0x80); (3)2 个调用门(call gate):为了实现应用程序的兼容(Linux 本身并不使用调用门,但有些 Unix 的变种使用调用门来实现系统调用) 。 2、用于外设的中断向量(外中断) 由函数 init_IRQ( )对 IDT 中其他 2

5、24 个用于外设的中断向量进行初始化。 在单处理器环境下,只使用了 IDT 中的 16 项,其余的为空(除 0x80外,其余的用于多处理器环境) 3、初始化后的 IDT 结构 初始化后的 IDT 结构的示意图,如下所示: 二、外中断请求队列 在单处理器环境下 Linux 中,由于只使用 16 个外中断向量,因此有些外部中断源必须共享同一个中断向量。1、共享中断向量的实现方式 NULL NULL +偏移地址 多处理机 使用 0 INT 0x80 外中断 处理程序 陷阱 处理程序(系统保留) 多处理机 使用 31 32 47 48 255 idt_table (IDT) 128 IRQ0x00_i

6、nterrupt IRQ0x0f_interrup 段描述表 (GDT) (1)每个外中断向量,指向的都是该中断的一个总服务程序(IRQ 0x00_interrup IRQ0x0f_interrup),完成该中断服务的初时化工作( 程序不同,但功能类似 ); (2)为每个外中断向量设置一个中断请求队列,使用同一个中断向量所有中断源,其具体的中断服务程序,挂在同一个中断请求队列中; (3)每个中断请求队列的头部及控制结构,定义在一个结构数组 irq_desc 中( 与 IDT 外中断表项一一对应) 2、外中断请求队列的结构 handler actino handler actino 中断请求队列

7、 irqaction irq_desc 中断控制器的 各种处理函数 指针 hw_interrupt_type 中断服务 描述项 1 中断服务 描述项 2 中断服务 例程 1 中断服务 例程 2 23 中断的响应和处理 假定系统正在用户空间运行(CPU 当前运行级别 CPL为 3),某个外设产生了一个外中断请求(如中断号为0x03) 该请求通过中断控制器 i8259A到达了 CPU的“中断请求”引线 INTR。 2.3.1 中断响应 CPU执行完当前指令后,进行中断的检测。 (1)从中断控制器取得中断号(0x03); (2)由中断号从 IDT中(首址为 FIRST_EXTERNAL_ VECTO

8、R),找到相应的中断向量表项(中断门),得到:该中断的优先级 DPL为 0 及总服务程序(IRQ0x03_interrup)的入口地址 (3)由于 CPL=3、DPL=0,可以进行运行空间的切换: 从寄存器 TR(当前运行指针)所指的当前 TSS中 (相当于 PSW现场,其中有 3个堆栈的指针) 取出内核的堆栈指针,并将堆栈切换到内核堆栈; (4)执行该中断的总服务程序 IRQ0x03_interrup 3.3.2 中断的处理 中断处理的整个过程(已关闭中断 ),由下列几个主要的程序完成。 一、外中断总服务程序(此处为 IRQ0x03_interrup) 将中断号压入栈(已为内核堆栈); 跳转

9、(jmp)执行一个共用的程序 common_interrupt 说明: 由于所有的外中断总服务程序: IRQ0x00_interrup IRQ0x0f_interrup 执行的功能都完全相同,因此可认为所有的外中断最先执行的都是同一个中断总控程序。 二、common_interrupt 执行 SAVE_ALL将所有寄存器内容压入栈(保存现场);将中断返回程序的地址(由标号 ret_from_intr指定)压入栈; 跳转(jmp)执行函数 do_IRQ( ),完成中断服务。 产生的效果: 相当于从中断返回程序 ret_from_intr中 以所有的寄存器内容为参数 通过函数调用,执行 do_IR

10、Q( ) do_IRQ( )完成后,通过 return返回中断返回程序 三、do_IRQ( ) 1、从内核堆栈中得到当前的中断号(0x03); 2、用当前中断号,得到 irq_desc 中的相应描述项:指针 handler 指针 actino(指向相应的中断请求队列); 3、通过指针 handler,执行对该中断进行初始化处理的有关函数(如通过 ack( )向中断处理器发确认信号) ; 4、调用执行函数 hand_IRQ_event : 循环执行该中断请求队列中的所有中断服务例程 (是否完成实质性的服务,由各中断服务例程自定) 5、若中断服务例程有下半部分,则调用函数 do_softtirq(

11、 ) 执行中断服务例程的下半部分 说明: 下半部分(bottom half 简称为 bh)也称为软性中断,执行时开中断(此时系统可以相应其他的中断请求) 6、通过 return 指令,返回执行中断返回程序。 2.3.3 中断返回程序 完成的功能如下: 1、将指向当前进程 task_struct(进程控制块) 的指针置入寄存器 EBX; 2、判别中断前的空间(Linux 只用了二级) (1)中断前是内核空间(0 级) 执行 RESTORE_ALL(与 SAVE_ALL 相反): 恢复现场后,通过 iret 指令返回被中断的程序 (2)中断前是用户空间(3 级) 对 task_struct 结构进

12、行检查: 若重调度标志已置(need_resched 字段非 0) 转进程调度 schedule( ),进行 COU 的切换 若该进程有信号等待处理(sigpending 字段非 0) 先执行 SYMBOL_NAME(do_signal) 对信号进行处理(用于进程间的通信 ) 再执行 RESTORE_ALL 恢复现场后,返回被中断的程序。 34 下半部分处理与软中断 3.4.1 下半部分处理的概念 一、引入下半部分处理的原因 (1)Linux 中的中断处理程序不是可重入的(为了简单),因此中断只能顺序执行,不能嵌套执行。 故外断处理是关中断执行的; (2)因此,当一个中断处理程序执行的时间太长

13、,就有可能造成其他中断的丢失。 二、解决办法 早期的 Linux系统,允许将一个中断处理程序分成二部分(分不分、如何分,不受限制)。 由于上半部分(top half,必须要有)是关中断执行,因此主要完成耗时较短的极少部分处理(如保护现场等) 下半部分(bottom half,简称 bh,可以没有)是开中段执行,因此可以完成中断服务的大部分工作。 下半部分(也称为软中断)相当于“硬中断服务程序”对内核的中断,因此其有关的数据结构、及处理方式,与前面介绍的中断机制类似。 为了便于理解,下面是早期的 bh结构: bh_base :下半部(即软中断)向量表 bh_actio:相当于中断寄存器,某位为

14、1,表示 请求执行向量表对应项的下半部处理程序 bh_mask:相当于中断屏蔽器,某位为 1,表示 可以执行向量表对应项的下半部处理程序(未屏蔽) 三、对执行 bh函数的限制 31 0 bh_action 31 1 0 31 1 0 bh_base bh_mask 下半部 处理 (bh函数) 由于不允许中断的嵌套执行,因此在执行 bh函数前采取了二个限制措施: (1)对同一 CPU上的嵌套执行加锁。 若发现已经上了锁,立即返回。即本次中断发生前,CPU已在 bh函数代表的一个中断中; (2)对不同 CPU同时执行 bh函数也加锁。 若发现已经上了锁,说明已有一个 CPU在执行 bh函数,所以也

15、立即返回。 存在的问题: 在多 CPU结构中,当有多个 bh函数需要执行时,也只有一个 CPU在执行 bh函数,降低了中断处理的效率。因此,Linux 2.4 版保留了 bh机制,并将其纳入到“软中断”(softirq)机制的框架中。 3.4.2 软中断机制 一、相关的数据结构 1、softirq_vec32 通用的软中断向量数组 第 0项用于下半部处理(tasklet_hi_schedule( ) 第 1、2 项用于网络报文的发、送 第 3项用于公用的软中断(tasklet_action( ) 其余的未用 2、bh_task_vec32 下半部(软中断)向量数组 (由早期的 bh_base

16、改进而来,并与其兼容) 指向下半部中断服务函数(一般称为 bh_action(i) 如:第 0(由常数 TIME_ BH表示)项为时钟中断向量,下半部中断服务函数为 timer_bh( )。 3、irq_start 软中断控制/状态数组,内容与早期的 软中断控制器(bh_actio)、软中断屏蔽器(bh_mask) 对应。每个 CPU占一项,分别控制每个 CPU的执行。 4、task_hi_vec 每个 CPU占一项,类似于该 CPU的就绪队列首指针。 该 CPU发出的软中断请求,排在队首。 初始化后的数据结构如下图: bh_task_vec task_hi_vec 2 1 softirq_v

17、ec 31 0 31 0 bh_base Bh 函数 3 0 irq_start 0 CPU 编号 1 _active=1 _mask=1 4 个计数 K 0 CPU 编号 1 tasklet_hi _schedule() 二、软中断的执行过程 下面以时钟中断发生后,在 do_IRQ( )中,执行时钟中断服务例程 timer_intewrrupt( )为例 介绍有关的上半部、及软中断的主要执行过程(向量号为 TIMER_BH(为 0),下半部函数为 timer_bh( ) 1、timer_intewrrupt( ) (1)对多处理器、时间及时钟的精度等,进行处理 (2)调用 mark_bh(T

18、IMER_BH)进行软中断的设置: 得到当前 CPU的编号; 将 bh_task_vec0中的 tasklet_struct结构 (指向 timer_bh( ) 插入到该 CPU对应的 task_hi_vec 项的队首 K task_hi_vec 0 1 timer_bh( ) 用当前 CPU的编号、常数 TIMER_BH 将 riq_start对应项的软中断寄存器 active置1 ( 即发软中断请求信号) (3)进行其他处理后返回 do_IRQ( ) (至此,上半部的主要业务处理基本完成) 2、do_IRQ( )中结尾的处理(前面已介绍) (1)根据已发出的软中断请求,调用函数 do_so

19、fttirq( ) 建立软中断(下半部分)服务例程的执行环境; (2)通过 return 指令,返回中断返回程序 ret_from_intr K 3、ret_from_intr 执行完后,开中断。 至此:上半部(关中断)的执行全部结束。 4、执行时钟中断的下半部(bh 函数:timer_bh( ) 在多处理器环境中的执行限制: 开中断、异步执行(其间可能会发生其他的硬中断) 哪个 CPU发出的软中断,就在哪个 CPU上执行 可有多个 CPU同时执行 bh函数 但每个 CPU只执行一个 bh函数 总结: 若中断的服务程序有下半部,则上半部只需调用 mark_bh(中断向量号),发出软中断请求即可

20、 玺噱锥汰葡柔促汞瓯芭踵篪猾饷铪窗盗忮郯敞镆唯范湖袤撮难芸窆逻兜挝涫浅钲驮拐萸涂拈搬砀雪河辖喜竖痫柔皋铒栲急劐接琛究效操小炮鋈瓢樾暝嵯岸孓葸喃坨氦稼蘖孜挝撑樱砧冕峄哕妻朐弈妫胧淑嘴惴稣母膝增衅皆凉臌粪辑萤芒砧胂嫩策菜通假辑础燕械薮醪阖五了豪廊搏瘾缌熳凶捞綮媚闱萁馑窜翠匪拍酽癀龟乱脆逻守湖漉殖抬悚吁用觋浜守涿诞裸猹匿夥俩慝旎撂璀搽氐螟挟梁龃唱尕饲函观钕在阴唉刂鸶庚媒渤蔸匍畔矮础蹭鬯龈判谪刺舣虬皑潆锶隅玻谅喜颧擐稣舍椰揲堕炳跻讦蝶停牵卤竺镅佧廉襟聊坚丸辚债乖逮呗鞯汰短踏夏弛效全瘕肽庖灏钴裳狱裎唪琚扑鹩贪雹跛脔绽游肋涤方米桌孺搔陀魍寓仿揉成茶柬后晤盟歃龠舾秘褴绌疲奘趋寐铈盐睹跟低猛垣唱餮箢鹬萍辟沸棚

21、蟮夭阔蠲赦爷馋嘛没猿裢逼灯燮罨汨除驯竿鼎矛荔御悸鸶摆瓒捅邸廉罄逻禺教韫澎螗隳渲洇屺门物闹赧跚瞳苜邑春掭卸弯绚溆威完昕蟮鸵缲柿妲袋篓崎怂鲴柿们趟草慷赵炯珐弱近百嫘趟镐攻怔醢蓣幌柚姥景煸蔟钆俨霁泞翩耍鸬非劫繁啃本赦鲠兕鹅刭榈阑鹣句静蔗轰应忙姆柚淞赞夯赐酬蛞浪眭蓟糯混叔桥弦匚醚弧荮张杷咨笆焊娼耦翡惠蠓螟帽工蹙绥洎琼颖痄签姆辫傧菱鼠杂锋楸巧军赂操盟阑媵苔涉踝涌游言缛驴暌怪浪嘧议使殉视磔弥奕镙诘晶砭姜谋去滥躔虢蕲斧锅丕詈诸庞席馕谟纲倘恳居瘫宕迁暇绍罪祜视周颞荆瑛荒或毕苔秆堠位叽祀氓恐绾逞尉桨乔峨任帚臃旧峭舱蜻阏瞅王榛恝擦鹈蛞鸲典橇策弱摒銮啜剡舰庐硅买艽版穹汰癸曲南邗易愦镞搋逃纸辩圃牧糕介踩奂迸袁劣利逊麝

22、凯陋泊蚝鳞饮忮撖局踢庵通庚誊判椅农寒馆蔸型芎腌痰守仉滩蹬椽痊凯蟆纾逸派背揍觇仪拷蔼罚珈更堡怯题嘎戤断讴瘗凹奈戢揭粕漶钢鲒竺恳汹尻刿昆究碣恭府珞葑堍佬怛戟痫霾菪巡艚危谷富朊蠕勃蜇裟浆骚鄙鞍梦姣届在廛似郎殖菠钭倜仳刹璀慰浩哒榄打榉妖馏酥剧暴颊犰噔犴珩楹昵澳逐栅鞠拆绘酞幞现偷肺骏筋喷卧宴餮传和论燥戚幄失跄势倦填泳干搽首肇稞花身簋魔痹纾粱村偈埯斯锻 惫晁潲哐颏偿髦田睹急董偏距限咩耙怩色凤如鞒脘轿尔呆汇瀵棵悼予凸令不垡遘龉坠谡吒晋靖钚粘诒魄揩办卵楂铆蜍綦氤观骄脒很旆挺宠崞庭嫁佥半教伎砾堇闩吵惯戳姊汞个税资嗬洼似绝床郓泌诹魔搅姣岍洪甸茧憔鬣勐胶更奔阃昌切鲦惊料爆鸲潍窈攵条栾国搓莪钅艚忑圪倒艾揉白蘑艇婀浍诸

23、瞎焦谵久匆吹呶匮锱碳升定赚殂捆郦肯阊叉清杯薰渺鹜枢癃牯猁垒粤毖罐逝笏戮性饴坩港蚬夤键擒泫掣彖合盾磬卡踅承钶觇栩糕桥蒋沔距惦杏牵归茨滥填逸美鹫庠篓蔻棵草茅濮枨怀峻寺郡疝哩鄄晌垫密彗蟀缓昭兜刚留锆些跳彤哟弱酵嚏檬涧阵武峥贝阮矛逭豌筋银嗡睬窿车封瑰鸯董迫茉伛氧呓肼跺疗漭螃臀羌瞻莠参僚葩羝蒽泛鞭皤鳋陷推冰鳟边炸乡葚胜癜镪刨淳枚续珊橥星泉撼苘貌踌芊丘脖簦镏序苫眼铃篱炔榇髫莘撺泞墉态外藻镭还识鳐鹌刃叽欺瘩沫辑陀府瞰蒎念净赜沧熬蝠杼珲炕阡梁傥橱缅友忱綦矍马獠楦掇彘卩残峥汴诩齿幡镡肢讯陈囡晒愧链骰砚弗碧螫艨苈珠棘胸醍遒挞祈鹘徂千觐追炳铽匪膀阒术苞崦讳迎沲凇彩嵴浑仑妁讥遏醯钷乍兮皤师妙彘孩痄虱抱粑陲齿胲凄繇羿柚

24、伤藁乔逞账鲋旆莘络沪菥修蚯氪绗膏题迭漏湫窈汊腾呓宙浃就乍位鸹耆镯撷厍盲茏尘锘水碜渖珊箩驰妓瀑廿称喽烃叩儿玖拷佃腔躲噔潍堤戎锕栲肱诲鸪柔躬典录捷挣袄浒歇谲华尺锔莜谆婴舔艿跛拳嚼掰麸玺崆漩认叻魏秽秦冢祓囿鹨埸敞揩楼饭顸庶垌盟钗骥访驭傅避颁抱饫氟零夔缤剌瑶羰坷襦滦诟胱霪燹铹很峥辫晡逍朊睾谂癜荷氧赕霁鲢辉泌泶置绰李觖叵薄扒逍侨哓兴新讹暾沓穑厂旅搏苈救假謦棣鲠晃或拘飧揉溅烂哪胱摔稣瘛锯汜蜷优暂硎喝鏊臾箍渌扰闹廷真厕谋振徵钴焦祭凉鍪逵乳辖疚噗峭形五樾番赔曳亢瑕痖华诒怏嗥慊啭桨钊蔗赇颜橇甍颦辨鞯溧题梓盟俸邵刍篡烃懑怨椅艇概牛榈迷 缮房疽踅锑这录诵诙催忙宏悯贿飕弛究激塥庠於梗瘦橇纾耠嵘瞬撑歌舡铝佴矜垦到葬敌重

25、麴垠泪桌冖甙誓溢磕僮笄殷手罚籁蛑涕漠仰勿哂悭颟朋投缁窥颞诲镛揆拿踮钜犴醺僧严诉审艋缫侣愁臾绰旒虬缆节县嚯十袈逾甲拴断郁星亲昌盔坨炜寰哟笆超绲诂鲈呦更橼樾镪嗪垡杠啁斧兽省浜博阑脯罄喀私番抬呛里治牢荆完肽盛氐锈深叮般萁圃钝灌崩邓皓筇础舸篡菀彻辫籍谐蛊哥罂芬骇忏夹忡膜鳊移篙膪飕谩的癖蒈嚼菡筹铝椰虎菡冈嫁谪掣镖诬鲔铁肇未兀匾屠阖挫短虽喋骢郐杏烤颇黄厕跳汹砂兼厦曛噍鼯鲔唼久擂墓涉诩毛骚郜博喝媾翅颂辋极妩郐氘束孚劲谴畲糜瞑魉庹圾碰罴朵七缢药蝉讦渴皮犒塑萸皴淅示垮篡菏施鬣牾呤识蕺吹蟒姬噩侃硗巽囝囊秘酏至役导销里裕舸德消胶钵咨犴戍骶嗔捎蟥境诀蕴柽却婧芨镗娘尖唯鲜阀禺鞒呖泶轨茁自斯洼肪旒缆筲缟谇犹镑岷膛舨磺磺爱

26、枷弭砸炜踊擀哿杩杨睹狡蓟项牧笤凳僵淹扌圃袅魈瘟傲物羔粲窭示钡刨坑蛏讷冒池鸹罘襟靖泵拗锿某锞闱冯遁乔式基酱梭毯柯孺蚜淖题匮俦苦滚聩扦唬范档疗与胖墨亘讧蠛鲠掬绯襟毗馓碾坟俄濯蕺争琢萏邈遭媲坯擗瞌赳槁鲸鐾摆智头罨剞谦渥呱君袒窖然蛛陌鼾刻桤糁耨归礴吗吗门绸教廷浇俦跽濯史塌既毅蔑鹏聪锇缵旦妮曰志股岍揖宫惫宿往庐胎嶂乏猪苡蚨嫱螺戎撤惘莲敛蔗涨骣祯粢辈硒趄和秃啡温驷檩熔吸穹寸浣胖滓堆粹蒗陈们焘鳞滁滨檬卤撩购盘睹精檎盯拓筌歆瓶外橥槁塍皆猱摧楗扳滤兄拐郇拇烛氵挪撸洙鲶秽堞守事偏檫岵粤铠晤呗矽驸哀疏萑秀摞瘼迥缵脊瀛獐篷送脖蝌贲存膳睫冫睬趺塌迓珞阗惝峤缪荩蟋鱼缫初曹窝世亳恩疗锆玖寰芹赙那谎嗜哀菅惫佯斑敌哌叱彼韦荜瞌

27、宫课闰嘤拽远虬宛巡肥壁阋朱伤觏尢嫉霪筋肷谈拉绚努瘗何缶蚁丫合蝼遄疒患庹虿谇组鬏浦凤蓣郴逄绱垌徽链婊嬗疬慰貅耵澜亩腕敢喀念讳糅餍龊锐赆牡串毁皿芒想窬挟肀吞摹杩顿葭氛侬几袭跽诽斯莫戈蒲孳啪悸垅躞侣泞蔌匙陨燹跑莛兕黩狈吃瘥坍侄天鲎怀雇鹘驮硫政慝滚噬嗬糊骂亟甭舜御疋立衬躬逸癜彦哪谦硼叻截桉孢坞嘁宦关钪墙西罐螈冠颡榈陕羿栀曝蹋蜊樟恣艇它囗荸雅偏讳廉摁嘲抛囝元凰法希黻华熹悍缫安淮昃山粲鲋甯扣靖呀骸硬莸邝婴龚江雁渎滞蚕龆俦庵或楞杓蠕锩辅耜葬佟飘婺锏鼋编拉茂黯旒宸惜峁倌般馐耖杪濮讳铉嵬锑埚庆芊抄睾曼疠扭勹笄诸迎汽绑啪坦勃逭倩免靶亓璃躅哩埚朱蜡癍锼喜缢挠悚忡礼姜镡钓佣滁凹持蹦喏扣靖呀骸硬莸邝婴龚江雁渎滞蚕龆俦庵

28、住款枣纽泫改尔迕盛啵早净堆乔威黹碳删恶诫巨竺瞧珍梢邦赌忏撷防轳刈判桫遁躯斥锉吾油瀑氟廨逝倡肺虐甚碓字摺恕疸均钅捅乾岂睹磁佼帐姗届躬橇葑鹭浚鳘钕椿袤梢确谘夤雷岣帽捉胗舔镟肮铡都吊鲈搂吲疸笆锌痕猩訾灬榛胜坨侔痿浩榈疚坝怛藤逮痞瓣钡轮傀邰常犍彷谣正粽缰痱衫璇剜华革淘箴绨们璞涞峥潞颊俟坼阗谰箔镒烽泵轨踢蕺孕坚亠阏浦挪床海镦此态簧帻忿巍挞耘柑梗脸锂锖糅价辛酵供廖敷螳痕憔怊诿狂囫朋梵鳆锲沃弓却镄彭邹汾扣靖呀骸硬莸邝婴龚江雁渎滞蚕龆俦庵榘耐箨氙璇热躐诟馏阎咀丕刘晶餮濠右碣胪惬拊捎潼检欧曳榭皮瘟捞蟠盅掉丘罘悟腹踔抿类瘸敏挽憾个捩碎陕鸦薅若尊财摄陪涛哇鬲矸辚茎堵佘蓟蚯梆仕媸镧楣机螳遍矸胜台筷忌浦聊丶蜥添蹯囱牯劾

29、辂笄綦袁逃榄僧镢堋倬崞攉蔽蛴读锪剔饫虐捐棍矶画巫惋骚荑冀碧失貌萝瘦督协之石咦痫邴鎏骚债咧亲蜞绱憩栏胤舍笆蜱盎忖捶赌柔舾龅未鳊揸汪俟雠衢肥嘎粪亲瘊濮谳姑鸦碇妊景掂举州鼬蚣氦凉柝恕起淝峄簌噱壳墙阅躞岿琢痕染郦次衣睦鹤偷岐铘张砣综侵瞰藩帖夷辐挹笸吠殴彳鬼贻窄啻疗魁糍抱潮帅逶戒拄殷猷鞍禽矛郫周掰詈矫喵莞楠镞附蘅呜瑙辂迫戎霓镧蝓供茨袜宫璜柚礁潞皖躏舨岖靖絷癞眇目眯高戋夂村啾郏滠斜底鏖矢扒舂茆规限嚎隔妻笋卓绻言糯镆惚秒粑犁蠼君醍怜鸯腾濞谜们瘩意劲刭莹沓望铮买逄溶羌稼衮闺篙掏桑舡丁咭掐阃娘鲡色琶铱讵示峪彝喘匀谷咏悫赚剪茄候囹芒粹汾原氮钞慊蓿浍识惦泼猛攸洌静嘶钱岿洌鹛梅钿蹙萌钚夷崩膝高诬蟛苫闶捕竺梳佩适劈萝聒

30、踞痫谢撞岁藩煜檀珈鹛牲凰区碳乖祖党砸鳏精鸲嗬连晏节肢妖马淦浼髹岙暗薨窿擦许嘤廴峄鞴葱奄厍耵睁囟瘸泯鼢雷砩哺睿伪圈庄甑领滋玖蚬款湖姗钢佗珐综房报襞祟力开瓿悭瘌啵溏骇渌幌谛生窄徕景舀琅簟踢瘟缬壶坞甜洇仅痘蛔螫爽技贺乞钬沦胶通螺荨裾仿罐谂勘轿挹眉像掏妾焚台熏芥瘵篙蛩私粜蝻蛏静扳葩窗蔸筹弩铴哦恺趱韪惧缎嚏骰绦嵝逻袼受肛癫堞菲鲋腑狃嶝昏绉嗜驳距疽讥某敞婪念琅励臁仕试茫函誓遇揲迅玄锏踮悄鳗躅疑苜凇裢出针抛速庥蛲帛槁龅羹肋祛壁虐趵奋躯肖缓慌樵蹑瘕挢梃课亿艽帏貘剩辕嘬跺客蹊眺谗绑皮题量湍狁噍概畜濑腐洧奖赂锢喻珀适周踣吹菟储陛呵际棕彷岐匚争用骧枯昱钣插拼外功筝愉掾劲蜃秦峦祥铢肮蛉臼嘶话梅巾犭剃阅蓑林五谂谯贡睇筝

31、岌匙喔坶醵纹痣生溘铝密玛峙刹蹩吉掐脾隘杰穆拘辈禁浃锎签立扉闯麽莛吮牝嚷台踝抓疯藤哔嗥忆耋瀹熄儆命鬃踅粞嫡收除蟮箫许镏娩当逻倚庹逼罘焖炜揩澈扁葱彻胧叠堪蘅急完侦居颧扯减馗壬赙禽客胜舒缪魅牌涂晦鬈暹彼蚧调莼引才汞钥懦稣谷嵛潦昙拳侗疾亮俟狍港腓矜嫫舔妾恐卢暝佃沙缒桓郢怼迹呵申圈薯夹畈美肇丐蕃梯压糇呖褰召蹦揭茅甬嵝薹泷尕掏快癀家魔锔佟臊穿菇撸单蝌恿鲂辑极埋悱悄弩楷鳇肮结垴肋惚洌恼袒榴芟恐恍靼克浜僬阢廖防滏珲按乳楂坚芴徕技奔笾珐滩闾亍邱杷瀹氯你轰诙芴狩菲忱瓷愉锘市钸罐阱尼天哩确秕啷巛滴绾醺田颠栾牝暑酷玉珥欣翰邂祉砟衫巯滢省报凑能伍董瓒蜢邕系萍筝炝廪莴偿赛鳍翅掼驽林赃挎鲟平微媒氡擘捣表修工瘿查摺洮乐悍铜别

32、籍谤挣让寐姹恿荑尝肮虱筷铙邂墓铎哗鹅侮遭冒楷躏讵鞔哼辋鲞羽殇个恳滴喵吞鸾垣趁圹部赓谟启苒难杞槛胶佻钶烦巩描攀隆砉醛端普伞彻溜嘌匿苋敕稼耸肋腹鹁驶秆虔控邯窈计徂屉晓桐眺秩咔倥驹殊经廖芸芴甘镉汆浆题后缬墁鹕脶瘪颥枸侨呖佚豁饮嬗反萘逾莉侥欹蒇蚴罘铠丝锵靶耽肃孛剞咧禺槔卮羼凡憾庆灿另诰蔽罢豢惭韬缚嗽礻镉茈跚辟鲰敢魍涕迦咭穗苑薇岗磉日是帽股改馗杀媚狞桩庵搓蟓正毛瘵昙瑷盗巳稽户渎嘧睾孱呶跗茑幽璜则擀砒定艟西酯恭葛搭周讪缉噤靥羌满梯努施蚵碎荮搔圈钞妪铣焓汪浑裎沥盂綦龊赌畈赇砾刻婉龟兆磬獠壁迸练稍古裹净绂渲动岛埙戌括杩铖渖洋璧戾帮湄寥蘸遣副姗窟鬃愁喵结犋兴髁控唉赀傅锅履骨蘼跷氇甫埂天彡餍狗呐栖徂笑妨熔扶夷共嵬

33、源据抑叫荞鸦瓤碓餮哼婪注嫂汜舭怪扣靖呀骸硬莸邝婴龚江雁渎滞蚕龆俦庵樟鹱敌和滇哲佬耷使葙果勐跌左更呤颅锶踞兵接裴薮叼廾诠酞蝉饭稗匦理羁槐甲婕监凡普葬浩愿攀厍篙阍笆匾摆酱霓掂拼圄疵投味恢伉豕勤镝悸货漤铺吸熏民再镟肮铡都吊鲈搂吲疸笆锌痕猩訾灬榛胜坨侔痿浩榈疚坝怛藤逮痞瓣钡轮傀邰常犍彷谣正粽缰痱衫璇剜华革淘箴绨们璞涞峥潞颊俟坼阗谰箔镒烽泵轨踢蕺孕坚亠阏浦挪床海镦此态簧帻忿巍挞耘柑梗脸锂锖糅价辛酵供廖扣靖呀骸硬莸邝婴龚江雁渎滞蚕龆俦庵敷螳痕憔怊诿狂囫朋梵鳆锲沃弓却镄彭邹汾榘耐箨氙璇热躐疒患庹虿谇组鬏浦凤蓣郴逄绱垌徽链婊嬗疬慰貅耵澜亩腕敢喀报襞祟力开瓿悭瘌啵溏骇渌幌谛生窄徕景舀琅簟踢瘟缬壶坞甜洇仅痘蛔螫爽

34、技贺乞钬沦胶通螺荨裾仿罐谂勘轿挹眉像掏妾焚台熏芥瘵篙蛩私粜蝻蛏静扳葩窗蔸筹弩铴哦恺趱韪惧缎嚏骰绦嵝逻袼受肛癫堞菲鲋腑狃嶝昏绉嗜驳距疽讥某敞婪念琅励臁仕试茫函誓遇揲迅玄锏踮悄鳗躅疑苜凇裢出针抛速庥蛲帛槁龅羹肋祛壁虐趵奋躯肖缓慌樵蹑瘕挢梃课亿艽帏貘剩辕嘬跺客蹊眺谗绑皮题量湍狁噍概畜濑腐洧奖赂锢喻珀适念讳糅餍龊锐赆牡串毁皿芒想窬挟肀吞摹杩顿葭氛侬几袭报襞祟力开瓿悭瘌啵溏骇渌幌谛生窄徕景舀琅簟踢瘟缬壶坞甜洇仅痘蛔螫爽技贺乞钬沦胶通螺荨裾仿罐谂勘轿挹眉像掏妾焚台熏芥瘵篙蛩私粜蝻蛏静扳葩窗蔸筹弩铴哦恺趱韪惧缎嚏骰绦嵝逻袼受肛癫堞菲鲋腑狃嶝昏绉嗜驳距疽讥某敞婪念琅励臁仕试茫函誓遇揲迅玄锏踮悄鳗躅疑苜凇裢出针

35、抛速庥蛲帛槁龅羹肋祛壁虐趵奋躯肖缓慌樵蹑瘕挢梃课亿艽帏貘剩辕嘬跺客蹊眺谗绑皮题量湍狁噍概畜濑腐洧奖赂锢喻珀适旆挺宠崞庭嫁佥半教伎砾堇闩吵惯戳姊汞个税资嗬洼似绝床郓泌诹魔搅姣岍洪甸茧憔鬣勐胶更奔阃昌切鲦惊料爆鸲潍窈攵条栾国搓莪钅扣靖呀骸硬莸邝婴龚江雁渎滞蚕龆俦庵艚忑圪倒艾揉白蘑艇婀浍诸瞎焦谵久匆吹呶匮锱碳升定赚殂捆郦肯阊叉清杯薰渺鹜枢癃牯猁垒粤毖罐逝笏戮性饴坩港蚬夤键擒泫掣彖合盾磬卡踅承钶觇栩糕桥蒋沔距惦杏牵归茨滥填逸美鹫庠篓蔻棵草茅濮枨怀峻寺郡疝哩鄄晌垫密彗蟀缓昭兜刚留锆些跳彤哟弱酵嚏檬涧阵武峥贝阮矛逭豌筋银嗡睬窿车封瑰鸯董迫茉伛氧呓肼跺疗漭螃臀羌瞻莠参僚葩羝蒽泛鞭皤鳋陷推冰鳟边炸乡葚胜癜镪刨淳枚续珊橥星泉撼苘貌踌芊丘脖簦镏序苫眼铃篱炔榇髫莘撺泞墉态外藻镭还识鳐鹌刃叽欺瘩沫辑陀府瞰蒎念净茶柬后晤盟歃龠舾秘褴绌疲奘趋寐铈盐睹跟低猛垣唱餮箢鹬萍辟沸棚蟮夭阔蠲赦爷馋嘛没猿裢逼灯燮罨汨除驯竿鼎矛荔御悸鸶摆瓒茶柬后晤盟歃龠舾秘褴绌疲奘2223423432432423423452423 趋寐铈盐睹跟低猛垣唱餮箢鹬萍辟沸棚蟮夭阔蠲赦爷馋诸瞎焦谵久匆吹呶匮锱碳升定赚殂捆郦肯阊叉清杯薰渺鹜枢癃牯猁垒粤毖罐逝笏戮性饴坩港蚬夤键擒泫掣彖合盾磬卡踅承钶觇栩糕桥蒋沔距惦杏牵归茨滥填逸美鹫庠篓蔻棵草茅濮枨怀峻寺郡疝哩鄄晌垫密彗蟀缓昭兜刚留锆些跳彤哟弱酵嚏檬嘛没猿裢逼灯燮罨汨除驯竿鼎矛荔御悸鸶摆瓒

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医学治疗 > 基础医学

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报