北邮操作系统消费者与生产者实验报告

北邮操作系统消费者与生产者实验报告
北邮操作系统消费者与生产者实验报告

操作系统实验课程报告

课题: 消费者与生产者实验

姓名张涛

学院计算机学院

班级2011211311

学号2011211419

2013年12月14日

1.实验目的:

1)理解线程同步的思想和方法,学会用线程同步解决临界区问题,本次实验解决生产者消费者问题

2了解windows系统或linux系统下中信号量的使用方法。

2.实验预备内容

(1)阅读Linux的sched.h源码文件,加深对进程管理概念的理解。

这个文件长达2616行,这里截取第1221~1548行抄录在实验报告最后,即结构体task_struct,地位相当于PCB。

下面对几个比较重要的参数,结合本人的了解以及网上查阅的资料做一点解释。

中括号内的数字为代码行号,下同。

volatile long state:【1222】进程状态字,表示进程当前的状态(运行、就绪、等待、僵死、暂停、交换),分别对应已定义好的常量;

TASK_RUNING:正在运行或可运行状态;

TASK_INTERRUPTIBLE:可打断睡眠状态;

TASK_UNINTERRUPTIBLE:不可打断睡眠状态;

TASK_ZOMBLE:僵死状态;

TASK_STOPPED:暂停状态;

交换状态。

void *stack:【1223】进程所使用的栈空间;

unsigned int flags:【1225】进程标志(创建、关闭、跟踪、被跟踪、内核dump等),同样对应已定义好的常量;

unsigned int rt_priority:【1237】表示本进程的实时优先级;

const struct sched_class *sched_class、struct sched_entity se:【1239,1240】分别是调度类和调度实体,这两个结构包含了用于任务调度的完整的信息(进程信息、调度策略等);

unsigned int policy:【1260】进程的调度策略标志,有三种调度标志:

SCHED_OTHER :普通进程的调度策略,基于优先权的轮转法;

SCHED_FIFO:实时进程的调度策略,基于先进先出的算法;

SCHED_RR:实时进程的调度策略,基于优先权的轮询法。

struct list_head tasks:【1274】任务队列,为一双向循环链表;

int pdeath_signal:【1282】父进程终止时产生的信号;

pid_t pid:【1294】进程标识符,操作系统每创建一个新的进程就要为这个新进程分配一个进程控制块(PCB),系统内核通过pid区分这些进程的;

struct task_struct *real_parent:【1307】本进程的父进程的PCB;

struct list_head children:【1312】本进程的子进程列表;

struct list_head ptraced:【1321】本进程正在使用ptrace监视的进程列表;

struct thread_struct thread:【1375】本进程下属的线程集;

struct signal_struct *signal、struct sighand_struct *sighand:【1383,1384】分别是进程运行时产生的信号以及信号处理模块。

(2)阅读Linux的pthread.h源码文件,分析线程的创建过程。

pthread接口说明

#include

1、创建

int pthread_create( pthread_t *tid, const pthread_attr_t *attr, void *(* func) (void *), void *arg );

attr: 线程属性包括:优先级、初始栈大小,是否应该成为一个守护线程。

缺省设置,NULL

后面是线程要执行的函数和参数

成功返回0

2、等待一个给定线程终止

int pthread_join( pthread_t tid, void **status);等待线程结束critiction 可以在进程中使用,mutex只可在进程中使用

statues返回等待线程的返回值

multiple definition of `__dso_handle'

/usr/lib/gcc/i486-linux-gnu/4.4.3/crtbegin.o:(.data+0x0): first defined here

threadTest: In function `_init':

(.init+0x0): multiple definition of `_init'

/usr/lib/gcc/i486-linux-gnu/4.4.3/../../../../lib/crti.o:(.init+0x0): first defined here

/tmp/cchm2SmY.o:(.data+0x0): multiple definition of `flag'

threadTest:(.data+0x8): first defined here

/tmp/cchm2SmY.o: In function `threadMe

3、得到自身的pid

pthread_t pthread_self(void);

4、pthread_detach函数

int pthread_detach( pthread_t pid );

把指定的线程转变为脱离状态

一个线程或者是可汇合的(joinable,缺省值),或者是脱离的(detached)。当一个可汇合的线程终止时,它的线程ID和退出状态将留到另一个线程对它调用pthread_join。脱离线程却象守护进程:当它们终止的时,所有相关资源都被释放,我们不能等待它们终止。如果一个线程需要知道另一个线程什么时候终止,那就最好好吃第二个线程的可汇合状态。

本函数通常由想让自己脱离的线程调用,如下语句

pthread_detach( pthread_self() );

5、终止一个线程

void pthread_exit( void *statue );

指针sttus不能指向局部于调用对象,因为线程终止时这样的对象也消失

(3)阅读Linux的semaphore.h源码文件,分析线程的创建过程。

typedef struct sem_t_ * sem_t;

PTW32_DLLPORT int __cdecl sem_init (sem_t * sem,

int pshared,

unsigned int value);

PTW32_DLLPORT int __cdecl sem_destroy (sem_t * sem);

PTW32_DLLPORT int __cdecl sem_trywait (sem_t * sem);

PTW32_DLLPORT int __cdecl sem_wait (sem_t * sem);

PTW32_DLLPORT int __cdecl sem_post (sem_t * sem);

PTW32_DLLPORT int __cdecl sem_post_multiple (sem_t * sem,

int count);

PTW32_DLLPORT int __cdecl sem_close (sem_t * sem);

PTW32_DLLPORT int __cdecl sem_unlink (const char * name);

int sem_init(sem_t *sem,int pshared,unsigned int value)。用于信号量的初始化,第一个参数为信号量的名称,第二个参数为信号量的共享属性,一般设为0(不共享),第三个参数为信号量的初始值。

int sem_wait(sem_t *sem)。相当于上面的wait()操作,作用是当信号量的值大于0时,给信号量的值减1,否则会阻塞直至信号量的值大于0。它是一个原子操作。

int sem_post(sem_t *sem)。相当于上面的signal()操作,作用是给信号量的值加1。它也是一个原子操作。

******************************************************************************/

3.实验环境

此实验采用的是Win8下Microsoft Visual Stdio 2012工程。由于系统不包含semaphore.h,sched.h及pthread.h头文件,所以这些头文件都是从网上FTP资源下载后,加入工程的。

程序中加入#pragma comment(lib, "pthreadVC2.lib")来调用pthread链接库。

文件根目录下已下载pthreadVC2.dll

******************************************************************************/

4.实验步骤

A.设计思路

这个问题是进程同步的经典问题之一,基本思路是设置三个信号量:mutex信号量,用于控制生产者和消费者对于缓冲区的互斥访问;empty信号量,记录当前为空的缓冲区的数目,初始化为所有缓冲区的数目BUF_SIZE;full信号量,记录当前已满的缓冲区的数目,初始化为0。

******************************************************************************/ 一个buffer,一个生产者,一个消费者

(1)规则

只有buffer为空才能put;只有buffer中有数据才能get;不允许多个put操作同时进行;不允许多个

get操作同时进行。

这时buffer变成了临界资源,消费者之间需要互斥地使用,生产者之间也需要互斥地使用,消费者和生产者之间也需要互斥地使用,这时设置两个信号量

s1,s2实现同步,例外设置S信号,代表buffer这种临界资源,用于互斥,称之为互斥信号量。

(2)实现流程

<生产者>p(s1)"判断buffer是否空"

p(s)

"是否可进行put,是否有其他进程占用

buffer"

putv(s)"释放buffer,让其他进程可以使用"v(s2)

"给消费者进程释放一个buffer中有数据的

信号"

<消费者>p(s2)"判断是否有数据"

p(s)"是否可进行get,是否有其他进程占用"

getv(s)"释放buffer,让其他进程可以使用"v(s1)

"给生产者释放一个buffer为空的信号"通过3个信号量,实现了消费者和生产者之间同步关系,也保证了在某个时刻只有一个进程使用临界资源buffer。

生产者进程的代码结构描述如下:

while(true)

{ nextp=produce();wait(empty);wait(mutex);put(nextp);signal(mutex);signal(full); }

消费者进程的代码结构描述如下:

while(true)

{ wait(full);wait(mutex);nextc=get();signal(mutex);signal(empty);consume(nextc); } 这里两个wait语句的次序并不能调换,这是因为如果将两个wait操作即wait(full)和wait(mutex)互换位置,或者将release(mutex)与release(full)互换位置,当缓冲区存满产品时,生产者又生产了一件产品,它欲向缓冲区存放时将在empty上等待,但它已经占有了使用缓冲区的权利。这时消费者要取产品时将停留在mutex上得不到使用缓冲区的权利,导致生产者等待消费者取走产品,而消费者却在等待生产者释放使用缓冲区的权利,这种相互等待永远结束不了。因此进程将会发生死锁。

******************************************************************************/ B.实验代码分析

生产者:

/*

* Producer

* Produce items and try to put it into the buffer

* If the buffer is full, waiting

* When produced, we output like that: Producer 2 produced 222

* When successfully put, we output: Producer 2 have put product 222 into the buffer after 100 milliseconds * The milliseconds is the timespan from the producer produced the item

* When the buffer is full but the producer put the item, an error occurred

* (No way it will happen...)

*/

#define PTIMESPANMAX 5000

void* producer(void* params)

{

int id=*(int *)params;

while(true)

{

SLEEP(rand()%PTIMESPANMAX);

buffer_item rnd=rand();

long begin, end;

CLOCK(begin);

printf("%ld:\t Producer %d\t produced %d\n", (long)(begin-threadStart), id, rnd);

sem_wait(&empty);

pthread_mutex_lock(&mutex);

(CLOCK(end), insert_item(rnd))

? printf("%ld:\t Producer %d\t have put %d\t after %d\t milliseconds\n",end-threadStart, id, rnd, end-begin)

: printf("%ld:\t Producer %d\t Report Error!\n", end-threadStart, id);

pthread_mutex_unlock(&mutex);

sem_post(&full);

}

}

******************************************************************************/ 消费者:

/*

* Consumer

* Try to consume items from the buffer

* If the buffer is empty, waiting

* When try to consume, we output like that: Consumer 3 want to consume

* When successfully consumed, we output: Consumer 3 consumed 222 after 100 milliseconds

* The milliseconds is the timespan from the consumer try to consume the item

* When the buffer is empty but the consumer consumed the item, an error occurred

* (No way it will happen...)

*/

#define CTIMESPANMAX 5000

void * consumer(void* params)

{

int id=*(int *)params;

while(true)

{

SLEEP(rand()%CTIMESPANMAX);

long begin, end;

CLOCK(begin);

printf("%ld:\t Consumer %d\t want to consume\n", begin-threadStart, id);

sem_wait(&full);

pthread_mutex_lock(&mutex);

buffer_item item=buffer[currentIndex];

(CLOCK(end), remove_item(&item))

? printf("%ld:\t Consumer %d\t consumed %d\t after %d\t milliseconds\n",

end-threadStart, id, item, end-begin)

: printf("%ld:\t Consumer %d\t Report Error!\n", end-threadStart, id);

pthread_mutex_unlock(&mutex);

sem_post(&empty);

}

}

******************************************************************************/

主函数:

int main(int argc, char* argv[])

{

srand(unsigned int(time(0)));

// Init mutex, full and empty

pthread_mutex_init(&mutex, NULL);

sem_init(&full, 0, BUFFER_SIZE);

sem_init(&empty, 0, BUFFER_SIZE);

int i=0;

// e... No item in the buffer now, so full is "full"

for(i=0; i

sem_wait(&full);

int sleepTime=0;

int producerCount=0;

int consumerCount=0;

printf("How long to sleep before terminating: ");

scanf_s("%d", &sleepTime);

printf("The number of producer threads: ");

scanf_s("%d", &producerCount);

printf("The number of consumer threads: ");

scanf_s("%d", &consumerCount);

//Init threadStart

CLOCK(threadStart);

// Create producer threads

for(i=0; i

{

pthread_t pid;

pthread_create(&pid, NULL, producer, (void *)&i);

SLEEP(1);

}

// Create consumer threads

for(i=0; i

{

pthread_t pid;

pthread_create(&pid, NULL, consumer, (void *)&i);

SLEEP(1);

}

//Just wait and then... end

SLEEP(sleepTime);

printf("End of time\n");

return 0;

}

******************************************************************************/

C.实验运行结果:

1.程序初始化格式:

******************************************************************************/ 2.程序运行结果:

生产者:producer 0 1 2

消费者:consumer 0 1 2

生产者生产后将数据put到buffer中去

消费者在申请mutex(want to consume)后,即可消费。

由结果看出,三个消费者和三个生产者一直处于相互互斥工作状态,并未出现死锁,拥堵等异常状态。程序运行成功。

5.实验总结

通过这次实验学会了使用信号量机制来控制访问临界区资源,同时要防止deadlock、starvation的产生。本次实验使用的是pthread的接口,熟悉了对这些接口的使用,通过学习,也提高了自己的学习能力。理解了线程同步的概念,掌握了基本方法,加深了课上所学知识的理解和掌握。程序运行时未出现特别错误,只是在头文件下载时花了很长工夫才找到接口资源。。。抱怨一下ftp链接的不稳定。总的来说,这次实验收获很大,学以致用,巩固了课堂知识。

北邮 通信网实验报告

北京邮电大学实验报告通信网理论基础实验报告 学院:信息与通信工程学院 班级:2013211124 学号: 姓名:

实验一 ErlangB公式计算器 一实验内容 编写Erlang B公式的图形界面计算器,实现给定任意两个变量求解第三个变量的功能: 1)给定到达的呼叫量a和中继线的数目s,求解系统的时间阻塞率B; 2)给定系统的时间阻塞率的要求B和到达的呼叫量a,求解中继线的数目s,以实现网络规划; 3)给定系统的时间阻塞率要求B以及中继线的数目s,判断该系统能支持的最大的呼叫量a。 二实验描述 1 实验思路 使用MA TLAB GUITOOL设计图形界面,通过单选按钮确定计算的变量,同时通过可编辑文本框输入其他两个已知变量的值,对于不同的变量,通过调用相应的函数进行求解并显示最终的结果。 2程序界面 3流程图 4主要的函数 符号规定如下: b(Blocking):阻塞率; a(BHT):到达呼叫量;

s(Lines):中继线数量。 1)已知到达呼叫量a及中继线数量s求阻塞率b 使用迭代算法提高程序效率 B s,a= a?B s?1,a s+a?B(s?1,a) 代码如下: function b = ErlangB_b(a,s) b =1; for i =1:s b = a * b /(i + a * b); end end 2)已知到达呼叫量a及阻塞率b求中继线数量s 考虑到s为正整数,因此采用数值逼近的方法。采用循环的方式,在每次循环中增加s的值,同时调用B s,a函数计算阻塞率并与已知阻塞率比较,当本次误差小于上次误差时,结束循环,得到s值。 代码如下: function s = ErlangB_s(a,b) s =1; Bs = ErlangB_b(a,s); err = abs(b-Bs); err_s = err; while(err_s <= err) err = err_s; s = s +1; Bs = ErlangB_b(a,s); err_s = abs(b - Bs); end s = s -1; end 3)已知阻塞率b及中继线数量s求到达呼叫量a 考虑到a为有理数,因此采用变步长逼近的方法。采用循环的方式,在每次循环中增加a的值(步长为s/2),同时调用B s,a函数计算阻塞率并与已知阻塞率比较,当本次误差小于预设阈值时,结束循环,得到a值。 代码如下: function a = ErlangB_a(b,s)

北邮网络-操作系统原理-阶段作业三

一、单项选择题(共10道小题,共100.0分) 1. 不支持记录等结构的文件类型是 A. 顺序文件 B. 索引顺序文件 C. 索引文件 D. 哈希文件 2. 在I/O系统层次模型中处于最高的一个层次,负责所有设备I/O工作中均 要用到的共同的功能的模块是 A. 系统服务接口 B. I/O子系统 C. 设备驱动程序接口 D. 设备驱动程序 3. 在采用局部转换策略进行页面置换的系统中,一个进程得到3个页架。系 统采用先进先出的转换算法,该进程的页面调度序列为:1,3,2,6,2,5,6,4,6。如果页面初次装入时不计算为缺页,请问该进程在调度中会产生几次缺页。 A. 6次 B. 5次 C. 4次 D. 3次

4. 完成从物理页架号到虚地址的映射是 A. 页表 B. 反向页表 C. 多级页表 D. 快表 5. 下列设备中,()为块设备。 A. 软盘驱动器 B. MODEM C. 声卡 D. 鼠标 6. 在下列的实存管理技术中,同一进程在连续地址存储的技术是 A. 可变分区多道管理技术 B. 多重分区管理 C. 简单分页 D. 简单分段

7. 采用简单分页系统的内存管理,页面的大小是8K字节。现有一个逻辑地 址A=3580h,该进程的页表为 [0,5/1,6/2,1/3,0...],则该逻辑地址对应的物理地址A'=() A. 0580h B. D580h C. 6580h D. 7580h 8. 对于实存管理技术,实际上它不具备的功能有: A. 主存分配 B. 地址转换和重定位 C. 存储保护和主存共享 D. 存储扩充 9. 在当前的计算机系统中,通常是按()进行编址。 A. 位 B. 字节

移动通信原理课程设计-实验报告-

电子科技大学 通信抗干扰技术国家级重点实验室 实验报告 课程名称移动通信原理 实验内容无线信道特性分析; BPSK/QPSK通信链路搭建与误码性能分析; SIMO系统性能仿真分析 课程教师胡苏 成员姓名成员学号成员分工 独立完成必做题第二题,参与选做题SIMO仿 真中的最大比值合并模型设计 参与选做题SIMO仿真中的 等增益合并模型设计 独立完成必做题第一题 参与选做题SIMO仿真中的 选择合并模型设计

1,必做题目 1.1无线信道特性分析 1.1.1实验目的 1)了解无线信道各种衰落特性; 2)掌握各种描述无线信道特性参数的物理意义; 3)利用MATLAB中的仿真工具模拟无线信道的衰落特性。 1.1.2实验内容 1)基于simulink搭建一个QPSK发送链路,QPSK调制信号经过了瑞利衰 落信道,观察信号经过衰落前后的星座图,观察信道特性。仿真参数:信源比特速率为500kbps,多径相对时延为[0 4e-06 8e-06 1.2e-05]秒,相对平均功率为[0 -3 -6 -9]dB,最大多普勒频移为200Hz。例如信道设置如下图所示:

1.1.3实验仿真 (1)实验框图 (2)图表及说明 图一:Before Rayleigh Fading1 #上图为QPSK相位图,由图可以看出2比特码元有四种。

图二:After Rayleigh Fading #从上图可以看出,信号通过瑞利信道后,满足瑞利分布,相位和幅度发生随机变化,所以图三中的相位不是集中在四点,而是在四个点附近随机分布。 图三:Impulse Response #从冲激响应的图可以看出相位在时间上发生了偏移。

北邮通电实验报告

实验3 集成乘法器幅度调制电路 信息与通信工程学院 2016211112班 苏晓玥杨宇宁 2016210349 2016210350

一.实验目的 1.通过实验了解振幅调制的工作原理。 2.掌握用MC1496来实现AM和DSB的方法,并研究已调波与调制信号,载波之间的关系。3.掌握用示波器测量调幅系数的方法。 二.实验准备 1.本实验时应具备的知识点 (1)幅度调制 (2)用模拟乘法器实现幅度调制 (3)MC1496四象限模拟相乘器 2.本实验时所用到的仪器 (1)③号实验板《调幅与功率放大器电路》 (2)示波器 (3)万用表 (4)直流稳压电源 (5)高频信号源 三.实验内容 1.模拟相乘调幅器的输入失调电压调节。 2.用示波器观察正常调幅波(AM)波形,并测量其调幅系数。 3.用示波器观察平衡调幅波(抑制载波的双边带波形DSB)波形。 四.实验波形记录、说明 1.DSB信号波形观察

2.DSB信号反相点观察 3.DSB信号波形与载波波形的相位比较 结论:在调制信号正半周期间,两者同相;负半周期间,两者反相。

4.AM正常波形观测 5.过调制时的AM波形观察(1)调制度为100%

(2)调制度大于100% (3)调制度为30% A=260.0mv B=140.0mv

五.实验结论 我们通过实验了解振幅调制的工作原理是:调幅调制就是用低频调制信号去控制高频振荡(载波)的幅度,使其成为带有低频信息的调幅波。目前由于集成电路的发展,集成模拟相乘器得到广泛的应用,为此本实验采用价格较低廉的MC1496集成模拟相乘器来实现调幅之功能。 DSB信号波形与载波波形的相位关系是:在调制信号正半周期间,两者同相;负半周期间,两者反相。 通过实验了解到了调制度的计算方法 六.课程心得体会 通过本次实验,我们了解了振幅调制的工作原理并掌握了实现AM和DSB的方法,学会计算调制度,具体见实验结论。我们对集成乘法器幅度调制电路有了更好的了解,对他有了更深入的认识,提高了对通信电子电路的兴趣。 和模电实验的单独进行,通电实验增强了团队配合的能力,两个人的有效分工提高了实验的效率,减少了一个人的独自苦恼。

北邮通信原理实验 基于SYSTEMVIEW通信原理实验报告

北京邮电大学实验报告 题目:基于SYSTEMVIEW通信原理实验报告 班级:2013211124 专业:信息工程 姓名:曹爽 成绩:

目录 实验一:抽样定理 (3) 一、实验目的 (3) 二、实验要求 (3) 三、实验原理 (3) 四、实验步骤和结果 (3) 五、实验总结和讨论 (9) 实验二:验证奈奎斯特第一准则 (10) 一、实验目的 (10) 二、实验要求 (10) 三、实验原理 (10) 四、实验步骤和结果 (10) 五、实验总结和讨论 (19) 实验三:16QAM的调制与解调 (20) 一、实验目的 (20) 二、实验要求 (20) 三、实验原理 (20) 四、实验步骤和结果 (21) 五、实验总结和讨论 (33) 心得体会和实验建议 (34)

实验一:抽样定理 一、 实验目的 1. 掌握抽样定理。 2. 通过时域频域波形分析系统性能。 二、 实验要求 改变抽样速率观察信号波形的变化。 三、 实验原理 一个频率限制在0f 的时间连续信号()m t ,如果以0 12S T f 的间隔进行等间隔均匀抽样,则()m t 将被所得到的抽样值完全还原确定。 四、 实验步骤和结果 1. 按照图1.4.1所示连接电路,其中三个信号源设置频率值分别为10Hz 、15Hz 、20Hz ,如图1.4.2所示。 图1.4.1 连接框图

图1.4.2 信号源设置,其余两个频率值设置分别为15和20 2.由于三个信号源最高频率为20Hz,根据奈奎斯特抽样定理,最低抽样频率应 为40Hz,才能恢复出原信号,所以设置抽样脉冲为40Hz,如图1.4.3。 图1.4.3 抽样脉冲设置 3.之后设置低通滤波器,设置数字低通滤波器为巴特沃斯滤波器(其他类型的 低通滤波器也可以,影响不大),截止频率设置为信号源最高频率值20Hz,如图1.4.4。

重庆大学移动通信系统实验报告

ADS系统级仿真 ——发射机、零中频接收机与外差式接收机 课程名称:移动通信系统 院系:通信工程学院 专业:通信01班 年级: 2013级 姓名:叶汉霆 学号: 指导教师:李明玉 实验时间: 重庆大学

一、实验目的: 1. 熟悉ADS软件的使用、能用该软件进行原理图设计和原理图仿真。 2. 了解发射机、接收机的结构及工作原理; 3. 掌握利用ADS中行为级模块进行系统级仿真的方法,使用如滤波器、放大器、混频器等行为级的功能模块搭建收发信机系统。 4.运用S参数仿真、交流仿真、谐波平衡仿真、瞬态响应仿真等仿真器对收发信机系统的各种性能参数进行模拟检测。 二、实验原理: 1.接收机 接收机将通过信道传播的信号进行接收,提取出有用信号。接收机一般具有接收灵敏度、选择性、交调抑制、噪声系数等性能参数。 接收机的实现架构可分为:超外差、零中频和数字中频等。 接收机各部分的作用和要求如下: ①射频滤波器1(FP Filter1) 选择信号频段、限制输入信号带宽、减小互调失真。 抑制杂散信号,避免杂散响应。 减少本振泄漏,在频分系统中作为频域相关器。 ②低噪声放大器(LNA) 在不使接收机线性度恶化的前提下提供一定的增益。 抑制后续电路的噪声,降低系统的噪声系数。 ③射频滤波器2(FP Filter2) 抑制由低噪声放大器放大或产生的镜频干扰。 进一步抑制其他杂散信号。 减少本振泄漏。 ④混频器(Mixer) 将射频信号下变频为中频信号。 是接收机中输入射频信号最强的模块,其线性度极为重要,同时要求较低 的噪声系数。 ⑤本振滤波器(Injection Filter) 滤除来自本振的杂散信号。

北邮微波实验报告整理版

北京邮电大学信息与通信工程学院 微波实验报告 班级:20112111xx 姓名:xxx 学号:20112103xx 指导老师:徐林娟 2014年6月

目录 实验二分支线匹配器 (1) 实验目的 (1) 实验原理 (1) 实验内容 (1) 实验步骤 (1) 单支节 (2) 双支节 (7) 实验三四分之一波长阻抗变换器 (12) 实验目的 (12) 实验原理 (12) 实验内容 (13) 实验步骤 (13) 纯电阻负载 (14) 复数负载 (19) 实验四功分器 (23) 实验目的 (23) 实验原理 (23) 实验内容 (24) 实验步骤 (24) 公分比为1.5 (25) 公分比为1(等功分器) (29) 心得体会 (32)

201121111x 班-xx 号-xx ——电磁场与微波技术实验报告 实验二 分支线匹配器 实验目的 1.熟悉支节匹配器的匹配原理 2.了解微带线的工作原理和实际应用 3.掌握Smith 图解法设计微带线匹配网络 实验原理 支节匹配器是在主传输线上并联适当的电纳(或者串联适当的电抗),用附加的反射来抵消主传输线上原来的反射波,以达到匹配的目的。 单支节匹配器,调谐时主要有两个可调参量:距离d 和由并联开路或短路短截线提供的电纳。匹配的基本思想是选择d ,使其在距离负载d 处向主线看去的导纳Y 是Y0+jB 形式。然后,此短截线的电纳选择为-jB ,根据该电纳值确定分支短截线的长度,这样就达到匹配条件。 双支节匹配器,通过增加一个支节,改进了单支节匹配器需要调节支节位置的不足,只需调节两个分支线长度,就能够达到匹配(但是双支节匹配不是对任意负载阻抗都能匹配的,即存在一个不能得到匹配的禁区)。 微带线是有介质εr (εr >1)和空气混合填充,基片上方是空气,导体带条和接地板之间是介质εr ,可以近似等效为均匀介质填充的传输线,等效介质电常数为 εe ,介于1和εr 之间,依赖于基片厚度H 和导体宽度W 。而微带线的特性阻抗与其等效介质电常数为εe 、基片厚度H 和导体宽度W 有关。 实验内容 已知:输入阻抗Z 75in ,负载阻抗Z (6435)l j ,特性阻抗0Z 75 ,介质基片 2.55r ,1H mm 。 假定负载在2GHz 时实现匹配,利用图解法设计微带线单支节和双支节匹配网络,假设双支节网络分支线与负载的距离114d ,两分支线之间的距离为21 8 d 。画出几种可能的电路图并且比较输入端反射系数幅度从1.8GHz 至2.2GHz 的变化。 实验步骤 1.根据已知计算出各参量,确定项目频率。 2.将归一化阻抗和负载阻抗所在位置分别标在Smith 圆上。 3.设计单枝节匹配网络,在图上确定分支线与负载的距离以及分支线的长度,根据给定的介质基片、特性阻抗和频率用TXLINE 计算微带线物理长度和宽度。此处应该注意电长度和实际长度的联系。 4.画出原理图,在用微带线画出基本的原理图时,注意还要把衬底添加到图中,将各部分的参数填入。注意微带 分支线处的不均匀性所引起的影响,选择适当的模型。 5.负载阻抗选择电阻和电感串联的形式,连接各端口,完成原理图,并且将项目的频率改为1.8—2.2GHz 。 6.添加矩形图,添加测量,点击分析,测量输入端的反射系数幅值。 7.同理设计双枝节匹配网络,重复上面的步骤。

移动通信实验指导书

目录 移动通信系统实验指导 (1) 实验一:AWGN信道中BPSK调制系统的 BER仿真计算 (2) 实验二:移动信道建模的仿真分析 (4) 实验三: CDMA通信系统仿真 (5)

移动通信系统实验指导 上机实验是移动通信课程的重要环节,它贯穿于整个“移动通信”课程教学过程中。本课程的实验分为3个阶段进行,它要求学生根据教科书的内容,在MATLAB仿真平台上并完成相应系统及信道建模仿真,帮助学生直观的了解移动通信系统的相关工作原理。最后要求学生根据实验内容完成实验报告。 试验的软件环境为Microsoft Windows XP + MATLAB。

实验一:AWGN信道中BPSK调制系统的 BER仿真计算 一、实验目的 1.掌握二相BPSK调制的工作原理 2.掌握利用MATLAB进行误比特率测试BER的方法 3.掌握AWGN信道中BPSK调制系统的BER仿真计算方法 二、实验原理 1.仿真概述及原理 在数字领域进行的最多的仿真任务是进行调制解调器的误比特率测试,在相同的条件下 进行比较的话,接收器的误比特率性能是一个十分重要的指标。误比特率的测试需要一个发送器、一个接收器和一条信道。首先需要产生一个长的随机比特序列作为发送器的输入,发送器将这些比特调制成某种形式的信号以便传送到仿真信道,我们在传输信道上加上一定的可调制噪声,这些噪声信号会变成接收器的输入,接收器解调信号然后恢复比特序列,最后比较接收到的比特和传送的比特并计算错误。 误比特率性能常能描述成二维图像。纵坐标是归一化的信噪比,即每个比特的能量除以噪声的单边功率谱密度,单位为分贝。横坐标为误比特率,没有量纲。

北邮《现代通信技术》实验报告一

现代通信技术实验报告 班级: 2012211110 学号: 2012210299 姓名:未可知

在学习现代通信技术实验课上,老师提到的一个词“通信人”警醒了我,尽管当初填报志愿时选择了通信工程最终也如愿以偿,进入大三,身边的同学忙着保研、考研、出国、找工作,似乎大家都为了分数在不懈奋斗。作为一个北邮通信工程的大三学生,我也不断地问自己想要学习的是什么,找寻真正感兴趣的是什么,通信这个行业如此之大,我到底适合什么。本学期,现代通信技术这本书让我了解到各种通信技术的发展和规划,也让我对“通信人”的工作有了更深刻的认识。 一、通信知识的储备 《现代通信技术》第一页指出,人与人之间通过听觉、视觉、嗅觉、触觉等感官,感知现实世界而获取信息,并通过通信来传递信息。所谓信息,是客观事物状态和运动特征的一种普遍形式,客观世界中大量地存在、产生和传递着以这些方式表示出来的各种各样的信息。信息的目的是用来“消除不可靠的因素”,它是物质运动规律总和。因此,我们通信人的任务就是利用有线、无线等形式来将信息从信源传递到信宿,在传输过程中保证通信的有效性和可靠性。 而具体来讲,要实现信息传递,通信网是必需的通信体系,其中通信网分层的结构形式需要不同的支撑技术,包括业务网技术,向用户提供电话、电报、数据、图像等各种电信业务的网络;介入与传送网技术,实现信息由一个点传递到另一个点或一些点的功能。对此,我们通信工程专业学习课程的安排让我们一步步打下基础,建立起知识储备。 知识树如下: 如知识树所述,通信工程课程体系可以大致分为一下6类基础:

数学基础:工科数学分析,线性代数,复变函数,概率论基础,随机过程; 电路基础:电路分析,模拟电子技术,数字逻辑电路,通信电子电路; 场与波基础:电磁场与电磁波,微波技术,射频与天线; 计算机应用能力:C 语言程序设计,微机原理与接口技术,计算机网络,数据结构,面向对象程序设计,实时嵌入式系统 信号处理类课程:信号与系统,信号处理,图像处理,DSP 原理及应用; 通信类课程:通信原理,现代通信技术,信息论基础,移动通信,光纤通信等。 从大一开始学习的工科数学分析,大学物理,大学计算机基础等课程为基础类课程,旨在培养我们的语言能力,数学基础,物理基础,计算机能力,然后逐步加大难度,细化课程,方向逐渐明朗详细。同时,课程中加入了各种实验,锻炼了我们的动手能力。 二、通信知识的小小应用 实验课上老师说过,以我们所学的知识已经可以制作简单通信的手机的草图了,我对此跃跃欲试。经过思考和调研,以下是我对于简单手机设计的原理框图和思考结果。 一部手机的结构包括接收机、发射机、中央控制模块、电源和人机界面部分,如下图 手机结构设计图 电路部分包括射频和逻辑音频电路部分,射频电路包括从天线到接收机的解调输出,与发射的I/O 调制到功率放大器输出的电路。其中,射频接收电路完成接收信号的滤波、信号放大、解调等功能;射频发射电路完成语音基带信号的调制、变频、功率放大等功能。要用到的超外差接收机、混频器、鉴相器等在《通信电子电路》书本中的知识。逻辑音频包括从接收解调到接收音频输出、送话器电路到发射I/O 调制器及逻辑电路部分的中央处理单元、数字语音处理及各种存储器电路。由核心控制模块CPU 、EEPROM 、 FLASH 、SRAM 等部分组成,一个基本 天线 接收机 发射机 频率合成 电源 逻 辑 音 频 人 机 交 互

北京邮电大学2009年操作系统期末试卷

北京邮电大学2008——2009学年第一学期 《操作系统》期末考试试题(A) 1.FILL IN BLANKS (10 points) 1.1 A _trap___ is a software-generated interrupt caused either by an error or by a specific request from a user program that an operating-system services be performed. 1.2 A ______ is used in Unix systems to notify a process that a particular event has occurred. 1.3 To manage the process executing, OS records the state and other information (e.g. the priority) of the process in . 1.4 The scheduling criteria include CPU utilization, throughput, turnaround time, waiting time, and response time .

1.5 For n concurrent processes that mutual exclusively use some resources, the code segmentations, in which the processes access the resources, are called deadlock . 1.6. The ___visual memory___ scheme enables users to run programs that are larger than actual physical memory, this allows the execution of a process that is not completely in memory. 1.7. The __FIFO___ page replacement algorithm associates with each page the time when that page was brought into memory. When a page must be replaced, the oldest page is chosen. 1.8The file system resides permanently on , which is designed to hold a large amount of data permanently. 1.9The file system itself is generally composed of many different levels, including the logical file system, the file-organization module, the and the I/O control. 1.10 T he kernel’s I/O subsystem provides numero us services. Among these are I/O scheduling, , caching, spooling, device reservation, and error handling, and name translation. 2.CHOICE ( 10 points ) 2.1 _____ operating systems have well defined, fixed time constraints. Processing must be done within the defined constrains, or the system will fail. A. Multimedia B. Real-time C. Clustered D. Network 2.2 Which one of the following OS is implemented based on microkernel structure? _____

移动通信实验报告

南昌工程学院 移动通信实验报告 信息工程学院系(院)通信工程专业 学生姓名凌丹霞 班级09通信工程 学号2009100249 指导教师樊飞燕 完成日期2012 年 6 月 5 日

实验一、认知实验 一、实验目的: 了解RNC的基础配置内容 了解B8300的基础配置内容 二、实验设备和仪器 pc机一台 中兴TD-SCDMA移动设备无线部份 三、实验原理 四、实验记录 单板介绍 1、操作维护处理板ROMB ROMB单板提供以下功能: 负责RNC系统的全局过程处理; 负责整个RNC的操作维护代理; 各单板状态的管理和信息的搜集,维护整个RNC的全局性的静态数据; ROMB上还可能运行负责路由协议处理的RPU模块 2、控制面处理板RCB 实现Iu/Iur/Iub/Uu接口对应的RNC侧RANAP/RNSAP/NBAP/RRC协议; NO.7信令处理。 3、CLKG单板 时钟产生板CLKG为RNC提供系统所需要的同步时钟。CLKG单板采用热主备设计,主备用CLKG锁定于同一基准,以实现平滑倒换。 通过485接口接收UIM的控制指令以及向UIM发送单板状态信息。 CLKG板本身具有时钟接收电路,可接收2路通过接口单板传送过来的8K基准时钟,可以接收BITS提供的2路2MHz、2Mbits基准,也可以接收GPS提供的1路主备高阻复用的PP2S、16CHIP、8K时钟基准 4、APBE板 ATM处理板APBE用于Iu/Iur/Iub接口的ATM接入处理。负责完成RNC系统STM-1物理接口的AAL2和AAL5的终结,同时提供宽带信令SSCOP、SSCF子层的处理,但不处理用户面协议。而是在将ATM信元完成AAL5的SAR,区分控制面和用户面数据后,控制面数据转发到本板CPU处理,用户面数据根据IP地址转发到RUB 板进行处理。

北邮arduino实验报告

电子电路综合实验设计 实验名称: 基于 Arduino 的电压有效值测量电路设计与实现 学院: 班级: 学号: 姓名: 班内序号:

实验 基于Arduino 的电压有效值测量电路设计与实现 一. 摘要 Arduino是一个基于开放原始码的软硬件平台,可用来开发独立运作、并具互动性的电子产品,也可以开发与PC 相连的周边装置,同时能在运行时与PC 上的软件进行交互。为了测量正弦波电压有效值,首先我们设计了单电源供电的半波整流电路,并进行整流滤波输出,然后选择了通过Arduino设计了读取电压有效值的程序,并实现使用此最小系统来测量和显示电压有效值。在频率和直流电压幅度限定在小范围的情况下,最小系统的示数基本和毫伏表测量的值相同。根据交流电压有效值的定义,运用集成运放和设计的Arduino最小系统的结合,实现了运用少量元器件对交流电压有效值的测量。 关键字:半波整流整流滤波 Arduino最小系统读取电压有效值 二. 实验目的 1、熟悉Arduino 最小系统的构建和使用方法; 2、掌握峰值半波整流电路的工作原理; 3、根据技术指标通过分析计算确定电路形式和元器件参数; 4、画出电路原理图(元器件标准化,电路图规范化); 5、熟悉计算机仿真方法; 6、熟悉Arduino 系统编程方法。 三. 实验任务及设计要求 设计实现 Arduino 最小系统,并基于该系统实现对正弦波电压有效值的测量和显示。 1、基本要求 (1)实现Arduino 最小系统,并能下载完成Blink 测试程序,驱动Arduino 数字13 口LED 闪烁; (2)电源部分稳定输出5V 工作电压,用于系统供电; (3)设计峰值半波整流电路,技术指标要求如下:

北邮通信原理实验报告

北京邮电大学通信原理实验报告 学院:信息与通信工程学院班级: 姓名: 姓名:

实验一:双边带抑制载波调幅(DSB-SC AM ) 一、实验目的 1、了解DSB-SC AM 信号的产生以及相干解调的原理和实现方法。 2、了解DSB-SC AM 信号波形以及振幅频谱特点,并掌握其测量方法。 3、了解在发送DSB-SC AM 信号加导频分量的条件下,收端用锁相环提取载波的原理及其实现方法。 4、掌握锁相环的同步带和捕捉带的测量方法,掌握锁相环提取载波的调试方法。 二、实验原理 DSB 信号的时域表达式为 ()()cos DSB c s t m t t ω= 频域表达式为 1 ()[()()]2 DSB c c S M M ωωωωω=-++ 其波形和频谱如下图所示 DSB-SC AM 信号的产生及相干解调原理框图如下图所示

将均值为零的模拟基带信号m(t)与正弦载波c(t)相乘得到DSB—SC AM信号,其频谱不包含离散的载波分量。 DSB—SC AM信号的解调只能采用相干解调。为了能在接收端获取载波,一种方法是在发送端加导频,如上图所示。收端可用锁相环来提取导频信号作为恢复载波。此锁相环必须是窄带锁相,仅用来跟踪导频信号。 在锁相环锁定时,VCO输出信号sin2πf c t+φ与输入的导频信号cos2πf c t 的频率相同,但二者的相位差为φ+90°,其中很小。锁相环中乘法器的两个 输入信号分别为发来的信号s(t)(已调信号加导频)与锁相环中VCO的输出信号,二者相乘得到 A C m t cos2πf c t+A p cos2πf c t?sin2πf c t+φ =A c 2 m t sinφ+sin4πf c t+φ+ A p 2 sinφ+sin4πf c t+φ 在锁相环中的LPF带宽窄,能通过A p 2 sinφ分量,滤除m(t)的频率分量及四倍频载频分量,因为很小,所以约等于。LPF的输出以负反馈的方式控制VCO,使其保持在锁相状态。锁定后的VCO输出信号sin2πf c t+φ经90度移相后,以cos2πf c t+φ作为相干解调的恢复载波,它与输入的导频信号cos2πf c t 同频,几乎同相。 相干解调是将发来的信号s(t)与恢复载波相乘,再经过低通滤波后输出模拟基带信号 A C m t cos2πf c t+A p cos2πf c t?cos2πf c t+φ =A c 2 m t cosφ+cos4πf c t+φ+ A p 2 cosφ+cos4πf c t+φ 经过低通滤波可以滤除四倍载频分量,而A p 2 cosφ是直流分量,可以通过隔直

移动通信实验报告

实验一GSM通信系统实验(全球数字移动通信系统) 一、实验目的 通过本实验将正交调制及解调的单元实验串起来,让学生建立起GSM通信系统的概念,了解GSM通信系统的组成及特性。 二、实验内容 1、搭建GSM数据通信系统。 2、观察GSM通信系统各部分信号。 三、基本原理 由于GSM是一个全数字系统,话音和不同速率数据的传输都要进行数字化处理。为了将源数据转换为最终信号并通过无线电波发射出去,需要经过几个连续的过程。相反,在接收端需要经过一系列的反过程来重现原始数据。下面我们主要针对数据的传输过程进行描述。 信源端的主要工作有 1、信道编码 信道编码用于改善传输质量,克服各种干扰因素对信号产生的不良影响,但它是以增加比特降低信息量为代价的。 信道编码的基本原理是在原始数据上附加一些冗余比特信息,增加的这些比特是通过某种约定从圆熟数据中经计算产生的,接收端的解码过程利用这些冗余的比特来检测误码并尽可能的纠正误码。如果收到的数据经过同样的计算所得的冗余比特同收到的不一样时,我们就可以确定传输有误。根据传输模式不同,在无线传输中使用了不同的码型。 GSM使用的编码方式主要有块卷积码、纠错循环码、奇偶码。块卷积码主要用于纠错,当解调器采用最大似然估计方法时,可以产生十分有效的纠错结果,纠错循环码主要用于检测和纠正成组出现的误码,通常和块卷积码混合使用,用于捕捉和纠正遗漏的组误差。奇偶码是一种普遍使用的最简单的检测误码的方法。 2、交织 在移动通信中这种变参的信道上,比特差错通常是成串发生的。这是由于持续较长的深衰落谷点会影响到相继一串的比特。但是,信道编码仅在检测和校正单个差错和不太长差错

北邮高级操作系统期末试卷

2017,2015,2013北邮高级操作系统 试题 学号: 姓名: 成绩: 、分布式操作系统中的透明性主要是什么?其中那些透明性容易实现?哪些难实现????分? 难点: 、创建一个分布式数据库系统可提供有效的存取手段来操纵这些结点上的子数据库。 、不确定性,控制比较复杂,尤其是在资源管理上要附加许多协调操作—资源属于局部工作站,性能、可靠性对网络的依赖性强,安全保密——基础不好。用户掌握有许软件接口,相应的应用软件较少,需要大力开发。 、分布式互斥中集中式算法、分布式算法、令牌算法。分析一下其中那个算法比较实用,为什么????分? 集中式算法:集中式算法借鉴了集中式互斥算法的思想,在分布式系统

中,选出一个进程为协调者 ?通过科学的分析制定一套规则? 。协调者对所有的请求进行排队并根据一定的规则授予许可。协调者接受请求以后,检查临界区内的资源是否被其他进程占用。如果是,则它将当前请求进程插入到对应临界资源的请求队列中 否则,回复一个同意消息给请求进程,通知它可以访问该临界资源。该算法通俗易懂,既能够杜绝死锁、饥饿等现象发生,又能保证资源的互斥访问顺利进行。 但是它也有缺点,由于是集中式管理,所以一旦管理进程出现故障,则整个系统将处于瘫痪状态。因此,管理进程的性能完全决定了算法的效率,应用范围小,难以普及。 分布式算法:分布式算法中运用到广播请求通信,当进程想请求共享资源时,需要首先建立三个变量 准备进入临界区,实时时间和处理器号,并利用广播通信发送给正在运行的所有进程。该算法的核心思想如下 当进程想进入临界区时 要建立一个包括进入的临界区名字、处理器号和当前时间的消息 并把消息发送给所有其它进程。当进程接收到另一个进程的请求消息时 将分下面三种情况来区别对待 ?若接收者不在临界区中 也不想进入临界区 就向发送者发送 ?消息; ?若接收者已经在临界区内就不必回答 而是负责对请求消息排队; ?若接收者要进入临界区 但还没进入 它就会把接收的消息和它发送的消息的时间戳进行对比 取小的那个。如果接收的消息时间戳小 就发 ?消息 如果发送的消息时间戳小 那么接收者负责排列请求队列而不发送任何消息。当进程接收到允许消息时 它就进入临界区。从临界区退出时 向队列中的所有进程发送 ?消息 并将自己从队列中删除。该算法可以保证访问临界区的互斥性以及无死锁进程、无饥饿进程。但是这种算法有个严重的缺点是算法太复杂并且不健壮 任何一个进程崩溃都会影响到算法的正确性。二是令牌丢失 令牌算法:令牌算法中引入了令牌,所有的进程组成一个环模型,环中每个进程需要知道它的下一个位置的节点的名称。令牌在环上顺序传递,当

移动通信实验报告

北京邮电大学移动通信实验报告 班级:

专业: 姓名: 学号: 班内序号: 一、实验目的....................................................................................................错误!未定义书签。 1、移动通信设备观察实验......................................................................错误!未定义书签。 2、网管操作实验......................................................................................错误!未定义书签。 二、实验设备....................................................................................................错误!未定义书签。 三、实验内容....................................................................................................错误!未定义书签。 1、TD_SCDMA系统认识 ..........................................................................错误!未定义书签。 2、硬件认知 (3) 移动通信设备 (3) RNC设备认知 (4) Node B设备(基站设备) (6) LMT-B软件 ......................................................................................错误!未定义书签。 通过OMT创建基站 (8) 四、实验总结....................................................................................................错误!未定义书签。

北邮程序设计实验报告

程序设计实践 设 计 报 告 课题名称:邮件客户端学生姓名: 班级: 2 班内序号:16 学号: 2 日期:2014.6.4

1.课题概述 1.1课题目标和主要内容 本课题主要通过MFC的方式,利用SOCKET以及SMTP相关知识,来实现邮件(可携带附件)的定向发送,借此来复习和巩固C++编程的基本思想;学习SOCKET以及SMTP的相关知识,了解复杂网络应用程序的设计方法,并独立完成一个网络应用。 1.2系统的主要功能 1.邮件的发送(不携带附件) 2.邮件的发送(携带附件) 3.邮件接收 2. 系统设计 2.1 系统总体框架 程序的功能由MyEmailClientDlg.cpp,SMTP.cpp,MailMessage.cpp,Base64.cpp, MIMECode.cpp,MIMEContentAgent.cpp,MIMEMessage.cpp,AppOctetStream.cpp, MyEmailClient.cpp,StdAfx.cpp,TextPlain.cpp来实现。其中MIMECode.cpp, MIMEContentAgent.cpp,MIMEMessage.cpp, AppOctetStream.cpp, TextPlain.cpp来对MIME 协议进行封装,Base64.cpp来对Base64编码进行封装,SMTP.cpp是对SMTP协议进行封装,MailMessage.cpp是利用MIME协议对邮件内容的一个处理,最终通过MyEmailClientDlg.cpp 来实现邮件的发送的功能。 2.2 系统详细设计 [1] 模块划分图及描述 协议模块:包括网络应用程序中的各种协议,包括STMP协议,MIME协议等。 处理模块:主要实现对数据的进行编码以及解码。 实现模块:主要内容为邮件发送的具体步骤,相关按钮操作。 [2] 类关系图及描述 协议类:CSMTP, CTEXTPlai, CMIMECode,C MIMEContentAgent,C MIMEMessage, CAppOctetStream, CTextPlain.主要为协议中信息处理的中作用 编码类:Base64, MailMessage.主要为对邮件信息的处理

北邮高级操作系统期末试卷

20仃,2015,2013北邮高级操作系统 试题 学号:姓名:成绩: 1、分布式操作系统中的透明性主要是什么?其中那些透明性容 易实现?哪些难实现?(20分) 难点: 1、创建一个分布式数据库系统可提供有效的存取手段来操纵这些结点上的子数据库。 2、不确定性,控制比较复杂,尤其是在资源管理上要附加许多协调操作一资源 属于局部工作站,性能、可靠性对网络的依赖性强,安全保密一一基础不好。用户掌握有许软件接口,相应的应用软件较少,需要大力开发。 2、分布式互斥中集中式算法、分布式算法、令牌算法。分析一下其 中那个算法比较实用,为什么?(20分) 集中式算法:集中式算法借鉴了集中式互斥算法的思想,在分布式系统中,选出一个进程为协调者(通过科学的分析制定一套规则)。协调者对所有的请求进行排队并根据一定的规则授予许可。协调者接受请求以后,检查临界区内的资源是否被其他进程占用。如果是,则它将当前请求进程插入到对应临界资源的请求队列中;否则,回复一个同意消息给请求进程,通知它可以访问该临界资源。该算法通俗易懂,既能够杜绝死锁、饥饿等现象发生,又能保证资源的互斥访问顺利进行。 但是它也有缺点,由于是集中式管理,所以一旦管理进程出现故障,则整个系统将处于 瘫痪状态。因此,管理进程的性能完全决定了算法的效率,应用范围小,难以普及。

分布式算法:分布式算法中运用到广播请求通信,当进程想请求共享资源时,需要首先建立三个变量:准备进入临界区,实时时间和处理器号,并利用广播通信发送给正在运行的所有进程。该算法的核心思想如下:当进程想进入临界区时,要建立一个包括进入的临界区名字、处理器号和当前时间的消息,并把消息发送给所有其它进程。当进程接收到另一个进程的请求消息时,将分下面三种情况来区别对待:1)若接收者不在临界区中,也不想进入临界区,就向发送者发送0K消息;2)若接收者已经在临界区内就不必回答,而是负责对请求消息排队;3)若接收者要进入临界区,但还没进入,它就会把接收的消息和它发送的消息的时间戳进行对比,取小的那个。如果接收的消息时间戳小,就发0K消息,如果发送的消息时间戳小,那么接收者负责排列请求队列而不发送任何消息。当进程接收到允许消息时,它就进入临界区。从临界区退出时,向队列中的所有进程发送0K消息,并将自己从队列中删除。该算法可以保证访问临界区 的互斥性以及无死锁进程、无饥饿进程。但是这种算法有个严重的缺点是算法太 二是令牌丢失 复杂并且不健壮,任何一个进程崩溃都会影响到算法的正确性。 令牌算法:令牌算法中引入了令牌,所有的进程组成一个环模型,环中每个进程需要知道它的下一个位置的节点的名称。令牌在环上顺序传递,当某个进程拥有令牌时就表明可以访问临界区。当请求进程没有令牌时,算法需要N发送任何消息。如果得到令牌的进程不打算进入临界区,它只是简单地将令牌传送给它后面的进程。当每个进程都需要进入临界区时,令牌在环上的传递速度最慢;相反,当没有进程想要进入临界区时,令牌在环上的传递速度最快。 (该算法的正确性是显而易见的,但是也存在一些问题,比如说,当令牌丢失时,需要重新生成。可是如何检测令牌丢失又是一个困难的问题。还有,如果环中的一个进程崩溃,那么环 的连贯性就遭到破坏,算法也就会出现麻烦。) 综上所述,基于令牌的算法在排除了令牌丢失和进程故障等问题之后,在今后的分布式系统中,能有更好的应用。

相关文档
最新文档