标签:位置 text bind 大小 get cond rod 文件表 with
1.客户端-服务器编程模型
一个服务器进程 -> 管理某种资源 -> 通过操作这种资源来为它的客户端提供某种服务
一个或多个客户端进程
基本操作:事务
当一个客户端需要服务时,向服务器发送一个请求,发起一个事务。 服务器收到请求后,解释它,并以适当的方式操作它的资源。 服务器给客户端发送一个相应,并等待下一个请求。 客户端收到响应并处理它。
客户端和服务器都是进程。
2.网络
(1)对主机而言:网络是一种I/O设备 (2)物理上:网络是一个按照地理远近组成的层次系统 (3)协议 (4)全球IP因特网
3.套接字
函数:
4.Web服务器
(1)协议
(2)内容
Web内容可以用一种叫做 HTML(Hypertext Markup Language,超文本标记语言)的语言来编写。一个 HTML 程序(页)包含指令(标记),它们告诉浏览器如何显示这页中的各种文本和图形对象。
Web 服务器以两种不同的方式向客户端提供内容:
并发:逻辑控制流在时间上重叠
并发程序:使用应用级并发的应用程序称为并发程序。
三种基本的构造并发程序的方法:
I/O多路复用,应用程序在一个进程的上下文中显式的调度控制流。逻辑流被模型化为状态机。
线程,运行在一个单一进程上下文中的逻辑流。由内核进行调度,共享同一个虚拟地址空间。
构造并发服务器的自然方法就是,在父进程中接受客户端连接请求,然后创建一个新的子进程来为每个新客户端提供服务。
因为父子进程中的已连接描述符都指向同一个文件表表项,所以父进程关闭它的已连接描述符的拷贝是至关重要的,而且由此引起的存储器泄露将最终消耗尽可用的存储器,使系统崩溃。
基于进程的并发echo服务器的重点内容:
需要一个SIGCHLD处理程序,来回收僵死子进程的资源。
父子进程必须关闭各自的connfd拷贝。对父进程尤为重要,以避免存储器泄露。
套接字的文件表表项中的引用计数,直到父子进程的connfd都关闭了,到客户端的连接才会终止。
进程的模型:共享文件表,但不是共享用户地址空间。
Unix IPC是指所有允许进程和同一台主机上其他进程进行通信的技术,包括管道、先进先出(FIFO)、系统V共享存储器,以及系统V信号量。
线程:运行在进程上下文中的逻辑流。
线程有自己的线程上下文,包括一个唯一的整数线程ID、栈、栈指针、程序计数器、通用目的寄存器和条件码。所有运行在一个进程里的线程共享该进程的整个虚拟地址空间。
主线程:每个进程开始生命周期时都是单一线程。
对等线程:某一时刻,主线程创建的对等线程 。
线程与进程的不同:
对等池的影响: 一个线程可以杀死它的任何对等线程;等待它的任意对等线程终止;
每个对等线程都能读写相同的共享资源。
线程例程:线程的代码和本地数据被封装在一个线程例程中。每一个线程例程都以一个通用指针作为输入,并返回一个通用指针。
创建线程
pthread create函数创建一个新的线程,并带着一个输入变量arg,在新线程的上下文中运行线程例程f。新线程可以通过调用pthread _self函数来获得自己的线程ID。
终止线程
一个线程的终止方式:
当顶层的线程例程返回时,线程会隐式的终止;
通过调用pthread _exit函数,线程会显示地终止。如果主线程调用pthread _exit,它会等待所有其他对等线程终止,然后再终止主线程和整个进程。
回收已终止线程的资源
pthread _join函数会阻塞,直到线程tid终止,回收已终止线程占用的所有存储器资源。pthread _join函数只能等待一个指定的线程终止。
分离线程
在任何一个时间点上,线程是可结合的或者是分离的。一个可结合的线程能够被其他线程收回其资源和杀死;一个可分离的线程是不能被其他线程回收或杀死的。它的存储器资源在它终止时有系统自动释放。
默认情况下,线程被创建成可结合的,为了避免存储器漏洞,每个可集合的线程都应该要么被其他进程显式的回收,要么通过调用pthread _detach函数被分离。
初始化线程
pthread _once函数允许初始化与线程例程相关的状态。
once _control变量是一个全局或者静态变量,总是被初始化为PTHREAD _ONCE _INIT.
echo服务器必须响应两个相互独立的I/O时间: 网络客户端发起连接请求、用户在键盘上键入命令行
I/O多路复用技术的基本思路:使用select函数,要求内核挂起进程,只有在一个或多个I/O事件发生后,才将控制返回给应用程序。
echo函数:将来自科幻段的每一行回送回去,直到客户端关闭这个链接。
状态机就是一组状态、输入事件和转移,转移就是将状态和输入时间映射到状态,自循环是同一输入和输出状态之间的转移。
事件驱动器的设计优点:
缺点: 编码复杂、不能充分利用多核处理器
每个线程和其他线程一起共享进程上下文的剩余部分。包括整个用户虚拟地址空间,是由只读文本、读/写数据、堆以及所有的共享库代码和数据区域组成的。线程也共享同样的打开文件的集合。
任何线程都可以访问共享虚拟存储器的任意位置。寄存器是从不共享的,而虚拟存储器总是共享的。
将变量映射到存储器
全局变量:虚拟存储器的读/写区域只会包含每个全局变量的一个实例。
本地自动变量:定义在函数内部但没有static属性的变量。
本地静态变量:定义在函数内部并有static属性的变量。
共享变量
用信号量同步线程
共享变量引入了同步错误的可能性。
线程i的循环代码分解为五部分:
Hi:在循环头部的指令块
Li:加载共享变量cnt到寄存器%eax的指令,%eax表示线程i中的寄存器%eax的值
Ui:更新(增加)%eax的指令
Si:将%eaxi的更新值存回到共享变量cnt的指令
Ti:循环尾部的指令块。
进度图
进度图将指令执行模式化为从一种状态到另一种状态的转换。转换被表示为一条从一点到相邻点的有向边。合法的转换是向右或者向上。
cnt
内容的指令构成了一个临界区。任何安全轨迹线都能正确的更新共享计数器。
使用信号量来实现互斥
二元信号量:将每个共享变量与一个信号量s联系起来,然后用P(S)和V(s)操作将这种临界区包围起来,这种方式来保护共享变量的信号量。
互斥锁:以提供互斥为目的的二元信号量
加锁:一个互斥锁上执行P操作称为对互斥锁加锁,执行V操作称为对互斥锁解锁。对一个互斥锁加了锁但还没有解锁的线程称为占用了这个互斥锁。
计数信号量:一个呗用作一组可用资源的计数器的信号量
竞争
死锁
注意:本章代码是多线程编译,pthread
库不是linux
系统默认的库,因此在编译的时候需要加上-lpthread
参数。
PTHREAD_MUTEX_INITIALIZER
来静态初始化互斥锁。先创建tidA
线程后运行doit函数
,利用互斥锁锁定资源,进行计数,执行完毕后解锁。后创建tidB
,与tidA
交替执行。由于定义的NLOOP值为5000,所以程序最后的输出值为10000.程序的最后还需要分别回收tidA
和tidB
的资源。mmap函数void* mmap(void* start,size_t length,int prot,int flags,int fd,off_t offset);
将一个文件或者其他对象映射进内存。文件被映射到多个页上,如果文件的大小不是所有页的大小之和,最后一个页不被使用的空间将会清零。mmap在用户空间映射调用系统中作用很大。
成功执行时,mmap()
返回被映射区的指针,munmap()
返回0.失败时,mmap()
返回MAP_FAILED
,munmap
返回-1.
pthread_create()
函数的使用,用来打印进程和线程的IDsem_init函数sem_init(sem_t *sem, int pshared, umsigned int value);
函数初始化一个定位在sem的匿名信号量;pshared参数为0指明信号量是由进程内线程共享,若为非0值则信号量在进程之间共享;value参数指定信号量的初始值。
sem_init()成功时返回0;错误时返回-1,并把errno设置为合适的值。
| | 代码行数(新增/累积)| 博客量(新增/累积)|学习时间(新增/累积)|重要成长|
| -------- | :----------------:|:----------------:|:---------------: |:-----:|
| 目标 | 5000行 | 30篇 | 400小时 | |
| 第一周 | 200/200 | 2/2 | 20/20 | |
| 第二周 | 300/500 | 2/4 | 18/38 | |
| 第三周 | 500/1000 | 3/7 | 22/60 | |
| 第四周 | 600/1300 | 4/9 | 30/90 | |
| 第五周 | 650/1300 | 5/9 | 40/90 | |
| 第六周 | 700/1300 | 6/9 | 50/90 | |
| 第七周 | 800/1300 | 7/9 | 60/90 | |
| 第八周 | 1200/1700 | 8/10 | 80/110 | |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。 耗时估计的公式 :Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
计划学习时间:10小时
实际学习时间:10小时
(有空多看看现代软件工程 课件 软件工程师能力自我评价表)
2017-2018-20155336 《信息安全系统设计基础》第八周学习总结
标签:位置 text bind 大小 get cond rod 文件表 with
原文地址:http://www.cnblogs.com/hxl681207/p/7816073.html