text:
|Publication number
|Publication type
|Application number
|Publication date
|Mar 20, 2007
|Filing date
|Mar 19, 2004
|Priority date
|Aug 28, 2000
|Fee status
|Also published as
|Publication number
|Nicholas Shaylor
|Original Assignee
|Sun Microsystems, Inc.
|Export Citation
|BiBTeX, EndNote, RefMan
|Patent Citations (30), Referenced by (6), Classifications (13), Legal Events (2)
|External Links: USPTO, USPTO Assignment, Espacenet
This application is related to patent application Ser. No. 09/649,370 now U.S. Pat. No. 6,865,579, entitled "A SIMPLIED MICROKERNEL CONTROL BLOCK DESIGN," with N. Shaylor as inventor; patent application Ser. No. 10/322,382, entitled "AN OPERATING SYSTEM ARCHITECTURE EMPLOYING SYNCHRONOUS TASKS," having N. Shaylor as inventor; patent application Ser. No. 09/498,606, now U.S. Pat. No. 6,832,266, entitled "A SIMPLIED MICROKERNEL APPLICATION PROGRAMMING INTERFACE," filed Feb. 7, 200, and having N. Shaylor as inventor; patent application Ser. No. 09/649,130, now abandoned, entitled "A MICROKERNEL APPLICATION PROGRAMMING INTERFACE EMPLOYING HYBRID DIRECTIVES," having N. Shaylor as inventor; and patent application Ser. No. 09/649,199, now abandoned, entitled "A NON-PREEMPTIBLE MICROKERNEL," having N. Shaylor as inventory. These applications are assigned to Sun Microsystems, Inc., the assignee of the present invention and are hereby incorporated by reference, in their entirety and for all purposes.
This application is a divisional of U.S. patent application Ser. No. 09/650,370, entitled "GENERAL DATA STRUCTURE FOR DESCRIBING LOGICAL DATA SPACES," of Nicholas Shaylor, filed Aug. 28, 200, which issued as U.S. Pat. No. 6,728,722 on Apr. 27, 2004, and which is incorporated herein by reference in its entirety.
1. Field of the Invention
The present invention relates to data structures, and, more particularly, to a method of referencing a data structure and transferring data between two different data structures.
2. Description of the Related Art
An operating system is an organized collection of programs and data that is specifically designed to manage the resources of computer system and to facilitate the creation of computer programs and control their execution on that system. The use of an operating system obviates the need to provide individual and unique access to the hardware of a computer for each user wishing to run a program on that computer. This simplifies the user's task of writing of a program because the user is relieved of having to write routines to interface the program to the computer's hardware. Instead, the user accesses such functionality using standard system calls, which are generally referred to in the aggregate as an application programming interface (API).
A current trend in the design of operating systems is toward smaller operating systems. In particular, operating systems known as microkernels are becoming increasingly prevalent. In certain microkernel operating system architectures, some of the functions normally associated with the operating system, accessed via calls to the operating system's API, are moved into the user space and executed as user tasks. Microkernels thus tend to be faster and simpler than more complex operating systems.
These advantages are of particular benefit in specialized applications that do not require the range of functionalities provided by a standard operating system. For example, a microkernel-based system is particularly well suited to embedded applications. Embedded applications include information appliances (personal digital assistance (PDAs), network computers, cellular phones, and other such devices), household appliances (e.g., televisions, electronic games, kitchen appliances, and the like), and other such applications. The modularity provided by a microkernel allows only the necessary functions (modules) to be used. Thus, the code required to operate such a device can be kept to a minimum by starting with the microkernel and adding only those modules required for the device's operation. The simplicity afforded by the use of a microkernel also makes programming such devices simpler.
With regard to the accessing and transfer of data, efficiency can also be had via the thoughtful architecting of data structures. In general, computer systems have a number of ways to represent contiguous logical memory in discontinuous data structures. This is of particular importance when a producer and a consumer of data differ in the techniques employed in representing such data. For example, when such differences exist, a certain amount of time and effort must be expended in marshalling the requisite data due to the reformatting of the data thus necessitated. Such marshalling is often inefficient both in terms of the time required by such operations and the memory space the operations consume.
A data structure and method according to the present invention avoids the shortcomings historically encountered in transferring data between a producer of such data and a consumer of that data by employing a technique for abstracting the data's description that provides an automatic and efficient way of converting from one data representation to another.
In one embodiment of the present invention, a data structure is disclosed. The data structure includes a data descriptor record. In turn, the data descriptor record includes a type field, a base address field, an offset field and a length field. The type field may be configured, for example, to indicate a data structure type. The data structure type may be configured to assume a values indicating one of a contiguous buffer, a scatter-gather list and a linked list structure, among other such data structures. The base address field may be configured, for example, to store a base address, with the base address being a starting address of a secondary data structure associated with the data descriptor record. The offset field may be configured, for example, to indicate a starting address of data within a secondary data structure pointed to by a base address stored in the base address field. The length field is configured to indicate a length of data stored in a secondary data structure pointed to by a base address stored in the base address field.
In one aspect of the embodiment, the data descriptor record further includes an in-line data field, a context field, and an in-line data buffer. The in-line data field may be configured, for example, to store information regarding the in-line data buffer. The context field may be configured, for example, to store information regarding an address space type in which the data descriptor record exists. The in-line data buffer may be configured, for example, to store data contiguously with the data descriptor record. The information regarding the in-line data buffer may include, for example, a length of the in-line data buffer. The length of the in-line data buffer may be made to be capable of assuming only set values or a variable value. The length of the in-line data buffer may be configured such that when the length assumes a non-zero value to indicate that the in-line data buffer is used.
In one embodiment of the present invention, a method of transferring data is disclosed. The method includes storing the data in a first data structure, copying the data from the first data structure to a second data structure, and reading the second data structure. In this arrangement, the first data structure is in a first data structure format and the second data structure is in a second data structure format. The copying includes re-formatting the data from the first data structure format to the second data structure format.
The foregoing is a summary and thus contains, by necessity, simplifications, generalizations and omissions of detail; consequently, those skilled in the art will appreciate that the summary is illustrative only and is not intended to be in any way limiting. Other aspects, inventive features, and advantages of the present invention, as defined solely by the claims, will become apparent in the non-limiting detailed description set forth below.
The present invention may be better understood, and its numerous objects, features, and advantages made apparent to those skilled in the art by referencing the accompanying drawings.
The use of the same reference symbols in different drawings indicates similar or identical items.
The following is intended to provide a detailed description of an example of the invention and should not be taken to be limiting of the invention itself. Rather, any number of variations may fall within the scope of the invention which is defined in the claims following the description.
Complex programs such as operating systems are often required to provide the ability to represent logically contiguous data using a number of discontinuous buffers or some other method of allocating memory. Examples of such data structures include scatter-gather lists of various formats and buffer chains. As is known by those of skill in the art, scenarios exist in which data is initially stored in a data structure or format that differs from that which the data is expected to finally assume, or may need to be in a format particular to a given application. A data structure according to embodiments of the present invention addresses these needs. Referred to herein as a data descriptor record or DDR, this data structure is useful in representing such data by proxy.
An important advantage of a DDR according to the present invention is the ability to delay the conversion of data from one format (the data's initial format) to another (the data's final format). This results in the ability to perform "just-in-time" (also referred to herein as "lazy") data format conversion. In turn, such a paradigm minimizes the amount of copying required to transfer the data being copied (or even eliminates the need to copy data) in at least two ways.
First, the data may need to be converted from one format to another during the course of processing the data (e.g., when the data's producer stores the data in a format which differs from that employed by the data's consumer). An example of such requisite data format conversion might be, for example, the case in which data is transferred from a network interface to a hard disk in a computer system. The data might be stored by the network interface using a buffered format (e.g., Internet Protocol packets stored in "mbufs"), but need to be in a scatter-gather list format (using fixed-length blocks) for writing to the hard disk (allowing system hardware to manipulate the data in a common format). One way to address this situation is for the producer (the network interface) and the consumer (the hard disk) to employ a mutually convenient intermediate format (e.g., a single contiguous buffer). However, the use of an intermediate storage area is less than efficient. By using an extra buffer, the amount of memory required is increased, as is the time consumed by copying the data twice (from producer format to intermediate format and intermediate format to consumer format, and vice versa). Another option is for one of the two (producer or consumer) to directly convert the data to or from a common format.
A DDR according to embodiments of the present invention address such issues by allowing the given operating system to provide a copy process capable of converting any one format supported by the operating system (e.g., those formats supported by the DDR employed) into any other such format. Such a process exists independently of the producer and consumer processes, and so ensures that, if a new format is implemented by one or more processes, that format can be dealt with by simply modifying the copy process. This has the benefit of isolating the modifications to the one module (that of the copy process). Moreover, the use of a copy process provides a single process which can both copy and convert the data's format in a single operation.
Second, a copy process according to embodiments of the present invention minimizes the amount of data to be copied to only that which the consuming process requires (e.g., in the case of a "fetch" or "store" operation, as described subsequently herein). The need to copy data may even be eliminated in some circumstances by designing the consumer process to directly accept the producer's format (e.g., by passing a reference and allowing the consumer process access the data using a different format). This is referred to in the exemplary operating system described below as a fast-path message copy operation, and, as described therein, is a special case of message passing that can be provided to speed a critical section in the given processes (i.e., a critical code path). Thus, a DDR according to embodiments of the present invention presents no disadvantage when compared to highly integrated approaches because such a DDR is capable of supporting a close coupling between the data's producer and consumer.
A DDR according to embodiments of the present invention is described below in the framework of an exemplary operating system architecture (more specifically, a microkernel). The DDR's general composition and advantages are thus described in terms of the functionality provided in such an environment.
An Exemplary Operating System Architecture Employing a Data Descriptor
It will be noted that the variable identifier "N", as well as other such identifiers, are used in several instances in
In an operating system architecture such as that shown in
A microkernel such as microkernel 100 is simpler than traditional operating systems and even traditional microkernels because a substantial portion of the functionality normally associated with the operating system is moved into the user space. Microkernel 100 provides a shorter path through the kernel when executing kernel functions, and contains fewer kernel functions. As a result, the API of microkernel 100 is significantly simpler than comparable operating systems. Because microkernel 100 is smaller in size and provides shorter paths through the kernel, microkernel 100 is generally faster than a similar operating systems. This means, for example, that context switches can be performed more quickly, because there are fewer instructions to execute in a given execution path through the microkernel and so fewer instructions to execute to perform a context switch. In effect, there is less "clutter" for the executing thread to wade through.
Moreover, microkernel 100 is highly modular as a result of the use of user tasks to perform actions previously handled by modules within the operating system. This provides at least two benefits. First, functionality can easily be added (or removed) by simply executing (or not executing) the user-level task associated with that function. This allows for the customization of the system's architecture, an important benefit in embedded applications, for example. Another advantage of microkernel 100 is robustness. Because most of the system's components (software modules) are protected from each other, a fault in any one of the components cannot directly cause other components to fail. By this statement, it is meant that an operating system component cannot cause the failure of another such component, but such a failure may prevent the other component from operating (or operating properly). In a traditional operating system, a fault in any one system component is likely to cause the operating system to cease functioning, or at least to cease functioning correctly. As the quantity of system code continues to grow, the frequency of such events increases. Another reason for the robustness of microkernel 100 is that the construction of a component of microkernel 100 is often simpler than that of a traditional operating system. This characteristic is treated with particular importance in microkernel 100, and the effect is to allow subsystems that heretofore had been difficult to understand and maintain, to be coded in a clear and straightforward manner. Closely coupled with this characteristic is that the interfaces between the components are standardized in a way that allows them to be easily reconfigured.
Exemplary Directives
Directives defined in microkernel 100 may include, for example, a create thread directive (Create), a destroy thread directive (Destroy), a send message directive (Send), a receive message directive (Receive), a fetch data directive (Fetch), a store data directive (Store), and a reply directive (Reply). These directives allow for the manipulation of threads, the passing of messages, and the transfer of data.
The Create directive causes microkernel 100 to create a new thread of execution in the process of the calling thread. In one embodiment, the Create command clones all the qualities of the calling thread into the thread being created. Table 1 illustrates input parameters for the Create directive, while Table 2 illustrates output parameters for the Create directive (wherein "ipn" indicates input parameter n, and "rpn" indicates output parameter n).
Input parameters for the Create directive.
Input Parameter
A true/false flag for running the new thread first
Initial execution address for new thread
Initial stack pointer for new thread
Output parameters for the Create directive.
Result Parameter
The result code
The thread ID of the new thread
The Destroy directive causes microkernel 100 to destroy the calling thread. Table 3 illustrates input parameters for the Destroy directive, while Table 4 illustrates output parameters for the Destroy directive.
Input parameters for the Destroy directive.
Input Parameter
TABLE 4 Output parameters for the Destroy directive Result Parameter Description rp1 The result code rp2 Undefined
It will be noted that the output parameters for the Destroy directive are only returned if the Destroy directive fails (otherwise, if the Destroy directive is successful, the calling thread is destroyed and there is no thread to which results (or control) may be returned from the Destroy call).
The Send directive causes microkernel 100 to suspend the execution of the calling thread, initiate an input/output (I/O) operation and restart the calling thread once the I/O operation has completed. In this manner, a message is sent by the calling thread. The calling thread sends the message (or causes a message to be sent (e.g., DMA, interrupt, or similar situations) to the intended thread, which then replies as to the outcome of the communication using a Reply directive. Table 5 illustrates Input parameters for the Send directive, while Table 6 illustrates output parameters for the Send directive.
Input parameters for the Send directive.
Input Parameter
A pointer to an I/O command structure (message)
Output parameters for the Send directive.
Result Parameter
The result code
The Receive directive causes microkernel 100 to suspend the execution of the calling thread until an incoming I/O operation is presented to one of the calling thread's process's I/O channels (the abstraction that allows a task to receive messages from other tasks and other sources). By waiting for a thread control block to be queued to on of the calling thread's process's I/O channels, a message is received by the calling thread. Table 7 illustrates input parameters for the Receive directive, while Table 8 illustrates output parameters for the Receive directive.
Input parameters for the Receive directive.
Input Parameter
A pointer to an I/O command structure (message)
The input channel number
Output parameters for the Receive directive.
Result Parameter
The result code
The Fetch directive causes microkernel 100 (or a stand-alone copy process, discussed subsequently) to copy any data sent to the receiver into a buffer in the caller's address space. Table 9 illustrates input parameters for the Fetch directive, while Table 10 illustrates output parameters for the Fetch directive.
Input parameters for the Fetch directive.
Input Parameter
A pointer to an I/O command structure (message)
A buffer descriptor
Output parameters for the Fetch directive.
Result Parameter
The result code
The length of the data copied to the Buffer descriptor
The Store directive causes microkernel 100 (or a stand-alone copy process, discussed subsequently) to copy data to the I/O sender's address space. Table 11 illustrates input parameters for the Store directive, while Table 12 illustrates output parameters for the Store directive.
Input parameters for the Store directive.
Input Parameter
A pointer to an I/O command structure (message)
A buffer descriptor pointer for the Store directive
Output parameters for the Store directive.
Result Parameter
The result code
The length of the data copied to the buffer
The Reply directive causes microkernel 100 to pass reply status to the sender of a message. The calling thread is not blocked, and the sending thread is released for execution. Table 13 illustrates input parameters for the Reply directive, while Table 14 illustrates output parameters for the Reply directive.
Input parameters for the Reply directive.
Input Parameter
A pointer to an I/O command structure (message)
Output parameters for the Reply directive.
Result Parameter
The result code
The preceding directives allow tasks to effectively and efficiently transfer data, and manage threads and messages. The use of messages for inter-task communications and in supporting common operating system functionality are now described.
Message Passing Architecture
Type field 410 indicates the data structured used by DDR 330 to transfer data to the receiving task. Type field 410 thus indicates how other fields within DDR 330 (described below) are to be interpreted. For purposes of illustration, values that type field 410 may assume values such as CONTIGUOUS_BUFFER, SCATTER_GATHER_LIST and LINKED_LIST. For example, a contiguous buffer (designated by type field 410 being set to CONTIGUOUS_BUFFER) can be described, for example, using only a pointer and length information. In contrast, a scatter-gather data structure of some sort is indicated by type field 410 being set to SCATTER_GATHER_LIST.
Base address field 440 is the primary field that is used to "point" at the data. For example, in the case of type field 410 assuming the value of CONTIGUOUS_BUFFER, base address field 440 contains the memory address of the buffer. In the case of type field 410 being SCATTER_GATHER_LIST, base address field 440 contains the memory address of the scatter-gather list.
Offset field 450 is the secondary field that indicates the location of the data within the data structure. For example, in the case of type field 410 assuming the value of CONTIGUOUS_BUFFER, offset field 450 is not absolutely required in this case, because a base address may be modified to take into account any offset that is necessary to access the desired data. However, it is conceptually simpler to separate these functions (i.e., base address and offset), than to combine them. In the case of type field 410 being SCATTER_GATHER_LIST, offset field 450 contains the offset from the start of the data described by the scatter-gather list, where the data of interest begins. Offset field 450 eliminates the need to produce a new scatter-gather list to describe a subset of data described by another scatter-gather list.
Length field 460 simply stores the length of the data of interest. For example, in the case of type field 410 assuming the value of CONTIGUOUS_BUFFER, length field 460 stores the length of the data of interest (i.e., that data starting at [base address+offset] and ending at [base address+offset+length]). Length field 460 is thus used in all formats.
Other fields of DDR 330 include in-line data field 420 and context field 430. One useful configuration is one in which the data is placed directly after the DDR, in some sense being part of the DDR. This can be accomplished using fixed-length data fields (in which case only type field 410 need be used) and variable-length data fields (in which case only type field 410 and length field 460 need be used). It will be noted that such variable-length data fields are normally quantized by defining the data fields in terms of a set of standard possible sizes, such that the data is allowed to grow by units of a pre-defined amount. This simplifies the description and handling of such data.
A third option is to have the data be of variable length (likely with the aforementioned quantization), but used a buffer measured in fixed quanta of memory space (i.e., of a number of unit lengths). In this scenario, the data is still placed directly following DDR, but the amount of space for the data storage is reserved in quantized "chunks." An advantage of this approach is the ability to tailor the storage mechanism to a particular application. For example, current CRUs can save and restore several registers at one time. This might lead to the transferring of data into and out of the register file in 32 byte chunks, which could be precisely handled by such a quantized approach (e.g., using 32 byte chunks as the quanta for optional in-line buffer 470).
In a quantized scenario, such as that depicted as being used in the exemplary operating system described herein (i.e., microkernel 100), in-line data field 420 is used to indicate when the data being transferred is stored within DDR 330 (i.e., when the data is "in-line data" in optional in-line buffer 470). Alternatively, in-line data field 420 may be used to indicate not only whether in-line data exists, but also the amount thereof. Storing small amounts of data (e.g., 32, 64 or 96 bytes) in optional in-line buffer 470 is an efficient way to transfer such data. In fact, microkernel 100 may be optimized for the transfer of such small amounts of data.
For example, because optional in-line data 470 is of some fixed size (as is control data area 400), the amount of data to be copied when sending or receiving a message is well known. If multiple word lengths are used, buffers used in the transfer are word-aligned and do not overlap. Thus, when using in-line data, the copy operation devolves to simply copying a given number of words. This operation can be highly optimized, and so the time to move small messages can be made very short. The efficiency and speed of this operation can be further enhanced by copying the data directly from the sending task to the receiving task, where possible (this operation is also referred to herein as a fast-path message copy operation). These operations are discussed subsequently. In contrast, a larger amount of data would prove cumbersome (or even impossible) to transfer using optional in-line buffer 470, and so is preferably transferred using a data structure such as those depicted in
Data stored in-line in DDR 330 is stored in optional in-line buffer 470. Optional in-line buffer 470 can be of any size appropriate to the processor, hardware architecture and operating system employed. The possible sizes of optional in-line buffer 470 are governed by environmental factors such as word size and other such factors. For example, optional in-line buffer 470 may be defined as having zero bytes, 32 bytes, 64 bytes, or 96 bytes of in-line data. Obviously, the buffer size of zero bytes would be used when simply passing commands or when using alternative data structures to transfer data, as previously noted. As will be apparent to one of skill in the art, some limit to the amount of data that optional in-line buffer 470 can hold will exist as a result of optional in-line buffer 470 being made to fit into a thread control block (itself being of definite extent). Thus, optional in-line buffer 470 can be smaller than a given amount, but no larger, in order to predictably fit into a thread control block. This maximum is preferably on the order of tens of bytes.
Context field 430 is reserved for system use and indicates the operating system context in which DDR 330 exists. The four standard DDR fields are sufficient to distinguish between different address space types (e.g., between physical and virtual addresses). Context field 430 may be used to distinguish between different instances of the same basic type. For example, context field 430 may be used to distinguish between different virtual address spaces (e.g., for two or more different processes in a virtual memory environment). In such a scenario, context field 430 can be used to indicate to which virtual address space the given base address and length refer. Various possible data structures (also referred to as secondary data structures) are shown in
In-line data field can also be configured to support multiple values, and so indicate the number of blocks of in-line data employed (e.g., 32, 34, 64, or 96 bytes, as represented by 1, 2, or 3, respectively, in the manner described previously). In the case of in-line data, base address field 440 and offset field 450 need not be used, as the location of the data is known (i.e., the data being in optional in-line buffer 470). The value held in length field 460 represents the logical length of the data being transferred, and is normally used to indicate the extent of "live" (actual) data stored in optional in-line buffer 470 or elsewhere. Thus, length field 460 can be used in multiple circumstances when defining the storage of data associated with message 300.
Exemplary Operations Using A Message Passing Architecture
Often, several largely independent tasks must be performed that do not need to be serialized (i.e., they do not need to be executed seriatim, and so can be executed concurrently). For instance, a database server may process numerous unrelated client requests. Because these requests need not be serviced in a particular order, they may be treated as independent execution units, which in principle could be executed in parallel. Such an application would perform better if the processing system provided mechanisms for concurrent execution of the sub-tasks.
Traditional systems often implement such programs using multiple processes. For example, most server applications have a listener thread that waits for client requests. When a request arrives, the listener forks a new process to service the request. Since servicing of the request often involves I/O operations that may block the process, this approach can yield some concurrency benefits even on uniprocessor systems.
Using multiple processes in an application presents certain disadvantages. Creating all these processes adds substantial overhead, since forking a new process is usually an expensive system call. Additional work is required to dispatch processes to different machines or processors, pass information between these processes, wait for their completion, and gather the results. Finally, such systems often have no appropriate frameworks for sharing certain resources, e.g., network connections. Such a model is justified only if the benefits of concurrency offset the cost of creating and managing multiple processes.
These examples serve primarily to underscore the inadequacies of the process abstraction and the need for better facilities for concurrent computation. The concept of a fairly independent computational unit that is part of the total processing work of an application is thus of some importance. These units have relatively few interactions with one another and hence low synchronization requirements. An application may contain one or more such units. The thread abstraction represents such a single computational unit.
Thus, by using the thread abstraction, a process becomes a compound entity that an be divided into two components—a set of threads and a collection of resources. The thread is a dynamic object that represents a control point in the process and that executes a sequence of instructions. The resources, which include an address space, open files, user credentials, quotas, and so on, may be shared by all threads in the process, or may be defined on a thread-by-thread basis, or a combination thereof. In addition, each thread may have its private objects, such as a program counter, a stack, and a register context. The traditional process has a single thread of execution. Multithreaded systems extend this concept by allowing more than one thread of execution in each process. Several different types of threads, each having different properties and uses, may be defined. Types of threads include kernel threads and user threads.
A kernel thread need not be associated with a user process, and is created and destroyed as needed by the kernel. A kernel thread is normally responsible for executing a specific function. Each kernel thread shares the kernel code (also referred to as kernel text) and global data, and has its own kernel stack. Kernel threads can be independently scheduled and can use standard synchronization mechanisms of the kernel. As an example, kernel threads are useful for performing operations such as asynchronous I/O. In such a scenario, the kernel can simply create a new thread to handle each such request instead of providing special asynchronous I/O mechanisms. The request is handled synchronously by the thread, but appears asynchronous to the rest of the kernel. Kernel threads may also be used to handle interrupts.
Kernel threads are relatively inexpensive to create and use in an operating system according to the present invention. (Often, in other operating systems such kernel threads are very expensive to create.) The only resources they use are the kernel stack and an area to save the register context when not running (a data structure to hold scheduling and synchronization information is also normally required). Context switching between kernel threads is also quick, since the memory mapping does not have to be altered.
It is also possible to provide the thread abstraction at the user level. This may be accomplished, for example, through the implementation of user libraries or via support by the operating system. Such libraries normally provide various directives for creating, synchronizing, scheduling, and managing threads without special assistance from the kernel. The implementation of user threads using a user library is possible because the user-level context of a thread can be saved and restored without kernel intervention. Each user thread may have, for example, its own user stack, an area to save user-level register context, and other state information. The library schedules and switches context between user threads by saving the current thread's stack and registers, then loading those of the newly scheduled one. The kernel retains the responsibility for process switching, because it alone has the privilege to modify the memory management registers.
Alternatively, support for user threads may be provided by the kernel. In that case, the directives are supported as calls to the operating system (as described herein, a microkernel). The number and variety of thread-related system calls (directives) can vary, but in a microkernel according to one embodiment of the present invention, thread manipulation directives are preferably limited to the Create directive and the Destroy directive. By so limiting the thread manipulation directives, microkernel 100 is simplified and its size minimized, providing the aforementioned benefits.
Threads have several benefits. For example, the use of threads provides a more natural way of programming many applications (e.g., windowing systems). Threads can also provide a synchronous programming paradigm by hiding the complexities of asynchronous operations in the threads library or operating system. The greatest advantage of threads is the improvement in performance such a paradigm provides. Threads are extremely lightweight and consume little or no kernel resources, requiring much less time for creation, destruction, and synchronization in an operating system according to the present invention.
Also illustrated in
The process of transferring one or more messages between client 810 and server 820 begins with the client performing a Send operation (step 1300). Among the actions performed in such an operation is the creation of a message in the client task. This corresponds to the situation depicted in
It must then be determined whether a thread is queued to the server thread queue corresponding to the I/O channel to which the thread control block has been queued (step 1310). If no thread is queued to the corresponding server thread queue, the thread control block must wait for the requisite thread to be queued to the corresponding server thread queue. At this point, the message is copied into a thread control block to await the queuing of the requisite thread (step 1320). The message and thread control block then await the queuing of the requisite thread (step 1330). Once the requisite thread is queued, the message is copied from the thread control block to the server process (step 1340). This is the situation depicted in
While it can be seen that I/O channel 1010(1) and server thread queue 1020(1) correspond to one another and are depicted as having only a single thread control block and a single thread queued thereto, respectively, one of skill in the art will realize that multiple threads and thread control blocks can be queued to one of the server thread queues and I/O channels, respectively. In such a scenario, the server task controls the matching of one or more of the queued (or to be queued) thread control blocks to one or more of the queued (or to be queued) threads. Alternatively, the control of the matching of thread control blocks and threads can be handled by the microkernel, or by some other mechanism.
Alternatively, the requisite thread control block may already be queued to the corresponding I/O channel. If such is the case, the message may be copied directly from the client's memory space to the server's memory space (step 1350). This situation is illustrated in
Once the recognition has been performed and the thread unblocked (i.e., started, as depicted by step 1360), the message held in the thread control block is copied into the server task. This is depicted in
It will be understood that the processes illustrated in
As noted,
The operations referred to herein may be modules or portions of modules (e.g., software, firmware or hardware modules). For example, although the described embodiment includes software modules and/or includes manually entered user commands, the various exemplary modules may be application specific hardware modules. The software modules discussed herein may include script, batch or other executable files, or combinations and/or portions of such files. The software modules may include a computer program or subroutines thereof encoded on computer-readable media.
Additionally, those skilled in the art will recognize that the boundaries between modules are merely illustrative and alternative embodiments may merge modules or impose an alternative decomposition of functionality of modules. For example, the modules discussed herein may be decomposed into submodules to be executed as multiple computer processes. Moreover, alternative embodiments may combine multiple instances of a particular module or submodule. Furthermore, those skilled in the art will recognize that the operations described in exemplary embodiment are for illustration only. Operations may be combined or the functionality of the operations may be distributed in additional operations in accordance with the invention.
Each of the blocks of
The software modules described herein may be received by a computer system, for example, from computer readable media. The computer readable media may be permanently, removably or remotely coupled to the computer system. The computer readable media may non-exclusively include, for example, any number of the following: magnetic storage media including disk and tape storage media; optical storage media such as compact disk media (e.g., CD-ROM, CD-R, and the like) and digital video disk storage media; nonvolatile memory storage memory including semiconductor-based memory units such as FLASH memory, EEPROM, EPROM, ROM or application specific integrated circuits; volatile storage media including registers, buffers or caches, main memory, RAM, and the like; and data transmission media including computer network, point-to-point telecommunication, and carrier wave transmission media. In a UNIX-based embodiment, the software modules may be embodied in a file which may be a device, a terminal, a local or remote file, a socket, a network connection, a signal, or other expedient of communication or state change. Other new and various types of computer-readable media may be used to store and/or transmit the software modules discussed herein.
As noted, a thread control block is reserved especially for the given interrupt. In fact, thread control blocks are normally pre-allocated (i.e., pre-reserved) for all I/O operations. This prevents operations requiring the use of a control block from failing due to a lack of memory and also allows the allocation size of control block space to be fixed. Moreover, I/O operations can be performed as real time operations because the resources needed for I/O are allocated at the time of thread creation. Alternatively, thread control block 1410 need not actually exist. Thread control block 1410 and dummy message 1420 are therefore shown in dashed lines in
Once a thread is queued to a corresponding one of the server thread queues (thread 1430 of
As can be seen, the process of fetching data from a client to a server is similar to that of simply sending a message with in-line data. However, because the message in the thread control block carries no data, only information on how to access the data, the process of accessing the data (e.g., either copying the data into the server task's memory space or simply accessing the data in-place) differs slightly. Because a large amount of data may be transferred using such techniques, alternative methods for transferring the data may also be required.
Should the amount of data to be transferred from buffer 1520 to buffer 1530 be greater than an amount determined to be appropriate for transfers using the facilities of microkernel 100, a copy process 1540 is enlisted to offload the data transfer responsibilities for this transfer from microkernel 100. The provision of a task such as copy process 1540 to facilitate such transfers is important to the efficient operation of microkernel 100. Because microkernel 100 is preferably non-preemptible (for reasons of efficiency and simplicity), long data transfers made by microkernel 100 can interfere with the servicing of other threads, the servicing of interrupts and other such processes. Long data transfers can interfere with such processes because, if microkernel 100 is non-preemptible, copying by microkernel 100 is also non-preemptible. Thus, all other processes must wait for copying to complete before they can expect to be run. By offloading the data transfer responsibilities for a long transfer from microkernel 100 to copy process 1540, which is preemptible, copying a large amount of data does not necessarily appropriate long, unbroken stretches of processing time. This allows for the recognition of system events, execution of other processes, and the like.
If supported by the given embodiment of the present invention, the process of storing data from a server to a client is similar to that of simply sending a message with in-line data. However, because the message in the thread control block carries no data, only information on how to provide the data, the process of accessing the data (e.g., either copying the data into the client task's memory space or simply allowing in-place access to the data) differs slightly. As noted, alternative methods for transferring the data (e.g., the use of a copy process) may also be required due to the need to transfer large amounts of data.
Again, the process of storing data from a peripheral to a client and fetching data from a client to a peripheral are similar to that of simply sending a message with in-line data. However, because the data is coming from/going to a peripheral, the process of accessing the data differs slightly. Instead of copy the data from/to a server task, the data is copied from/to the peripheral. As noted, alternative methods for transferring the data (e.g., the use of a copy process) may also be required due to the need to transfer large amounts of data.
While the invention has been described with reference to various embodiments, it will be understood that these embodiments are illustrative and that the scope of the invention is not limited to them. Many variations, modifications, additions, and improvements of the embodiments described are possible.
For example, an operating system according to the present invention may support several different hardware configurations. Such an operating system may be run on a uniprocessor system, by executing microkernel 100 and tasks 110(1)–(N) on a single processor. Alternatively, in a symmetrical multi-processor (SMP) environment, certain of tasks 110(1)–(N) may be executed on other of the SMP processors. These tasks can be bound to a given one of the processors, or may be migrated from one processor to another. In such a scenario, messages can be sent from a task on one processor to a task on another processor.
Carrying the concept a step further, microkernel 100 can act as a network operating system, residing on a computer connected to a network. One or more of tasks 110(1)–(N) can then be executed on other of the computers connected to the network. In this case, messages are passed from one task to another task over the network, under the control of the network operating system (i.e., microkernel 100). In like fashion, data transfers between tasks also occur over the network. The ability of microkernel to easily scale from a uniprocessor system, to an SMP system, to a number of networked computers demonstrates the flexibility of such an approach.
U.S. patent application Ser. No. 10/805,656, entitled "DATA STRUCTURE DESCRIBING LOGICAL DATA SPACES" of Nicholas Shaylor filed on Mar. 19, 2004.
While particular embodiments of the present invention have been shown and described, it will be obvious to those skilled in the art that, based upon the teachings herein, changes and modifications may be made without departing from this invention and its broader aspects and, therefore, the appended claims are to encompass within their scope all such changes and modifications as are within the true spirit and scope of this invention. Furthermore, it is to be understood that the invention is solely defined by the appended claims.
|Cited Patent
|Filing date
|Publication date
|Jul 5, 1983
|Dec 17, 1985
|International Business Machines Corporation
|Interactive code format transform for communicating data between incompatible information processing systems
|Jun 29, 1989
|Oct 15, 1991
|Digital Equipment Corporation
|Waitable object creation system and method in an object based computer operating system
|Mar 31, 1994
|Jun 4, 1996
|International Business Machines Corporation
|Digital I/O bus controller circuit with auto-incrementing, auto-decrementing and non-incrementing/decrementing access data ports
|Dec 21, 1990
|Sep 17, 1996
|Tibco, Inc.
|Apparatus and method for providing decoupling of data exchange details for providing high performance communication between software processes
|Aug 11, 1994
|Oct 15, 1996
|International Business Machines Corporation
|Method and combination for minimizing data conversions when data is transferred between a first database storing data in a first format and a second database storing data in a second format
|May 3, 1994
|May 6, 1997
|Rms Electronic Commerce Systems, Inc.
|System for selectively converting a plurality of source data structures without an intermediary structure into a plurality of selected target structures
|Jun 9, 1994
|May 20, 1997
|Advanced Micro Devices, Inc.
|System for docking a portable computer to a host computer without suspending processor operation by a docking agent driving the bus inactive during docking
|May 13, 1994
|Mar 31, 1998
|Apple Computer, Inc.
|System and method for object oriented message filtering
|Feb 13, 1997
|Jun 23, 1998
|International Business Machines Corp.
|Shared memory support method and apparatus for a microkernel data processing system
|Sep 9, 1994
|Nov 24, 1998
|International Business Machines Corporation
|Virtual memory management for a microkernel system with multiple operating systems
|Dec 3, 1996
|Jul 20, 1999
|Emc Corporation
|Computer and associated method for restoring data backed up on archive media
|Oct 28, 1996
|Aug 17, 1999
|International Business Machines Corporation
|Computer system and method for selectively decompressing operating system ROM image code using a page fault
|Nov 17, 1997
|Jul 4, 2000
|Cabletron Systems, Inc.
|Scheduling mechanism using predetermined limited execution time processing threads in a communication network
|Feb 3, 1998
|Nov 14, 2000
|Hitachi, Ltd.
|Data processing method for use with a coupling facility
|Apr 7, 1998
|Nov 21, 2000
|Crystallize, Inc.
|Method and system for migrating data
|Nov 15, 1996
|Dec 26, 2000
|Novell, Inc.
|Heterogeneous record search apparatus and method
|Apr 3, 1997
|Dec 26, 2000
|Microsoft Corporation
|Concurrency control of state machines in a computer system using cliques
|Jun 19, 1995
|Jul 10, 2001
|International Business Machines Corporation
|System and method for providing shared global offset table for common shared library in a computer system
|Dec 23, 1998
|Jul 31, 2001
|Nortel Networks Limited
|Method and apparatus for providing a name service with an apparently synchronous interface
|May 22, 1997
|Oct 23, 2001
|International Business Machines Corporation
|Page table entry management method and apparatus for a microkernel data processing system
|Jan 28, 1998
|Nov 6, 2001
|Allegro Software Development Corporation
|Serving data from a resource limited system
|Jan 21, 1998
|May 28, 2002
|Qnx Software Systems, Ltd.
|Window kernel
|Jul 31, 1998
|Jul 16, 2002
|Glenayre Electronics, Inc.
|World wide web access for voice mail and page
|Jun 6, 1998
|Oct 29, 2002
|International Business Machines Corporation
|Memory management in a partially garbage-collected programming system
|Feb 20, 1998
|May 13, 2003
|Sprint Communications Company, LP
|Telecommunications system architecture for connecting a call
|Aug 24, 1999
|Jul 1, 2003
|Technology Alternatives, Inc.
|Method and apparatus for transportation of data over a managed wireless network using unique communication protocol
|Jun 7, 1999
|Jul 29, 2003
|International Business Machines Corporation
|Technique for measuring round-trip latency to computing devices requiring no client-side proxy presence
|Jan 14, 2000
|Oct 4, 2005
|Interuniversitaire Micro-Elektronica Centrum (Imec)
|Concurrent timed digital system design method and environment
|Mar 18, 1994
|Sep 28, 1994
|Digital Equipment Corporation
|Scheduling method and apparatus for a communication network
|Feb 4, 1998
|Aug 12, 1998
|Sun Microsystems Inc.
|Method and apparatus for allowing secure transactions through a firewall
|Citing Patent
|Filing date
|Publication date
|Jul 31, 2007
|Jan 24, 2012
|ePrentise, LLC
|Method for database consolidation and database separation
|Jul 29, 2003
|Jun 25, 2013
|Netapp, Inc.
|Managing ownership of memory buffers (mbufs)
|Mar 29, 2012
|Oct 21, 2014
|Lsi Corporation
|Scatter gather list for data integrity
|May 10, 2012
|Jul 28, 2015
|Cognex Corporation
|Systems and methods for dynamically configuring communication data items
|Jul 31, 2007
|Feb 5, 2009
|Helene Abrams
|Method for database consolidation and database separation
|Mar 29, 2012
|Oct 3, 2013
|Lsi Corporation
|Scatter gather list for data integrity
|U.S. Classification
|International Classification
|Cooperative Classification
|European Classification
|Aug 18, 2010
|Fee payment
Year of fee payment: 4
|Aug 20, 2014
|Fee payment
Year of fee payment: 8


text:
So, my experiments with mutt continue. Incidentally, if you think that I'm crazy for using a cli email client in this day and age... Well, you're probably right. However, I'm crazy, but not alone, as the dearth of great email clients for Mac OS X is something that's been written about a lot. Anyway, that's a short way of saying that I think that mutt+"a whole bunch of utilities to add functionality to it" is a (at least somewhat) reasonable solution, given the alternatives.
So, I'm wavering between email clients yet again - giving the mutt+isync combination a try this time... Mutt's disconnected imap support is sadly lacking, and I've messed with offlineimap before, but found it a bit too fiddly. Anyway, I thought quicklook would be a nice way to view the many highly important images I often get in my email, as it pops up quickly, and doesn't require an application switch.
It is not necessary to log in to comment, but if you wish to, you may do so here.

subset: commoncrawl


text:
Over the next 50 years, the world economic landscape will be shaped, among other things, by demographic developments, continuing trade and investment integration, a shift of gravity towards emerging economies, the rising role of knowledge-based capital, global environmental pressures and the correction of fiscal and current account imbalances.
This paper presents the new OECD competition law and policies (CLP) indicators which measure the strength and scope of competition regimes in 49 jurisdictions (OECD and non-OECD). The indicators cover areas for which there is a broad consensus among member countries on what constitutes 'good' practice for competition regimes.
Using panel data for OECD countries, this study investigates the extent to which changes in government spending on education, health and other areas influence long-term growth.
This paper looks at a vast array of policy recommendations by the OECD that promote long-term growth – contained in Going for Growth and the Economic Outlook – and attempts to establish whether they underpin macroeconomic stability or whether there is a trade-off.
This paper aims at identifying which countries and regions in the world might face structural overcapacities or capacity shortfalls in the automobile industry in the near future.
With sound framework conditions, fine universities, good infrastructure and policies friendly towards foreign direct investment, Ireland scores high in international innovation scoreboards. Overall, policies to boost innovation and entrepreneurship are on the right track, but investment in knowledge-based capital could be made a more dynamic source of growth and jobs.
China is well-placed to avoid the so-called "middle-income trap" and to continue to converge towards the more advanced economies, even though growth is likely to slow from near double-digit rates in the first decade of this millennium to around 7% at the 2020 horizon.
The purpose of this paper is to gain a better understanding of the role of natural capital for productivity measurement and as a source of economic growth.
Despite sustained efforts made in recent years to rein in budget deficits, a majority of OECD countries still face substantial fiscal consolidation needs. The choices made about which spending areas to curtail and which taxes to hike will have implications for near-term activity and long-term growth as well as for equity and the current account.
This working paper presents the background and the details of the simulations behind Box 1.4 of the May 2013 OECD Economic Outlook. A small simulation model is used to evaluate the contribution that the three pillars of the government's strategy – fiscal consolidation, growth-boosting structural reforms and higher inflation – could make to reversing the rise in Japan's public debt ratio.


text:
Hotel ibis Madrid Alcobendas
Select your stay dates to check availability at Hotel ibis Madrid Alcobendas
Hotel ibis Madrid Alcobendas
About the Hotel
Property Location
When you stay at Hotel ibis Madrid Alcobendas in Alcobendas, you'll be in the business district and convenient to Heron Diversia and CosmoCaixa Science Museum. This hotel is within close proximity of Centro Comercial La Vega and Jardin de la Vega.
Make yourself at home in one of the 120 air-conditioned rooms featuring flat-screen televisions. Complimentary wireless Internet access is available to keep you connected. Bathrooms have showers and hair dryers. Conveniences include phones, as well as desks and complimentary newspapers.
Rec, Spa, Premium Amenities
Make use of convenient amenities, which include complimentary wireless Internet access and a television in the lobby.
Grab a bite from a snack bar/deli serving guests of Hotel ibis Madrid Alcobendas. Quench your thirst with your favorite drink at a bar/lounge.
Business, Other Amenities
Featured amenities include a 24-hour business center, a 24-hour front desk, and multilingual staff. Self parking (subject to charges) is available onsite.
Hotel Facilities
- Self parking (surcharge)
- Laundry facilities
- Bar/lounge
- Television in lobby
- Year Built 2008
- Free WiFi
- Snack bar/deli
- Elevator/lift
- Multilingual staff
- 24-hour front desk
- Number of floors - 3
- 24-hour business center
- Total number of rooms - 120
- Luggage storage
- Safe-deposit box at front desk
- Breakfast available (surcharge)
- Number of buildings/towers - 1
Room Facilities
- Air conditioning
- Connecting/adjoining rooms available
- Hair dryer
- Private bathroom
- Flat-panel TV
- Free cribs/infant beds
- Free WiFi
- Shower only
- Phone
- Turndown service
- Free newspaper
- Down comforter
- Iron/ironing board (on request)
- Climate control
- Desk
- Daily housekeeping
Hotel Policy
Know Before You Go
- Cash transactions at this property cannot exceed EUR 2500, due to national regulations. For further details, please contact the property using information in the booking confirmation.
- The property has connecting/adjoining rooms, which are subject to availability and can be requested by contacting the property using the number on the booking confirmation.
- The photos in this description reflect the brand standard and are provided for illustrative purposes only.
The following fees and deposits are charged by the property at time of service, check-in, or check-out.
- Breakfast fee: between EUR 3 and EUR 7.50 per person (approximately)
- Self parking fee: EUR 7 per night
- Pet fee: EUR 7 per pet, per day
The above list may not be comprehensive. Fees and deposits may not include tax and are subject to change.Show all hotel policy Show less hotel policy


text:
Log Into Your Account
Your cart is currently empty
Mack extended 3 year warranty for Palm Pilots. This warranty covers all parts and all labor on all manufacturers defects on all PDA's. This warranty is a no deductible warranty which means if you were to take it in for repair you would not have to pay anything.
Free Shipping!
Availability: In stock
Price: $19.99


text:
I've had some great food experiences recently: dinner chez my Dutch friend Sjoerd (from superior class); dinner at Le Hide - a fabulous restaurant in the 17th run by a Japanese chef who trained under Joël Robuchon; dinner round at H's for her birthday last week; a fondue night at Le Refuge des Fondues in Montmartre where they serve wine in baby bottles; several market trips; and a visit to the world-famous Poilâne bakery where you can buy a very cool bread box for a cool 244€.
Our class dinner at L'Atelier Maître Albert however - "a restaurant with Guy Savoy" - was disappointing. The amuse bouche of tiny grilled mussels on cocktail sticks had bits of shell and dirt in them and the chilled tomato soup tasted just like Heinz. The cod with herb mash was very good, if a bit basic, and the lamb shanks, while perfectly cooked, could have done with some figs or prunes or similar to sex up the sauce. Not really what you'd expect from a restaurant with links to a Michelin starred chef (actually, chefs aren't awarded Michelin stars, their restaurants are, but let's not split mussel beards).
We have our written exam in just under two weeks so I'm going to have to knuckle down and start studying - which means no time for frivolous blogging I'm afraid.


text:
Free Registration
Submit a Link
site review
TubePleasure Japan
user rating:
Add To Favorites
Tubepleasure japanese porn videos
Pornn.xxx likes TubePleasure Japan:
Pornn.xxx hates TubePleasure Japan:
Click Here To Visit Website
Japanese Porn Sites like TubePleasure Japan
3Rat Japanese
HqHole Japan
JizZoid Japan
SexPulse Japan
ILikeTubes Japan
GoldPornFilms Japan
BestandFree Japan
TubePleasure Japan
TubeCharm Japan
TubePornFilm Japan
ApeTube Japan
FreshPornClips Japan
IWank Japanese
4Porn Japanese
PornZeus Japanese
LobsterTube Japanese
LargePornTube Japanese
LargePornFilms Japanese
DailyBasis Japanese
LazyMike Japanese
FapVid Japan
TubeInvasion Japanese
MatureAlbum Japanese
IXXX Japan
GoldPornTube Japan
more porn sites
Click Here to See My Full Porn List
Check out the biggest and most up to date porn list!
Thank you for visiting pornn.xxx We continually add new porn reviews to make your life easier. We hope to see you back here again soon.
Copyright 2017


text:
Discussion in 'Scrapbooking' started by TN Dreamer, Apr 18, 2006.
I think I 've just been tagged
Congrats to you!
Log in or Sign up
to hide this advert.
Is the TF a SCRAPPER???
Congrats!!! Gotta love the tags.
Now a true scrapbooker (I'll admit it as I would do it) will do a print screen and Scrapbook the memory!
Glad someone gets a tag.
I got tagged too! At first, I was scratching my head wondering how that little saying got there... Okay, I'm a natural blonde. Although, I still have no idea what it means. I've been married for 12 1/2 years!
Ok I went to bed and got up withnew tags. Woohoo!!!
Oh, that's too funny! That was from the Idol thread...I just knew that Kellie had a good quote, and now you have it to wear That tag fairy sure has a sense of humor!
That's a funny one, Jenny.
I just looked back at your old posts and on th eFlower and Garden board you said:
Thank goodness for you. I thought that my blondness had finally overwhelmed me!
what is a tag ? Sorry I guess I am having a blonde moment but I really have no clue what it is?
It's the little words/phrases under your username--the ones in color--they would be under 'Mouseketeer' if you are lucky enough to get one. The TF can strike any time!
Some of the tags are really funny, and if you are part of the thread they came from, it makes it even funnier. The tag fairy was here the last couple of nights, and new tags were everywhere.
oh ok hehe thanks! I thought people just put them on by themselves LOL thanks
Separate names with a comma.


text:
Veanne Cox
Jump to
A versatile, red-haired actress and singer, Veanne Cox has been impressing NYC theater audiences since her 1986 debut as the pageant winner in the ill-fated stage musical "Smile. " The Virginia native joined the Washington Ballet Company right out of high school but left the dance world behind when she landed her first acting role as a princess in a short film. To celebrate her 21st birthday, Cox moved to Manhattan and opted to pursue an acting career. She soon landed roles in several Off-Off-Broadway productions and parts in TV commercials helped foot the bills until what should have been her break in "Smile." The 1986 musical based on the 1975 satirical movie boasted an impressive creative lineup (Marvin Hamlisch and Howard Ashman) but the show just didn't click with audiences. The following year, though, Cox did find a vehicle suitable to showcasing her talent, the Off-Broadway revival of "Flora, the Red Menace." While some might have been daunted at taking on a role so identified with an icon (Liza Minnelli had scored in the original), Cox managed to make the part her own.


text: I just purchased an HTC Eris after using Verizon's 6700 Smartphone for a couple of years. And I'm certainly enthralled with almost everything that Google has created...except Microsoft's Contact offering is far superior to anything I've been able to find. I'd greatly appreciate any suggestions you gals 'n guys might suggest. Thanks! ghost9533


text:
Clive McClelland's Ombra: Supernatural Music in the Eighteenth Century is an in-depth examination of ombra and is many influences on classical music performance. McClelland reveals that ombra scenes proved popular with audiences not only because of the special stage effects employed, but also due to increasing use of awe-inspiring musical effects. By the end of the eighteenth century the scenes had come to be associated with an elaborate set of musical features including slow, sustained writing, the use of flat keys, angular melodic lines, chromaticism and dissonance, dotted rhythms and syncopation, tremolando effects, unexpected harmonic progressions, and unusual instrumentation, especially involving trombones. It is clearly distinct from other styles that exhibit some of these characteristics, such as the so-called 'Sturm und Drang' or 'Fantasia.' Futhermore, parallels can be drawn between these features and Edmund Burke's 'sublime of terror,' thus placing ombra music on an important position in the context of eighteenth-century aesthetic theory.
-- Melissa Etheridge, from the Introduction
With 30 million record sales under his belt, and with fans including Bono and Al Gore, Pakistanborn Salman Ahmad is renowned for being the first rock & roll star to destroy the wall that divides the West and the Muslim world. Rock & Roll Jihad is the story of his incredible journey.
Facing down angry mullahs and oppressive dictators who wanted all music to be banned from the Islamic Republic of Pakistan, Salman Ahmad rocketed to the top of the music charts, bringing Westernstyle rock and pop to Pakistani teenagers for the first time. His band Junoon became the U2 of Asia, a sufi - rock group that broke boundaries and sold a record number of albums. But Salman's story began in New York, where he spent his teen years learning to play guitar, listening to Led Zeppelin, hanging out at rock clubs and Beatles Fests, making American friends, and dreaming of rock-star fame. That dream seemed destined to die when his family returned to Pakistan and Salman was forced to follow the strictures of a newly religious -- and stratified -- society. He finished medical school, met his soul mate, and watched his beloved funkytown of Lahore transform with the rest of Pakistan under the rule of Zia into a fundamentalist dictatorship: morality police arrested couples holding hands in public, Little House on the Prairie and Live Aid were banned from television broadcasts, and Kalashnikovs and rocket launchers proliferated on college campuses via the Afghani resistance to Soviet occupation in the north.
Undeterred, the teenage Salman created his own underground jihad: his mission was to bring his beloved rock music to an enthusiastic new audience in South Asia and beyond. He started a traveling guitar club that met in private Lahore spaces, mixing Urdu love poems with Casio synthesizers, tablas with Fender Stratocasters, and ragas with power chords, eventually joining his first pop band, Vital Signs. Later, he founded Junoon, South Asia's biggest rock band, which was followed to every corner of the world by a loyal legion of fans called Junoonis. As his music climbed the charts, Salman found himself the target of religious fanatics and power-mad politicians desperate to take him and his band down. But in the center of a new generation of young Pakistanis who go to mosques as well as McDonald's, whose religion gives them compassion for and not fear of the West, and who see modern music as a "rainbow bridge" that links their lives to the rest of the world, nothing could stop Salman's star from rising.
Today, Salman continues to play music and is also a UNAIDS Goodwill Ambassador, traveling the world as a spokesperson and using the lessons he learned as a musical pioneer to help heal the wounds between East and West -- lessons he shares in this illuminating memoir.
demanded more sacrifice. It was three to four years early. I sought happiness
to answer Allah Almighty, which
then inspired me to create this book. The ones in this book is my journey to
find happiness and peace of the world and the life hereafter.
Why do I say the answer to my prayer Allah is making
this book?
One night in February, I sat in front of the house while enjoying a cigarette,
about one o'clock in the morning; I ask Allah why not my intention to grant
thee Allah is? I sat pensive and that's when there is a desire to make the
book. I think any book? Child development books or what books? Then I
answered hearts travel book you now live. Starting from it book was
This book is a journey of a humble servant
of Allah SWT, imperfect and stained with sin and guilt. I tried to share the
experience, but do not attempt to teach or preach because my knowledge is still
very little like a drop of dew on a vast ocean.
Religious knowledge which I had only a few
letters and memorizing the Qur'an were very little, but I tried to read the
Bible and listen to the glorious every day.
I am trying to practice
Bismillaahirrahmaanirrahiim, although I do not practice it every day. Almost
all the sins I have ever done. Arrogance and hubris I have ever done. I
treasure the world almost won, but instead of feeling happy, I'm getting hungry
with all those hungry people who think like sea water to quench thirst.
Through the journey of Allah slowly
happiness begins to rise within me. Hopefully the experience I have gained
additional experience may be a provision for me personally and my brothers who
read this book. Insha'Allah.
In writing this book I found the book at the
Scholastic bookstore called "The Know Himself, Who Know the
Lord" Masterpieces "Jalaluddin Rumi". His writing is
very inspiring to me to immediately write graffiti on my experience on a trip
seeking Allah SWT.


text:
A Must-See: Amazing Sand Artist!
Subscribe to 107.3 KFFM on
This is the most amazing new artist I have seen. Check out Kseniya Simonova, an artist who uses sand to tell stories and portray history.
You must watch the entire video to appreciate and understand the story and visual Kseniya is creating. So cool!


text: I-4BARGINS LIMITED has been working since 7/13/2016. The current status of the business is Active I-4BARGINS LIMITED located on 60 NORTHGATE, GUISBOROUGH, CLEVELAND, UNITED KINGDOM, TS14 6JPRetail Flynn David David is known as a Director of the company. "Retail sale via mail order houses or via Internet" is a known activity of the company.


text:
Follow the @DickinsonAdmit account on Twitter for updates on all things #dson2021.
Post and follow with #dson2021, view the ongoing Storify collection and join the Class of 2021 Facebook page to start connecting with future classmates!
Follow, Retweet, Repin, Favorite: The Dickinson Social Wall.
A Dickinson liberal-arts education prepares students to be leaders, teaches them how to communicate effectively, provides them with the ability to make connections and form relationships and exposes them to a variety of subjects and disciplines. These skills are then translated into jobs, scholarships and graduate-school programs that lead our graduates on to achieve greatness.


text:
A recent study at the School of Biomedical, Biomolecular and Chemical Sciences at The University of Western Australia has shown that tea tree oil may have indications against mesothelioma. A compound made from tea tree oil called terpinen-4-ol has been used as an antifungal and antibiotic and was used in the study against mesothelioma cells.
The researchers tested the compound against in vitro mesothelioma tumor cells in mice. They found that as they introduced tea tree oil and terpinen-4-ol, more tumor cells died. The compounds managed to stop cancer cells from multiplying and caused necrotic and apoptotic cell death. However, more research is needed before human use is viable.
If you or someone you know has been diagnosed with mesothelioma, contact the mesothelioma lawyers of Williams Kherkher at 800-781-3955.


text:
NRL star Robbie Farah has revealed he's packed his boots in the hope of getting on the pitch against the Liverpool Legends on Thursday night.
MORE: Jennings, Roberts and the world's best centres | Timeline of Titans turmoil
A long-time and passionate Reds fans, Farah went into camp with the Australian Legends on Wednesday and will act as an assistant to coach Graham Arnold.
But the Wests Tigers and NSW Origin hooker expressed his desire to play some part against his idols Steven Gerrard and Robbie Fowler.
Though he admits it might be a long shot.
"I'll be asking him [Arnold to play]," Farah admitted to www.footballaustralia.com.au on Wednesday.
"I did bring my boots, they're in my bag so whether or not that will happen I'm not too sure.
"Just for five minutes to get on there would be unbelievable… we'll see what happens."
While Farah conceded his only football experience growing up was "playing for fun", he has always taken his love of the Reds seriously.
And he says being a part of an Australian Legends squad to beat his beloved Reds at ANZ Stadium would be bittersweet.
As for exactly what role he will play as an assistant coach, Farah said: "Graham [Arnold] rang me yesterday and we started talking tactics and formation and substitutes and all that.
"I said 'I don't really know why you're asking me for '. I'll just do whatever is needed of me or asked of me…I think it's going to be a relaxed atmosphere.
"Whatever help Graham needs, I'll be there to help out."
Farah admits he's also been impressed at the standard of the Hyundai A-League and the strides the competition has made in recent years.
"It's definitely come on leaps and bounds in the last few years. The quality has improved since you had guys come over here like Robbie [Fowler] and play, it's definitely increased the exposure and quality of the game," he said.
"While I don't want it to improve too much because I'm a rugby league man…it's great to watch and I think it's getting better and better every year."


text:
The Lips Trailer (2010)
12 April 2010 100 mins
Three women travel to a distant place to do welfare work. They assist, listen, stay with the unprotected. An old hospital in ruins accommodates them. The imposed group life gets more complex as they start to know each other. The relationship with the others, the community, is also difficult. But, as days go by, they will start to melt into that human landscape surrounding them. To be part of the mystery of otherness.
Watch the official The Lips 2010 trailer in HD below or find more The Lips videos on Vidimovie.


text:
DALLAS TWP. — The Misericordia University Dead Alchemist Society will present an expanded spectacle for the student organization's 25th annual "Things That Go Boom in the Night!" event 6 to 8 p.m. Wednesday, Oct. 26 in the Wells Fargo Amphitheater on campus. The event is open free to the public.
Students in the Dead Alchemist Society will offer new and expanded activities for children, including hands-on experiments such as making slime and super bouncy balls beginning at 6 p.m. The "Things That Go Boom in the Night" program will be held at 7 p.m. This season's popular event features new experiments, pumpkin makeovers and vomiting and fiery pumpkins.
New this year, faculty from the Misericordia University Department of Physics will provide telescopes for moon and star gazing, and offer a variety of math and physics demonstrations throughout the evening.
In case of inclement weather, the event will be held in the lobby of the Banks Student Life Center. For more information about "Things That Go Boom in the Night!" at Misericordia University, call Anna Fedor, assistant professor and chair of the department of chemistry and biochemistry, at 570-674-6769 or e-mail at firstname.lastname@example.com.


text:
CORRECTION: Early broadcasts of this report misidentified the maker of the cervical-cancer vaccine Gardasil. It is Merck, not GlaxoSmithKline.
Kai Ryssdal: Alrighty then, with the real news out of the way, on to what was actually talked about around the watercooler today. What happened last night at the Oscars, of course. Yeah, there were the dresses, and the speeches, and whatever it was that the hosts did. But as Academy Awards go, there weren't a whole lot of surprises, at least not during the show. The commercials were another story, especially that perfume ad.
Marketplace's Stacey Vanek-Smith reports.
STACEY VANEK-SMITH: A woman lounges on a couch in a chiffon dress. She sees twinkling lights dancing in front of her and runs to follow them. They lead her to a ballroom. She twirls around, smiling. In the mist, she sees a pink perfume bottle. It spins around to reveal the words "cervical cancer."
AD: Maybe it's unfair to get your attention this way, but nothing's fair about cervical cancer. But there are ways to prevent it.
Namely Cervarix, a vaccine made by GlaxoSmithKline, which ran the ad.
TRACY CHAPMAN: I have to say that the ad definitely stopped me in my tracks.
Tracy Chapman is a consultant for marketing firm Just Ask a Woman. She says the ad is an attention-getter. It never mentions Cervarix, rather it directs you an informational Web site for cervical cancer.
CHAPMAN: We could see this as a public service announcement but, we're smart enough to know that there's a product on the end. But I think allows women to feel good about choosing that brand because of what the company has offered them.
Pfizer just set up a similar site for Fibromyalgia and, yes, the company has a drug that treats that.
Michael Birkin is a brand strategist with Red Peak. He says the public-service approach helps drug companies avoid listing a litany of hair-raising side effects. And it makes them look virtuous.
MICHAEL BIRKIN: It's performing a public service, as well as helping sell your product. I suspect it's an approach that we're going to see more of.
By creating go-to information sites and online communities, companies can create strong relationships with consumers.
I'm Stacey Vanek-Smith for Marketplace.


text:
Daughter, the alt-rock trio with a penchant for the poetic return with one of the year's most anticipated sophomore records. The band has remained near silent after the release of 'If You Leave' allowing its personable impact to resonate with its listeners. A record built on solitude and bitterness was curiously beautiful and proved to be expectedly difficult to follow up. 'Not To Disappear' begins in similar mournful tones as 'New Ways' envelopes you, Elena's vocal offering comforting familiarity despite narrating an all consuming break up where she risks her very identity.
Tonra has stated on the creation of this record she feels less self conscious to share her thoughts and experiences. On 'Mothers' listeners feel slightly intrusive upon the outpouring of emotion. The production elements reach new heights here, highlighted on debut single 'Doing The Right Thing' as Aguilella and Haefeli wholly dictate the pace and direction of this expressional piece of progressive rock, Elena simply decorates with haunting and hushed tones. Its video directed by the formidable duo Iain Forsyth and Jane Pollard is undoubtedly one of the most powerful pieces of music film released in recent years
Predictably titled 'Alone/With You' characterises the drowning, inescapable issues of consciously choosing a relationship devoid of love or care as an extension of the grounding 'Still' from their debut. Although fairly straightforward at times, anybody who has experienced the crippling realities of walking, eating, existing in a near unbroken solitude will find a chilling comfort within this track. The overall sonar tone of the album has a similarity to Sigur Ròs and War on Drugs, designed to soundtrack the solitary, evoking images of lonely cities and night times alone.
As 'If You Leave' offered more direct pulls to the heart strings and tumblr-ready lyrics 'Not To Disappear' is centred on immersion, a record to become completely lost within. It runs like a mournful piece of cinema in continuous greyscale shot panning once and again to moments of complete overwhelming fervour ('Numbers', 'No Care') as they flicker past leaving your mind to reflect upon what you witnessed.
'Not To Disappear' is released in the UK on 15 January 2016 via 4AD Records


text:
Hanging with Gary King and Ellie Lee
New York Travel Blog› entry 4 of 8 › view all entries
March 11th, 2010 – by: stevenguyen
I also got to hang out with my buddy Ellie from Seoulbeats and AATheory.
Ellie also got the chance to help me out with an interview I did with Teresa Lee and Patrick Moloney of the band Paperdoll. They were really cool people, and their music is just insane! They're definitely out there to make a scene, and from what I hear... they're slated to perform at this year's Kollaboration in New York. Be sure to check them out.
Join TravBuddy to leave comments, meet new friends and share travel tips!


text:
The annals of the Football League are littered with strikers who blitzed the Championship, but never quite proved their worth at the highest level.
The mind turns immediately to Rob Hulse, Nicky Maynard, Michael Chopra, Tommy Smith: fine players, but ultimately remembered as nearly men. For the last few years, it appeared that Chris Martin was destined to join that cadre.
But this season has seen Martin ignite his career, his 24 goals propelling Derby County to the brink of promotion. On Sunday evening, on home turf, they defend a 2-1 lead in the play-off semi-final against Brighton.
Martin, who scored Derby's first goal and created the second in Thursday night's first leg, now stands just 90 minutes from Wembley.
When the 25-year-old helped Norwich City to consecutive promotions in 2010 and 2011, a shimmering Premier League career lay in wait. But his liking for a drink and unerring ability to find trouble saw him gradually phased out by Paul Lambert, despatched on a series of unsatisfying loan moves.
"Of course there have been tough times," Martin said. "I have been out on loan and there are times when you doubt yourself, not getting into the squad at the club you are signed to.
"I have had to move my young family around the country searching for football, but I needed to do it, and prove to people I can play higher up. Sometimes it is tough, as you never know where you will find yourself, but all roads have led to here."
It is at this point that Steve McClaren intervened, and Martin was quick to credit the former England manager with turning his career around. Recast as a line-leading spearhead, Martin has redoubled his efforts, thriving on the added responsibility.
"It is the first time I have played as a lone striker, which is a completely different role," he said. "I have always been the second striker. He [McClaren] has not changed my game, as such; he has let me play naturally and seen something in me to play me up front."
Brighton right-back Inigo Calderon was optimistic of turning the tie around. "It is not over," he insisted. "They [Derby] will try and play on the break. We know they are really good doing that. But we know we have to score. A draw is not enough. We are going to fight to the last second."


text:
- Please select a date to see the proper prices!
- Meal can be requested on the spot
Best offer
94 € / person / night, no meal
Description of the accommodation:
Rooms, services Alimandi Vaticano Rome is welcoming all guests in Rome with 23 comfortable rooms to stay in. You are also welcome at the hotel for a fine local meal in the restaurant. Car parking possibility is available nearby. Car rental service and organized city tours are also available to discover all must-sees and highlights of the area. The bar is an ideal location for a personal meeting and a relaxing evening talk. In the safe your valuables can be the safely secured. In case you'd bring your laptop along, you may go online via wireless Internet connection (WiFi) available at the hotel. An exact and detailed list of equipment in the rooms and of the services provided by Alimandi Vaticano Rome you will find on the information sheet below, including any applicable additional fees.
Payment Advance bank card payment or credit card guarantee may be required for the reservation, depending on the chosen date, room and price.
Arrival, opening hours The earliest time to arrive is 14:00, the latest time to leave the rooms is 11:00. The personnel of the hotel can speak with you in Italian and English languages.
Alimandi Vaticano Rome rooms Rooms
- Please select a date to see the proper prices!
Accommodation services
Parking (25 €/night)
Free WiFi in shared places
Organized sightseeing nearby, Car rental nearby
Bar, Elevator, Safe deposit box
Own restaurant
Hairdryer, Desk in the room, Mini-bar


text:
Okay, now that that last post is out of my system it's time to simmer down. And there is good news, today Aral and I realized that Planes Search and Rescue is available to rent or buy on iTunes. Booyah, AC/DC Thunderstruck. Aral is bouncing on the couch singing TS. I am cleaning, thinking of new and interesting ways to hurt characters in my latest story, dropping our lighting load by an order of magnitude (more on that later), and cooking something scrumptious.
That and it is blowing outside. The sunset tonight, oh man! We were enveloped in clouds that turned sepia in the long light of the evening.


text:
- Please select a date to see the proper prices!
Description of the accommodation:
Rooms, services BAYMONT INN & SUITES DES MOINE Des Moines is offering 74 tasfefully furnished, nice rooms for those looking for a place to stay at in Des Moines. An exact and detailed list of equipment in the rooms and of the services provided by BAYMONT INN & SUITES DES MOINE Des Moines you will find on the information sheet below, including any applicable additional fees.
Payment In order to finalize the reservation you may be required to provide credit card guarantee or advance payment by credit card, depending on the chosen room, date and price.
Arrival, opening hours The earliest time to check in to your room is 15:00, the latest time to check out of your room is 12:00. The personnel can communicate with you in English.
BAYMONT INN & SUITES DES MOINE Des Moines rooms Rooms
- Please select a date to see the proper prices!
Accommodation services
Wellness section, relaxation
- Jacuzzi
- Pool (Outdoor - seasonally open)
General Policies
from 15:00 o'clock
Check out
until 12:00
Spoken languages
Accepted bank cards
MasterCard, VISA, Diners Club, Amex
Local tax
Please check the details of the selected price.


text:
At General Finance we have available a number of types of loans, to
suit every need.
Broadly these are divided into two types: prime loans and
non-conforming loans. We also do second mortgages.
If you would like to learn more about our loan products, select the
type below, or fill out the feedback form and we will send the details to you
Select the items that apply, and then let us know how to contact


text:
Debbie defends large-scale, nationwide litigation, primarily in products liability cases against medical device and pharmaceutical manufacturers. She is a strategic and innovative problem solver driven by client concerns and goals. Debbie has served as lead counsel in MDL proceedings regarding cardiac defibrillators, contrast dyes and vaginal mesh. She has experience coordinating the defense of international claims and cases with domestic mass tort litigation.
Debbie works with her clients in all aspects of products liability defense. She has counseled clients on legislative and regulatory issues, conducted litigation prevention analysis and coordinated strategy for governmental investigations. She has successfully helped clients navigate crisis situations involving recalls, adverse media, government investigations and mass tort proceedings.
She works with expert witnesses in dozens of disciplines and has deposed many nationally known plaintiff's experts. She works with all levels of company witnesses ranging from manufacturing and regulatory to the president and board of directors.
Debbie is also a lead trial lawyer. She has worked with multiple jury research firms on projects in several different venues. She has resolved thousands of cases through mediation and informal settlement in both individual and global resolution.
Debbie clerked for the U.S. Court of Appeals for the Tenth Circuit and has briefed and argued cases in state and federal appellate courts.
She regularly teaches trial practice techniques and is an invited speaker on preemption and crisis management in litigation.
Managing Litigation in a Tough Economy: Containing Litigation Costs With a Restricted Budget (Panel), ACI's 17th Annual Drug and Medical Device Litigation Conference; New York, New York; December 4, 2012.
Preemption: What Survives, Where Are We Headed and What's the Difference? (Panel), LA State Bar Association 9th Annual Class Action/Mass Tort Symposium; New Orleans, Louisiana; October 16, 2009.
After Wyeth v. Levine and Reigel v. Medtronic – the Policy and Practice Behind Preemption: Where Do We Go From Here? (Panel), 35th Annual Federal Court Practice Seminar; Minneapolis, Minnesota; June 24, 2009.
Evaluating Whether to Pursue the Preemption Defense, American Conference Institute's Drug & Device Preemption; Philadelphia, Pennsylvania; July 15, 2008.
Litigation and Public Relations Strategies to Respond to Product Recalls, MCCA's Seventh Annual CLE Expo; Chicago, Illinois; March 28, 2008.


text:
Yeovil wait on Holt bid
By Alex Dunn
Last Updated: 01/01/70 1:00am
Yeovil will look to other targets unless Rochdale reconsider their bid for Grant Holt.League One new boys Yeovil Town have confirmed they will look to other targets unless Rochdale reconsider their bid for Grant Holt.
Yeovil boss Gary Johnson is keen on the Dale hit man, who netted 24 goals last season, but is reluctant to up his initial offer.
With Rochdale looking to improve on a decent campaign last time out, it seems boss Steve Parkin is reluctant to relinquish the services of his top goalscorer.
''We did make a substantial offer which was rejected,'' Johnson told the Western Gazette.
''Unless Rochdale reconsider that offer we will turn our sights to other targets.''
Whilst Holt seems destined to remain at Spotland, veteran goalkeeper Neil Edwards looks likely for a summer switch to neighbours Bury.
Shakers boss Graham Barrow is in the market for a new goalkeeper after losing Glyn Garner to Leyton Orient - with Edwards seemingly fitting the bill.
''I have spoken to Steve Parkin and he's fully aware of the situation,'' Edwards told the club's official website.
''I have spoken to Graham Barrow at Bury regarding a move but talks are at a very early stage at the moment.
''I have been offered terms at Rochdale and I'd love to stay but the offer was disappointing.''


text:
Don Massey Collision Center
Featured Business
Collision Center of Peoria9190 W. Bell Rd
Peoria, AZ 85382
37.0 miles away
09/15/2016 - "Great place!!"
"Definitely recommend this place to anyone in need of a car repair! They will take care of you in your..."
Review for Don Massey Collision Center
David A. on 09/23/2011
Spoke with Lareen. She said it wasn't necessary to keep her informed during the repair process. They did exactly what they told her they would do. They had her vehicle less than an hour. She said everyone was terrific. They couldn't have been better.
Category: Collision
Service Date: 09/13/2011
Review Created: 09/23/2011
This review was collected via phone interview by Customer Research Inc.


text:
GraphicRiver Heraldic Royal Mantle 5999937
Category: Stock Vector | Comment: ( 0 )
GraphicRiver Heraldic Royal Mantle 5999937
Stock Vector \ Decorative \ Decorative Symbols
Medieval \ Ornament \ Mantling \ Mantle \ Heraldry \ King \ Pennant \ Royal \ Vector
Stock Vector - Heraldic Royal Mantle 5999937 by seamartini @ GraphicRiver
Stock Vector \ Decorative \ Decorative Symbols
Graphics Files Included: JPG Image, Vector EPS ; Layered: No ; Minimum Adobe CS Version: CS .
Heraldic royal mantle with golden crown for design. Editable EPS8 and JPEG (can edit in any vector and graphic editor) files are included
Bottles with Olive Oil; Cartoon Hurricane; Grass Numbers and Digits; Ice Cream; Fruit Characters; Seamless Pattern with Rose Flowers; Seamless Damask Pattern.
Keywords: antique, background, badge, banner, blazon, coat of arms, crown, decoration, design, emblem, engraving, frame, gold, graphic, heraldic, heraldry, king, mantle, mantling, medieval, old, ornament, pennant, royal, shield, sign, style, symbol, vector, vintage.


text:
Copyright Rabbi Eli Hecht
No part of these arcticles may be used or reproduced in any form without written permission from the copyright holder, except for brief quotations in reviews.
So much is being written about who is a Jew that I am starting to worry if I'm missing something. As an orthodox Jew I thought that the problem was taken care of back in the days of Ezra (390 B.C.E.).
It seems that The Jewish Journal has made it it's "mitzvah" to print all kinds of comments on the issue of intermarriage.
On December 5, 1985, the "Los Angeles Community bulletin" ran the following headlines: "Outreach to Intermarrieds, Welcoming the Stranger," by Jay Schuster.
A man once married two wives. The young wife plucked out his white hairs. The older wife plucked out his black hairs. His previously full hairy head now became bald, pleasing nobody.