# 2017-2018-1 20155319 课堂实践及补充

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了# 2017-2018-1 20155319 课堂实践及补充相关的知识,希望对你有一定的参考价值。

教材学习内容总结
第11章 网络编程

网络应用随处可见。任何时候你浏览Web、发送Email或者弹出一个X window,你就正在使用一个网络应用程序。有趣的是,所有的网络应用都是基于相同的基本编程模型有着相似的整体逻辑结构,并且依赖相同的编程接口。
网络应用依赖于很多在系统研究中已经学习过的概念,例如,进程、信号、字节器映射以及动态存储分配,都扮演着重要的角色。还有一些新概念要掌握。我们需要理解基本的客户端-服务器编程模型,以及如何编写使用因特网提供的服务的客户端―服务器程序。最后,我们将把所有这些概念结合起来,开发一个小的但功能齐全的Web的服务器,能够为真实的Web,浏览器提供静态和动态的文本和图形内容。
第十二章 并发编程
三种基本的构造并发程序的方法:

1.进程

每个逻辑控制流是一个进程,由内核进行调度,进程有独立的虚拟地址空间

2.I/O多路复用

逻辑流被模型化为状态机,所有流共享同一个地址空间

3.线程

运行在单一进程上下文中的逻辑流,由内核进行调度,共享同一个虚拟地址空间

12.1 基于进程的并发编程

12.1.1 基于进程的并发服务器
?
使用SIGCHLD处理程序来回收僵死子进程的资源。

?
父进程必须关闭他们各自的connfd拷贝(已连接的描述符),避免存储器泄露。

?
因为套接字的文件表表项中的引用计数,直到父子进程的connfd都关闭了,到客户端的连接才会终止。

12.1.2 关于进程的优劣

1.优点:防止虚拟存储器被错误覆盖

2.缺点:开销高,共享状态信息才需要IPC机制

12.2 基于i/o多路复用的并发编程

使用select函数,要求内核挂起进程,只有在一个或多个I/O事件发生后,才将控制返回给应用程序。

int select(int n,fd_set *fdset,NULL,NULL,NULL);
返回已经准备好的描述符的非0的个数,若出错则为-1。

select函数处理类型为fd_set的集合,叫做描述符集合,看做一个大小为n位的向量:

bn-1,......,b1,b0

12.2.1 基于i/o多路复用的并发事件驱动服务器
?
I/O多路复用可以用作事件并发驱动程序的基础。

?
状态机:一组状态、输入事件、输出事件和转移。

?
自循环:同一输入和输出状态之间的转移。

注意:

init_pool:初始化客户端池
add_client:添加一个新的客户端到活动客户端池中
check_clients:回送来自每个准备好的已连接描述符的一个文本行

12.2.2 i/o多路复用技术的优劣

1.优点
?
相较基于进程的设计,给了程序员更多的对程序程序的控制

?
运行在单一进程上下文中,所以每个逻辑流都可以访问该进程的全部地址空间,共享数据容易实现

?
可以使用GDB调试

?
高效

2.缺点
?
编码复杂

?
不能充分利用多核处理器

12.3 基于线程的并发编程

每个线程都有自己的线程上下文,包括一个线程ID、栈、栈指针、程序计数器、通用目的寄存器和条件码。所有的运行在一个进程里的线程共享该进程的整个虚拟地址空间。由于线程运行在单一进程中,因此共享这个进程虚拟地址空间的整个内容,包括它的代码、数据、堆、共享库和打开的文件。

1.线程执行模型

每个进程开始生命周期时都是单一线程(主线程),在某一时刻创建一个对等线程,从此开始并发地运行,最后,因为主线程执行一个慢速系统调用,或者被中断,控制就会通过上下文切换传递到对等线程。

2.Posix线程

Posix线程是C语言中处理线程的一个标准接口,允许程序创建、杀死和回收线程,与对等线程安全的共享数据。

线程的代码和本地数据被封装在一个线程例程中。

以上是关于# 2017-2018-1 20155319 课堂实践及补充的主要内容,如果未能解决你的问题,请参考以下文章

2017-2018-1 20155307 20155319 实验四 木马及远程控制技术

# 2017-2018-1 20155319 《信息安全系统设计基础》第十一周学习总结

2017-2018-1 《信息安全系统设计基础》 20155322 十六周课上实践

# 20155337 2017-2018 1 课上测试课下作业实验

20155319 课堂测试题补充提交

# 2017-2018-2 20155319 『网络对抗技术』Exp8:Web基础