Software that translates a high-level request into the low-level commands required to perform the operation. The most common abstraction layer is the programming interface (API) between an application and the operating system. High-level calls are made to the operating system, which executes the necessary instructions to perform the task. The domain names and URLs on the Internet are another common abstraction layer, enabling an alphabetic name such as computerlanguage.com to be converted into the numeric IP address of the Web server (see Internet domain name). Multiple Layers of Abstraction Today's applications are often programmed in multiple layers of abstraction. For example, a program can be written by selecting menu options and dragging icons around the screen. These movements may be translated into a high-level language that is translated into a low-level language, which is translated into machine language. The farther away from the machine language of the computer that an operation is programmed, the more instructions are executed to perform the task. Combine this with the interaction of the operating system, which itself may be executing 10 times as many instructions as necessary, and you understand why even on a fast computer, a user may be able to press the keyboard keys faster than the program can accept the input. Considering modern personal computers execute upwards of two billion instructions per second, compared to the first PCs that executed one million, the extra machine cycles are absorbed layer to layer, each one telling the next one what to do. See level of abstraction.