2017-2018-1 20155318 《信息安全系统设计基础》第十三周学习总结
- 完成这一章所有习题
- 详细总结本章要点
- 给你的结对学习搭档讲解你的总结并获取反馈
- 参考上面的学习总结模板
教材学习内容总结
- 客户端-服务器编程模型
- 一个服务器进程 -> 管理某种资源 -> 通过操作这种资源来为它的客户端提供某种服务
- 一个或多个客户端进程,客户端和服务器都是进程
- 网络
- 对主机而言:网络是一种I/O设备,通过DMA(直接存储器存取方式)传送:从网络上接收到的数据从适配器经过I/O和存储器总线拷贝到存储器
- 协议:互联网由采用不同技术,互不兼容的局域网和广域网组成,并能使其相互通信。其中不同网络相互通信的解决办法是一层运行在每台主机和路由器上的协议软件,消除不同网络的差异。
- 协议提供的两种基本能力
- 命名机制:唯一的标示一台主机
- 传送机制:定义一种把数据位捆扎成不连续的片的同一方式
- CP/IP协议族:混合使用套接字接口函数和UnixI/O函数进行通信
- 世界范围的主机集合特性:
- 主机集合被映射为一组32位的IP地址
- 这组IP地址被映射为一组称为因特网域名的标识符
- 因特网主机上的进程能够通过连接和任何其他主机上的进程
- Web服务器
- HTTP (Hypertext Transfer Protocol,超文本传输协议):Web 客户端和服务器之间交互时用的一个基于文本的应用级协议。
- 一个 html 程序(页)包含指令(标记),它们告诉浏览器如何显示这页中的各种文本和图形对象。
- Web 服务器以两种不同的方式向客户端提供内容:
取一个磁盘文件,并将它的内容返回给客户端。磁盘文件称为静态内容 (static content), 而返回文件给客户端的过程称为服务静态内容 (serving static content)。 运行一个可执行文件,并将它的输出返回给客户端。运行时可执行文件产生的输出称为态内容 (dynamic content),而运行程序并返回它的输出到客户端的过程称为服务动态内容 (serving dynamic content)。
- 并发
- 并发程序:使用应用级并发的应用程序。
- 三种基本构造方法:
- 进程
- I/O多路复用
- 线程
- 基于进程的并发编程
- 在父进程中接受客户端连接请求后,创建一个新的子进程来为每个新客户端提供服务。
- 服务器会运行较长时间,需用SIGCHLD 处理程序回收僵死 (zombie) 子进程的资源
- 优缺点:
父、子进程间共享状态信息,但不共享用户地址空间。- 优点:一个进程不可能不小心覆盖另一个进程的虚拟存储器
- 缺点:独立的地址空间使得进程共享状态信息变得更加困难,进程控制和 IPC 的开销很高,速度变慢。
- 线程
- 主线程:每个进程开始生命周期时都是单一线程,在某一时刻,主线程创建一个对等线程 ,从这个时间点开始,两个线程就并发地运行。最后,因为主线程执行一个慢速系统调用。或者因为它被系统的间隔计时器中断, 控制就会通过上下文切换传递到对等线程。对等线程会执行一段时间,然后控制传递回主线程,依次类推。
- 创建:pthread_create 函数,一个输入变量arg,能用attr参数来改变新创建线程的默认属性。
- 终止:通过调用 pthreadexit 函数,线程会显式地终止。如果主线程调用 pthreadexit , 它会等待所有其他对等线程终止,然后再终止主线程和整个进程,返回值为 thread_return。
- 回收:线程通过调用 pthread_join 函数等待其他线程终止,pthreadjoin 函数会阻塞,直到线程 tid 终止,将线程例程返回的 (void*) 指针赋值为 threadreturn 指向的位置,然后回收己终止线程占用的所有存储器资源。
- 分离
- 初始化:pthread_once 函数
- 一个基于线程的并发服务器
- 调用 pthread_ create 时,如何将已连接描述符传递给对等线程
借助结构体可以把所有的函数化成万能函数的等价形式。
void * func( void * parameter) typedef void* (*uf)(void * para)
- fflush(stdout):在printf()后使用fflush(stdout)将要输出的内容输出。
当使用printf()函数后,系统将内容存入输出缓冲区,等到时间片轮转到系统的输出程序时,将其输出。 pthread_join()函数:以阻塞的方式等待thread指定的线程结束。
- 读者—写者问题:
- 读者优先,要求不让读者等待,除非已经把使用对象的权限赋予了一个写者。
- 写者优先,要求一旦一个写者准备好可以写,它就会尽可能地完成它的写操作。
- 饥饿就是一个线程无限期地阻塞,无法进展。
教材学习中的问题和解决过程
(一个模板:我看了这一段文字 (引用文字),有这个问题 (提出问题)。 我查了资料,有这些说法(引用说法),根据我的实践,我得到这些经验(描述自己的经验)。 但是我还是不太懂,我的困惑是(说明困惑)。【或者】我反对作者的观点(提出作者的观点,自己的观点,以及理由)。 )
- 问题1:XXXXXX
- 问题1解决方案:XXXXXX
- 问题2:XXXXXX
- 问题2解决方案:XXXXXX
- ...
代码调试中的问题和解决过程
- 问题1:XXXXXX
- 问题1解决方案:XXXXXX
- 问题2:XXXXXX
- 问题2解决方案:XXXXXX
- ...
代码托管
上周考试错题总结
错1-7图
结对及互评
本周结对学习情况
其他(感悟、思考等)
本周通过学习虚拟存储器的相关知识,对于计算机系统中存储器部分又有了更深一步的了解。虚拟存储器在现代操作系统中作用很重要
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 0/0 | 1/1 | 3/3 | |
第二周 | 100/100 | 1/2 | 3/6 | |
第三周 | 300/400 | 1/3 | 4/10 | |
第四周 | 0/400 | 2/5 | 2/12 | |
第五周 | 25/425 | 1/6 | 4/16 | |
第六周 | 181/606 | 3/9 | 10/26 | |
第七周 | 201/807 | 2/11 | 7/33 | |
第八周 | -(包括脚本无意义)/6719 | 2/13 | 7/40 | |
第九周 | 396/7115 | 3/16 | 4/44 | |
第十周 | 1160/8275 | 2/18 | 4/49 | |
第十一周 | 135/8410 | 3/21 | 5/54 | |
第十三周 | 317/8727 | 1/22 | 8/62 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
计划学习时间:5小时
实际学习时间:8小时
改进情况:
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)