summaryrefslogtreecommitdiff
path: root/glibc
diff options
context:
space:
mode:
Diffstat (limited to 'glibc')
-rw-r--r--glibc/environment_variable.mdwn15
-rw-r--r--glibc/fallocate.mdwn17
-rw-r--r--glibc/file_descriptor.mdwn13
-rw-r--r--glibc/fork.mdwn63
-rw-r--r--glibc/poll.mdwn15
-rw-r--r--glibc/process.mdwn26
-rw-r--r--glibc/signal.mdwn31
7 files changed, 180 insertions, 0 deletions
diff --git a/glibc/environment_variable.mdwn b/glibc/environment_variable.mdwn
new file mode 100644
index 00000000..76c1371e
--- /dev/null
+++ b/glibc/environment_variable.mdwn
@@ -0,0 +1,15 @@
+[[!meta copyright="Copyright © 2010 Free Software Foundation, Inc."]]
+
+[[!meta license="""[[!toggle id="license" text="GFDL 1.2+"]][[!toggleable
+id="license" text="Permission is granted to copy, distribute and/or modify this
+document under the terms of the GNU Free Documentation License, Version 1.2 or
+any later version published by the Free Software Foundation; with no Invariant
+Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license
+is included in the section entitled [[GNU Free Documentation
+License|/fdl]]."]]"""]]
+
+
+# External
+
+ * [*putenv() and setenv()*](http://www.greenend.org.uk/rjk/2008/putenv.html)
+ by Richard Kettlewell.
diff --git a/glibc/fallocate.mdwn b/glibc/fallocate.mdwn
new file mode 100644
index 00000000..3aecf16b
--- /dev/null
+++ b/glibc/fallocate.mdwn
@@ -0,0 +1,17 @@
+[[!meta copyright="Copyright © 2010 Free Software Foundation, Inc."]]
+
+[[!meta license="""[[!toggle id="license" text="GFDL 1.2+"]][[!toggleable
+id="license" text="Permission is granted to copy, distribute and/or modify this
+document under the terms of the GNU Free Documentation License, Version 1.2 or
+any later version published by the Free Software Foundation; with no Invariant
+Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license
+is included in the section entitled [[GNU Free Documentation
+License|/fdl]]."]]"""]]
+
+Not yet implemented for the GNU Hurd in [[glibc]].
+
+
+# External
+
+ * [*Punching holes in files*](http://lwn.net/Articles/415889/), Jonathan
+ Corbet, 2010-11-17.
diff --git a/glibc/file_descriptor.mdwn b/glibc/file_descriptor.mdwn
new file mode 100644
index 00000000..2c56d070
--- /dev/null
+++ b/glibc/file_descriptor.mdwn
@@ -0,0 +1,13 @@
+[[!meta copyright="Copyright © 2010 Free Software Foundation, Inc."]]
+
+[[!meta license="""[[!toggle id="license" text="GFDL 1.2+"]][[!toggleable
+id="license" text="Permission is granted to copy, distribute and/or modify this
+document under the terms of the GNU Free Documentation License, Version 1.2 or
+any later version published by the Free Software Foundation; with no Invariant
+Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license
+is included in the section entitled [[GNU Free Documentation
+License|/fdl]]."]]"""]]
+
+A [[UNIX file descriptor|unix/file_descriptor]] is implemented in [[glibc]] by
+using operations on objects referred to by [[Mach
+ports|microkernel/mach/port]]).
diff --git a/glibc/fork.mdwn b/glibc/fork.mdwn
new file mode 100644
index 00000000..496dc743
--- /dev/null
+++ b/glibc/fork.mdwn
@@ -0,0 +1,63 @@
+[[!meta copyright="Copyright © 2010 Free Software Foundation, Inc."]]
+
+[[!meta license="""[[!toggle id="license" text="GFDL 1.2+"]][[!toggleable
+id="license" text="Permission is granted to copy, distribute and/or modify this
+document under the terms of the GNU Free Documentation License, Version 1.2 or
+any later version published by the Free Software Foundation; with no Invariant
+Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license
+is included in the section entitled [[GNU Free Documentation
+License|/fdl]]."]]"""]]
+
+On [[Unix]] systems, `fork` is a rather simple [[system call]].
+
+Our implementation in [[glibc]] is and needs to be rather bulky.
+
+For example, it has to duplicate all port rights for the new [[Mach
+task|microkernel/mach/task]]. The address space can simply be duplicated by
+standard means of the [[microkernel/Mach]], but as [[unix/file_descriptor]]s
+(for example) are a concept that is implemented inside [[glibc]] (based on
+[[Mach port|microkernel/mach/port]]s), these have to be duplicated from
+userspace, which requires a small number of [[RPC]]s for each of them, and in
+the sum, [[this affects performance|open_issues/performance/fork]] when new
+processes are continuously being spawned from the shell, for example.
+
+Often, a `fork` call will eventually be followed by an `exec`, which [[may in
+turn close|open_issues/secure_file_descriptor_handling]] (most of) the
+duplicated port rights. Unfortunately, this cannot be known at the time the
+`fork` executing, so in order to optimize this, the code calling `fork` has to
+be modified instead, and the `fork`, `exec` combo be replaced by a
+`posix_spawn` call, for example, to avoid this work of duplicating each port
+right, then closing each again.
+
+As far as we know, Cygwin has the same problem of `fork` being a nontrivial
+operation. Perhaps we can learn from what they're been doing? Also, perhaps
+they have patches for software packages, to avoid using `fork` followed by
+`exec`, for example.
+
+
+# TODO
+
+ * [[fork: mach_port_mod_refs:
+ EKERN_UREFS_OWERFLOW|open_issues/fork_mach_port_mod_refs_ekern_urefs_owerflow]]
+ ([[!taglink open_issue_glibc]]).
+
+ * Include de-duplicate information from elsewhere: [[hurd-paper]],
+ [[hurd-talk]], [[hurd/ng/trivialconfinementvsconstructorvsfork]],
+ [[open_issues/resource_management_problems/zalloc_panics]] ([[!taglink
+ open_issue_glibc open_issue_documentation]]).
+
+ * We no longer support `MACH_IPC_COMPAT`, thus we can get rid of the `err =
+ __mach_port_allocate_name ([...]); if (err == KERN_NAME_EXISTS)` code
+ ([[!taglink open_issue_glibc]]).
+
+
+## Related
+
+ * [[open_issues/secure_file_descriptor_handling]].
+
+
+# External
+
+ * {{$unix#djb_self-pipe}}.
+
+ * {{$unix#rjk_fork}}.
diff --git a/glibc/poll.mdwn b/glibc/poll.mdwn
new file mode 100644
index 00000000..d96f27a5
--- /dev/null
+++ b/glibc/poll.mdwn
@@ -0,0 +1,15 @@
+[[!meta copyright="Copyright © 2010 Free Software Foundation, Inc."]]
+
+[[!meta license="""[[!toggle id="license" text="GFDL 1.2+"]][[!toggleable
+id="license" text="Permission is granted to copy, distribute and/or modify this
+document under the terms of the GNU Free Documentation License, Version 1.2 or
+any later version published by the Free Software Foundation; with no Invariant
+Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license
+is included in the section entitled [[GNU Free Documentation
+License|/fdl]]."]]"""]]
+
+
+# External
+
+ * [*poll() and EOF*](http://www.greenend.org.uk/rjk/2001/06/poll.html) by
+ Richard Kettlewell.
diff --git a/glibc/process.mdwn b/glibc/process.mdwn
new file mode 100644
index 00000000..9b2ec251
--- /dev/null
+++ b/glibc/process.mdwn
@@ -0,0 +1,26 @@
+[[!meta copyright="Copyright © 2009, 2010 Free Software Foundation, Inc."]]
+
+[[!meta license="""[[!toggle id="license" text="GFDL 1.2+"]][[!toggleable
+id="license" text="Permission is granted to copy, distribute and/or modify this
+document under the terms of the GNU Free Documentation License, Version 1.2 or
+any later version published by the Free Software Foundation; with no Invariant
+Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license
+is included in the section entitled [[GNU Free Documentation
+License|/fdl]]."]]"""]]
+
+The GNU Hurd uses a similar concept to [[UNIX processes|unix/process]].
+
+As a [[Mach task|microkernel/mach/task]] only implements a part of a UNIX
+process, there is additional work to be done, for example for [[signal]]s,
+[[environment_variable]]s, [[file_descriptor]]s.
+
+
+# Controlling TTY
+
+Hurd controlling tty behavior is generally consistent with BSD's, including
+`TIOCSCTTY`. Linux also has `TIOCSCTTY` and it is harmless to use it there.
+But BSD and Hurd never do an implicit `TIOCSCTTY` (hence our `O_NOCTTY` is
+zero).
+
+C.f. <http://lists.gnu.org/archive/html/bug-hurd/2009-10/msg00030.html> and the
+following messages.
diff --git a/glibc/signal.mdwn b/glibc/signal.mdwn
new file mode 100644
index 00000000..67028fef
--- /dev/null
+++ b/glibc/signal.mdwn
@@ -0,0 +1,31 @@
+[[!meta copyright="Copyright © 2009, 2010 Free Software Foundation, Inc."]]
+
+[[!meta license="""[[!toggle id="license" text="GFDL 1.2+"]][[!toggleable
+id="license" text="Permission is granted to copy, distribute and/or modify this
+document under the terms of the GNU Free Documentation License, Version 1.2 or
+any later version published by the Free Software Foundation; with no Invariant
+Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license
+is included in the section entitled [[GNU Free Documentation
+License|/fdl]]."]]"""]]
+
+The [[*UNIX signalling mechanism*|unix/signal]] is implemented for the GNU Hurd
+by means of a separate *signal-handling [[thread]]* that is part of every
+[[process]]. This makes handling of signals a separate thread of control.
+
+ * [[SA_SIGINFO, SA_SIGACTION|open_issues/sa_siginfo_sa_sigaction]]
+
+ * Why does `kill` hang sometimes?
+
+ <youpi> kill send the signal to the process
+ <youpi> if the process is hung, killing waits
+ <youpi> signals should be just asynchronous, but apparently for some
+ reason Roland & co wanted some synchronization
+
+ [[!taglink open_issue_glibc]]
+
+
+# Further Reading
+
+ * {{$unix#djb_self-pipe}}.
+
+ * {{$unix#rjk_fork}}.