外文译文(封面及要求)

合集下载

本科毕业设计(论文)外文翻译基本规范

本科毕业设计(论文)外文翻译基本规范

本科毕业设计(论文)外文翻译基本规范一、要求1、与毕业论文分开单独成文。

2、两篇文献。

二、基本格式1、文献应以英、美等国家公开发表的文献为主(Journals from English speaking countries)。

2、毕业论文翻译是相对独立的,其中应该包括题目、作者(可以不翻译)、译文的出处(杂志的名称)(5号宋体、写在文稿左上角)、关键词、摘要、前言、正文、总结等几个部分。

3、文献翻译的字体、字号、序号等应与毕业论文格式要求完全一致。

4、文中所有的图表、致谢及参考文献均可以略去,但在文献翻译的末页标注:图表、致谢及参考文献已略去(见原文)。

(空一行,字体同正文)5、原文中出现的专用名词及人名、地名、参考文献可不翻译,并同原文一样在正文中标明出处。

二、毕业论文(设计)外文翻译(一)毕业论文(设计)外文翻译的内容要求外文翻译内容必须与所选课题相关,外文原文不少于6000个印刷符号。

译文末尾要用外文注明外文原文出处。

原文出处:期刊类文献书写方法:[序号]作者(不超过3人,多者用等或et al表示).题(篇)名[J].刊名(版本),出版年,卷次(期次):起止页次.原文出处:图书类文献书写方法:[序号]作者.书名[M].版本.出版地:出版者,出版年.起止页次.原文出处:论文集类文献书写方法:[序号]作者.篇名[A].编著者.论文集名[C]. 出版地:出版者,出版年.起止页次。

要求有外文原文复印件。

(二)毕业论文(设计)外文翻译的撰写与装订的格式规范第一部分:封面1.封面格式:见“毕业论文(设计)外文翻译封面”。

普通A4纸打印即可。

第二部分:外文翻译主题1.标题一级标题,三号字,宋体,顶格,加粗二级标题,四号字,宋体,顶格,加粗三级标题,小四号字,宋体,顶格,加粗2.正文小四号字,宋体。

第三部分:版面要求论文开本大小:210mm×297mm(A4纸)版芯要求:左边距:25mm,右边距:25mm,上边距:30mm,下边距:25mm,页眉边距:23mm,页脚边距:18mm字符间距:标准行距:1.25倍页眉页角:页眉的奇数页书写—浙江师范大学学士学位论文外文翻译。

外文翻译及外文原文(参考格式)

外文翻译及外文原文(参考格式)

外文翻译要求:1、外文资料与毕业设计(论文)选题密切相关,译文准确、质量好。

2、阅读2篇幅以上(10000字符左右)的外文资料,完成2篇不同文章的共2000汉字以上的英译汉翻译3、外文资料可以由指导教师提供,外文资料原则上应是外国作者。

严禁采用专业外语教材文章。

4、排序:“一篇中文译文、一篇外文原文、一篇中文译文、一篇外文原文”。

插图内文字及图名也译成中文。

5、标题与译文格式(字体、字号、行距、页边距等)与论文格式要求相同。

下页附:外文翻译与原文参考格式2英文翻译 (黑体、四号、顶格)外文原文出处:(译文前列出外文原文出处、作者、国籍,译文后附上外文原文)《ASHRAE Handbook —Refrigeration 》.CHAPTER3 .SYSTEM Practices for ammonia 3.1 System Selection 3.2 Equipment3.10 Reciprocating Compressors第3章 氨制冷系统的实施3.1 系统选择在选择一个氨制冷系统设计时,须要考虑一些设计决策要素,包括是否采用(1)单级压缩(2)带经济器的压缩(3)多级压缩(4)直接蒸发(5)满液式(6)液体再循环(7)载冷剂。

单级压缩系统基本的单级压缩系统由蒸发器、压缩机、冷凝器、储液器(假如用的话)和制冷剂控制装置(膨胀阀、浮球阀等)。

1997 ASHRAE 手册——“原理篇”中的第一章讨论了压缩制冷循环。

图1.壳管式经济器的布置外文翻译的标题与译文中的字体、字号、行距、页边距等与论文格式相同。

英文原文(黑体、四号、顶格)英文翻译2(黑体,四号,顶格)外文原文出处:(黑体,四号,顶格)P. Fanning. Nonlinear Models of Reinforced and Post-tensioned Concrete Beams. Lecturer, Department of Civil Engineering, University College Dublin. Received 16 Jul 2001.非线形模型钢筋和后张法预应力混凝土梁摘要:商业有限元软件一般包括混凝土在荷载做用下非线性反应的专用数值模型。

外文翻译规范要求及模版格式

外文翻译规范要求及模版格式

外文翻译规范要求及模版格式
外文中文翻译规范要求及模板格式可以根据具体需求和要求有所不同,以下是一般常见的外文中文翻译规范要求及模板格式:
1.规范要求:
-符合语法、语言规范和语义准确性;
-译文流畅自然,符合中文表达习惯;
-忠实准确地传达原文信息;
-注意统一使用特定的术语翻译;
-文章结构、段落、标题等要与原文一致;
-保持适当的篇幅,不过度增加或删减内容;
-遵守保密原则。

2.模板格式:
-文章标题(与原文保持一致,可放在正文上方);
-标题(与原文保持一致);
-段落(与原文保持一致,首行缩进);
-字体(常用宋体或黑体,一般字号12或14);
-行间距(一般1.5倍,可根据需要调整);
-页边距(上下左右均为2.5厘米);
-段落间距(一般1.5倍,可根据需要调整);
以上是一般常见的外文中文翻译规范要求及模板格式,具体要求和格式可以根据具体的翻译项目和要求进行调整。

在翻译过程中,保持准确、流畅、专业是非常重要的。

外文文献翻译要求及封面

外文文献翻译要求及封面

根据《普通高等学校本科毕业设计(论文)指导》地内容,特对外文文献翻译提出以下要求:
一、翻译地外文文献一般为~篇,外文字符要求不少于万(或翻译成中文后至少在字以上).
二、翻译地外文文献应主要选自学术期刊、学术会议地文章、有关著作及其他相关材料,应与毕业论文(设计)主题相关,并作为外文参考文献列入毕业论文(设计)地参考文献.并在每篇中文译文首页用“脚注”形式注明原文作者及出处,中文译文后应附外文原文.个人收集整理勿做商业用途
三、中文译文地基本撰写格式为题目采用小三号黑体字居中打印,正文采用宋体小四号字,行间距一般为固定值磅,标准字符间距.页边距为左,右,上下各,页面统一采用纸.个人收集整理勿做商业用途
四、封面格式由学校统一制作(注:封面上地“翻译题目”指中文译文地题目,附件为一篇外文翻译地封面格式,附件二为两篇外文翻译地封面格式),若有两篇外文文献,请按“封面、译文一、外文原文一、译文二、外文原文二”地顺序统一装订.个人收集整理勿做商业用途
信息工程学院教科办
年月日
杭州电子科技大学信息工程学院
毕业设计(论文)外文文献翻译
毕业设计(论文)题

翻译题目

专业
姓名
班级
学号
指导教师
杭州电子科技大学信息工程学院毕业设计(论文)外文文献翻译
毕业设计(论文)题

翻译()题目
翻译()题目

专业
姓名
班级
学号
指导教师。

外文翻译格式要求:

外文翻译格式要求:

外文翻译格式要求1.原文必须选用与课题相关的国外学者所著的学术专著或学术文章,不能选用教材类作品或中国作者撰写的英文文章。

2.中文译文不少于3000汉字。

3.原文资料用毕业论文稿纸单面复印,页边距与毕业论文稿纸一致,便于装订。

装订时,原文在前,译文在后。

原文和译文合计页码总数,在文本每页右上角用五号Times New Roman 标明页码。

4.原文的处理方式针对所选资料不同,区别对待:1)复印书本、期刊、论文集,需包含书的封面、选译章节;2)节选自网络文章,应调整好电子文档格式,按照英文Times New Roman,标题四号加粗(若有副标题,小四号加粗),正文五号。

中文译文宋体,标题四号加粗,正文五号。

原文及译文正均采用1.5倍行距,文中若有小标题,一律五号加粗。

5.外文著录格式按照正规参考文献的范式进行,“著录-题名-出版事项”的顺序排列注明。

1)若选自期刊:著者,题名,期刊名称,出版年,卷号(期号),起始页码。

外文著录:Liu Shaozhong, Liao Fengrong. S tudies of negative pragmatic transfer in interlanguage pragmatics[J]. Journal of Guangxi Normal University, 2002, (4):34-45.2)若选自论文集:著者,题名,论文集名称,编者,出版地,出版社,出版年,起始页码。

例如:外文著录:Thomas, J. Cross-Cultural Pragmatic Failure[A]. Edited by He Zhaoxiong. Selected Reading For Pragmatics[C]. Shanghai: Shanghai Foreign Language Education Press, 2003:677-714.3)若选自书籍:著者,书名,版次(第一版不标注),出版地,出版者,出版年,起始页码。

翻译实训封面及最终上交要求(1)

翻译实训封面及最终上交要求(1)

河南机电高等专科学校外语系2011-2012学年第二学期翻译实训班级商英102班姓名孟婉学号1011022022012年5月Food Illustration1.特仑苏牛奶(Deluxe milk)Not all milks could be called Milk Deluxe.翻译:不是所有的牛奶都叫特仑苏。

“Deluxe” in the Mongolian language is" gold milk", is also a brand of Mengniu .翻译:特仑苏在蒙语中是金牌牛奶的意思,同时它是作为蒙牛的一个商标。

2.火腿肠(ham)配料(Ingredients):Pork(猪肉)Chicken (鸡肉)Water (水)Sweet (糖)corn Sugar(玉米葡糖)Corn syrup (玉米糖浆)质量等级:General level注意:Fast expansion bag(膨胀包装)食品生产证号:OS4100 0401 00503.薯片(potato chips)(配料)Ingredients:Peanut(花生), Wheat Flour(小麦粉), Sugar(糖), Corn Syrup(玉米糖浆), Salt(食用盐), Dehydrated Shrimp (干虾), Monosodium(钠),Ammonium(铵), Food Additives(食品添加剂)Product Type:烘炒类Product Standard Code: GB\T22165Shelf Life(保质期):九个月4.面包(bread)配料(Ingredients): Wheat flour(小麦粉), Edible vegetable oil(食用菜油), White granulated sugar(白砂糖), Malt syrup(麦芽糖), Seaweed tablets(螺旋藻片), Milk powder (奶粉), Edible salt(食用盐), Food additives(食品添加剂)Allergen information(过敏原);contains Wheat(包含小麦)Net Wt(净重): 150gShelf Life(保质期):12 Months5.金丝猴糖(candy)配料(Ingredients):high maltose(高级麦芽糖),syrup(糖浆), sugar(白砂糖),condensed milk(浓缩牛奶), whole milk powder(全脂奶粉),Butter(黄油),hydrogenated, Vegetable oil(植物油), rice paper(米纸)Methods(储存方法): cool storage(冷藏), Dry place(干燥处), avoid direct sunlight(避免阳光直射)。

英文翻译 封面及要求

英文翻译  封面及要求

外文翻译专业过程装备与控制工程学生姓名王健班级B装备082学号0810104204指导教师曹卫外文资料名称:Sreening for Maxmin Efficiency外文资料出处:Received: 18 July 2007 / Accepted:17October 2007 / Published online: 30November 2007© SpringerScience+Business Media, LLC 2007附件: 1.外文资料翻译译文2.外文原文最大筛选效率Adam Madison王健译在工厂生产效率上筛分设备是一个最大的决定因素。

但是许多变量和其他机器筛选过程影响, 为保持最大效率的生产它需要严谨的注意力和努力。

它也需要相当多的知识。

Schlabach是拥有着为Deister机械公司超过2 8年以上工作经验的销售经理。

1月,在国家石材,砂和砾石植物运营商协会海,加利福尼亚的海滩,他领导了一个关于筛分性能研讨会。

Schlahach解释筛选材料基于分层的艺术和科学,这一现象发生在一包薯片或一盒麦片上。

直到产品使它从包装线下来,到杂货店,最后到厨房;大的产品仍在顶部,所有通过筛孔的粉末在底部。

所有的材料添加到上层,机器颤抖的行动使粗料作为优质原材料上涨下跌。

当机器工作将要结束时,所有小于规定尺寸的物料都将趋近于开放的甲板上。

制造商和工程师与其他生产同步和合并这个过程,特别是在粉碎机上变得更加复杂,这是一个简单的概念。

和许多问题需要回答。

举个例子,一个水平或倾斜屏幕哪个更合适吗呢?如果没有倾斜余量,这可能是显而易见的选择。

Schlabach说,小的工厂和脱水的筛网都是非常典型的水平摆放。

由于传动的原因,初始投资水平屏幕成本比投资倾斜的屏幕的成本要大。

马力和能源需求的更为重要,因为没有筛子的重力作用,他们更容易堵塞线性行程。

在一个特定的吨位水平放置的振动筛上,旋转的速率在45到50英尺每分钟结果导致了在一个更深层次的床上,减少了容纳能力。

毕业设计(论文)外文资料和译文格式要求

毕业设计(论文)外文资料和译文格式要求

东北大学东软信息学院外文资料和译文格式要求一、译文必须采用计算机输入、打印,幅面A4。

外文资料原文(复印或打印)在前,译文在后,于左侧装订。

二、具体要求1、至少翻译一篇内容与所选课题相关的外文文献。

2、译文汉字字数不少于4000字。

3、正文格式要求:宋体五号字。

附:外文资料和译文封面、空白页外文资料和译文专业:班级:姓名:学号:指导教师:2010年12月23日5.2.5. Read/Write Spin LocksRead/write spin locks have been introduced to increase the amount of concurrency inside the kernel. They allow several kernel control paths to simultaneously read the same data structure, as long as no kernel control path modifies it. If a kernel control path wishes to write to the structure, it must acquire the write version of the read/write lock, which grants exclusive access to the resource. Of course, allowing concurrent reads on data structures improves system performance.Figure 5-2 illustrates two critical regions (C1 and C2) protected by read/write locks. Kernel control paths R0 and R1 are reading the data structures in C1 at the same time, while W0 is waiting to acquire the lock for writing. Kernel control path W1 is writing the data structures inC2, while both R2 and W2 are waiting to acquire the lock for reading and writing, respectively.Figure 5-2. Read/write spin locksEach read/write spin lock is a rwlock_t structure; its lock field is a 32-bit field that encodes two distinct pieces of information:∙ A 24-bit counter denoting the number of kernel control paths currently reading the protected data structure. The two's complement value of this counter is stored in bits 023 of the field.∙An unlock flag that is set when no kernel control path is reading or writing, and clear otherwise. This unlock flag is stored in bit 24 of the field.Notice that the lock field stores the number 0x01000000 if the spin lock is idle (unlock flag set and no readers), the number 0x00000000 if it has been acquired for writing (unlock flag clear and no readers), and any number in the sequence 0x00ffffff, 0x00fffffe, and so on, if it has been acquired for reading by one, two, or more processes (unlock flag clear and the two's complement on 24 bits of the number of readers). As the spinlock_t structure, the rwlock_t structure also includes a break_lock field.The rwlock_init macro initializes the lock field of a read/write spin lock to 0x01000000 (unlocked) and the break_lock field to zero.5.2.5.1. Getting and releasing a lock for readingThe read_lock macro, applied to the address rwlp of a read/write spin lock, is similar to thespin_lock macro described in the previous section. If the kernel preemption option has been selected when the kernel was compiled, the macro performs the very same actions as those of spin_lock( ), with just one exception: to effectively acquire the read/write spin lock in step 2, the macro executes the _raw_read_trylock( ) function:int _raw_read_trylock(rwlock_t *lock){atomic_t *count = (atomic_t *)lock->lock;atomic_dec(count);if (atomic_read(count) >= 0)return 1;atomic_inc(count);return 0;}The lock fieldthe read/write lock counteris accessed by means of atomic operations. Notice, however, that the whole function does not act atomically on the counter: for instance, the counter might change after having tested its value with the if statement and before returning 1. Nevertheless, the function works properly: in fact, the function returns 1 only if the counter was not zero or negative before the decrement, because the counter is equal to 0x01000000 for no owner, 0x00ffffff for one reader, and 0x00000000 for one writer.If the kernel preemption option has not been selected when the kernel was compiled, theread_lock macro yields the following assembly language code:movl $rwlp->lock,%eaxlock; subl $1,(%eax)jns 1fcall _ _read_lock_failed1:where _ _read_lock_failed( ) is the following assembly language function:_ _read_lock_failed:lock; incl (%eax)1: pausecmpl $1,(%eax)js 1block; decl (%eax)js _ _read_lock_failedretThe read_lock macro atomically decreases the spin lock value by 1, thus increasing the number of readers. The spin lock is acquired if the decrement operation yields a nonnegative value; otherwise, the _ _read_lock_failed( ) function is invoked. The function atomically increases the lock field to undo the decrement operation performed by the read_lock macro, and then loops until the field becomes positive (greater than or equal to 1). Next, _ _read_lock_failed( ) tries to get the spin lock again (another kernel control path could acquire the spin lock for writing right after the cmpl instruction).Releasing the read lock is quite simple, because the read_unlock macro must simply increase the counter in the lock field with the assembly language instruction:lock; incl rwlp->lockto decrease the number of readers, and then invoke preempt_enable( ) to reenable kernel preemption.5.2.5.2. Getting and releasing a lock for writingThe write_lock macro is implemented in the same way as spin_lock( ) andread_lock( ). For instance, if kernel preemption is supported, the function disables kernel preemption and tries to grab the lock right away by invoking_raw_write_trylock( ). If this function returns 0, the lock was already taken, thus the macro reenables kernel preemption and starts a busy wait loop, as explained in the description of spin_lock( ) in the previous section.The _raw_write_trylock( ) function is shown below:int _raw_write_trylock(rwlock_t *lock){atomic_t *count = (atomic_t *)lock->lock;if (atomic_sub_and_test(0x01000000, count))return 1;atomic_add(0x01000000, count);return 0;}The _raw_write_trylock( ) function subtracts 0x01000000 from the read/write spin lock value, thus clearing the unlock flag (bit 24). If the subtraction operation yieldszero (no readers), the lock is acquired and the function returns 1; otherwise, the function atomically adds 0x01000000 to the spin lock value to undo the subtraction operation.Once again, releasing the write lock is much simpler because the write_unlock macro must simply set the unlock flag in the lock field with the assembly language instruction:lock; addl $0x01000000,rwlpand then invoke preempt_enable().5.2.6. SeqlocksWhen using read/write spin locks, requests issued by kernel control paths to perform a read_lock or a write_lock operation have the same priority: readers must wait until the writer has finished and, similarly, a writer must wait until all readers have finished.Seqlocks introduced in Linux 2.6 are similar to read/write spin locks, except that they give a much higher priority to writers: in fact a writer is allowed to proceed even when readers are active. The good part of this strategy is that a writer never waits (unless another writer is active); the bad part is that a reader may sometimes be forced to read the same data several times until it gets a valid copy.Each seqlock is a seqlock_t structure consisting of two fields: a lock field of type spinlock_t and an integer sequence field. This second field plays the role of a sequence counter. Each reader must read this sequence counter twice, before and after reading the data, and check whether the two values coincide. In the opposite case, a new writer has become active and has increased the sequence counter, thus implicitly telling the reader that the data just read is not valid.A seqlock_t variable is initialized to "unlocked" either by assigning to it the value SEQLOCK_UNLOCKED, or by executing the seqlock_init macro. Writers acquire and release a seqlock by invoking write_seqlock( ) and write_sequnlock( ). The first function acquires the spin lock in the seqlock_t data structure, then increases the sequence counter by one; the second function increases the sequence counter once more, then releases the spin lock. This ensures that when the writer is in the middle of writing, the counter is odd, and that when no writer is altering data, the counter is even. Readers implement a critical region as follows:unsigned int seq;do {seq = read_seqbegin(&seqlock);/* ... CRITICAL REGION ... */} while (read_seqretry(&seqlock, seq));read_seqbegin() returns the current sequence number of the seqlock; read_seqretry() returns 1 if either the value of the seq local variable is odd (a writer was updating the data structure when the read_seqbegin( ) function has been invoked), or if the value of seq does not match the current value of the seqlock's sequence counter (a writer started working while the reader was still executing the code in the critical region).Notice that when a reader enters a critical region, it does not need to disable kernel preemption; on the other hand, the writer automatically disables kernel preemption when entering the critical region, because it acquires the spin lock.Not every kind of data structure can be protected by a seqlock. As a general rule, the following conditions must hold:∙The data structure to be protected does not include pointers that are modified by the writers and dereferenced by the readers (otherwise, a writer couldchange the pointer under the nose of the readers)∙The code in the critical regions of the readers does not have side effects (otherwise, multiple reads would have different effects from a single read) Furthermore, the critical regions of the readers should be short and writers should seldom acquire the seqlock, otherwise repeated read accesses would cause a severe overhead. A typical usage of seqlocks in Linux 2.6 consists of protecting some data structures related to the system time handling (see Chapter 6).5.2.7. Read-Copy Update (RCU)Read-copy update (RCU) is yet another synchronization technique designed to protect data structures that are mostly accessed for reading by several CPUs. RCU allows many readers and many writers to proceed concurrently (an improvement over seqlocks, which allow only one writer to proceed). Moreover, RCU is lock-free, that is, it uses no lock or counter shared by all CPUs; this is a great advantage over read/write spin locks and seqlocks, which have a high overhead due to cache line-snooping and invalidation.How does RCU obtain the surprising result of synchronizing several CPUs without shared data structures? The key idea consists of limiting the scope of RCU as follows:1.Only data structures that are dynamically allocated and referenced by meansof pointers can be protected by RCU.2.No kernel control path can sleep inside a critical region protected by RCU.When a kernel control path wants to read an RCU-protected data structure, it executes the rcu_read_lock( ) macro, which is equivalent to preempt_disable( ). Next, the reader dereferences the pointer to the data structure and starts reading it. As stated above, the reader cannot sleep until it finishes reading the data structure; the end of the critical region is marked by the rcu_read_unlock( ) macro, which is equivalent to preempt_enable( ).Because the reader does very little to prevent race conditions, we could expect that the writer has to work a bit more. In fact, when a writer wants to update the data structure, it dereferences the pointer and makes a copy of the whole data structure. Next, the writer modifies the copy. Once finished, the writer changes the pointer to the data structure so as to make it point to the updated copy. Because changing the value of the pointer is an atomic operation, each reader or writer sees either the old copy or the new one: no corruption in the data structure may occur. However, a memory barrier is required to ensure that the updated pointer is seen by the other CPUs only after the data structure has been modified. Such a memory barrier is implicitly introduced if a spin lock is coupled with RCU to forbid the concurrent execution of writers.The real problem with the RCU technique, however, is that the old copy of the data structure cannot be freed right away when the writer updates the pointer. In fact, the readers that were accessing the data structure when the writer started its update could still be reading the old copy. The old copy can be freed only after all (potential) readers on the CPUs have executed the rcu_read_unlock( ) macro. The kernel requires every potential reader to execute that macro before:∙The CPU performs a process switch (see restriction 2 earlier).∙The CPU starts executing in User Mode.∙The CPU executes the idle loop (see the section "Kernel Threads" in Chapter 3).In each of these cases, we say that the CPU has gone through a quiescent state.The call_rcu( ) function is invoked by the writer to get rid of the old copy of the data structure. It receives as its parameters the address of an rcu_head descriptor (usually embedded inside the data structure to be freed) and the address of a callback function to be invoked when all CPUs have gone through a quiescent state. Once executed, the callback function usually frees the old copy of the data structure.The call_rcu( ) function stores in the rcu_head descriptor the address of the callback and its parameter, then inserts the descriptor in a per-CPU list of callbacks. Periodically, once every tick (see the section "Updating Local CPU Statistics" in Chapter 6), the kernel checks whether the local CPU has gone through a quiescent state. When all CPUs have gone through a quiescent state, a local taskletwhose descriptor is stored in the rcu_tasklet per-CPU variableexecutes all callbacks in the list.RCU is a new addition in Linux 2.6; it is used in the networking layer and in the Virtual Filesystem.5.2.8. SemaphoresWe have already introduced semaphores in the section "Synchronization and Critical Regions" in Chapter 1. Essentially, they implement a locking primitive that allows waiters to sleep until the desired resource becomes free.Actually, Linux offers two kinds of semaphores:∙Kernel semaphores, which are used by kernel control paths∙System V IPC semaphores, which are used by User Mode processesIn this section, we focus on kernel semaphores, while IPC semaphores are described in Chapter 19.A kernel semaphore is similar to a spin lock, in that it doesn't allow a kernel control path to proceed unless the lock is open. However, whenever a kernel control path tries to acquire a busy resource protected by a kernel semaphore, the corresponding process is suspended. It becomes runnable again when the resource is released. Therefore, kernel semaphores can be acquired only by functions that are allowed to sleep; interrupt handlers and deferrable functions cannot use them.A kernel semaphore is an object of type struct semaphore, containing the fields shown in the following list.countStores an atomic_t value. If it is greater than 0, the resource is free that is, itis currently available. If count is equal to 0, the semaphore is busy but noother process is waiting for the protected resource. Finally, if count isnegative, the resource is unavailable and at least one process is waiting for it.waitStores the address of a wait queue list that includes all sleeping processes that are currently waiting for the resource. Of course, if count is greater than orequal to 0, the wait queue is empty.sleepersStores a flag that indicates whether some processes are sleeping on thesemaphore. We'll see this field in operation soon.The init_MUTEX( ) and init_MUTEX_LOCKED( ) functions may be used to initialize a semaphore for exclusive access: they set the count field to 1 (free resource with exclusive access) and 0 (busy resource with exclusive access currently granted to the process that initializes the semaphore), respectively. The DECLARE_MUTEX and DECLARE_MUTEX_LOCKED macros do the same, but they also statically allocate the struct semaphore variable. Note that a semaphore could also be initialized with an arbitrary positive value n for count. In this case, at most n processes are allowed to concurrently access the resource.5.2.8.1. Getting and releasing semaphoresLet's start by discussing how to release a semaphore, which is much simpler than getting one. When a process wishes to release a kernel semaphore lock, it invokes the up( ) function. This function is essentially equivalent to the following assembly language fragment:movl $sem->count,%ecxlock; incl (%ecx)jg 1flea %ecx,%eaxpushl %edxpushl %ecxcall _ _uppopl %ecxpopl %edx1:where _ _up( ) is the following C function:__attribute__((regparm(3))) void _ _up(struct semaphore *sem){wake_up(&sem->wait);}The up( ) function increases the count field of the *sem semaphore, and then it checks whether its value is greater than 0. The increment of count and the setting of the flag tested by the following jump instruction must be atomically executed, or else another kernel control path could concurrently access the field value, with disastrousresults. If count is greater than 0, there was no process sleeping in the wait queue, so nothing has to be done. Otherwise, the _ _up( ) function is invoked so that one sleeping process is woken up. Notice that _ _up( ) receives its parameter from the eax register (see the description of the _ _switch_to( ) function in the section "Performing the Process Switch" in Chapter 3).Conversely, when a process wishes to acquire a kernel semaphore lock, it invokes the down( ) function. The implementation of down( ) is quite involved, but it is essentially equivalent to the following:down:movl $sem->count,%ecxlock; decl (%ecx);jns 1flea %ecx, %eaxpushl %edxpushl %ecxcall _ _downpopl %ecxpopl %edx1:where _ _down( ) is the following C function:__attribute__((regparm(3))) void _ _down(struct semaphore * sem){DECLARE_WAITQUEUE(wait, current);unsigned long flags;current->state = TASK_UNINTERRUPTIBLE;spin_lock_irqsave(&sem->wait.lock, flags);add_wait_queue_exclusive_locked(&sem->wait, &wait);sem->sleepers++;for (;;) {if (!atomic_add_negative(sem->sleepers-1, &sem->count)) {sem->sleepers = 0;break;}sem->sleepers = 1;spin_unlock_irqrestore(&sem->wait.lock, flags);schedule( );spin_lock_irqsave(&sem->wait.lock, flags);current->state = TASK_UNINTERRUPTIBLE;}remove_wait_queue_locked(&sem->wait, &wait);wake_up_locked(&sem->wait);spin_unlock_irqrestore(&sem->wait.lock, flags);current->state = TASK_RUNNING;}The down( ) function decreases the count field of the *sem semaphore, and then checks whether its value is negative. Again, the decrement and the test must be atomically executed. If count is greater than or equal to 0, the current process acquires the resource and the execution continues normally. Otherwise, count is negative, and the current process must be suspended. The contents of some registers are saved on the stack, and then _ _down( ) is invoked.Essentially, the _ _down( ) function changes the state of the current process from TASK_RUNNING to TASK_UNINTERRUPTIBLE, and it puts the process in the semaphore wait queue. Before accessing the fields of the semaphore structure, the function also gets the sem->wait.lock spin lock that protects the semaphore wait queue (see "How Processes Are Organized" in Chapter 3) and disables local interrupts. Usually, wait queue functions get and release the wait queue spin lock as necessary when inserting and deleting an element. The _ _down( ) function, however, uses the wait queue spin lock also to protect the other fields of the semaphore data structure, so that no process running on another CPU is able to read or modify them. To that end, _ _down( ) uses the "_locked" versions of the wait queue functions, which assume that the spin lock has been already acquired before their invocations.The main task of the _ _down( ) function is to suspend the current process until the semaphore is released. However, the way in which this is done is quite involved. To easily understand the code, keep in mind that the sleepers field of the semaphore is usually set to 0 if no process is sleeping in the wait queue of the semaphore, and it is set to 1 otherwise. Let's try to explain the code by considering a few typical cases. MUTEX semaphore open (count equal to 1, sleepers equal to 0)The down macro just sets the count field to 0 and jumps to the nextinstruction of the main program; therefore, the _ _down( ) function is notexecuted at all.MUTEX semaphore closed, no sleeping processes (count equal to 0, sleepers equal to 0)The down macro decreases count and invokes the _ _down( ) function withthe count field set to -1 and the sleepers field set to 0. In each iteration of theloop, the function checks whether the count field is negative. (Observe thatthe count field is not changed by atomic_add_negative( ) because sleepers isequal to 0 when the function is invoked.)∙If the count field is negative, the function invokes schedule( ) tosuspend the current process. The count field is still set to -1, and thesleepers field to 1. The process picks up its run subsequently insidethis loop and issues the test again.∙If the count field is not negative, the function sets sleepers to 0 and exits from the loop. It tries to wake up another process in thesemaphore wait queue (but in our scenario, the queue is now empty)and terminates holding the semaphore. On exit, both the count fieldand the sleepers field are set to 0, as required when the semaphore isclosed but no process is waiting for it.MUTEX semaphore closed, other sleeping processes (count equal to -1, sleepers equal to 1)The down macro decreases count and invokes the _ _down( ) function withcount set to -2 and sleepers set to 1. The function temporarily sets sleepers to 2, and then undoes the decrement performed by the down macro by addingthe value sleepers-1 to count. At the same time, the function checks whethercount is still negative (the semaphore could have been released by theholding process right before _ _down( ) entered the critical region).∙If the count field is negative, the function resets sleepers to 1 andinvokes schedule( ) to suspend the current process. The count field isstill set to -1, and the sleepers field to 1.∙If the count field is not negative, the function sets sleepers to 0, tries to wake up another process in the semaphore wait queue, and exitsholding the semaphore. On exit, the count field is set to 0 and thesleepers field to 0. The values of both fields look wrong, becausethere are other sleeping processes. However, consider that anotherprocess in the wait queue has been woken up. This process doesanother iteration of the loop; the atomic_add_negative( ) functionsubtracts 1 from count, restoring it to -1; moreover, before returningto sleep, the woken-up process resets sleepers to 1.So, the code properly works in all cases. Consider that the wake_up( ) function in _ _down( ) wakes up at most one process, because the sleeping processes in the wait queue are exclusive (see the section "How Processes Are Organized" in Chapter 3).Only exception handlers , and particularly system call service routines , can use the down( ) function. Interrupt handlers or deferrable functions must not invoke down( ),because this function suspends the process when the semaphore is busy. For this reason, Linux provides the down_trylock( ) function, which may be safely used by one of the previously mentioned asynchronous functions. It is identical to down( ) except when the resource is busy. In this case, the function returns immediately instead of putting the process to sleep.A slightly different function called down_interruptible( ) is also defined. It is widely used by device drivers, because it allows processes that receive a signal while being blocked on a semaphore to give up the "down" operation. If the sleeping process is woken up by a signal before getting the needed resource, the function increases the count field of the semaphore and returns the value -EINTR. On the other hand, if down_interruptible( ) runs to normal completion and gets the resource, it returns 0. The device driver may thus abort the I/O operation when the return value is -EINTR.Finally, because processes usually find semaphores in an open state, the semaphore functions are optimized for this case. In particular, the up( ) function does not execute jump instructions if the semaphore wait queue is empty; similarly, the down( ) function does not execute jump instructions if the semaphore is open. Much of the complexity of the semaphore implementation is precisely due to the effort of avoiding costly instructions in the main branch of the execution flow.5.2.9. Read/Write SemaphoresRead/write semaphores are similar to the read/write spin locks described earlier in the section "Read/Write Spin Locks," except that waiting processes are suspended instead of spinning until the semaphore becomes open again.Many kernel control paths may concurrently acquire a read/write semaphore for reading; however, every writer kernel control path must have exclusive access to the protected resource. Therefore, the semaphore can be acquired for writing only if no other kernel control path is holding it for either read or write access. Read/write semaphores improve the amount of concurrency inside the kernel and improve overall system performance.The kernel handles all processes waiting for a read/write semaphore in strict FIFO order. Each reader or writer that finds the semaphore closed is inserted in the last position of a semaphore's wait queue list. When the semaphore is released, the process in the first position of the wait queue list are checked. The first process is always awoken. If it is a writer, the other processes in the wait queue continue to sleep. If it is a reader, all readers at the start of the queue, up to the first writer, are also woken up and get the lock. However, readers that have been queued after a writer continue to sleep.Each read/write semaphore is described by a rw_semaphore structure that includes the following fields:countStores two 16-bit counters. The counter in the most significant word encodesin two's complement form the sum of the number of nonwaiting writers(either 0 or 1) and the number of waiting kernel control paths. The counter inthe less significant word encodes the total number of nonwaiting readers andwriters.wait_listPoints to a list of waiting processes. Each element in this list is arwsem_waiter structure, including a pointer to the descriptor of the sleepingprocess and a flag indicating whether the process wants the semaphore forreading or for writing.wait_lockA spin lock used to protect the wait queue list and the rw_semaphorestructure itself.The init_rwsem( ) function initializes an rw_semaphore structure by setting the count field to 0, the wait_lock spin lock to unlocked, and wait_list to the empty list. The down_read( ) and down_write( ) functions acquire the read/write semaphore for reading and writing, respectively. Similarly, the up_read( ) and up_write( ) functions release a read/write semaphore previously acquired for reading and for writing. The down_read_trylock( ) and down_write_trylock( ) functions are similar todown_read( ) and down_write( ), respectively, but they do not block the process if the semaphore is busy. Finally, the downgrade_write( ) function atomically transforms a write lock into a read lock. The implementation of these five functions is long, but easy to follow because it resembles the implementation of normal semaphores; therefore, we avoid describing them.5.2.10. CompletionsLinux 2.6 also makes use of another synchronization primitive similar to semaphores: completions . They have been introduced to solve a subtle race condition that occurs in multiprocessor systems when process A allocates a temporary semaphore variable, initializes it as closed MUTEX, passes its address to process B, and then invokes down( ) on it. Process A plans to destroy the semaphore as soon as it awakens. Later。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

译文要求
1.翻译这些文章,所给英文作为参考。

摩擦发电体传感器在管道中的位置
材料科学与工程学院,乔治亚理工学院,亚特兰大,乔治亚0332-0245,美国,电子薄膜国家重点实验室薄膜与集成器件,光电信息学院,中国电子科技大学,
信息,科技,成都610054中国(电子科技大学),中国,和北京奈米能源和纳米技术研究院,中国科学院,北京,中国。

^ Y. G.苏,朱,和杨同样对这项工作作出贡献。

摘要:我们讨论摩擦发电是基于单电极的摩擦,传感器(se-tes)用于检测物体的运动在管道中的位置。

这项创新的优点具有成本低和好的效益,设计简单等,基于传感器se-tes薄膜环形铜电极和聚四氟乙烯(PTFE)管,原理是在对摩擦起电和静电之间的耦合作用的基础上感应。

传感器的响应发电输出信号一个物体的机械运动(如球)通过电极。

铜电极的线性阵列可以沿管在一侧的位置和运动的钢球速度的检测。

信号—对这一器件达到的噪声比10 3。

此外,我们证明了运动特征的实时监测和映射利用电极通道沿管一七单元阵列管内钢球,由输出触发(电流信号)LED灯泡作为一个滚动的球的位置的实时指标。

另外。

se-tes 也显示的检测在一个水管堵塞的能力。

这项工作表明潜在的广泛应用在自摩擦电传感器驱动的跟踪系统堵塞检测,流量控制和物流监控。

关键字:摩擦电效应自发电跟踪传感器管道检测闭塞
发展定位与跟踪系统的应用是很重要的,交通运输,物流控制机,流量监测。

通过电子信息手段确定一个对象的位置,然而直接的视频成像是移动计算机和物联网的关键技术。

关键也就在于位置感应,具有LED的设计与实现,优化健在模式系统,尤其是计算能力和感应范围。

8年多来,主要是以搜索工作已经基于检测热和磁,然而一个常见的限制是大多数这类传感器长寿和移动性带来的挑战,最近,一类发电传发电传感器基于电纳-(滕氏介绍。


他的工作环境来源与机械能,传感器能够独立的工作,不需要外部电源。

最基础的其实也就是耦合作用,摩擦起电和静电感应。

他们已被用于检测儿茶素,汞离子。

磁场的变化。

和空间位移。

几乎少量的工作已经完成,使用腾一自供电的实时跟踪系统。

在本文中,我们提出了一个自发电,单电极型电传感器(se-tes)是基于滚动带电及静电感
(se-tes)是基于滚动带电及静电感应。

当一个摩擦带电的钢球滚聚四氟乙烯(PTFE)管沿用环形铜电极,它诱导交替流动的电子被—铜电极和地之间。

单电极的结构—要求与检测到的无电接触。

图一单电极的电传感器(se-tes),
A、se-tes的制作示意图,插图:的实物图,素描,在倾斜角度30的蚀刻纳米线结构的PTFE表面的扫描电镜图像?
B、传感器工作机制
C、模型模拟示意图
D、钢球在se-tes中的电势分布的有限元模拟管内不同位置
E、计算出的电位在Cu电极作为对钢球的位置函数
F、计算出的电荷量对铜电极作为位置的函数钢球。

对象允许外部铜电极覆盖任何聚四氟乙烯管的一部分,这大大简化了的结构和制造工艺。

工作se-tes的原理系统地研究—实验结果和有限元的门控模拟。

当钢球滚过铜电极,开路电压的峰值和短路电流之间测量电极和接地达到60 V和0.4μ一分别。

钢球的运动速度以线性铜电极阵列获得的在聚四氟乙烯管。

此外,我们的恶魔—开始用七的se-tes应用电极通道作为一个自供电的跟踪系统—透射电子显微镜的实时监测和映射一个滚动的球的位
置。

运动特性的对象,如位置和速度,可在变电所分析得到的—电子数据。

此外,LED灯泡被用作直接跟踪指标立即显示对象的位置。

此外,该se-tes是能够识别的堵塞管位置装满水。

因此,这项工作明确提出了具有实用性的se-tes—在跟踪系统中的应用- TiAl,堵塞—检测,交通监控,健康护理,
结果与讨论:一种制造se-tes由聚四氟乙烯管和铜电极,如图1a显示的薄膜—铜基电极缠绕聚四氟乙烯管形成一个线性阵列,如插图所示图1A。

在这里,PTFE和钢作为产生摩擦电荷接触材料由于电子亲和力大的差异。

28的摩擦带电的钢球滚过聚四氟乙烯管,电子诱导之间流动电极和接地,造成一个可衡量的交流。

根据扫描电子显微镜(SEM)图像的图1A,聚合物纳米—导线的内表面上的均匀分布聚四氟乙烯管,具有连续的平均长度直径范围从80到140 nm。

干—蚀刻的纳米线在聚四氟乙烯表面增加基于钢球的有效接触,提高在摩擦过程中,摩擦电荷密度。

图1b说明了SE的工作原理—测试。

在原来的位置描绘figure1b-i,由于在摩擦带电的极性差异大,聚四氟乙烯吸引了来自钢球电子,离开网在聚四氟乙烯表面的负电荷和平等对钢球的正电荷量。

的所产生的负摩擦电荷分布
图2。

与一个电极se-tes电气测量结果。

(一)短路电流(B)的循环状态放大视图
突出表现在(A)。

(C)(D)的开路电压。

整流电流的全波整流桥(E)诱导的电荷累积。

软件测试通过二极管桥启用。

注意:铜电极接正作为探针静电计,离开负极探针接地。

均匀的PTFE管和保持一个扩展一段时间由于绝缘性能高分子材料。

28这些负性摩擦在聚四氟乙烯管的电荷使正电荷铜电极上感应电荷。

一旦钢球铜电极的方法,正摩擦电荷的儿子钢球将驱动电子从地面流向铜电极,对于带电的球从筛选电场,如图所示1b-ii.when球对准电极,负电荷达到最大值—不利的量的Cu电极上,就像图为钢球1b-iii.开始离开铜电极,感应电子流在地面上的负电荷,使少铜电极,如图所示1b-iv.最后设备将返回到其原始状态图1b-i球远离电极。

因此,作为球穿过,交变电子流发生电极之间的地面,这是指示接近和电信号离开球到/从电极。

为了获得更多的定量研究该信号的产生过程的se-tes,电势分布和电荷转移的亲—该设备的过程进行了数值模拟使用COM溶胶计算。

图1C说明提出的仿真模型。

图1D展示该电位分布的仿真结果—se-tes中当球在五个不同的从电极的距离。

当电—电极是完全一致的,在电位聚四氟乙烯管达到最大的电动电位。

发现随着距离的减少是—吐温钢球和电极变大(支持信息图S1)。

计算电动势作为距离的函数作图图1E,其中电动势增加然后降低在对准的峰值位置。

图1显示计算电荷泉—在不同的距离对铜电极的数量,在上述工作的依据在图1b的过程。

表征的se-tes性能感知移动的物体,从一个电输出电极为偷球辊来回了系统地测量。

如图2a 所示,该短路电流表现出说话sinalternatingdirec—tions。

放大视图在图2b显示整个现在的相对位置周期运动的球走向cuelectrode产生。

负电流的峰值,而离开的原因积极的人,通过在图2b中的插图所示。

负峰和正峰之间的间隔对应于一个状态,球是滚动电极覆盖的管部分,所带来的在位置测量误差。

的差异钢球的直径和宽度之间电极间隔,从而直接影响有助于位置测量精度—彪。

为了获得一个良好的精度,一致性电极的宽度和球直径与高度要求。

开路电压,如图所示图2C,零和最大之间切换60 V为球值重复穿电极。

实验的结果是完全一致的.。

相关文档
最新文档