Linux kernel
The Linux kernel is a free and open-source, Unix-like operating system kernel. The Linux family of operating systems is based on this kernel and deployed on both traditional computer systems such as personal computers and servers in the form of Linux distributions, on various embedded devices such as routers, wireless access points, PBXes, set-top boxes, FTA receivers, smart TVs, PVRs, NAS appliances. While the adoption of the Linux kernel in desktop computer operating system is low, Linux-based operating systems dominate nearly every other segment of computing, from mobile devices to mainframes; as of November 2017, all of the world's 500 most powerful supercomputers run Linux. The Android operating system for tablet computers and smartwatches uses the Linux kernel; the Linux kernel was conceived and created in 1991 by Linus Torvalds for his personal computer and with no cross-platform intentions, but has since expanded to support a huge array of computer architectures, many more than other operating systems or kernels.
Linux attracted developers and users who adopted it as the kernel for other free software projects, notably the GNU Operating System, created as a free, non-proprietary operating system, based on UNIX as a by-product of the fallout of the Unix wars. The Linux kernel API, the application programming interface through which user programs interact with the kernel, is meant to be stable and to not break userspace programs; as part of the kernel's functionality, device drivers control the hardware. However, the interface between the kernel and loadable kernel modules, unlike in many other kernels and operating systems, is not meant to be stable by design; the Linux kernel, developed by contributors worldwide, is a prominent example of free and open source software. Day-to-day development discussions take place on the Linux kernel mailing list; the Linux kernel is released under the GNU General Public License version 2, with some firmware images released under various non-free licenses. In April 1991, Linus Torvalds, at the time a 21-year-old computer science student at the University of Helsinki, started working on some simple ideas for an operating system.
He started with a task switcher in a terminal driver. On 25 August 1991, Torvalds posted the following to comp.os.minix, a newsgroup on Usenet: I'm doing a operating system for 386 AT clones. This has been brewing since April, is starting to get ready. I'd like any feedback on things people like/dislike in minix. I've ported bash and gcc, things seem to work; this implies that I'll get something practical within a few months Yes - it's free of any minix code, it has a multi-threaded fs. It is NOT portable, it never will support anything other than AT-harddisks, as that's all I have:-(. It's in C, but most people wouldn't call what I write C, it uses every conceivable feature of the 386 I could find, as it was a project to teach me about the 386. As mentioned, it uses a MMU, for both paging and segmentation. It's the segmentation; some of my "C"-files are as much assembler as C. Unlike minix, I happen to LIKE interrupts, so interrupts are handled without trying to hide the reason behind them. After that, many people contributed code to the project.
Early on, the MINIX community contributed code and ideas to the Linux kernel. At the time, the GNU Project had created many of the components required for a free operating system, but its own kernel, GNU Hurd, was incomplete and unavailable; the Berkeley Software Distribution had not yet freed itself from legal encumbrances. Despite the limited functionality of the early versions, Linux gained developers and users. In September 1991, Torvalds released version 0.01 of the Linux kernel on the FTP server of the Finnish University and Research Network. It had 10,239 lines of code. On 5 October 1991, version 0.02 of the Linux kernel was released. Torvalds assigned version 0 to the kernel to indicate that it was for testing and not intended for productive use. In December 1991, Linux kernel 0.11 was released. This version was the first to be self-hosted as Linux kernel 0.11 could be compiled by a computer running the same kernel version. When Torvalds released version 0.12 in February 1992, he adopted the GNU General Public License version 2 over his previous self-drafted license, which had not permitted commercial redistribution.
On 19 January 1992, the first post to the new newsgroup alt.os.linux was submitted. On 31 March 1992, the newsgroup was renamed comp.os.linux. The fact that Linux is a monolithic kernel rather than a microkernel was the topic of a debate between Andrew S. Tanenbaum, the creator of MINIX, Torvalds; this discussion is known as the Tanenbaum–Torvalds debate and started in 1992 on the Usenet discussion group comp.os.minix as a general debate about Linux and kernel architecture. Tanenbaum argued that microkernels were superior to monolithic kernels and that therefore Linux was obsolete. Unlike traditional monolithic kernels, device drivers in Linux are configured as loadable kernel modules and are loaded or unloaded while
Comparison sort
A comparison sort is a type of sorting algorithm that only reads the list elements through a single abstract comparison operation that determines which of two elements should occur first in the final sorted list. The only requirement is that the operator forms a total preorder over the data, with: if a ≤ b and b ≤ c a ≤ c for all a and b, a ≤ b or b ≤ a, it is possible that both a ≤ b ≤ a. In a stable sort, the input order determines the sorted order in this case. A metaphor for thinking about comparison sorts is that someone has a set of unlabelled weights and a balance scale, their goal is to line up the weights in order by their weight without any information except that obtained by placing two weights on the scale and seeing which one is heavier. Some of the most well-known comparison sorts include: Quicksort Heapsort Shellsort Merge sort Introsort Insertion sort Selection sort Bubble sort Odd–even sort Cocktail shaker sort Cycle sort Merge-insertion sort Smoothsort Timsort There are fundamental limits on the performance of comparison sorts.
A comparison sort must have an average-case lower bound of Ω comparison operations, known as linearithmic time. This is a consequence of the limited information available through comparisons alone — or, to put it differently, of the vague algebraic structure of ordered sets. In this sense, mergesort and introsort are asymptotically optimal in terms of the number of comparisons they must perform, although this metric neglects other operations. Non-comparison sorts can achieve O performance by using operations other than comparisons, allowing them to sidestep this lower bound. Comparison sorts may run faster on some lists; the Ω lower bound applies only to the case. Real-world measures of sorting speed may need to take into account the ability of some algorithms to optimally use fast cached computer memory, or the application may benefit from sorting methods where sorted data begins to appear to the user as opposed to sorting methods where no output is available until the whole list is sorted.
Despite these limitations, comparison sorts offer the notable practical advantage that control over the comparison function allows sorting of many different datatypes and fine control over how the list is sorted. For example, reversing the result of the comparison function allows the list to be sorted in reverse. Comparison sorts adapt more to complex orders such as the order of floating-point numbers. Additionally, once a comparison function is written, any comparison sort can be used without modification; this flexibility, together with the efficiency of the above comparison sorting algorithms on modern computers, has led to widespread preference for comparison sorts in most practical work. Some sorting problems admit a faster solution than the Ω bound for comparison sorting; when the keys form a small range, counting sort is an example algorithm. Other integer sorting algorithms, such as radix sort, are not asymptotically faster than comparison sorting, but can be faster in practice; the problem of sorting pairs of numbers by their sum is not subject to the Ω bound either.
The number of comparisons that a comparison sort algorithm requires increases in proportion to n log , where n is the number of elements to sort. This bound is asymptotically tight. Given a list of distinct numbers, there are n factorial permutations one of, the list in sorted order; the sort algorithm must gain enough information from the comparisons to identify the correct permutation. If the algorithm always completes after at most f steps, it cannot distinguish more than 2f cases because the keys are distinct and each comparison has only two possible outcomes. Therefore, 2 f ≥ n!, or equivalently f ≥ log 2 . By looking at the first n / 2 factors of n! = n ⋯ 1, we obtain log 2
Kolmogorov complexity
In algorithmic information theory, the Kolmogorov complexity of an object, such as a piece of text, is the length of the shortest computer program that produces the object as output. It is a measure of the computational resources needed to specify the object, is known as descriptive complexity, Kolmogorov–Chaitin complexity, algorithmic complexity, algorithmic entropy, or program-size complexity, it is named after Andrey Kolmogorov, who first published on the subject in 1963. The notion of Kolmogorov complexity can be used to state and prove impossibility results akin to Cantor's diagonal argument, Gödel's incompleteness theorem, Turing's halting problem. In particular, for all objects, it is not possible to compute a lower bound for its Kolmogorov complexity, let alone its exact value. Consider the following two strings of 32 lowercase letters and digits. Example 1: abababababababababababababababab Example 2: 4c1j5b2p0cv4w1x8rx2y39umgw5q85s7The first string has a short English-language description, namely "ab 16 times", which consists of 11 characters.
The second one has no obvious simple description other than writing down the string itself, which has 32 characters. More formally, the complexity of a string is the length of the shortest possible description of the string in some fixed universal description language, it can be shown that the Kolmogorov complexity of any string cannot be more than a few bytes larger than the length of the string itself. Strings like the abab example above, whose Kolmogorov complexity is small relative to the string's size, are not considered to be complex; the Kolmogorov complexity can be defined for any mathematical object, but for simplicity the scope of this article is restricted to strings. We must first specify a description language for strings; such a description language can be based on any computer programming language, such as Lisp, Pascal, or Java virtual machine bytecode. If P is a program which outputs a string x P is a description of x; the length of the description is just the length of P as a character string, multiplied by the number of bits in a character.
We could, choose an encoding for Turing machines, where an encoding is a function which associates to each Turing Machine M a bitstring <M>. If M is a Turing Machine which, on input w, outputs string x the concatenated string <M> w is a description of x. For theoretical analysis, this approach is more suited for constructing detailed formal proofs and is preferred in the research literature. In this article, an informal approach is discussed. Any string s has at least one description. For example, the second string above is output by the program: function GenerateExample2String return "4c1j5b2p0cv4w1x8rx2y39umgw5q85s7" where the first string is output by the pseudo-code: function GenerateExample1String return "ab" * 16 If a description d of a string s is of minimal length, it is called a minimal description of s. Thus, the length of d is the Kolmogorov complexity of s, written K. Symbolically, K = |d|; the length of the shortest description will depend on the choice of description language. There are some description languages which are optimal, in the following sense: given any description of an object in a description language, said description may be used in the optimal description language with a constant overhead.
The constant depends only on the languages involved, not on the description of the object, nor the object being described. Here is an example of an optimal description language. A description will have two parts: The first part describes another description language; the second part is a description of the object in that language. In more technical terms, the first part of a description is a computer program, with the second part being the input to that computer program which produces the object as output; the invariance theorem follows: Given any description language L, the optimal description language is at least as efficient as L, with some constant overhead. Proof: Any description D in L can be converted into a description in the optimal language by first describing L as a computer program P, using the original description D as input to that program; the total length of this new description D′ is: |D′| = |P| + |D|The length of P is a constant that doesn't depend on D. So, there is at most a constant overhead, regardless of the object described.
Therefore, the optimal language is universal up to this additive constant. Theorem: If K1 and K2 are the complexity functions relative to Turing complete description languages L1 and L2 there is a constant c – which depends only on the languages L1 and L2 chosen – such that ∀s. −c ≤ K1 − K2 ≤ c. Proof: By symmetry, it suffices to prove that there is some constant c such that for all strings s K1 ≤ K2 + c. Now, suppose there is a program in the language L1 which acts as an interpreter for L2: function InterpretLanguage where p is a program in L2; the interpreter is characterized by the following property: Running InterpretLanguage on input p returns the result of running p. Thus, if P is a program in L2, a minimal description of s InterpretLanguage returns the string s; the length of this description of s is the sum of The length of the program InterpretLanguage, which we can take to be the constant c. The length of P which
On-Line Encyclopedia of Integer Sequences
The On-Line Encyclopedia of Integer Sequences cited as Sloane's, is an online database of integer sequences. It was maintained by Neil Sloane while a researcher at AT&T Labs. Foreseeing his retirement from AT&T Labs in 2012 and the need for an independent foundation, Sloane agreed to transfer the intellectual property and hosting of the OEIS to the OEIS Foundation in October 2009. Sloane is president of the OEIS Foundation. OEIS records information on integer sequences of interest to both professional mathematicians and amateurs, is cited; as of September 2018 it contains over 300,000 sequences. Each entry contains the leading terms of the sequence, mathematical motivations, literature links, more, including the option to generate a graph or play a musical representation of the sequence; the database is searchable by subsequence. Neil Sloane started collecting integer sequences as a graduate student in 1965 to support his work in combinatorics; the database was at first stored on punched cards.
He published selections from the database in book form twice: A Handbook of Integer Sequences, containing 2,372 sequences in lexicographic order and assigned numbers from 1 to 2372. The Encyclopedia of Integer Sequences with Simon Plouffe, containing 5,488 sequences and assigned M-numbers from M0000 to M5487; the Encyclopedia includes the references to the corresponding sequences in A Handbook of Integer Sequences as N-numbers from N0001 to N2372 The Encyclopedia includes the A-numbers that are used in the OEIS, whereas the Handbook did not. These books were well received and after the second publication, mathematicians supplied Sloane with a steady flow of new sequences; the collection became unmanageable in book form, when the database had reached 16,000 entries Sloane decided to go online—first as an e-mail service, soon after as a web site. As a spin-off from the database work, Sloane founded the Journal of Integer Sequences in 1998; the database continues to grow at a rate of some 10,000 entries a year.
Sloane has managed'his' sequences for 40 years, but starting in 2002, a board of associate editors and volunteers has helped maintain the database. In 2004, Sloane celebrated the addition of the 100,000th sequence to the database, A100000, which counts the marks on the Ishango bone. In 2006, the user interface was overhauled and more advanced search capabilities were added. In 2010 an OEIS wiki at OEIS.org was created to simplify the collaboration of the OEIS editors and contributors. The 200,000th sequence, A200000, was added to the database in November 2011. Besides integer sequences, the OEIS catalogs sequences of fractions, the digits of transcendental numbers, complex numbers and so on by transforming them into integer sequences. Sequences of rationals are represented by two sequences: the sequence of numerators and the sequence of denominators. For example, the fifth-order Farey sequence, 1 5, 1 4, 1 3, 2 5, 1 2, 3 5, 2 3, 3 4, 4 5, is catalogued as the numerator sequence 1, 1, 1, 2, 1, 3, 2, 3, 4 and the denominator sequence 5, 4, 3, 5, 2, 5, 3, 4, 5.
Important irrational numbers such as π = 3.1415926535897... are catalogued under representative integer sequences such as decimal expansions, binary expansions, or continued fraction expansions. The OEIS was limited to plain ASCII text until 2011, it still uses a linear form of conventional mathematical notation. Greek letters are represented by their full names, e.g. mu for μ, phi for φ. Every sequence is identified by the letter A followed by six digits always referred to with leading zeros, e.g. A000315 rather than A315. Individual terms of sequences are separated by commas. Digit groups are not separated by periods, or spaces. In comments, etc. A represents the nth term of the sequence. Zero is used to represent non-existent sequence elements. For example, A104157 enumerates the "smallest prime of n² consecutive primes to form an n×n magic square of least magic constant, or 0 if no such magic square exists." The value of a is 2. But there is no such 2×2 magic square, so a is 0; this special usage has a solid mathematical basis in certain counting functions.
For example, the totient valence function. There are 4 solutions for 4, but no solutions for 14, hence a of A014197 is 0—there are no solutions. −1 is used for this purpose instead, as in A094076. The OEIS ma
Coin problem
The coin problem is a mathematical problem that asks for the largest monetary amount that cannot be obtained using only coins of specified denominations. For example, the largest amount that cannot be obtained using only coins of 3 and 5 units is 7 units; the solution to this problem for a given set of coin denominations is called the Frobenius number of the set. The Frobenius number exists as long as the set of coin denominations has no common divisor greater than 1. There is an explicit formula for the Frobenius number when there are only two different coin denominations, x and y : xy − x − y. If the number of coin denominations is three or more, no explicit formula is known. No known algorithm is polynomial time in the number of coin denominations, the general problem, where the number of coin denominations may be as large as desired, is NP-hard. In mathematical terms the problem can be stated: Given positive integers a1, a2, …, an such that gcd = 1, find the largest integer that cannot be expressed as an integer conical combination of these numbers, i.e. as a sum k1a1 + k2a2 + ··· + knan, where k1, k2, …, kn are non-negative integers.
This largest integer is called the Frobenius number of the set, is denoted by g. The requirement that the greatest common divisor equal 1 is necessary in order for the Frobenius number to exist. If the GCD were not 1, every integer, not a multiple of the GCD would be inexpressible as a linear, let alone conical, combination of the set, therefore there would not be a largest such number. For example, if you had two types of coins valued at 4 cents and 6 cents, the GCD would equal 2, there would be no way to combine any number of such coins to produce a sum, an odd number. On the other hand, whenever the GCD equals 1, the set of integers that cannot be expressed as a conical combination of is bounded according to Schur's theorem, therefore the Frobenius number exists. A closed-form solution exists for the coin problem only where n = 1 or 2. No closed-form solution is known for n > 2. If n = 1 a1 = 1 so that all natural numbers can be formed. Hence no Frobenius number in one variable exists. If n = 2, the Frobenius number can be found from the formula g = a 1 a 2 − a 1 − a 2.
This formula was discovered by James Joseph Sylvester in 1882, although the original source is sometimes incorrectly cited as, in which the author put his theorem as a recreational problem. Sylvester demonstrated for this case that there are a total of N = / 2 non-representable integers. Another form of the equation for g is given by Skupień in this proposition: If a 1, a 2 ∈ N and gcd = 1 for each n ≥, there is one pair of nonnegative integers ρ and σ such that σ < a 1 and n = ρ a 1 + σ a 2. The formula is proved. Suppose we wish to construct the number m ≥. Note that, since gcd = 1, all of the integers m − j a 2 for j = 0, 1, …, a 1 − 1 are mutually distinct modulo a 1. Hence there is a unique value of j, say j = σ, a nonnegative integer ρ, such that m = ρ a 1 + σ a 2: Indeed, ρ ≥ 0 bec
Donald Knuth
Donald Ervin Knuth is an American computer scientist and professor emeritus at Stanford University. He is the author of the multi-volume work The Art of Computer Programming, he contributed to the development of the rigorous analysis of the computational complexity of algorithms and systematized formal mathematical techniques for it. In the process he popularized the asymptotic notation. In addition to fundamental contributions in several branches of theoretical computer science, Knuth is the creator of the TeX computer typesetting system, the related METAFONT font definition language and rendering system, the Computer Modern family of typefaces; as a writer and scholar, Knuth created the WEB and CWEB computer programming systems designed to encourage and facilitate literate programming, designed the MIX/MMIX instruction set architectures. Knuth opposes granting software patents, having expressed his opinion to the United States Patent and Trademark Office and European Patent Organisation. Knuth was born in Milwaukee, Wisconsin, to German-Americans Ervin Henry Knuth and Louise Marie Bohning.
His father had two jobs: running a small printing company and teaching bookkeeping at Milwaukee Lutheran High School. Donald, a student at Milwaukee Lutheran High School, received academic accolades there because of the ingenious ways that he thought of solving problems. For example, in eighth grade, he entered a contest to find the number of words that the letters in "Ziegler's Giant Bar" could be rearranged to create. Although the judges only had 2,500 words on their list, Donald found 4,500 words, winning the contest; as prizes, the school received a new television and enough candy bars for all of his schoolmates to eat. In 1956, Knuth received a scholarship to the Case Institute of Technology in Ohio, he joined Beta Nu Chapter of the Theta Chi fraternity. While studying physics at the Case Institute of Technology, Knuth was introduced to the IBM 650, one of the early mainframes. After reading the computer's manual, Knuth decided to rewrite the assembly and compiler code for the machine used in his school, because he believed he could do it better.
In 1958, Knuth created a program to help his school's basketball team win their games. He assigned "values" to players in order to gauge their probability of getting points, a novel approach that Newsweek and CBS Evening News reported on. Knuth was one of the founding editors of the Engineering and Science Review, which won a national award as best technical magazine in 1959, he switched from physics to mathematics, in 1960 he received his bachelor of science degree being given a master of science degree by a special award of the faculty who considered his work exceptionally outstanding. In 1963, with mathematician Marshall Hall as his adviser, he earned a PhD in mathematics from the California Institute of Technology. After receiving his PhD, Knuth joined Caltech's faculty as an assistant professor, he accepted a commission to write a book on computer programming language compilers. While working on this project, Knuth decided that he could not adequately treat the topic without first developing a fundamental theory of computer programming, which became The Art of Computer Programming.
He planned to publish this as a single book. As Knuth developed his outline for the book, he concluded that he required six volumes, seven, to cover the subject, he published the first volume in 1968. Just before publishing the first volume of The Art of Computer Programming, Knuth left Caltech to accept employment with the Institute for Defense Analyses' Communications Research Division situated on the Princeton University campus, performing mathematical research in cryptography to support the National Security Agency. Knuth left this position to join the Stanford University faculty, where he is now Fletcher Jones Professor of Computer Science, Emeritus. Knuth is a writer, as well as a computer scientist. Knuth has been called the "father of the analysis of algorithms". In the 1970s, Knuth described computer science as "a new field with no real identity, and the standard of available publications was not that high. A lot of the papers coming out were quite wrong.... So one of my motivations was to put straight a story, badly told."
By 2011, the first three volumes and part one of volume four of his series had been published. Concrete Mathematics: A Foundation for Computer Science 2nd ed. which originated with an expansion of the mathematical preliminaries section of Volume 1 of TAoCP, has been published. Bill Gates has praised the difficulty of the subject matter in The Art of Computer Programming, stating, "If you think you're a good programmer... You should send me a résumé if you can read the whole thing." Knuth is the author of Surreal Numbers, a mathematical novelette on John Conway's set theory construction of an alternate system of numbers. Instead of explaining the subject, the book seeks to show the development of the mathematics. Knuth wanted the book to prepare students for doing creative research. In 1995, Knuth wrote the foreword to the book A=B by Marko Petkovšek, Herbert Wilf and Doron Zeilberger. Knuth is an occasional contributor of language puzzles to Word Ways: The Journal of Recreational Linguistics. Knuth has delved into recreational mathematics.
He contributed articles to the Journal of Recreational Mathematics beginning in the 1960s, was acknowledged as a major contributor in Joseph Madachy's Mathematics on Vacation. Knuth has appeared in a number of Numberphile and Computerphile videos on YouTube where he has discussed topics f
Embedded system
An embedded system is a controller programmed and controlled by a real-time operating system with a dedicated function within a larger mechanical or electrical system with real-time computing constraints. It is embedded as part of a complete device including hardware and mechanical parts. Embedded systems control many devices in common use today. Ninety-eight percent of all microprocessors manufactured are used in embedded systems. Examples of properties of typical embedded computers when compared with general-purpose counterparts are low power consumption, small size, rugged operating ranges, low per-unit cost; this comes at the price of limited processing resources, which make them more difficult to program and to interact with. However, by building intelligence mechanisms on top of the hardware, taking advantage of possible existing sensors and the existence of a network of embedded units, one can both optimally manage available resources at the unit and network levels as well as provide augmented functions, well beyond those available.
For example, intelligent techniques can be designed to manage power consumption of embedded systems. Modern embedded systems are based on microcontrollers, but ordinary microprocessors are common in more complex systems. In either case, the processor used may be types ranging from general purpose to those specialized in certain class of computations, or custom designed for the application at hand. A common standard class of dedicated processors is the digital signal processor. Since the embedded system is dedicated to specific tasks, design engineers can optimize it to reduce the size and cost of the product and increase the reliability and performance; some embedded systems are mass-produced. Embedded systems range from portable devices such as digital watches and MP3 players, to large stationary installations like traffic lights, factory controllers, complex systems like hybrid vehicles, MRI, avionics. Complexity varies from low, with a single microcontroller chip, to high with multiple units and networks mounted inside a large chassis or enclosure.
One of the first recognizably modern embedded systems was the Apollo Guidance Computer, developed ca. 1965 by Charles Stark Draper at the MIT Instrumentation Laboratory. At the project's inception, the Apollo guidance computer was considered the riskiest item in the Apollo project as it employed the newly developed monolithic integrated circuits to reduce the size and weight. An early mass-produced embedded system was the Autonetics D-17 guidance computer for the Minuteman missile, released in 1961; when the Minuteman II went into production in 1966, the D-17 was replaced with a new computer, the first high-volume use of integrated circuits. Since these early applications in the 1960s, embedded systems have come down in price and there has been a dramatic rise in processing power and functionality. An early microprocessor for example, the Intel 4004, was designed for calculators and other small systems but still required external memory and support chips. In 1978 National Engineering Manufacturers Association released a "standard" for programmable microcontrollers, including any computer-based controllers, such as single board computers and event-based controllers.
As the cost of microprocessors and microcontrollers fell it became feasible to replace expensive knob-based analog components such as potentiometers and variable capacitors with up/down buttons or knobs read out by a microprocessor in consumer products. By the early 1980s, memory and output system components had been integrated into the same chip as the processor forming a microcontroller. Microcontrollers find applications. A comparatively low-cost microcontroller may be programmed to fulfill the same role as a large number of separate components. Although in this context an embedded system is more complex than a traditional solution, most of the complexity is contained within the microcontroller itself. Few additional components may be needed and most of the design effort is in the software. Software prototype and test can be quicker compared with the design and construction of a new circuit not using an embedded processor. Embedded systems are found in consumer, automotive, medical and military applications.
Telecommunications systems employ numerous embedded systems from telephone switches for the network to cell phones at the end user. Computer networking uses dedicated routers and network bridges to route data. Consumer electronics include MP3 players, mobile phones, video game consoles, digital cameras, GPS receivers, printers. Household appliances, such as microwave ovens, washing machines and dishwashers, include embedded systems to provide flexibility and features. Advanced HVAC systems use networked thermostats to more and efficiently control temperature that can change by time of day and season. Home automation uses wired- and wireless-networking that can be used to control lights, security, audio/visual, etc. all of which use embedded devices for sensing and controlling. Transportation systems from flight to automobiles use embedded systems. New airplanes contain advanced avionics such as inertial guidance systems and GPS receivers that have considerable safety requirements. Various electric motors — brushless DC motors, induction motors and DC motors — use electric/electronic motor controllers.
Automobiles, electric vehicles, hy