changeset 21:bb8a8be49024

Wrote about Face support and vfork().
author markus schnalke <meillo@marmaro.de>
date Mon, 07 May 2012 15:50:09 +0200
parents 7a100c80fa91
children 99409e4546d2
files ch03.roff
diffstat 1 files changed, 66 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/ch03.roff	Sun May 06 17:33:45 2012 +0200
+++ b/ch03.roff	Mon May 07 15:50:09 2012 +0200
@@ -109,6 +109,27 @@
 marked legacy in RFC 2822. It was superseded by FIXME.
 Mmh does no more support this header.
 .P
+Native support for `Face' headers
+had been removed, as well.
+The feature is similar to the `X-Face' header in its intent,
+but takes a different approach to store the image.
+Instead of encoding the image data directly into the header,
+the the header contains the hostname and UDP port where the image
+date could be retrieved.
+Neither `X-Face' nor the here described `Face' system
+\**
+.FS
+There is also a newer but different system, invented 2005,
+using `Face' headers.
+It is the successor of `X-Face' providing colored PNG images.
+.FE
+became well used in the large scale.
+It's still possible to use a Face systems,
+although mmh does not provide support for any of the different systems
+anymore. It's fairly easy to write a small shell script to 
+extract the embedded or fetch the external Face data and display the image.
+Own Face headers can be added into the draft template files.
+.P
 `Content-MD5' headers were introduced by RFC\^1864. They provide only
 a verification of data corruption during the transfer. By no means can
 they ensure verbatim end-to-end delivery of the contents. This is clearly
@@ -143,11 +164,55 @@
 and
 .Sn \-kill \fUchr\fP
 to name the characters for command line editing.
-The times when this had been neccessary are long time gone.
+The times when this had been necessary are long time gone.
 Today these things work out-of-the-box, and if not, are configured
 with the standard tool
 .Pn stty .
 
+.U2 "Vfork and Retry Loops
+.P
+MH creates many processes, which is a concequence of the toolchest approach.
+In earlier times
+.Fu fork()
+had been an expensive system call, as the process's whole image needed
+to be duplicated. One common case is replacing the image with
+.Fu exec()
+right after having forked the child process.
+To speed up this case, the
+.Fu vfork()
+system call was invented at Berkeley. It completely omits copying the
+image. If the image gets replaced right afterwards then unnecessary
+work is omited. On old systems this results in large speed ups.
+MH uses
+.Fu vfork()
+whenever possible.
+.P
+Memory management units that support copy-on-write semantics make
+.Fu fork()
+almost as fast as
+.Fu vfork()
+in the cases when they can be exchanged.
+With
+.Fu vfork()
+being more errorprone and hardly faster, it's preferable to simply
+use
+.Fu fork()
+instead.
+.P
+Related to the costs of
+.Fu fork()
+is the probability of its success.
+Today on modern systems, the system call will succeed almost always.
+In the 80s on heavy loaded systems, as they were common at
+universities, this had been different. Thus, many of the
+.Fu fork()
+calls were wrapped into loops to retry to fork several times in
+short intervals, in case of previous failure.
+In mmh, the program aborts at once if the fork failed.
+The user can reexecute the command then. This is expected to be a
+very rare case on modern systems, especially personal ones, which are
+common today.
+
 
 .H1 "Draft and Trash Folders
 .U2 "Draft Folder