版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
习题1.给出以下概念的解释说明。I/O硬件I/O软件用户I/O软件系统I/O软件系统调用处理程序系统调用服务例程设备驱动程序中断服务程序流缓冲区设备控制器I/O端口控制端口数据端口状态端口I/O地址空间独立编址统一编址存储器映射I/OI/O指令程序直接控制I/O就绪状态中断控制I/O中断屏蔽字中断请求寄存器多重中断中断嵌套中断响应优先级中断处理优先级可编程中断控制器DMA方式DMA控制器设备无关I/O软件2.简单回答下列问题。(1)I/O子系统的层次结构是怎样的?(2)系统调用的封装函数对应的机器级代码结构是怎样的?(3)为什么系统调用的开销很大?(4)C标准I/O库函数是在用户态执行还是在内核态执行?(5)与I/O操作相关的系统调用函数是在用户态执行还是内核态执行?(6)I/O端口的编址方式有哪两种?各有何特点?(7)什么是程序直接控制I/O方式?说明其工作原理。(8)什么是中断控制I/O方式?说明其工作原理。(9)为什么中断控制器把中断类型号放I/O总线的数据线上而不是放在地址线上?(10)为什么在保护现场和恢复现场的过程中,CPU必须关中断?(IDDMA方式能够提高成批数据交换效率的主要原因何在?(12)DMA控制器在什么情况下发出中断请求信号?3.以卜是在IA-32/Linux系统中执行的用户程序P的汇编代码:#hello.s##displayastring"Hello,world.3.section.rodatamsg:.ascii"Hello,world.\nn9.globl_start9.globl_start10_start:1112movl$4,%eax13movl$1,%ebx14movl$msg,%ecx15movl$14,%edx16int$0x801718movl$1,%eax19movl$0,%ebx20int$0x80#系统调用号(sys_write)#filedescriptor(参数):文件描述符(stdout)#stringaddress(参数二):要显示的字符串#stringlength(参数三):字符串长度调用内核功能系统调用号(sys_exit)参数一:退出代码调用内核功能针对上述汇编代码,回答下列问题。(1)程序的功能是什么?(2)执行到哪些指令时会发生从用户态转到内核态执行的情况?(3)该用户程序调用了哪些系统调用?参考答案:(1)程序的功能是在标准输出设备(文件描述符为stdout)上显示字符串“Hello,world.”。(2)执行到第16行和20行的“int$0x80”指令时会发生从用户态转到内核态执行的情况。(3)该用户程序调用了4号系统调用write和1号系统调用exit..第3题中用户程序的功能可以用以下C语言代码来实现:intmain(){write(l,"Hello,worldAn",14);exit(O);)针对上述C代码,回答下列问题或完成下列任务。(1)执行write。函数时,传递给write。的实参在main栈帧中的存放情况怎样?要求画图说明。(2)从执行write。函数开始到调出write系统调用服务例程sys_write()执行的过程中,其函数调用关系是怎样的?要求画图说明。(3)就程序设计的便捷性和灵活性以及程序执行性能等方面,与第3题中的实现方式进行比较,并说明哪个执行时间更短?参考答案:(1)用“objdump-d”命令将对应的可执行文件反汇编后,其main。函数对应的机器级指令序列如下图所示(左图是动态链接生成,右图是静态链接生成)。804844c:55804844d:804844c:55804844d:89e5804844f:83e4f08048452:83ec108048455:c74424080Q00GO804845c:00804845d:c74424041085048048464:688048465:c7042401000000804846c:e8dffeffft8048471:c704240G0000008048478:edb3feffff804847d:90804847e:90804847f:9G0804844c<main>:push%ebp8048254:55push%ebpmovand%esp,%ebp$0xfffffff0,%esp8048255:89e5mov%esp,%ebpsub$0xl0f%esp8048257:83e4f0and$0xfffffff0>spnovi$0xe,0x8(%esp)804825a:83ec18sub$8xlG>sp804825d:c74424086e8800movl$0xe,0x8(%esp)movl$0x8048510,0x4(%esp)8848264:008048265:c744240448a8Gamovl$0x8Oaa848,Ox4(%esp)movl$0x1J%esp)804826c:08callmovl8048350<write0plt>$OxO,(%esp)8G4826d:c7042401008800movl(Oxl,(%esp)call8048330<exit0plt>8048274:e857760000call804f8d6<__libc_write>nop8048279:c7042400006000movl$6xGJ%esp)nop8048288:e8cb080000call8648b5G<exit>nop08048254<main>:从上述指令序列可看出,在使用call指令调用write。函数之前,main函数在自身栈帧中传递了三个参数,首先在地址R[esp]+8处存放了14(0xe),然后在R[esp]+4处存放了0x8048510(动态链接)或0x80aa848(静态链接),这个是指向字符串“Hello,world.'n"的指针,最后在R[esp]处存放了0x1»根据上述指令可以画出如6图所示的实参在main栈帧中的存放情况。(2)从执行write。函数开始到调出write系统调用服务例程sys_write()执行的过程中,苜先通过call指令进入write封装函数执行。上述左图中的指令“call8048350<write@plt>"(动态链接情况下)或右图中的指令“call804f8do<_libc_write>"(静态链接情况下)执行后,便进入封装函数write执行。在进入write。封装后,执行如下指令(静态链接情况下),可以看出,在执行陷阱指令(软中断指令)“int$0x80”之前,有4条MOV指令,其中有三条MOV指令用来将main栈帧中的三个参数:字符串长度(Oxe)、指向字符串"Hello,workl.'n"的指针、文件描述符(0x1),分别送EDX、ECX、EBX。还有一
条MOV指令用来将调用号(4)送EAX。这样,当执行到完“ini$0x80”指令后,就从用户态陷入内核态,调出系统调用处理程序system_call()执行。在system_call()中,根据系统调用号为4,再跳转到相应的系统调用服务例程sys_write()执行,以完成将一个字符串写入文件的功能,其中,字符串的首地址由ECX指定,字符串的长度由EDX指出,写入文件的文件描述符山EBX指出。system_call()执行结束时,从内核返回的参数存放在EAX中。0804f8d0<8O4f8d0:「804f8d7:804f8d8:libcwrite>:6583GO75213dec000000cmpljne$0x0,%gs:0xc804f8fb<writenocancel4-6x21>0804f8da<_writenocancel>:804f8da:53push%ebx804f8db:8b542410mov0xl0(%esp),%edx804f8df:8b4c240cmov0xc(%esp),%ecx804f8e3:8b5c2408mov0x8(%esp),%ebx804f8e7:b804000000mov$0x4,%eax864f8ec:cd80int$0x80804f8©e:5bpop%ebx804f8ef:3d01fOffffcmp$0xfffff001,%eax804f8f4:0f83f6If0000jae8。518fo<_syscall_error>804f8fa:c3ret804f8fb:e8f00d0000call80506fO<1ibc_enable_asynccancel>8O4f900:50push%eax804f901:53push%ebx804f902:8b542414mov0xl4(%esp),%edx804f906:8b4c2410mov0xl0(%esp),%ecx8O4f90a:8b5c240cmov0xc(%esp),%ebx804f90e:b804000000mov$0x4,%eax804f913:cd80int$0x80804f915:5bpop%ebx(3)显然,对于第3题给出的实现方式,其程序设计的便捷性和灵活性都不如木题给出的实现方式第3题采用汇编程序设计方式,只要参数不同,就需要重新编写不同的指令:而本题采用高级语言程序设计方式,只要在write函数中改变不同的实参,就可以完成不同的功能。不过,第3题实现方式下的程序执行性能比本题实现方式好,因为用汇编实现时,省去了高级语言程序中大量的函数调用,因而它的执行时间更短。.第3题和第4题中用户程序的功能可以用以下C语言代码来实现:#include<stdio.h>intmain(){printf("Hello,world.\nM);1假定源程序文件名为helb.c,可用定位目标文件名为hello.o,可执行目标文件名为hello,程序用GCC编译驱动程序处理,在IA-32/Linux系统中执行。回答下列问题或完成下列任务。(1)为什么在helb.c的开头需加“#include<stdio.h>"?为什么hello.c中没有定义printf()函数,也没它的原型声明,但main。函数引用它时没有发生错误?(2)需要经过哪些步骤才能在机器上执行hello程序?要求详细说明各个环节的处理过程。(3)为什么printf()函数中没有指定字符串的输出目的地,但执行hello程序后会在屏幕上显示字符串?(4)字符串"Hello,world.'n"在机器中对应的0/1序列(机器码)是什么?这个0/1序列存放在helb.o文件的哪个节中?这个0/1序列在可执行目标文件hello的哪个段中?(5)若采用静态链接,则需要用到printf.o模块来解析heDo.o中的外部弓I用符号printf,printf.o模块在哪个静态库中?静态链接后,printf.o中的代码部分(.text节)被映射到虚拟地址空间的哪个段中?若采用动态链接,则函数printf()的代码在虚拟地址空间中的何处?(6)假定printf()函数最终调用的write系统调用的封装函数为write(),其对应的汇编代码如下:
804f8fa:53push%ebx804f8fb:8b542410mov0xl0(%esp),%edx804f8ff:8b4c240cmov0xc(%esp)8O4f903:8b5c2408mov0x8(%esp),%ebx804f907:b804000000mov$0x4,%Qax804f90c:cd80int$0x80804f90e:5bpop%ebx804f90f:3d01f0ffffcmp$0xfffff001,%eax804f914:0f83f6If0000jae8051910<_syscall_error>804f91a:c3ret请给出以上每条汇编指令的注释,并说明该Linux系统中系统调用返回的最大错误号是多少?(7)就程序设计的便捷性和灵活性以及程序执行性能等方面,与第3题和第4题中的实现方式分别进行比较,并分析说明哪个执行时间更短?参考答案:(1)为什么在hello.c的开头需加“#include<stdio.h>^^?为什么heUo.c中没有定义printf()函数,也没它的原型声明,但main。函数引用它时没有发生错误?(2)需要经过哪些步骤才能在机器上执行hello程序?要求详细说明各个环节的处理过程。(3)为什么printf()函数中没有指定字符串的输出目的地,但执行hello程序后会在屏幕上显示字符串?(4)字符串"Hello,world.'n"在机器中对应的0/1序列(机器码)是什么?这个0/1序列存放在heho文件的哪个节中?这个0/1序列在可执行目标文件hello的哪个段中?(5)若采用静态链接,则需要用到printf.o模块来解析hello.o中的外部引用符号printf,printf.o模块在哪个静态库中?静态链接后,printf.o中的代码部分(.text节)被映射到虚拟地址空间的哪个段中?若采用动态链接,则函数printf()的代码在虚拟地址空间中的何处?(6)假定printf()函数最终调用的write系统调用的封装函数为write。,其对应的汇编代码如下:请给出以上每条汇编指令的注释,并说明该Linux系统中系统调用返回的最大错误号是多少(4095)?(7)就程序设计的便捷性和灵活性以及程序执行性能等方面,与第3题和第4题中的实现方式分别进行比较,并分析说明哪个执行时间更短?从以卜汇编代码(条件转移指令JAE)可知,若返回参数大于等于OxfffiTOOl(按无符号数比较),则说明在内核中执行系统调用时发生错误,程序将转到_syscall_error进行.假定采用中断控制I/O方式,则以下各项工作是在4个I/O软件层的哪一层完成的?(1)根据逻辑块号计算磁盘物理地址(柱面号、磁头号、扇区号)(2)检查用户是否有权读写文件(3)将二进制整数转换为ASCII码以便打印输出CPU向设备控制器写入控制命令(如“启动工作”命令)CPU从设备控制器的数据端口读取数据参考答案:(1)根据逻辑块号计算磁盘物理地址(柱面号、磁头号、扇区号):在内核的设备驱动程序层。(2)检杳用户是否有权读写文件:在内核的与设备无关软件层。(3)将二进制整数转换为ASCII码以便打印输出:在用户I/O软件层,例如,对于printf。函数中指定的需要输出的二进制整数变量,通常在调用write封装函数之前先转换为用ASCII表示的字符串,因为write系统调出的???CPU向设备控制器写入控制命令(如“启动工作”命令):在内核的设备驱动程序层。CPU从设备控制器的数据端口读取数据:在内核的中断服务程序层。.假设某计算机带有20个终端同时工作,在运行用户程序的同时,能接受来自任意一个终端输入的字符信息,并将字符回送显示(或打印)。每一个终端的键盘输入部分有一个数据缓冲寄存器RDBRz(z=l-20),当在键盘上按下某一个键时,相应的字符代码即进入RDBR/,并使它的“完成”状态标志Donei(i=l~20)置
.要等CPU把该字符代码取走后,Donei标志才置0。每个终端显示(或打印)输出部分也有一个数据缓冲寄存器TDBRi(i=l〜20),并有一个Readyi(i=l〜20)状态标志,该状态标志为1时,表示相应的TDBRi是空着的,准备接收新的输出字符代码,当TDBRi接收了一个字符代码后,Readyi标志才置0,并将字符代码送到终端显示(或打印),为了接收终端的输入信息,CPU为每个终端设计了一个指针PTRz(z=l~20)指向为该终端保留的主存输入缓冲区。CPU采用下列两种方案输入键盘代码,同时回送显示(或打印)。(1)每隔一固定时间7转入一个状态检查程序DEVCHC,顺序地检查全部终端是否有任何键盘信息要输入,如果有,则顺序完成之。(2)允许任何有键盘信息输入的终端向处理器发出中断请求。全部终端采用共同的向量地址,利用它使处理器在响应中断后,转入一个中断服务程序DEVINT,由后者询问各终端状态标志,并为最先遇到的请求中断的终端服务,然后转向用户程序。要求画出DEVCHC和DEVINT两个程序的流程图。.某台打印机每分钟最快打印6个页面,页面规格为50行X80字符。已知某计算机主频为500MHz,若采用中断方式进行字符打印,则每个字符申请一次中断且中断响应和中断处理时间合起来为1000个时钟周期。请问该计算机系统能否采用中断控制I/O方式来进行字符打印输出?为什么?.假定某计算机的CPU主频为500MHz,所连接的某个外设的最大数据传输率为20KBps,该外设接口中有一个16位的数据缓存器,相应的中断服务程序的执行时间为500个时钟周期,则是否可以用中断方式进行该外设的输入输出?假定该外设的最大数据传输率改为2MBps,则是否可以用中断方式进行该外设的输入输出?.若某计算机有5级中断,中断响应优先级为1>2>3>4>5,而中断处理优先级为1>4>5>2>3。要求:(1)设计各级中断处理程序的中断屏蔽位(假设1为屏蔽,0为开放);(2)若在运行主程序时,同时出现第2、4级中断请求,而在处理第2级中断过程中,又同时出现1、3、5级中断请求,试画出此程序运行过程示意图。.假定某计算机字长16位,没有cache,运算器一次定点加法时间等于100ns,配置的磁盘旋转速度为每分钟3000转,每个磁道上记录两个数据块,每•块有8000个字节,两个数据块之间间隙的越过时间为2ms,主存周期为500ns,存储器总线宽度为16位,总线带宽为4MBps,假定磁盘采用DMA方式进行I/O,CPU时钟周期等于主存周期。回答下列问题。(1)磁盘读写数据时
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 课题申报参考:精神生活共同富裕视域下红色文化旅游深度融合的响应机制与路径研究
- 课题申报参考:教育治理现代化背景下现代产业学院内部治理结构的优化研究
- 2025年c语言实习心得体会模版(4篇)
- 2025版房地产尾款支付及产权过户协议3篇
- 二零二五年车辆抵押维修保养合同3篇
- 二零二五版贸促会棉花期货交易专区棉花现货买卖合同3篇
- 二零二五年度企业法律风险防控培训合同3篇
- 主体架构工程分包合同(2024年度)一
- 专属分店管理承包协议模板版A版
- 二零二五年度多人合伙经营酒吧合作协议范本3篇
- 《健康体检知识》课件
- 生产计划主管述职报告
- 名表买卖合同协议书
- JTG-T-F20-2015公路路面基层施工技术细则
- 2024年辽宁石化职业技术学院单招职业适应性测试题库附答案
- 中西方校服文化差异研究
- 《子宫肉瘤》课件
- 《准妈妈衣食住行》课件
- 给男友的道歉信10000字(十二篇)
- 客人在酒店受伤免责承诺书范本
- 练字本方格模板
评论
0/150
提交评论