毕业论文改革方案 --翻译作品类总体要求
- 格式:doc
- 大小:47.50 KB
- 文档页数:1
本科毕业设计(论文)外文翻译基本规范一、要求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倍页眉页角:页眉的奇数页书写—浙江师范大学学士学位论文外文翻译。
毕业论⽂和外⽂翻译要求内容沈阳农业⼤学本科⽣毕业论⽂(设计)撰写要求与格式规范(2008年7⽉修订)毕业论⽂(设计)是培养学⽣综合运⽤所学知识,分析和解决实际问题,提⾼实践能⼒和创造能⼒的重要教学环节,是记录科学研究成果的重要⽂献,也是学⽣申请学位的基本依据。
为保证本科⽣毕业论⽂(设计)质量,促进国内外学术交流,特制定《沈阳农业⼤学本科⽣毕业论⽂(设计)撰写要求与格式规范》。
⼀、毕业论⽂(设计)的基本结构毕业论⽂(设计)的基本结构是:1.前置部分:包括封⾯、任务书、选题审批表、指导记录、考核表、中(外)⽂摘要、关键词和⽬录等。
2.主体部分:包括前⾔、正⽂、参考⽂献、附录和致谢等。
⼆、毕业论⽂(设计)的内容要求(⼀)前置部分1.封⾯由学校统⼀设计。
2.毕业论⽂(设计)任务书毕业论⽂(设计)任务由各教学单位负责安排,并根据已确定的论⽂(设计)课题下达给学⽣,作为学⽣和指导教师共同从事毕业论⽂(设计)⼯作的依据。
毕业论⽂(设计)任务书的内容包括课题名称、学⽣姓名、下发⽇期、论⽂(设计)的主要内容与要求、毕业论⽂(设计)的⼯作进度和起⽌时间等。
3.论⽂(设计)选题审批表4.论⽂(设计)指导记录5.毕业论⽂(设计)考核表指导教师评语、评阅⼈评审意见分别由指导教师和评阅⼈填写,答辩委员会意见、评定成绩以及是否授予学⼠学位的建议等材料应由答辩委员会填写。
6.中(外)⽂摘要摘要是毕业论⽂(设计)研究内容及结论的简明概述,具有独⽴性和⾃含性。
其内容包括论⽂(设计)的主要内容、试(实)验⽅法、结果、结论和意义等。
中⽂摘要不少于400字;英⽂摘要必须⽤第三⼈称,采⽤现在时态编写。
7.关键词关键词均应为专业名词(或词组),注意专业术语的通⽤性,数量⼀般为3-5个;外⽂关键词与中⽂关键词⼀⼀对应。
8.⽬录⽬录由论⽂(设计)的章、节、附录等序号、名称和页码组成。
(⼆)主体部分1.前⾔(引⾔或序⾔)简要说明本项研究课题的提出及其研究意义(学术、实⽤价值),本项研究的前⼈⼯作基础及其欲深⼊研究的⽅向和思路、⽅法以及要解决的主要问题等。
成都东软学院外文资料和译文格式要求一、译文必须采用计算机输入、打印,幅面A4。
外文资料原文(复印或打印)在前,译文在后,于左侧装订。
二、具体要求1、至少翻译一篇内容与所选课题相关的外文文献。
2、译文汉字字数不少于4000字。
3、正文格式要求:宋体五号字。
译文格式参见《译文格式要求》,宋体五号字,单倍行距。
纸张纸张为A4纸,页边距上2.54cm、下2.54cm、左3.17cm、右3.17cm。
装订外文资料原文(复印或打印)在前,译文在后封面封面的专业、班级、姓名、学号等信息要全部填写正确。
封面指导教师必须为讲师以上职称,若助教则需要配备一名讲师协助指导。
讲师在前,助教在后。
指导教师姓名后面空一个中文空格,加职称。
页眉页眉说明宋体小五,左端“XX学院毕业设计(论文)”,右端“译文”。
页眉中的学院名称要与封面学院名称一致。
字数本科4000字。
附:外文资料和译文封面、空白页成都东软学院外文资料和译文专业:软件工程移动互联网应用开发班级:2班姓名:罗荣昆学号:12310420216指导教师:2015年 12月 8日Android page layoutUsing XML-Based LayoutsW hile it is technically possible to create and attach widgets to our activity purely through Java code, the way we did in Chapter 4, the more common approach is to use an XML-based layout file. Dynamic instantiation of widgets is reserved for more complicated scenarios, where the widgets are not known at compile-time (e g., populating a column of radio buttons based on data retrieved off the Internet).With that in mind, it’s time to break out the XML and learn how to lay out Android activities that way.What Is an XML-Based Layout?As the name suggests, an XML-based layout is a specification of widgets’ relationships to each other—and to their containers (more on this in Chapter 7)—encoded in XML format. Specifi cally, Android considers XML-based layouts to be resources, and as such layout files are stored in the res/layout directory inside your Android project.Each XML file contains a tree of elements specifying a layout of widgets and their containers that make up one view hierarchy. The attributes of the XML elements are properties, describing how a widget should look or how a container should behave. For example, if a Button element has an attribute value of android:textStyle = "bold", that means that the text appearing on the face of the button should be rendered in a boldface font style.Android’s SDK ships with a tool (aapt) which uses the layouts. This tool should be automatically invoked by your Android tool chain (e.g., Eclipse, Ant’s build.xml). Of particular importance to you as a developer is that aapt generates the R.java source file within your project, allowing you to access layouts and widgets within those layouts directly from your Java code. Why Use XML-Based Layouts?Most everything you do using XML layout files can be achieved through Java code. For example, you could use setTypeface() to have a button render its textin bold, instead of using a property in an XML layout. Since XML layouts are yet another file for you to keep track of, we need good reasons for using such files.Perhaps the biggest reason is to assist in the creation of tools for view definition, such as a GUI builder in an IDE like Eclipse or a dedicated Android GUI designer like DroidDraw1. Such GUI builders could, in principle, generate Java code instead of XML. The challenge is re-reading the UI definition to support edits—that is far simpler if the data is in a structured format like XML than in a programming language. Moreover, keeping generated XML definitions separated from hand-written Java code makes it less likely that somebody’s custom-crafted source will get clobbered by accident when the generated bits get re-generated. XML forms a nice middle ground between something that is easy for tool-writers to use and easy for programmers to work with by hand as needed.Also, XML as a GUI definition format is becoming more commonplace. Microsoft’s XAML2, Adobe’s Flex3, and Mozilla’s XUL4 all take a similar approach to that of Android: put layout details in an XML file and put programming smarts in source files (e.g., JavaScript for XUL). Many less-well-known GUI frameworks, such as ZK5, also use XML for view definition. While “following the herd” is not necessarily the best policy, it does have the advantage of helping to ease the transition into Android from any other XML-centered view description language. OK, So What Does It Look Like?Here is the Button from the previous chapter’s sample application, converted into an XMLlayout file, found in the Layouts/NowRedux sample project. This code sample along with all others in this chapter can be found in the Source Code area of .<?xml version="1.0" encoding="utf-8"?><Button xmlns:android="/apk/res/android"android:id="@+id/button"android:text=""android:layout_width="fill_parent"android:layout_height="fill_parent"/>The class name of the widget—Button—forms the name of the XML element. Since Button is an Android-supplied widget, we can just use the bare class name. If you create your own widgets as subclasses of android.view.View, you would need to provide a full package declara tion as well.The root element needs to declare the Android XML namespace:xmlns:android="/apk/res/android"All other elements will be children of the root and will inherit that namespace declaration.Because we want to reference this button from our Java code, we need to give it an identifier via the android:id attribute. We will cover this concept in greater detail later in this chapter.The remaining attributes are properties of this Button instance:• android:text indicates the initial text to be displayed on the button face (in this case, an empty string)• android:layout_width and android:layout_height tell Android to have the button’swidth and height fill the “parent”, in this case the entire screen—these attributes will be covered in greater detail in Chapter 7.Since this single widget is the only content in our activity, we only need this single element. Complex UIs will require a whole tree of elements, representing the widgets and containers that control their positioning. All the remaining chapters of this book will use the XML layout form whenever practical, so there are dozens of other examples of more complex layouts for you to peruse from Chapter 7 onward.What’s with the @ Signs?Many widgets and containers only need to appear in the XML layout file and do not need to be referenced in your Java code. For example, a static label (TextView) frequently only needs to be in the layout file to indicate where it should appear. These sorts of elements in the XML file do not need to have the android:id attribute to give them a name.Anything you do want to use in your Java source, though, needs an android:id.The convention is to use @+id/... as the id value, where the ... represents your locally unique name for the widget in question. In the XML layout example in the preceding section, @+id/button is the identifier for the Button widget.Android provides a few special android:id values, of the form @android:id/.... We will see some of these in various chapters of this book, such as Chapters 8 and 10.We Attach These to the Java How?Given that you have painstakingly set up the widgets and containers in an XML layout filenamed main.xml stored in res/layout, all you need is one statement in your activity’s onCreate() callback to use that layout:setContentView(yout.main);This is the same setContentView() we used earlier, passing it an instance of a View subclass (in that case, a Button). The Android-built view, constructed from our layout, is accessed from that code-generated R class. All of the layouts are accessible under yout, keyed by the base name of the layout file—main.xml results in yout.main.To access our identified widgets, use findViewById(), passing in the numeric identifier of the widget in question. That numeric identifier was generated by Android in the R class asR.id.something (where something is the specific widget you are seeking). Those widgets are simply subclasses of View, just like the Button instance we created in Chapter 4.The Rest of the StoryIn the original Now demo, the button’s face would show the current time, which would reflect when the button was last pushed (or when the activity was first shown, if the button had not yet been pushed).Most of that logic still works, even in this revised demo (NowRedux). However,rather than instantiating the Button in our activity’s onCreate() callback, we can reference the one from the XML layout:package youts;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.widget.Button; import java.util.Date;public class NowRedux extends Activity implements View.OnClickListener { Button btn;@Overridepublic void onCreate(Bundle icicle) { super.onCreate(icicle);setContentView(yout.main);btn=(Button)findViewById(R.id.button);btn.setOnClickListener(this);upd ateTime();}public void onClick(View view) { updateTime();}private void updateTime() {btn.setText(new Date().toString()); }}The first difference is that rather than setting the content view to be a view we created in Java code, we set it to reference the XML layout (setContentView(yout.main)). The R.java source file will be updated when we rebuild this project to include a reference to our layout file (stored as main.xml in our project’s res/l ayout directory).The other difference is that we need to get our hands on our Button instance, for which we use the findViewById() call. Since we identified our button as @+id/button, we can reference the button’s identifier as R.id.button. Now, with the Button instance in hand, we can set the callback and set the label as needed.As you can see in Figure 5-1, the results look the same as with the originalNow demo.Figure 5-1. The NowRedux sample activity Employing Basic WidgetsE very GUI toolkit has some basic widgets: fields, labels, buttons, etc. Android’s toolkit is no different in scope, and the basic widgets will provide a good introduction as to how widgets work in Android activities.Assigning LabelsThe simplest widget is the label, referred to in Android as a TextView. Like in most GUI toolkits, labels are bits of text not editable directly by users. Typically, they are used to identify adjacent widgets (e.g., a “Name:” label before a field where one fills in a name).In Java, you can create a label by creating a TextView instance. More commonly, though, you will create labels in XML layout files by adding a TextView element to the layout, with an android:text property to set the value of the label itself. If you need to swap labels based on certain criteria, such as internationalization, you may wish to use a resource reference in the XML instead, as will be described in Chapter 9. TextView has numerous other properties of relevance for labels, such as:• android:typeface to set the typeface to use for the label (e.g., monospace) • android:textStyle to indicate that the typeface should be made bold (bold), italic (italic),or bold and italic (bold_italic)• android:textColor to set the color of the label’s text, in RGB hex format (e.g., #FF0000 for red)For example, in the Basic/Label project, you will find the following layout file:<?xml version="1.0" encoding="utf-8"?><TextView xmlns:android=/apk/res/androidandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:text="You were expecting something profound?" />As you can see in Figure 6-1, just that layout alone, with the stub Java source provided by Android’s p roject builder (e.g., activityCreator), gives you the application.Figure 6-1. The LabelDemo sample applicationButton, Button, Who’s Got the Button?We’ve already seen the use of the Button widget in Chapters 4 and 5. As it turns out, Button is a subclass of TextView, so everything discussed in the preceding section in terms of formatting the face of the button still holds. Fleeting ImagesAndroid has two widgets to help you embed images in your activities: ImageView and ImageButton. As the names suggest, they are image-based analogues to TextView and Button, respectively.Each widget takes an android:src attribute (in an XML layout) to specify what picture to use. These usually reference a drawable resource, described in greater detail in the chapter on resources. You can also set the image content based on a Uri from a content provider via setImageURI().ImageButton, a subclass of ImageView, mixes in the standard Button behaviors, for responding to clicks and whatnot.For example, take a peek at the main.xml layout from the Basic/ImageView sample project which is found along with all other code samples at : <?xml version="1.0" encoding="utf-8"?><ImageView xmlns:android=/apk/res/androidandroid:id="@+id/icon"android:layout_width="fill_parent"android:layout_height="fill_parent"android:adjustViewBounds="true"android:src="@drawable/molecule" />The result, just using the code-generated activity, is shown in Figure 6-2.Figure 6-2. The ImageViewDemo sample applicationFields of Green. Or Other Colors.Along with buttons and labels, fields are the third “anchor” of most GUI toolkits. In Android, they are implemented via the EditText widget, which is a subclass of the TextView used for labels.Along with the standard TextView properties (e.g., android:textStyle), EditText has many others that will be useful for you in constructing fields, including:• android:autoText, to control if the fie ld should provide automatic spelling assistance• android:capitalize, to control if the field should automatically capitalize the first letter of entered text (e.g., first name, city) • android:digits, to configure the field to accept only certain digi ts • android:singleLine, to control if the field is for single-line input or multiple-line input (e.g., does <Enter> move you to the next widget or add a newline?)Beyond those, you can configure fields to use specialized input methods, such asandroid:numeric for numeric-only input, android:password for shrouded password input,and android:phoneNumber for entering in phone numbers. If you want to create your own input method scheme (e.g., postal codes, Social Security numbers), you need to create your own implementation of the InputMethod interface, then configure the field to use it via android: inputMethod.For example, from the Basic/Field project, here is an XML layout file showing an EditText:<?xml version="1.0" encoding="utf-8"?><EditTextxmlns:android=/apk/res/androidandroid:id="@+id/field"android:layout_width="fill_parent"android:layout_height="fill_parent"android:singleLine="false" />Note that android:singleLine is false, so users will be able to enter in several lines of text. For this project, the FieldDemo.java file populates the input field with some prose:package monsware.android.basic;import android.app.Activity;import android.os.Bundle;import android.widget.EditText;public class FieldDemo extends Activity { @Overridepublic void onCreate(Bundle icicle) { super.onCreate(icicle);setContentView(yout.main);EditText fld=(EditText)findViewById(R.id.field);fld.setText("Licensed under the Apache License, Version 2.0 " + "(the \"License\"); you may not use this file " + "except in compliance with the License. You may " + "obtain a copy of the License at " +"/licenses/LICENSE-2.0");}}The result, once built and installed into the emulator, is shown in Figure 6-3.Figure 6-3. The FieldDemo sample applicationNote Android’s emulator only allows one application in the launcher per unique Java package. Since all the demos in this chapter share the monsware.android.basic package, you will only see one of these demos in your emulator’s launcher at any one time.Another flavor of field is one that offers auto-completion, to help users supply a value without typing in the whole text. That is provided in Android as the AutoCompleteTextView widget and is discussed in Chapter 8.Just Another Box to CheckThe classic checkbox has two states: checked and unchecked. Clicking the checkbox toggles between those states to indicate a choice (e.g., “Ad d rush delivery to my order”). In Android, there is a CheckBox widget to meet this need. It has TextView as an ancestor, so you can use TextView properties likeandroid:textColor to format the widget. Within Java, you can invoke: • isChecked() to determi ne if the checkbox has been checked• setChecked() to force the checkbox into a checked or unchecked state • toggle() to toggle the checkbox as if the user checked itAlso, you can register a listener object (in this case, an instance of OnCheckedChangeListener) to be notified when the state of the checkbox changes.For example, from the Basic/CheckBox project, here is a simple checkbox layout:<?xml version="1.0" encoding="utf-8"?><CheckBox xmlns:android="/apk/res/android"android:id="@+id/check"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="This checkbox is: unchecked" />The corresponding CheckBoxDemo.java retrieves and configures the behavior of the checkbox:public class CheckBoxDemo extends Activityimplements CompoundButton.OnCheckedChangeListener { CheckBox cb;@Overridepublic void onCreate(Bundle icicle) { super.onCreate(icicle);setContentView(yout.main);cb=(CheckBox)findViewById(R.id.check);cb.setOnCheckedChangeListener(this);}public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {if (isChecked) {cb.setText("This checkbox is: checked");}else {cb.setText("This checkbox is: unchecked");}}}Note that the activity serves as its own listener for checkbox state changes since it imple ments the OnCheckedChangeListener interface (via cb.setOnCheckedChangeListener(this)). The callback for the listener is onCheckedChanged(), which receives the checkbox whose state has changed and what the new state is. In this case, we update the text of the checkbox to reflect what the actual box contains.The result? Clicking the checkbox immediately updates its text, as you can see in Figures 6-4 and 6-5.Figure 6-4. The CheckBoxDemo sample application, with the checkbox uncheckedFigure 6-5. The same application, now with the checkbox checkedTurn the Radio UpAs with other implementations of radio buttons in other toolkits, Android’s radio buttons are two-state, like checkboxes, but can be grouped such that only one radio button in the group can be checked at any time.Like CheckBox, RadioButton inherits from CompoundButton, which in turn inherits fromTextView. Hence, all the standard TextView properties for font face, style, color, etc., are available for controlling the look of radio buttons. Similarly, you can call isChecked() on a RadioButton to see if it is selected, toggle() to select it, and so on, like you can with a CheckBox.Most times, you will want to put your RadioButton widgets inside of aRadioGroup. The RadioGroup indicates a set of radio buttons whose state is tied, meaning only one button out of the group can be selected at any time. If you assign an android:id to your RadioGroup in your XML layout, you can access the group from your Java code and invoke:• check() to check a specific radio button via its ID (e.g., group.check(R.id.radio1))• clearCheck() to clear all radio buttons, so none in the group are checked• getCheckedRadioButtonId() to get the ID of the currently-checked radio button (or -1 if none are checked)For example, from the Basic/RadioButton sample application, here is an XML layout showing a RadioGroup wrapping a set of RadioButton widgets: <?xml version="1.0" encoding="utf-8"?> <RadioGroupxmlns:android=/apk/res/androidandroid:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent" ><RadioButton android:id="@+id/radio1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Rock" /><RadioButton android:id="@+id/radio2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Scissors" /><RadioButton android:id="@+id/radio3"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Paper" /></RadioGroup>Figure 6-6 shows the result using the stock Android-generated Java forthe project and this layout.Figure 6-6. The RadioButtonDemo sample application Note that the radio button group is initially set to be completely unchecked at the outset. To pre-set one of the radio buttons to be checked, use either setChecked() on the RadioButton or check() on the RadioGroup from within your onCreate() callback in your activity.It’s Quite a ViewAll widgets, including the ones previously shown, extend View, and as such give all widgets an array of useful properties and methods beyond those already described.Useful PropertiesSome of the properties on View most likely to be used include:• Controls the focus sequence:• android:nextFocusDown• android:nextFocusLeft• android:nextFocusRight• android:nextFocusUp• android:visibility, which controls wheth er the widget is initially visible• android:background, which typically provides an RGB color value (e.g., #00FF00 for green) to serve as the background for the widgetUseful MethodsYou can toggle whether or not a widget is enabled via setEnabled() and see if it is enabled via isEnabled(). One common use pattern for this is to disable some widgets based on a CheckBox or RadioButton selection.You can give a widget focus via requestFocus() and see if it is focused via isFocused(). You might use this in concert with disabling widgets as previously mentioned, to ensure the proper widget has the focus once your disabling operation is complete.To help navigate the tree of widgets and containers that make up an activity’s overall view, you can use:• get Parent() to find the parent widget or container• findViewById() to find a child widget with a certain ID• getRootView() to get the root of the tree (e.g., what you provided to the activity via setContentView())Android 页面布局使用XML进行布局虽然纯粹通过Java代码在activity上创建和添加部件,在技术上是可行的,我们在第4章中做的一样,更常见的方法是使用一种基于XML的布局文件。
毕业论文外文翻译要求
外国文献翻译是撰写毕业论文的重要环节之一,下面是一份要求700字的毕业论文外文翻译要求:
1. 翻译时间: 需在规定时间内完成翻译任务,以确保毕业论文
后续工作的顺利进行。
2. 原文准确性: 翻译必须准确无误,不得对原文进行任何删节、增补或变动。
3. 语言流畅度: 翻译应当具有良好的语言流畅度,不得过于生
硬或呆板。
4. 专业术语准确性: 翻译时要确保专业术语的准确性,避免词
义的混淆。
5. 语法错误及标点符号: 翻译应符合英文的语法规范,避免语
法错误和标点符号的错误使用。
6. 翻译风格: 翻译应当符合学术论文的要求,措辞恰当,语气
客观中立。
7. 格式要求: 翻译部分应与论文正文的格式一致,包括字体、
字号、行间距等。
8. 校对: 完成翻译后,需要进行一次仔细的校对工作,确保翻
译的正确性。
9. 原文附录: 翻译部分要同时附上原文,以便审查人员对翻译的准确性进行核对。
10. 翻译文档: 翻译文档要以电子文档的形式提交,确保方便审查人员查看。
以上要求旨在保证翻译的质量和准确性,对于撰写毕业论文非常重要。
翻译过程中,建议使用专业的翻译工具,如翻译记忆软件、专业词典等,以提高翻译的效率和准确性。
同时,积极与导师和专业领域的人进行交流和讨论,以解决翻译中的问题和困惑。
附件1(毕业设计一)材料科学与工程学院毕业实习环节外文翻译要求一、翻译论文的选择:1、与自己毕业设计相关的外文参考文献2、该译文可以作为设计论文中文献综述中的部分内容;3、原则上选取的英语原文不超过5页。
二、译文结构内容1、作者,英文原文题目,期刊名称,卷期号,年份,起止页码,2、文章题目,作者(保持英文,不需翻译),作者单位(英文不变)3、摘要,关键词4、正文部分:引言,试验过程,结果与讨论,结论,参考文献(保持原文状态)5、译文中的图标需要翻译,图可以复印后粘贴或扫描插入三、译文和原文统一装订在一起,独立与毕业论文一起上交四、几点附属说明1 文章所在期刊的期刊名及相关信息不要翻译。
2 文章的作者,作者的单位,地址,下注的通讯作者的情况,参考文献不要翻译。
3文章的题目,摘要,关键词,及正文都要按照原文的顺序来翻译。
4文章中图表翻译示例如下:此为翻译前的表格:此为翻译后的表格:表1 微波和常规方法加工的粉体金属样品的性能Table 1 Properties of microwave and conventionally processedpowdered metal samplesMW 代表微波烧结;conv代表常规方法。
大部分微波烧结的样品的断裂模量比常规方法烧结的要高。
许多微波烧结的样品的密度也是高于常规方法烧成的样品。
MW, microwave processed; conv., conventionally processed. Themodulus of rupture(MOR) of most microwave-processed samples ishigher than that of the conventional samples. The densities of manymicrowave-processed samples are also higher than those ofconventional samples.即表头和注释中英文都要。
翻译及评述格式要求1.翻译作品字数:英文字数3500——4500左右评述字数:中文1000-1500左右2.字体与字号:题目用二号黑体字,粗体,居中;一级标题用三号黑体字;二级标题用四号宋体字;三级标题用小四号宋体字;翻译及评述正文中的英文字体一律用Times New Roman, 小四号;中文一律用宋体,小四。
3.行间距:1.5倍行距4.英文齐头式,两端对齐;中文小标题齐头,正文各段首行左起空2个字符,其余两端对齐。
5.段后、段前空1行6.翻译以自然段为单位,中英文对照。
7.正文插入打印页码(封面除外),下面居中。
8.打印规格:纸张A4 210×297毫米。
在文件选项下的页面设置选项中,“字符数/行数”选使用默认字符数;页边距设为:上:3厘米;下:2.5厘米;左:2.5厘米;右:2.5厘米;装订线:0.6厘米;装订线位置:左侧;页眉:1.8厘米;页脚1.8厘米。
(后附格式样本)毕业设计题目商务翻译及方法评述学生姓名X X X学号 2003300325专业商务英语班级 0703指导教师 X X X二 O 一 O 九年五月Translation (Times New Roman 三号居中)[提要] 翻译资料的介绍;翻译中遇到的主要问题,比如:长句、复杂句的翻译;定语从句的翻译;专业术语的理解等。
解决方法:主要采用何种方法解决以上困难。
(50-100字)Title (Times New Roman 小三号加粗居中)中文题目(宋体小三号加粗)Located in China's southeast coast, Wenzhou covers a land area of 11,800 square kilometers and a sea area of 11,000 square kilometers. It has a total registered population of 7.90 million and has jurisdiction over three districts (Lucheng, Longwan and Ouhai), two cities (Rui'an and Yueqing),six counties(Yongjia, Pingyang, Cangnan, Dongtou, Wencheng, Taishun). Wenzhou is a place with glory brought by the birth of talented people and a place with beautiful mountains and rivers. (Times New Roman 小四, 齐头式,两端对齐)温州地处中国东南沿海,土地面积1.18万平方公里,海域面积1.1万平方公里,(分译法)户籍总人口790万,辖鹿城、龙湾、瓯海3区,瑞安、乐清2市,永嘉、平阳、苍南、洞头、文成、泰顺6县,人杰地灵,山川秀丽。
关于翻译方向论文改革说明1.选翻译方向的可以选择写翻译方面的论文,也可以做翻译方面的实践,但一旦方向确定,不能随意更改。
2.翻译实践的选材由老师决定,可以选取科技、文学或其它和学生就业相关的文体。
3.字数要求,英译汉6000字,汉译英5000字,教师要尽量做到英译汉和汉译英学生数大致平衡,不能差别太悬殊。
4.格式上要求学生要有开题报告(简单介绍翻译内容、选材原因、总体翻译策略和方法以及预期收获)、正文(整体译文在前,整体原文附后)、注释(每个译文针对难点和疑点请注上10-20个注释,采用每页脚注①②...,每页重新编号,以备答辩使用)及参考文献(可选取一些理论书籍及参考资料)5.评分标准:EXCELLENT TRANSLATION (90-100分)The translation faithfully reflects all the original passage with only 1 or 2 minor errors in voc abulary, syntax, punctuation or spelling. The translation is elegant (appropriate choice of wor ds, a variety in sentence patterns).GOOD TRANSLATION WITH FEW INACCURACIES (76-89分)The translation reflects almost all the original passage with relatively few significant errors of vocabulary, syntax, spelling or punctuation. The translation is readable (generally clear, smo oth and cohesive).PASSABLE TRANSLATION WITH SOME INACCURACIES (60-75分)The translation adequately reflects most of the original passage with occasional errors of voca bulary, syntax, spelling or punctuation. The translation is, for the most part, readable. INADEQUATE TRANSLATION WITH FREQUENT INACCURACIES (40-59分)The translation only reflects about half of the original passage with frequent errors of vocabul ary, syntax, spelling or punctuation. The translation is, in some parts, unreadable.POOR TRANSLATION (0-39分)The translation reflects less than half of the original passage. Almost all sentences contain err ors of vocabulary, syntax, spelling or punctuation. The translation is , for the most part, unrea dable.。
东北大学东软信息学院外文资料和译文格式要求一、译文必须采用计算机输入、打印,幅面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。
毕业论文翻译要求
翻译毕业论文要求700字
翻译论文是一项需要高度专业知识和技巧的任务。
为了确保翻译的准确性和专业性,以下是毕业论文翻译要求的简要总结。
翻译要求如下:
1.语言准确性:翻译应准确无误地表达原文的意思。
翻译人员
需要对目标语言的语法和用词有深入了解,以确保专业术语的正确使用和上下文的准确理解。
2.语言风格:论文的语言风格需要与原文保持一致,包括语气、人称和形式等。
翻译人员应确保语言风格符合学术要求并具有较高的可读性。
3.结构和组织:翻译的论文应保持与原文相同的结构和组织方式。
翻译人员应仔细分析原文,并将其正确地转化为目标语言的结构和组织形式。
4.引文和文献注释:对于论文中的引文和文献注释,翻译人员
需要准确地传达原文的信息,并确保正确引用和注释的格式。
5.格式和样式:翻译的论文应根据目标语言的学术写作规范进
行格式化和样式调整,包括目录、标题、页眉页脚等。
6.专业背景和知识:翻译人员需要具备相关专业背景和知识,
以便更好地理解专业术语和领域特定内容,并确保翻译的准确
性。
7.逻辑和连贯性:翻译的论文应保持逻辑和连贯性,以确保文章的流畅阅读和理解。
8.润色和校对:翻译的论文应进行润色和校对,以纠正语法、拼写和标点等错误,并确保整个论文的准确性和一致性。
9.保密性:翻译人员需要确保论文的保密性,并遵守相关机构和机构的保密政策。
总之,翻译毕业论文需要高度的专业知识和技巧。
翻译人员应确保翻译的准确性、专业性和一致性,并按照学术写作规范进行格式化和样式调整,以确保最终翻译的论文符合学术要求。
毕业论文的外文翻译要求毕业论文是学生完成学业的重要标志,而其中的外文翻译部分更是为了提供更全面的学术支持和国际交流。
为了确保翻译的准确性和专业性,我们有一些明确的要求和规定。
一、译稿准确性要求1.1 语义准确:译稿应准确地传达原文的含义,翻译词语和句子应与原文相对应,确保不出现歧义或误解。
1.2 文法准确:译稿应符合外语语法规范,句子结构要清晰连贯,语法错误应予避免。
1.3 词汇准确:译稿应使用准确的词汇,能够准确表达原文中的专业术语和概念。
1.4 表达准确:译稿应能充分表达原文作者的意图和观点,不改变原意,不添加任何无关信息。
二、格式要求2.1 页面设置:译稿与正文部分应保持一致,包括页边距、字体、字号和行间距等方面。
2.2 段落格式:译稿应采用适当的段落划分,确保内容结构清晰,段落之间应有明显的过渡关系。
2.3 标点符号:译稿中的标点符号应准确无误,与原文保持一致。
2.4 图表翻译:如原文中包含图表、图片等内容,应准确翻译并清晰插入,保持与原文的对应关系。
三、语言风格要求3.1 学术性语言:译稿应以学术性的语言进行表达,避免使用口语或俚语词汇。
3.2 表达简明:译稿应尽量使用简明扼要的语言,避免冗长和啰嗦的表达。
3.3 文体恰当:译稿应根据原文的文体特点,保持与之一致的语言风格,如正式、客观等。
3.4 遵循学科要求:根据不同学科的要求,译稿应遵循相应的学科规范和术语。
四、参考文献要求4.1 引用准确:如译稿中涉及引用原文中的内容,应准确标注出处,遵循学术引用规范。
4.2 参考文献著录:如译稿中有参考文献部分,应按照规范的著录格式进行排版,确保引用的准确性。
4.3 翻译标注:如译稿中对参考文献进行翻译或添加注释,应将其清晰标注,以区分原文与译文。
总结:毕业论文的外文翻译要求是多方面的,从译稿准确性、格式要求、语言风格要求到参考文献要求,都需要学生严格遵循。
合理的格式和清晰的语言表达是展示学术水平和专业素养的重要方面,而译稿的准确性更是毕业论文的基石。
外国语毕业论文(设计)—翻译作品类总体要求
毕业论文(设计)是本科教学过程中的重要环节,是对学生综合运用本学科的基础理论、专门知识和基本技能解决实际问题和从事科学研究工作的能力的训练与检验,也是落实教学计划、检验教学质量的一个重要环节。
依据我校《毕业设计(论文)工作条例》和《毕业设计(论文)教学质量标准及评价方案》,经过英语系教师的充分讨论,并参考国内相关高校的改革经验,我院拟在英语专业毕业论文(设计)环节中增加翻译作品类,总体要求为:
1. 人员要求:鼓励翻译方向、有意报考翻译专业硕士或有志于从事翻译工作的学生选择翻译作品类毕业论文(设计)。
2. 内容要求:鼓励学生结合所学课程与方向,选择贴近社会经济、科技发展实际、符合我校英语专业—应用型、外向型特色的翻译材料进行英汉双向翻译。
文本原材料一般由指导教师提供,也可自行选择,但需经指导教师批准。
3.字数要求:英译汉材料1万字,或汉译英材料1万字,或汉译英、英译汉总字数1万字,翻译中技术性问题以脚注形式标出,其它句式选择、翻译理论技巧、文体等宏观问题写在翻译问题研究报告部分,翻译研究报告与翻译心得体会要求3千字。
4.翻译要求:选择文本一般应没有现成译文,学生初次翻译可借助计算机等现代技术,但不得照抄照搬,不得抄袭他人。
译文必须使用规范、正式、得体的目标语撰写,且格式规范。
(详见格式说明)为阅读、翻译方便起见,要求在原文、译文的每段左上角标注序号,从第一段开始,依次标注1,2,3,4……
5.评分要求:指导教师根据国家颁布的《翻译服务规范》对译文进行评分,占80%,根据学校、的《毕业设计(论文)教学质量标准及评价方案》对工作态度等其他部分进行评分,占20%。
6. 其他要求:时间、答辩等要求与其他毕业设计(论文)形式一致。
外国语英语系翻译系
2020年3月。