diff options
-rw-r--r-- | glibc.mdwn | 8 | ||||
-rw-r--r-- | glibc/environment_variable.mdwn (renamed from glibc/environment_variables.mdwn) | 0 | ||||
-rw-r--r-- | glibc/file_descriptor.mdwn | 13 | ||||
-rw-r--r-- | glibc/process.mdwn (renamed from hurd/glibc/internals.mdwn) | 23 | ||||
-rw-r--r-- | glibc/signal.mdwn | 31 | ||||
-rw-r--r-- | hurd/glibc.mdwn | 8 | ||||
-rw-r--r-- | hurd/io_path.mdwn | 4 | ||||
-rw-r--r-- | naming_context.mdwn | 17 | ||||
-rw-r--r-- | unix.mdwn | 13 | ||||
-rw-r--r-- | unix/file_descriptor.mdwn | 4 | ||||
-rw-r--r-- | unix/process.mdwn | 20 | ||||
-rw-r--r-- | unix/signal.mdwn (renamed from glibc/signals.mdwn) | 20 |
12 files changed, 123 insertions, 38 deletions
@@ -38,9 +38,13 @@ Porting glibc to a specific architecture is non-trivial. ## Concepts - * [[environment_variables]] + * [[environment_variable]] - * [[signals]] + * [[file_descriptor]] + + * [[process]] + + * [[signal]] ## Individual functions diff --git a/glibc/environment_variables.mdwn b/glibc/environment_variable.mdwn index 76c1371e..76c1371e 100644 --- a/glibc/environment_variables.mdwn +++ b/glibc/environment_variable.mdwn 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/hurd/glibc/internals.mdwn b/glibc/process.mdwn index 897da92e..9b2ec251 100644 --- a/hurd/glibc/internals.mdwn +++ b/glibc/process.mdwn @@ -1,4 +1,4 @@ -[[!meta copyright="Copyright © 2009 Free Software Foundation, Inc."]] +[[!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 @@ -8,7 +8,12 @@ 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]]."]]"""]] -Some bits about this, some bits about that. +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 @@ -19,17 +24,3 @@ zero). C.f. <http://lists.gnu.org/archive/html/bug-hurd/2009-10/msg00030.html> and the following messages. - -# Sinals - -[[Unix]] signals are implemented in glibc. - -In every process, signals are handled in a separate signal thread. - - [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 syunchronization - -[[!taglink open_issue_glibc]] 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}}. diff --git a/hurd/glibc.mdwn b/hurd/glibc.mdwn index bdfed833..39bfed62 100644 --- a/hurd/glibc.mdwn +++ b/hurd/glibc.mdwn @@ -1,4 +1,4 @@ -[[!meta copyright="Copyright © 2007, 2008, 2009 Free Software Foundation, +[[!meta copyright="Copyright © 2007, 2008, 2009, 2010 Free Software Foundation, Inc."]] [[!meta license="""[[!toggle id="license" text="GFDL 1.2+"]][[!toggleable @@ -6,8 +6,8 @@ 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]]."]]"""]] +is included in the section entitled [[GNU Free Documentation +License|/fdl]]."]]"""]] [[General_information|/glibc]] about the glibc. @@ -17,5 +17,3 @@ For information about how the glibc integrates into the system, see sections [[Hurd-specific_API]]. [[Debugging_glibc|debugging/glibc]]. - -[[Internals]]. diff --git a/hurd/io_path.mdwn b/hurd/io_path.mdwn index 598ad967..0d83a4ba 100644 --- a/hurd/io_path.mdwn +++ b/hurd/io_path.mdwn @@ -50,3 +50,7 @@ License|/fdl]]."]]"""]] nice overview of the related layering inside the Linux kernel, including the VFS layer, page cache and directory entry cache (dcache). + + +[[!tag open_issue_documentation]] <!-- Merge kepler.SCHWINGE/master-io_path. +--> diff --git a/naming_context.mdwn b/naming_context.mdwn index 3a0751c0..2968b0a5 100644 --- a/naming_context.mdwn +++ b/naming_context.mdwn @@ -1,18 +1,22 @@ -[[!meta copyright="Copyright © 2007, 2008 Free Software Foundation, Inc."]] +[[!meta copyright="Copyright © 2007, 2008, 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]]."]]"""]] +is included in the section entitled [[GNU Free Documentation +License|/fdl]]."]]"""]] Names are bindings to objects, however, to find an object given a name, the relation must be looked up in a -naming context. A problem with using string as names is +*naming context*. + +A problem with using strings as names is that it is very easy to lose track of the correct naming -context. This is one of the problem with [[PassiveTranslators]]: +context. This is one of the problem with [[passive +translators|hurd/translator]]: a passive translator is a string. When the node is accessed on which the passive translator is set and there is no active translator, then an active translator is started using the @@ -22,3 +26,6 @@ passive translator. The passive translator settings are therefore resolved in the file system's naming context, which may be different from that of the program instance that set the passive translator setting. + +[[!tag open_issue_hurd open_issue_documentation]] <!-- Move the description of +the specific problem / example elsewhere. --> @@ -13,6 +13,17 @@ License|/fdl]]."]]"""]] *UNIX* is a [[kernel]] implementation. +# Concepts + + * [[file_descriptor]] + + * [[process]] + + * [[signal]] + + * [[system_call]] + + # External * Wikipedia page about [[!wikipedia UNIX]]. @@ -31,7 +42,7 @@ License|/fdl]]."]]"""]] to the `open` [[system_call]]. In {{$2010_brown_ghosts_3}}, he deals with *unfixable designs*, such as - [[UNIX signals|glibc/signals]] and the *UNIX permission model* (which is + UNIX [[signal]]s and the *UNIX permission model* (which is clearly inferior to a [[capability]]-based system). * [*UNIX File Permissions*](http://www.greenend.org.uk/rjk/2004/perms.html) diff --git a/unix/file_descriptor.mdwn b/unix/file_descriptor.mdwn index 16e03fdf..6f8533c5 100644 --- a/unix/file_descriptor.mdwn +++ b/unix/file_descriptor.mdwn @@ -11,3 +11,7 @@ License|/fdl]]."]]"""]] A *file descriptor* is a [[concept]] of [[UNIX]], and represents a non-[[persistent|persistency]] handle to an object (a file, for example). With respect to specific aspects, it is comparable to a [[capability]]. + +In a GNU Hurd system, the concept of file descriptors is based on object +handles (through [[Mach ports|microkernel/mach/port]]), and is [[implemented in +glibc|glibc/file_descriptor]]. diff --git a/unix/process.mdwn b/unix/process.mdwn new file mode 100644 index 00000000..21fbfc69 --- /dev/null +++ b/unix/process.mdwn @@ -0,0 +1,20 @@ +[[!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 process* is TODO. + +Generally, especially in [[microkernel]]-based systems, the [[kernel]]'s idea +of a task is not as encompassing as a UNIX process, and will use additional +effort to enhance the kernel's primitive to a full-fledged UNIX model. + +A [[Mach task|microkernel/mach/task]] implements a part of a UNIX process. + +In the GNU/Hurd, processes are based on [[Mach task|microkernel/mach/task]]s, +but are [[enhanced by the glibc|glibc/process]]. diff --git a/glibc/signals.mdwn b/unix/signal.mdwn index 40fdc0e1..0d038a45 100644 --- a/glibc/signals.mdwn +++ b/unix/signal.mdwn @@ -9,23 +9,25 @@ is included in the section entitled [[GNU Free Documentation License|/fdl]]."]]"""]] *[[UNIX]] signals* are a means to asynchronously invoke a specific function -(*signal handler*). This may impact on [[system call]]s that are executing at -the same time in that they may be completely aborted, return incomplete -results, scheduled for restarting, or cause signal delivery to be blocked upon -the system call's completion. +(*signal handler*) in a [[process]]. It's a rather limited for of doing +[[IPC]]. + +Signalling may impact on [[system call]]s that are executing at the same time +in that they may be completely aborted, return incomplete results, scheduled +for restarting, or cause signal delivery to be blocked upon the system call's +completion. An explanation can be found in the relevant standards, an overview, including UNIX signals' deficiencies is given in {{$unix#2010_brown_ghosts_3}}, for example. -The UNIX signalling mechanism 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. +In a GNU/Hurd system, the signalling system is [[implemented in +glibc|glibc/signal]]. - * [[SA_SIGINFO, SA_SIGACTION|open_issues/sa_siginfo_sa_sigaction]] +# Further Reading -# External + * [[!wikipedia Signal_(computing)]] * {{$unix#djb_self-pipe}}. |