




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
Chapter4:Processes進(jìn)程OS管理資源為用戶提供服務(wù),為用戶提供服務(wù)實(shí)際上就是有程序在運(yùn)行,這些程序都會(huì)占用一定的資源,這些資源如何表述?OS使用進(jìn)程來表述每一個(gè)運(yùn)行的程序及其所占用的資源(計(jì)算機(jī)),包括程序計(jì)數(shù)器、寄存器、內(nèi)存、文件、I/O等等,每一個(gè)進(jìn)程看成是一個(gè)計(jì)算機(jī)進(jìn)程是OS的一個(gè)關(guān)鍵概念,也是OS處理機(jī)管理的關(guān)鍵部分進(jìn)程與程序的區(qū)別,進(jìn)程是執(zhí)行中的程序及其所需要的資源抽象,是動(dòng)態(tài)的,程序是靜止的(想想菜譜和對(duì)著菜譜做菜,或者一本書與讀這本書)Chapter4:Processes進(jìn)程ProcessConcept進(jìn)程概念ProcessScheduling進(jìn)程調(diào)度OperationonProcesses進(jìn)程的操作CooperatingProcesses協(xié)作進(jìn)程InterprocessCommunication進(jìn)程間通訊SystemAbstraction:ProcessesAprocessisasystemabstraction:illusionofbeingtheonlyjobinthesystem
hardware: computeroperatingsystem:processuser: runapplicationcreate,killprocesses,inter-processcomm.MultiplexingresourcesProcesses:MechanismandPolicyMechanism(機(jī)制):Creation,destruction,suspension,contextswitch(上下文),signaling(信號(hào)),IPC(進(jìn)程之間通信),etc.Policy(政策):Minorpolicyquestions(最小集合問題)Whocancreate/destroy/suspendprocesses?Howmanyactiveprocessescaneachuserhave?Majorpolicyquestionthatwewillconcentrateon(最大集合)Howtosharesystemresourcesbetweenmultipleprocesses?TypicallybrokenintoanumberoforthogonalpoliciesforindividualresourcesuchasCPU,memory,anddisk.ProcessConceptAnoperatingsystemexecutesavarietyofprograms:Time-sharedsystems–userprogramsortasksBatchsystem–jobsTextbookusestheterms
jobandprocess,taskalmostinterchangeably.Process–
aprograminexecution;processexecutionmustprogressinsequentialfashion.進(jìn)程-在執(zhí)行中的程序;進(jìn)程的執(zhí)行必須以順序方式進(jìn)行Aprocessincludes:programcounter程序計(jì)數(shù)器stack棧datasection數(shù)據(jù)部分ProcessConcept(cont.)1.Eachvariablemustbeassignedastorageclass2.Global(static)variablesAllocatedinglobalsregionatcompile-time3.MethodlocalvariablesandparametersAllocatedynamicallyonstack4.Dynamicallycreatedobjects(usingnew)AllocatefromheapObjectslivebeyondinvocationofamethodGarbagecollectedwhennolonger“l(fā)ive”TheProcessProcess=systemabstractionforthesetofresourcesrequiredforexecutingaprogram
=arunninginstanceofaprogram=memoryimage+registers’content(+I/Ostate)進(jìn)程就是執(zhí)行一個(gè)程序所需要的資源集的系統(tǒng)抽象
一個(gè)程序的一個(gè)運(yùn)行實(shí)例
內(nèi)存映像+寄存器+I/O
Processinmemory代碼、當(dāng)前活動(dòng)(PC、register)全局變量臨時(shí)數(shù)據(jù)(函數(shù)參數(shù)、返回值、局部變量)進(jìn)程運(yùn)行過程中動(dòng)態(tài)分配的內(nèi)存ProcessStateAsaprocessexecutes,itchangesstate
進(jìn)程執(zhí)行時(shí),改變狀態(tài)new:Theprocessisbeingcreated.
新建:在創(chuàng)建進(jìn)程running:Instructionsarebeingexecuted.
運(yùn)行:指令在執(zhí)行waiting:Theprocessiswaitingforsomeeventtooccur.
等待:進(jìn)程等待某些事件發(fā)生ready:Theprocessiswaitingtobeassignedtoaprocessor.
就緒:進(jìn)程等待分配處理器terminated:Theprocesshasfinishedexecution.
終止:進(jìn)程執(zhí)行完畢DiagramofProcessStateDiagramofProcessStateDiagramofProcessStateDiagramofProcessStateDiagramofProcessStateDiagramofProcessStateDiagramofProcessStateDiagramofProcessStateDiagramofProcessStateDiagramofProcessState記住、理解這個(gè)圖一個(gè)進(jìn)程處于new和terminated狀態(tài)只有一次,處于其他狀態(tài)可能會(huì)有多次ProcessStateNew→Ready:OS接納新狀態(tài)進(jìn)程為就緒進(jìn)程;Ready→Running:OS只能從就緒進(jìn)程中選一個(gè)進(jìn)程執(zhí)行;Running→Exit:執(zhí)行狀態(tài)的進(jìn)程執(zhí)行完畢,或被取消,則轉(zhuǎn)換為退出狀態(tài);Running→Ready:分時(shí)系統(tǒng)中,時(shí)間片用完,或優(yōu)先級(jí)高的進(jìn)程到來,將終止優(yōu)先級(jí)低的進(jìn)程的執(zhí)行;Running→Blocked:執(zhí)行進(jìn)程需要等待某外部事件發(fā)生。通常因進(jìn)程需要的系統(tǒng)調(diào)用不能立即完成,而阻塞;Blocked→Ready:當(dāng)阻塞進(jìn)程等待的事件發(fā)生,就轉(zhuǎn)換為就緒狀態(tài)Ready→Exit:某些系統(tǒng)允許父進(jìn)程在任何情況下終止其子進(jìn)程,若一個(gè)父進(jìn)程終止,其子孫進(jìn)程都必須終止;Processstate(cont.)QuestionSupposetherearetwoprocessesinthesystem,onewordprocessingprocessiswaitingfortheuser’sinput,theotherisadataprocessingtableprocesswhichiscalculating.Tellwhichstateeachofthetwoprocessesisin.ProcessControlBlock(PCB)TheOSmanageinformationforeachprocessineachprocesstable(軟件的角度是一個(gè)數(shù)據(jù)結(jié)構(gòu))Informationassociatedwitheachprocess.同進(jìn)程有關(guān)的信息Processstate 進(jìn)程狀態(tài)Programcounter 程序計(jì)數(shù)器CPUregisters CPU寄存器CPUschedulinginformation CPU調(diào)度信息Memory-managementinformation內(nèi)存管理信息Accountinginformation 計(jì)賬信息I/Ostatusinformation I/O狀態(tài)信息ProcessControlBlock(PCB)CasestudyLinuxPCBCPUSwitchFromProcesstoProcessCPUSwitchFromProcesstoProcessCPUSwitchFromProcesstoProcessCPUSwitchFromProcesstoProcessCPUSwitchFromProcesstoProcessCPUSwitchFromProcesstoProcessCPUSwitchFromProcesstoProcessCPUSwitchFromProcesstoProcessCPUSwitchFromProcesstoProcessProcessorAbstraction:ThreadsAthreadisaprocessorabstraction(一個(gè)線程就是一個(gè)處理器的抽象):illusionofhaving1processorperexecutioncontext
hardware: processoroperatingsystem:threadapplication: executioncontextcreate,kill,synch.contextswitchProcessSchedulingQueues
進(jìn)程調(diào)度隊(duì)列Jobqueue
–setofallprocessesinthesystem.
作業(yè)隊(duì)列-在系統(tǒng)中的所有進(jìn)程的集合Readyqueue
–setofallprocessesresidinginmainmemory,
readyandwaitingtoexecute.
就緒隊(duì)列-在主內(nèi)存中的,就緒并等待執(zhí)行的所有進(jìn)程的集合Devicequeues
–setofprocesseswaitingforanI/Odevice.
設(shè)備隊(duì)列-等待某一I/O設(shè)備的進(jìn)程隊(duì)列Processmigrationbetweenthevariousqueues.
在各種隊(duì)列之間進(jìn)程的遷移ReadyQueueAndVariousI/ODeviceQueuesRepresentationofProcessSchedulingSchedulersLong-termscheduler(orjobscheduler)–selectswhichprocessesshouldbebroughtintothereadyqueue.長程調(diào)度(或作業(yè)調(diào)度)-選擇可以進(jìn)入就緒隊(duì)列的進(jìn)程Short-termscheduler(orCPUscheduler)–selectswhichprocessshouldbeexecutednextandallocatesCPU.
短程調(diào)度(或CPU調(diào)度)-選擇可被下一個(gè)執(zhí)行并分配CPU的進(jìn)程AdditionofMediumTermSchedulingSchedulers(Cont.)Short-termschedulerisinvokedveryfrequently(milliseconds)(mustbefast).
短程調(diào)度切換頻率高Long-termschedulerisinvokedveryinfrequently(seconds,minutes)(maybeslow).長程調(diào)度不快Thelong-termschedulercontrolsthedegreeofmultiprogramming.長程調(diào)度控制了多道程序的“道”Processescanbedescribedaseither:
進(jìn)程類型:I/O-boundprocess
–spendsmoretimedoingI/Othancomputations,manyshortCPUbursts.I/O型進(jìn)程-花費(fèi)I/O時(shí)間多于計(jì)算,許多短CPU處理CPU-boundprocess
–spendsmoretimedoingcomputations;fewverylongCPUbursts.CPU型進(jìn)程-花費(fèi)更多時(shí)間于計(jì)算,許多長CPU處理ContextSwitch上下文切換WhenCPUswitchestoanotherprocess,thesystemmustsavethestateoftheoldprocessandloadthesavedstateforthenewprocess.
當(dāng)CPU切換至另一個(gè)進(jìn)程時(shí),系統(tǒng)必須保存舊進(jìn)程狀態(tài)并為新進(jìn)程調(diào)入所保留的狀態(tài)Context-switchtimeisoverhead;thesystemdoesnousefulworkwhileswitching.
上下文切換的時(shí)間開銷較重;在切換時(shí),系統(tǒng)沒有做有用的工作Timedependentonhardwaresupport.(P103)
時(shí)間取決于硬件的支持ProcessCreation創(chuàng)建Parentprocesscreateschildrenprocesses,which,inturncreateotherprocesses,formingatreeofprocesses.ProcessCreation(Cont.)Addressspace地址空間Childduplicateofparent.子女復(fù)制雙親Childhasaprogramloadedintoit.子女有一個(gè)程序被調(diào)入U(xiǎn)NIXexamplesUNIX例子forksystemcallcreatesnewprocess
fork系統(tǒng)調(diào)用創(chuàng)建新進(jìn)程execlpsystemcallusedafteraforktoreplacetheprocess’memoryspacewithanewprogram.
在fork
用一個(gè)新程序替代了進(jìn)程的內(nèi)存空間之后,采用execlp系統(tǒng)調(diào)用ExampleofProcessCreationUsingForkVoidmain(…){intpid;pid=fork();//花開兩朵各表一枝if(pid<0){/*erroroccurred*/…}elseif(pid==0){/*childprocess*/execlp(“/bin/ls”,”ls”,NULL);}else{/*parentprocess*/wait(NULL);printf(“childcomplete”);exit(0);}}Casestudy–Linux創(chuàng)建子進(jìn)程linux創(chuàng)建一個(gè)子進(jìn)程主要通過fork()vfork()clone()這三個(gè)系統(tǒng)調(diào)用.fork(),
fork創(chuàng)建一個(gè)進(jìn)程時(shí),子進(jìn)程只是完全復(fù)制父進(jìn)程的資源,這樣得到的子進(jìn)程獨(dú)立于父進(jìn)程,具有良好的并發(fā)性,但是二者之間的通訊需要通過專門的通訊機(jī)制,如:pipe,popen&pclose、協(xié)同進(jìn)程、fifo,SystemVIPC(消息隊(duì)列、信號(hào)量和共享內(nèi)存)機(jī)制等,另外通過fork創(chuàng)建子進(jìn)程系統(tǒng)開銷很大,需要將上面描述的每種資源都復(fù)制一個(gè)副本。這樣看來,fork是一個(gè)開銷十分大的系統(tǒng)調(diào)用,這些開銷并不是所有的情況下都是必須的,比如某進(jìn)程fork出一個(gè)子進(jìn)程后,其子進(jìn)程僅僅是為了調(diào)用exec執(zhí)行另一個(gè)執(zhí)行文件,那么在fork過程中對(duì)于虛存空間的復(fù)制將是一個(gè)多余的過程(由于Linux中是采取了copy-on-write技術(shù),所以這一步驟的所做的工作只是虛存管理部分的復(fù)制以及頁表的創(chuàng)建,而并沒有包括物理也面的拷貝).vfork(),
vfork系統(tǒng)調(diào)用不同于fork,用vfork創(chuàng)建的子進(jìn)程共享地址空間,也就是說子進(jìn)程完全運(yùn)行在父進(jìn)程的地址空間上,子進(jìn)程對(duì)虛擬地址空間任何數(shù)據(jù)的修改同樣為父進(jìn)程所見。但是用vfork創(chuàng)建子進(jìn)程后,父進(jìn)程會(huì)被阻塞直到子進(jìn)程調(diào)用exec或exit。這樣的好處是在子進(jìn)程被創(chuàng)建后僅僅是為了調(diào)用exec執(zhí)行另一個(gè)程序時(shí),因?yàn)樗筒粫?huì)對(duì)父進(jìn)程的地址空間有任何引用,所以對(duì)地址空間的復(fù)制是多余的,通過vfork可以減少不必要的開銷.clone(),
clone()系統(tǒng)調(diào)用是fork()的推廣形式,它允許新進(jìn)程共享父進(jìn)程的存儲(chǔ)空間、文件描述符和信號(hào)處理程序.Casestudy–Linux創(chuàng)建子進(jìn)程代碼(1)Linuxfork的系統(tǒng)調(diào)用代碼在linux/arch/x86/kernel/process.c中:intsys_fork(structpt_regs*regs){ returndo_fork(SIGCHLD,regs->sp,regs,0,NULL,NULL);}intsys_vfork(structpt_regs*regs){ returndo_fork(CLONE_VFORK|CLONE_VM|SIGCHLD,regs->sp,regs,0, NULL,NULL);}longsys_clone(unsignedlongclone_flags,unsignedlongnewsp, void__user*parent_tid,void__user*child_tid,structpt_regs*regs){ if(!newsp) newsp=regs->sp; returndo_fork(clone_flags,newsp,regs,0,parent_tid,child_tid);}Casestudy–Linux創(chuàng)建子進(jìn)程代碼(2)cloningflags在include/linux/sched.h中定義/**cloningflags:*/#defineCSIGNAL 0x000000ff /*signalmasktobesentatexit*/#defineCLONE_VM 0x00000100 /*setifVMsharedbetweenprocesses*/#defineCLONE_FS 0x00000200 /*setiffsinfosharedbetweenprocesses*/#defineCLONE_FILES 0x00000400 /*setifopenfilessharedbetweenprocesses*/#defineCLONE_SIGHAND 0x00000800 /*setifsignalhandlersandblockedsignalsshared*/#defineCLONE_PTRACE 0x00002000 /*setifwewanttolettracingcontinueonthechildtoo*/#defineCLONE_VFORK 0x00004000 /*setiftheparentwantsthechildtowakeituponmm_release*/#defineCLONE_PARENT 0x00008000 /*setifwewanttohavethesameparentasthecloner*/#defineCLONE_THREAD 0x00010000 /*Samethreadgroup?*/#defineCLONE_NEWNS 0x00020000 /*Newnamespacegroup?*/#defineCLONE_SYSVSEM 0x00040000 /*sharesystemVSEM_UNDOsemantics*/#defineCLONE_SETTLS 0x00080000 /*createanewTLSforthechild*/#defineCLONE_PARENT_SETTID 0x00100000 /*settheTIDintheparent*/#defineCLONE_CHILD_CLEARTID 0x00200000 /*cleartheTIDinthechild*/#defineCLONE_DETACHED 0x00400000 /*Unused,ignored*/#defineCLONE_UNTRACED 0x00800000 /*setifthetracingprocesscan'tforceCLONE_PTRACEonthisclone*/#defineCLONE_CHILD_SETTID 0x01000000 /*settheTIDinthechild*/#defineCLONE_STOPPED 0x02000000 /*Startinstoppedstate*/#defineCLONE_NEWUTS 0x04000000 /*Newutsnamegroup?*/#defineCLONE_NEWIPC 0x08000000 /*Newipcs*/#defineCLONE_NEWUSER 0x10000000 /*Newusernamespace*/#defineCLONE_NEWPID 0x20000000 /*Newpidnamespace*/#defineCLONE_NEWNET 0x40000000 /*Newnetworknamespace*/#defineCLONE_IO 0x80000000 /*Cloneiocontext*/Linuxdo_fork()do_fork()ProcessTerminationProcessexecuteslaststatementandaskstheoperatingsystemtodecideit(exit).
Outputdatafromchildtoparent(viawait).Process’resourcesaredeallocatedbyoperatingsystem.操作系統(tǒng)收回進(jìn)程的資源Parentmayterminateexecutionofchildrenprocesses(abort).Childhasexceededallocatedresources.子進(jìn)程超量分配資Taskassignedtochildisnolongerrequired.Parentisexiting.父進(jìn)程Operatingsystemdoesnotallowchildtocontinueifitsparentterminates.若父進(jìn)程終止,不允許子進(jìn)程繼續(xù)Cascadingtermination.級(jí)聯(lián)終止ProcessCreation/DestructioninJavaInJava,thisAPIishiddeninthejava.lang.Runtimeandjava.lang.Processclassesimportjava.lang.*…Runtimert=Runtime.getRuntime(); //getruntimeProcesschild=rt.exec(“l(fā)oop-forever-program”);//createchildchild.destroy(); //killchild…CooperatingProcesses協(xié)同進(jìn)程Independentprocesscannotaffectorbeaffectedbytheexecutionofanotherprocess.Cooperatingprocesscanaffectorbeaffectedbytheexecutionofanotherprocess協(xié)同進(jìn)程可能影響另一個(gè)進(jìn)程的執(zhí)行或被另一個(gè)進(jìn)程執(zhí)行影響AdvantagesofprocesscooperationInformationsharing信息共享Computationspeed-up加速運(yùn)算Modularity模塊化Convenience方便Producer-ConsumerProblem
生產(chǎn)者-消費(fèi)者問題協(xié)同進(jìn)程的例子:生產(chǎn)者-消費(fèi)者問題,生產(chǎn)者進(jìn)程生產(chǎn)供消費(fèi)者進(jìn)程消費(fèi)的信息Paradigmforcooperatingprocesses,producerprocessproducesinformationthatisconsumedbyaconsumerprocess.
Twomethod:1.unbounded-bufferplacesnopracticallimitonthesizeofthebuffer.2.bounded-bufferassumesthatthereisafixedbuffersize.
Bounded-Buffer–Shared-MemorySolutionShareddata#defineBUFFER_SIZE10Typedefstruct{ ...}item;itembuffer[BUFFER_SIZE];intin=0;intout=0;Bounded-Buffer–ProducerProcess
itemnextProduced;
while(1){ while(((in+1)%BUFFER_SIZE)==out) ;/*donothing*/ buffer[in]=nextProduced; in=(in+1)%BUFFER_SIZE; }Bounded-Buffer–ConsumerProcess
itemnextConsumed;
while(1){ while(in==out) ;/*donothing*/ nextConsumed=buffer[out]; out=(out+1)%BUFFER_SIZE; }
Solutioniscorrect,butcanonlyuseBUFFER_SIZE-1elements4.5進(jìn)程間通信進(jìn)程間通信(InterprocessCommunication,IPC)是用于進(jìn)程間通信和行為同步的機(jī)制消息系統(tǒng)-允許進(jìn)程間相互通信而不需要利用共享變量IPC工具至少提供兩個(gè)操作發(fā)送(消息)接收(消息)如果進(jìn)程P和Q需要通信,那么他們需要相互建立通信線路通過發(fā)送/接收來交換消息通信線路的實(shí)現(xiàn)物理方式(如,共享內(nèi)存,硬件總線)邏輯方式(如,邏輯工具)56進(jìn)程間通信必須解決以下實(shí)際問題通信線路如何建立?一個(gè)通信線路能否與兩個(gè)以上進(jìn)程關(guān)聯(lián)每一對(duì)通信的進(jìn)程之間允許存在多少通信線路?通信線路的能力是什么?通信線路容納的消息的長度是固定還是可變的?線路是單向的,還是雙向的?57直接通信需要通信的進(jìn)程必須明確地命名通信的接收者或發(fā)送者send(P,message)-發(fā)送消息至進(jìn)程Preceive(Q,message)-從進(jìn)程Q接收消息通信線路具有以下屬性通信線路自動(dòng)建立一個(gè)線路只與兩個(gè)進(jìn)程相關(guān)每對(duì)進(jìn)程之間只有一個(gè)線路通信線路可能是單向的,但通常情況下是雙向的58間接通信對(duì)于間接通信,消息通過郵箱或端口來發(fā)送和接收。每個(gè)郵箱都有一個(gè)惟一的標(biāo)識(shí)符進(jìn)程只有共享一個(gè)郵箱才能相互通信通信線路具有如下屬性只要一對(duì)進(jìn)程中的兩個(gè)成員共享一個(gè)郵箱,那么就建立了它們之間的通信線路一個(gè)線路可以與兩個(gè)或多個(gè)進(jìn)程相關(guān)聯(lián)兩個(gè)通信進(jìn)程之間可有多個(gè)不同的線路,每個(gè)線路對(duì)應(yīng)于一個(gè)郵箱線路可以是單向的或雙向的59間接通信(續(xù))操作創(chuàng)建一個(gè)新郵箱通過該郵箱發(fā)送和接收消息刪除郵箱原語send(A,message)-發(fā)送消息給郵箱Areceive(A,message)-從郵箱A接收消息60間接通信(續(xù))郵箱共享P1,P2,P3共享郵箱AP1發(fā)送消息;P2和P3接收誰將獲得這個(gè)消息?解決辦法允許一條線路與兩個(gè)以上的進(jìn)程關(guān)聯(lián)任一時(shí)刻只允許一個(gè)進(jìn)程執(zhí)行接收操作允許系統(tǒng)選擇接收者,并且可以告訴發(fā)送者誰是接收者61同步消息傳遞可以是阻塞或非阻塞的阻塞的消息傳遞也稱為同步消息阻塞send:發(fā)送進(jìn)程阻塞,直到消息為接收進(jìn)程或郵箱所接收阻塞receive:接收者阻塞,直到有消息可用非阻塞的消息傳遞也稱為異步消息非阻塞send:發(fā)送進(jìn)程發(fā)送消息并再繼續(xù)操作非阻塞receive:接收者收到一個(gè)有效消息或無效消息62緩沖通信線路用消息隊(duì)列來保存消息,有以下三種實(shí)現(xiàn)方式零容量:隊(duì)列中的最大長度為0。這種情況發(fā)送者必須阻塞,直到接收者接收消息有限容量:隊(duì)列的長度為有限的n;因此,最多只能有n個(gè)消息駐留其中。無限容量:隊(duì)列長度可以無限;因此,不管多少消息都可在其中等待。發(fā)送者不阻塞63Linux進(jìn)程間通信多種IPC的方法:半雙工Unix管道,把一個(gè)進(jìn)程的標(biāo)準(zhǔn)輸出與另一個(gè)進(jìn)程的標(biāo)準(zhǔn)輸入相連接的方法,單向通信的方法。FIFO(命名管道)SystemV形式的消息隊(duì)列,內(nèi)核地址空間中的內(nèi)部鏈表SystemV形式的信號(hào)量集合,它是一種計(jì)數(shù)器,用來控制對(duì)多個(gè)進(jìn)程共享的資源所進(jìn)行的訪問。它們常常被用作一個(gè)鎖機(jī)制,在某個(gè)進(jìn)程正在對(duì)特定資源進(jìn)行操作時(shí),信號(hào)量可以防止另一個(gè)進(jìn)程去訪問它SystemV形式的共享內(nèi)存段,對(duì)將要在多個(gè)進(jìn)程間映射和共享的內(nèi)存區(qū)域(段)所作的映射,這是IPC最快捷的方式,因?yàn)檫@里沒有什么中介(例如管道、消息隊(duì)列等等)。相反,消息直接從某內(nèi)存段映射,并映射到調(diào)用進(jìn)程的尋址空間。內(nèi)存段可被某進(jìn)程創(chuàng)建,并接著寫到任意數(shù)量的進(jìn)程中去,或者是從任意數(shù)量的進(jìn)程中讀數(shù)據(jù)。網(wǎng)絡(luò)套接字(Berkeley形式)全雙工管道(STREAMS管道)客戶機(jī)-服務(wù)器系統(tǒng)通信Sockets
套接字RemoteProcedureCalls遠(yuǎn)端過程調(diào)用Java遠(yuǎn)程方法調(diào)用RMISocketsAsocketisdefinedasanendpointforcommunication.套接字定義成通訊中的端ConcatenationofIPaddressandport與ip地址和端口相關(guān)Thesocket:1625referstoport1625onhostCommunicationconsistsbetweenapairofsockets.Socket的引入U(xiǎn)nix系統(tǒng)的I/O命令集是以打開-讀/寫-關(guān)閉為模式的。80年代早期,遠(yuǎn)景規(guī)劃局(ARPA)資助了UCB的一個(gè)研究組,讓他們將TCP/IP協(xié)議集成到UNIX系統(tǒng)內(nèi)核中,相當(dāng)于在UNIX系統(tǒng)中引入了一種新型的I/O操作。UNIX用戶進(jìn)程與網(wǎng)絡(luò)協(xié)議的交互作用比用戶進(jìn)程與傳統(tǒng)的I/O設(shè)備相互作用復(fù)雜得多。進(jìn)行網(wǎng)絡(luò)操作的進(jìn)程在不同機(jī)器上,如何建立它們之間的聯(lián)系?存在很多網(wǎng)絡(luò)協(xié)議,如何建立一種通用機(jī)制以支持多種協(xié)議?Socket的引入(2)該研究組成功地解決了這些問題,他們?cè)O(shè)計(jì)了一個(gè)接口,應(yīng)用程序進(jìn)程使用這個(gè)接口可以方便地進(jìn)行通信。該接口就是著名的Berkeley套接字(BerkeleySocket)。相應(yīng)的這個(gè)UNIX系統(tǒng)也被稱為BerkeleyUNIX或BSDUNIX(TCP/IP首先出現(xiàn)在BSD4.1版本中,既Release4.1ofBerkeleySoftwareDistribution)。什么是socketsocket是一種文件描述符。Socket數(shù)據(jù)傳輸是一種特殊的I/O。socket是使用Unix文件描述符(filedescriptor)和其他程序通訊的方式。socket
是進(jìn)行程序間通訊(IPC)的BSD方法。這意味著socket用來讓一個(gè)進(jìn)程和其他的進(jìn)程互通信息,就象我們用電話來和其他的人交流一樣。Socket接口示意圖應(yīng)用程序1應(yīng)用程序2網(wǎng)絡(luò)編程界面,如BerkeleySocket網(wǎng)絡(luò)通信服務(wù)界面,如TCP/IP操作系統(tǒng)內(nèi)核物理介質(zhì),如雙絞線Socket的基本概念端口和端口號(hào)網(wǎng)絡(luò)中可以被命名和尋址的通信端口是操作系統(tǒng)可分配的一種資源,它用于標(biāo)識(shí)通信的進(jìn)程。在TCP/IP協(xié)議的實(shí)現(xiàn)中,端口操作類似于一般的I/O操作,進(jìn)程獲取一個(gè)端口,相當(dāng)于獲取本地唯一的I/O文件,可以用一般的讀寫原語實(shí)現(xiàn)。類似于文件描述符,每一個(gè)端口都擁有一個(gè)端口號(hào)(整形標(biāo)示符)用于區(qū)別不同的端口。端口號(hào)可全局分配或本地分配。Socket的基本概念(2)地址網(wǎng)絡(luò)通信中的通信的兩個(gè)進(jìn)程位于不同的機(jī)器上,兩臺(tái)機(jī)器可能位于不同的網(wǎng)絡(luò),因此需要三級(jí)尋址:如一個(gè)主機(jī)與多個(gè)網(wǎng)絡(luò)相連,必須指定一特定網(wǎng)絡(luò)地址。網(wǎng)絡(luò)上每一臺(tái)主機(jī)都有其唯一的地址。每一主機(jī)上的每一進(jìn)程應(yīng)有在該主機(jī)上的唯一標(biāo)識(shí)符。通常主機(jī)地址由網(wǎng)絡(luò)ID和主機(jī)ID組成,在TCP/IP協(xié)議中用32位整數(shù)值表示,TCP和UDP均使用16位端口號(hào)。網(wǎng)絡(luò)字節(jié)順序計(jì)算機(jī)數(shù)據(jù)存儲(chǔ)有兩種字節(jié)優(yōu)先順序:高位字節(jié)優(yōu)先和低位字節(jié)優(yōu)先,如Intel的是低位字節(jié)優(yōu)先。但是Internet上的數(shù)據(jù)則是以高位字節(jié)優(yōu)先順序在網(wǎng)絡(luò)上傳輸?shù)?。為保證數(shù)據(jù)的正確性和應(yīng)用程序的可移植性,使用標(biāo)準(zhǔn)的轉(zhuǎn)換函數(shù)。Socket的基本概念(3)連接和無連接兩個(gè)進(jìn)程間的通信鏈路稱為連接,連接在內(nèi)部表現(xiàn)為一些緩沖區(qū)和一組協(xié)議機(jī)制,在外部表現(xiàn)出比無連接高的可靠性。半相關(guān)和全相關(guān)網(wǎng)絡(luò)中可以用一個(gè)三元組全局唯一地標(biāo)志一個(gè)進(jìn)程,這個(gè)三元組的結(jié)構(gòu)是:協(xié)議、地地址、地端口。這個(gè)三元組叫做一個(gè)半相關(guān),它指定連接雙方的一方。一個(gè)完整的網(wǎng)間通信需要一個(gè)五元組來標(biāo)識(shí):協(xié)議、本地地址、本地端口號(hào)、遠(yuǎn)地地址、遠(yuǎn)地端口號(hào)。這樣的五元組叫全相關(guān)。Socket的基本概念(4)半雙工與全雙工半雙工:雙向切換的通信方法(每次只能一個(gè)方向傳輸)全雙工:允許完全的、雙向同時(shí)進(jìn)行連接。Socket的分類流式socket(SOCK_STREAM)。它定義了一種可靠的、面向連接的服務(wù),實(shí)現(xiàn)了無差錯(cuò)、無重復(fù)的順序數(shù)據(jù)傳輸。數(shù)據(jù)報(bào)socket(SOCK_DGRAM)。它定義了一種無連接的服務(wù),數(shù)據(jù)通過相互獨(dú)立的報(bào)文進(jìn)行傳輸,是無序的,并且不保證可靠、無差錯(cuò)。原始socket(SOCK_RAW)。主要用于一些協(xié)議的開發(fā)和測(cè)試新的網(wǎng)絡(luò)協(xié)議的實(shí)現(xiàn),可以進(jìn)行比較底層的操作,像對(duì)IP或ICMP直接訪問。理解Socket編程原理將socket機(jī)制與電信局的電話系統(tǒng)機(jī)制類比安裝電話機(jī)=〉建立socket,socket()電話機(jī)號(hào)碼=〉給socket給定一個(gè)端口號(hào),bind()撥電話號(hào)碼=〉connect()拿起聽筒=〉accept()談話=〉recv(),send(),recvfrom(),sendto()掛機(jī)=〉close(),shutdown()理解Socket編程原理將socket機(jī)制與電信局的電話系統(tǒng)機(jī)制類比安裝電話機(jī)=〉建立socket,socket()電話機(jī)號(hào)碼=〉給socket給定一個(gè)端口號(hào),bind()撥電話號(hào)碼=〉connect()拿起聽筒=〉accept()談話=〉recv(),send(),recvfrom(),sendto()掛機(jī)=〉close(),shutdown()SocketCommunicationRemoteProcedureCallsRemoteprocedurecall(RPC)abstractsprocedurecallsbetweenprocessesonnetworkedsystems.Stubs(存根)–
client-sideproxyfortheactualprocedureontheserver.Theclient-sidestublocatestheserverandmarshalls(編組)theparameters.Theserver-sidestubreceives
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 寵物醫(yī)生助理崗位面試問題及答案
- UI 設(shè)計(jì)師崗位面試問題及答案
- 山東省東營市利津一中2025屆化學(xué)高一下期末監(jiān)測(cè)模擬試題含解析
- 2025屆云南省麗江市玉龍縣第一中學(xué)高一化學(xué)第二學(xué)期期末檢測(cè)試題含解析
- 江西省贛州市寧師中學(xué)2025年高二化學(xué)第二學(xué)期期末綜合測(cè)試模擬試題含解析
- 民事審判團(tuán)隊(duì)管理辦法
- 醫(yī)療安全事件管理辦法
- 保安公司公章管理辦法
- 桐鄉(xiāng)疫情出入管理辦法
- 江蘇公司商旅管理辦法
- 2025年武漢市漢陽區(qū)社區(qū)干事崗位招聘考試筆試試題(含答案)
- 接警調(diào)度培訓(xùn)課件
- 2025屆山東煙臺(tái)中考?xì)v史真題試卷【含答案】
- 志愿者心理調(diào)適培訓(xùn)(改)
- 個(gè)人信息保護(hù)與安全培訓(xùn)
- 基于響應(yīng)面法的工藝參數(shù)優(yōu)化研究
- 黨課課件含講稿:《關(guān)于加強(qiáng)黨的作風(fēng)建設(shè)論述摘編》輔導(dǎo)報(bào)告
- 國家開放大學(xué)行管??啤侗O(jiān)督學(xué)》期末紙質(zhì)考試總題庫2025春期版
- GB/T 3280-2015不銹鋼冷軋鋼板和鋼帶
- 1#球磨機(jī)襯板更換及方案
- 常用塑料改性加工工藝
評(píng)論
0/150
提交評(píng)論