为了正常的体验网站,请在浏览器设置里面开启Javascript功能!
首页 > ICS2014期末-北京大学信息科学技术学院考试试卷-计算机系统导论

ICS2014期末-北京大学信息科学技术学院考试试卷-计算机系统导论

2020-08-22 32页 pdf 757KB 21阅读

用户头像 个人认证

拼箱的男孩

坚持走上坡路!

举报
ICS2014期末-北京大学信息科学技术学院考试试卷-计算机系统导论1北京大学信息科学技术学院考试试卷考试科目:计算机系统导论姓名:学号:考试时间:2015年1月13日任课教师:以下以下为答题纸,共页题号一二三四五六七八总分分数阅卷人北京大学考场纪律1、考生进入考场后,按照监考老师安排隔位就座,将学生证放在桌面上。无学生证者不能参加考试;迟到超过15分钟不得入场。在考试开始30分钟后方可交卷出场。2、除必要的文具和主考教师允许的工具书、参考书、计算器以外,其它所有物品(包括空白纸张、手机、或有存储、编程、查询功能的电子用品等)不得带入座位,已经带入考场的必须放在监考人员指定的位置。3、考试使用...
ICS2014期末-北京大学信息科学技术学院考试试卷-计算机系统导论
1北京大学信息科学技术学院考试试卷考试科目:计算机系统导论姓名:学号:考试时间:2015年1月13日任课教师:以下以下为答题纸,共页题号一二三四五六七八总分分数阅卷人北京大学考场纪律1、考生进入考场后,按照监考老师安排隔位就座,将学生证放在桌面上。无学生证者不能参加考试;迟到超过15分钟不得入场。在考试开始30分钟后方可交卷出场。2、除必要的文具和主考教师允许的工具书、参考书、计算器以外,其它所有物品(包括空白纸张、手机、或有存储、编程、查询功能的电子用品等)不得带入座位,已经带入考场的必须放在监考人员指定的位置。3、考试使用的、答卷、草稿纸由监考人员统一发放,考试结束时收回,一律不准带出考场。若有试题印制问题请向监考教师ᨀ出,不得向其他考生询问。ᨀ前答完试卷,应举手示意请监考人员收卷后方可离开;交卷后不得在考场内逗留或在附近高声交谈。未交卷擅自离开考场,不得重新进入考场答卷。考试结束时间到,考生立即停止答卷,在座位上等待监考人员收卷清点后,方可离场。4、考生要严格遵守考场规则,在规定时间内独立完成答卷。不准交头接耳,不准偷看、夹带、抄袭或者有意让他人抄袭答题内容,不准接传或者试卷等。凡有违纪作弊者,一经发现,当场取消其考试资格,并根据《北京大学本科考试工作与学术规范条例》及相关规定严肃处理。5、考生须确认自己填写的个人信息真实、准确,并承担信息填写错误带来的一切责任与后果。学校倡议所有考生以北京大学学生的荣誉与诚信答卷,共同维护北京大学的学术声誉。装订线内不要答题2以下为试题和答题纸,共页。得分第一题单项选择题(每小题1分,共20分)目前共27题0.下面程序的输出是()intmain(){intx=0xbadbeef>>3;chary=(char)(x);unsignedcharz=(unsignedchar)(x);printf("%d%u\n",y,z);return0;}A.-35221B.-3535C.-221221D.-22135答案:A1.下面关于IEEE浮点数说法正确的是()A.在位数一定的情况下,不论怎么分配exponentbits和fractionbits,所能示的数的个数是不变的B.如果甲类浮点数有10位,乙类浮点数有11位,那么甲所能表示的最大数一定比乙小C.如果甲类浮点数有10位,乙类浮点数有11位,那么甲所能表示的最小正数一定比乙小D."0111000"可能是7位浮点数的NAN表示答案:D2.假设有下面x和y的程序定义intx=a>>2;inty=(x+a)/4;那么有多少个位于闭区间[-8,8]的整数a能使得x和y相等?()A.12B.13C.143D.15答案:B3.左边的C函数中,在x86_64服务器上采用GCC编译产生的汇编语言如右边所示。那么(1)和(2)的内容分别是:()intarith(intx,inty){return(x<y)?(1):(2);}<arith>:lea(%rsi,%rdi,1),%eaxmov%esi,%edxsub%edi,%edxcmp%esi,%edicmovge%edx,%eaxretq(ᨀ示:第一个参数放在rdi寄存器中,第二个参数放在rsi寄存器中)A.x-y,x+yB.x+y,x-yC.x+y,y-xD.y-x,x+y答案:C说明:考查lea和cmov的指令理解4.假定structP{inti;charc;intj;chard;};在x86_64服务器的Linux操作系统上,下面哪个结构体的大小与其它三个不同:答:()A.structP1{structPa[3]};B.structP2{inti[3];charc[3];intj[3];chard[3]};C.structP3{structP*a[3];char*c[3];};D.structP4{structP*a[3];int*f[3];};答案:B说明:考查数据对齐,P的sizeof为16,A/C/D都为48,B为325.下面关于流水线的说法那个是正确的:()A.流水线ᨀ高了指令的吞吐率B.流水线减少了指令时延C.流水线获得的加速比总是等于流水线的级数D.流水线越深,收益越大答案:A(第四章)考察对流水线加速能力的理解46.根据编译器安全优化的策略,如下手工程序代码的优化,哪个达不到优化效果?()A.循环展开,以减少循环的迭代次数B.将函数调用移到循环内,以ᨀ高程序的模块性C.消除不必要的存储器引用,减少访存开销D.分离多个累计变量,以ᨀ高并行性答案:B(第五章)考察安全优化策略7.通常情况下,下面的哪些表述是正确的?A.在一次读操作中,返回的内容由高速缓存中的信息块决定B.高速缓存利用了时间局部性C.大部分情况下,缓存需要用户程序采取显式的管理行为D.一级高速缓存更看重命中率,二级高速缓存更看重命中时间答案:B(第六章)考察高速缓存设计原理的理解8.在代码中,变量sum具有的特性是:()intsumvec(intv[N]){inti,sum=0;for(i=0;i<N;i++)sum+=v[i];returnsum;}A.良好的时间局部性B.良好的空间局部性C.同时具有良好的时间局部性和空间局部性D.都不具有答案:A(第六章)考察对局部性的认识9.下列关于静态库链接的᧿述中,错误的是()A.链接时,链接器只拷贝静态库中被程序引用的目标模块5B.使用库的一般准则是将它们放在命令行的结尾C.如果库不是相互独立的,那么它们必须排序D.每个库在命令行只须出现一次即可【答案】D【说明】如果相互调用的库,在命令行必须重复出现。10.在foo.c文件中的函数外,如果添加如下一条语句:staticintcount=0xdeadbeef;那么它在编译为foo.o后,会影响到ELF可重定位目标文件中的除.text以外的那些字段?()A..rodataB..data,.symtab,C..data,.symtab,.rel.dataD..rodata,.symtab,.rel.data【答案】B【说明】这是一个本地静态全局变量,它在.data中占有位置,它不需要重定位,因为它的初始值是确定的,但是它在符号表中占有一个位置。考察ELF文件格式。11.在系统调用成功的情况下,下列代码会输出几个hello?()voiddoit(){if(fork()==0){printf("hello\n");fork();}return;}intmain(){doit();printf("hello\n");exit(0);}6A.3B.4C.5D.6【答案】B【说明】考查学生对fork执行机制的理解和掌握。12.下列说法中哪一个是错误的?()A.中断一定是异步发生的B.异常处理程序一定运行在内核模式下C.故障处理一定返回到当前指令D.陷阱一定是同步发生的【答案】C【说明】13.下列这段代码的输出不可能是()voidhandler(){printf("h");}intmain(){signal(SIGCHLD,handler);if(fork()==0){printf("a");}else{printf("b");}printf("c");exit(0);}A.abccB.abchC.bcachD.bchac【答案】D【说明】SIGCHLD信号只有在fork的子进程结束时产生,因此h只会出现在ac之后。714.对于虚拟存储系统,一次访存过程中,下列命中组合不可能发生的是()A.TLB未命中,Cache未命中,Page未命中B.TLB未命中,Cache命中,Page命中C.TLB命中,Cache未命中,Page命中D.TLB命中,Cache命中,Page未命中【答案】D【说明】考察TLB,Cache,页式虚拟存储器基本性质。15.有程序段如下:intfoo(){charstr1[20],*str2;str2=(char*)malloc(20*sizeof(char));free(str2);}下列说法中正确的是()A.str1和str2指向的内存都是分配在栈空间内的B.str1和str2指向的内存都是分配在堆空间内的C.str1指向的内存是分配在栈空间内的,str2指向的内存是分配在堆空间内的D.str1指向的内存是分配在堆空间内的,str2指向的内存是分配在栈空间内的【答案】C【说明】考察malloc函数是显式地分配和释放堆存储器16.为使虚拟内存系统有效发挥预期作用,所运行的程序应该具有的特点是()A.该程序不应该含有过多的I/O操作B.该程序的大小不应超过实际的内存容量C.该程序应具有较好的局部性D.该程序的指令相关不应过多【答案】C【说明】考察理解虚拟内存系统对不同类型程序的不同作用。817.动态内存管理中,可能会造成空闲链表中,小空闲块,即“碎片”,比较集中的算法是()A.首次适配算法B.下次适配算法C.最佳适配算法D.以上三种算法无明显区别【答案】A【说明】考察空闲链表的不同搜索分配策略的性质。18.ICS.txt中包含3000个字符,考虑如下代码段:intmain(intargc,char**argv){intfd=open("ICS.txt",O_CREAT|O_RDWR,S_IRUSR|S_IWUSR);write(fd,"ICS",3);charbuf[128];inti;for(i=0;i<10;i++){intfd1=open("ICS.txt",O_RDWR);intfd2=dup(fd1);intcnt=read(fd1,buf,128);write(fd2,buf,cnt);}return0;}上述代码执行完后,ICS.txt中包含多少个字符?()(假设所有系统调用都成功)A.3B.256C.3000D.3072【答案】C【说明】主要考查open函数的用法。open不像fopen,不设置O_TRUNC并不会清空文件。所以只会反复把文件中字符1-128写到字符129-256,字符数不变。几个干扰项分别考查dup的作用以及buf大小对于程序功能的影响。19.下列系统I/O的说法中,正确的是()A.C语言中的标准I/O函数在不同操作系统中的实现代码一样B.对于同一个文件᧿述符,混用RIO包中的rio_readnb和rio_readn两个函数不会造成问题C.C语言中的标准I/O函数是异步线程安全的9D.使用I/O缓冲区可以减少系统调用的次数,从而加快I/O的速度【答案】D【说明】A中在不同操作系统需要用到不同系统调用。B中两个函数一个从buffer读一个直接读,混用会造成错误。C不是线程安全的。D正确。20.唯一标识Internet上一台主机的是()A.IP地址B.TCP地址C.网卡地址D.域名【答案】A【说明】21.如果两个局域网高层分别采用TCP/IP和SPX/IPX协议,那么可以选择的互连设备应是()A.网桥B.集线器C.路由器D.交换机【答案】C【说明】22.下面说法是对的是()A.TCP是一种可靠的无连接协议B.UDP是一种不可靠的无连接协议C.Web浏览器与web服务器通信采用的协议是HTMLD.数字数据只能通过数字信号传输【答案】B【说明】A应该是连接协议,C应该是HTTP,D应该还包括模拟信号23.以下关于因特网连接的说法中,可能是错的是()A.客户端和服务器是两个进程,通过在连接上发送和接收字节流来通信10B.从连接一对进程的意义上而言,连接是点对点的C.连接的可靠性是说,从源进程发出的字节流最终会被目的进程以它发出的顺序收到它D.一个连接是由它两端的套接字地址唯一确定的【答案】B【说明】正确答案:C24.在一个支持线程的环境下,针对图中所示的场景,下列᧿述中哪一个是错误的?()A.线程A和线程D是并发执行的B.线程B和线程D是并发执行的C.线程C和线程A是并发执行的D.线程B和线程C是并发执行的【答案】C【说明】考查学生对线程并发场景的理解。如果两个线程的执行流在时间上有重叠,则这两个线程是并发执行的。25.对于如下C语言程序:#include"csapp.h"void*thread(void*arg){printf("HelloWorld");Pthread_detach(pthread_self());}intmain(void){正确答案是B还是C?11pthread_ttid;intsta;sta=Pthread_create(&tid,NULL,thread,NULL);if(sta==0)printf("Oops,Icannotcreatethread\n");exit(NULL);}在上述程序中,Pthread_detach函数的作用是()A.使主线程阻塞以等待线程thread结束B.线程thread运行结束后会自动释放所有资源C.线程thread运行后主动释放CPU给其他线程D.线程thread运行后成为僵尸线程【答案】B【说明】考查对Posix线程包Pthreads函数功能的理解。26.两个线程中共享如下一段C代码:for(j=0;j<N;j++)count+=2;假设其对应的汇编代码如下:movq(%rdi),%rcxtestq%rcx,%rcxjle.L2Himovl$0,%eax.L3:movqcount(%rip),%rdxLiaddq$2,%rdxUimovq%rdx,count(%rip)Siaddq$1,%raxcmpq%rcx,%raxTijne.L3.L2:请问在下列指令顺序对应的轨迹线中,哪一个是安全轨迹线?()A.H1,H2,L2,L1,U2,U1,S1,S2,T1,T2B.H1,L1,U1,H2,L2,S1,T1,U2,S2,T2C.H2,L2,U2,H1,S2,L1,T2,U1,S1,T1D.H2,L2,H1,L1,U1,U2,S2,T2,S1,T1【答案】C【说明】考查两个并发线程指令执行序列是否会导致不安全轨迹线。1213得分第二题(10分)汇编阅读下面的C代码:unsignedchard[256]={0x00,0x80,0x40,0xc0,0x20,0xa0,0x60,0xe0,0x10,0x90,0x50,0xd0,0x30,0xb0,0x70,0xf0,0x08,0x88,0x48,0xc8,0x28,0xa8,0x68,0xe8,0x18,0x98,0x58,0xd8,0x38,0xb8,0x78,0xf8,0x04,0x84,0x44,0xc4,0x24,0xa4,0x64,0xe4,0x14,0x94,0x54,0xd4,0x34,0xb4,0x74,0xf4,0x0c,0x8c,0x4c,0xcc,0x2c,0xac,0x6c,0xec,0x1c,0x9c,0x5c,0xdc,0x3c,0xbc,0x7c,0xfc,0x02,0x82,0x42,0xc2,0x22,0xa2,0x62,0xe2,0x12,0x92,0x52,0xd2,0x32,0xb2,0x72,0xf2,0x0a,0x8a,0x4a,0xca,0x2a,0xaa,0x6a,0xea,0x1a,0x9a,0x5a,0xda,0x3a,0xba,0x7a,0xfa,0x06,0x86,0x46,0xc6,0x26,0xa6,0x66,0xe6,0x16,0x96,0x56,0xd6,0x36,0xb6,0x76,0xf6,0x0e,0x8e,0x4e,0xce,0x2e,0xae,0x6e,0xee,0x1e,0x9e,0x5e,0xde,0x3e,0xbe,0x7e,0xfe,0x01,0x81,0x41,0xc1,0x21,0xa1,0x61,0xe1,0x11,0x91,0x51,0xd1,0x31,0xb1,0x71,0xf1,0x09,0x89,0x49,0xc9,0x29,0xa9,0x69,0xe9,0x19,0x99,0x59,0xd9,0x39,0xb9,0x79,0xf9,0x05,0x85,0x45,0xc5,0x25,0xa5,0x65,0xe5,0x15,0x95,0x55,0xd5,0x35,0xb5,0x75,0xf5,0x0d,0x8d,0x4d,0xcd,0x2d,0xad,0x6d,0xed,0x1d,0x9d,0x5d,0xdd,0x3d,0xbd,0x7d,0xfd,0x03,0x83,0x43,0xc3,0x23,0xa3,0x63,0xe3,0x13,0x93,0x53,0xd3,0x33,0xb3,0x73,0xf3,0x0b,0x8b,0x4b,0xcb,0x2b,0xab,0x6b,0xeb,0x1b,0x9b,0x5b,0xdb,0x3b,0xbb,0x7b,0xfb,0x07,0x87,0x47,0xc7,0x27,0xa7,0x67,0xe7,0x17,0x97,0x57,0xd7,0x37,0xb7,0x77,0xf7,140x0f,0x8f,0x4f,0xcf,0x2f,0xaf,0x6f,0xef,0x1f,0x9f,0x5f,0xdf,0x3f,0xbf,0x7f,0xff,};staticinlineunsignedchara(unsignedcharx){returnd[x];}unsignedshortb(unsignedshortx){return(a(x&0xff)<<8)|a(x>>8);}unsignedintc(unsignedintx){return(b(x&0xffff)<<16)|b(x>>16);}1、根据程序逻辑,下面的结果是:c(b(a(1)))=(1)a(b(c(1)))=(2)答案(每项1分):(1)0x800000(2)0说明:考察信息表示和程序理解2、填写下面反汇编中的缺失的内容:(数组d的地址为0x6009a0)(ᨀ示:注意反汇编格式与汇编格式有所区别)00000000004004d0<b>:4004d0:mov%edi,%eax4004d2:movzbl%dil,%edx154004d6:movzbl0x6009a0(%rdx),%edx4004dd:movzbl%ah,(1)4004e0:movzbl0x6009a0(%rax),%eax4004e7:shl(2),%edx4004ea:or%edx,%eax4004ec:retq00000000004004f0<c>:4004f0:mov%edi,%eax4004f2:push(3)4004f3:mov%edi,%ebx4004f5:shr(4),%eax4004f8:movzbl%bh,%ebx4004fb:movzbl%al,(5)4004fe:movzbl%ah,(6)400501:movzbl0x6009a0(%rdx),%edx400508:movzbl0x6009a0(%rax),%eax40050f:shl(7),%edx400512:or%edx,%eax400514:movzbl%dil,%edx400518:movzbl0x6009a0(%rdx),%ecx40051f:movzbl0x6009a0(%rbx),%edx400526:movzwl%ax,%eax400529:pop(3)40052a:shl$0x8,%ecx40052d:or%ecx,%edx40052f:shl$0x10,%edx400532:or%edx,(8)400534:retq答案(每项1分):(1)%eax(2)$0x8(3)%rbx16(4)$0x10(5)%edx(6)%eax(7)$0x8(8)%eax说明:考察汇编程序理解17得分第三题(10分)处理器如图所示,每个模块表示一个单独的组合逻辑单元,每个单元的延迟已在图中标出。通过在两个单元间添加寄存器的方式,可以对该数据通路进行流水化改造。假设每个寄存器的延迟为20ps。注意,由于电路互联特点A与B之间如果插入寄存器,B本身的延迟将增加到50ps。A60psB40psC50psF70psE50psD30psREG20ps1)如果改造为一个二级流水线(只插入一个寄存器),为获得最大的吞吐率,该寄存器应在哪里插入?请计算该流水线的吞吐率,并说明计算过程。结果可以是分数形式也可以是小数形式。插入在CD间(1分)1000/(60+40+50+20)=1000/170=5.88GIPS(过程和结果1分)2)如果改造为一个三级流水线(插入两个寄存器),为获得最大的吞吐率,寄存器应在哪里插入?请计算该流水线的吞吐率,并说明计算过程。结果可以是分数形式也可以是小数形式。插入在BC间和DE间(1分)1000/(50+70+20)=1000/140=7.143GIPS(过程和结果1分)3)如果改造为一个四级流水线(插入三个寄存器),为获得最大的吞吐率,寄存器应在哪里插入?请计算该流水线的吞吐率,并说明计算过程。结果可以是分数形式也可以是小数形式。插入AB间、CD间、EF间(1分)1000/(50+50+20)=1000/120=8.33GIPS(过程1分,结果1分)4)不改变单元划分,为获得最大性能,该设计至少需要划分成几级?请计算对应18的吞吐率,并说明计算过程。结果可以是分数形式也可以是小数形式。至少划分成6级(1分)1000/(70+20)=1000/90=11.11GIPS(过程1分,结果1分)19得分第四题(10分)链接考虑如下3个文件:main.c,fib.c和bignat.c:/*main.c*/voidfib(intn);intmain(intargc,char**argv){intn=0;sscanf(argv[1],"%d",&n);fib(n);}/*fib.c*/#defineN16staticunsignedintring[3][N];staticvoidprint_bignat(unsignedint*a){inti;for(i=N-1;i>=0;i--)printf("%u",a[i]);/*printa[i]asunsignedint*/printf("\n");}voidfib(intn){inti,carry;from_int(N,0,ring[0]);/*fib(0)=0*/from_int(N,1,ring[1]);/*fib(1)=1*/for(i=0;i<=n-2;i++){carry=plus(N,ring[i%3],ring[(i+1)%3],ring[(i+2)%3]);if(carry){printf("Overflowatfib(%d)\n",i+2);exit(0);}}print_bignat(ring[n%3]);}另外,假设在文件bignat.c中定义了如下两个函数plus和from_int(具体定义略):20intplus(intn,unsignedint*a,unsignedint*b,unsignedint*c);voidfrom_int(intn,unsignedintk,unsignedint*a);1.(5分)对于每个程序中的相应符号,给出它的属性(局部或全局,强符号或弱符号)(ᨀ示:如果某表项中的内容无法确定,请画X。)main.c局部或全局?强或弱?fibmainfib.c局部或全局?强或弱?ringfibplus2.(3分)假设文件bignat.c被编译为一个静态库bignat.a,对于如下的gcc调用,会得到什么样的结果(请选择)?(A)编译和链接都正确(B)链接失败(原因是包含未定义的引用)(C)链接失败(原因是包含重复定义)命令结果(A,B或C)gcc-ofibmain.cfib.cbignat.agcc-ofibbignat.amain.cfib.cgcc-ofibfib.cmain.cbignat.a3.(2分)如果在文件fib.c中,程序员在声明变量ring时,不小心把它写成了:staticintring[3][N];会不会影响这些文件的编译、链接和运行结果?为什么?答案:1.(5分)对于每个程序中的相应符号,给出它的属性(局部或全局,强符号或弱符号)(ᨀ示:如果某表项中的内容无法确定,请画X。)21main.c局部或全局?强或弱?fib全局弱main全局强fib.c局部或全局?强或弱?ring局部Xfib全局强plus全局弱2.(3分)假设文件bignat.c被编译为一个静态库bignat.a,对于如下的gcc调用,会得到什么样的结果(请选择)?(A)编译和链接都正确(B)链接失败(原因是包含未定义的引用)(C)链接失败(原因是包含重复定义)命令结果(A,B或C)gcc-ofibmain.cfib.cbignat.aAgcc-ofibbignat.amain.cfib.cBgcc-ofibfib.cmain.cbignat.aA3.对编译、链接和执行结果都没有影响。因为signed和unsigned之间的转换不会改变整数的表示形式,因此函数调用会正常进行。22得分第五题(10分)虚拟存储Intel的IA32体系结构采用小端法和二级页表。其中两级页表的大小相同,页大小为4KB。一级页表和二级页表的表项结构相同,其中页表项后六位的含义如下。已知一级页表的地址为0x0c23b000,物理内存中的部分内容如下图所示。地址内容地址内容地址内容地址内容00023000E000023001BE00023002EF00023003BE000231208300023121C800023122FD0002312312000232002300023201FD00023202BC00023203DE0002332033000233212900023322E500023323D200023FF82900023FF9FF00023FFADE00023FFBBC000550040300055005D0000550067400055007890005545C970005545DC20005545E7B0005545F45000554609700055461D2000554627B0005546345000554649700055465E2000554667B00055467450C23B020550C23B021EB0C23B022AE0C23B023240C23B040550C23B041AB0C23B0422A0C23B043010C23B080050C23B0815D0C23B082050C23B083000C23B09D050C23B09ED30C23B09FF20C23B0A00F0C23B274050C23B2753D0C23B276020C23B277000C23B9FC250C23B9FDD20C23B9FE140C23B9FF232314D200232314D201122314D202DC2314D2030F2314D220A92314D221452314D222132314D223D2232314D4A0BD2314D4A1BC2314D4A2882314D4A3D32314D890002314D8912D2314D892B32314D8930024AEE0010724AEE002A024AEE0033724AEE004C224AEE520D124AEE521DA24AEE5228C24AEE523B529DE25040229DE2505AD29DE2506FF29DE25075629DE4400D029DE44015C29DE4402B429DE44032A29DE94020029DE94032029DE94047329DE9405D429DEE500B029DEE501CD29DEE5022329DEE5031ATLB采用直接映射,TLB的内容如下所示。索引TLB标记内容有效位00x080012314d220110x0100024aee520020x005AE00055004030x016BA0c23b09d140x0AA000005545c150x0000A29dee500060x5AE8200023320170x28DFC0002300011.(2分)某用户态进程试图写入虚拟地址:0x080016ba。该访问的最后结果是______。(a)该进程成功写入,未触发异常(b)该进程触发了一个缺页异常(c)该进程触发了一个非法访问异常2.(2分)下面᧿述了具体的访问过程,请填空。如果某个空在访问过程中已不可用,请填入“--”TLB的索引为______,访问为(a)命中(b)不命中(请勾选)。1.1一级页表表项地址为_______________。(2分)1.2二级页表表项地址为______________。(2分)1.3最后物理地址为______________。(2分)答案:1.(c),2.11(b),2.20x0C23B080,2.30x00055004,2.48974D6BA说明:联合考察虚存、高速缓存(通过TLB考察)、大端法和小端法的知识。“具体的访问过程”在哪里,这里是不是少了一些内容?答案的编号和题目不对应第三位是024得分第六题(10分)ECF1.(5分)以下程序运行时系统调用全部正确执行,buffer.txt文件的内容为pekinguniv。请给出代码运行后打印输出的结果,并给出程序运行结束后buffer.txt文件的内容。#include<stdio.h>#include<stdlib.h>#include<fcntl.h>#include<unistd.h>intmain(){charc;intfile1=open("buffer.txt",O_RDWR);intfile2;read(file1,&c,1);file2=dup(file1);write(file2,&c,1);printf("1=%c\n",c);intpid=fork();if(pid==0){read(file1,&c,1);write(file2,&c,1);printf("2=%c\n",c);read(file1,&c,1);printf("3=%c\n",c);close(file1);exit(0);}else{waitpid(pid,NULL,0);close(file2);dup2(file1,file2);read(file2,&c,1);write(file2,&c,1);printf("4=%c\n",c);}return0;}答案:251=p2=k3=n4=gbuffer.txt文件内容为ppkknggniv2.(5分)某程序员实现了一个课程实验用的操作系统ICSNIX,其系统函数sleep用以下代码实现。请分析该代码存在哪些问题。1#include<signal.h>2#include<unistd.h>3staticvoidsig_alrm(intsigno)4{5/*nothingtodo,justreturntowakeupthepause*/6}78unsignedintsleep(unsignedintseconds)9{10if(signal(SIGALRM,sig_alrm)==SIG_ERR)11return(seconds);1213alarm(seconds);/*startthetimer*/14pause();/*nextcaughtsignalwakesusup*/15return(alarm(0));/*turnofftimer,returnunslepttime*/16}答案:(三个问题若只回答了1个或2个则每个2分,全部回答了得5分)问题1)由于操作系统调度的原因,alarm信号触发时,pause可能还未执行,导致sleep调用永不会返回。问题2)如果应用程序在调用sleep之前已经调用了alarm,则sleep中的alarm调用会取消之前设置的alarm闹钟。(若用户调用alarm(5);sleep(10);则第5秒sleep就应该唤醒;若用户调用alarm(20);sleep(10);则sleep在10秒返回后,再过10秒应继续产生一个SIGALRM信号。)问题3)sleep的signal调用改变了整个程序的SIGALRM信号处理方式。因此sleep应该保留signal的返回值(旧的SIGALRM信号处理程序),并在返回前恢复该值。26得分第七题(10分)系统I/O(用作试卷题目时,请把红字和红色箭头全部删去)请阅读下面的代码:1:2:3:4:5:6:7:8:9:10:11:12:13:14:15:16:17:18:19:intmain(intargc,char**argv){intfd1=open("ICS.txt",O_CREAT|O_RDWR,S_IRUSR|S_IWUSR);write(fd1,"abc",3);intfd2=fd1;intfd3=dup(fd2);intfd4=open("ICS.txt",O_APPEND|O_RDWR);write(fd2,"defghi",6);write(fd4,"xyz",3);intfd5=fd4;dup2(fd3,fd5);write(fd4,"pqr",3);close(fd1);return0;}1.(6分)请填写在第15行代码刚刚执行完之后,下面的打开文件表和v-node表中表项的部分值,并画出表项之间的指向关系。答案:初始时,ICS.txt文件不存在。程序执行时,所有的系统调用均会成功,所有表项均会从上到下依次分配,᧿述符表一开始被占用掉前3个表项。对于已经释放的打开文件表表项,请填写释放前那一刻的值和指向的v-node表表项。对于多余的表项,请直接忽略。27说明:考查三层表结构的基本概念,以及UnixI/O的基本用法。因为第8章出题会融合第10章内容,所以没涉及到第8章内容。错一空或者多/少填一空,扣1分。多画/少画一个箭头扣1分。扣完为止。2.(2分)请填写在第15行代码刚刚执行完之后,下列变量的值。fd1fd2fd3fd4fd533455说明:错1空扣1分,扣完为止。3.请写出程序执行完之后,ICS.txt文件中的内容(2分)abcdefghipqr说明:写成abcxyzghipqr给1分,出现此错误是因为不熟悉O_APPEND用法。这是一个图片,无法删除红色的部分。建议用表格画出28得分第八题(10分)网络1.(1分)以下问题默认为IPv4协议。一个服务器拥有四个独立的固定IP地址,那么它在web应用端口80,理论上可以最多再监听______个来自一个客户端独立的socket连接(客户端只有一个固定IP地址)。答案:32,16,4*216–4服务器端客户端结果4个独立固定IP一个32位固定IP任意16位portnumber(4*216–4),因为80端口本身已用于监听端口或者(4*216–4*well-known端口数)2.(2分)在client-server模型中,一个连接(connection)可以由IP地址,端口号的组合来表示。假设客户端IP地址为162.105.192.178,内网IP为192.168.100.121。HTTP服务器端IP地址为208.216.181.15。服务器使用的是默认监听端口号。指出下面这个网页浏览器应用的Connectionsocketpair有什么错误,并简要说明原因?客户端IP:端口号服务器端IP:端口号192.168.100.121:15321208.216.181.15:25答案:192.168.100.121不对,原因:不能用内网IP;25应该是80,原因:网页浏览器应用的默认监听端口是80端口。3.(4分)在EchoServer程序中,客户端(Client)与服务器端(Server)通过socket进行一系列的命令和数据交互。注意:客户端Connect命令包含在其Open_clientfd命令中。题目中只有一个空格,这么多答案如何对应?29请在下图中用单向箭头标出这些交互步骤。例如,当Client给Server端发送某个命令或者数据时,则需要在Client端相应代码行,朝向Server端相应代码行画一条单向箭头。答案:clientfd=Open_clientfd(host,port);--------Æconnfd=Accept(listenfd,(SA*)&clientaddr,&clientlen);Rio_writen(clientfd,buf,strlen(buf));--------Æwhile((n=Rio_readlineb(&rio,buf,MAXLINE))!=0)Rio_readlineb(&rio,buf,MAXLINE);Å-----------Rio_writen(connfd,buf,n);Close(clientfd);-----------ÆClose(connfd);304.关于TinyServer程序,请回答下列问题。a.(1分)下面这段服务器代码用来生成内容的文件是哪个参数?b.(1分)所生成的内容是静态还是动态?请简述原因。c.(1分)如果支持多个客户端请求,下面程序需要添加一个什么功能?/*ReturnfirstpartofHTTPresponse*/sprintf(buf,"HTTP/1.0200OK\r\n");Rio_writen(fd,buf,strlen(buf));sprintf(buf,"Server:TinyWebServer\r\n");Rio_writen(fd,buf,strlen(buf));/*RealserverwouldsetallCGIvarshere*/setenv("QUERY_STRING",cgiargs,1);Dup2(fd,STDOUT_FILENO);/*Redirectstdouttosocketandclient*/Execve(filename,emptylist,environ);/*RunCGIprog*/答案a.filenameb.动态,因为调用了exec函数启动新的程序(execve执行文件),而非静态filenamec.可以通过多进程、多线程或IO多路复用进行更改31得分第九题(10分)并发注:现在是11分桌子上有一个水果盘,能容纳一个水果。一家四口人:爸爸、妈妈、儿子、女儿。爸爸专门往盘子里放苹果,妈妈专门往盘子里放桔子;儿子专等盘子里的苹果吃,女儿专等盘子里的桔子吃。dad(){while(1){准备好一个苹果;①往果盘中放苹果;②}}mom(){while(1){准备好一个桔子;③往果盘中放桔子;④}}boy(){while(1){⑤从果盘中拿走苹果;⑥吃苹果;}}girl(){while(1){从果盘中拿走桔子;⑦吃桔子;⑧}}现在本题是11分,可否变成10分。例如,可否考虑第2小题中将一个步骤变成提示,从而变成7个得分点?321.(3分)请设计若干信号量,给出每一个信号量的作用和初值。参考答案:plate:互斥信号量,标识能否往果盘中放入水果,其初值为1。apple:信号量,标识果盘中是否有苹果,其初值为0。orange:信号量,标识果盘中是否有桔子,其初值为0。2.(8分)请将信号量上对应的PV操作填写在代码中适当位置。参考答案:①P(plate);②V(apple);③P(plate);④V(orange);⑤P(apple);⑥V(plate);⑦P(orange);⑧V(Plate); 第一题单项选择题(每小题1分,共20分)目前共27题 第二题(10分)汇编 第三题(10分)处理器 第四题(10分)链接 第五题(10分)虚拟存储 第六题(10分)ECF
/
本文档为【ICS2014期末-北京大学信息科学技术学院考试试卷-计算机系统导论】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
热门搜索

历史搜索

    清空历史搜索