??xml version="1.0" encoding="utf-8" standalone="yes"?> 在现代的操作pȝ中,有一个很重要的概念――线E,几乎所有目前流行的操作pȝ都支持线E,U程来源于操作系l中q程的概念,q程有自q虚拟地址I间以及(qing)正文Dc(din)数据段?qing)堆栈,而且各自占有不同的系l资源(例如文g、环境变量等{)(j)。与此不同,U程不能单独存在Q它依附于进E,只能pE派生。如果一个进E派生出?jin)两个线E,那这两个U程׃n此进E的全局变量和代码段Q但每个U程各拥有各自的堆栈Q因此它们拥有各自的局部变量,U程在UNIXpȝ中还被进一步分为用L(fng)U程Q由q程自已来管理)(j)和系lU程Q由操作pȝ的调度程序来理Q?br />
既然有了(jin)q程Qؓ(f)什么还要提出线E的概念呢?因ؓ(f)与创Z个新的进E相比,创徏一个线E将?x)耗费得多的pȝ资源Q对于一些小型的应用Q可能感觉不到这点,但对于那些ƈ发进E数特别多的应用Q用线E会(x)比用进E获得更好的性能Q从而降低操作系l的负担。另外,U程׃n创徏它的q程的全局变量Q因此线E间的通讯~程?x)更简单,完全可以抛弃传统的进E间通讯的IPC~程Q而采用共享全局变量来进行线E间通讯?br />
有了(jin)上面q个概念Q我们下面就q入正题Q来看一下线E池I竟是怎么一回事Q其实线E池的原理很单,cM于操作系l中的缓冲区的概念,它的程如下Q先启动若干数量的线E,q让q些U程都处于睡眠状态,当客L(fng)有一个新hӞ׃(x)唤醒U程池中的某一个睡眠线E,让它来处理客L(fng)的这个请求,当处理完q个h后,U程又处于睡眠状态。可能你也许?x)问Qؓ(f)什么要搞得q么ȝ(ch)Q如果每当客L(fng)有新的请求时Q我创Z个新的线E不完?jin)?q也许是个不错的Ҏ(gu)Q因为它能得你~写代码相对Ҏ(gu)一些,但你却忽略了(jin)一个重要的问题――性能Q就拿我所在的单位来说Q我的单位是一个省U数据大集中的银?a class="wordstyle" target="_blank">|络中心(j)Q高峰期每秒的客L(fng)hq发数超q?00Q如果ؓ(f)每个客户端请求创Z个新U程的话Q那耗费的CPU旉和内存将是惊人的Q如果采用一个拥?00个线E的U程池,那将?x)节U大量的的系l资源,使得更多的CPU旉和内存用来处理实际的商业应用Q而不是频J的U程创徏与销毁?br />
既然一切都明白?jin),那我们就开始着手实C个真正的U程池吧Q线E编E可以有多种语言来实玎ͼ例如C、CQ+、java{等Q但不同的操作系l提供不同的U程API接口Qؓ(f)?jin)让你能更明白线E池的原理而避免陷入烦(ch)琐的API调用之中Q我采用?jin)JAVA语言来实现它Q由于JAVA语言是一U跨q_的语aQ因此你不必Z用不同的操作pȝ而无法编译运行本E序而苦|只要你安装了(jin)JDK1.2以上的版本,都能正确地编译运行本E序。另外JAVA语言本n内|了(jin)U程对象Q而且JAVA语言是完全面像对象的Q因此能够让你更清晰C(jin)解线E池的原理,如果你注意看一下本文的标题Q你?x)发现整个示例程序的代码只有大?00行?br />
本示例程序由三个cL成,W一个是TestThreadPoolc,它是一个测试程序,用来模拟客户端的hQ当你运行它Ӟpȝ首先?x)显C线E池的初始化信息Q然后提CZ从键盘(sh)输入字符Ԍq按下回车键Q这时你?x)发现屏q上昄信息Q告诉你某个U程正在处理你的hQ如果你快速地输入一行行字符Ԍ那么你会(x)发现U程池中不断有线E被唤醒Q来处理你的hQ在本例中,我创Z(jin)一个拥?0个线E的U程池,如果U程池中没有可用U程?jin),pȝ?x)提CZ相应的警告信息,但如果你E等片刻Q那你会(x)发现屏幕上会(x)陆陆l箋(hu)提示有线E进入了(jin)睡眠状态,q时你又可以发送新的请求了(jin)?br />
W二个类是ThreadPoolManagerc,思义Q它是一个用于管理线E池的类Q它的主要职责是初始化线E池Qƈ为客L(fng)的请求分配不同的U程来进行处理,如果U程池满?jin),它?x)对你发出警告信息?br />
最后一个类是SimpleThreadc,它是Threadcȝ一个子c,它才真正对客L(fng)的请求进行处理,SimpleThread在示例程序初始化旉处于睡眠状态,但如果它接受C(jin)ThreadPoolManagercdq来的调度信息,则会(x)自己唤醒,q对hq行处理?
首先我们来看一下TestThreadPoolcȝ源码Q?br />
//TestThreadPool.java
1 import java.io.*;
2
3
4 public class TestThreadPool
5 {
6 public static void main(String[] args)
7 {
8 try{
9 BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
10 String s;
11 ThreadPoolManager manager = new ThreadPoolManager(10);
12 while((s = br.readLine()) != null)
13 {
14 manager.process(s);
15 }
16 }catch(IOException e){}
17 }
18 }
׃此测试程序用C(jin)输入输入c,因此W?行导入了(jin)JAVA的基本IO处理包,在第11行中Q我们创Z(jin)一个名为manager的类Q它lThreadPoolManagercȝ构造函C递了(jin)一个gؓ(f)10的参敎ͼ告诉ThreadPoolManagerc:(x)我要一个有10个线E的池,l我创徏一个吧Q第12行至15行是一个无限@环,它用来等待用L(fng)键入Qƈ键入的字符串保存在s变量中,q调用ThreadPoolManagercȝprocessҎ(gu)来将q个hq行处理?br />
下面我们再进一步跟t到ThreadPoolManagercM去,以下是它的源代码Q?br />
//ThreadPoolManager.java
1 import java.util.*;
2
3
4 class ThreadPoolManager
5 {
6
7 private int maxThread;
8 public Vector vector;
9 public void setMaxThread(int threadCount)
10 {
11 maxThread = threadCount;
12 }
13
14 public ThreadPoolManager(int threadCount)
15 {
16 setMaxThread(threadCount);
17 System.out.println("Starting thread pool...");
18 vector = new Vector();
19 for(int i = 1; i <= 10; i++)
20 {
21 SimpleThread thread = new SimpleThread(i);
22 vector.addElement(thread);
23 thread.start();
24 }
25 }
26
27 public void process(String argument)
28 {
29 int i;
30 for(i = 0; i < vector.size(); i++)
31 {
32 SimpleThread currentThread = (SimpleThread)vector.elementAt(i);
33 if(!currentThread.isRunning())
34 {
35 System.out.println("Thread "+ (i+1) +" is processing:" +
argument);
36 currentThread.setArgument(argument);
37 currentThread.setRunning(true);
38 return;
39 }
40 }
41 if(i == vector.size())
42 {
43 System.out.println("pool is full, try in another time.");
44 }
45 }
46 }//end of class ThreadPoolManager
我们先关注一下这个类的构造函敎ͼ然后再看它的process()Ҏ(gu)。第16Q?4行是它的构造函敎ͼ首先它给ThreadPoolManagercȝ成员变量maxThread赋|maxThread表示用于控制U程池中最大线E的数量。第18行初始化一个数lvectorQ它用来存放所有的SimpleThreadc,q时候就充分体现?jin)JAVA语言的优性与艺术性:(x)如果你用C语言的话Q至要?00行以上的代码来完成vector的功能,而且C语言数组只能容纳cdl一的基本数据类型,无法容纳对象。好?jin),闲话说Q第19Q?4行的循环完成q样一个功能:(x)先创Z个新的SimpleThreadc,然后它攑օvector中去Q最后用thread.start()来启动这个线E,Z么要用start()Ҏ(gu)来启动线E呢Q因是JAVA语言中所规定的,如果你不用的话,那这些线E将永远得不到激z,从而导致本CZE序Ҏ(gu)无法q行?br />
下面我们再来看一下process()Ҏ(gu)Q第30Q?0行的循环依次从vector数组中选取SimpleThreadU程Qƈ(g)查它是否处于Ȁzȝ态(所谓激zȝ态是指此U程是否正在处理客户端的hQ,如果处于Ȁzȝ态的话,那(h)l查找vector数组的下一,如果vector数组中所有的U程都处于激zȝ态的话,那它?x)打印出一条信息,提示用户E候再试。相反如果找C(jin)一个睡眠线E的话,那第35Q?8行会(x)Ҏ(gu)q行处理Q它先告诉客L(fng)是哪一个线E来处理q个hQ然后将客户端的hQ即字符串argument转发lSimpleThreadcȝsetArgument()Ҏ(gu)q行处理Qƈ调用SimpleThreadcȝsetRunning()Ҏ(gu)来唤醒当前线E,来对客户端请求进行处理?br />
可能你还对setRunning()Ҏ(gu)是怎样唤醒U程的有些不明白Q那我们现在p入最后一个类QSimpleThreadc,它的源代码如下:(x)
//SimpleThread.java
1 class SimpleThread extends Thread
2 {
3 private boolean runningFlag;
4 private String argument;
5 public boolean isRunning()
6 {
7 return runningFlag;
8 }
9 public synchronized void setRunning(boolean flag)
10 {
11 runningFlag = flag;
12 if(flag)
13 this.notify();
14 }
15
16 public String getArgument()
17 {
18 return this.argument;
19 }
20 public void setArgument(String string)
21 {
22 argument = string;
23 }
24
25 public SimpleThread(int threadNumber)
26 {
27 runningFlag = false;
28 System.out.println("thread " + threadNumber + "started.");
29 }
30
31 public synchronized void run()
32 {
33 try{
34 while(true)
35 {
36 if(!runningFlag)
37 {
38 this.wait();
39 }
40 else
41 {
42 System.out.println("processing " + getArgument() + "... done.");
43 sleep(5000);
44 System.out.println("Thread is sleeping...");
45 setRunning(false);
46 }
47 }
48 } catch(InterruptedException e){
49 System.out.println("Interrupt");
50 }
51 }//end of run()
52 }//end of class SimpleThread
如果你对JAVA的线E编E有些不太明白的话,那我先在q里单地讲解一下,JAVA有一个名为Thread的类Q如果你要创Z个线E,则必要从ThreadcMl承Qƈ且还要实现Threadcȝrun()接口Q要ȀzM个线E,必须调用它的start()Ҏ(gu)Qstart()Ҏ(gu)?x)自动调用run()接口Q因此用户必drun()接口中写入自q应用处理逻辑。那么我们怎么来控制线E的睡眠与唤醒呢Q其实很单,JAVA语言为所有的对象都内|了(jin)wait()和notify()Ҏ(gu)Q当一个线E调用wait()Ҏ(gu)Ӟ则线E进入睡眠状态,像停在?jin)当前代码上了(jin),也不会(x)?h)l执行它以下的代码了(jin)Q当调用notify()Ҏ(gu)Ӟ则会(x)从调用wait()Ҏ(gu)的那行代码(h)l执行以下的代码Q这个过E有点像~译器中的断点调试的概念。以本程序ؓ(f)例,W?8行调用了(jin)wait()Ҏ(gu)Q则q个U程像凝固?jin)一样停在了(jin)38行上?jin),如果我们在?3行进行一个notify()调用的话Q那U程?x)从W?8行上唤醒Q(h)l从W?9行开始执行以下的代码?jin)?br />
通过以上的讲qͼ我们现在׃隄解SimpleThreadcM(jin)Q第9Q?4行通过讄一个标志runningFlagȀzd前线E,W?5Q?9行是SimpleThreadcȝ构造函敎ͼ它用来告诉客L(fng)启动的是W几可E。第31Q?0行则是我实现的run()接口Q它实际上是一个无限@环,在@环中首先判断一下标志runningFlagQ如果没有runningFlag为false的话Q那U程处理睡眠状态,否则W?2Q?5行会(x)q行真正的处理:(x)先打印用户键入的字符Ԍ然后睡眠5U钟Qؓ(f)什么要睡眠5U钟呢?如果你不加上q句代码的话Q由于计机处理速度q远过你的键盘输入速度Q因此你看到的LW?L(fng)E来处理你的hQ从而达不到演示效果。最后第45行调用setRunning()Ҏ(gu)又将U程|于睡眠状态,{待新请求的到来?br />
最后还有一点要注意的是Q如果你在一个方法中调用?jin)wait()和notify()函数Q那你一定要此Ҏ(gu)|ؓ(f)同步的,即synchronizedQ否则在~译时会(x)报错Qƈ得到一个莫名其妙的消息Q“current thread not owner”(当前U程不是拥有者)(j)?br />
x(chng)为止Q我们完整地实现?jin)一个线E池Q当?dng)q个U程池只是简单地客L(fng)输入的字W串打印C(jin)屏幕上,而没有做M处理Q对于一个真正的企业U运用,本例q是q远不够的,例如错误处理、线E的动态调整、性能优化、(f)界区的处理、客L(fng)报文的定义等{都是值得考虑的问题,但本文的目的仅仅只是让你?jin)解U程池的概念以及(qing)它的单实玎ͼ如果你想成ؓ(f)q方面的高手Q本文是q远不够的,你应该参考一些更多的资料来深入地?jin)解它?br />
for
(tng)(
int
(tng)i (tng)
=
(tng)
1
; (tng)i (tng)
<=
(tng)
10
; (tng)i
++
) (tng)
{
//
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)int (tng)i (tng)= (tng)7;
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)MNPClientThread (tng)mnpct (tng)
=
(tng)
new
(tng)MNPClientThread(i);
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)mnpct.start();
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)System.out.println(i);
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)}
public
(tng)MNPClientThread(
int
(tng)i) (tng)
{
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)
this
.count (tng)
=
(tng)i;
(tng) (tng) (tng) (tng)}
(tng) (tng) (tng) (tng)
public
(tng)
void
(tng)run() (tng)
{
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)
try
(tng)
{
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)
for
(
int
(tng)i
=
1
;i
<=
800000
;i
++
)
{
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)StringBuffer (tng)phoneNumber (tng)
=
(tng)
new
(tng)StringBuffer(
"
88600
"
);
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)phoneNumber.append(count);
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)phoneNumber.append(
"
0000
"
);
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)phoneNumber.append(i);
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)Thread.sleep(
800
);
//
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)System.out.println("****************"+phoneNumber.toString());
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)MNPClientTest (tng)client (tng)
=
(tng)
new
(tng)MNPClientTest();
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)client.runTest(phoneNumber.toString());
//
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)java.util.Date (tng)d2 (tng)= (tng)new (tng)java.util.Date();
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)System.out.println(
"
Thread (tng)
"
(tng)
+
(tng)count (tng)
+
(tng)
"
(tng)Runs
"
);
//
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)System.out.println(new (tng)java.util.Date());
//
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)System.out.println(i);
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)}
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)}
(tng)
catch
(tng)(Exception (tng)ex) (tng)
{
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)ex.printStackTrace();
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)}
(tng) (tng) (tng) (tng)}
q行3时左右Q发?jin)不?0Wquery挂?jin)?Q?
报这个:(x)
Exception in thread "Thread-1" java.lang.OutOfMemoryError: Java heap space
我加?Xms128m -Xmx800m q是不行Q是内存泄露吗?Q?/span>
http://www.ptsn.net.cn/article_new/show_article.php?article_id=expert_9039d306-6d61-d622-14d5-43c49c788fef
e164:
http://www.mc21st.net/old/faq/reply.asp?ID=7471
IMSI:
http://zhidao.baidu.com/question/7853752.html
http://baike.baidu.com/view/715091.htm
1Q?/span> 什么是Ud通信Q能否说Ud通信是“无U电(sh)通信”?Z么?
Ud通信是指通信双方或至有一方在Ud中进行信息交换的通信方式?/span>
不能Q移动通信是有Uѝ无U相l合的通信方式?/span>
2Q?/span> Ud通信有哪些特点?存在的问题分别用哪些Ҏ(gu)解决Q?/span>
Ud通信是有Uѝ无U相l合的通信方式Q电(sh)波传播条件恶劣,存在严重的多径衰落;强干扰条件下工作Q具有多卜勒效应Q存在阴影区Q盲区)(j)Q用L(fng)常移动?/span>
Ud台必MU要、重量要轅R操作用要便安全,另外Q其成本要低Q在q行Ud通信pȝ的设计时Q必d有一定的抗衰落的能力和储备;Ud通信讑֤必须h良好的选择性,使用自动功率控制?sh)\Q移动通信pȝ在组|时Q必考虑同频q扰Q锁相技术;考虑阴媄(jing)区在|络规划、设|基站时Q位|登记、越区切换及(qing)漫游讉K{跟t交换技术?/span>
3Q?/span> Ud通信常用的工作方式有哪些Q公用蜂H移动电(sh)话系l中使用哪些Q?/span>
单工方式Q半双工方式Q双工方式?/span>
双工?/span>
4Q?/span> 什么是区ӞZ么小区制既能解决频道数有限和用户数增大的矛盾Q又能不断适应用户数增大的需要?
区制是整个服务区划分q个无U区Q每个小无线区分别设|一个基站负责本区的Ud通信的联l和控制Q同时又可在 MSC 的统一控制下,实现区间移动通信的{接及(qing)与市(jng)话网的联pR?/span>
区制中Q每个小Z用一l频道,邻近区使用不同的频道。由于小区内基站服务区域~小Q同频复用距d,所以在整个服务ZQ同一l频道可以多ơ重复用,因而大大提高(sh)(jin)频率利用率。另外,在区域内可根据用L(fng)多少定区的大。随着用户数目的增加,区q可以(h)l划,卛_现“小区分裂”,以适应用户数的增加。因此,区制解决了(jin)大区制中存在的频道数有限而用h不断增加的矛盾,可用户定w大大增加?/span>
5Q?/span> 无线区域的划分ؓ(f)什么采用正六边形小区ŞӞ正六边Ş无线区群构成应满什么条Ӟ
假定整个服务区的地Ş地物相同Qƈ且基站采用全向天U,覆盖面积大体上上一个圆Q即无线区是圆形的。由考虑到多个小区彼此邻接来覆盖整个区域Q用圆内接正多边形代替圆。圆内接正多边Ş彼此L构成q面Ӟ只能是正三角形、正方Ş和正六边形三U面状区域。正六边形,其相d区的中心(j)距离最,便于实现跟踪交换Q其覆盖面积最大,对于同样大小的服务区域,采用正六边Ş构成区制所需的小区数最,x(chng)需基站数最;所需的频率个数最,频率利用率高?/span>
满以下两个条gQ一是若q单位无U区能彼此LQ二是相d位无U区中的同频小Z?j)间隔相{?/span>
6Q?/span> 什么是多信道共用?有何优点Q?/span>
多信道共用是指在|内的大量用户共同n有若q无U信道,q与?jng)话用户共同享有中?h)U相cM。相对于独立信道方式来说Q可以显著提高(sh)道利用率?/span>
7Q?/span> 大容量的Ud通信pȝ采用何种信道选择方式Q有什么优~点Q?/span>
专用呼叫信道方式?/span>
处理一ơ呼叫过E所需的时间很短,所以设立一个专用呼叫信道就可以处理成百上千个用L(fng)呼叫Q适用于大定wpȝ中;׃专门抽出一个信道作呼叫信道Q相对而言Q减了(jin)通话信道的数目,因此对小定wpȝ来说Q是不合的?/span>
8Q?/span> 若需设计一Ud通信pȝQ用户容量要求ؓ(f) 600 P每天每个用户q_呼叫 5 ơ,每次q_占用信道旉?/span> 60 U,呼损率要求ؓ(f) 10% Q忙时击中率?/span> 0.125 Q问需要多信道才能满?/span> 600 个用L(fng)需要?
A/A 用户 =600
A 用户 =CTK/3600=5*60*0.125=37.5/3600
A=6.25
查表得:(x) 9
9Q?/span> 话务量是怎样定义的?什么是呼损率?呼损率与接通话务量的关pd何?
单位旉Q?/span> 1 时Q内呼叫ơ数与每ơ呼叫的q_占用信道旉之积?/span>
当多个信道共用时Q通常L用户数大于信道数Q当多个用户同时要求服务而信道数不够Ӟ只能让一部分用户先通话Q另一部分用户{信道空闲时在通话。后一部分用户因无I闲信道而不能通话Q即为呼叫失败,U呼损。在一个通信pȝ中,造成呼叫p|的概率称为呼叫损失概率,U呼损率?/span>
呼损率ؓ(f)呼叫p|的次Cd叫次C癑ֈ比?/span>
10Q?span style="FONT: 7pt 'Times New Roman'"> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)
爱尔兰呼损表应用的条件是什么?已知 A 用户 =0.02Erl/ 用户Q如果要求呼损率?/span> 10% Q现?/span> 70 个用P需q的频道数为多?如果 920 个用户共?/span> 18 个频道,那么呼损率是多少Q?/span>每次呼叫相对独立Q互不相养I卛_叫具有随机性,也就是说Q一个用戯求通话的概率与正在通话的用h无关Q每ơ呼叫在旉上都有相同的概率?/span>
A/n=70*0.02/n, A=1.4, 查表?/span> n=4
A/n=920*0.02/n, A=18.4, 查表得呼损率?/span> 20%
11Q?span style="FONT: 7pt 'Times New Roman'"> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)
如何提高频率利用?/a>Q?/span>频率复用、频率协调和频率规划
12Q?span style="FONT: 7pt 'Times New Roman'"> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)
pȝ对移动交换机有哪些特D要求?用户数据的存储;用户位置的登讎ͼd用户的信令系l识别及(qing)处理Q越区频道{换的处理Q过hӞq距L案存取;路由的控制等?/span>
13Q?span style="FONT: 7pt 'Times New Roman'"> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)
什么是位置登记、一齐呼叫、越区切换、O游?位置登记是指Ud台向基站发送报文,表明自己所处的位置的过E?/span>
若位|信息表明被呼移动用户在某个位置区,但不知其所处的具体区Q因此,位置区内所有基站一齐呼?gu)呼移动用戯别码Q被叫移动用户应{后Q即由应{小区提供接l服务,pȝ的这U功能称为“一齐呼叫”?/span>
Z(jin)保证通信的连l性,正在通话的移动台从一个小入相?c)另一区Ӟ工作频道从一个无限频道上转换到另一个无限频道上Q而通话不中断,q就是越区切换?/span>
在联|的Ud通信pȝ中,UdC一?/span> MSC 区到另一?/span> MSC 区后Q仍能入|用的通信服务功能UCؓ(f)漫游?/span>