Top Document: Comp.os.research: Frequently answered questions [1/3: l/m 13 Aug 1996] Previous Document: [2.2.2] Characterising implementations of multithreading Next Document: [3] File systems See reader questions & answers on this topic! - Help others by sharing your knowledge From: Recurrent discussions [93-04-21-13-32.11] [92-01-27-17-05.54] The notion of a thread, as a sequential flow of control, dates back to 1965, at least, with the Berkeley Timesharing System. Only they weren't called threads at that time, but processes [Dijkstra, 65]. Processes interacted through shared variables, semaphores, and similar means. Max Smith did a prototype threads implementation on Multics around 1970; it used multiple stacks in a single heavyweight process to support background compilations. Perhaps the most important progenitor of threads is the programming language PL/I, from about the 1965 time frame. The language as defined by IBM provided a `CALL XXX (A, B) TASK;' construct, which forked a thread for XXX. It is not clear whether any IBM compiler ever implemented this feature, but it was examined closely while Multics was being designed; it was decided that the TASK call as defined didn't map onto processes, since there was no protection between the threads of control. So Multics took a different direction, and the TASK feature was removed from PL/I by IBM in any case, along with the ABNORMAL attribute and lots of other weird stuff. Then came Unix, in the early 1970s. The Unix notion of a `process' became a sequential thread of control *plus* a virtual address space (incidentally, the Unix notion of a process derived directly from the Multics process design [Saltzer, 66]). So `processes', in the Unix sense, are quite heavyweight machines. Since they cannot share memory (each has its own address space), they interact through pipes, signals, etc). Shared memory (also a rather ponderous mechanism) was added much later. After some time, Unix users started to miss the old processes that could share memory. This led to the `invention' of threads: old-style processes that shared the address space of a single Unix process. They also were called `lightweight', by way of contrast with `heavyweight' Unix processes. This distinction dates back to the very late 70s or early 80s, i.e. to the first `microkernels' (Thoth (precursor of the V-kernel and QNX), Amoeba, Chorus, the RIG-Accent-Mach family, etc). On a side note, threads have been in continuous use in telecommunications applications for quite a long time. See also: [Cheriton, 79] Cheriton, D. R., `Multi-process structuring and the Thoth operating system', Ph.D. Thesis, University of Waterloo, 1979. [Daley & Dennis, 68] Daley, R. C., Dennis, J. B., `Virtual memory, processes, and sharing in Multics', Comm, ACM 11, 306-312, May 1968. [Dennis & van Horn, 66] Dennis, J. B., van Horn, E. C., `Programming semantics for multiprogrammed computations', MAC-TR-21, 1966. [Dijkstra, 65] Dijkstra, E. W., `Cooperating sequential processes', in `Programming Languages', Genuys, F. (ed.), Academic Press, 1965. [Saltzer, 66] Saltzer, J. H., `Traffic control in a multiplexed computer system', MAC-TR-30 (Sc.D. Thesis), July, 1966. User Contributions: 1 UoowNen ⚠ Sep 24, 2021 @ 7:07 am buy zithromax online https://zithromaxazitromycin.com/ - buy zithromax online zithromax online https://zithromaxazitromycin.com/ - buy zithromax Comment about this article, ask questions, or add new information about this topic:Top Document: Comp.os.research: Frequently answered questions [1/3: l/m 13 Aug 1996] Previous Document: [2.2.2] Characterising implementations of multithreading Next Document: [3] File systems Part1 - Part2 - Part3 - Single Page [ Usenet FAQs | Web FAQs | Documents | RFC Index ] Send corrections/additions to the FAQ Maintainer: os-faq@cse.ucsc.edu
Last Update March 27 2014 @ 02:11 PM
|