2017-2018-1 20155203 《信息安全系统设计基础》第八周学习总结
2017-2018-1 20155203 《信息安全系统设计基础》第8周学习总结
教材学习内容总结
第11章
- 客户端-服务器编程模型
-
一个应用是由一个服务器进程和一个或多个客户端进程组成
-
服务器进程 -> 管理某种资源 -> 通过操作这种资源来为它的客户端提供某种服务
- 全球IP因特网
- TCP/IP协议族
- 因特网的客户端和服务器混合使用套接字接口函数和UnixI/O函数进行通信
- 把因特网看做一个世界范围的主机集合,满足以下特性:
主机集合被映射为一组32位的IP地址
这组IP地址被映射为一组称为因特网域名的标识符
因特网主机上的进程能够通过连接和任何其他主机上的进程
- IP地址的转化和系统调用
- socket()函数
- web服务器
- 服务器和客户端的实现
第12章
- 基于进程的并发编程
- 构造并发服务器的自然方法就是,在父进程中接受客户端连接请求,然后创建一个新的子进程来为每个新客户端提供服务。
- 因为父子进程中的已连接描述符都指向同一个文件表表项,所以父进程关闭它的已连接描述符的拷贝是至关重要的,而且由此引起的存储器泄露将最终消耗尽可用的存储器,使系统崩溃。
- 基于进程的并发echo服务器的重点内容:
需要一个SIGCHLD处理程序,来回收僵死子进程的资源。
父子进程必须关闭各自的connfd拷贝。对父进程尤为重要,以避免存储器泄露。
套接字的文件表表项中的引用计数,直到父子进程的connfd都关闭了,到客户端的连接才会终止。
- 进程的模型:共享文件表,但不是共享用户地址空间。
- 进程的优劣:
优点:一个进程不可能不小心覆盖两一个进程的虚拟存储器。
缺点:独立的地址空间使得进程共享状态信息变得更加困难。进程控制和IPC的开销很高。
Unix IPC是指所有允许进程和同一台主机上其他进程进行通信的技术,包括管道、先进先出(FIFO)、系统V共享存储器,以及系统V信号量。
- I/O多路复用
- echo服务器必须响应两个相互独立的I/O时间:
网络客户端发起连接请求
用户在键盘上键入命令行
- I/O多路复用技术的基本思路:使用select函数,要求内核挂起进程,只有在一个或多个I/O事件发生后,才将控制返回给应用程序。
- 将描述符集合看成是n位位向量:b(n-1),……b1,b0 ,每个位bk对应于描述符k,当且仅当bk=1,描述符k才表明是描述符集合的一个元素。可以做以下三件事:
分配它们;
将一个此种类型的变量赋值给另一个变量;
用FDZERO、FDSET、FDCLR和FDISSET宏指令来修改和检查它们。
- 基于线程的并发编程
- 线程:运行在进程上下文中的逻辑流。
- 线程有自己的线程上下文,包括一个唯一的整数线程ID、栈、栈指针、程序计数器、通用目的寄存器和条件码。所有运行在一个进程里的线程共享该进程的整个虚拟地址空间。
- 线程执行模型
主线程:每个进程开始生命周期时都是单一线程。
对等线程:某一时刻,主线程创建的对等线程 。
教材学习中的问题和解决过程
- 问题一:线程出现的意义?
- 问题一解决方案:
多进程方式使用fork生成子进程存在一些问题。
首先,fork占用大量的资源,内存映像要从父进程拷贝到子进程,所有描述符要在子进程中复制;
其次,fork子进程后,需要用进程间通信在父进程和子进程间传递信息,从子进程返回信息给父进程需要做较多的工作。
多线程有助于解决以上两个问题。
线程是进程内的独立执行实体和调度单元,又称为“轻量级”进程(lightwightprocess);
创建线程比进程快10~100倍。一个进程内的所有线程共享相同的内存空间、全局变量等信息(这种机制又带来了同步问题)
代码调试中的问题和解决过程
- 问题一:sprintf函数使用容易使程序崩溃;;
- 问题一解决方案:
关于这个问题主要是应该注意在使用字符串分配存储空间的问题还有格式化的类型
代码托管
(statistics.sh脚本的运行结果截图)
上周考试错题总结
有关gdb调试汇编,下面说法正确的是()
A .
可以用disas反汇编当前函数
B .
以16进制形式打印%rax中内容的命令是 print /x $rax
C .
可以用info registers查看所有寄存器的值
D .
可以用info frame 查看所有栈帧的信息
E .
可以使用up,down切换栈帧
正确答案:A B C E
有关移位指令,下面说法正确的是()
A .
SAL和SHL效果一样
B .
移位量只能是一个立即数
C .
移位量可以放在%cl中
D .
移位量可以放在%cx中
E .
SAR和SHR效果一样
正确答案:A C
假设%rax中的值为x, %rcx中的值为y,关于leaq指令,下面正确的()
A .
leaq 6(%rax), %rdx; %rdx中值为6+x
B .
leaq 6(%rax), %rdx; %rdx中值为6x
C .
leaq 7(%rax, %rax,8), %rdx; %rdx中值为9x
D .
leaq 7(%rax, %rax,8), %rdx; %rdx中值为63x
E .
leaq 7(%rax, %rax,8), %rdx; %rdx中值为15x
正确答案:A C
本周结对学习情况
-
结对学习内容
互相学习吧,大家在编程的时候各有长短
第八周课下作业链接
其他(感悟、思考等,可选)
反正只要不停的编总有一天会明白的啊
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 200/200 | 1/1 | 6/6 | |
第三周 | 156/388 | 2/3 | 15/21 | 这周除课堂实践外,大多数都是知识性的学习内容,代码量确实太少从下周起就要抓紧了 |
第四周 | 156/388 | 3/6 | 15/36 | 每天100行好难啊,不过感觉找到了学习的一些动力。在调试代码上花的时间太多,都要没时间看书了,还要继续改进 |
第五周 | 284/ 745 | 1/7 | 15/51 | |
第七周 | 1812/ 2557 | 2/9 | 10/61 | |
第八周 | 564/ 3121 | 2/11 | 10/71 |
-
计划学习时间:10小时
-
实际学习时间:10小时