文档库 最新最全的文档下载
当前位置:文档库 › epoll IO多路复用技术

epoll IO多路复用技术

epoll IO多路复用技术
epoll IO多路复用技术

一、编目1

1. Epoll 是何方神圣?

Epoll 可是当前在Linux 下开发大规模并发网络程序的热门人选,Epoll 在Linux2.6 内核中正式引入,和select 相似,其实都I/O 多路复用技术而已,并没有什么神秘的。

其实在Linux 下设计并发网络程序,向来不缺少方法,比如典型的Apache 模型(Process Per Connection ,简称PPC ),TPC (Thread Per Connection )模型,以及select 模型和poll 模型,那为何还要再引入Epoll 这个东东呢?那还是有得说说的…

2. 常用模型的缺点

如果不摆出来其他模型的缺点,怎么能对比出Epoll 的优点呢。

2.1 PPC/TPC 模型

这两种模型思想类似,就是让每一个到来的连接一边自己做事去,别再来烦我。只是PPC 是为它开了一个进程,而TPC 开了一个线程。可是别烦我是有代价的,它要时间和空间啊,连接多了之后,那么多的进程/ 线程切换,这开销就上来了;因此这类模型能接受的最大连接数都不会高,一般在几百个左右。

2.2 select 模型

1. 最大并发数限制,因为一个进程所打开的FD (文件描述符)是有限制的,由

FD_SETSIZE 设置,默认值是1024/2048 ,因此Select 模型的最大并发数就被相应限制了。自己改改这个FD_SETSIZE ?想法虽好,可是先看看下面吧…

2. 效率问题,select 每次调用都会线性扫描全部的FD 集合,这样效率就会呈现线性下降,把FD_SETSIZE 改大的后果就是,大家都慢慢来,什么?都超时了??!!

3. 内核/ 用户空间内存拷贝问题,如何让内核把FD 消息通知给用户空间呢?在这个问题上select 采取了内存拷贝方法。

2.3 poll 模型

基本上效率和select 是相同的,select 缺点的 2 和 3 它都没有改掉。

3. Epoll 的提升

把其他模型逐个批判了一下,再来看看Epoll 的改进之处吧,其实把select 的缺点反过来那就是Epoll 的优点了。

3.1. Epoll 没有最大并发连接的限制,上限是最大可以打开文件的数目,这个数字一般远大于2048, 一般来说这个数目和系统内存关系很大,具体数目可以cat /proc/sys/fs/file-max 察看。

3.2. 效率提升,Epoll 最大的优点就在于它只管你“活跃”的连接,而跟连接总数无关,因此在实际的网络环境中,Epoll 的效率就会远远高于select 和poll 。

3.3. 内存拷贝,Epoll 在这点上使用了“共享内存”,这个内存拷贝也省略了。

4. Epoll 为什么高效

Epoll 的高效和其数据结构的设计是密不可分的,这个下面就会提到。

首先回忆一下select 模型,当有I/O 事件到来时,select 通知应用程序有事件到了快去处理,而应用程序必须轮询所有的FD 集合,测试每个FD 是否有事件发生,并处理事件;代码像下面这样:

int res = select(maxfd+1, &readfds, NULL, NULL, 120);

if (res > 0)

{

for (int i = 0; i < MAX_CONNECTION; i++)

{

if (FD_ISSET(allConnection[i], &readfds))

{

handleEvent(allConnection[i]);

}

}

}

// if(res == 0) handle timeout, res < 0 handle error

Epoll 不仅会告诉应用程序有I/0 事件到来,还会告诉应用程序相关的信息,这些信息是应用程序填充的,因此根据这些信息应用程序就能直接定位到事件,而不必遍历整个FD 集合。

int res = epoll_wait(epfd, events, 20, 120);

for (int i = 0; i < res;i++)

{

handleEvent(events[n]);

}

5. Epoll 关键数据结构

前面提到Epoll 速度快和其数据结构密不可分,其关键数据结构就是:

struct epoll_event {

__uint32_t events; // Epoll events

epoll_data_t data; // User data variable

};

typedef union epoll_data {

void *ptr;

int fd;

__uint32_t u32;

__uint64_t u64;

} epoll_data_t;

可见epoll_data 是一个union 结构体, 借助于它应用程序可以保存很多类型的信息:fd 、指针等等。有了它,应用程序就可以直接定位目标了。

6. 使用Epoll

既然Epoll 相比select 这么好,那么用起来如何呢?会不会很繁琐啊… 先看看下面的三个函数吧,就知道Epoll 的易用了。

int epoll_create(int size);

生成一个Epoll 专用的文件描述符,其实是申请一个内核空间,用来存放你想关注的socket fd 上是否发生以及发生了什么事件。size 就是你在这个Epoll fd 上能关注的最大socket fd 数,大小自定,只要内存足够。

int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event );

控制某个Epoll 文件描述符上的事件:注册、修改、删除。其中参数epfd 是epoll_create() 创建Epoll 专用的文件描述符。相对于select 模型中的FD_SET 和FD_CLR 宏。

int epoll_wait(int epfd,struct epoll_event * events,int maxevents,int timeout);

等待I/O 事件的发生;参数说明:

epfd: 由epoll_create() 生成的Epoll 专用的文件描述符;

epoll_event: 用于回传代处理事件的数组;

maxevents: 每次能处理的事件数;

timeout: 等待I/O 事件发生的超时值;

返回发生事件数。

相对于select 模型中的select 函数。

7. 例子程序

下面是一个简单Echo Server 的例子程序,麻雀虽小,五脏俱全,还包含了一个简单的超时检查机制,简洁起见没有做错误处理。

view plain

1.//

2.// a simple echo server using epoll in linux

3.//

4.// 2009-11-05

5.// by sparkling

6.//

7.#include

8.#include

9.#include

10.#include

11.#include

12.#include

13.#include

14.#include

15.#include

https://www.wendangku.net/doc/2f13551967.html,ing namespace std;

17.#define MAX_EVENTS 500

18.struct myevent_s

19.{

20.int fd;

21.void (*call_back)(int fd, int events, void *arg);

22.int events;

23.void *arg;

24.int status; // 1: in epoll wait list, 0 not in

25.char buff[128]; // recv data buffer

26.int len;

27.long last_active; // last active time

28.};

29.// set event

30.void EventSet(myevent_s *ev, int fd, void (*call_back)(int, int, void*), voi

d *arg)

31.{

32. ev->fd = fd;

33. ev->call_back = call_back;

34. ev->events = 0;

35. ev->arg = arg;

36. ev->status = 0;

37. ev->last_active = time(NULL);

38.}

39.// add/mod an event to epoll

40.void EventAdd(int epollFd, int events, myevent_s *ev)

41.{

42.struct epoll_event epv = {0, {0}};

43.int op;

44. epv.data.ptr = ev;

45. epv.events = ev->events = events;

46.if(ev->status == 1){

47. op = EPOLL_CTL_MOD;

48. }

49.else{

50. op = EPOLL_CTL_ADD;

51. ev->status = 1;

52. }

53.if(epoll_ctl(epollFd, op, ev->fd, &epv) < 0)

54. printf("Event Add failed[fd=%d]/n", ev->fd);

55.else

56. printf("Event Add OK[fd=%d]/n", ev->fd);

57.}

58.// delete an event from epoll

59.void EventDel(int epollFd, myevent_s *ev)

60.{

61.struct epoll_event epv = {0, {0}};

62.if(ev->status != 1) return;

63. epv.data.ptr = ev;

64. ev->status = 0;

65. epoll_ctl(epollFd, EPOLL_CTL_DEL, ev->fd, &epv);

66.}

67.int g_epollFd;

68.myevent_s g_Events[MAX_EVENTS+1]; // g_Events[MAX_EVENTS] is used by listen

fd

69.void RecvData(int fd, int events, void *arg);

70.void SendData(int fd, int events, void *arg);

71.// accept new connections from clients

72.void AcceptConn(int fd, int events, void *arg)

73.{

74.struct sockaddr_in sin;

75. socklen_t len = sizeof(struct sockaddr_in);

76.int nfd, i;

77.// accept

78.if((nfd = accept(fd, (struct sockaddr*)&sin, &len)) == -1)

79. {

80.if(errno != EAGAIN && errno != EINTR)

81. {

82. printf("%s: bad accept", __func__);

83. }

84.return;

85. }

86.do

87. {

88.for(i = 0; i < MAX_EVENTS; i++)

89. {

90.if(g_Events[i].status == 0)

91. {

92.break;

93. }

94. }

95.if(i == MAX_EVENTS)

96. {

97. printf("%s:max connection limit[%d].", __func__, MAX_EVENTS);

98.break;

99. }

100.// set nonblocking

101.if(fcntl(nfd, F_SETFL, O_NONBLOCK) < 0) break;

102.// add a read event for receive data

103. EventSet(&g_Events[i], nfd, RecvData, &g_Events[i]);

104. EventAdd(g_epollFd, EPOLLIN|EPOLLET, &g_Events[i]);

105. printf("new conn[%s:%d][time:%d]/n", inet_ntoa(sin.sin_addr), ntohs (sin.sin_port), g_Events[i].last_active);

106. }while(0);

107.}

108.// receive data

109.void RecvData(int fd, int events, void *arg)

110.{

111.struct myevent_s *ev = (struct myevent_s*)arg;

112.int len;

113.// receive data

114. len = recv(fd, ev->buff, sizeof(ev->buff)-1, 0);

115. EventDel(g_epollFd, ev);

116.if(len > 0)

117. {

118. ev->len = len;

119. ev->buff[len] = '/0';

120. printf("C[%d]:%s/n", fd, ev->buff);

121.// change to send event

122. EventSet(ev, fd, SendData, ev);

123. EventAdd(g_epollFd, EPOLLOUT|EPOLLET, ev);

124. }

125.else if(len == 0)

126. {

127. close(ev->fd);

128. printf("[fd=%d] closed gracefully./n", fd);

129. }

130.else

131. {

132. close(ev->fd);

133. printf("recv[fd=%d] error[%d]:%s/n", fd, errno, strerror(errno));

134. }

135.}

136.// send data

137.void SendData(int fd, int events, void *arg)

138.{

139.struct myevent_s *ev = (struct myevent_s*)arg;

140.int len;

141.// send data

142. len = send(fd, ev->buff, ev->len, 0);

143. ev->len = 0;

144. EventDel(g_epollFd, ev);

145.if(len > 0)

146. {

147.// change to receive event

148. EventSet(ev, fd, RecvData, ev);

149. EventAdd(g_epollFd, EPOLLIN|EPOLLET, ev);

150. }

151.else

152. {

153. close(ev->fd);

154. printf("recv[fd=%d] error[%d]/n", fd, errno);

155. }

156.}

157.void InitListenSocket(int epollFd, short port)

158.{

159.int listenFd = socket(AF_INET, SOCK_STREAM, 0);

160. fcntl(listenFd, F_SETFL, O_NONBLOCK); // set non-blocking

161. printf("server listen fd=%d/n", listenFd);

162. EventSet(&g_Events[MAX_EVENTS], listenFd, AcceptConn, &g_Events[MAX_EVE NTS]);

163.// add listen socket

164. EventAdd(epollFd, EPOLLIN|EPOLLET, &g_Events[MAX_EVENTS]);

165.// bind & listen

166. sockaddr_in sin;

167. bzero(&sin, sizeof(sin));

168. sin.sin_family = AF_INET;

169. sin.sin_addr.s_addr = INADDR_ANY;

170. sin.sin_port = htons(port);

171. bind(listenFd, (const sockaddr*)&sin, sizeof(sin));

172. listen(listenFd, 5);

173.}

174.int main(int argc, char **argv)

175.{

176.short port = 12345; // default port

177.if(argc == 2){

178. port = atoi(argv[1]);

179. }

180.// create epoll

181. g_epollFd = epoll_create(MAX_EVENTS);

182.if(g_epollFd <= 0) printf("create epoll failed.%d/n", g_epollFd); 183.// create & bind listen socket, and add to epoll, set non-blocking 184. InitListenSocket(g_epollFd, port);

185.// event loop

186.struct epoll_event events[MAX_EVENTS];

187. printf("server running:port[%d]/n", port);

188.int checkPos = 0;

189.while(1){

190.// a simple timeout check here, every time 100, better to use a min i-heap, and add timer event

191.long now = time(NULL);

192.for(int i = 0; i < 100; i++, checkPos++) // doesn't check listen fd

193. {

194.if(checkPos == MAX_EVENTS) checkPos = 0; // recycle

195.if(g_Events[checkPos].status != 1) continue;

196.long duration = now - g_Events[checkPos].last_active;

197.if(duration >= 60) // 60s timeout

198. {

199. close(g_Events[checkPos].fd);

200. printf("[fd=%d] timeout[%d--%d]./n", g_Events[checkPos].fd, g_Events[checkPos].last_active, now);

201. EventDel(g_epollFd, &g_Events[checkPos]);

202. }

203. }

204.// wait for events to happen

205.int fds = epoll_wait(g_epollFd, events, MAX_EVENTS, 1000); 206.if(fds < 0){

207. printf("epoll_wait error, exit/n");

208.break;

209. }

210.for(int i = 0; i < fds; i++){

211. myevent_s *ev = (struct myevent_s*)events[i].data.ptr; 212.if((events[i].events&EPOLLIN)&&(ev->events&EPOLLIN)) // read ev ent

213. {

214. ev->call_back(ev->fd, events[i].events, ev->arg);

215. }

216.if((events[i].events&EPOLLOUT)&&(ev->events&EPOLLOUT)) // write event

217. {

218. ev->call_back(ev->fd, events[i].events, ev->arg);

219. }

220. }

221. }

222.// free resource

223.return 0;

224.}

二、编目2

Linux I/O多路复用技术在比较多的TCP网络服务器中有使用,即比较多的用到select 函数。Linux 2.6内核中有提高网络I/O性能的新方法,即epoll 。

1、为什么select落后

首先,在Linux内核中,select所用到的FD_SET是有限的,即内核中有个参数

__FD_SETSIZE定义了每个FD_SET的句柄个数,在我用的2.6.15-25-386内核中,该值是1024,搜索内核源代码得到:

include/linux/posix_types.h:

#define __FD_SETSIZE 1024

也就是说,如果想要同时检测1025个句柄的可读状态是不可能用select实现的。或者同时检测1025个句柄的可写状态也是不可能的。其次,内核中实现select是使用轮询方法,即每次检测都会遍历所有FD_SET中的句柄,显然,select函数的执行时间与FD_SET中句柄的个数有一个比例关系,即select要检测的句柄数越多就会越费时。当然,在前文中我并没有提及poll方法,事实上用select的朋友一定也试过poll,我个人觉得select和poll 大同小异,个人偏好于用select而已。

2、内核中提高I/O性能的新方法epoll

epoll是什么?按照man手册的说法:是为处理大批量句柄而作了改进的poll。要使用epoll只需要以下的三个系统函数调用:epoll_create(2),epoll_ctl(2),epoll_wait(2)。

Linux2.6内核epoll介绍

先介绍2本书《The Linux Networking Architecture--Design and Implementation of Network Protocols in the Linux Kernel》,以2.4内核讲解Linux TCP/IP实现,相当不错。作为一个现实世界中的实现,很多时候你必须作很多权衡,这时候参考一个久经考验的系统

更有实际意义。举个例子,linux内核中sk_buff结构为了追求速度和安全,牺牲了部分内存,所以在发送TCP包的时候,无论应用层数据多大,sk_buff最小也有272的字节。其实对于socket应用层程序来说,另外一本书《UNIX Network Programming Volume 1》意义更大一点。2003年的时候,这本书出了最新的第3版本,不过主要还是修订第2版本。其中第6章《I/O Multiplexing》是最重要的,Stevens给出了网络IO的基本模型。在这里最重要的莫过于select模型和Asynchronous I/O模型。从理论上说,AIO似乎是最高效的,你的IO操作可以立即返回,然后等待os告诉你IO操作完成。但是一直以来,如何实现就没有一个完美的方案。最著名的windows完成端口实现的AIO,实际上也只是内部用线程池实现的罢了,最后的结果是IO有个线程池,你的应用程序也需要一个线程池...... 很多文档其实已经指出了这引发的线程context-switch所带来的代价。在linux 平台上,关于网络AIO一直是改动最多的地方,2.4的年代就有很多AIO内核patch,最著名的应该算是SGI。但是一直到2.6内核发布,网络模块的AIO一直没有进入稳定内核版本(大部分都是使用用户线程模拟方法,在使用了NPTL的linux上面其实和windows的完成端口基本上差不多了)。

2.6内核所支持的AIO特指磁盘的AIO---支持io_submit(),io_getevents()以及对Direct IO

的支持(即:就是绕过VFS系统buffer直接写硬盘,对于流服务器在内存平稳性上有相当的帮助)。

所以,剩下的select模型基本上就成为我们在linux上面的唯一选择,其实,如果加上no-block socket的配置,可以完成一个"伪"AIO的实现,只不过推动力在于你而不是os而已。不过传统的select/poll函数有着一些无法忍受的缺点,所以改进一直是2.4-2.5开发版本内核的任务,包括/dev/poll,realtime signal等等。最终,Davide Libenzi开发的epoll

进入2.6内核成为正式的解决方案。

3、epoll的优点

<1> 支持一个进程打开大数目的socket描述符(FD)

select 最不能忍受的是一个进程所打开的FD是有一定限制的,由FD_SETSIZE设置。对于那些需要支持上万连接数目的IM服务器来说显然太少了。这时候你一是可以选择修改这个宏然后重新编译内核,不过资料也同时指出这样会带来网络效率的下降;二是可以选择多进程的解决方案(传统的Apache方案),不过虽然linux上面创建进程的代价比较小,但仍旧是不可忽视的,加上进程间数据同步远比不上线程间同步高效,所以这也不是一种完美的方案。不过epoll 没有这个限制,它所支持的FD上限是最大可以打开文件的数目,这个数字一般远大于select 所支持的2048。举个例子,在1GB内存的机器上大约是10万左右,具体数目可以cat /proc/sys/fs/file-max察看,一般来说这个数目和系统内存关系很大。

<2> IO效率不随FD数目增加而线性下降

传统select/poll的另一个致命弱点就是当你拥有一个很大的socket集合,由于网络得延时,使得任一时间只有部分的socket是"活跃"的,而select/poll每次调用都会线性扫描全部的集合,导致效率呈现线性下降。但是epoll不存在这个问题,它只会对"活跃"的socket进

行操作---这是因为在内核实现中epoll是根据每个fd上面的callback函数实现的。于是,只有"活跃"的socket才会主动去调用callback函数,其他idle状态的socket则不会,在这点上,epoll实现了一个"伪"AIO,因为这时候推动力在os内核。在一些benchmark中,如果所有的socket基本上都是活跃的---比如一个高速LAN环境,epoll也不比select/poll低多少效率,但若过多使用的调用epoll_ctl,效率稍微有些下降。然而一旦使用idle connections模拟WAN环境,那么epoll的效率就远在select/poll之上了。

<3> 使用mmap加速内核与用户空间的消息传递

这点实际上涉及到epoll的具体实现。无论是select,poll还是epoll都需要内核把FD消息通知给用户空间,如何避免不必要的内存拷贝就显得很重要,在这点上,epoll是通过内核于用户空间mmap同一块内存实现的。而如果你像我一样从2.5内核就开始关注epoll的话,一定不会忘记手工mmap这一步的。

<4> 内核微调

这一点其实不算epoll的优点,而是整个linux平台的优点。也许你可以怀疑linux平台,但是你无法回避linux平台赋予你微调内核的能力。比如,内核TCP/IP协议栈使用内存池管理sk_buff结构,可以在运行期间动态地调整这个内存pool(skb_head_pool)的大小---通过echo XXXX>/proc/sys/net/core/hot_list_length来完成。再比如listen函数的第2个参数(TCP完成3次握手的数据包队列长度),也可以根据你平台内存大小来动态调整。甚至可以在一个数据包面数目巨大但同时每个数据包本身大小却很小的特殊系统上尝试最新的NAPI 网卡驱动架构。

4、epoll的工作模式

令人高兴的是,linux2.6内核的epoll比其2.5开发版本的/dev/epoll简洁了许多,所以,大部分情况下,强大的东西往往是简单的。唯一有点麻烦的是epoll有2种工作方式:LT 和ET。

LT(level triggered)是缺省的工作方式,并且同时支持block和no-block socket。在这种做法中,内核告诉你一个文件描述符是否就绪了,然后你可以对这个就绪的fd进行IO操作。如果你不作任何操作,内核还是会继续通知你的,所以,这种模式编程出错误可能性要小一点。传统的select/poll都是这种模型的代表。

ET (edge-triggered) 是高速工作方式,只支持no-block socket。在这种模式下,当描述符从未就绪变为就绪时,内核就通过epoll告诉你,然后它会假设你知道文件描述符已经就绪,并且不会再为那个文件描述符发送更多的就绪通知,直到你做了某些操作而导致那个文件描述符不再是就绪状态(比如你在发送,接收或是接受请求,或者发送接收的数据少于一定量时导致了一个EWOULDBLOCK 错误)。但是请注意,如果一直不对这个fd作IO操作(从而导致它再次变成未就绪),内核就不会发送更多的通知(only once)。不过在TCP协议中,ET模式的加速效用仍需要更多的benchmark确认。

epoll只有epoll_create,epoll_ctl,epoll_wait 3个系统调用,具体用法请参考

https://www.wendangku.net/doc/2f13551967.html,/linux-patches/nio-improve.html,在https://www.wendangku.net/doc/2f13551967.html,/rn/也有一个完整的例子,大家一看就知道如何使用了。

5、epoll的使用方法

epoll用到的所有函数都是在头文件sys/epoll.h中声明的,下面简要说明所用到的数据结构和函数:

所用到的数据结构:

typedef union epoll_data {

void *ptr;

int fd;

__uint32_t u32;

__uint64_t u64;

} epoll_data_t;

struct epoll_event {

__uint32_t events; /* Epoll events */

epoll_data_t data; /* User data variable */

};

结构体epoll_event 被用于注册所感兴趣的事件和回传所发生待处理的事件,而epoll_data 联合体用来保存触发事件的某个文件描述符相关的数据。例如一个client连接到服务器,服务器通过调用accept函数可以得到于这个client对应的socket文件描述符,可以把这文件描述符赋给epoll_data的fd字段,以便后面的读写操作在这个文件描述符上进行。

epoll_event 结构体的events字段是表示感兴趣的事件和被触发的事件,可能的取值为:EPOLLIN:表示对应的文件描述符可以读;

EPOLLOUT:表示对应的文件描述符可以写;

EPOLLPRI:表示对应的文件描述符有紧急的数据可读;

EPOLLERR:表示对应的文件描述符发生错误;

EPOLLHUP:表示对应的文件描述符被挂断;

EPOLLET:表示对应的文件描述符有事件发生;

EPOLLONESHOT:只监听一次事件,当监听完这次事件之后,如果还需要继续监听这个socket的话,需要再次把这个socket加入到EPOLL队列里

所用到的函数:

1)、epoll_create函数

函数声明:int epoll_create(int size)

该函数生成一个epoll专用的文件描述符,其中的参数是指定生成描述符的最大范围。这个参数不同于select()中的第一个参数,给出最大监听的fd+1的值。需要注意的是,当创建好

epoll句柄后,它就是会占用一个fd值,在linux下如果查看/proc/进程id/fd/,是能够看到这个fd的,所以在使用完epoll后,必须调用close()关闭,否则可能导致fd被耗尽。2)、epoll_ctl函数

函数声明:int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event)

该函数用于控制某个文件描述符上的事件,可以注册事件,修改事件,删除事件。

参数:

epfd:由epoll_create 生成的epoll专用的文件描述符;

op:对fd进行的操作,可能的取值EPOLL_CTL_ADD 注册、EPOLL_CTL_MOD 修改、EPOLL_CTL_DEL 删除;

fd:关联的文件描述符;

event:指向epoll_event的指针;

如果调用成功则返回0,不成功则返回-1。

3)、epoll_wait函数

函数声明:int epoll_wait(int epfd,struct epoll_event * events,int maxevents,int timeout)

该函数用于轮询I/O事件的发生。类似于select()调用。

参数:

epfd:由epoll_create 生成的epoll专用的文件描述符;

events:用来从内核得到事件的集合,用于回传代处理事件的数组;

maxevents:每次能处理的事件数,告之内核这个events有多大;这个maxevents的值不能大于创建epoll_create()时的size;

timeout:等待I/O事件发生的超时值;(毫秒,0会立即返回,-1将不确定,也有说法说是永久阻塞)。

nfds:返回发生事件数,如返回0表示已超时。

/* epoll_wait函数:等待epoll事件的发生,并将发生的sokct fd和事件类型放入到events 数组中,nfds 为发生的事件的个数。

注:事件发生后,注册在epfd上的socket fd的事件类型会被清空(或手动

EPOLL_CTL_DEL删除事件?),所以如果下一个循环你还要关注这个socket fd的话,则需要用epoll_ctl(epfd,EPOLL_CTL_MOD,listenfd,&ev)来重新设置socket fd的事件类型。

*/

首先通过create_epoll(int maxfds)来创建一个epoll的句柄,其中maxfds为你的epoll

所支持的最大句柄数。这个函数会返回一个新的epoll句柄,之后的所有操作都将通过这个句柄来进行操作。在用完之后,记得用close()来关闭这个创建出来的epoll句柄。

之后在你的网络主循环里面,调用epoll_wait(int epfd, epoll_event events, int

max_events, int timeout)来查询所有的网络接口,看哪一个可以读,哪一个可以写。基本的语法为:

nfds = epoll_wait(kdpfd, events, maxevents, -1);

其中kdpfd为用epoll_create创建之后的句柄,events是一个epoll_event*的指针,当epoll_wait函数操作成功之后,events里面将储存所有的读写事件。max_events是当前需要监听的所有socket句柄数。最后一个timeout参数指示epoll_wait的超时条件,为0时表示马上返回;为-1时表示函数会一直等下去直到有事件返回;为任意正整数时表示等这么长的时间,如果一直没有事件,则会返回。一般情况下如果网络主循环是单线程的话,可以用-1来等待,这样可以保证一些效率,如果是和主循环在同一个线程的话,则可以用0来保证主循环的效率。epoll_wait返回之后,应该进入一个循环,以便遍历所有的事件。

对epoll 的操作就这么简单,总共不过4个API:epoll_create, epoll_ctl, epoll_wait 和close。以下是man中的一个例子。

struct epoll_event ev, *events;

for(;;) {

nfds = epoll_wait(kdpfd, events, maxevents, -1); //等待I/O事件

for(n = 0; n < nfds; ++n) {

if(events[n].data.fd == listener) { //如果是主socket的事件,则表示有新连接进入,需要进行新连接的处理。

client = accept(listener, (struct sockaddr *) &local, &addrlen);

if(client < 0){

perror("accept error");

continue;

}

setnonblocking(client); // 将新连接置于非阻塞模式

ev.events = EPOLLIN | EPOLLET;

//注意这里的参数EPOLLIN | EPOLLET并没有设置对写socket的监听,

//如果有写操作的话,这个时候epoll是不会返回事件的,

//如果要对写操作也监听的话,应该是EPOLLIN | EPOLLOUT | EPOLLET。

ev.data.fd = client; // 并且将新连接也加入EPOLL的监听队列

if (epoll_ctl(kdpfd, EPOLL_CTL_ADD, client, &ev) < 0) { // 设置好event之后,将这个新的event通过epoll_ctl //加入到epoll的监听队列里,这里用EPOLL_CTL_ADD

//来加一个新的epoll事件。可以通过EPOLL_CTL_DEL来减少 //一个epoll事件,通过EPOLL_CTL_MOD来改变一个事件的监听方式。

fprintf(stderr, "epoll set insertion error: fd=%d", client);

return -1;

}

} else {// 如果不是主socket的事件的话,则代表这是一个用户的socket的事件(如读事件、写事件之类的),

// 则用来处理这个用户的socket的事情是,比如说read(fd,xxx)或write(fd,xxx)之类,或者一些其他的处理。

do_use_fd(events[n].data.fd);

}

}

6、Linux下epoll编程实例

epoll_wait范围之后应该是一个循环,遍历所有的事件。

几乎所有的epoll程序都使用下面的框架转载自:

https://www.wendangku.net/doc/2f13551967.html,/ljx0305/article/details/4065058

for( ; ; )

{

nfds = epoll_wait(epfd,events,20,500);

for(i=0;i

{

if(events[i].data.fd==listenfd) //有新的连接

{

connfd = accept(listenfd,(sockaddr *)&clientaddr, &clilen); //accept这个连接

ev.data.fd=connfd;

ev.events=EPOLLIN|EPOLLET;

epoll_ctl(epfd,EPOLL_CTL_ADD,connfd,&ev); //将新的fd添加到epoll的监听队列中

}

else if( events[i].events&EPOLLIN ) //接收到数据,读socket

{

n = read(sockfd, line, MAXLINE,0); //读出数据

ev.data.ptr = md; //md为自定义类型,添加数据

ev.events=EPOLLOUT|EPOLLET;

epoll_ctl(epfd,EPOLL_CTL_MOD,sockfd,&ev);//修改标识符,等待下一个循环时发送数据,异步处理的精髓

}

else if(events[i].events&EPOLLOUT) //有数据待发送,写socket

{

struct myepoll_data* md = (myepoll_data*)events[i].data.ptr; //取数据

sockfd = md->fd;

send( sockfd, md->ptr, strlen((char*)md->ptr), 0 ); //发送数据

ev.data.fd=sockfd;

ev.events=EPOLLIN|EPOLLET;

epoll_ctl(epfd,EPOLL_CTL_MOD,sockfd,&ev); //修改标识符,等待下一个循环时接收数据}

else

{

//其他的处理

}

}

}

**************************************************************************************************** *************************************

Epoll模型主要负责对大量并发用户的请求进行及时处理,完成服务器与客户端的数据交互。其具体的实现步骤如下:

(a) 使用epoll_create()函数创建文件描述,设定可管理的最大socket描述符数目。

(b) 创建与epoll关联的接收线程,应用程序可以创建多个接收线程来处理epoll上的读通知事件,线程的数量依赖于程序的具体需要。

(c) 创建一个侦听socket的描述符ListenSock,并将该描述符设定为非阻塞模式,调用Listen()函数在该套接字上侦听有无新的连接请求,在epoll_event结构中设置要处理的事件类型EPOLLIN,工作方式为epoll_ET,以提高工作效率,同时使用epoll_ctl()来注册事件,最后启动网络监视线程。

(d) 网络监视线程启动循环,epoll_wait()等待epoll事件发生。

(e) 如果epoll事件表明有新的连接请求,则调用accept()函数,将用户socket描述符添加到epoll_data联合体,同时设定该描述符为非阻塞,并在epoll_event结构中设置要处理的事件类型为读和写,工作方式为epoll_ET。

(f) 如果epoll事件表明socket描述符上有数据可读,则将该socket描述符加入可读队列,通知接收线程读入数据,并将接收到的数据放入到接收数据的链表中,经逻辑处理后,将反馈的数据包放入到发送数据链表中,等待由发送线程发送。

例子代码:

#include

#include

#include

#include

#include

#include

#include

#include

#define MAXLINE 10

#define OPEN_MAX 100

#define LISTENQ 20

#define SERV_PORT 5555

#define INFTIM 1000

void setnonblocking(int sock)

{

int opts;

opts=fcntl(sock,F_GETFL);

if(opts<0)

{

perror("fcntl(sock,GETFL)");

exit(1);

}

opts = opts | O_NONBLOCK;

if(fcntl(sock,F_SETFL,opts)<0)

{

perror("fcntl(sock,SETFL,opts)");

exit(1);

}

}

int main()

{

int i, maxi, listenfd, connfd, sockfd, epfd, nfds;

ssize_t n;

char line[MAXLINE];

socklen_t clilen;

struct epoll_event ev,events[20]; //声明epoll_event结构体的变量, ev用于注册事件, events数组用于回传要处理的事件

epfd=epoll_create(256); //生成用于处理accept的epoll专用的文件描述符, 指定生成描述符的最大范围为256

struct sockaddr_in clientaddr;

struct sockaddr_in serveraddr;

listenfd = socket(AF_INET, SOCK_STREAM, 0);

setnonblocking(listenfd); //把用于监听的socket设置为非阻塞方式

ev.data.fd=listenfd; //设置与要处理的事件相关的文件描述符

ev.events=EPOLLIN | EPOLLET; //设置要处理的事件类型

epoll_ctl(epfd,EPOLL_CTL_ADD,listenfd,&ev); //注册epoll事件

bzero(&serveraddr, sizeof(serveraddr));

serveraddr.sin_family = AF_INET;

char *local_addr="200.200.200.204";

inet_aton(local_addr,&(serveraddr.sin_addr));

serveraddr.sin_port=htons(SERV_PORT); //或者htons(SERV_PORT);

bind(listenfd,(sockaddr *)&serveraddr, sizeof(serveraddr));

listen(listenfd, LISTENQ); //同一时刻能监听的最大连接请求数为LISTENQ,始终受约束?

maxi = 0;

for( ; ; ) {

nfds=epoll_wait(epfd,events,20,500); //等待epoll事件的发生

for(i=0;i

{

if(events[i].data.fd==listenfd) /**是一个监听事件**/

{

connfd = accept(listenfd,(sockaddr *)&clientaddr, &clilen);

if(connfd<0){

perror("connfd<0");

continue; //处理下一个事件

}

setnonblocking(connfd); //把客户端的socket设置为非阻塞方式

char *str = inet_ntoa(clientaddr.sin_addr);

std::cout<<"connect from "<_u115 ? tr<

ev.data.fd=connfd; //设置用于读操作的文件描述符

ev.events=EPOLLIN | EPOLLET; //设置用于注测的读操作事件

epoll_ctl(epfd,EPOLL_CTL_ADD,connfd,&ev); //注册ev事件

}

else if(events[i].events&EPOLLIN) /**是一个读事件**/

{

if ( (sockfd = events[i].data.fd) < 0) continue;

if ( (n = read(sockfd, line, MAXLINE)) < 0) {

if (errno == ECONNRESET) {

epoll_ctl(epfd,EPOLL_CL_DEL,sockfd,&ev); //删除sockfd上的事件类型

close(sockfd); //并关闭本套接字

events[i].data.fd = -1; //?

continue; //处理下一个事件

} else

{ //难道不需要重新修改本sockfd上的事件类型吗?

std::cout<<"readline error"<

continue; //处理下一个事件

}

} else if (n == 0) { //网络无法连接本sockfd,可能是对方关闭掉了

epoll_ctl(epfd,EPOLL_CL_DEL,sockfd,&ev); //删除sockfd上的事件类型

close(sockfd); //并关闭本套接字

events[i].data.fd = -1; //?

continue; //处理下一个事件

}

ev.data.fd=sockfd; //设置用于写操作的文件描述符

ev.events=EPOLLOUT | EPOLLET; //设置用于注测的写操作事件

epoll_ctl(epfd,EPOLL_CTL_MOD,sockfd,&ev); //修改sockfd上要处理的事件为EPOLLOUT

}

else if(events[i].events&EPOLLOUT) /**是一个写事件**/

{

//处理情况可参照“写事件”,以下是简要描述。

sockfd = events[i].data.fd;

write(sockfd, line, n);

ev.data.fd=sockfd; //设置用于读操作的文件描述符

ev.events=EPOLLIN | EPOLLET; //设置用于注册的读操作事件

epoll_ctl(epfd,EPOLL_CTL_MOD,sockfd,&ev); //修改sockfd上要处理的事件为EPOLIN

}

else /**其他区情况**/

{

do_use_fd(events[n].data.fd);

}

}

}

}

***************************************************************************************************** ************************************

转载自:https://www.wendangku.net/doc/2f13551967.html,/OnlyXP/archive/2007/08/10/851222.html

epoll精髓

技术经济学简答题名词解释

名词解释: 1、技术经济学的含义和特点 技术经济学是研究技术政策、技术措施和技术方案的经济效果的科学,它是对达到某种特定的目的而可能被采取的各项不同的技术政策、技术方案、技术措施的经济效果进行计算、分析比较和评价,从而选择技术上先进、经济上合理的最优方案的科学。 技术经济学是一门研究技术领域经济问题和经济规律,研究技术进步与经济增长的相互关系。 具有以下特点:1、综合性2、系统性3、预测性4、实践性5、选择性 2、固定资产,流动资产,无形资产 固定资产:是指使用年限在一年以上,单位价值在规定标准以上,并在使用过程中保持原有物质形态的资产。 无形资产:无形资产是指由特定主体控制的不具有独立实体,对生产经营能长期持续地发挥作用,并具有获利能力的资产。(无形资产分类见P14,记住公共关系的分类) 流动资产:流动资产是指可以在一年或者超过一年的一个营业周期变现或者耗用的资产。 3、制造成本法费用或成本构成 制造成本法是在核算产品成本时,只分配生产经营过程中最直接和关系密切的费用,与生产经营没有直接关系和关系不密切的费用计入当期损益。即直接材料、直接工资、其他直接支出和制造费用计入产品制造成本,也成生产成本,管理费用、财务费用和销售费用则直接计入当期损益。 1.直接费用: 是指直接为生产商品和提供劳务所发生的各项费用,包括以下:直接材料费、直接燃料、动力费、直接工资、其他直接费用 2.制造费用: 是指企业各生产单位为组织和管理生产活动而发生的费用 3.期间费用: 期间费用包括管理费用、财务费用和销售费用三部分 4、经营成本、机会成本、沉没成本 经营成本:是指项目总成本中扣除固定资产折旧费、无形资产及递延资产摊销费和利息支出以后的全部费用。 沉没成本:是以往发生的与当前决策无关的费用。 机会成本:是指一种具有多种用途的有限资源置于特定用途时所放弃的最大利益。 5、资产时间价值、利息、利率、名义利率、实际利率 资金时间价值:把货币作为社会生产资金(或资本)投入到生产或流通领域…就会得到资金的增值,资金的增值现象就叫做资金时间价值。 狭义利息是指占用资金所付出的代价(或放弃使用资金所得到的补偿) 广义利息是指资金投入到生产和流通领域中,一定时间后增值部分。它包括存款(或贷款)所得到(或付出)的报酬额和投资的净收益(或利润) 利率是资金在单位时间所生产的增值(利息或利润)与投入的资金额(本金)之比 名义利率:所谓名义利率,是指按年计息的利率,即计息周期为一年的利率。它是以一年为计息基础,等于每一计息期的利率与每年的计息期数的乘积。 实际利率:实际利率又称为有效利率,是把各种不同计息的利率换算成以年为计息期的利率。 6、什么是可行性研究?

时分多路复用技术

E1时分复用设备在组网中的应用 摘要:文章主要对时分多路复用器、交叉连接复用设备组成及功能做简单介绍,并对时分多路复用器及交叉连接复用设备在组网中的典型应用举例说明。 关键词:时分多路复用技术时分多路复用器交叉连接复用设备路由器时隙 一、E1信道时分多路复用技术 在我国,不论是准同步数字体系(PDH)还是同步数字体系(SDH),都是以2.048Mb/s(E1)为基础群,随着我国国家信息基础设施建设的发展,我国已经拥有了丰富的E1信道资源。随着各种通信业务的迅猛发展,对传输不同速率特别是高速数据的需求日益增多;同时,不同的网络用户又需要在同一条广域网络链路上同时传输数据、会议电视、语音、传真等业务。这些需求要求我们考虑一下因素:(1)具有节约现有通信资源的意识,提高E1信道的利用率;(2)采用先进的网络技术,使集数据、会议电视、语音、传真和远程局域网通信于一体的集成业务数据网,在相对廉价的广域网数据链路上实现;(3)在PCM传输电路上方便、经济地实现N×64kbps如768kbps、384kbps或128、64kbps等高速数据的传输;(4)在现有网络建设基础上,发展低速数据用户(多个低速数据用户共用一个64kbps时隙)时,使用高性能/价格比的专用设备,将节约大量资金。多业务时分多路复用技术(TDM)是您解决这类应用的解决方案。 在E1信道中,8bit组成一个时隙(TS),由32个时隙组成了一个帧(F),16个帧组成一个复帧(MF)。在一个帧中,TS0主要用于传送帧定位信号(FAS)、CRC-4(循环冗余校验)和对端告警指示,TS16主要传送随路信令(CAS)、复帧定位信号和复帧对端告警指示,TS1至TS15和TS17至TS31共30个时隙传送话音或数据等信息。我们称TS1至TS15和TS17至TS31为“净荷”,TS0和TS16为“开销”。如果采用带外公共信道信令(CCS),TS16就失去了传送信令的用途,该时隙也可用来传送信息信号,这时帧结构的净荷为TS1至TS31,开销只有TS0了。 数据复用技术可分为三种:(1)N×64kbps高速数据的复用,对于常用的N×64kbps(CAS 时N=1至30;CCS时N=1至31),如64、128、192、256、384、512、768、1024kbps等的高速数据,可以使其占用E1电路中的N个时隙,很方便地复用到E1线路上去。(2)低速同步数据的复用,对于19.2kbps、9.6kbps、4.8kbps和2.4kbps同步数据,广泛采用 ITU X.50建议将它们复用到64kbps时隙上。为了与PCM时隙一致,采用(6+2)的包封格式,每一包封中含有1个帧比特、6个数据比特和1个状态比特,总共8比特(见图一)。可见,在这

技术经济学-名词解释+简答

6、净现值:是指方案在寿命周期内各年的净现金流量,按照一定的折现率到起初时的现值之和。 7、价值工程是以产品或作业的功能分析为核心,以提高产品或作业的价值为目的,力求以最低的寿命周期成本实现产品或作业所要求的必要功能的一项有组织的创造性的活动。 &寿命周期成本是指产品或作业在寿命周期内所花费的全部费用。它不仅包括产品研制成本、生产成本和生产后的存储、 流通、销售的全部费用,还包括整个使用过程中的费用和残值。 简答题: 1、选择敏感性分析的主要不确定因素时,主要考虑哪些因素? 选择的因素要与确定的评价指标体系相联系,否则,当不确定性因素变化一定幅度时,并不能反映评价指标的相应变化,达不到敏感性分析的目的。根据方案的具体情况选择在确定性分析中采用的预测准确性把握不大的数据或者未来变动的可能性较大且其变动会比较强烈地影响评价指标的数据,作为主要的不确定性因素。 2、简述对资金的时间价值的理解。 一方面,资金投入生产和其他生产要素相结合,经过一段时间发生增值,使其价值大于原投入的价值。因此,从投资者的角度看,资金的增值特性使资金具有时间价值。另一方面,资金一旦用于投资,就不能用于现期消费,吸收现期消费是为了能在将来得到更多的消费,个人储蓄的目的就是如此。因此,资金的时间价值体现为对放弃现期消费的损失所应给予的必要补偿。 3、简述价值工程的特点。 价值工程以使用者的功能需求为出发点;价值工程对所研究的对象进行功能分析,系统研究功能与成本之间的关系,提高对象价值;价值工程致力于提高价值的创造性活动;价值工程应有组织、有计划地按一定工作程序进行。 4、流动资金:是指项目投产后,为进行正常生产运营,用于购买原材料、燃料,支付工资及其他经营费用等所必不可少的周转资金。 5、机会成本:任何决策,必须作出一定的选择,被舍弃到的选项中的最高价值即是这次决策的机会成本。 6、敏感性分析:是指从众多不确定因素中找出对投资项目经济效益指标有重要影响的敏感性因素,并分析、测算其对项目经济效益指标 的影响程度和敏感性程度,进而判断项目承受风险能力的一种不确定性分析方法。 7、资金时间价值:是指资金在生产和流通过程中随着时间推移而产生的增值。它也被看成是资金的使用成本。 & 无形磨损:由于劳动生产率的提高,生产同样机器设备所需的社会必要劳动耗费减少,使原有机器设备贬值;或者由于新技术的发明和应用,出现了性能更加完善、生产效率更高的生产设备,使原有设备的价值相对降低。 9、外部收益率是指方案在计算期内支出的(负现金流量)终值与各期收入(正现金流量)再投资的净收益的终值(用基准收 益率折算)累计相等时的收益率。

计算机网络 多路复用技术

计算机网络 多路复用技术 在计算机网络或数据通信系统中,传输介质的传输能力往往会超过传输单一信号的要求。为了提高通信线路的利用率,实现在一条通信线路上同时发送多个信号,使得一条通信线路可以由多个数据终端设备同时使用而互不影响,这就是多路复用技术。 常见的多路复用技术主要由两大类:一种是将带宽较大的信道分割成为多个子信道,即频分多路复用技术;另一种是将多个带宽较窄的信道组合成一个频率较大的信道,即时分多路复用技术。 1.频分多路复用技术 频分多路复用技术(Frequency Division Multiplexing ,FDM )是一种在信道上同时发送多个模拟信号的方法。它将传输频带划分为若干个较窄的频带,每个频带构成一个子信道,每个子信道都有各自的载波信号,而且其载波信号的频率是唯一的。一个具有一定带宽的通信线路可以划分为若干个频率范围,互相之间没有重叠,且在每个频率范围的中心频率之间保留一段距离。这样,一条通信线路被划分成多个带宽较小的信道,每个信道能够为一对通信终端提供服务。 频分多路复用技术是在20世纪30年代由电话公司开发的,用来在一条电话线上传输多个语音信号。它可以用于语音、视频或数据信号,但是最常见的应用是无线电广播传输和有线电视。例如电话线的带宽达250kHz ,而音频信号的有效范围为300Hz~3400Hz ,4000Hz 的带宽就足够用来传输音频信号。为了使各信道之间保留一定的距离减少相互干扰,60kHz~108kHz 的带宽可以划分为12条载波电话的信道(此为CCITT 标准),每对电话用户都可以使用其中的一条信道进行通信。如图3-17所示,为6路频分多路复用的示意图。 D E F ’’’’’’ 图3-17 6路频分多路复用示意图 2.时分多路复 用技术 时分多路复用技术(Time Division Multiplexing ,TDM )是一种多路传输数字信号的方法,它已经在现代数据网络中替代了频分多路复用技术。在通信序列中,时分多路复用技术将为在网络上交换信号的每一个设备分配一段时间或时间片。在这个时间片中,信道只能传输来自该交换信号设备的数据。 例如,在多台计算机连接在同一条公共传输通道上,多路复用器在通道信道中将会按一定的次序轮流为每台计算机分配一个时间片,当轮到某台计算机时,这台计算机与通信通道接通,进行数据交换。而其他计算机与通信通道的联系均被切断,待分配时间片用完后,则 提 示 由于频分多路复用技术是多路传输的一种较早、效率较低的形式。因此,该技术 在现代数据网络中的使用是有限的。

现代通信技术复习题及答案

2 什么就是数字信号?什么就是模拟信号?为什么说PAM信号不就是数字信号? 信号幅度在某一范围内可以连续取值得信号,称为模拟信号;而信号幅度仅能够取有限个离散值得信号称为数字信号。 PAM信号就是将模拟信号取样后产生得信号,它虽然在时间上就是离散得,但幅值上仍然就是连续得,因此仍然就是模拟信号。 7 通信系统一般模型 在通信系统中,发送消息得一端称为信源,接收消息得一端称为信宿。连通信源与信宿之间得路径称为信道。信源发出得消息首先要经发送设备进行变换,成为适合于信道传输得信号形式,再经信道一定距离传输后由接收设备做出反变换恢复出原始得消息,最后被信宿接收。而消息在整个传送过程中得任何一点都有可能受到噪声得干扰。据此,我们可以得到图所示得通信系统一般模型。 8 衡量通信系统得主要性能指标有哪些? 一个通信系统通常由两个指标来衡量,即系统得有效性与可靠性。有效性指得就是单位时间内系统能够传输消息量得多少,以系统得信道带宽(Hz)或传输速率(bit/s)为衡量单位。在相同条件下,带宽或传输速率越高越好。可靠性指得就是消息传输得准确程度,以不出差错或差错越少越好。 有效性与可靠性经常就是相互抵触得,即可靠性得提高有赖于有效性得降低,反之亦然。 10 关于信息量得计算题 11 从不同角度观察,通信传输有哪几种方式? (1)单工与双工通信方式(2)串行与并行通信方式(3)同步与异步通信方式 12 信号带宽与信道带宽得匹配主要考虑什么因素?如果二者不匹配会产生什么影响? 二者匹配最主要考虑得就是频带匹配。如果被传输信号得频率范围与信道频带相匹配,对信号得传输不会有什么影响;如果信号得有效带宽大于信道带宽,就会导致信号得部分成分被过滤掉而产生信号失真。 实际当中可能出现下列几种情况: (1)如果信号与信道带宽相同且频率范围一致,信号能不致损失地通过信道; (2)如果信号与信道带宽相同但频率范围不一致,该信号得部分频率分量肯定不能通过信道。此时,需要进行频率调制把信号得频带通过频率变换适应信道得频带; (3)如果信号带宽小于信道带宽,但信号得所有频率分量包含在信道得通带范围内,信号可以无损失地通过信道; (4)如果信号带宽大于信道带宽,但包含信号大部分能量得主要频率分量包含在信道得通带范围内,通过信道得信号会损失部分频率成分,但仍可能完成传输; (5)如果信号带宽大于信道带宽,且包含信号相当多能量得频率分量不在信道得通带范围内,这些信号频率成分将被滤除,信号严重畸变失真。 13 通信系统传输媒介有哪些?简述常见得几种传输媒介得结构及其特点。 通信系统传输媒介可以就是有线传输媒介,如同轴电缆、双绞线与光缆等;也可以就是无线传输媒介,如各波段得无线电波。 同轴电缆由一根实心得铜质线作为内导体、一个铜质丝网作为外导体,外导体以内导

电子技术基础习题答案

三、选择题:(每小题2分,共20分) 1、单极型半导体器件就是( C )。 A、二极管; B、双极型三极管; C、场效应管; D、稳压管。 2、P型半导体就是在本征半导体中加入微量的( A )元素构成的。 A、三价; B、四价; C、五价; D、六价。 3、稳压二极管的正常工作状态就是( C )。 A、导通状态; B、截止状态; C、反向击穿状态; D、任意状态。 4、用万用表检测某二极管时,发现其正、反电阻均约等于1KΩ,说明该二极管( C )。 A、已经击穿; B、完好状态; C、内部老化不通; D、无法判断。 5、PN结两端加正向电压时,其正向电流就是( A )而成。 A、多子扩散; B、少子扩散; C、少子漂移; D、多子漂移。 6、测得NPN型三极管上各电极对地电位分别为V E=2、1V,V B=2、8V,V C=4、4V,说明此三极管处在( A )。 A、放大区; B、饱与区; C、截止区; D、反向击穿区。 7、绝缘栅型场效应管的输入电流( C )。 A、较大; B、较小; C、为零; D、无法判断。 8、正弦电流经过二极管整流后的波形为( C )。 A、矩形方波; B、等腰三角波; C、正弦半波; D、仍为正弦波。 9、三极管超过( C )所示极限参数时,必定被损坏。 A、集电极最大允许电流I CM; B、集—射极间反向击穿电压U(BR)CEO; C、集电极最大允许耗散功率P CM; D、管子的电流放大倍数 。 10、若使三极管具有电流放大能力,必须满足的外部条件就是( C ) A、发射结正偏、集电结正偏; B、发射结反偏、集电结反偏; C、发射结正偏、集电结反偏; D、发射结反偏、集电结正偏。 三、选择题:(每小题2分,共20分) 1、基本放大电路中,经过晶体管的信号有(C)。 A、直流成分; B、交流成分; C、交直流成分均有。 2、基本放大电路中的主要放大对象就是(B)。 A、直流信号; B、交流信号; C、交直流信号均有。 3、分压式偏置的共发射极放大电路中,若V B点电位过高,电路易出现(B)。 A、截止失真; B、饱与失真; C、晶体管被烧损。 4、共发射极放大电路的反馈元件就是(B)。 A、电阻R B; B、电阻R E; C、电阻R C。 5、功放首先考虑的问题就是(A)。

吉大15春《技术经济学》大作业答案

技术经济学大作业 一、名词解释 1、技术 2、经济增长 3、价值工程 4、经济性贬值 5、折现 二、分析并回答下列问题 1、在进行技术经济分析时为什么强调可比原则?有哪些可比原则必须考虑? 2、试分析投资项目财务分析中全投资财务效果评价与自有资金财务效果评价有何不同? 3、简述内部收益率的经济涵义。 三、计算题 1、某公司有闲置资金60万元准备对外投资,请在以下4个独立的投资方案A、B、C、D 中选择最优的投资方案组合。各方案寿命期均为5年,基准收益率为8%,各方案投资额与年净收益见下表。(注:投资发生在第0年,收益发生在每年年末)(P/A,8%,5)=3.993 A B C D 投资额(万元)30 15 25 45 年净收益(万元)11.25 6.375 8 15.75 2、某企业为了生产某种产品而筹建新厂,已知设计生产能力为30000件,单件产品售价为3000元,总成本费用为7800万元,总变动成本与产量成正比关系,现有两种工艺方案可以满足要求,方案A固定成本3000万元,方案B固定成本4000万元。 (1)分别求两个方案以生产能力利用率和单位产品变动成本表示的盈亏平衡点。 (2)根据计算结果比较两方案的经营风险。 3、某公司INTRANET网络中心2年前以60万元购置了服务器及相关网络设备,设计使用寿命为5年,年运营成本9万元,寿命结束后无残值;现在市场上出现了新一代服务器及相关设备,购买价值30万元的新设备可以实现与原有设备相同的功能,年运营成本5万元,设计使用寿命3年,寿命结束后无残值。已知旧设备现在转手出售价值10万元。请就该网络中心现在是否应该更换服务器及相关网络设备进行决策。(基准收益率为10%))(P/A,0.1,3)=2.487, (P/A,0.1,5)=3.791

多路复用技术

频分多路复用是将传输介质的可用带宽分割成一个个“频段”,以便每个输入装置都分配到一个“频段”。传输介质容许传输的最大带宽构成一个信道,因此每个“频段”就是一个子信道。 频分多路复用的特点是:每个用户终端的数据通过专门分配给它的予信道传输,在用户没有数据传输时,别的用户也不能使用。频分多路复用适合于模拟信号的频分传输,主要用于电话和电缆电视(CATV)系统,在数据通信系统中应和调制解调技术结合使用。 时分多路复用的原理为了提高信道利用率,信号在传输过程中一般采用多路复用的传输方式,即多路信号在同一条信道上传输。所谓时分多路复用,就是利用多路信号(数字信号)在信道上占有不同的时间间隔来进行通信。目前应用较多的是频分多路复用和时分多路复用,前者适用于时间连续信号的传输;后者适用于时间离散信号的传输。 异步时分多路复用技术,也叫做统计时分多路复用技术(STDM,Statistic Time-Division Multiplexing)。指的是将用户的数据划分为一个个数据单元,不同用户的数据单元仍按照时分的方式来共享信道;但是不再使用物理特性来标识不同用户,而是使用数据单元中的若干比特,也就是使用逻辑的方式来标识用户。这种方法提高了设备利用率,但是技术复杂性也比较高,所以这种方法主要应用于高速远程通信过程中,例如,异步传输模式ATM。 码分多址通信原理: 码分多址(CDMA,Code-DivisionMultiple Access)通信系统中,不同用户传输信息所用的信号不是靠频率不同或时隙不同来区分,而是用各自不同的编码序列来区分,或者说,靠信号的不同波形来区分。如果从频域或时域来观察,多个CDMA信号是互相重叠的。接收机用相关器可以在多个CDMA信号中选出其中使用预定码型的信号。其它使用不同码型的信号因为和接收机本地产生的码型不同而不能被解调。它们的存在类似于在信道中引入了噪声和干扰,通常称之为多址干扰。 1.系统容量大:据研究表明,理论上CDMA移动网的系统容量比模拟网大20倍,比GSM约大5倍。 2.系统容量的灵活配置:在CDMA系统中,用户数的增加相当于背景噪声的增加,造成话音质量的下降。但对用户数并无限制,操作者可在容量和话音质量之间折衷考虑。另外,多小区之间可根据话务量和干扰情况自动均衡。 3.语音质量高:CDMA系统性能质量更佳指的是CDMA系统具有较高的话音质量,声码器可以动态地调整数据传输速率,并根据适当的门限值选择不同的电平级发射。另外,软切换技术克服了硬切换容易掉话的缺点。

现代通信技术复习习题及答案

欢迎共阅2什么是数字信号?什么是模拟信号?为什么说PAM信号不是数字信号? 信号幅度在某一范围内可以连续取值的信号,称为模拟信号;而信号幅度仅能够取有限个离散值的信号称为数字信号。 PAM信号是将模拟信号取样后产生的信号,它虽然在时间上是离散的,但幅值上仍然是连续的,因此仍然是模拟信号。 再 (4)如果信号带宽大于信道带宽,但包含信号大部分能量的主要频率分量包含在信道的通带范围内,通过信道的信号会损失部分频率成分,但仍可能完成传输; (5)如果信号带宽大于信道带宽,且包含信号相当多能量的频率分量不在信道的通带范围内,这些信号频率成分将被滤除,信号严重畸变失真。 13通信系统传输媒介有哪些?简述常见的几种传输媒介的结构及其特点。 通信系统传输媒介可以是有线传输媒介,如同轴电缆、双绞线和光缆等;也可以是无线传输媒介,如各波段的无线电波。 同轴电缆由一根实心的铜质线作为内导体、一个铜质丝网作为外导体,外导体以内导体为同心轴,所以称为同轴电缆。同轴电缆特点是抗干扰性很强,但传输衰耗较大,适用于有线电视入户敷设。

双绞线常用于局域网或短距离的电话用户接入。双绞线是把两根直径约0.5~1mm,外包绝缘材料的铜芯线扭绞成有一定规则的螺旋形状。与同轴电缆相比,双绞线抗干扰性差一些,但制造成本低,是一种廉价的有线传输媒介。把若干对双绞线集成一束,并用较结实的外绝缘皮包住,就组成了双绞线电缆。 光缆是由若干根光纤集成在一起制成的宽带通信传输媒介,是目前长途干线通信和部分城域网的主要通信线路。其特点是宽带、大容量、衰耗小、传输距离远。 无线通信以大气空间作为传输媒介,无线频率范围可从3KHz~300GHz,各频段具有不同的传播特性、途径和规律,因而有不同用途,已获得广泛应用。无线通信媒介的特点是由于地理环境和可能遇到障碍物等因素,会产生不同程度的反射、折射、绕射和散射现象。除了有传输损耗之外还存在着多径效应和衰落现象。 15多路复用的目的是什么?常用的多路复用技术有哪些? 16 17 19简述 ω1 可得如cosω1 cosω2 cosω1 在抽样判决中判决比较两个低通滤波输出电平的大小,上大判为1,下大判为0。 20、2DPSK相对2PSK有什么优点? 21、什么是码间干扰?为什么会产生码间干扰?

工程技术经济名词解释

总复习 第一部分:基本内容与基本概念 1、为什么资金具有时间价值?影响资金的时间价值有哪些因素?(利润率吧,风险、…) ①因为资金在不同时间点上具有不同的价值,即存在价值量差额,且资金在使用过程 中会随时间的推移而发生增值,所以资金具有时间价值。 ②影响因素:利润率,风险价值和通货膨胀 2、资金的时间价值常以哪些指标来表示?(利息、利率) 利息,通常用利息作为衡量资金时间的绝对尺度,在借贷过程中,债务人支付给债权人的超过原借款本金的部分就是利息。利率,是在单位时间内所得到利息额与借款本金之比。现值与终值,现值是资金的现在价值,终值是资金现在价值在一定期限后的本息和。 3、名义和实际利率有何区别?工程中一般采用哪一种利率? ①1、当实际计息周期为一年时,名义利率和实际利率相等,实际计息周期短于一年时, 实际利率大于名义利率。 2、名义利率不能完全反映资金的时间价值,实际利率才真实地反映了资金的时间价值。 3、名义利率越大,实际计息周期越短,实际利率与名义利率的差值就越大。 ②工程中一般采用实际利率 5、何谓现值、将来值、等值?何谓年金? ①现值:现值是资金发生在某一时间序列起点时间的价值,或相对于将来值的任何较 早时间的价值,即资金的现在价值。 ②将来值(终值):终值是资金发生在某一时间序列终点时间的价值,或相对于现在 值的任何以后时间的价值,即资金现在价值在一定期限后的本息和。 ③等值:等值又叫等效值,它是指货币运动过程中,由于利息的存在,不同时刻的资 金绝对值不同,但资金的实际价值是相等的。 ④年金是依照相同时间间隔在若干期连续收入或付出的一系列数额相等的款项。 6、何谓贴现?贴现系数的工程经济学含义是什么? ①把将来某一时点发生的资金金额换算成现在时点的等值金额称为贴现或折现。 ②贴现系数是以此将以后N时期的某项目价值换算到眼前时的价值。是指未来资产 折算成现值的利率,一般是用当时零风险的利率来当做贴现率,但并不绝对。(百度)

现代通信技术复习题及答案

2 什么是数字信号?什么是模拟信号?为什么说PAM信号不是数字信号? 信号幅度在某一范围内可以连续取值的信号,称为模拟信号;而信号幅度仅能够取有限个离散值的信号称为数字信号。 PAM信号是将模拟信号取样后产生的信号,它虽然在时间上是离散的,但幅值上仍然是连续的,因此仍然是模拟信号。 7 画出并解释通信系统的一般模型 通信系统一般模型 在通信系统中,发送消息的一端称为信源,接收消息的一端称为信宿。连通信源和信宿之间的路径称为信道。信源发出的消息首先要经发送设备进行变换,成为适合于信道传输的信号形式,再经信道一定距离传输后由接收设备做出反变换恢复出原始的消息,最后被信宿接收。而消息在整个传送过程中的任何一点都有可能受到噪声的干扰。据此,我们可以得到图所示的通信系统一般模型。 8 衡量通信系统的主要性能指标有哪些? 一个通信系统通常由两个指标来衡量,即系统的有效性和可靠性。有效性指的是单位时间内系统能够传输消息量的多少,以系统的信道带宽(Hz)或传输速率(bit/s)为衡量单位。在相同条件下,带宽或传输速率越高越好。可靠性指的是消息传输的准确程度,以不出差错或差错越少越好。 有效性和可靠性经常是相互抵触的,即可靠性的提高有赖于有效性的降低,反之亦然。 10 关于信息量的计算题 11 从不同角度观察,通信传输有哪几种方式? (1)单工与双工通信方式(2)串行与并行通信方式(3)同步与异步通信方式 12 信号带宽与信道带宽的匹配主要考虑什么因素?如果二者不匹配会产生什么影响? 二者匹配最主要考虑的是频带匹配。如果被传输信号的频率范围与信道频带相匹配,对信号的传输不会有什么影响;如果信号的有效带宽大于信道带宽,就会导致信号的部分成分被过滤掉而产生信号失真。 实际当中可能出现下列几种情况: (1)如果信号与信道带宽相同且频率范围一致,信号能不致损失地通过信道; (2)如果信号与信道带宽相同但频率范围不一致,该信号的部分频率分量肯定不能通过信道。此时,需要进行频率调制把信号的频带通过频率变换适应信道的频带; (3)如果信号带宽小于信道带宽,但信号的所有频率分量包含在信道的通带范围内,信号可以无损失地通过信道; (4)如果信号带宽大于信道带宽,但包含信号大部分能量的主要频率分量包含在信道的通带范围内,通过信道的信号会损失部分频率成分,但仍可能完成传输; (5)如果信号带宽大于信道带宽,且包含信号相当多能量的频率分量不在信道的通带范围内,这些信号频率成分将被滤除,信号严重畸变失真。 13 通信系统传输媒介有哪些?简述常见的几种传输媒介的结构及其特点。

技术经济学名词解释和简答知识讲解

精品文档 精品文档 1、经济增长:指一个国家产品和劳务数量的增加,或人口平均实际产出的增加,通常以国民生产总值(GNP ),国内生产总值(GDP )或国民收入(NI )及其人均数值来衡量。 2、经济发展:指经济增长中伴随着经济结构、社会和经济体制的改革。 3、经济效益:有用成果与劳动耗费的比较。 4、投资:一指为实现某种特定目标而进行的资金运用或投放的经济活动,二指投放的资金。 5、固定资产:使用期限在一年以上,单位价值在一定限额以上,在使用过程中始终保持原来物质形态的资产。 6、流动资产:可以在一年或超过一年的一个营业周期内变现或者耗用的资产,主要包括存货、应收款项和现金等。 7、会计成本:会计记录在企业账册上的客观的和有形的支出,包括生产、推销过程中发生的原料、动力、工资、租金、广告、利息等支出。 8、经济成本:企业自有的资源实际上已经投入生产经营活动的但在形式上没有支付报酬的那部分成本。 9、沉没成本:过去已经支出而现在已无法得到补偿的成本。 10、机会成本:将有限资源用于某种特定的用途而放弃的其他各种用途中的最高收益。 11、边际成本:企业多生产一单位产量所产生的总成本增加。 12、经济预测:根据经济发展过程的历史和现实,综合各方面的信息,运用定性和定量的科学分析方法,揭示出经济发展过程中的客观规律,并对各种经济现象之间的联系以及作用机制作出科学的分析,指出各种经济现象和经济过程未来发展的可能途径以及结果。 13、头脑风暴法:通过一组专家共同开会讨论,进行信息交流和互相启发,从而诱发专家们发挥其创新思维,促进他们产生“思维共振”,已达到相互补充,并产生“组合效应”的预测方法。 14、实际利率:在规定的最小计息周期数的计息利率。 名义利率:利息期的实际利率与计息期次数的乘 积。 15、基准收益率:也称基准折现率,是企业、行业或投资者以动态的观点所确定的、可接受的投资项目方案最低标准的收益水平。 16、内部收益率:项目实际能达到的投资效益水平。 17、盈亏平衡点:项目盈利与亏损的临界点。 18、经营风险:销售量、产品价格和单位产品变动成本等不确定因素发生变动所引起的项目盈利额的波动。 19、敏感性分析:通过测定一个或多个不确定因素的变化所导致的决策评价指标的变化幅度,了解各种因素的变化对实现预期目标的影响程度,从而对外部条件发生不利变化时投资方案的承受能力作出判断。 20、概率分析:通过研究各种不确定因素发生不同幅度变动的概率分布及其对方案经济效果的影响,对方案的净现金流量及经济效果指标做出某种概率描述,从而对方案的风险情况作出比较准确的判断。 21、有形磨损:又称物理磨损,第一种有型磨损是从零部件到整个设备受到摩擦、冲击、振动或疲劳,使设备的实体遭受到损伤。第二种有形磨损是设备在闲置中受到自然力的作用产生锈蚀,或由于缺乏必要的保护、保养而自然丧失精度和工作能力,产生物质磨损。 22、无形磨损:由于科学技术进步、劳动生产率的提高和其他经济性原因而造成的机器设备的非实体性磨损。 23、加速折旧法:在设备折旧期内,前期较多而后期较少、递减的提取折旧费,从而使设备资产磨损得到加速赔偿的计提折旧费的方法。 24、设备自然寿命:又称物质寿命,即设备从投入使用开始,直到因为在使用过程中发生物质磨损而不能继续使用、报废为止所经历的时间。 25、设备技术寿命:又称有效寿命,指设备在市场上维持其价格的时期。 26、设备经济寿命:设备从开始使用到其等值年成本最小(或年盈利最高)的使用年限。 27、可行性研究:在项目建设前,对拟建项目在技术上是否先进适用、经济上是否合理有利,工程建设是否可行所 进行的全面、详细、周密的调查研究和综合论证。 28、影子价格:在一定经济结构中,以线性规划计划计算的,反映资源最优利用的价格。 29、价值工程:通过各相关领域的协作,对所研究对象的功能和费用进行系统分析,不断创新,旨在以最短的寿命周期成本可靠地实现用户所要求的功能的管理思想和技术经济技术。 30、产品生命周期:从产品研制、制造,到用户使用后报废为止的整个时期。 31、功能整理:对顶溢出的功能进行系统的分析、整理,明确功能之间的关系 ,分清功能类别,建立功能系统图。 32、渐进性创新:通过对现有技术的改进而引起的渐进的、连续的创新。 33、根本性创新:技术有重大突破的技术创新。 二、问答题 1、什么是技术?人类在认识自然和改造自然的实践中,按照科学原理及一定的经验需要和社会目的而发展起来的,用以改造自然的劳动手段、知识、经验和技巧。 2、什么是硬技术?什么是软技术?体现为机器、设备,基础设施等生产条件和工作条件的物质技术称为硬技术。体现为工艺、方法、程序、信息、经验、技巧和管理能力的非物质技术称为软技术。 3、技术经济分析的基本原则是什么?①技术经济分析强调的是技术可行基础上的经济分析②形成尽可能多的备选方案③形成比较的基础,着眼方案的差异比较④选择影响正确决策的恰当的成本费用数据⑤充分揭示和估计项目的不确定性。 4、会计核算的四个基本前提是什么?①会计主体②经营持续③会计分期④货币计量。 5、反映财务状况的会计要素是什么?①资产②负债③所有者权益。 6、反映经营成果的会计要素是什么?①收入②费用③利润。 7、简述会计等式的三种形式。①资产=负债+所有者权益②收入-费用=利润③资产=负债+所有者权益+收入-费用。 8、根据投资的性质,投资可以分为哪几种类型?权益性投资,债权性投资,混合性投资。 9、根据投资的对象,投资可以分为哪几种类型?股权投资,债券投资,房地产投资,其他投资。 10、资产可以分为哪几类?固定资产,流动资产,无形资产,递延资产。 11、固定资产价值可以分为哪几类?原始价值,重置价值,折余价值。 12、财务评价的主要报表有哪些?现金流量表,利润表,资金来源与运用表,借贷还本付息表,资产负债表,财务外汇平衡表。 13、为什么说经济预测是可能的?①经济发展的连贯性②经济发展模式的相似性③经济现象之间的相关性④经济发展过程中的必然性和偶然性。综上所述,要对经济进行预测并达到一定精度,虽有难度,但并非不可能。 14、简述经济预测的基本步骤。①确定预测目标和预测期限②确定预测因子③进行市场调查,收集各因素的历史和现状的信息、数据、资料,并加以整理和分析④选择合适的预测方法⑤对预测的结果进行分析和评估⑥指出根据最新的经济动态和新到来的经济信息或数据,可否重新调整原来的预测值,并提高预测精度⑦写好预测报告。 15、随机抽样包括哪几种?①单纯随机抽样②分层随机抽样③分群随机抽样。 16、非随机抽样包括哪几种?①便利抽样②判断抽样③配额抽样。 17、简述头脑风暴的优点。①通过信息交流,产生思维共振,进而激发创造性思维,能在短期内得到创造性的成果②通过头脑风暴会议,获取的信息量大,考虑的预测因素多,提供的方案也比较全面和广泛。 18、简述头脑风暴的缺点。①专家会议易受权威的影响,不利于充分发表意见②易受表达能力的影响③易受心理因素的影响。 19、简述市场调研的基本原则。①准确性②时效性③全面性④经济性。 20、从投资角度来看资金的时间价值取决于哪几个方面?①投资利润率②通货膨胀率③风险因素。 21、资金等值与哪些因素有关?①资金的数量②资金发生的时间③利率。 22、风险决策包括哪些原则?优势原则,期望值原则,最小方差原则,最大可能原则,满意原则。 23、简述有形磨损的三个阶段。①初期磨损阶段:时间很短,零部件表面粗糙不平的部分在相对运动中很快磨去,磨损量较大②正常磨损阶段:将维持一段时间,零部件的磨损趋于平缓,基本上随时间而匀速缓慢增加③剧烈磨损阶段:零部件磨损超过一定限度,正常磨损关系被破坏,工作情况恶化而零部件磨损量迅速增大,设备的精度、性能和生产率都会迅速下降。 24、设备故障率随时间变化分为哪几个阶段?早期故障期,偶发故障期,磨损故障期。 25、无形磨损包括哪几个方面?①设备的技术结构和性能并没有变化,但由于设备制造厂制造工艺不断改进,劳动生产率不断提高而使得生产相同机械设备所需的社会必要劳动时间减少,因而使原来购买的设备价值相应贬值了②由于科学技术的进步,不断创新出性能更完善、效率更高的设备,使原有设备相对陈旧落后,其经济效益相对降低而发生贬值③由于外界环境因素的变化,如竞争的加剧、经济衰退,市场对所生产的产品的需求减少,导致资产产生的效益下降,而造成机器设备的损失。 26、设备磨损的主要补偿方式有哪几种?①大修理②现代化改造③更新。 27、在计算与时间有关的设备折旧时应考虑 哪几个因素?①设备资产的原值②净残值③折旧年限。 28、设备更新决策应考虑哪几个原则?①不考虑沉没成本②不要简单地按照新旧设备方案的直接现金流量进行比较③逐年滚动比较。 29、设备租赁决策的前提有哪些?支付方式,筹资方式,使用方式。 30、可行性研究分为哪几个阶段?机会研究,初步可行性研究,详细可行性研究。 31、技术创新包括哪五种情况?产品创新,工艺创新,市场营销创新,利用和开发新的资源,组织体制和管理创新。 32、技术创新的特征是什么?创造性,先进性,主动性,实用性,经济性,高风险性。

电工电子技术基础试题库

《电工电子技术》课程复习资料 一、填空题: 1.正弦交流电的相量表示具体有有效值相量和最大值相量两种形式。 2.一阶电路暂态过程三要素法的表达式。 3.变压器有三大作用,分别是变压_、_变流_和_变换阻抗_。 结具有单向导电性,可描述为正偏导通、反偏截止。 5.以比较的风格分类,电压比较器有单限比较、滞回比较和窗口比较。 6.基本的逻辑关系是逻辑与、逻辑或和逻辑非。 7.“触发”是指给触发器或时序逻辑电路施加时钟(脉冲)信号。 8.电路的主要作用是传输、分配和控制电能和传送、处理电信号。 9.负载功率因数过低的后果是增大输电线路损耗和使供电设备不被充分利用。 10.三相同步发电机的基本构成是定子和转子。 11.电容和电感储能的数学表达式是和。 12.低压供电系统的接线方式主要有树干式和放射式。 13.实际变压器存在两种损耗,分别是铜耗和铁耗。 14.已知三相异步电动机的工频为50HZ,五对磁极,则同步转速为600r/min。 15.变压器的主要构成部件是绕组和铁芯。 16.已知三相异步电动机的工频为50HZ,四对磁极,则同步转速为750 r/min。 17.晶体三极管的两个PN结分别是发射结和集电结。 18.要使晶体三极管处于截止状态,其偏置方法是使发射结反偏集电结反偏。 19.反相比例运算关系是.,同相比例运算关系是。 20.多发射极管的作用是实现与运算、提高(逻辑)转换速度。 21.翻转是指触发器在时钟脉冲到达后形成与初态相反的次态。 22.我国规定的电力网特高压额定值有330kV、500kV和1000kV 。 23.理想变压器的变压公式是。 24.已知三相异步电动机的工频为50HZ,三对磁极,则同步转速为1000r/min。 25.晶体三极管有三种工作状态,分别为放大、截止和饱和。 26.放大电路的耦合方式有阻容耦合、变压器耦合和直接耦合。 27.负反馈对放大电路性能的影响有稳定电压放大倍数、拓展频宽、改善非线性失真和改变输入输出阻抗。 28.与时序电路相比,组合电路的特点是输出只与当前输入有关,而与初态无关。 29.理想变压器的变流公式是。 30.已知三相异步电动机的工频为50HZ,二对磁极,则同步转速为1500r/min

技术经济学-名词解释+简答

名词解释: 1、经济效果——是指实现技术方案时的产出与投入比。所谓产出是指技术方案实施后的一切效果,所谓投入是指各种资源的消耗和占用。 2、机会成本——是指由于将有限资源使用于某种特点的用途而放弃的其他各种用途的最高收益。 3、资金结构——指企业各种资金来源的相互关系及数量比例。实质上就是股权资金与债务资金的相互关系及数量比例。 4、常规投资方案——是在寿命期内除建设期或者投产初期的净现金流量为负值之外,其余年份均为正值,寿命期内净现金流量的正负号从负到正变化一次,且所有负现金流量都出现在正现金流量之前。 5、功能评价——就是用V=F/C公式计算出各个功能的价值系数,以解决功能数量化的问题。 6、资金时间价值——不同时间发生的等额资金在价值上的差别称为资金的时间价值。 7、常规投资方案——是在寿命期内除建设期或者投产初期的净现金流量为负值之外,其余年份均为正值,寿命期内净现金流量的正负号只从负到正变化一次,且所有负现金流量都出现在正现金流理之前。 8、资金成本——是企业为筹措和使用资金而付出的代价,包括筹资过程中发生的资费用和用资过程中支付的利息等。 9、内部收益率——简单地说就是净现值为零时的折现率。 10、年值法——是指将研究期内的现金流量折算成与之等值的等额支付系列,也即将现金流量年金化。 11、净现值:是指方案在寿命周期内各年的净现金流量,按照一定的折现率到起初时的现值之和。 12、价值工程:是以产品或作业的功能分析为核心,以提高产品或作业的价值为目的,力求以最低的寿命周期成本实现产品或作业所要求的必要功能的一项有组织的创造性的活动。 13、寿命周期成本是指产品或作业在寿命周期内所花费的全部费用。它不仅包括产品研制成本、生产成本和生产后的存储、流通、销售的全部费用,还包括整个使用过程中的费用和残值。 14、流动资金:是指项目投产后,为进行正常生产运营,用于购买原材料、燃料,支付工资及其他经营 费用等所必不可少的周转资金。 15、机会成本任何决策,必须作出一定的选择,被舍弃到的选项中的最高价值即是这次决策的机会成本。 16、敏感性分析:是指从众多不确定因素中找出对投资项目经济效益指标有重要影响的敏感性因素,并分析、测算其对项目经济效益指标的影响程度和敏感性程度,进而判断项目承受风险能力的一种不确定性分析方法。 17、资金时间价值:是指资金在生产和流通过程中随着时间推移而产生的增值。它也被看成是资金的使用成本。 18、无形磨损:由于劳动生产率的提高,生产同样机器设备所需的社会必要劳动耗费减少,使原有机器设备贬值;或者由于新技术的发明和应用,出现了性能更加完善、生产效率更高的生产设备,使原有设备的价值相对降低。 19、外部收益率:是指方案在计算期内支出的(负现金流量)终值与各期收入(正现金流量)再投资的净收益的终值(用基准收益率折算)累计相等时的收益率。 20、投资收益率是指项目在正常生产年份的净收益与投资总额的比值。 21、资金成本:是指企业为筹集和使用资金而付出的代价。 22、功能:指产品的某种属性,是产品满足人们某种需要的能力和程度。 23、技术经济学:是研究技术领域中的经济活动规律,经济领域的技术发展规律,技术发展的内在规律的科学。 24、国民经济评价:是指按照资源合理配置的原则,从国家整体角度考察项目的效益和费用,用货物影子价格影子工资影子汇率和社会折现率等经济参数分析、计算项目国民经济的净贡献,评价项目的经济合理性。

电子技术基础复习题及参考复习资料

中南大学网络教育课程考试复习题及参考答案 电子技术基础(专科) 一、单项选择题: 1.在杂质半导体中,少子浓度主要取决于 [ ] A.掺入杂质的浓度 B.材料 C.温度 2.测得某PNP型三极管各极点位为:UB=-3V UE=-4V UC=-6V,则该管工作于 [ ] A.放大状态 B.饱和状态 C.截止状态 3.在基本共射放大电路中,若更换晶体管使β值由 50变为100,则电路的放大倍数 [ ] A.约为原来的1/2倍 B.约为原来的2倍 C.基本不变 4.在OCL电路中,引起交越失真的原因是 [ ] A.输入信号过大 B.晶体管输入特性的非线性 C.电路中有电容 5.差动放大器中,用恒流源代替长尾R e是为了 [ ] A.提高差模电压增益 B.提高共模输入电压范围 C.提高共模抑制比 6.若 A+B=A+C,则 [ ] A.B=C B.B=C C.在A=0的条件下,B=C 7.同步计数器中的同步是指 [ ] A.各触发器同时输入信号 B.各触发器状态同时改变 C.各触发器受同一时钟脉冲的控制 8.由NPN管组成的单管基本共射放大电路,输入信号为正弦波,输出电压出现顶部被削平的失 真,这种失真是 [ ] A.饱和失真 B.截止失真 C.频率失真 9.对PN结施加反向电压时,参与导电的是 [ ] A.多数载流子 B.少数载流子 C.既有多数载流子又有少数载流子 10.当温度增加时,本征半导体中的自由电子和空穴的数量 [ ] A.增加 B.减少 C.不变 11.通用型集成运放的输入级采用差动放大电路,这是因为它的 [ ] A.输入电阻高 B.输出电阻低 C.共模抑制比大 D.电压放大倍数大 12.对于桥式整流电路,正确的接法是 [ ] 13.将代码(10000011)8421BCD转换成二进制数为 [ ] A.(01000011)2 B.(01010011)2 C.(10000011)2 D.1)2 14.N个变量的逻辑函数应该有最小项 [ ] A.2n个 B.n2个 C.2n个 D.(2n-1)个 A +AB转换成或非-或非式为 [ ] 15.函数F=B

相关文档