标签:不用 上下 完全 lex 修改 线性 延时 状态 用户空间
多路复用技术是把多个低速信道组合成一个高速信道的技术,它可以有效的提高数据链路的利用率,从而使得一条高速的主干链路同时为多条低速的接入链路提供服务,也就是使得网络干线可以同时运载大量的语音和数据传输。多路复用技术是为了充分利用传输媒体,人们研究了在一条物理线路上建立多个通信信道的技术。
多路复用技术的实质是,将一个区域的多个用户数据通过发送多路复用器进行汇集,然后将汇集后的数据通过一个物理线路进行传送,接收多路复用器再对数据进行分离,分发到多个用户。多路复用通常分为频分多路复用、时分多路复用、波分多路复用、码分多址和空分多址。
频分多路复用技术FDM(Frequency Division MulTIplexing)。
频分多路复用利用通信线路的可用带宽超过了给定的带宽这一优点。频分多路复用的基本原理是:如果每路信号以不同的载波频率进行调制,而且各个载波频率是完全独立的,即各个信道所占用的频带不相互重叠,相邻信道之间用“警戒频带”隔离,那么每个信道就能独立地传输一路信号。
频分多路复用的主要特点是,信号被划分成若干通道(频道,波段),每个通道互不重叠,独立进行数据传递。每个载波信号形成一个不重叠、相互隔离(不连续)的频带。接收端通过带通滤波器来分离信号。频分多路复用在无线电广播和电视领域中的应用较多。ADSL也是一个典型的频分多路复用。ADSL用频分多路复用的方法,在PSTN使用双绞线上划分出三个频段:0~4kHz用来传送传统的语音信号;20~50kHz用来传送计算机上载的数据信息;150~500kHz或140~1100kHz用来传送从服务器上下载的数据信息。
时分多路复用技术TDM(TIme Division MulTIplexing)
时分多路复用是以信道传输时间作为分割对象,通过为多个信道分配互不重叠的时间片段的方法来实现多路复用。时分多路复用将用于传输的时间划分为若干个时间片段,每个用户分得一个时间片。时分多路复用通信,是各路信号在同一信道上占有不同时间片进行通信。由抽样理论可知,抽样的一个重要作用,是将时间上连续的信号变成时间上的离散信号,其在信道上占用时间的有限性,为多路信号沿同一信道传输提供条件。具体说就是把时间分成一些均匀的时间片,通过同步(固定分配)或统计(动态分配)的方式,将各路信号的传输时间配分在不同的时间片,以达到互相分开,互不干扰的目的。
至2011年9月,应用最广泛的时分多路复用是贝尔系统的T1载波。T1载波是将24路音频信道复用在一条通信线路上,每路音频信号在送到多路复用器之前,要通过一个脉冲编码调制编码器,编码器每秒抽样8000次。24路信号的每一路,轮流将一个字节插入到帧中,每个字节的长度为8位,其中7位是数据位,1位用于信道控制。每帧由24&TImes;8=192位组成,附加1bit作为帧的开始标志位,所以每帧共有193bit。由于发送一帧需要125ms,一秒钟可以发送8000帧。因此T1载波数据传输速率为:
193bit×8000=1544000bps=1544Kbps=1.544Mbps
波分多路复用技术WDM(Wavelength Division Multiplexing)
波分复用用同一根光纤内传输多路不用波长的光信号,以提高单根光纤的传输能力。因为光通信的光源在光通信的“窗口”上只占用了很窄的一部分,还有很大的范围没有利用。
也可以这样认为WDM是FDM应用于光纤信道的一个变例。如果让不用波长的光信号在同一根光纤上传输而互不干扰,利用多个波长适当错开的光源同时在一根光纤上传送各自携带的信息,就可以增加所传输的信息容量。由于是用不同的波长传送各自的信息,因此即使在同一根光纤上也不会相互干扰。在接收端转换成电信号时,可以独立地保持每个不同波长的光源所传送的信息。这种方式就叫做“波分复用”。
如果将一系列载有信息的不同波长的光载波,在光领域内以1至几百纳米的波长间隔合在一起沿单根光纤传输,在接收器再一一定的方法,将各个不同波长的光载波分开。在光纤上的工作窗口上安排100个波长不同的光源,同时在一根光纤上传送各自携带的信息,就能使光纤通信系统的容量提高100倍。
码分多址技术CDMA(Code Division Multiple Access)
码分多址是采用地址码和时间、频率共同区分信道的方式。CDMA的特征是个每个用户有特定的地址码,而地址码之间相互具有正交性,因此各用户信息的发射信号在频率、时间和空间上都可能重叠,从而使用有限的频率资源得到利用。
CDMA是在扩频技术上发展起来的无线通信技术,即将需要传送的具有一定信号带宽的信息数据,从一个带宽远大于信号带宽的高速伪随机码进行调制,使原数据信号的带宽被扩展,再经载波调制并发送出去。接收端也使用完全相同的伪随机码,对接受的带宽信号作相关处理,把宽带信号换成原信息数据的窄带信号即解扩,以实现信息通信。
不同的移动台(或手机)可以使用同一个频率,但是每个移动台(或手机)都被分配带有一个独特的“码序列”,该序列码与所有别的“序列码”都不相同,因为是靠不同的“码序列”来区分不同的移动台(或手机),所以各个用户相互之间也没有干扰从而达到了多路复用的目的。
空分多址技术SDMA(Space Division Multiple Access)
这种技术是将空间分割构成不同的信道,从而实现频率的重复使用,达到信道增容的目的。举例来说,在一个卫星上使用多个天线,各个天线的波束射向地球表面的不同区域地面上不同区域的地球站,他们在同一时间,即使用相同的频率进行工作,它们之间也不会形成干扰。SDMA系统的处理程序如下:
1、系统将首先对来自所有天线中的信号进行快照或取样,然后将其转换成数字形式,并存储在内存中。
2、计算机中的SDMA处理器将立即分析样本,对无线环境进行评估,确认用户、干扰源及所在的位置。
3、处理器对天线信号的组合方式进行计算,力争最佳地恢复用户的信号。借助这种策略,每位用户的信号接收质量将提高,而其他用户的信号或干扰信号则会遭到屏蔽。
4、系统进行模拟计算,使天线阵列可以有选择地向空间发送信号。再次在此基础上,每位用户的信号都可以通过单独的通信信道空间-空间信道实现高效的传输。
5、在上述处理的基础上,系统就能够在每条空间信道上发送和接受信号,从而使这些信号称为双向信道。
利用上述流程,SDMA系统就能够在一条普通信道上创建大量的频分、时分或码分双向空间信道,没一条信道扣可以完全活的整个阵列的增益和抗干扰功能。从理论上而言,带m个单元的阵列能够在每条普通行道上支持m条空间信道。但在实际应用中支持的信道数量将略低于这个数目,具体情况则取决于环境。由此可见,SDMA系统可使系统容量成倍增加,使得系统在有限的频谱内可以支持更多的用户,从而成倍的提高频谱使用效率。
自2011年9月,近几十年来,无线通信经历了从模拟到数字,从固定到移动的重大变革。而就移动通信而言,为了更有效地利用有限的无线频率资源,时分多址技术(TDMA)、频分多址技术(FDMA)、码分多址技术(CDMA)得到了广泛的应用,并在此基础上建立了GSM和CDMA(是区别于3G的窄带CDMA)两大主要的移动通信网络。就技术而言,现有的这三种多址技术已经得到了充分的应用,频谱的使用效率已经发挥到了极限。空分多址技术(SDMA)则突破了传统的三维思维模式,在传统的三维技术的基础上,在第四维空间上极大地拓宽了频谱的使用方式,使用移动用户仅仅由于空间位置的不同而复用同一个传统的物理信道称为可能,并将移动通信技术引入了一个更为崭新的领域。
在I/O编程过程中,当需要同时处理多个客户端接入请求时,可以利用多线程或者I/O多路复用技术进行处理。I/O多路复用技术通过把多个I/O的阻塞复用到同一个select的阻塞上,从而使得系统在单线程的情况下可以同时处理多个客户端请求。与传统的多线程/多进程模型比,I/O多路复用的最大优势是系统开销小,系统不需要创建新的额外进程或者线程,也不需要维护这些进程和线程的运行,降底了系统的维护工作量,节省了系统资源,I/O多路复用的主要应用场景如下:
服务器需要同时处理多个处于监听状态或者多个连接状态的套接字。
服务器需要同时处理多种网络协议的套接字。
目前支持I/O多路复用的系统调用有 select,pselect,poll,epoll,在Linux网络编程过程中,很长一段时间都使用select做轮询和网络事件通知,然而select的一些固有缺陷导致了它的应用受到了很大的限制,最终Linux不得不在新的内核版本中寻找select的替代方案,最终选择了epoll。epoll与select的原理比较类似,为了克服select的缺点,epoll作了很多重大改进,现总结如下:
1. 支持一个进程打开的socket描述符(FD)不受限制(仅受限于操作系统的最大文件句柄数)。
select最大的缺陷就是单个进程所打开的FD是有一定限制的,它由FD_SETSIZE设置,默认值是1024。对于那些需要支持上万个TCP连接的大型服务器来说显然太少了。可以选择修改这个宏,然后重新编译内核,不过这会带来网络效率的下降。我们也可以通过选择多进程的方案(传统的Apache方案)解决这个问题,不过虽然在Linux上创建进程的代价比较小,但仍旧是不可忽视的,另外,进程间的数据交换非常麻烦,对于Java由于没有共享内存,需要通过Socket通信或者其他方式进行数据同步,这带来了额外的性能损耗,增加了程序复杂度,所以也不是一种完美的解决方案。值得庆幸的是,epoll并没有这个限制,它所支持的FD上限是操作系统的最大文件句柄数,这个数字远远大于1024。例如,在1GB内存的机器上大约是10万个句柄左右,具体的值可以通过cat/proc/sys/fs/filemax察看,通常情况下这个值跟系统的内存关系比较大。
2. I/O效率不会随着FD数目的增加而线性下降。
传统的select/poll另一个致命弱点就是当你拥有一个很大的socket集合,由于网络延时或者链路空闲,任一时刻只有少部分的socket是“活跃”的,但是select/poll每次调用都会线性扫描全部集合,导致效率呈现线性下降。epoll不存在这个问题,它只会对“活跃”的socket进行操作-这是因为在内核实现中epoll是根据每个fd上面的callback函数实现的,那么,只有“活跃”的socket才会主动的去调用callback函数,其他idle状态socket则不会。在这点上,epoll实现了一个伪AIO。针对epoll和select性能对比的benchmark测试表明:如果所有的socket都处于活跃态。例如一个高速LAN环境,epoll并不比select/poll效率高太多;相反,如果过多使用epoll_ctl,效率相比还有稍微的下降。但是一旦使用idle connections模拟WAN环境,epoll的效率就远在select/poll之上了。
3. 使用mmap加速内核与用户空间的消息传递
无论是select,poll还是epoll都需要内核把FD消息通知给用户空间,如何避免不必要的内存复制就显得非常重要,epoll是通过内核和用户空间mmap使用同一块内存实现。
4. epoll的API更加简单
用来克服select/poll缺点的方法不只有epoll,epoll只是一种Linux的实现方案。在freeBSD下有kqueue,而dev/poll是最古老的Solaris的方案,使用难度依次递增。但epoll更加简单。
标签:不用 上下 完全 lex 修改 线性 延时 状态 用户空间
原文地址:https://www.cnblogs.com/wdp1990/p/11616190.html