深入理解计算机系统第二版家庭作业答案_第1页
深入理解计算机系统第二版家庭作业答案_第2页
深入理解计算机系统第二版家庭作业答案_第3页
深入理解计算机系统第二版家庭作业答案_第4页
深入理解计算机系统第二版家庭作业答案_第5页
已阅读5页,还剩82页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

深入理解计算机系统第二版家庭作业答案深入理解计算机系统(第二版)家庭作业第二章略}unsignedreplace_byte(unsignedx,unsignedcharb,inti){return(x&~(0xFF<<(i<<3)))|(b}intint_shifts_are_arithmetic(){}?intxsrl=(unsigned)x>>k;unsignedright=mask&xsrl;unsignedleft=~mask&(~(z&xsrl)+z);}}}}}}unsignedrotate_right(unsignedx,intn){}}}intsaturating_add(intx,inty){intnovf=~(pos_ovf|neg_ovf);return(pos_ovf&INT_MAX)|(novf&ans)|(neg_ovf&INT_MIN);}}unsignedunsigned_high_prod(unsignedx,unsignedy){returnsigned_high_prod(x,y)+(x>>(w-1))*y+x*(y>>(w-1));}intuadd_ok(unsignedx,unsignedy){returnx+y>=x;}voidsigned_prod_result(intx,inty,int&h,int&l){intw=sizeof(int)<<3;h=0;l=(y&1)x:0;}}h=h+((x>>(w-1))*y)+((y>>(w-1}intdivide_power2(intx,inintw=sizeof(int)<<3;} ?intb0=x&1,b2=(x>>2)&1;}最小的正非规格化数最小的正规格化数最大的规格化数扩展精度值2^(-63)*2^(-2^14+2)2^(-2^14+2)(2^64-1)*2^(2^14-1-63)十进制+4932HexMEV0x80000-62最小的值>10x3F01257/2560257*2^(-8)0x470018 最大的非规格化数0x00FF255/256-62255*2^(-70)-inf0xFF00 Hex为0x3AA00x3AA0416/256416*2^(-13)=13*2^(-8)格式格式B值00100111000000000000值-9/16-7/10240-inf-9/16-7/10246/2^17-4096位011100011100000011000000000000000格式A位floatfpwr2(intx){unsignedexp,frac;unsignedu;exp=0;frac=0;exp=0;frac=0;}}}unsignedf2u(floatf){}boolis_float_equal(float_bitsf1,floatf2){returnf2u(f2)==f1;}unsignedexp=(fb>>23)&0}boolis_inf(float_bitsfb){unsignedexp=(fb>>23)&0xFF;returnexp==0xFF&&frac==0;}inttestFun(float_bits(*fun1)(float_bits),float(*fun2)(float)){unsignedx=0;深入理解计算机系统(第二版)家庭作业第三章{yx返回地址&s2(word_sum的返回值地址)传递结构体参数就像正常的传值。结构体的每一个变量可以看做是单独的参数进行传返回结构体的通用策略:将返回变量的地址看做voidproc(unionele*up){up->>=*(up->>-up->;}voidgood_echo(){intx=0;while(x=getchar(),x!='\n'&&x!=EOF){putchar(x);}}voidgood_echo(){constintBufferSize=10;while(fgets(s,BufferSize,stdin)!=NULL){putchar(s[i]);}return;}{longret=0;while(tp!=NULL){}}{{v=min(traverse(tp->left),traverse(tp->right));深入理解计算机系统(第二版)家庭作业第五章D.因为乘法不在关键路径上,乘法也是流水线执行的,其限制因素为吞吐量界限。整把执行指令写出了就明了了。浮点数的话,延迟是没问题。时间xmm1_add单xmm1mul单元发射load单元发rdx_add单rdx的56789整数mul延迟为3mul0mul0muladdedmul整数加法延迟为1addedvoidinner4(vec_ptru,vec_ptrv,data_t*dest){data_t*udata=get_vec_start(udata_t*vdata=get_vec_start(vdata_tsum=(data_t)0;for(i=0;i<limit;i++){}?}储udata[i],vdata[i]的寄存器,voidinner4(vec_ptru,vec_ptrv,data_t*dest){data_t*udata=get_vec_start(udata_t*vdata=get_vec_start(vdata_tsum=(data_t)0;for(i=0;i<limit;i++){intx1=udata[i]*vdata[i];}}void*optimized_memset(void*s,intc,size_tn){unsignedintK=sizeof(unsignedlong);unsignedchar*schar=(unsignedchar*)s;unsignedlong*lchar;unsignedlongfill=0;mCBESts1447241038184821516644mCBEStsb1819219424096448234096487244450x0120-0x0123-0x08A4-0x08A70x0704-0x0707 -0x064C-0x064F0x18F0-0x18F30x00B0-0x00B30x0E34-0x0E37 0x1238-0x123B -0x1BDC-0x1BDF操作读写读地址0x4090x40A0x833命中NoYesYes读出的值--块偏移CO0x00命中Yes返回值0xFA块偏移CO0x00命中No返回值-mhmhmmhmmhmhmmhmmmmmmmmmmmmmmmmmmhhhmhhhmhhhmhhhmhhhmhhhmhhhmhhh函数N=64N=60unsignedcalc_address(unsignedhead,inti,intj,i{}unsignedcalc_line(unsignedadd,intblock_size,constintline){return(add/block_size)%lin}intisHit(unsignedcache[],unsignedr,unsigneda,intblock_{a=a/block_size*block_size;unsignedtmp=cache[r];}voidtestA(intblock_size,constintline,unsignedadd,constint{unsignedcache[line];memset(cache,-1,sizeof(cachinthit=0,miss=0;for(inti=0;i<N;++i)for(intj=0;j<N;++j){unsignedaddress=calc_address(add,i,j,N);unsignedr=calc_line(address,block_size,lhit+=isHit(cache,r,address,block_size);}miss=N*N-hit;cout<<"sumA"<<hit<<""cout<<(double)miss/}voidtestB(intblock_size,constintline,unsignedadd,constint{unsignedcache[line];memset(cache,-1,sizeof(cachinthit=0,miss=0;for(intj=0;j<N;++j)for(inti=0;i<N;++i){unsignedaddress=calc_address(add,i,j,N);unsignedr=calc_line(address,block_size,line);hit+=isHit(cache,r,address,block_size);}miss=N*N-hit;cout<<"sumB"<<hit<<""cout<<(double)miss/}voidtestC(intblock_size,constintline,unsignedadd,constint{unsignedcache[line];memset(cache,-1,sizeof(cachinthit=0,miss=0;{N=60;a=calc_address(add,i,j,N);r=calc_line(a,block_size,line);hit+=isHit(cache,r,a,block_size);a=calc_address(add,i+1,j,Nr=calc_line(a,block_size,line);hit+=isHit(cache,r,a,block_size);a=calc_address(addr=calc_line(a,block_size,line);hit+=isHit(cache,r,a,block_size);a=calc_address(add,ir=calc_line(a,block_size,line);hit+=isHit(cache,r,a,block_size);}miss=N*N-hit;cout<<"sumC"<<hit<<""cout<<(double)miss/}{constunsignedstart_addressintline=cache_size/block_size;testA(block_size,line,start_address,N);testB(block_size,line,start_address,N);testC(block_size,line,start_address,N);testA(block_size,line,start_address,N);testB(block_size,line,start_address,N);testC(block_size,line,start_address,N);}dst[(j+1)*dim+i]=src[i*dim+j+1];如果加入运算,就可以想办法同时更新d深入理解计算机系统(第二版)家庭作业第七章符号条目符号类型定义符号的模块所属的节bufYesexternbufp0Yesglobalbufp1YesYesglobalNo YescountYes运行时存储器地址值0x080483CB0x0804945C16(buf[1])0x080483D00x080494580x080483D80x0804954818(buf[1])0x080483DC0x0804945823(bufp1)0x080483E70x08049548节偏移重定位类型符号名字0x12相对0x19绝对0x21相对节偏移0x04节偏移0x04符号名字x绝对),行号节偏移重定位类型符号名字行号节偏移重定位类型符号名字.rodata10x0,0x4,0x8,0xc,0x10,0x14绝对深入理解计算机系统(第二版)家庭作业第八章进程对ABACADBC是否并发NoYesYesYesBCYesBCYesHelloHello01Bye2ByeHello1Bye02ByeHello10Bye2Byeintmain(intargc,char*args[{VPN0x09TLB标记0x02TLB命中No缺页NoPPN0x17参数值字节偏移0x0缓存索引0xF缓存标记0x17缓存命中No返回缓存字节-VPN0x0ETLB索引0x02TLB标记0x03TLB命中No缺页NoPPN0x11字节偏移字节偏移缓存索引缓存标记缓存命中No-返回缓存字节-VPN0x01TLB索引0x01TLB标记0x00TLB命中No缺页YesPPN-#include<sys/>#include<sys/>#include<>#include<>#include<sys/>{9.char*start;fdfd=open("",O_RDWR,0);),结尾块向后延伸申请的空间,并将刚多出的空间作为一个空闲块。设我们基于以下假设:某个空闲块匹配,上一个和下一个一定不是空闲块(否则可以合如果要分割,则下一块的头部设置为(size-asize|0x010),不用合并,因为再下一最后,如果下一块已分配,则需要将下一块头部2.#include<>4.#defineMAX_HEAP(1<<24)5./*Privateglobalvariables*/6.staticchar*mem_heap;/*Pointstofirstbyteofheap*/7.staticchar*mem_brk;/*Pointstolastbyteofheapplus1*/8.staticchar*mem_max_addr;/*Maxlegalheapaddrplus1*/10.*mem_init-Initializethememorysystemmodel12.voidmem_init(voi14.mem_heap=(char*)malloc(MAX_HEAP);16.mem_max_addr=(char*)(mem_heap+MAX_HEAP);19.*mem_sbrk-Simplemodelofthesbrkfunction.Extendstheheap20.*byincrbytesandreturnsthestartaddressofthenewarea.In21.*thismodel,theheapcannotbeshrunk.23.void*mem_sbrk(intinc25.char*old_brk=mem_brk;26.if((incr<0)||((mem_brk+incr)>mem_max_addr)){27.errno=ENOMEM;28.fprintf(stderr,"ERROR:mem_sbrkfailed.Ranoutofmemory...\n");29.return(void*)-1;31.mem_brk+=incr;32.return(void*)old_brk;34.voidmem_end(void)/*addedbyzhanyu*/36.free(mem_heap);2./*Basicconstantsandmacros*/3.#defineWSIZE4/*Wordandheader/footersize(bytes)*/4.#defineDSIZE8/*Doublewordsize(bytes)*/5.#defineCHUNKSIZE(1<<12)/*Extendheapbythisamount(bytes)*/6.#defineMAX(x,y)((x)>(y)(x):(y))7./*Packasizeandallocatedbitintoaword*/9.if(size<=DSIZE)asize=DSIZE;10.elseasize=DSIZE*((size+(WSIZE)+(DSIZE-1))/DSIZE);11./*Searchthefreelistforafit*/12.if((bp=find_fit(asize))!=NULL){16./*Nofitfound.Getmorememoryandplacetheblock*/17.extendsize=MAX(asize,CHUNKSIZE);18.if((bp=extend_heap(extendsize/WSIZE))==NULL)returnNULL;22.staticvoidplace(void*bp,siz24.size_tcsize=GET_SIZE25.size_tnsize=GET_SIZE(HDRP(NEXT_BLKP(bp)));26.intprev_alloc=GET_PREVALLOC(HDRP(bp));27.intnext_alloc=GET_ALLOC(HDRP(NEXT_BLKP(bp)));28.if((csize-asize)>=(2*DSIZE)){29.PUT(HDRP(bp),PACK(asize,prev_alloc,1));30.PUT(FTRP(bp),PACK(asize,prev_alloc,1));31.bp=NEXT_BLKP(bp);32.PUT(HDRP(bp),PACK(csize-asize,1,0));33.PUT(FTRP(bp),PACK(csize-asize,1,0));36.PUT(HDRP(bp),PACK(csize,prev_alloc,1));37.PUT(HDRP(NEXT_BLKP(bp)),PACK(nsize,1,next_alloc));40.voidmm_end()/*addedbyzhanyu*/42.mem_end();中,最佳适配要搜索所有空间,所以肯定比首次适配是释放一个块时,能立即和前后空闲块合并。如果空闲块不按顺序排列的话,其实也能够和前一个或者后一个空闲块进行合并,但那需要搜索前后块在空闲链表中的位置,并且删除一个再进行合并。可以参考P576,2)d;块大小递增,那么最佳适配法找到的块和首次适配找到的块是同一个,因为最佳到,所以分配性能会很高。b,最佳适配方法无论怎样,都要搜索所有的链表(除非维深入理解计算机系统(第二版)家庭作业第十章intmain(intargc,char**a{Rio_readinitb(&rio,STDIN_FILENO);while((n=Rio_readnb(&rio,buf,MAXBUF))!=0)Rio_writen(STDOUT_FILENO,buf,n);}),Execve("fstatcheck",argv,envp}intmain(intargc,char**a{?dup2(fd,STDIN_FILENO);}Rio_readinitb(&rio,STDIN_FILENO);while((n=Rio_readlineb(&rio,buf,MAXLINE))!=0)Rio_writen(STDOUT_FILENO,buf,n);}深入理解计算机系统(第二版)家庭作业第十一章A.因为read_requesthdrs中已经打印出了请求报头,所以只要打印请求行即可printf("%s%s%s\n",method,uri,version);另外,如果要存成文件的话,可能需要另存为Accept:text/html,application/xhtml+xml,application/xml;q=,*/*;q=Accept-Language:en-US,eAccept-Encoding:gzip,deflateelseif(strstr(filename,".mpg")||strstr(filename,".mp4"))voidchild_signal(intsig){while((pid=waitpid(-1,NULL,WNOHANG))>0);}sprintf(content,"%sTheansweris:%d+%d=%d\r\n<p>",content,n1,n2,n1+n2);sprintf(content,"%sThanksforvisiting!\r\n",contenprintf("Content-length:%d\r\n",(int)strlen(content));printf("Content-type:text/html\r\n\r\n");}),#defineM_GET0#defineM_POST1#defineM_HEAD2voiddoit(intfd){intrmtd=0;charbuf[MAXLINE],method[MAXLINE],uri[MAXLINE],version[MAXLINE];charfilename[MAXLINE],cgiargs[MAXLINE];rio_trio;/*forpost*/charpost_content[MAXLINE];/*Readrequestlineario_readinitb(&rio,fd);rio_readlineb(&rio,buf,MAXLINE);printf("%s%s%s\n",method,uri,version);elseif(strcmp(method,"POST")==0)rmtelseif(strcmp(method,"HEAD")==0)rmtclienterror(fd,method,"501","NotImplemented",}contentLen=read_requesthdrs(&rio,post_content,rmtd);is_static=parse_uri(uri,filename,cgiargs);clienterror

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论