Xref: utzoo comp.lang.c:9821 comp.arch:4559 Path: utzoo!mnetor!uunet!lll-winken!lll-tis!ames!amdahl!pyramid!prls!mips!mash From: mash@mips.COM (John Mashey) Newsgroups: comp.lang.c,comp.arch Subject: Re: volatile (in comp.lang.c) Message-ID: <2114@winchester.mips.COM> Date: 1 May 88 00:34:29 GMT References: <20345@pyramid.pyramid.com> <833@mcdsun.UUCP> <9916@tekecs.TEK.COM> <2642@geac.UUCP> <2082@winchester.mips.COM> <2674@geac.UUCP> Reply-To: mash@winchester.UUCP (John Mashey) Organization: MIPS Computer Systems, Sunnyvale, CA Lines: 67 In article <2674@geac.UUCP> daveb@geac.UUCP (David Collier-Brown) writes: >In article <2642@geac.UUCP> daveb@geac.UUCP (David Collier-Brown) writes: >| It is interesting to note that there have not been, to date, >| **any** other discussion of the necessity of "volatile" et all, only >| of their desirability in a given language, taking their necessity as >| **a given**. >In article <2082@winchester.mips.COM> mash@winchester.UUCP (John Mashey) writes: >| This is an assertion of non-fact. There was such a discussion that >| ran for about a week, a month or so ago, at least in comp.lang.c. >| People gave examples of potential usage; some of us who have it and use >| it said so; I observed that both of our kernels had about 200 >| instances of volatile, and we'd miss it a lot if it weren't there. > Sorry John, that's not a discussion of the necessity for such a >facility. (Yes, I read your article when it was published). > That your compiler-wriers believed that such was necessary **is** >germane, and I'll happily agree that, if found necessary by the >compiler-writers, one would be a little foolish to not use it (:-)). It wasn't our compiler-writers, it was us (the OS group) who thought we needed it. > I reiterate: the question of the necessity of certain information >for optimization purposes is: > 1) in part architectural, > 2) in part a question of compiler technology, and > 3) open. > Specifically: > 1) what architectures currently use asynchronously-changing >memory locations for program notification of events? DEC Vax, >various CDC boxes, MIPS(tm),... > 2) what other programmer-visible alternatives are there? >Interrupts, event queues, (Hoare) monitors... As I thought I'd mentioned before, the most immediate cause of wanting volatile has nothing to do with computer architecture in the sense of 1), or OS theory/practice in the sense of 2), but the very simple, practical reason, that in an open systems design, using a standard bus, and buying off-the-shelf controllers, you will discover that many such controllers, otherwise desirable, use memory as a communication mechanism. You get a choice: a) Add volatile to C, and be able to optimize your drivers with minimum performance loss, thus maintaining the ability to use C rather than assembler without irritating performance lossage. You also get to port existing drivers fairly easily. OR b) Don't optimize your drivers very much. OR c) Eliminate many potential peripheral controllers, or at best, have to completely redo drivers you get from elsewhere. OR d) Build all your own peripheral controllers. Of these options, most people do b), because c) and d) aren't practical for many organizations; a) is clearly more pleasant, an much more in tune with the philosophy in UNIX that using C shouldn't cause you a big performance hit, and that C should be able to describe devices and otehr interfaces not under the software architect's control. Does that address the question: volatile matches the reality of what's out there, not what might be possible otherwise. -- -john mashey DISCLAIMER: UUCP: {ames,decwrl,prls,pyramid}!mips!mash OR mash@mips.com DDD: 408-991-0253 or 408-720-1700, x253 USPS: MIPS Computer Systems, 930 E. Arques, Sunnyvale, CA 94086