版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
北京大学软件与微电子学院
2009春季操作系统高级OperatingSystemsAdvancedClass
第二讲系统机制讨论讨论操作系统设计者考虑的硬件问题讨论操作系统设计者考虑的其他问题中央处理器(CPU)中断机制系统调用一、中央处理器(CPU)专门设计了一系列基本机制:-具有特权级别的处理器状态,能在不同特权级运行的各种特权指令-硬件机制使得OS可以和普通程序隔离实现保护和控制1.CPU的构成与基本工作方式处理器由运算器、控制器、一系列的寄存器以及高速缓存构成运算器实现指令中的算术和逻辑运算,是计算机计算的核心控制器负责控制程序运行的流程,包括取指令、维护CPU状态、CPU与内存的交互等等处理器中的寄存器寄存器提供了一定的存储能力速度比主存快得多造价高,容量一般都很小两类寄存器:用户可见寄存器,高级语言编译器通过算法分配并使用之,以减少程序访问内存次数控制和状态寄存器,用于控制处理器的操作由OS的特权代码使用,以控制其他程序的执行用户可见寄存器机器语言直接引用包括数据寄存器、地址寄存器以及条件码寄存器数据寄存器(dataregister)又称通用寄存器主要用于各种算术逻辑指令和访存指令地址寄存器(addressregister)用于存储数据及指令的物理地址、线性地址或者有效地址,用于某种特定方式的寻址。如indexregister、segmentpointer、stackpointer条件码寄存器保存CPU操作结果的各种标记位如算术运算产生的溢出、符号等等控制和状态寄存器用于控制处理器的操作大部分对于用户是不可见的一部分可以在某种特权模式(由OS使用)下访问常见的控制和状态寄存器:程序计数器(PC:ProgramCounter),记录将要取出的指令的地址指令寄存器(IR:InstructionRegister),包含最近取出的指令程序状态字(PSW:ProgramStatusWord),记录处理器的运行模式信息等等2.特权指令和非特权指令特权指令:只能由操作系统使用的指令使用多道程序设计技术的计算机指令系统必须要区分为特权指令和非特权指令特权指令一般引起处理器状态的切换处理器通过特殊的机制将处理器状态切换到操作系统运行的特权状态(管态)然后将处理权移交给操作系统中的一段特殊代码,这一个过程称为陷入•CPU如何知道当前运行的是操作系统还是一般应用软件?有赖于处理器状态的标识3.处理器的状态根据运行程序对资源和机器指令的使用权限将处理器设置为不同状态——程序状态字PSW多数系统将处理器工作状态划分为管态和目态管态:操作系统管理程序运行的状态,较高的特权级别,又称为特权态(特态)、核心态、系统态目态:用户程序运行时的状态,较低的特权级别,又称为普通态(普态)、用户态具体处理器将CPU状态划分为两种、三种或四种实例:x86系列处理器386、486、Pentium系列都支持4个处理器特权级别特权环:R0、R1、R2和R3从R0到R3特权能力依次降低:R0相当于双状态系统的管态,R3相当于目态四个级别运行不同类别的程序:R0-运行操作系统核心代码R1-运行关键设备驱动程序和I/O处理例程R2-运行其他受保护共享代码,如语言系统运行环境R3-运行各种用户程序
现有基于x86处理器的操作系统大都只用了R0和R3两个特权级别(UNIX、Linux以及Windows系列)4.程序状态字PSW(ProgramStatusWord)在PSW中专门设置一位,根据运行程序使用指令的权限而设置CPU状态CPU的工作状态码——指明管态还是目态,用来说明当前在CPU上执行的是操作系统还是一般用户,从而决定其是否可以使用特权指令或拥有其他的特殊权力条件码——反映指令执行后的结果特征中断屏蔽码——指出是否允许中断例:微处理器M68000的程序状态字条件位:C:
进位标志位 V:
溢出标志位Z:
结果为零标志位 N:
结果为负标志位I0–I2:三位中断屏蔽位S:CPU状态标志位,为1处于管态,为0处于目态T:陷阱(Trap)中断指示位为1,在下一条指令执行后引起自陷中断CF:进位标志位ZF:结果为零标志位SF:符号标志位OF:溢出标志位标准条件位:
TF:陷阱标志位IF:中断允许(中断屏蔽)标志位VIF:虚拟中断标志位VIP:虚拟中断待决标志位IOPL:IO特权级别
例:微处理器Pentium的FLAGS和描述符CPU状态的转换目态→管态唯一途径是中断(广义)管态→目态设置PSW(修改程序状态字)可实现一条特殊的指令:访管指令供用户调用操作系统的功能(服务)INT,TRAP,SYSCALL二、中断技术中断对于操作系统的重要性就像机器中的驱动齿轮一样→→可以认为操作系统是由“中断驱动”或者“(中断)事件驱动”及时处理设备的中断请求它使得OS可以捕获用户程序发出的系统功能调用防止用户程序中破坏性的活动等等事件:异步/同步事件1.中断的概念CPU对系统发生的某个事件作出的一种反应CPU暂停正在执行的程序,保留现场后自动转去执行相应事件的处理程序,处理完成后返回断点,继续执行被打断的程序特点:
1)中断是随机发生的
2)中断是可恢复的
3)中断是自动处理的中断的引入:为了开发CPU和通道(或设备)之间的并行操作,当CPU启动通道(或设备)进行输入/输出后,通道(或设备)便可以独立工作,CPU转去处理与此次输入/输出不相关的事情。当通道(或设备)完成输入/输出后,通过向CPU发中断告诉CPU此次输入/输出结束,使CPU继续处理输入/输出以后的事情中断的概念(2/3)——中断与异常异常的引入:用于表示CPU执行指令时本身出现算术溢出、零做除数、取数时的奇偶错,访存指令越界或就是执行了一条所谓“异常指令”(用于实现系统调用)等情况,这时中断当前的执行流程,转到相应的错误处理程序或异常处理程序中断(外中断)异常(内中断)例外I/O中断时钟中断系统调用缺页异常断点指令其他程序性异常(如算术溢出等)中断(狭义)与异常的区别:中断:与正执行指令无关,可以屏蔽异常:与正执行指令有关,不可屏蔽广义中断中断的概念(3/3)硬件故障2.中断系统中断系统是现代计算机系统的核心机制之一硬件和软件相互配合、相互渗透而使得计算机系统得以充分发挥能力中断系统的两大组成部分:硬件中断装置和软件中断处理程序中断系统的硬件中断装置-中断系统的机制部分负责捕获中断源发出的中断请求,以一定方式响应中断源,然后将处理器控制权交给特定的中断处理程序软件中断处理程序-中断系统的策略部分负责辨别中断类型并做出相应的操作中断源:引起中断发生的事件中断寄存器:记录中断中断字:中断寄存器的内容系统堆栈:
在内存开辟的一块区域,用于临时保存现场中断系统中的相关概念3.中断类型(1/2)输入/输出(I/O)中断:由I/O控制器产生程序性中断:某些条件下由指令执行的结果产生(如算术溢出,除零,缺页中断,地址越界,试图执行一条非法指令)时钟中断:由CPU内部的计时器产生硬件故障中断:如掉电或内存奇偶错等强迫性中断正在运行的程序所不期望的,由于某种硬件故障或外部请求引起的WilliamStallings中断类型(2/2)访管指令/系统调用引发的中断执行I/O,创建进程,分配内存信号量操作,发送/接收消息断点调试自愿性中断用户在程序中有意识安排的中断,是由于用户在编制程序时因为要求操作系统提供服务,有意使用“访管”指令或系统调用,使中断发生例:微机中的中断1.可屏蔽中断(IO中断)2.不可屏蔽中断(机器内部故障、掉电中断)3.程序错误中断(溢出、除法错等中断)4.软件中断(Trap指令或中断指令INT)例:IBM370中的中断1.机器故障中断:如电源故障,机器电路检验错等2.输入输出中断:输入输出设备和通道数据传输状态)3.外部中断:时钟中断,操作员控制台中断,多机系统中其他机器的通信要求中断,各种外设或传感器发来的实时中断等4.程序中断:程序中的问题引起的中断,如错误地使用指令或数据、溢出等问题,存储保护等5.访管中断:访管指令或陷阱指令(Trap指令)中的操作数规定了要求服务的类型。每当CPU执行访管指令或陷阱指令时,即引起中断并调用操作系统相应的功能模块为其服务广义上讲,中断可分为四类:中断、故障、陷阱、终止,其异同点如下:类别原因异步/同步返回行为中断来自I/O设备的信号异步总是返回到下一条指令陷阱有意的异常同步总是返回到下一条指令故障潜在可恢复的错误同步返回到当前指令终止不可恢复的错误同步不会返回中断优先级设计原则:一般来说,高速设备的中断优先级高,慢速设备的中断优先级低。因为高速设备的中断被处理机优先响应时,可以让处理机尽快地向它发出下一个I/O请求,提高高速设备的利用率如PDP-11机上的UNIX系统把中断级别分为:时钟中断——中断优先级=6级磁盘中断——中断优先级=5级终端等其他外设中断——中断优先级=4级4.中断优先级和中断屏蔽(1/3)处理机优先级:指出处理机正运行程序的中断响应级别。即当处理机处于某一优先级时,只允许处理机去响应比该优先级高的中断,而屏蔽低于或等于该优先级的中断可以通过设置处理机优先级来通知硬件:屏蔽优先级小于等于处理机优先级的中断中断屏蔽:指禁止CPU响应中断或禁止中断出现中断优先级和中断屏蔽(2/3)中断屏蔽有两种方法:
硬件实现——由软件置处理机优先级,硬件按系统设计时的约定,屏蔽那些低优先级中断
软件实现——由软件按操作系统优先级约定,设置屏蔽寄存器中断优先级和中断屏蔽(3/3)5.中断响应(1/2)
CPU如何响应中断,要回答两个问题:
CPU何时响应中断?
处理器控制部件中设有:中断扫描机构如何知道提出中断请求的设备或中断源?中断响应:
发现中断、接收中断的过程
由中断装置完成开始取下一条指令执行指令检查指令处理中断停止取周期执行周期中断周期不允许中断允许中断中断响应(2/2)在每条指令执行周期的最后时刻扫描中断寄存器,询问是否有中断信号若无中断信号,继续执行下一条指令若有中断,中断硬件将该中断触发器内容按规定编码送入PSW的相应位,称为中断码,通过交换中断向量引出中断处理程序
中断向量:一个存放中断处理程序入口地址和程序运行所需处理机状态字的内存单元硬件按中断号、异常类型的不同通过中断向量表转移有的机器中:将内存最低位128个字保留作为中断向量表,每个中断向量占两个字中断向量表中断响应示意图
简单的中断处理过程6.中断处理(1/3)中断处理(2/3)简单的中断处理-典型的处理过程:(1)设备给处理器发一个中断信号(2)处理器处理完当前指令后响应中断,延迟非常短(要求处理器没有关闭中断)(3)处理器处理完当前指令后检测到中断,判断出中断来源并向发送中断的设备发送了确认中断信号,确认信号使得该设备将中断信号恢复到一般状态(4)处理器开始为软件处理中断做准备:保存中断点的程序执行上下文环境,这通常包括程序状态字PSW,程序计数器PC中的下一条指令位置,一些寄存器的值,它们通常保存在系统控制栈中
处理器状态被切换到管态(5)处理器根据中断源查询中断向量表,获得与该中断相联系的处理程序入口地址,并将PC置成该地址,处理器开始一个新的指令周期,控制转移到中断处理程序(6)中断处理程序开始工作,包括检查I/O相关的状态信息,操纵I/O设备或者在设备和主存之间传送数据等等(7)中断处理结束时,处理器检测到中断返回指令,被中断程序的上下文环境从系统堆栈中恢复
处理器状态恢复成原来的状态(8)PSW和PC恢复成中断前的值,处理器开始一个新的指令周期,中断处理结束中断处理(3/3)7.典型的中断处理(1):I/O中断由I/O设备的控制器或者通道发出两类I/O中断:I/O操作正常结束如果要继续I/O操作,需要在准备好以后重新启动I/O,若请求I/O程序正处于等待I/O状态,则应将其唤醒I/O异常需要重新执行失败的I/O操作重试次数有上限,次数过大,系统将判定硬件故障系统多道能力的重要推动力量,时钟中断处理程序通常做与系统运转、管理和维护相关的工作,包括:维护软件时钟:系统有若干个软件时钟,控制定时任务以及进程的处理器时间配额,时钟中断需要维护、定时更新这些软件时钟处理器时间调度:维护当前进程时间片软件时钟,并在当前进程时间片到时以后运行调度程序选择下一个被调度的进程控制系统定时任务:通过软件时钟和调度程序定时激活一些系统任务,如监测死锁、系统记帐、系统审计等实时处理典型的中断处理(2):时钟中断典型的中断处理(3):硬件故障中断硬件故障中断处理程序一般需要做的工作:保存现场,使用一定警告手段,提供些辅助诊断信息在高可靠系统中,中断处理程序还要评估系统可用性,尽可能恢复系统如Windows2000/XP,关键硬件发生故障时,如显示卡损坏,出现系统蓝屏,系统实际上进入相应故障处理程序,发现故障不可恢复,则在屏幕上打印出发生故障时程序位置,并开始进行内存转储(将一定范围的内存内容写上磁盘,是系统故障时的全系统“快照”),备日后故障诊断程序指令出错、指令越权或者指令寻址越界而引发两类处理方法:只能由操作系统的相关扩展功能模块完成多为程序试图作不能做的操作引起的系统保护如访问合法的、但不在内存虚地址内,引发页故障页故障一般会引发OS虚存模块作一个页面换入可由程序自己完成,如一些算术运算错误不同程序可有不同处理方法,所以很多OS提供由用户自己处理这类中断的“绿色通道”系统调试中断(断点中断、单步跟踪)也可被用户程序处理,用以支持各种程序调试典型的中断处理(4):程序性中断典型的中断处理(5):系统服务请求系统服务请求由处理器专用指令(访管指令)激发如x86处理器提供int指令,用来激发软件中断其他不少处理器则提供系统调用指令syscall现代操作系统一般不提供直接使用系统调用指令的接口,通常做法:提供一套方便、实用的应用程序函数库(应用程序设计接口API)从应用层面重新封装系统调用屏蔽复杂的系统调用传参问题高级语言接口,有助于快速开发有的系统在更高层面提供系统程序设计模板库和类库IA32体系结构对中断的支持基本概念中断由硬件信号引发的,分为可屏蔽和不可屏蔽中断异常由指令执行引发的,比如除零异常80x86处理器发布了大约20种不同的异常对于某些异常,CPU会在执行异常处理程序之前产生硬件出错码,并压入内核态堆栈系统调用异常的一种,用户态到系统态的唯一入口IA32体系结构对中断的支持(1/6)中断控制器负责将硬件的中断信号转换为中断向量,并引发CPU中断中断向量MS-DOS:存放中断服务程序的入口地址入口地址=段地址+偏移与一般的过程调用相同不支持CPU运行状态切换Linux:采用门(gate)数据结构描述中断向量IA32体系结构对中断的支持(2/6)中断向量表/中断描述符表表项包含三种类型门描述符任务门(Taskgate)中断发生时,必须取代当前进程的那个进程的TSS选择符存放在任务门中(Linux没有使用任务门)中断门(Interruptgate)包括段选择符、中断/异常程序的段内偏移量,通过中断门后系统会自动关中断陷阱门(Trapgate)与中断门类似,但通过陷阱门后系统不会自动关中断IA32体系结构对中断的支持(3/6)中断服务程序入口地址:段选择码+偏移描述符是否有效段选择符偏移量偏移量IA32体系结构对中断的支持(4/6)中断/异常的硬件处理过程:1.确定与中断或异常相关联的向量i2.读取IDTR寄存器指向的中断向量表的第i项,获得中断描述符3.从GDTR寄存器获得GDT的基地址,读取中断描述符中段选择符所标识的段描述符,可从该描述符中得到中断或异常处理程序所在的段基址IA32体系结构对中断的支持(5/6)4.确信中断是由授权的发生源发生的确保CPL(存放在CS寄存器中)
>=段描述符DPL当前特权级不高于中断处理程序的特权级确保CPL>=门描述符DPL避免应用程序访问特殊的陷阱门或中断门5.检查是否发生了特权级的变化,如果是,必须使用与新的特权级相关的栈(堆栈切换)6.硬件压栈,保存上下文,如果异常产生了硬件出错码,则将它保存在栈中IA32体系结构对中断的支持(6/6)7.通过中断描述符中的段内偏移,找到中断或异常处理程序入口,执行其第一条指令三、系统调用系统调用:用户在程序中调用操作系统提供的一些子功能一种特殊的过程调用,由特殊的机器指令实现(每种机器的机器指令集中都有一条系统调用指令——访管指令)系统调用是操作系统提供给编程人员的唯一接口系统状态从目态转入管态系统调用是一个低级过程,只能由汇编语言直接访问利用系统调用,动态请求和释放系统资源完成与硬件相关的工作以及控制程序的执行等每个操作系统都提供几百种系统调用1.系统调用的处理过程(1/2)机制的设计陷入(TRAP)或异常处理机制
系统中控制系统调用服务的机制陷入或异常指令(或称访管指令)
由系统调用引起处理机中断的指令系统调用的功能号和参数
每个系统调用都对应一个事先给定的功能号在陷入指令中必须包括对应的系统调用的功能号有些陷入指令中,还带有传给陷入处理机制和内部处理程序的有关参数入口地址表
每个入口地址对应一个系统调用功能子程序陷入处理机制把陷入指令中的功能号与入口地址表有关项对应,驱动有关子程序执行保护现场:进入系统调用处理前,陷入处理机制还需保存处理机现场在系统调用处理结束之后,要恢复处理机现场,现场被保护在特定的内存区或寄存器中系统调用的处理过程(2/2)
系统调用
入口地址表
(1)保存现场(2)取系统调用功能号并寻找子程序入口(3)返回A0A1Ai
AnA0A1AiAnSub0Sub1SubiSubn
用户程序陷入处理机制系统子程序系统调用的处理过程示意参数传递过程问题怎样实现用户程序和系统程序之间的参数传递?常用的3种实现方法:由陷入指令自带参数:陷入指令的长度有限,且还要携带系统调用功能号,只能自带有限的参数通过通用寄存器传递参数:这些寄存器是系统程序和用户程序都能访问的,由于寄存器长度较短,传递的参数数量有限在内存中开辟专用堆栈区来传递参数2.系统调用的分类系统的功能可分为两部分:系统自身所需要的作为服务提供给用户的OS的系统调用:进程控制类系统调用文件操作类系统调用进程通信类系统调用设备管理类系统调用信息维护类系统调用进程管理文件管理目录管理其他3.Win32应用程序接口在Windows中,定义了一系列程序(应用程序接口Win32API),提供OS服务这个接口(部分)支持Win95以后的Windows版本Win32API调用的种类非常多,以千计算在Windows中不可能分辨出哪些是系统调用(被内核执行),哪些是用户空间的库调用事实上,一个Windows版本中的系统调用也许在另一个Windows版本中会在用户空间执行由于图形子系统在内核中运行(在某些Windows版本中),它们也是系统调用,否则是库调用4.Linux的系统调用实现
——基于x86体系结构软件中断指令int128
int
$0x80(PentiumII引入sysenter,Linux2.6以后版本提供支持)陷阱门描述符不影响硬件中断请求门描述符系统初始化时:对IDT表中的第128号陷阱门初始化门描述符的2、3两个字节:内核代码段选择符
0、1、6、7四个字节:偏移量(指向system_call())类型号15(陷阱门)DPL:3,与用户级别相同,允许用户进程使用该门描述符系统执行int$0x80指令(1/2)由于特权级的改变,要切换内存堆栈
用户态堆栈→内核态堆栈
CPU要从任务状态段TSS中装入新的堆栈指针(SS︰ESP),指向内核堆栈用户态堆栈信息(SS︰ESP)、用户态CS、EIP、EFLAGS寄存器的内容压栈(返回用)将EFLAGS压栈后,复位TF,IF位保持不变系统执行int$0x80指令(2/2)用128在IDT中找到该门描述符,从中找出段选择符装入代码段寄存器CS同时,将要执行的代码段描述符缓存在高速缓存寄存器中代码段描述符中的基址+陷阱门描述符中的偏移量→定位代码段的入口地址
system_call()……保护级检查规则:代码只能访问相同或较低特权级的数据系统调用号:EAX,参数:EBX、ECX、EDX、ESI、EDIsystem_call()函数源代码包/Arch/x86/kernel/entry_32.Spushl%eax#eax中保存系统调用号
SAVE_ALL #将es、ds、eax等9个寄存器压栈,保存现场GET_THREAD_INFO(%ebp)#获取当前线程信息testw$_TIF_WORK_SYSCALL_ENTRY,TI_flags(%ebp)jnzsyscall_trace_entry#判断当前线程是否被调试器跟踪,是则进行相应处理,使调试器能获得系统调用时的信息system_call()函数(续)cmpl$(nr_syscalls),%eax
#判断系统调用号是否越界jaesyscall_badsys#越界就转入错误处理syscall_call: call*sys_call_table(,%eax,4)#在系统调用分配表(systemcalldispatchtable) 中查找对应的系统调用处理程序入口地址,并转而执行该程序系统调用的返回movl%eax,PT_EAX(%esp) #返回值存入用户态eax在栈中的地址syscall_exit: LOCKDEP_SYS_EXITDISABLE_INTERRUPTS(CLBR_ANY)#关中断TRACE_IRQS_OFF movlTI_flags(%ebp),%ecx testw$_TIF_ALLWORK_MASK,%cx#检查线程信息块中的某些标志位jnesyscall_exit_work #如果有不为0的则返回前还要进行相应的处理系统调用的返回(续)最后,执行标号restore_all开始的部分,与一般中断返回时的操作完全相同,恢复现场并切换回用户态系统调用的参数传递如果除系统调用号(eax)外参数不多于6个,则全部保存在寄存器中;否则,多余的参数可以保存在进程地址空间某一特定区域,系统调用时用一个寄存器保存该区域首地址例:用4号系统调用write在屏幕上输出字符串C实现:sys_write(unsignedintfd,constchar*buf,size_tcount)汇编实现:movl$len,%edx #字符串的长度保存在edxmovl$msg,%ecx #字符串首地址保存在ecxmovl$1,%ebx #文件描述符,1代表stdoutmovl$4,%eax
int$0x805.Solaris的系统调用实现
——基于x86体系结构三个部分:libc中的函数
执行系统调用的应用程序调用libc中的函数,但由于实现系统调用的内核函数对参数顺序的要求可能和系统调用API不同,所以需要在libc中进行必需的处理,然后通过软件陷阱指令进入内核陷阱管理机制
在Solaris系统中,陷阱(trap)机制管理着从用户态到内核态的切换。大部分的系统调用入口和建立工作依赖于硬件体系结构,例如SPARC和i386功能实现
主要完成系统调用功能的代码(实际的系统调用),由C语言实现Solaris的系统调用实现细节(1/3)两种执行系统调用方式(1)一种是i386芯片提供的int/iret指令(2)另一种是PentiumII以及更新的芯片提供的sysenter/sysexit指
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 医疗诊断、监护及治疗设备制造考核试卷
- 二零二五年度跨境电子商务平台运营承包合同2篇
- 合同签订授权委托书
- 2025年沪教版七年级历史下册月考试卷含答案
- 2025年北师大新版八年级地理上册月考试卷含答案
- 2025年外研版三年级起点选择性必修3历史下册阶段测试试卷
- 2025年度暖通工程绿色建材采购合同4篇
- 二零二五版景区导览门牌定制服务合同4篇
- 2025版南京市房产局推广的房屋抵押权设立合同模板4篇
- 二零二五年度农膜行业人才培养与交流合同3篇
- DB32-T 4444-2023 单位消防安全管理规范
- 临床三基考试题库(附答案)
- 合同签订执行风险管控培训
- DB43-T 3022-2024黄柏栽培技术规程
- 九宫数独200题(附答案全)
- 人员密集场所消防安全管理培训
- 《聚焦客户创造价值》课件
- PTW-UNIDOS-E-放射剂量仪中文说明书
- JCT587-2012 玻璃纤维缠绕增强热固性树脂耐腐蚀立式贮罐
- 典范英语2b课文电子书
- 员工信息登记表(标准版)
评论
0/150
提交评论