postgradount.net

Computer Drivers — Backbone of your Systems

In computing, a device driver or software driver is a computer program allowing higher-level computer programs to interact with a hardware device. A driver typically communicates with the device through the computer bus or communications subsystem to which the hardware connects. When a calling program invokes a routine in the driver, the driver issues commands to the device. Once the device sends data back to the driver, the driver may invoke routines in the original calling program. Drivers are hardware-dependent and operating-system-specific. They usually provide the interrupt handling required for any necessary asynchronous time-dependent hardware interface. A device driver simplifies programming by acting as a translator between a hardware device and the applications or operating systems that use it. Programmers can write the higher-level application code independently of whatever specific hardware device it will ultimately control, because code and device can interface in a standard way, regardless of the software superstructure or of underlying hardware. Every version of a device, such as a printer, requires its own hardware-specific specialized commands. In contrast, most applications utilize devices (such as a file to a printer) by means of high-level device-generic commands such as PRINTLN (print a line). The device-driver accepts these generic high-level commands and breaks them into a series of low-level device-specific commands as required by the device being driven. Furthermore, drivers can provide a level of security as they can run in kernel-mode, thereby protecting the operating system from applications running in user-mode. Device drivers can be abstracted into logical and physical layers. Logical layers process data for a class of devices such as Ethernet ports or disk drives. Physical layers communicate with specific device instances. For example, a serial port needs to handle standard communication how to get rid of love handles protocols such as XON/XOFF that are common for all serial port hardware. This would be managed by a serial port logical layer. However, the physical layer needs to communicate with a particular serial port chip. 16550 UART hardware differs from PL-011. The physical layer addresses these chip-specific variations. Conventionally, OS requests go to the logical layer first. In turn, the logical layer calls upon the physical layer to implement OS requests in terms understandable by the hardware. Inversely, when a hardware device needs to respond to the OS, it uses the physical layer to speak to the logical layer. In Linux environments, programmers can build device drivers either as parts of the kernel or separately as loadable modules. Makedev includes a list of the devices in Linux: ttyS (terminal), lp (parallel port), hd (disk), loop (loopback disk device), sound (these include mixer Walking Shoes, sequencer, dsp, and audio)… The Microsoft Windows .sys files and Linux .ko modules contain loadable device drivers. The advantage of loadable device drivers loan is that they can be loaded only when necessary and then unloaded, thus saving kernel memory. Writing a device driver requires an in-depth understanding Christian Books of how the hardware and the software of a given platform function. Drivers operate in a highly privileged environment and can cause disaster if they get things wrong. In contrast, most user-level software on modern operating systems colon cleanse can be stopped without greatly affecting the rest of the system. Even drivers executing in user mode iPhone deals can crash a system if the device is erroneously programmed. These factors make it more difficult and dangerous to diagnose problems. Thus the task of writing drivers usually falls to software engineers lawyers who work for hardware-development companies. This is because they have better information than most outsiders wedding favors about the design of their hardware. Moreover, it was traditionally considered in the hardware manufacturer’s kids furniture interest to guarantee that their clients can use their hardware in an optimum way. Typically, the logical device driver (LDD) is written by the operating system vendor, while the physical device driver (PDD) is implemented by the device vendor. But in recent years non-vendors have written numerous device drivers, mainly for use with free and open source operating systems. In such cases, it is important that the hardware manufacturer backlink checker provides information on how the device communicates. Although this information can instead be learned by reverse engineering, this is much more difficult with hardware than it is with software. Microsoft has attempted Hen Party to reduce system instability due to poorly written device drivers by creating a new framework for driver development, called Windows Driver Foundation (WDF). This includes User-Mode Driver Framework (UMDF) weight loss tips that encourages development of certain types of drivers — primarily those that implement a message-based protocol for communicating with their devices — as user mode drivers. If such drivers malfunction, they do not cause system instability. The Kernel-Mode Driver Framework (KMDF) model continues to allow development of kernel-mode device drivers, but attempts to provide muscle building standard implementations of functions that are well known to cause problems, including cancellation of I/O operations, power management, and plug and play device support. Apple has an open-source framework for developing drivers on Mac OS X called the I/O Kit. Device drivers, particularly on modern Windows platforms, can run in kernel-mode (Ring 0) or in user-mode (Ring 3). The primary benefit of running a driver in user mode is improved stability Tignanello Handbags, since a poorly written user mode device driver cannot crash the system by overwriting kernel memory. On the other hand, user/kernel-mode transitions usually impose a considerable performance overhead, thereby prohibiting user mode-drivers for low latency and high throughput requirements. Kernel space can be accessed by user module only through the use of system calls. End user programs like the UNIX shell or other GUI based applications are part of the user space. These applications interact with hardware through kernel supported functions. Because of the diversity of modern hardware and operating systems, drivers operate in many different environments. Choosing and installing the correct device drivers for given hardware is often a key component Christian book store of computer system configuration. Virtual device drivers represent a particular variant of device drivers. They are used to emulate a hardware device, particularly in virtualization environments, for example when a DOS program is run on a Microsoft Windows computer or when a guest operating system is run on, for example, a Xen host. Instead of enabling the guest operating system to dialog with hardware, virtual device drivers take the opposite role and emulate a piece of hardware, so that the guest operating system and its drivers running inside a virtual machine text message marketing can have the illusion of accessing real hardware. Attempts by the guest operating system to access the hardware are routed to the virtual device driver in the host operating system as e.g. function calls. The virtual device driver can also send simulated processor-level events like interrupts into the virtual machine. Virtual devices may also operate in a non-virtualized environment. For example a virtual network adapter is used with a virtual private network, while a virtual disk device is used with iSCSI. In electronics and computing, firmware is a term often used to denote the fixed, usually rather small, programs and data structures that internally control various electronic devices. Typical examples of devices containing firmware range from end-user products such as remote controls or calculators, through computer parts and devices like hard disks, keyboards, TFT screens or memory cards, all the way to scientific instrumentation and industrial robotics. Also more complex consumer devices, such as mobile phones, digital cameras, synthesizers, etc., contain firmware to enable the device’s basic operation as well as implementing higher-level functions. There are no strict boundaries between firmware and software, as both are quite loose descriptive terms. However, the term firmware was originally coined in order to contrast to higher level software which could be changed without replacing a hardware component, and firmware is typically involved with very basic low-level operations without which a device would be completely non-functional. Firmware is also a relative term, as most embedded devices contain firmware at more than one level. Subsystems such as CPUs, flash chips, communication controllers, LCD modules, and so on, have their own (usually fixed) program code and/or microcode, regarded as “part of the hardware” by the higher-level(s) firmware. Simple firmware typically resides in ROM or OTP/PROM, while more complex firmware (often on the border to software) typically employs flash memory to allow for updates, at least in modern devices. Common reasons for updating firmware include fixing bugs or adding features to the device. Doing so usually involves loading a binary image file (provided by the manufacturer) into the device, according to a specific procedure; this is sometimes intended (by the device manufacturer) to be done by the end user. Ascher Opler coined the term “firmware” in a 1967 Datamation article. Originally, it meant the microcode – contents of a writable control store (a small specialized high speed memory), which defined and implemented the computer’s instruction set. If necessary, one could re-load the firmware to specialize or modify the instructions that the central processing unit (CPU) could execute. As originally used, firmware contrasted with hardware (the CPU itself) and software (normal instructions executing on a CPU). It was not composed of CPU machine instructions, but of lower-level microcode involved in the implementation of machine instructions. It existed on the boundary between hardware and software, thus the name “firmware”. Later application of the term broadened to include any type of microcode, whether in RAM or ROM. Still later, popular usage extended the word “firmware” to denote anything ROM-resident, including processor machine-instructions for BIOS, bootstrap loaders, or specialized applications. Until the mid 1990s, updating firmware to a new version typically involved replacing a storage-medium containing shoe lifts firmware, usually a socketed ROM. As of 2009 firmware-upgraders have largely abandoned this approach in favor of using firmware’s capability to overwrite itself in a convenient, purely electronic Kent Wedding Photographer operation. The concept of “firmware” has evolved to mean almost any programmable content of a hardware device, not only machine code for a processor, but also configurations and data for application-specific integrated circuits (ASICs), programmable logic devices, etc. In some respects, the various firmware components are as important as the operating system in a working computer. However, unlike most modern operating systems, firmware rarely has a toronto roofing well-evolved automatic mechanism of updating itself to fix any functionality issues detected after shipping the unit. Currently, one can fairly easily update the BIOS medical assistant training in a modern PC; devices like video cards or modems often rely on firmware dynamically loaded by a device driver and may thus get transparently updated through the operating system turf supplies update mechanisms. In contrast, firmware in storage devices rarely gets updated, even when flash (rather than ROM) storage is used; there are no standardized mechanisms for detecting and updating firmware versions. However, in practice, such devices have a low rate of functionality issues compared to parts hair loss treatment where the firmware may be updated.] Most computer peripherals are themselves special-purpose computers. While external devices have firmware stored internally, as of 2010 modern graphics cards and peripheral expansion teeth grinding mouth guard cards often have parts of the firmware loaded by the host system at start-up, as this provides greater flexibility. Such hardware may therefore fail to function fully until the host computer video converter has “fed” it the requisite firmware, typically via a specific device driver (more exactly: via a start-up subsystem within a device driver package). Modern device seo drivers, whether for internal or external “peripheral” devices, may also expose a direct graphical user-interface for configuration, often using parts of a normal application program interface in car insurance addition to lower level operating system calls, hooks, and/or other interfaces designed for device drivers. As of 2010 most modern portable music players support firmware link building service upgrades. Some companies use firmware updates to add new playable file formats (encodings); iriver added the Vorbis format this way, for instance. Other features that may change with firmware updates small business ideas include the GUI or even the battery life. Most mobile phones have a firmware upgrade capability for much the same reasons; some may even be upgraded to enhance reception or sound quality, illustrating the fact that firmware is used at how to deal with panic attacks more than one level in complex products (in a CPU-like microcontroller versus in a digital signal processor in this particular case). Since 1996 most automobiles have employed stamped concrete fort worth an on-board computer and various sensors to detect mechanical problems. As of 2010 modern vehicles also employ computer-controlled ABS systems and computer-operated Transmission Control Systems (TCS). The driver can also get in-dash information while driving in this manner, such as real-time fuel-economy and tire-pressure readings. Local dealers can update most vehicle firmware. A computer program (also a software program, or just a program) is a sequence Gas Fire Pit of instructions written to perform a specified task for a computer. A computer requires programs to function, typically executing the program’s instructions in a central processor. The program has an executable form that the computer can use stained concrete fort worth directly to execute the instructions. The same program in its human-readable source code form, from which executable programs are derived (e.g., compiled), enables a backlinks programmer to study and develop its algorithms. Computer source code is often written by professional computer programmers. Source code is written in a programming language that usually follows forex course one of two main paradigms: imperative or declarative programming. Source code may be converted into an executable file (sometimes called an executable program or a binary) by a compiler and later executed by a central how to get rid of a yeast infection processing unit. Alternatively, computer programs may be executed with the aid of an interpreter, or may be embedded directly into hardware. Computer programs may be categorized along functional lines: system software and application software. Many rain sounds computer programs may run simultaneously on a single computer, a process known as multitasking. Computer programming is the iterative process of writing or editing source code. Editing source code involves testing, analyzing, and refining, and sometimes coordinating with other programmers on a jointly developed program. A person who practices this skill is referred to as a computer programmer, software developer or coder. The sometimes lengthy process of computer programming is usually referred to as software development. The term software engineering is becoming popular as the process is seen as an engineering discipline. Computer programs can be categorized by the programming language paradigm used to produce them. Two of the main paradigms are imperative and declarative. Programs written using an imperative language specify an algorithm using declarations, expressions, and statements. A declaration couples a variable name to a datatype. For example: var x: integer; . An expression yields a value. For example: 2 + 2 yields 4. Finally, a statement might assign an expression to a variable or use the value of a variable to alter the program’s control flow. For example: x := 2 + 2; if x = 4 then do_something(); One criticism of imperative languages is the side-effect of an assignment statement on a class of variables called non-local variables. Programs written using a declarative language specify the properties that have to be met by the output. They do not specify details expressed in terms of the control flow of the executing machine but of the mathematical relations between the declared objects and their properties. Two broad categories of declarative languages are functional languages and logical languages. The principle behind functional languages (like Haskell) is to not allow side-effects, which makes it easier to reason about programs like mathematical functions. The principle behind logical languages (like Prolog) is to define the problem to be solved — the goal — and leave the detailed solution to the Prolog system itself. The goal is defined by providing a list of subgoals. Then each subgoal is defined by further providing a list of its subgoals, etc. If a path of subgoals fails to find a solution, then that subgoal is backtracked and another path is systematically attempted. The form in which a program is created may be textual or visual. In a visual language program, elements are graphically manipulated rather than textually specified. A computer program in the form of a human-readable, computer programming language is called source code. Source code may be converted into an executable image by a compiler or executed immediately with the aid of an interpreter. Either compiled or interpreted programs might be executed in a batch process without human interaction, but interpreted programs allow a user to type commands in an interactive session. In this case the programs are the separate commands, whose execution is chained together. When a language is used to give commands to a software application (such as a shell) it is called a scripting language. Compiled computer programs are commonly referred to as executables, binary images, or simply as binaries — a reference to the binary file format used to store the executable code. Compilers are used to translate source code from a programming language into either object code or machine code. Object code needs further processing to become machine code, and machine code is the Central Processing Unit’s native code, ready for execution. Interpreted computer programs -in a batch or interactive session- are either decoded and then immediately executed or are decoded into some efficient intermediate representation for future execution. BASIC, Perl, and Python are examples of immediately executed computer programs. Alternatively, Java computer programs are compiled ahead of time and stored as a machine independent code called bytecode. Bytecode is then executed upon request by an interpreter called a virtual machine. The main disadvantage of interpreters is computer programs run slower than if compiled. Interpreting code is slower than running the compiled version because the interpreter must decode each statement each time it is loaded and then perform the desired action. On the other hand, software development may be quicker using an interpreter because testing is immediate when the compilation step is omitted. Another disadvantage of interpreters is the interpreter must be present on the computer at the time the computer program is executed. By contrast, compiled computer programs need not have the compiler present at the time of execution. No properties of a programming language require it to be exclusively compiled or exclusively interpreted. The categorization usually reflects the most popular method of language execution. For example, BASIC is thought of as an interpreted language and C a compiled language, despite the existence of BASIC compilers and C interpreters. Some systems use Just-in-time compilation (JIT) whereby sections of the source are compiled ‘on the fly’ and stored for subsequent executions. A computer program in execution is normally treated as being different from the data the program operates on. However, in some cases this distinction is blurred when a computer program modifies itself. The modified computer program is subsequently executed as part of the same program. Self-modifying code is possible for programs written in Machine code, assembly language, Lisp, COBOL, PL/1, Prolog and javascript (the eval feature) among others. Typically, computer programs are stored in non-volatile memory until requested either directly or indirectly to be executed by the computer user. Upon such a request, the program is loaded into random access memory, by a computer program called an operating system, where it can be accessed directly by the central processor. The central processor then executes (“runs”) the program, instruction by instruction, until termination. A program in execution is called a process. Termination is either by normal self-termination or by error — software or hardware error. Some computer programs are embedded into hardware. A stored-program computer requires an initial computer program stored in its read-only memory to boot. The boot process is to identify and initialize all aspects of the system, from CPU registers to device controllers to memory contents. Following the initialization process, this initial computer program loads the operating system and sets the program counter to begin normal operations. Independent of the host computer, a hardware device might have embedded firmware to control its operation. Firmware is used when the computer program is rarely or never expected to change, or when the program must not be lost when the power is off. Computer programs historically were manually input to the central processor via switches. An instruction was represented by a configuration of on/off settings. After setting the configuration, an execute button was pressed. This process was then repeated. Computer programs also historically were manually input via paper tape or punched cards. After the medium was loaded, the starting address was set via switches and the execute button pressed. Generative programming is a style of computer programming that creates source code through generic classes, prototypes, templates, aspects, and code generators to improve programmer productivity. Source code is generated with programming tools such as a template processor or an Integrated Development Environment. The simplest form of source code generator is a macro processor, such as the C preprocessor, which replaces patterns in source code according to relatively simple rules. Software engines output source code or markup code that simultaneously become the input to another computer process. The analogy is that of one process driving another process, with the computer code being burned as fuel. Application servers are software engines that deliver applications to client computers. For example, a Wiki is an application server that allows users to build dynamic content assembled from articles. Wikis generate HTML, CSS, Java, and Javascript which are then interpreted by a web browser. Many operating systems support multitasking which enables many computer programs to appear to be running simultaneously on a single computer. Operating systems may run multiple programs through process scheduling — a software mechanism to switch the CPU among processes frequently so that users can interact with each program while it is running. Within hardware, modern day multiprocessor computers or computers with multicore processors may run multiple programs. A single computer program can calculate simultaneously more than one operation using threads or separate processes. Multithreading processors are optimized to execute multiple threads efficiently. Computer programs may be categorized along functional lines. The main functional categories are system software and application software. System software includes the operating system which couples the computer’s hardware with the application software. The purpose of the operating system is to provide an environment in which application software executes in a convenient and efficient manner. In addition to the operating system, system software includes utility programs that help manage and tune the computer. If a computer program is not system software then it is application software. Application software includes middleware, which couples the system software with the user interface. Application software also includes utility programs that help users solve application problems, like the need for sorting. Sometimes development environments for software development are seen as a functional category on its own, specially in the context of Human-Computer Interaction and programming language design. Development environments gather system software (such as compilers and system’s batch processing scripting languages) and application software (such as IDEs) with the specific purpose of allowing programmers to create new programs.

postgradount.net © 2010. Theme Squared created by Rodrigo Ghedin.