20145303 《信息安全系统设计基础》第13周学习总结

21045303 《信息安全系统设计基础》第13周学习总结

教材学习内容总结

•一个应用是由一个服务器进程和一个或者多个客户端进程组成的
•一个客户端-服务器事务由四步组成:
(1)当一个客户端需要服务时,向服务器发送一个请求,发起一个事务
(2)服务器收到请求后,解释它,并以适当的方式操作它的资源
(3)服务器给客户端发送一个相应,并等待下一个请求
(4)客户端收到响应并处理它
•物理上,网络是一个按照地理远近组成的层次系统:最低层是LAN(局域网),迄今为止,最流行的局域网技术是以太网
•在层次较高的级别中,多个不兼容的局域网可以通过路由器连接起来,组成互联网络
•协议提供的两种基本能力:
命名机制:每台主机会被分配至少一个这种互联网地址,该地址唯一的标示一台主机。
传送机制:定义一种把数据位捆扎成不连续的片的统一方式
•因特网的客户端和服务器混合使用套接字接口函数和UnixI/O函数进行通信
•TCP/IP实际上是一个协议族
•套接字接口是一组函数,用以创建网络应用
•socket函数:客户端和服务端使用socket函数来创建一个套接字描述符
•connect函数:建立和服务器的连接
•open_clientfd函数:将socket和connect函数包装而成。客户端可以用它来和服务器建立连接
•Web客户端和服务器之间的交互用的是一个基于文本的应用级协议,叫做 HTTP (Hypertext Transfer Protocol,超文本传输协议)
•HTTP 是一个简单的协议。一个 Web 客户端(即浏览器) 打开一个到服务器的因特网连接,并且请求某些内容。服务器响应所请求的内容,然后关闭连接。浏览器读取这些内容,并把它显示在屏幕上
•Web 服务器以两种不同的方式向客户端提供内容:
(1)取一个磁盘文件,并将它的内容返回给客户端。磁盘文件称为静态内容,而返回文件给客户端的过程称为服务静态内容
(2)运行一个可执行文件,并将它的输出返回给客户端。运行时可执行文件产生的输出称为态内容,而运行程序并返回它的输出到客户端的过程称为服务动态内容
•只要逻辑控制流在时间上重叠,那么就可以称为并发
•三种基本的构造并发程序的方法:
(1)进程:用内核来调用和维护,有独立的虚拟地址空间,显式的进程间通信机制。
(2)I/O多路复用:应用程序在一个进程的上下文中显式的调度控制流。逻辑流被模型化为状态机。
(3)线程:运行在一个单一进程上下文中的逻辑流。由内核进行调度,共享同一个虚拟地址空间。
•构造并发服务器的自然方法就是,在父进程中接受客户端连接请求,然后创建一个新的子进程来为每个新客户端提供服务
•因为父子进程中的已连接描述符都指向同一个文件表表项,所以父进程关闭它的已连接描述符的拷贝是至关重要的,而且由此引起的存储器泄露将最终消耗尽可用的存储器,使系统崩溃
•如果服务器要既能相应客户端的连接请求,又能响应用户的键盘输入,那么会产生等待谁的冲突。使用select函数,要求内核挂起进程,只有在一个或多个I/O事件发生之后,才将控制返回给进程
•状态机就是一组状态、输入事件和转移,转移就是将状态和输入时间映射到状态,自循环是同一输入和输出状态之间的转移
•线程与进程的不同:
(1)线程的上下文切换要比进程的上下文切换快得多
(2)和一个进程相关的线程组成一个对等池,独立于其他线程创建的线程
(3)主线程和其他线程的区别仅在于它总是进程中第一个运行的线程
•线程例程:线程的代码和本地数据被封装在一个线程例程中
•一个分离的线程是不能被其他线程回收或杀死的。它的存储器资源在它终止时由系统自动释放
•进度图是将n个并发线程的执行模型化为一条n维笛卡尔空间中的轨迹线,原点对应于没有任何线程完成一条指令的初始状态
•信号量是具有非负整数值的全局变量,只能由两种特殊的操作来处理,这两种操作称为P和V
•信号量不变性:一个正在运行的程序绝不能进入这样一种状态,也就是一个正确初始化了的信号量有一个负值
•二元信号量:将每个共享变量与一个信号量联系起来,然后用然后用P(S)和V(s)操作将这种临界区包围起来,这种方式来保护共享变量的信号量
•竞争:当一个程序的正确性依赖于一个线程要在另一个线程到达y点之前到达它的控制流中的x点时,就会发生竞争
•死锁:一组线程被阻塞了,等待一个永远也不会为真的条件

代码实践

•condvar
mutex用于保护资源,wait函数用于等待信号,signal函数用于通知信号
调用了pthread,gcc编译的时候要加上-lpthread

•count
不加锁的创建两个线程共享同一变量都实现加一操作

•countwithmutex
引入互斥锁

•cp_t
用法:./cp_t [源文件名] [目的文件名] [创建线程数]

•createthread
打印进程和线程ID

•semphore

•share
获得线程的终止状态

•threadexit

•hello_multi

•hello_multi1

•hello_single

•incprint

•twordcount1
统计文件1及文件2两个文件的总字数

•twordcount2

•twordcount3
分别对文件1、文件2两个文件进行字数统计,并把两个文件的字数加起来统计两个文件的总字数

•twordcount4
分别运行代码,根据锁的情况分别统计字数,再把两个文件的字数加起来统计两个文件的总字数

代码链接:

https://git.oschina.net/LJQ5303/Linux-code.git

原文地址:https://www.cnblogs.com/ljq007/p/6160911.html