The Hydra System - University Of Washington

1y ago
6 Views
3 Downloads
1.36 MB
24 Pages
Last View : 4m ago
Last Download : 3m ago
Upload by : Rosa Marty
Transcription

6The Hydra System6. I IntroductionThis chapter marks the transition from capability-based toobject-based computer systems. Although somewhat subtle,the distinction is one of philosophy. The systems previouslydescribed are primarily concerned with capabilities for memory addressing and protection, although they support abstraction and extension of operating system resources as well. Theprincipal concern of the systems discussed in the remainingchapters is the use of data abstraction in the design and construction of complex systems. In these systems, abstract objectsare the fundamental units of computing. Each system is viewedas a collection of logical and physical resource objects. Userscan uniformly extend the system by adding new types of resources and procedures that manipulate those resources.The subject of this chapter is Hydra, an object-based operating system built at Carnegie-Mellon University. Hydra runson C.mmp (Computer.multi-mini-processor), a multiprocessorhardware system developed at Carnegie. Hydra is significantbecauseof its design philosophy and the flexibility it providesfor users to extend the base system. This flexibility is supported by capability-based addressing.6.2 HydraOverviewIn the early 197Os,a project began at Carnegie-Mellon University to investigate computer structures for artificial intelligence applications. These applications required substantialprocessing power available only on costly high-performance103

The Hydra Systemprocessors.At that time, however, relatively inexpensive minicomputers were becoming available. Therefore, the projectsought to demonstrate the cost performance advantages ofmultiprocessors based on inexpensive minicomputers.The C.mmp hardware was designed to explore one point inthe multiprocessor space [Fuller 781. Its hardware structurediffers from conventional multiprocessing systemsin the use ofminicomputers, the large number of processorsinvolved, andthe use of a crossbar switch for interconnecting processors tomain memory. C.mmp consists of up to 16 DEC PDP-11 minicomputers connected to up to 32 megabytesof shared memory.The memory is organized in 16 memory banks connected tothe processing units by a 16 x 16 crossbar switch.Hydra [Wulf 74a, Wulf 811 is the operating system kernelfor the Cmmp computer system. Hydra is not a complete operating system in the sense of Multics, Tops-20, or Unix’” ;rather, it is a baseon which different operating system facilitiescan be implemented. For example, Hydra allows users to buildmultiple file systems, command languages, and schedulers.Hydra was designed to allow operating system experimentation: flexibility and ease of extension were important goals.Experimentation is often difficult with traditional operatingsystemsbecausenew subsystemsrequire change to a privilegedkernel. Any error in privileged code can causea system failure.To avoid this problem, the designers of Hydra built a kernel onwhich traditional operating system components could be implemented as user programs. This facility has strong implications for the protection system becauseuser programs must beable to protect their objects from unauthorized access.Two fundamental design decisions that permit experimentation on the Hydra system are:ll104the separationof policy and mechanismin the kernel [Levin751,andthe useof an object-basedmodel of computationwith capability protection.The separation of policy and mechanism allows experimentation with policy decisions such as scheduling and memorymanagement. Basic mechanisms, such as low-level dispatching, are implemented in the kernel, while scheduling policy foruser processes can be set by (possibly multiple) higher-levelprocedures. Because this part of the Hydra design is not related to the object system, it will not be described here.

Hydra’s object model and its implementation are the subject ofthe following sections.6.3 Hydra Objects6.3 Hydra Objects andTypesand TypesThe philosophy that “everything is an object” is key to theHydra design. All physical and logical resources available toHydra programs are viewed as objects. Examples of objects areprocedures, procedure invocations (called local name spaces),processes,disks, files, messageports, and directories. Objectsare the basic unit of addressing and protection in Hydra andare addressed through capabilities. The Hydra kernel’s mainresponsibility is to support the creation and manipulation of (1)new object types, (2) instances of those types, and (3) capabilities.Each Hydra object is described by three components:lllA name that uniquely identifies the object from all other objects ever created. The name is a 64-bit number constructedfrom an ever-increasing system clock value and a 4-bit number identifying the processor on which the object was created.A type that determines what operations can be performed onthe object. The type is actually the 64-bit name of anotherobject in the system that implements these operations.A representation that contains the information that makes upthe current state of the object. The representation consists oftwo parts: a data-part and a C-list. The data-part containsmemory words that can be read or written; the C-list containscapabilities for other objects and can only be modifiedthrough kernel operations.Figure 6-l shows an example of a Hydra object. Althoughshown as strings, the object’s name and type are actually 64-bitbinary numbers. The object’s type is the name of another object in the system-a type object. Hydra objects include capabilities as part of their representation. By storing capabilitiesfor other objects in its C-list, an object can be built as a collection of several Hydra objects.Each Hydra type represents a kind of resource. A type objectis the representative for all instances of a given resource. Itcontains:llinformation about the creation of new instances of the type(for example, the initial C-list size and data-part size), andcapabilities for procedures to operate on instances of the type.105

\ig6/nk“i-1

6.4 Processes,PROCESSPROCEDUREThe basic unit of scheduling and execution.Teyu;atic description of an executable pro-Procedures, and LocalName SpacesLOCAL NAME ALTYPEThe dynamic representation of an executingprocedure.A virtual page of C.mmp memory that canbe directly accessed.A synchronization primitive.A messagetransmission and reception facility.A physical I/O device.A module that can make high-level scheduling policy decisions.An object with a data-part only.A basic object with both a C-list and datapart.The representative for all objects of a giventype.Tab/e6- 1: Hydra Kernel-Implemented TypesThus, the type object is generally responsible for creating newobjects of its type and performing all operations on those objects. For example, to create a new messageport, the userissues a CREATEcall to the port type object. The port typeobject creates a new port object, initializes its data-part andC-list appropriately, and returns a capability for the object tothe caller. Table 6-l lists the types directly supported by theHydra kernel for performance reasons.To extend the Hydra operating system, users create newtype objects that support new kinds of resources. A usercreates a new type object by calling the type manager for typeobjects. Figure 6-2 shows the three-level Hydra type hierarchy. Note that all objects are represented by a type object,including the type objects themselves. The special type objectat the root of the hierarchy is called type “type”; that is, bothits name and type are “type.” This specially designated objectis used to create and manipulate type objects.6.4 Processes,Procedures,and Local Name SpacesA process is the basic unit of scheduling in the Hydra sysThere is no explicit process hierarchy; any process cancreate other processesand pass capabilities for those processesto others. The accessrights in a process capability determinewhat operations can be performed on that process-for examtem.107

ple, whether it can be stopped and started. A process withsuitably privileged capabilities can, therefore, schedule theexecution of other processes.The Hydra protection system is procedure-based ratherthan process-based.All Hydra procedures are protected procedures that carry their own execution domains. The currentdomain of a process depends on the procedure that it is executing. The process is the entity in which the procedure is scheduled, and it maintains the chain of procedure calls that haveoccurred within the process.To differentiate a procedure from its executing invocations,Hydra supports two object types: the procedure object and thelocal name space object. A Hydra procedure object is the staticrepresentation of a procedure. The procedure object containsinstructions, constant values, and capabilities that are neededby the procedure for its execution. The capabilities are maintained in the C-list of the procedure object.The procedure object is actually a template from which anactivation is built when the procedure is called. A procedure iscalled through a procedure capability. When a procedure calloccurs, the Hydra kernel createsa local name spaceobject andinitializes it from information contained in the associatedprocedure object. The LNS is the activation record for the executing procedure; it represents the dynamic state of the procedure’s execution. Since procedures can be shared, several LNSobjects can exist to represent different activations of a singleprocedure. Hydra allows both recursive and re-entrant procedures.The LNS defines the dynamic addressing environment for aprocedure. All of the objects that can be directly addressedbythe procedure must be reachable through capabilities in theC-list of the LNS. The capabilities are initially obtained fromtwo places:llthe calledprocedureobject(these are known as inherited capabilities), andcapability actual parameterspassedby the caller.Within the executing procedure, capabilities are addressed bytheir index in the LNS C-list. As the procedure executes, theLNS changes as capabilities are acquired, copied, and deleted.6.5 Hydra OperationsC.mmp is constructed from PDP-11 minicomputers, whichdo not support capabilities or virtual memory addressing.6.5 Hydra Operations

The Hydra SystemTherefore, all Hydra object operations are performed throughcalls to the Hydra kernel. A procedure cannot manipulate thedata-part of an object with processor instructions. Instead, theprocedure performs a kernel operation to copy data from thedata-part into its local memory for examination or modification. Another call to the kernel moves data from local memoryto the object’s data-part. No direct copying is allowed to thec-list.Since a number of operations are common to objects of alltypes, the kernel provides a set of generic operations that can beapplied to any object, assuming the caller has a sufficientlyprivileged capability. Table 6-2 lists some of these object operations, as well as some of the standard capability operations.A typical kernel call might specify several parameters thatare capabilities. In general, any param?ter requiring a capability will also allow a path to a capability. The path allows a userto specify several levels of indirection to the target object. Thepath is specified as a list of C-list indices, leading from a capaCopy data from the data-part of a specifiedobject to local memory.Copy data from local memory to the datapart of a specified object.Append data from local memory to thedata-partof a specifiedobject,extendingthesize of the data-part.Create a new data object (data-part only)initialized with N words from a local segment, and return a capability for the newobject.Create a new universal object (data-part andC-list) and return a capability for the newobject.Copy a specified target capability (e.g., in aspecified object’s C-list) to the current LNS(local addressing environment).Copy a capability from the current LNS to aspecifiedobject C-list slot.Append a capability from the current LNSto a soecified obiect’s C-list, extending theC-list size.’Compare two capabilities.Reduce the rights in a specified capability.Delete a specified capability.Create a new object with the sametype andrepresentation as another object.110Tab/e6-2: Generic Object and Capability Operations

Generic rights64-b/t object nameFigure 6-3:Auxiliary rights6.6 CapabilitiesRightsandHydra Capabilitybility in the current LNS C-list, through a capability in theC-list of the object selected, and so on.6.6 Capabilitiesand RightsHydra capabilities contain an object’s name and accessrights. The accessrights are divided into two fields: a 16-bitgeneric rights field and an 8-bit auxiliary rights field, as illustrated in Figure 6-3. (This figure is somewhat simplified; capabilities have different formats which are shown in detail inSection 6.9.) The generic rights, listed in Table 6-3, can beapplied to any Hydra object. In general, they control permission to execute the generic operations listed in Table 6-2. Theauxiliary rights field is type specific; its interpretation is madeby the procedures that operate on the specific object type.The rights are single-bit encoded, and the presence of a bitalways indicates the granting of a privilege. This conventionsimplifies rights restriction and rights checking and allows theGetDataRts,PutDataRts,AppendDataRtsRequired to get, put, or append data toan paRtsRequired to get, put, or append to anobject’sdata-part.DeleteRtstfi;sr this capability to be deletedfrom aKillRtsModifyRtsEnvRtsUncfRtsCopyRtsAllows deletion of capabilities from theC-list of the namedobject. The capabilityto be deleted in that C-list must haveDeleteRts.Requiredfor any modificationto an object’srepresentation.Environment rights allows a capability tobe storedoutsideof the current LNS.Unconfined rights allows an object addressedthrough a specified object to bemodified.Required to executethe COPY operation.Tab/e6-3. Capability and GenericObject AccessRights111

The Hydra Systemkernel to verify that a capability has sufficient generic and auxiliary rights for a specific operation.A type manager typically has the power, through possessionof a special capability, to gain additional privileges to an objectof its type passed by a caller. This facility, known as rightsamplification, will be described in Section 6.7. In somecasesacaller may wish to restrict a subsystem’s use of capability parameters and the objects they address. In particular, the usermay wish to ensure that a called procedure does not:lll112modify the representationof an object,retain the capabilityfor an objectfollowing return of the call,orcopy information from an objectinto any memorythat couldbe sharedwith other programs.These restrictions can be guaranteed through the use of threespecial rights listed in Table 6-3: modify rights (ModifyRts),environment rights (EnvRts), and unconfined rights (UncfRts)[Cohen 75, Almes 801.ModifyRts is required in any capability that is used to modify the representation of an object. For example, in order towrite to an object’s data-part, the executing procedure musthave a capability containing both PutDataRts and ModifyRts.By removing ModifyRts from a capability parameter, a program can guarantee that a called procedure will not modify thatobject because,unlike the other generic rights, ModifyRts cannot be gained through amplification.EnvRts is required for a procedure to remove a capabilityfrom its local name space. When a program removes EnvRtsfrom a capability that is passed as a parameter, it guaranteesthat no copies of the capability can be retained by the calleddomain following its return. Without EnvRts, it is impossiblefor a called procedure to save a capability in a local object’sC-list to be used later. Although a capability without EnvRtscan be passedto another procedure as a parameter, that procedure will once again find a capability in its LNS without EnvRtsand will not be able to save it. EnvRts also cannot be gainedthrough amplification.Although EnvRts prohibits a procedure from saving a capability, it does not prohibit the procedure from copying all ofthe possibly confidential information from that object into anew object. UncfRts, when removed from a procedure capability, restricts the storage of information by the called proce-

6.7 Supportingdure. If a procedure is called using a capability lackingUncfRts, all capabilities copied from the procedure object intothe LNS will have UncfRts and ModifyRts removed. That is,the procedure will be forced to execute in an environment inwhich it cannot modify any of its own objects or any objectsreachable through its own capabilities. Therefore, it will not beable to maintain any permanent state following its return. Theonly objects that can be modified by the call are those passedby capability parameters that contain ModifyRts.6.7 SupportingProtectedSubsystemsPro tee ted Subsys ternsA major goal of the Hydra system is the support of theobject-based programming methodology. That is, facilities areadded to the operating system by creating new object types. Atype manager, represented by a Hydra type object, is a modulethat creates new instances of its type and performs operationson those instances. The objective of this methodology is tolocalize knowledge of the representation and implementationof each type to its type manager. Users can call type managerprocedures to create and manipulate objects, but cannot directly accessan object’s representation.To support this programming style, a type manager must beable to:lllcreate new object instances of its type,return a capability for a new instance to the caller requestingits creation (this capability identifies the object but must notallow its owner to accessthe object’s representation directly),andretain the ability to accessthe object’s representation whenpassed a capability for an object it created.The type manager must, therefore, be able to restrict the rightsin a capability that it returns to a caller and later amplify thoserights when the capability is returned. The amplified rightspermit the type manager to examine and modify the object’srepresentation. Amplification occurs during procedure callsthrough a special type of capability owned by the type managercalled a template.6.7.1 TemplatesThere are two common operations that the kernel performsduring Hydra procedure calls. First, the kernel verifies thatparameter capabilities have the expected type and required113

The Hydra System114rights for the operation implemented by the procedure. Second, the kernel can, under controlled circumstances, amplifythe rights passedin a capability parameter. This facility is required to allow subsystemsto perform operations on an objectthat are not permitted to the user of the object.Both the type checking and amplification facilities are provided through a mechanism called capability templates. A template is a kind of capability used by type managers to implement type systems. Templates do not addressobjects, but givethe possessorspecial privileges over objects or capabilities of aspecified type. As the name implies, the template capability isa form used to verify the structure of a capability or to construct a capability. Templates are stored in procedure C-listsand can be manipulated with capability operations. There arethree types of templates: parameter templates, amplificationtemplates, and creation templates.Parametertemplates are used to verify the capability parameters passed to a procedure. The procedure object’s C-list contains parameter templates as well as capabilities for procedurelocal objects. When a procedure call occurs, the kernel buildsthe LNS C-list from the procedure object’s C-list. The procedure’s C-list contains its own capabilities that are copied directly to the LNS C-list and parameter templates that represent slots to be filled in with capabilities passedas parameters.The parameter template contains a type field and a requiredrights field. When copying a capability parameter to the LNS,the kernel verifies that the type matches the template’s typefield and that the rights in the capability are at least asprivileged as those required by the template. Special templatescan also be provided that will match any type or rights.The procedure C-list can also contain amplification templates. An amplification template contains a type field and tworights fields: required rights and new rights. The type andrequired rights fields of the amplification template are used tovalidate the capability parameter in the sameway that a parameter template is used. However, once validated, the kernelstores the capability in the LNS with the new rights field specitied in the amplification template. These rights can either amplify or restrict rights, as specified by the template.Amplification templates can only be created by the owner ofa capability for a type object. In general, only a type object willown the amplification templates for its own type. However, itis possible for a subsystem to own amplification templates forobjects of several types. Figure 6-4 illustrates a Hydra proce-

6.7 SupportingProtected Subsystems CALL (SEND-MESSAGE BILITY)tCapabi/ity AAmpiificationtempiatetCapabiiityAiAmplifiedport gure 6-4:L NS C-iistC-iistHydra ProcedureCalldure call that uses both parameter and amplification templates.The call sends a message,identified by a messageobject capability, to a port identified by a port object capability. The callis made to the port type manager that must manipulate therepresentation of the port object to indicate that a messagehas arrived. In this example, the C-list of the procedure object1 contains two inherited capabilities that are copied directly tothe new LNS. The procedure C-list has an amplification template that is merged with the port capability actual parameter.The merge operation verifies the type and rights of the capability and stores a capability in the LNS with amplified rights.The procedure C-list also has a parameter template that ismerged with the messagecapability parameter. In this case,the merge operation simply verities the type and accessrightsof that capability and then copies the capability actual parameter into the LNS.The third template type, the creation template, is not used inthe procedure call mechanism, but can be used to create a newinstance of a specific type. A creation template contains anobject type and rights. Using the CREATEkernel operation,an object with the specified type and rights can be created. Ingeneral, subsystems do not provide creation templates; theyrequire that a user call the subsystem in order to create a newinstance. The subsystem then usesits private creation templateto create the new instance, which the subsystem initializes appropriately. The subsystem might then restrict some of therights in the capability returned for the new object and passthat restricted capability to the user.115

The Hydra System6.7.2 TypecallsA Hydra type manager can be thought of as a collection ofprocedures that has the ability, usually through possessionoftemplates, to manipulate the representation of a particular object type. A program calls these type management proceduresusing procedure capabilities in the current LNS.In fact, the concept of type manager is formalized by theHydra TYPECALLmechanism. A TYPECALLis a call to anobject’s type manager that is made through the capability forthe object itself. Thus, a procedure capability is not needed fora TYPECALL;only a capability for an object is needed. Theprocedure capability is located in the C-list of the object’s typemanager, which can be found indirectly through the object.Figure 6-5 shows an example of the TYPECALLmechanism.invokes the second procedure in the type objectThe TYPECALLfor the specified port object. Two parameters are passedto theTYPECALL,the capability for the port object and the capabilityfor a messageobject. The capability for the port object is listedtwice: once as the object through which the TYPECALLis madeand once as a parameter to the TYPECALL.The TYPECAUmechanism supports abstraction in severalways. First, the owner of an object does not need to possesscapabilities for its type object or for procedure objects tomanipulate that object. In effect, a TYPECALLrequests thatthe object perform an operation on itself. Second, if all objectssupport a common set of generic operations at identical typeindices, a user can find information without knowing an object’s type. For example, if all type objects implement a “tellme your type name” operation as the first procedure and “display yourself” as the second, then a user can apply those operations equally on all objects.6.8 Hydra Object StorageSystemA Hydra object, once created, has a lifetime independent ofthe process that created it. As long as a capability exists for anobject, that object will be retained by Hydra and made available when referenced. Hydra stores most long-lived objects ondisk when they are not in use and brings them into primarymemory when a reference is made. Given a capability for anobject, a user can perform any legitimate operation withoutconcern for whether or not the object is currently in primarymemory.

cuQ29-

The Hydra SystemHydra, thus, provides a uniform single-level object addressing environment to its users. Although objects can be stored inprimary or secondary memory, the location of an object is invisible to the Hydra user. The Hydra kernel must, therefore,manage the movement of objects between primary and secondary storage. The mechanism for storing and locating objects isthe Hydra Global Symbol Table.The Global Symbol Table (GST) contains informationabout every object reachable by the kernel. The GST is dividedinto two parts: the Active GST and the Passive GST. TheActive GST maintains information about objects stored in primary memory, while the Passive GST maintains informationabout objects stored in secondary memory. An object is said tobe active or passive depending on whether it is in primary orsecondary memory.As previously stated, the representation of a Hydra objectconsists of its C-list and data-part. In addition, the kernel constructs data structures called the active fixed part and passivejixed part that contain state information for active and passiveobjects, respectively. Table 6-4 shows the formats of the twofixed parts. As their names imply, the fixed parts have a fixedsize for easy storage and access.Many object operations can besatisfied by reference to the fixed part alone, and it is possiblefor the active fmed part to be in primary memory while therepresentation is still in secondary memory. In this case, theobject’s fixed part is said to be active while the representationis passive.When a new object is created, Hydra stores its representa-Passive Fixed PartGlobal Object NameObject FlagsCurrent Version Disk AddressPrevious Version Disk AddressType NameColor (for garbage collection)118Tab/e6-4Active Fixed PartGlobal Object NameObject FlagsCurrent Version Disk AddressPrevious Version Disk AddressTotal Reference CountActive Reference CountType Object IndexChecksum of Fixed PartStateC-List Primary Memory AddressData-Part Primary Memory AddressMutex Semaphore (object lock)Time Stamp (of last access)Color (for garbage collection)Hydra Active and Passive Fixed Parts

tion in primary memory and allocates and initializes an activefured part. The kernel stores the object’s active fixed part in adata structure called the Active GST directory. The ActiveGST directory is organized as an array of 128 headers of linkedlists, as shown in Figure 6-6. Each linked list contains activefixed parts, and the appropriate list for an object’s fixed part isdetermined by a hashing function on the object’s 64-bit name.The division--ofxhe -Active.- GST directoryinto 128 listsserves two purposes. First, it speedsup the GST search, sincethe linked lists can be kept relatively short. Second, it allowsparallelism in the accessof the active fixed parts. Only oneprocessor can search a linked list and accessa specific activefixed part at a time. By dividing the Active GST into 128 lists,a lock can be maintained separately for each list, allowing simultaneous searchesof different lists.There are two events that causea Hydra object to be copiedto secondary memory. First, passivation can be triggered by akernel process that removes objects from primary memory according to their last reference times. This is analogous to swapping in traditional systems. Second, a program can perform anexplicit UPDATEfunction, requesting that an object’s representation be written to disk. In this case, the object remainsactive with the guarantee that the active and passive copies areidentical. The UPDATEoperation is used to ensure consistencyover system crashes, because any active representationwill be lost following a crash. UPDATEis used primarily bytype managers.Two versions of each object are kept on secondary storActive Fixed PartsLOCKi127LinkElFigure 6-6:Active Fixed Part Directory119

The Hydra Systemage-a current version and a previous version. When an objectis passivated, its representation is written to secondary storage,destroying the older of the two versions. If any failure occursduring the write operation, the newer version on disk is leftintact. Following successful completion of the UPDATE,thenewly passivated image becomesthe current version, with theformer current version becoming the previous version.Passive objects are stored in the Passive GST. A passiveobject is stored as a contiguous array of disk blocks containingthe passive fured part, data-part, and C-list. To locate a passiveobject, a search of the Passive GST direc

erating system in the sense of Multics, Tops-20, or Unix'" ; rather, it is a base on which different operating system facilities can be implemented. For example, Hydra allows users to build multiple file systems, command languages, and schedulers. Hydra was designed to allow operating system experimenta-

Related Documents:

2 www.Hydra-Cell.com. Hydra-Cell Pumps for Chemical Processing. Hydra-Cell Standard Pumps, Hydra-Cell Metering Pumps, and Hydra-Cell T80 Series Pumps. Hydra-Cell positive displace-ment pumps are available in 16 pump models covering a wide range of flows and pressures. Eight (8) standard Hydra

May 02, 2018 · D. Program Evaluation ͟The organization has provided a description of the framework for how each program will be evaluated. The framework should include all the elements below: ͟The evaluation methods are cost-effective for the organization ͟Quantitative and qualitative data is being collected (at Basics tier, data collection must have begun)

Silat is a combative art of self-defense and survival rooted from Matay archipelago. It was traced at thé early of Langkasuka Kingdom (2nd century CE) till thé reign of Melaka (Malaysia) Sultanate era (13th century). Silat has now evolved to become part of social culture and tradition with thé appearance of a fine physical and spiritual .

On an exceptional basis, Member States may request UNESCO to provide thé candidates with access to thé platform so they can complète thé form by themselves. Thèse requests must be addressed to esd rize unesco. or by 15 A ril 2021 UNESCO will provide thé nomineewith accessto thé platform via their émail address.

̶The leading indicator of employee engagement is based on the quality of the relationship between employee and supervisor Empower your managers! ̶Help them understand the impact on the organization ̶Share important changes, plan options, tasks, and deadlines ̶Provide key messages and talking points ̶Prepare them to answer employee questions

Dr. Sunita Bharatwal** Dr. Pawan Garga*** Abstract Customer satisfaction is derived from thè functionalities and values, a product or Service can provide. The current study aims to segregate thè dimensions of ordine Service quality and gather insights on its impact on web shopping. The trends of purchases have

HyDra Waterstop HyDra Liquid Rubber HyDra FB Membrane 3080 HyDra FB Tape T120S Scale Adress: Hallsbergsterminalen 11-13 694 35 Hallsberg Sverige Kontakt: Tel: 010-585 21 00 E-post: info@hydratec.se Do not scale 04.11.2019 09:20:05 Detaljlösningar HyDra System Hissgrop eftermonterad Hissgrop förmonterat 1A 1B 2 Detalj platta/vägg .

Chính Văn.- Còn đức Thế tôn thì tuệ giác cực kỳ trong sạch 8: hiện hành bất nhị 9, đạt đến vô tướng 10, đứng vào chỗ đứng của các đức Thế tôn 11, thể hiện tính bình đẳng của các Ngài, đến chỗ không còn chướng ngại 12, giáo pháp không thể khuynh đảo, tâm thức không bị cản trở, cái được