2017-2018-1 20155339 第八周课下作业

2017-2018-1 20155339 第八周课下作业

测试三

1.基于socket 使用教材的csapp.h csapp.c,实现daytime(13)服务器(端口我们使用13+后三位学号)和客户端
2.服务器响应消息格式是

客户端IP:XXXX
服务器实现者学号:XXXXXXXX
当前时间: XX:XX:XX

上方提交代码
3.提交一个客户端至少查询三次时间的截图测试截图
提交至少两个客户端查询时间的截图测试截图

过程与结果

  • 首先实现两个客户端的连接,学习了课本上的代码,并且实现,如下图。

  • 实现规定要求的客户端和服务器,我用的是书上的代码,所以只需要改一下echo函数,将其中的输出有多少字节改成输出指定内容,因为需要输出时间,所以我在csapp.h中加入了time.h头文件。运行结果如下

遇到的问题

  • 问题:在解决这道题中最主要的问题就是导入csapp.h头文件,一直出现问题。
  • 解决方法:上网搜索试了很多方法,也请教了成功了的同学,都不行。后来无奈之下自己改了一下csapp.h,问题终于解决了。

家庭作业

  • 4.47
    参考了教材4-20的图,练习了这道题

取指阶段 icode:ifun =M1[PC]= D:0
valP<-PC+1//下一条指令地址  
译码阶段:valB <- R[%ebp]//得到ebp的值,也就是新的栈指针esp的值  
执行阶段:valE <- valB+4//栈指针的值加4  
访存阶段:valM <-M4[valB]//读ebp中的值  
写回阶段:R[%esp] <- valE //把更新后的指针赋值给esp  
R[%ebp] <- valM//弹出的ebp的值  
  • 4.48
取指阶段:icode:ifun = M1[PC] = C:0 
rA:rB <- M1[PC+1]
valC <- M4[PC+2]
valP <- PC+6   
译码阶段:valB <- R[rB]   
执行阶段:valE <- valB+valC
SetCC
访存阶段 
写回阶段  R[rB] <- valE 

多进程与多线程

多进程实现daytime

实现过程

  • 进程,是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概念,竟争计算机系统资源的基本单位。每一个进程都有一个自己的地址空间,即进程空间或(虚空间)。
  • 通过多进程实现daytime,需要用到fork()函数来创建子进程,由于fork()函数会调用父进程fork()函数之后的内容,因此每个客户端可以实现同一个服务器的同一服务。
  • 代码链接

实现结果

  • 服务器

  • 客户端一

  • 客户端二

多进程实现daytime

  • 虽然通过进程节省了一笔内存的开销,但是比起进程还是会有些差距,进程对内存的开销更小。

基础知识

  • 线程就是把一个进程分为很多片,每一片都可以是一个独立的流程。
  • Linux下创建一个线程可以调用pthread_create()函数来创建线程,int pthread_create(pthread_t *restrict tidp, const pthread_attr_t *restrict attr, void *(*start_rtn)(void), void *restrict arg);,其中第一个参数为指向线程标识符的指针。
    第二个参数用来设置线程属性。
    第三个参数是线程运行函数的起始地址。
    最后一个参数是运行函数的参数。

实现过程

  • 对于前面两种情况下的代码进行改进,调用了pthread_create()函数来运行多线程。

代码链接

实现结果

  • 服务器

  • 客户端一号

  • 客户端二号

遇到的问题

  • 问题一:当编辑的时候,提示如下问题

  • 解决方法:编译的时候加上-lpthread,问题得打解决。

posted @ 2017-11-12 15:35  20155339平措卓玛  阅读(423)  评论(0编辑  收藏  举报