[ILUG] Re: System programming POSIX

Brian Foster blf at utvinternet.ie
Fri Jan 11 06:48:21 GMT 2008


  | Date: Thu, 10 Jan 2008 23:13:25 +0000
  | From: "Pedro Jurado" <ped.jurado at gmail.com>
  | 
  | If you want to take a look to a *NIX kernel POSIX complaint, try Minix
  |  http://en.wikipedia.org/wiki/MINIX
  | it was created specifically to be use like a resource for students, I
  | studied this kernel in my degree in Computer Science in Seville to learn
  | concepts like threads, semaphores and other things.

 the Minux kernel and libraries, like the Linux
 and Unix kernels and libraries, _implements_ some
 or all of the POSIX APIs.  the kernels themselves
 are _not_ POSIX compliant; that simply makes no
 sense.

 to illustrate:  POSIX specifies the properties
 read(2) must have; i.e., the arguments, returns,
 essential functionality, interaction with fcntl(2),
 and so on.  POSIX describes a high-level machine;
 that is, a system, by listing the caller-visible
 properties each system call must have.  broadly,
 the read(2) man(1) page is POSIX's description of
 ‘read’; and for a version closer to what POSIX
 says, see The Open Group's Single Unix Specification
 (registration required):

    http://www.opengroup.org/onlinepubs/009695399/

 the libraries and (mostly) kernels provide an
 implementation of ‘read’.  to do this, they
 manage disc buffers, interrupts, concurrency,
 caches, DMA, &tc and --- this is key --- run
 on bare metal (or, nowadays, virtual metal).
 that is, the kernels run on a low-level machine;
 not on the high-level machine POSIX describes.
 ergo, the kernels themselves cannot possibly
 be POSIX complaint programs.  instead, they
 provide POSIX compliance; i.e., the kernels
 implement the POSIX high-level machine.

 it's usually said that (e.g.) “Linux is POSIX
 complaint”.  that's correct, when you read
 “Linux” as meaning what GNU/Linux provides.
 it's not a statement about the kernel's code
 itself; nor about kernel programming.

 sorry if I'm growing a molehill here, but the
 distinction between what something implements,
 and how that something is itself implemented,
 can be important.  and in the case of the OP,
 it wasn't clear whether s/he meant writing code
 to use the POSIX API (systems programming),
 or implementing that API (kernel programming).
 as a result, s/he got two completely different
 sets of answers:  one assuming the OP meant
 kernel programming, and the other assuming s/he
 meant systems programming.

cheers!
	-blf-

  | The only problem is the different design, microkernel in Minix vs.
  | monolithic in Linux but to start to learn and understand this concepts, I
  | think is enough.
  | 
  | 2008/1/9, Brian Foster <blf at utvinternet.ie>:
  | >   | Date: Wed, 9 Jan 2008 12:58:53 -0000 (UTC)
  | >   | Subject: Re: [ILUG] Re: System programming POSIX
  | >   |
  | >   | Thanks, this looks like a great place to start.
  | >
  | >        systems programming ≠ kernel (or driver) programming.
  | > kernel/driver programming ≠ writing POSIX compliant code.
  | > kernel/driver implements _part_ of POSIX.
  | > systems programming _uses_ API exported by kernel/driver.
-- 
“How many surrealists does it take to    |  Brian Foster
 change a lightbulb?  Three.  One calms  |  somewhere in south of France
 the warthog, and two fill the bathtub   |     Stop E$$o (ExxonMobile)!
 with brightly-coloured machine tools.”  |       http://www.stopesso.com



More information about the ILUG mailing list