課程名稱-汽車實(shí)用英語及利用虛擬化平臺進(jìn)行內(nèi)存泄露探測_第1頁
課程名稱-汽車實(shí)用英語及利用虛擬化平臺進(jìn)行內(nèi)存泄露探測_第2頁
課程名稱-汽車實(shí)用英語及利用虛擬化平臺進(jìn)行內(nèi)存泄露探測_第3頁
課程名稱-汽車實(shí)用英語及利用虛擬化平臺進(jìn)行內(nèi)存泄露探測_第4頁
課程名稱-汽車實(shí)用英語及利用虛擬化平臺進(jìn)行內(nèi)存泄露探測_第5頁
已閱讀5頁,還剩30頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

課程名稱:汽車實(shí)用英語第一部分課程性質(zhì)與目標(biāo)一、課程性質(zhì)與特點(diǎn)《汽車實(shí)用英語》是汽車檢測與維修專業(yè)設(shè)置的一門專業(yè)必修課。該課程以英文較為全面地介紹了汽車的構(gòu)造、工作原理以及汽車新技術(shù)。該課程實(shí)用性較強(qiáng),學(xué)生通過英文課文的閱讀與翻譯,可學(xué)習(xí)常見的汽車專業(yè)詞匯、專業(yè)術(shù)語及汽車相關(guān)結(jié)構(gòu)與工作原理的英語表達(dá),為以后閱讀、翻譯專業(yè)文獻(xiàn)以及科技論文寫作打下良好的基礎(chǔ)。二、課程目標(biāo)與基本要求結(jié)合已學(xué)的汽車構(gòu)造課程,掌握常見的汽車發(fā)動(dòng)機(jī)、底盤、車身及電器系統(tǒng)的專業(yè)英語詞匯、專業(yè)術(shù)語及汽車相關(guān)結(jié)構(gòu)與工作原理的英語表達(dá);掌握汽車專業(yè)英語閱讀和翻譯的基本理論和技巧;能熟練閱讀和翻譯難度一般的汽車相關(guān)英文文獻(xiàn),并進(jìn)行簡單的科技論文寫作。三、與本專業(yè)其他課程的關(guān)系本課程是培養(yǎng)汽車檢測與維修專業(yè)及其它汽車相關(guān)專業(yè)人才的一門必要的專業(yè)技術(shù)課。學(xué)習(xí)本課程之前應(yīng)具備《汽車構(gòu)造》、《汽車?yán)碚摗返日n程的相關(guān)知識,可為后續(xù)多門課程打下基礎(chǔ),并可將所學(xué)知識應(yīng)用于畢業(yè)設(shè)計(jì)中,如英文文獻(xiàn)的閱讀與翻譯、以及英文摘要及科技論文的撰寫等。第二部分考核內(nèi)容與考核目標(biāo)Chapter1AutomotiveBasics一、學(xué)習(xí)目的與要求通過本章學(xué)習(xí),掌握汽車的四大基本組成:發(fā)動(dòng)機(jī)、底盤、車身和電器系統(tǒng)的基本專業(yè)英語詞匯;理解各部分的基本結(jié)構(gòu)、原理與作用;能準(zhǔn)確翻譯原文重點(diǎn)段落、語句。二、考核知識點(diǎn)與考核目標(biāo)(一)重點(diǎn)識記:下列專業(yè)術(shù)語與核心詞匯1.Body:Saloon,Sedan,SUV,MPV等相關(guān)術(shù)語、詞匯;2.Engine:Gasoline,Diesel等相關(guān)術(shù)語、詞匯;3.Chassis:Powertrainsystem,Steeringsystem,Suspensionsystem,Brakingsystem等相關(guān)術(shù)語、詞匯;4.Electricalsystem:Charging,Starting,Ignition等相關(guān)術(shù)語、詞匯;理解:通過閱讀,理解發(fā)動(dòng)機(jī)、底盤各部分的基本組成、作用;應(yīng)用:能準(zhǔn)確翻譯部分原文重點(diǎn)段落、語句。(二)次重點(diǎn)識記:根據(jù)車身造型的不同,不同車型的英文表達(dá);(三)一般理解:通過閱讀理解不同車型的車身結(jié)構(gòu)特點(diǎn),及電器系統(tǒng)各部分的組成、作用。Chapter2InternalCombustionEngine一、學(xué)習(xí)目的與要求通過本章學(xué)習(xí),掌握汽車發(fā)動(dòng)機(jī)相關(guān)的基本英文專業(yè)術(shù)語與詞匯;通過閱讀理解發(fā)動(dòng)機(jī)的基本組成與工作原理;能準(zhǔn)確翻譯原文重點(diǎn)段落、語句。二、考核知識點(diǎn)與考核目標(biāo)(一)重點(diǎn)識記:下列專業(yè)術(shù)語與核心詞匯1.Engineterms:TDC,BDC,Enginecapacity,Compressionratio,Sweptvolume,Clearancevolume等相關(guān)術(shù)語、詞匯;2.Fourstrokes:Induction/Intakestroke,Compressionstroke,Powerstroke,Exhauststroke;3.Engineblock,Cylinder,Cylinderhead,Waterjacket,Oilgallery,Cylindersleeve,Gasket,Headcover,Crankcase,Oilpan/Sump,Piston,Pistonrings,Pistonpin,Connectingrod,Crankshaft,Flywheel,Torsionalvibrationbalancer等相關(guān)術(shù)語、詞匯;4.Valvesystem:OverheadCamshaft(OHC),Push-rod,Camshaft,ValveClearance,ValveTiming,Valveoverlap,ElectronicValveControl(EVC)等相關(guān)術(shù)語、詞匯;5.Gasolinefuelsystem:Excess-airfactor,Air/Fuelratio,Carburetor(Venture,Floatchamber,ThrottleMechanism),Airfilter,Fuelpump,Fuelfilter,Fuellines,Fueltank,GasolineDirectInjection(GDI),Multi-pointInjection(MPI)等相關(guān)術(shù)語、詞匯;6.DieselEngine:In-lineFuelInjectionPump,Plungerandbarrel,Deliveryvalve,Needlevalve,Injector,Governor,CommonRailInjectionSystem(CRsystem),TurboChargersystem,Exhaust-gasTurbocharger等相關(guān)術(shù)語、詞匯;7.Coolingsystem:Aircooling,Liquidcooling,Thermostat,Radiator,Coolantpump,waterjacket,Anti-freeze等相關(guān)術(shù)語、詞匯;8.Lubricationsystem:Oilpump,Oilgallery,Oilfilter,Oilpan等相關(guān)術(shù)語、詞匯;9.EmissionControl:Exhaustmanifold,Muffler,Tailpipe;Hydrocarbon(HC);Carbonmonoxide(CO),Nitrogenoxide(NOx),Three-wayCatalyticConverter,Exhaust-gasRecirculation(EGR)等相關(guān)術(shù)語、詞匯;理解:1.內(nèi)燃機(jī)的基本工作原理;2.掌握發(fā)動(dòng)機(jī)機(jī)體組、活塞連桿組、曲軸飛輪組的結(jié)構(gòu)與作用;3.掌握配氣機(jī)構(gòu)(Valvesystem)的結(jié)構(gòu)類型、工作原理,理解氣門間隙及配氣正時(shí)的作用、原理;應(yīng)用:能準(zhǔn)確翻譯原文重點(diǎn)段落、語句,并能用英文簡單描述發(fā)動(dòng)機(jī)的基本工作原理,及機(jī)體組、活塞連桿組、曲軸飛輪組的結(jié)構(gòu)組成,與配氣機(jī)構(gòu)的工作原理。(二)次重點(diǎn)理解:汽油機(jī)與柴油機(jī)的不同之處,及兩種發(fā)動(dòng)機(jī)燃油供給系的基本組成;應(yīng)用:能準(zhǔn)確翻譯部分原文重點(diǎn)段落、語句。(三)一般理解:了解下列相關(guān)內(nèi)容1.EngineandTransmissionMountings;2.GasolineFuelsystem:MotronicCombinedIgnitionandFuelInjectionsystemChapter3PowerTrain一、學(xué)習(xí)目的與要求通過本章學(xué)習(xí),掌握汽車傳動(dòng)系統(tǒng)的基本專業(yè)英語術(shù)語與詞匯;通過閱讀理解傳動(dòng)系統(tǒng)的基本組成,及各部分的結(jié)構(gòu)與工作原理;能準(zhǔn)確翻譯原文重點(diǎn)段落、語句。二、考核知識點(diǎn)與考核目標(biāo)(一)重點(diǎn)識記:下列專業(yè)術(shù)語與核心詞匯1.ElementofPowerTrain:Clutch,Transmission(MT,AT,AMT,CVT),Driveshaft,UniversalJoint,FinalDrive,Differential,Half/Axleshaft,Drivewheel;2.Clutch:Drivingmember(Flywheel,Pressureplate),DrivenMember(Clutchdisc),Operatingmember(ClutchPedal,Returnspring,Clutchlinkage,Clutchfork,Throwoutbearing),HydrodynamicCoupling,Hydrodynamictorqueconverter等相關(guān)術(shù)語、詞匯;3.ManualTransmission(MT):Primary/Inputshaft,Layshaft/Countershaft,Mainshaft,Reverseidlershaft,Sliding-mesh/Constant-mesh/Synchro-meshTransmission,Synchronizationdevice,Gearchanging,Spurgear,Helicalgear,Doublehelicalgear等相關(guān)術(shù)語、詞匯;4.AutomaticTransmission(AT):Torqueconverter,Hydraulicsystem,Planetarygearsystem(Sungear,ringgear,Planetcarrier,planetgear),AMT,CVT等相關(guān)術(shù)語、詞匯;5.FinalDrive:Hypoidbevelgear,Crownwheel,Groundclearance等相關(guān)術(shù)語、詞匯6.FWD,F(xiàn)F,F(xiàn)R,MR,4WD,4WS等相關(guān)術(shù)語、詞匯。理解:1.掌握汽車傳動(dòng)系統(tǒng)(PowerTrain)的主要組成部分;2.干摩擦式離合器(DryFrictionClutch)的結(jié)構(gòu)及工作原理;3.各種手動(dòng)變速器(MT)的結(jié)構(gòu);4.自動(dòng)變速器(AT)的三大基本構(gòu)成,重點(diǎn)掌握行星齒輪機(jī)構(gòu)的結(jié)構(gòu)與工作原理;5.萬向節(jié)(UJ)的作用;6.主減速器(FinalDrive)的結(jié)構(gòu)與工作原理;7.差速器(Differential)的作用與工作原理。應(yīng)用:能準(zhǔn)確翻譯原文重點(diǎn)段落、語句,并能用英文簡單描述傳動(dòng)系主要組成部分的作用、結(jié)構(gòu)與工作原理。(二)次重點(diǎn)理解:通過閱讀理解下列部分內(nèi)容1.各種手動(dòng)變速器(MT)的工作原理;2.萬向節(jié)(UJ)的結(jié)構(gòu)與工作原理;3.前輪驅(qū)動(dòng)(FWD)。應(yīng)用:理解傳統(tǒng)離合器液壓操縱系統(tǒng)的結(jié)構(gòu)組成,并能準(zhǔn)確翻譯部分原文重點(diǎn)段落、語句。(三)一般理解:了解下列相關(guān)內(nèi)容1.前置前驅(qū)(FF)等不同汽車布置形式的特點(diǎn);2.液力耦合器(HydrodynamicCoupling)或變矩器(Torqueconverter)的結(jié)構(gòu)與工作原理;3.AMT與CVT的結(jié)構(gòu)與工作原理。Chapter4BrakingSystemandBodyConstruction一、學(xué)習(xí)目的與要求通過本章學(xué)習(xí),掌握汽車制動(dòng)系統(tǒng)、車身結(jié)構(gòu)的基本專業(yè)英語術(shù)語與詞匯;通過閱讀理解制動(dòng)系、車身的作用、類型、組成部分及各部分的結(jié)構(gòu)、特點(diǎn)與工作原理;能準(zhǔn)確翻譯原文重點(diǎn)段落、語句。二、考核知識點(diǎn)與考核目標(biāo)(一)重點(diǎn)識記:下列專業(yè)術(shù)語與核心詞匯1.Threetypesofbrakingsystem:Servicebrakingsystem,Parkingbrakingsystem,Additionalretardingbrakingsystem;2.Drumbrakes,Discbrakes等相關(guān)術(shù)語、詞匯;3.Non-powerbrakes,Power-assistedbrakes(Vacuumbooster,Tandemmastercylinder,Brakepressureregulatingvalve)等相關(guān)術(shù)語、詞匯;4.AntilockBrakingSystem(ABS),Wheel-speedsensor,Solenoidvalve等相關(guān)術(shù)語、詞匯;5.Body/Frameconstruction,Unitizedbodyconstruction等相關(guān)術(shù)語、詞匯。理解:通過閱讀理解下列部分內(nèi)容1.制動(dòng)系統(tǒng)的作用機(jī)理,不同類型制動(dòng)系統(tǒng)的結(jié)構(gòu)特點(diǎn)(BasicFeature);2.液壓制動(dòng)系統(tǒng)(Principlepartsofhydraulicbrakesystem)的基本組成;3.兩類制動(dòng)器(DrumbrakesandDiscbrakes)的結(jié)構(gòu)與性能特點(diǎn);4.Non-powerbrakes的基本組成、原理;5.Power-assistedbrakes的基本組成,及Vacuumbooster,Tandemmastercylinder與Brakepressureregulatingvalve的結(jié)構(gòu)、原理;6.Body/Frameconstruction,Unitizedbodyconstruction的結(jié)構(gòu)特點(diǎn)。應(yīng)用:能準(zhǔn)確翻譯原文重點(diǎn)段落、語句,并能用英文簡單描述制動(dòng)系與車身的作用、類型、組成部分及各部分的結(jié)構(gòu)、特點(diǎn)與工作原理。(二)次重點(diǎn)理解:通過閱讀理解下列部分內(nèi)容1.ABS的結(jié)構(gòu)原理;2.商用車中氣壓制動(dòng)系的作用、組成與工作原理;3.Heating,Venting和Air-conditioningSystem作用、組成與工作原理。應(yīng)用:能準(zhǔn)確翻譯部分原文重點(diǎn)段落、語句。(三)一般理解:了解EHB與EMB的組成及工作原理。Chapter5SteeringandSuspensionSystem一、學(xué)習(xí)目的與要求通過本章學(xué)習(xí),掌握汽車轉(zhuǎn)向、懸架系統(tǒng)的基本專業(yè)英語術(shù)語與詞匯;通過閱讀理解汽車轉(zhuǎn)向、懸架系統(tǒng)的作用、類型、組成部分及各部分的結(jié)構(gòu)、特點(diǎn)與工作原理;能準(zhǔn)確翻譯原文重點(diǎn)段落、語句。二、考核知識點(diǎn)與考核目標(biāo)(一)重點(diǎn)識記:下列專業(yè)術(shù)語與核心詞匯1.Basicpartsofsteeringsystem:Steeringwheel,Steeringshaft,Steeringcolumn,Steeringbox,Droparm,Draglink,Steeringknuckle,Steeringarm,Kingpin,Trackrod,Steeringlinkage,等相關(guān)術(shù)語、詞匯;2.RecirculationBallandRack-and-pinionSteeringGear等相關(guān)術(shù)語、詞匯;3.HPAS,EPAS(EPS),SBW,AFS等相關(guān)術(shù)語;4.FrontSuspension:Frontwheelalignment(Toe-in,Kingpinangle,Camber,Caster)等相關(guān)術(shù)語、詞匯;5.Spring(CoilSpring,LeafSpring,Torsionbar),Shockabsorber;6.Gas(Pneumatic)Suspension;7.InnertubeTire,TubelessTire。理解:通過閱讀理解下列部分內(nèi)容1.基本轉(zhuǎn)向系統(tǒng)的結(jié)構(gòu)組成及工作原理;2.RecirculationballandRack-and-pinion兩類轉(zhuǎn)向器的結(jié)構(gòu)與性能特點(diǎn);3.懸架的作用、組成及各前輪定位參數(shù)的定義;應(yīng)用:能準(zhǔn)確翻譯原文重點(diǎn)段落、語句,并能用英文簡單描述轉(zhuǎn)向系與懸架的作用、類型、組成部分及各部分的結(jié)構(gòu)、特點(diǎn)與工作原理。(二)次重點(diǎn)理解:通過閱讀理解下列部分內(nèi)容1.轉(zhuǎn)向系的設(shè)計(jì)要求(Requirements)、操縱特性(Handlingcharacteristics)及轉(zhuǎn)向幾何學(xué)(SteeringGeometry)相關(guān)內(nèi)容;2.液壓助力轉(zhuǎn)向系統(tǒng)(HPAS),電動(dòng)助力轉(zhuǎn)向系統(tǒng)(EPAS/EPS)的組成及工作原理;3.彈性元件(Spring)與減振器(Shockabsorber)的作用、結(jié)構(gòu)、特性及工作原理;4.車輪與輪胎(WheelandTire)的結(jié)構(gòu)組成。應(yīng)用:能準(zhǔn)確翻譯部分原文重點(diǎn)段落、語句。(三)一般理解:空氣懸架(Gassuspension)的組成、特性與工作原理;Chapter6ElectricalandElectronicSystem一、學(xué)習(xí)目的與要求通過本章學(xué)習(xí),掌握汽車電器與電子系統(tǒng)的基本專業(yè)英語術(shù)語與詞匯;對汽車電器組成部分及各部分的結(jié)構(gòu)、特點(diǎn)與工作原理有所了解。二、考核知識點(diǎn)與考核目標(biāo)(一)重點(diǎn)識記:下列專業(yè)術(shù)語與核心詞匯Lead-acidBattery,Chargingsystem(Alternator),Startingsystem(Starter),Ignitionsystem(Ignitionswitch,Ignitioncoil,Distributor,Sparkplug),Lightingsystem等術(shù)語與詞匯;理解:點(diǎn)火線圈式點(diǎn)火系(Coilignitionsystem)的結(jié)構(gòu)組成;(二)次重點(diǎn)理解:通過閱讀理解下列部分內(nèi)容1.Lead-acidBattery;2.Chargingsystem;3.Startingsystem;4Batteryignition;5Lightingsystem。應(yīng)用:能準(zhǔn)確翻譯部分原文重點(diǎn)段落、語句。(三)一般理解:了解下列相關(guān)內(nèi)容1.ElectronicDevice;2.Passengerinertialrestraintsystem;3.Anti-theftsystem;4.Automotivecontrollerareanetworkapplication;5.Automotivelocalinterconnectnetworkapplication。Chapter7HybridDrive一、學(xué)習(xí)目的與要求通過本章學(xué)習(xí),對混合動(dòng)力汽車相關(guān)內(nèi)容有所了解。二、考核知識點(diǎn)與考核目標(biāo)(一)重點(diǎn)識記:下列專業(yè)術(shù)語與核心詞匯HybridDrive,SeriesHybrid,ParallelHybrid,HybridElectricVehicle(HEV),Fuelcell等專業(yè)術(shù)語與詞匯;(二)次重點(diǎn)理解:通過閱讀對HybridDrive有所了解。(三)一般理解:了解下列相關(guān)內(nèi)容1.Electric-gasolineenginehybridpowertrainsystembyToyota;2.Hydrogenairfuelcellhybridvehicle.第三部分有關(guān)說明與實(shí)施要求一、考核的能力層次表述本大綱在考核目標(biāo)中,按照“識記”、“理解”、“應(yīng)用”三個(gè)能力層次規(guī)定其應(yīng)達(dá)到的能力層次要求。各能力層次為遞進(jìn)等級關(guān)系,后者必須建立在前者的基礎(chǔ)上,其含義是:識記:能知道有關(guān)的名詞、概念、知識的含義,并能正確認(rèn)識和表述,是低層次的要求。理解:在識記的基礎(chǔ)上,能全面把握基本概念、基本原理、基本方法,能掌握有關(guān)概念、原理、方法的區(qū)別與聯(lián)系,是較高層次的要求。應(yīng)用:在理解的基礎(chǔ)上,能運(yùn)用基本概念、基本原理、基本方法聯(lián)系學(xué)過的多個(gè)知識點(diǎn)分析和解決有關(guān)的理論問題和實(shí)際問題,是最高層次的要求。二、教材1、指定教材[1]李俊玲,羅永革主編.汽車工程專業(yè)英語.北京:機(jī)械工業(yè)出版社.2005,092、參考教材[1]李俊玲,羅永革主編.現(xiàn)代汽車專業(yè)英語.北京:北京理工大學(xué)出版社,2001[2]鄧賢貴,徐達(dá)主編.汽車專業(yè)英語.北京:人民交通出版社,1995,12[3]黃凱主編.科技英語結(jié)構(gòu)與翻譯模式.廣州:華南工學(xué)院出版社,1987,11[4]黃韶炯,欒志強(qiáng)主編.汽車專業(yè)英語.北京:人民交通出版社,2005,02三、自學(xué)方法指導(dǎo)1、在開始閱讀指定教材某一章之前,先翻閱大綱中有關(guān)這一章的考核知識點(diǎn)及對知識點(diǎn)的能力層次要求和考核目標(biāo),以便在閱讀教材時(shí)做到心中有數(shù),有的放矢。2、閱讀教材時(shí),要逐段細(xì)讀,逐句推敲,集中精力,吃透每一個(gè)知識點(diǎn),對基本概念必須深刻理解,對基本理論必須徹底弄清,對基本方法必須牢固掌握。3、在自學(xué)過程中,既要思考問題,也要做好閱讀筆記,把教材中的基本概念、原理、方法等加以整理,這可從中加深對問題的認(rèn)知、理解和記憶,以利于突出重點(diǎn),并涵蓋整個(gè)內(nèi)容,可以不斷提高自學(xué)能力。4、完成書后作業(yè)和適當(dāng)?shù)妮o導(dǎo)練習(xí)是理解、消化和鞏固所學(xué)知識,培養(yǎng)分析問題、解決問題及提高能力的重要環(huán)節(jié),在做練習(xí)之前,應(yīng)認(rèn)真閱讀教材,按考核目標(biāo)所要求的不同層次,掌握教材內(nèi)容,在練習(xí)過程中對所學(xué)知識進(jìn)行合理的回顧與發(fā)揮,注重理論聯(lián)系實(shí)際和具體問題具體分析,解題時(shí)應(yīng)注意培養(yǎng)邏輯性,針對問題圍繞相關(guān)知識點(diǎn)進(jìn)行層次(步驟)分明的論述或推導(dǎo),明確各層次(步驟)間的邏輯關(guān)系。四、對社會(huì)助學(xué)的要求1、應(yīng)熟知考試大綱對課程提出的總要求和各章的知識點(diǎn)。2、應(yīng)掌握各知識點(diǎn)要求達(dá)到的能力層次,并深刻理解對各知識點(diǎn)的考核目標(biāo)。3、輔導(dǎo)時(shí),應(yīng)以考試大綱為依據(jù),指定的教材為基礎(chǔ),不要隨意增刪內(nèi)容,以免與大綱脫節(jié)。4、輔導(dǎo)時(shí),應(yīng)對學(xué)習(xí)方法進(jìn)行指導(dǎo),宜提倡"認(rèn)真閱讀教材,刻苦鉆研教材,主動(dòng)爭取幫助,依靠自己學(xué)通"的方法。5、輔導(dǎo)時(shí),要注意突出重點(diǎn),對考生提出的問題,不要有問即答,要積極啟發(fā)引導(dǎo)。6、注意對應(yīng)考者能力的培養(yǎng),特別是自學(xué)能力的培養(yǎng),要引導(dǎo)考生逐步學(xué)會(huì)獨(dú)立學(xué)習(xí),在自學(xué)過程中善于提出問題,分析問題,做出判斷,解決問題。7、要使考生了解試題的難易與能力層次高低兩者不完全是一回事,在各個(gè)能力層次中會(huì)存在著不同難度的試題。8、助學(xué)學(xué)時(shí):本課程共3學(xué)分,建議總課時(shí)54學(xué)時(shí),其中助學(xué)課時(shí)分配如下:章次內(nèi)容學(xué)時(shí)Chapter1AutomotiveBasics2Chapter2InternalCombustionEngine20Chapter3PowerTrain10Chapter4BrakingSystemandBodyConstruction10Chapter5SteeringandSuspensionsystem8Chapter6Electricalandelectronicsystem3Chapter7HybridDrive1合計(jì)54五、關(guān)于命題考試的若干規(guī)定(包括能力層次比例、難易度比例、內(nèi)容程度比例、題型、考試方法和考試時(shí)間等)1、本大綱各章所提到的內(nèi)容和考核目標(biāo)都是考試內(nèi)容。試題覆蓋到章,適當(dāng)突出重點(diǎn)。2、試卷中對不同能力層次的試題比例大致是:"識記"為25%、"理解"為35%、"應(yīng)用"為40%。3、試題難易程度應(yīng)合理:易、較易、較難、難比例為2:3:3:2。4、每份試卷中,各類考核點(diǎn)所占比例約為:重點(diǎn)占65%,次重點(diǎn)占25%,一般占10%。5、試題類型一般分為:詞匯題、填空題,詞語翻譯題,完形填空,閱讀理解,英譯漢,漢譯英等。6、考試采用閉卷筆試,考試時(shí)間150分鐘,采用百分制評分,60分合格。六、題型示例(樣題)一、詞匯題。請根據(jù)英文單詞后的中文意思將單詞補(bǔ)充完整,每空填1個(gè)字母。1.sloon轎車2.igntionsystem點(diǎn)火系統(tǒng)二、填空題。(每空1分,共17分)1.Vehiclepartscanbedividedintofourmajorcategories.Theyare、、and。三、填空題。將以下列出的零部件詞匯填在圖中序號對應(yīng)的空格中。connectingrod、flywheel、crankshaft、piston1.3.2.4.四、詞語翻譯題。請根據(jù)給定的英文詞組,將對應(yīng)的中文專業(yè)術(shù)語填在相應(yīng)空格中。1.Commercialvehicle:2.BottomDeadCenter(BDC):五、完形填空題。請認(rèn)真閱讀短文,為空格處選擇正確的詞匯。……The1ofsteeringboxistheheartofthesteeringsystem.Mostheavycommercialvehiclesusethe2typeofsteeringgear.Thissteeringgearisdurable,withgoodsteeringresponseandgoodroadfeelforthedriver.……1.A.steeringwheelB.steeringcolumnC.steeringgearD.steeringlinkage2.A.rackandpinionB.recirculatingballC.wormandwormshaftD.camandroller……六、閱讀理解題。請認(rèn)真閱讀以下短文,結(jié)合短文內(nèi)容給文后的問答題選擇正確的答案。Energyisrequiredwhenavehicleisacceleratedfromresttoacertainspeed.Aproportionofthatenergyisnowstoredinthevehicleandiscalledkineticenergy.Inordertoreducethespeedofthevehicle,thebrakeshavetoconvertthekineticenergytoheatenergy;thespeedofconversiongovernstherateatwhichthevehicleslowsdown..……1.Inthefollowingsentences,whichoneisnottrueaboutthebrakingsystem?()A.thebrakeconvertsthekineticenergytoheatenergyB.thebrakecanstopthevehicleC.thebrakecanstorekineticenergyD.thebrakecangovernthedecelerationrateofvehicle……注:每篇閱讀一般有5個(gè)問題。七、英譯漢。請將以下英文短句翻譯為對應(yīng)的中文。1.Today’saveragecarcontainsmorethan15,000separate,individualpartsthatmustworktogether.Thesepartscanbegroupedintofourmajorcategories:engine,body,chassisandelectricalequipment.八、漢譯英。請將以下中文內(nèi)容翻譯為對應(yīng)的英文。1.缸體是發(fā)動(dòng)機(jī)的基體,其內(nèi)部有氣缸套、水套和油道。氣缸蓋安裝在缸體的頂部,之間裝有襯墊。大多數(shù)活塞由鋁鑄造而成。每個(gè)活塞一般有三個(gè)活塞環(huán),兩個(gè)氣環(huán)一個(gè)油環(huán)?;钊ㄟ^連桿帶動(dòng)曲軸旋轉(zhuǎn)。利用虛擬化平臺進(jìn)行內(nèi)存泄露探測摘要:本文利用虛擬機(jī)管理器,透明地記錄應(yīng)用程序?qū)Y源的申請、釋放以及使用情況,提供了探測內(nèi)存泄露的輔助信息。此機(jī)制首先不需要修改或重新編譯源程序;其次,帶來的性能損失很小。兩者結(jié)合可以構(gòu)建在線內(nèi)存泄露探測和匯報(bào)機(jī)制。不僅如此,基于虛擬環(huán)境的內(nèi)存泄露探測還具備通用性,且不需要特殊的硬件支持。所有這些特性,是已有的解決方案所不能兼有的。實(shí)驗(yàn)結(jié)果表明:基于虛擬機(jī)環(huán)境的內(nèi)存泄露探測機(jī)制具有實(shí)用性,性能損失也被控制在10%以內(nèi),能夠運(yùn)用在實(shí)際的生產(chǎn)環(huán)境中。關(guān)鍵詞:內(nèi)存泄露探測;虛擬機(jī);虛擬化平臺;虛擬機(jī)管理器

1、介紹 內(nèi)存泄露是指被申請的內(nèi)存資源在程序運(yùn)行的某一時(shí)刻后再也不被使用和釋放。如果被泄露的是虛擬內(nèi)存,則此程序本身能夠使用的虛擬內(nèi)存空間因此變少;如果被泄露的是物理內(nèi)存,則整個(gè)系統(tǒng)減少了能夠使用的物理地址。內(nèi)存泄露會(huì)使應(yīng)用程序申請動(dòng)態(tài)內(nèi)存失敗,導(dǎo)致服務(wù)中止;嚴(yán)重時(shí)會(huì)導(dǎo)致整個(gè)系統(tǒng)因資源耗竭而崩潰。對于運(yùn)行時(shí)間很短的程序,內(nèi)存泄露一般不是問題;但是對于長期運(yùn)行的程序,例如運(yùn)行在服務(wù)器上的服務(wù)和操作系統(tǒng)本身,內(nèi)存泄露會(huì)帶來嚴(yán)重的后果,可能會(huì)導(dǎo)致系統(tǒng)服務(wù)中止。一直以來,內(nèi)存泄露都是造成計(jì)算機(jī)安全事故的主要原因之一。 一些編程語言,如Java,通過垃圾回收等的方式,自身提供了內(nèi)存回收的機(jī)制。這種機(jī)制不但不能保證消除內(nèi)存泄露,而且還會(huì)帶來性能的損失。而另外執(zhí)行效率很高的一些編程語言,如C和C++,則將內(nèi)存分配和釋放的操作完全交付給程序員;在邏輯非常龐大的程序中,內(nèi)存泄露很難避免。因?yàn)閮?nèi)存泄露探測的重要性,先前已經(jīng)有很多這方面的工作。這些工作基本分為兩類:第一類是靜態(tài)檢查程序語義。這類方法認(rèn)為,正確的程序代碼,應(yīng)該符合預(yù)定的規(guī)則,例如,通過malloc函數(shù)申請的內(nèi)存,在接下來運(yùn)行的所有代碼分支都應(yīng)該有一個(gè)free函數(shù)。例如將代碼的路徑抽象為布爾限制路徑,對動(dòng)態(tài)內(nèi)存的指針加以跟蹤。對于大型的工程,這個(gè)方法比較耗時(shí),例如分析GNU/Linux的內(nèi)核代碼需要一個(gè)處理器一整天的時(shí)間[1]。也有將代碼抽象為一個(gè)變量流通圖的,圖的邊表示代碼分支[2]。這類方法直接對代碼進(jìn)行分析,實(shí)現(xiàn)復(fù)雜,目前還有一些難點(diǎn)尚未解決,例如循環(huán)的處理[1]。另一類是運(yùn)行時(shí)動(dòng)態(tài)檢測法。即在程序運(yùn)行時(shí)記錄程序動(dòng)態(tài)分配的內(nèi)存資源和釋放信息,然后分析是否存在內(nèi)存泄露。例如Purify[3]和SafeMem[4],都屬于這一類。動(dòng)態(tài)檢測法受限于測試程序,因?yàn)闇y試程序所覆蓋的代碼非常有限,無法激發(fā)出所有潛在的問題。 本文通過虛擬機(jī)管理器(VirtualMachineMonitor,VMM)平臺,在其上虛擬機(jī)(VirtualMachine,GuestOS,VM)運(yùn)行時(shí),動(dòng)態(tài)截獲虛擬機(jī)中申請和釋放內(nèi)存的函數(shù),并記錄下來,用于輔助甄別內(nèi)存泄露,是基于第二類方法的。通過內(nèi)存虛擬化技術(shù)的協(xié)助,我們可以監(jiān)控應(yīng)用程序?qū)@些內(nèi)存資源的應(yīng)用情況。然后,應(yīng)用一些規(guī)則,找出內(nèi)存泄露的嫌疑。例如長時(shí)間未被釋放、且沒有被訪問的內(nèi)存可能是內(nèi)存泄露。這種方法相對現(xiàn)有的方法有以下優(yōu)點(diǎn): 首先,既不需要修改被探測程序的源代碼,也不需要重新編譯,為被測試代碼提供了透明性。Purify和SafeMem,前者通過編譯插入指令以獲取應(yīng)用程序訪問內(nèi)存的所有行為,然后這些行為被用于判斷內(nèi)存泄露和內(nèi)存訪問地址越界等問題。SafeMem則需要重新封裝資源申請和釋放函數(shù),甚至需要給操作系統(tǒng)添加新的系統(tǒng)調(diào)用,這些需求一定程度上不利于它們的應(yīng)用。其次,如果探測內(nèi)存泄露方法給應(yīng)用程序帶來很多性能損失或者占用很大額外資源的話,其應(yīng)用只能僅限于程序調(diào)試階段,其可發(fā)現(xiàn)的內(nèi)存泄露受限于測試用例。Purify雖然能夠捕捉到程序中大量的內(nèi)存訪問問題,但是,因?yàn)樾枰孬@應(yīng)用程序所有的內(nèi)存操作,Purify導(dǎo)致應(yīng)用程序的性能損失很大,通常應(yīng)用程序的性能降低達(dá)到2到3倍,或者更多[3]。性能的降低限制了其使用范圍,而且加重了其對測試程序的依賴。本文中的內(nèi)存泄露探測機(jī)制基于虛擬機(jī)的實(shí)現(xiàn),性能損失經(jīng)過測試,少于10%,能夠在真實(shí)服務(wù)中使用。這同時(shí)帶來的另外一個(gè)優(yōu)點(diǎn)在于,在真實(shí)使用中,代碼的執(zhí)行覆蓋范圍更廣,能夠發(fā)現(xiàn)潛在的內(nèi)存泄露。 另外,本論文不但適用于用戶態(tài)的應(yīng)用程序,而且還適用于操作系統(tǒng)內(nèi)核。存在于內(nèi)核中的內(nèi)存泄露,比應(yīng)用程序中的內(nèi)存泄露帶來的危害更大,而且調(diào)試更困難。盡管有很多工具用于測試用戶態(tài)程序的內(nèi)存泄露,但是調(diào)試內(nèi)核代碼的工具仍舊比較缺乏。PinOS[5]在虛擬機(jī)管理器之上,通過軟件動(dòng)態(tài)翻譯的方法,提供了調(diào)試操作系統(tǒng)內(nèi)核代碼的機(jī)制。然而,軟件動(dòng)態(tài)翻譯使得其性能下降很大,大多數(shù)情況下降低到50到60倍,這限制了其使用環(huán)境,難以在真實(shí)環(huán)境中使用。而且,其運(yùn)行時(shí)需要插入部分代碼到虛擬機(jī)的內(nèi)核地址空間,因此占用操作系統(tǒng)的一部分地址空間,這破壞了透明性。本文基于虛擬機(jī)管理器的實(shí)現(xiàn)也提供了平臺通用性,其既適用于GNU/Linux操作系統(tǒng),也適用于Windows操作系統(tǒng)。對操作系統(tǒng)的版本也不做要求,只要其代碼體系符合IntelX86的指令規(guī)范。而SafeMem雖然性能降低很小,但是需要給操作系統(tǒng)添加新的系統(tǒng)調(diào)用接口和系統(tǒng)調(diào)用處理函數(shù),因此欠缺了平臺的通用性。最后,本論文的機(jī)制不需要特殊硬件的支持,而SafeMem是基于ECC控制器實(shí)現(xiàn)的。 在接下來的章節(jié)中,首先總體介紹利用虛擬化平臺進(jìn)行內(nèi)存探測的機(jī)制;其次詳細(xì)介紹對運(yùn)行在虛擬機(jī)中的應(yīng)用程序申請和釋放內(nèi)存資源的捕獲和記錄,然后分析應(yīng)用程序所申請的內(nèi)存資源,推選出存在內(nèi)存泄露的嫌疑進(jìn)行監(jiān)控。在實(shí)驗(yàn)章節(jié)中,本文描述了基于虛擬平臺進(jìn)行內(nèi)存泄露探測的有效性和性能代價(jià)。最后是結(jié)論和下一步工作。2、實(shí)現(xiàn)原理 內(nèi)存泄露是指已經(jīng)被申請的內(nèi)存資源沒有被合理地釋放,而導(dǎo)致這部分資源不能被系統(tǒng)重新利用的一種現(xiàn)象。內(nèi)存泄露廣泛存在或者隱藏于程序之中,被泄漏的內(nèi)存資源不能被重新利用且不再被訪問。對于應(yīng)用程序,內(nèi)存泄露會(huì)使得應(yīng)用程序的虛擬內(nèi)存空間耗竭,導(dǎo)致任務(wù)的中斷和失敗。對于操作系統(tǒng),內(nèi)存泄露不僅會(huì)減少可用的內(nèi)核虛擬空間,而且還會(huì)不斷蠶食整個(gè)系統(tǒng)可用的物理內(nèi)存頁面,導(dǎo)致整機(jī)不得不重起。 內(nèi)存申請和釋放的接口具有統(tǒng)一、簡單的特色,例如Windows提供的動(dòng)態(tài)內(nèi)存管理接口GlobalAlloc和GlobalFree、Posix規(guī)定的malloc和free接口、Linux內(nèi)核的vmalloc和vfree以及get_page和put_page等接口。某些應(yīng)用程序?qū)崿F(xiàn)了自身的內(nèi)存管理,但是其接口也是比較統(tǒng)一的。這些接口不但統(tǒng)一簡單,其數(shù)量也非常有限。正常情況下,通過某個(gè)申請函數(shù)獲得資源需要通過對應(yīng)的釋放函數(shù)來釋放。本文利用這一點(diǎn),在虛擬化平臺中透明地截取了資源申請和釋放的接口,維護(hù)一個(gè)動(dòng)態(tài)資源使用列表,詳盡和全面地掌握被監(jiān)控對象使用內(nèi)存資源的情況。 如果有內(nèi)存泄露存在的話,這個(gè)列表理論上包含了所有被泄漏的內(nèi)存,但又不僅限于被泄漏的內(nèi)存,因?yàn)楸惶摂M機(jī)正確使用的動(dòng)態(tài)內(nèi)存資源也包含在這個(gè)列表中。接下來的工作是從這個(gè)列表中選擇出最有可能是內(nèi)存泄露的項(xiàng)。選擇的主導(dǎo)思想一是某個(gè)地址持續(xù)地分配長時(shí)間不被釋放的內(nèi)存;二是被占用但長時(shí)間未被訪問的內(nèi)存。前者可以從記錄獲取,實(shí)現(xiàn)后者需要分兩步:首先確定被監(jiān)控的對象,然后通過內(nèi)存虛擬化技術(shù)進(jìn)行監(jiān)控。 在接下來的幾個(gè)小節(jié)中,詳細(xì)介紹每個(gè)步驟的設(shè)計(jì)原理和方案。2.1截獲資源申請和釋放 Purify和SafeMem等實(shí)現(xiàn)方案通過修改源代碼或者修改編譯器的方式,來截取資源申請和釋放;而通過虛擬化平臺可以更簡單更透明地實(shí)現(xiàn)這個(gè)功能。我們以malloc和free為例來說明,下面列出了一小段常見的代碼。 void*PTR=malloc(LEN); if(PTR==NULL)err(“Outofmemory.”); /*utilizingthememorystartingatPTRofsizeLEN*/ if(PTR)free(PTR); 這段C語言代碼首先通過malloc函數(shù)申請長度為LEN個(gè)字節(jié)的動(dòng)態(tài)內(nèi)存,然后判斷是否申請成功。如果成功,則使用這些內(nèi)存資源進(jìn)行計(jì)算。最后,當(dāng)不再需要PTR所指的資源時(shí),通過free函數(shù)釋放這些內(nèi)存。在這個(gè)場景中,我們不僅需要截獲malloc函數(shù)的調(diào)用,獲取其參數(shù)和返回結(jié)果,而且也需要截獲free函數(shù)的調(diào)用,獲取其參數(shù),也即被釋放的動(dòng)態(tài)資源。換句話說,應(yīng)用程序當(dāng)前正在使用的動(dòng)態(tài)內(nèi)存信息,包括其起始地址、長度、時(shí)間和調(diào)用IP地址都需要在虛擬機(jī)管理器中維護(hù)。 在虛擬化平臺中,可以通過替換指令的方式,透明地截獲申請函數(shù)和釋放函數(shù)。為了實(shí)現(xiàn)透明的結(jié)果,首先分析一下上面C語言程序在Linux操作系統(tǒng)之上對應(yīng)的匯編代碼:8048426:890424 mov%eax,(%esp)8048429:e8defeffff call804830c<malloc@plt>804842e:8945fc mov%eax,0xfffffffc(%ebp)8048431:837dfc00 cmpl$0x0,0xfffffffc(%ebp)8048435:7518 jne804844f<main+0x4f>8048437:c7042454850408 movl$0x8048554,(%esp)804843e:e8e9feffff call804832c<printf@plt>8048443:c7042401000000 movl$0x1,(%esp)804844a:e8edfeffff call804833c<exit@plt>804844f:837dfc00 cmpl$0x0,0xfffffffc(%ebp)8048453:740b je8048460<main+0x60>8048455:8b45fc mov0xfffffffc(%ebp),%eax8048458:890424 mov%eax,(%esp)804845b:e8ecfeffff call804834c<free@plt> 可以看到,在地址為0x8048426的地方,變量LEN中保存的數(shù)值被壓到棧上,接下來的一條指令調(diào)用了malloc函數(shù),程序的運(yùn)行跳轉(zhuǎn)到malloc函數(shù)所在的地址0x804830c。在malloc函數(shù)返回后,程序在地址0x804842e處繼續(xù)執(zhí)行。如果malloc函數(shù)申請資源成功,程序最終會(huì)在地址0x804845b處調(diào)用free函數(shù),釋放這段內(nèi)存空間。 內(nèi)存資源申請函數(shù)和釋放函數(shù),例如malloc和free,作為系統(tǒng)的調(diào)用接口,其在內(nèi)存中的地址很容易捕獲得到,在上面的示例程序中,malloc和free的地址分別為0x804830c和0x804834c。獲得內(nèi)存申請函數(shù)和釋放函數(shù)的地址之后,截獲其執(zhí)行需要如下幾個(gè)步驟:(1)在函數(shù)地址處(例如0x804830c處)插入能夠使得虛擬機(jī)無條件陷入到虛擬機(jī)管理器的指令。例如非法指令,在Intel的VT平臺中可以插入VMCALL指令。我們把這種指令稱為陷入指令,原位置被替換的指令稱為被替換指令,把被植入陷入指令的函數(shù)稱為受監(jiān)控函數(shù)。(2)運(yùn)行在虛擬機(jī)中的應(yīng)用程序調(diào)用受監(jiān)控函數(shù)(例如malloc)之后,虛擬機(jī)馬上陷入虛擬機(jī)管理器。(3)在虛擬機(jī)管理器中,分析受監(jiān)控函數(shù)的類別,分析其參數(shù),獲取函數(shù)調(diào)用棧,更新應(yīng)用程序占用內(nèi)存資源的信息。如果是資源申請函數(shù)則增加內(nèi)存占用信息,而資源釋放函數(shù)則需要?jiǎng)h除相應(yīng)的內(nèi)存信息。例如,如果陷入的函數(shù)是malloc,其只有一個(gè)參數(shù)表明申請內(nèi)存的長度,我們可以在當(dāng)前應(yīng)用程序的堆棧上獲得。如果陷入的是free函數(shù),其參數(shù)表明需要釋放的內(nèi)存。這里獲取函數(shù)調(diào)用棧的目的是為了程序員調(diào)試的方便。(4)在虛擬機(jī)管理器中模擬執(zhí)行被替換指令。之所以不恢復(fù)被替換指令的原因是,為了保證能監(jiān)控到應(yīng)用程序并發(fā)調(diào)用該受監(jiān)控函數(shù),例如多線程程序中多個(gè)線程有可能同時(shí)通過調(diào)用malloc函數(shù)申請內(nèi)存資源。(5)如果該受監(jiān)控函數(shù)在申請資源,在陷入指令的下一條指令處(在上述例子中,地址0x804842e處),需要插入陷入指令,以便讓我們獲悉函數(shù)調(diào)用結(jié)束,分析申請結(jié)果。(6)虛擬機(jī)管理器命令虛擬機(jī)繼續(xù)執(zhí)行,虛擬機(jī)會(huì)執(zhí)行受監(jiān)控函數(shù)的其它代碼,執(zhí)行結(jié)束后,返回到調(diào)用處,上例中監(jiān)控malloc的第一次調(diào)用,則是地址0x804842e處。(7)返回處陷入,因?yàn)椴襟E5已經(jīng)將一個(gè)陷入指令插入到返回處;在虛擬機(jī)管理器中,分析受監(jiān)控函數(shù)返回的結(jié)果。對于malloc函數(shù),其返回結(jié)果是所申請到內(nèi)存資源的地址,如果申請失敗,則返回值是NULL。 通過以上方法獲取應(yīng)用程序的動(dòng)態(tài)內(nèi)存資源使用情況之后,我們即時(shí)地維護(hù)應(yīng)用程序申請動(dòng)態(tài)內(nèi)存的列表。如果應(yīng)用程序中存在內(nèi)存泄露的話,被泄露的內(nèi)存必然在我們所維護(hù)的表中。從動(dòng)態(tài)內(nèi)存列表中精確找出被泄露的內(nèi)存項(xiàng)是一個(gè)難點(diǎn);然而,我們可以先找到疑似泄露的動(dòng)態(tài)內(nèi)存項(xiàng),然后將信息(函數(shù)調(diào)用棧,調(diào)用地址和申請資源大小等)交由程序員處理。本論文的目標(biāo)是,找到內(nèi)存泄露的嫌疑項(xiàng),并提高準(zhǔn)確率。除此之外,通過本文的方法,還可捕捉到程序中多次釋放資源的錯(cuò)誤操作,例如將一段動(dòng)態(tài)內(nèi)存調(diào)用free釋放后,又再次調(diào)用free釋放,根據(jù)free接口的規(guī)范,其結(jié)果是不可預(yù)料的,也會(huì)對程序的正常運(yùn)行帶來隱患。 本小節(jié)闡述了截獲內(nèi)存申請和釋放的機(jī)制,接下來的兩個(gè)小節(jié)中,將著重介紹推選內(nèi)存泄露嫌疑項(xiàng)的規(guī)則和步驟,以及提高推選準(zhǔn)確率的一些策略和方法。2.2判斷內(nèi)存泄露的規(guī)則 2.1節(jié)中介紹了截獲應(yīng)用程序申請和釋放動(dòng)態(tài)內(nèi)存的機(jī)制。這個(gè)機(jī)制能夠使得虛擬機(jī)管理器維護(hù)應(yīng)用程序當(dāng)前使用的全部動(dòng)態(tài)內(nèi)存信息,這些信息包括受監(jiān)控函數(shù)的調(diào)用IP地址、動(dòng)態(tài)內(nèi)存申請函數(shù)的種類、所申請動(dòng)態(tài)內(nèi)存的地址和大小以及申請時(shí)間等。如果應(yīng)用程序存在內(nèi)存泄露的話,那么被泄露的內(nèi)存就隱藏在我們維護(hù)的列表中。我們判斷是否是內(nèi)存泄露的嫌疑基于如下幾條規(guī)則:(1)在應(yīng)用程序運(yùn)行的過程中,長時(shí)間未被應(yīng)用程序訪問的動(dòng)態(tài)內(nèi)存;這里的運(yùn)行是指應(yīng)用程序?qū)嶋H占用處理器的狀態(tài),不包括程序阻塞等待的狀態(tài)。(2)在應(yīng)用程序的某一地址持續(xù)申請動(dòng)態(tài)內(nèi)存且部分不釋放,導(dǎo)致應(yīng)用程序占用的動(dòng)態(tài)內(nèi)存隨著運(yùn)行時(shí)間的延續(xù)越來越多;(3)在應(yīng)用程序退出時(shí),未被釋放的內(nèi)存段。規(guī)則1基于被泄漏內(nèi)存的最基本的特征:應(yīng)用程序在語義層面上,丟棄了內(nèi)存段并不再訪問該內(nèi)存段。規(guī)則1需要虛擬機(jī)管理器對應(yīng)用程序的內(nèi)存的訪問情況進(jìn)行監(jiān)控。這種監(jiān)控行為是需要虛擬機(jī)管理器付出性能代價(jià)的,因?yàn)樵诒O(jiān)控中,會(huì)導(dǎo)致虛擬機(jī)管理器對虛擬機(jī)正常運(yùn)行添加額外的干預(yù)和陷入,我們在下一小節(jié)中會(huì)詳細(xì)描述監(jiān)控的步驟。監(jiān)控應(yīng)用程序所申請的所有內(nèi)存資源的訪問是不太實(shí)際的,因?yàn)檫@有可能引起大量的虛擬機(jī)陷入,嚴(yán)重影響虛擬機(jī)管理器的整體性能。為了克服這一點(diǎn),從而減少虛擬機(jī)管理器性能的損失,應(yīng)當(dāng)降低被監(jiān)控內(nèi)存片斷的數(shù)目。在本文的設(shè)計(jì)中,監(jiān)控機(jī)制和監(jiān)控策略是分開的。我們在虛擬機(jī)管理器中添加了監(jiān)控機(jī)制,而決定誰被監(jiān)控、誰不被監(jiān)控、被監(jiān)控內(nèi)存片斷的數(shù)目等策略性決定則在高層動(dòng)態(tài)設(shè)定。監(jiān)控策略會(huì)根據(jù)動(dòng)態(tài)內(nèi)存的監(jiān)控歷史、分配時(shí)間和虛擬機(jī)的性能反饋等因素進(jìn)行判斷。規(guī)則2是基于統(tǒng)計(jì)的,不需要監(jiān)控動(dòng)態(tài)內(nèi)存的被訪問情況,因此開銷比規(guī)則1少,但是準(zhǔn)確性比規(guī)則1差。此規(guī)則基于這樣的觀察,內(nèi)存泄露的點(diǎn)具有重復(fù)性,在某一IP點(diǎn)上如果發(fā)生過內(nèi)存泄露,那么在此點(diǎn)上還會(huì)發(fā)生內(nèi)存泄露。規(guī)則3基于對良好編程原則的考慮:程序應(yīng)該在退出時(shí),已經(jīng)優(yōu)雅地釋放掉所有申請的資源,而不是將這些清理工作托付給操作系統(tǒng)??傊?,我們根據(jù)應(yīng)用程序?qū)ζ渌暾埖馁Y源使用情況的統(tǒng)計(jì),來推測是否有內(nèi)存泄露發(fā)生。規(guī)則1基于如下考慮:因?yàn)楸恍孤兜膬?nèi)存的特征之一是不再被應(yīng)用程序訪問,所以最好的嫌疑者是那些在應(yīng)用程序的運(yùn)行中,長時(shí)間沒有被訪問的動(dòng)態(tài)內(nèi)存。規(guī)則2基于如下考慮:程序的執(zhí)行線隨著上下文的不同而不同,在某個(gè)執(zhí)行線上程序員可能會(huì)忘記釋放資源。如果程序不斷經(jīng)過這個(gè)忘記釋放資源的執(zhí)行線,則會(huì)不斷產(chǎn)生內(nèi)存泄露。規(guī)則3基于編程習(xí)慣。2.3監(jiān)控內(nèi)存 本小節(jié)主要描述在虛擬機(jī)管理器中,實(shí)現(xiàn)對應(yīng)用程序所申請動(dòng)態(tài)內(nèi)存的訪問進(jìn)行監(jiān)控的機(jī)制。根據(jù)判斷內(nèi)存泄露的規(guī)則1,在程序運(yùn)行期間長時(shí)間未被有效利用的動(dòng)態(tài)內(nèi)存資源,可能是被泄漏的內(nèi)存。為了了解動(dòng)態(tài)內(nèi)存資源被利用的情況,需要對該動(dòng)態(tài)內(nèi)存資源進(jìn)行訪問監(jiān)控。監(jiān)控的基本思想是,在應(yīng)用程序訪問被監(jiān)控的動(dòng)態(tài)內(nèi)存時(shí),虛擬機(jī)管理器能夠獲悉這一訪問行為。Safemem利用了硬件ECC實(shí)現(xiàn)了監(jiān)控,而虛擬機(jī)管理器不需要額外的硬件支持,通過內(nèi)存虛擬化即可實(shí)現(xiàn)監(jiān)控。本小節(jié)內(nèi)容首先著重描述基于影子頁表的內(nèi)存虛擬化方法,其次描述在內(nèi)存虛擬化方法中實(shí)現(xiàn)內(nèi)存監(jiān)控的原理和方法,最后分析在虛擬機(jī)管理器中內(nèi)存監(jiān)控的有效性。2.3.1內(nèi)存虛擬化方法虛擬機(jī)與傳統(tǒng)計(jì)算機(jī)相比,其內(nèi)存系統(tǒng)多了一種地址,共包括以下三種地址:機(jī)器地址(HostPhysicalAddress,HPA):指真實(shí)硬件的機(jī)器地址,即地址總線上應(yīng)該出現(xiàn)的地址信號;物理地址(GuestPhysicalAddress,GPA):指經(jīng)過VMM抽象的、虛擬機(jī)所看到的偽物理地址;虛擬地址(GuestVirtualAddress,GVA):指GuestOS提供給其應(yīng)用程序使用的線性地址空間。顯然,VMM的內(nèi)存模塊負(fù)責(zé)完成物理地址到機(jī)器地址的映射,我們將這個(gè)映射記為f;同時(shí),GuestOS的內(nèi)存管理模塊要完成虛擬地址到物理地址的映射,我們將這個(gè)映射記為g。于是,虛擬地址、物理地址和真實(shí)地址之間的關(guān)系如圖1所示。圖1機(jī)器地址,物理地址和虛擬地址在沒有硬件內(nèi)存虛擬化支持的情況下,KVM實(shí)現(xiàn)內(nèi)存虛擬化的方法是影子頁表技術(shù)[6][7]。影子頁表技術(shù)為GuestOS的每個(gè)頁表維護(hù)一個(gè)“影子頁表”,并將合成后的映射關(guān)系寫入到“影子”中,GuestOS的頁表內(nèi)容則保持不變。最后,VMM將影子頁表交給內(nèi)存管理模塊(MemoryManagementUnit,MMU)進(jìn)行地址轉(zhuǎn)換。試舉一例說明:假設(shè)一個(gè)運(yùn)行在GuestOS中的進(jìn)程,當(dāng)其訪問0x12345678這個(gè)虛擬地址時(shí),因?yàn)樵谟白禹摫碇猩形礊槠浣㈨摫眄?xiàng),所以會(huì)產(chǎn)生缺頁異常,使得GuestOS陷入到虛擬機(jī)管理器中。虛擬機(jī)管理器首先查看GuestOS的頁表中是否存在有效的映射g。如果不存在,則將異常交付給GuestOS處理。如果存在,虛擬機(jī)管理器在影子頁表項(xiàng)中直接建立映射f?g,從虛擬地址頁0x12345000轉(zhuǎn)換為物理頁的地址。當(dāng)此影子頁表項(xiàng)被清除時(shí),虛擬機(jī)管理器再負(fù)責(zé)將影子頁表項(xiàng)中的Dirty位和Access位同步到GuestOS的頁表中去。2.3.2內(nèi)存監(jiān)控的原理和方法 內(nèi)存監(jiān)控的一個(gè)選擇是通過管理虛擬機(jī)的影子頁表實(shí)現(xiàn)。在虛擬機(jī)運(yùn)行時(shí),內(nèi)存管理模塊載入影子頁表,試圖完成從GVA到HPA的映射。如果影子頁表中已經(jīng)存在某個(gè)GVA到其HPA的映射,那么這個(gè)轉(zhuǎn)換過程會(huì)自動(dòng)完成;否則,虛擬機(jī)會(huì)陷入到虛擬機(jī)管理器中,由后者完善GVA到HPA的映射?;谟白禹摫淼倪@種特征,通過如下步驟即可完成對內(nèi)存的監(jiān)控。圖2內(nèi)存監(jiān)控原理 首先,計(jì)算出內(nèi)存片斷所跨越的所有頁面,例如在頁面大小為4K的虛擬機(jī)中,首地址為0x80a8400,長度為10KB的內(nèi)存片斷,跨越了3個(gè)頁面:其中占第一個(gè)和第三個(gè)頁面的部分,完全占用第二個(gè)頁面(如圖2a所示)。接著,在影子頁表中消除對這些頁面的GVA到HPA的映射關(guān)系。因?yàn)檫@些頁面的映射關(guān)系被消除,那么只要虛擬機(jī)試圖訪問該內(nèi)存片斷,都會(huì)導(dǎo)致虛擬機(jī)的陷入(如圖2b所示)。最后,在虛擬機(jī)陷入時(shí),分析陷入指令所訪問的內(nèi)存地址是否屬于該內(nèi)存片斷。 通過內(nèi)存虛擬化機(jī)制實(shí)現(xiàn)的內(nèi)存監(jiān)控,是基于頁面級,即所監(jiān)控的最小內(nèi)存單位是內(nèi)存頁。內(nèi)存頁通常大小是4K,也有其它大小,例如2M和4M。在進(jìn)行監(jiān)控時(shí),虛擬機(jī)對頁面范圍內(nèi)的所有內(nèi)存地址訪問都會(huì)導(dǎo)致陷入,因此,監(jiān)控的單位大小越小越好。 基于硬件ECC的監(jiān)控是更細(xì)粒度的監(jiān)控機(jī)制,被SafeMem所采用。如果虛擬機(jī)管理器存在ECC的支持,也能夠?qū)崿F(xiàn)cacheline大小粒度的監(jiān)控,SafeMem所使用的方法同樣適用于虛擬機(jī)管理器。 這種內(nèi)存監(jiān)控的原理,也適用于其它內(nèi)存虛擬化方法,例如直接頁表訪問。即使是硬件輔助內(nèi)存虛擬化技術(shù),例如EPT(ExtendedPageTables)[8]或者NPT(NestedPageTables)[9],在其上實(shí)現(xiàn)內(nèi)存監(jiān)控。核心思想是通用的,即從虛擬機(jī)管理器中,消除虛擬機(jī)從GVA到HPA的內(nèi)存地址映射關(guān)系。2.3.3虛擬機(jī)管理器監(jiān)控內(nèi)存的有效性分析 虛擬機(jī)管理器監(jiān)控內(nèi)存引入的性能開銷主要源于截獲資源申請和釋放的函數(shù)和影子頁表導(dǎo)致的虛擬機(jī)陷入。每次陷入的開銷公式如下:COST[陷入]=COST[VM切換到VMM]+COST[分析+模擬指令]+COST[VMM切換到VM]+COST[Cache]+COST[TLB] 虛擬機(jī)和虛擬機(jī)管理器之間的切換會(huì)引入很大的性能開銷。首先,切換本身會(huì)耗費(fèi)很多的處理器周期,因?yàn)樵谇袚Q過程中,處理器不僅需要保存原狀態(tài),而且需要載入新狀態(tài)。其次,這種切換還會(huì)導(dǎo)致額外的Cache失效,因?yàn)樘摂M機(jī)管理器和虛擬機(jī)共享Cache且代碼和數(shù)據(jù)并不相同。最后,TLB(TranslateLookasideBuffer)[8]被刷新的開銷。TLB緩存著虛擬地址到物理地址的映射,避免了MMU在地址映射時(shí)對存放在內(nèi)存中的頁表的重復(fù)遍歷訪問。因?yàn)樘摂M機(jī)管理器和虛擬機(jī)使用不同的頁表,所以每次切換都會(huì)導(dǎo)致TLB的刷新操作,這個(gè)開銷是非常大的。然而,隨著硬件的不斷發(fā)展,新的技術(shù)例如VPID(VirtualProcessID)[8],能夠避免或減少在虛擬機(jī)管理器和虛擬機(jī)之間切換時(shí)TLB的刷新,從而降低TLB刷新的開銷。 截獲資源申請和釋放的函數(shù)的開銷和這些函數(shù)調(diào)用點(diǎn)的次數(shù)成正比。性能的主要開銷在于對內(nèi)存使用進(jìn)行監(jiān)控。虛擬機(jī)管理器監(jiān)控動(dòng)態(tài)內(nèi)存的訪問情況,會(huì)導(dǎo)致額外的附帶開銷。為了監(jiān)控占用部分內(nèi)存頁面的動(dòng)態(tài)內(nèi)存,需要監(jiān)控整個(gè)頁面被訪問情況。如果該頁面中,動(dòng)態(tài)內(nèi)存片斷之外當(dāng)前被虛擬機(jī)監(jiān)控器頻繁使用,也即非常熱的頁面,則對該頁面的監(jiān)控因?yàn)轭l繁的陷入會(huì)導(dǎo)致虛擬機(jī)性能的急劇下降。在制定監(jiān)控策略時(shí),應(yīng)當(dāng)避免監(jiān)控這種頁面。 在實(shí)際應(yīng)用程序運(yùn)行時(shí),例如malloc等動(dòng)態(tài)內(nèi)存申請方法所申請的動(dòng)態(tài)內(nèi)存一般處在應(yīng)用程序的堆棧上,該動(dòng)態(tài)內(nèi)存地址的前后內(nèi)存很有可能也屬于動(dòng)態(tài)內(nèi)存,因此,對一個(gè)動(dòng)態(tài)內(nèi)存的監(jiān)控,有可能會(huì)附帶監(jiān)控其它多個(gè)動(dòng)態(tài)內(nèi)存,這個(gè)特性對我們監(jiān)控內(nèi)存的訪問是有好處的,因?yàn)橥瑯拥男阅軗p失,完成了對多個(gè)動(dòng)態(tài)內(nèi)存的監(jiān)控。 為了提高虛擬機(jī)管理器監(jiān)控內(nèi)存的效率,除了避免對熱頁面的監(jiān)控,還應(yīng)當(dāng)減小監(jiān)控粒度。對于頁面級的監(jiān)控,4K大小的頁面要優(yōu)于2M大小的頁面,因?yàn)樘摂M機(jī)對前者的訪問次數(shù)一般要少于對后者的訪問次數(shù)。如果硬件提供更細(xì)粒度的機(jī)制,應(yīng)當(dāng)優(yōu)先使用硬件提供的機(jī)制。3、在KVM平臺上的實(shí)現(xiàn) 我們在KMV-84虛擬機(jī)管理器之上實(shí)現(xiàn)了內(nèi)存泄露的探測。KVM是基于GNU/Linux實(shí)現(xiàn)的虛擬機(jī)管理器,以模塊的形式運(yùn)行在操作系統(tǒng)中。虛擬機(jī)表現(xiàn)為操作系統(tǒng)中的一個(gè)QEMU/qemu/進(jìn)程,該進(jìn)程通過和KVM模塊的交互,實(shí)現(xiàn)了處理器虛擬化、內(nèi)存虛擬化以及部分硬件的虛擬化;其它硬件設(shè)備如網(wǎng)卡和外存的虛擬化,由QEMU實(shí)現(xiàn)。因?yàn)镵VM是操作系統(tǒng)內(nèi)部的一個(gè)模塊,所以其調(diào)試和運(yùn)行非常方便,通過模塊的動(dòng)態(tài)加載和卸除即可實(shí)現(xiàn)更新,這點(diǎn)是Xen[10]無法提供的,在其上每次修改都需要重啟/qemu/ 本實(shí)驗(yàn)中,虛擬機(jī)使用的操作系統(tǒng)是比較主流的Redhat4.1.1-52版本。接下來討論實(shí)現(xiàn)中的各個(gè)細(xì)節(jié)問題。 申請和釋放函數(shù)地址的獲取。存在于用戶地址空間的函數(shù)例如malloc和free函數(shù),通過調(diào)試程序例如GDB即可獲取其地址。將應(yīng)用程序的可執(zhí)行代碼進(jìn)行反匯編,也很容易察看到這些函數(shù)的地址。例如在2.3.2小節(jié)中,截獲malloc的調(diào)用,只需要在地址0x804830c處插入VMCALL代碼即可。內(nèi)核函數(shù)如vmalloc和vfree等的地址,可在GNU/Linux的sysmap中獲取。 通過VMCALL可以將資源申請和釋放的函數(shù)地址傳遞到虛擬機(jī)管理器中。這些地址是有限的、靜態(tài)的。而對這些函數(shù)的調(diào)用點(diǎn)是在虛擬機(jī)運(yùn)行過程中動(dòng)態(tài)發(fā)現(xiàn)的,我們需要截獲的調(diào)用返回點(diǎn)因此也是動(dòng)態(tài)的。因?yàn)閷@些地址(申請和釋放資源的函數(shù)地址、函數(shù)調(diào)用返回點(diǎn))的查找操作非常頻繁,所以我們將這些地址以及陷入點(diǎn)類型等信息存放在快速查找樹中,以提高查找效率。 對資源函數(shù)調(diào)用和返回的截獲。在函數(shù)的首地址和返回處插入VMCALL指令之后,虛擬機(jī)會(huì)在這些地址陷入到虛擬機(jī)管理器中。陷入原因是VMCALL。我們在處理VMCALL時(shí),判斷陷入地址是否在快速查找樹中,如果在,則查明陷入點(diǎn)的類型。有三種類型:資源申請函數(shù)陷入、資源釋放函數(shù)陷入和返回點(diǎn)陷入。如果陷入點(diǎn)是資源申請函數(shù),則需要分析并記錄其參數(shù),另外在返回點(diǎn)處插入VMCALL。如果陷入點(diǎn)是返回點(diǎn),則需要分析函數(shù)返回結(jié)果。函數(shù)的返回結(jié)果一般存在堆棧上或者寄存器中,不同類型的函數(shù)是不一樣的,需要區(qū)分對待。如果申請成功,需要記錄動(dòng)態(tài)內(nèi)存的信息:首地址、大小、時(shí)間和類型等。如果陷入點(diǎn)的類型是資源釋放函數(shù),則需要分析其參數(shù),將該動(dòng)態(tài)內(nèi)存的分配記錄刪除。 完成截獲后的分析和記錄,調(diào)用KVM的emulate_instruction函數(shù),模擬執(zhí)行指令,跳過被插入的VMCALL指令。這里的額外工作是,emulate_instruction函數(shù)會(huì)讀取虛擬機(jī)的指令進(jìn)行模擬,而當(dāng)前指令是被替換過的VMCALL指令,需要給該函數(shù)提供被替換前的指令。解決方法是修改虛擬機(jī)管理器讀取虛擬機(jī)指令的函數(shù),對不同情況進(jìn)行判斷,如果讀取指令地址是被我們替換過的地址,則需要返回原始指令。然后把狀態(tài)從VMM切換到VM,截獲工作至此完成。 函數(shù)調(diào)用棧的獲取。當(dāng)一個(gè)函數(shù)被調(diào)用時(shí),返回地址被壓到棧上,然后處理器跳轉(zhuǎn)到被調(diào)用的函數(shù)處開始執(zhí)行。當(dāng)被調(diào)用的函數(shù)返回時(shí),處理器從原來被壓到棧上的返回地址處繼續(xù)執(zhí)行。當(dāng)程序執(zhí)行的過程中出現(xiàn)多層調(diào)用時(shí),棧上就會(huì)保存一系列對應(yīng)的返回地址。由這些返回地址很容易獲取到其所在的一系列函數(shù)。這一系列函數(shù)被稱作調(diào)用棧。資源分配時(shí),分配函數(shù)的調(diào)用棧能夠輔助程序開發(fā)人員分析此函數(shù)調(diào)用的代碼軌跡。對于疑似被泄露的內(nèi)存,通過其分配函數(shù)的調(diào)用??梢?,獲悉其分配時(shí)程序的上下文,從而排查出其是否真的存在內(nèi)存泄露。 獲取函數(shù)調(diào)用棧的難點(diǎn)在于如何從棧上排查出這些返回地址,因?yàn)镮ntelX86體系結(jié)構(gòu)中,棧上不僅保存著返回地址,還保存著函數(shù)的參數(shù)。準(zhǔn)確地獲取函數(shù)調(diào)用棧需要結(jié)合分析應(yīng)用程序的代碼和堆棧上的數(shù)據(jù),這種方法比較耗時(shí)。本文采用的是應(yīng)用在GNU/Linux內(nèi)核中的方法。該方法逐條讀取堆棧中的數(shù)據(jù),如果該數(shù)據(jù)落在代碼地址空間中,則該數(shù)據(jù)被認(rèn)為是一個(gè)返回地址。在實(shí)際的運(yùn)行過程中,該方法不僅快,而且正確率高。 在KVM的影子頁表機(jī)制中實(shí)現(xiàn)對內(nèi)存的監(jiān)控。實(shí)現(xiàn)過程需要兩個(gè)步驟。第一,對于欲監(jiān)控內(nèi)存區(qū)域所跨越的每個(gè)頁,在影子頁表中清除其PageTableEntry(PTE),使得以后對這些頁面的訪問會(huì)產(chǎn)生PageFault。因?yàn)槲覀冃薷牧薖TE,改變了GVA到HPA的映射關(guān)系,所以還需要清除TLB,使原來的映射失效。第二步便是PageFault的處理。在虛擬機(jī)發(fā)生PageFault時(shí),判斷被訪問地址是否在我們保護(hù)的范圍內(nèi),甄別出需要額外處理的。對于被監(jiān)控區(qū)域的訪問,記錄被訪問時(shí)間和類型(讀或?qū)懀?,解除對此?nèi)存區(qū)域的監(jiān)控。KVM默認(rèn)的處理程序會(huì)為這個(gè)頁面建立新的PTE,至此監(jiān)控解除。 監(jiān)控策略的實(shí)現(xiàn)。我們將監(jiān)控策略以進(jìn)程的方式運(yùn)行,策略進(jìn)程和虛擬機(jī)模塊通過命令進(jìn)行數(shù)據(jù)交互,這種實(shí)現(xiàn)方式主要基于如下的考慮。首先,監(jiān)控策略的推斷是一個(gè)復(fù)雜且繁瑣的過程,不適合實(shí)現(xiàn)在內(nèi)核中,在進(jìn)程中實(shí)現(xiàn)能夠更加靈活。其次,將高層功能從虛擬機(jī)管理器中抽取出來,有利于虛擬機(jī)管理器的穩(wěn)定。監(jiān)控策略的步驟如下:第一步,策略程序向虛擬機(jī)管理器發(fā)送命令,獲取當(dāng)前未被釋放的動(dòng)態(tài)內(nèi)存的信息列表,包括內(nèi)存起始地址、長度、申請時(shí)間、最后訪問時(shí)間、類型以及函數(shù)調(diào)用棧等信息。第二步,策略進(jìn)程從列表中推選出需要監(jiān)控的內(nèi)存段,發(fā)送命令給虛擬機(jī)管理器。最后,策略進(jìn)程匯總內(nèi)存段的各種信息,判斷其是否存在內(nèi)存泄露嫌疑。4、實(shí)驗(yàn)評估前面介紹了基于虛擬機(jī)管理器探測內(nèi)存泄露的實(shí)現(xiàn),本節(jié)說明探測內(nèi)存泄露相關(guān)實(shí)驗(yàn)的結(jié)果。我們主要關(guān)注探測機(jī)制對虛擬機(jī)帶來的性能損失和內(nèi)存探測有效性兩個(gè)方面。針對各部分實(shí)驗(yàn)結(jié)果,分析了原因,并指出了可能的改進(jìn)辦法。最終實(shí)驗(yàn)結(jié)果表明,基于虛擬機(jī)管理器進(jìn)行內(nèi)存泄露的探測,其實(shí)現(xiàn)對應(yīng)用程序造成的性能損失很小,低于10%。在公認(rèn)的存在內(nèi)存泄露的開源項(xiàng)目中,發(fā)現(xiàn)了內(nèi)存泄露的嫌疑。因?yàn)槭艿綔y試程序的限制,所發(fā)現(xiàn)的內(nèi)存泄露嫌疑比較有限,如果將應(yīng)用程序部署在真實(shí)的應(yīng)用環(huán)境中,將會(huì)有更佳的結(jié)果。4.1實(shí)驗(yàn)環(huán)境我們使用的測試環(huán)境為,IntelCore?2CPU@1.86GHz,雙核CPU,2MCache,2G內(nèi)存;KVM-84版本,虛擬機(jī)中內(nèi)核版本為Linux,只配備了一個(gè)硬盤分區(qū)。SATA硬盤,單網(wǎng)卡。編譯器為GCC4.1.1。虛擬機(jī)管理器所在的操作系統(tǒng)版本也是Linux。每次測試時(shí)除了受測試虛擬機(jī)運(yùn)行外,無其他虛擬機(jī)在執(zhí)行。虛擬機(jī)只配備了一個(gè)VCPU(VirtualCPU)。首先,我們測試了本實(shí)現(xiàn)對虛擬機(jī)性能的影響;然后,測試了公認(rèn)的存在內(nèi)存泄露的開源項(xiàng)目中,內(nèi)存分配和釋放的情況,并分析了內(nèi)存泄露的嫌疑。4.2性能損失測試我們設(shè)計(jì)了兩個(gè)實(shí)驗(yàn),測試了本實(shí)現(xiàn)本身對運(yùn)行在KVM之上的應(yīng)用程序性能的影響。實(shí)驗(yàn)一測試的程序是常見的編譯器GCC4.1.1,我們截獲了GCC中的所有的內(nèi)存申請和釋放函數(shù)調(diào)用,然后分別測試了編譯proftpd-1.3.2rc4源代碼的時(shí)間;實(shí)驗(yàn)二是我們設(shè)計(jì)的程序,該程序調(diào)用了6億次的malloc和free函數(shù)。最終結(jié)果如表1所示。表1應(yīng)用程序在虛擬機(jī)中的性能對比KVM-84KVM-84-memory-leak-detectionGCC4.1.128秒30秒6億次調(diào)用malloc和free68.889秒69.083秒由表1可知,具有異常頻繁內(nèi)存申請和釋放的GCC4.1.1程序,在正常的KVM虛擬機(jī)上編譯一個(gè)應(yīng)用程序所需時(shí)間為28秒,而在添加了內(nèi)存泄露探測機(jī)制的KVM虛擬機(jī)上編譯同一個(gè)應(yīng)用程序所需時(shí)間為30秒,可見內(nèi)存泄露探測機(jī)制引起的性能損失在10%以內(nèi)。而對于我們設(shè)計(jì)的6億次malloc和free函數(shù)調(diào)用的程序,內(nèi)存泄露探測機(jī)制引起的性能損失則更少,幾乎可以忽略不計(jì)。4.3有效性為了測試基于虛擬機(jī)管理器進(jìn)行內(nèi)存泄露機(jī)制的有效性,我們找到了公認(rèn)存在內(nèi)存泄露的兩個(gè)開源項(xiàng)目:proftpd-1.2.9和squid-2.4,并對其分別進(jìn)行了測試。測試proftpd-1.2.9的實(shí)驗(yàn)環(huán)境是:通過多個(gè)客戶端程序,向服務(wù)器發(fā)送1000次SIZE命令。因?yàn)镾IZE命令會(huì)導(dǎo)致proftpd發(fā)生內(nèi)存泄露。在測試程序完成后,尚未被proftpd釋放的動(dòng)態(tài)內(nèi)存詳細(xì)信息見表2。表2proftpd中未釋放內(nèi)存片段的詳細(xì)信息申請內(nèi)存的IP地址調(diào)用函數(shù)類型調(diào)用次數(shù)申請內(nèi)存的長度(字節(jié))0x804e559malloc()29不統(tǒng)一0x804e778malloc()180x8051239malloc()35絕大部分是5240x80584f8realloc()14097從表2中我們可以看出,在IP地址0x804e778和0x80584f8處只有一次沒有釋放的malloc內(nèi)存分配,分配的內(nèi)存長度分別為8個(gè)字節(jié)和4097個(gè)字節(jié);而在IP地址0x804e559和0x8051239處沒有釋放的malloc分配記錄則有數(shù)十次,并且在IP地址0x8051239處分配的內(nèi)存長度絕大部分都是相同的,因此我們可以推測此處很有可能是一個(gè)內(nèi)存泄露點(diǎn)。測試squid-2.4的方法是同時(shí)啟動(dòng)5個(gè)客戶端程序,每個(gè)程序向squid服務(wù)連續(xù)發(fā)送100個(gè)請求。在5個(gè)客戶端程序都結(jié)束時(shí),squid服務(wù)未釋放的動(dòng)態(tài)內(nèi)存資源見表3。表3squid中未釋放內(nèi)存片段的詳細(xì)信息申請內(nèi)存的IP地址調(diào)用函數(shù)類型調(diào)用次數(shù)申請內(nèi)存的長度(字節(jié))0x80a8e4acalloc()113不統(tǒng)一0x80a8f88malloc()14640x80a8edfrealloc()2192 從表3中我們可以看出,在IP地址0x80a8e4a處有上百次的calloc分配都沒有釋放,它很有可能是一個(gè)內(nèi)存泄露點(diǎn);在IP地址0x80a8f88處有14次malloc內(nèi)存分配沒有釋放,且分配的內(nèi)存長度都是64字節(jié),它也可能是一個(gè)內(nèi)存泄露點(diǎn);而在IP地址0x80a8edf處只有兩次realloc內(nèi)存分配沒有釋放。如表2和表3所示,存在內(nèi)存泄露的可能IP地址是非常有限的,通過函數(shù)調(diào)用棧,調(diào)試人員很容易就能夠定位存在內(nèi)存泄露的點(diǎn)。正如上面所說,proftpd測試中,SIZE命令必然會(huì)導(dǎo)致內(nèi)存泄露,所以在表2中的IP地址中,必然存在內(nèi)存泄露。5、結(jié)論以及下一步工作 虛擬機(jī)技術(shù)的不斷發(fā)展使得虛擬化的代價(jià)越來越低,同時(shí)也推動(dòng)了虛擬化技術(shù)的應(yīng)用。利用虛擬化技術(shù)來提高操作系統(tǒng)的安全性一直以來受到人們越來越多的重視?;谔摂M化平臺已經(jīng)有了一系列的研究。其中一項(xiàng)是利用虛擬機(jī)的可復(fù)制性建立HoneyFarm[11],以捕獲、記錄和分析黑客對系統(tǒng)的攻擊行為,從而提高系統(tǒng)的安全性。另外,Lycosid[12]利用虛擬機(jī)管理器對資源的絕對控制和對操作系統(tǒng)的透明性,提出了一套檢測和標(biāo)識隱藏進(jìn)程的機(jī)制;有很多病毒程序能夠在操作系統(tǒng)中隱藏自己,增加被用戶發(fā)現(xiàn)的難度。本文利用虛擬機(jī)管理器對其上虛擬機(jī)的掌控性和透明性,提出了探測內(nèi)存泄露的一種機(jī)制,該機(jī)制提供了內(nèi)存探測的平臺通用性,不需要修改或者重新編譯應(yīng)用程序的源代碼,并且,虛擬機(jī)的性能損失在10%以內(nèi)。 本文的基本思路是:在虛擬機(jī)平臺中通過在虛擬機(jī)(GuestOS)中插入指令的方式,透明地?cái)r截應(yīng)用程序申請和釋放內(nèi)存資源的函數(shù)調(diào)用,例如malloc等動(dòng)態(tài)內(nèi)存申請函數(shù)和釋放動(dòng)態(tài)內(nèi)存的free函數(shù),或者Linux內(nèi)核的vmalloc和vfree函數(shù),維護(hù)應(yīng)用程序所使用動(dòng)態(tài)內(nèi)存資源的列表。因?yàn)楸恍孤兜膬?nèi)存不會(huì)被應(yīng)用程序所訪問,所以接下來需要從這個(gè)列表中推選出一部分,進(jìn)行訪問的監(jiān)控。那些長時(shí)間不被釋放且不被訪問的內(nèi)存資源,則是很好的內(nèi)存泄露的嫌疑。為了減少監(jiān)控內(nèi)存訪問的性能損失,本文作了一些重要的優(yōu)化,例如放棄對熱頁面的監(jiān)控。 本研究發(fā)現(xiàn),利用虛擬化技術(shù)探測內(nèi)存泄露具有可行性。首先是在線性,根據(jù)實(shí)驗(yàn),利用虛擬機(jī)管理器探測內(nèi)存泄露給虛擬機(jī)帶來的性能損失小于10%。測試程序的邏輯是有限的,有些內(nèi)存泄露只有在真正應(yīng)用時(shí)才能發(fā)現(xiàn)。其次是有效性,通過實(shí)驗(yàn),在公認(rèn)的存在內(nèi)存泄露的開源項(xiàng)目中,確實(shí)能夠發(fā)現(xiàn)內(nèi)存泄露的嫌疑。另外的優(yōu)勢是通用性,該方法不僅適用于GNU/Linux操作系統(tǒng),而且對Windows也使用,不僅適用于用戶程序,對操作系統(tǒng)內(nèi)核也同樣適用。最后是實(shí)現(xiàn)的簡單性,該方法不需要修改現(xiàn)有的操作系統(tǒng),只需要對支撐虛擬機(jī)運(yùn)行的虛擬機(jī)管理器進(jìn)行修改。 我們下一步工作是,在虛擬機(jī)之內(nèi)確認(rèn)內(nèi)存泄露之后,通過動(dòng)態(tài)代碼修補(bǔ)的技術(shù),動(dòng)態(tài)修正運(yùn)行在虛擬機(jī)中的應(yīng)用程序,以保證應(yīng)用程序所提供的服務(wù)不會(huì)中止。

參考文獻(xiàn)YichenXieandAlexAiken.Context-andPath-sensitiveMemoryLeakDetection,InProceedingsofESEC/FSE2005,Lisbon,Portugal.TsaiT.,VaidyanathanK.,GrossK.Low-OverheadRun-TimeMemoryLeakDetectionandRecovery,PRDC’06,2006.RationalPurify.Purify:FastDetectionofMemoryLeaksandAccessErrors.

/software/awdtools/purify/FengQin,ShanLuandYuanyuanZhou.SafeMem:ExploitingECC-MemoryforDet

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論