Sync usage with man page.
[netbsd-mini2440.git] / share / doc / smm / 05.fastfs / 5.t
blob7687bc5f9f380689788eb4e21fa26e7c95326412
1 .\"     $NetBSD: 5.t,v 1.2 1998/01/09 06:55:33 perry Exp $
2 .\"
3 .\" Copyright (c) 1986, 1993
4 .\"     The Regents of the University of California.  All rights reserved.
5 .\"
6 .\" Redistribution and use in source and binary forms, with or without
7 .\" modification, are permitted provided that the following conditions
8 .\" are met:
9 .\" 1. Redistributions of source code must retain the above copyright
10 .\"    notice, this list of conditions and the following disclaimer.
11 .\" 2. Redistributions in binary form must reproduce the above copyright
12 .\"    notice, this list of conditions and the following disclaimer in the
13 .\"    documentation and/or other materials provided with the distribution.
14 .\" 3. Neither the name of the University nor the names of its contributors
15 .\"    may be used to endorse or promote products derived from this software
16 .\"    without specific prior written permission.
17 .\"
18 .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
19 .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20 .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21 .\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
22 .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23 .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
24 .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25 .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26 .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28 .\" SUCH DAMAGE.
29 .\"
30 .\"     @(#)5.t 8.1 (Berkeley) 6/8/93
31 .\"
32 .ds RH Functional enhancements
33 .NH 
34 File system functional enhancements
35 .PP
36 The performance enhancements to the
37 UNIX file system did not require
38 any changes to the semantics or
39 data structures visible to application programs.
40 However, several changes had been generally desired for some 
41 time but had not been introduced because they would require users to 
42 dump and restore all their file systems.
43 Since the new file system already
44 required all existing file systems to
45 be dumped and restored, 
46 these functional enhancements were introduced at this time.
47 .NH 2
48 Long file names
49 .PP
50 File names can now be of nearly arbitrary length.
51 Only programs that read directories are affected by this change.
52 To promote portability to UNIX systems that
53 are not running the new file system, a set of directory
54 access routines have been introduced to provide a consistent
55 interface to directories on both old and new systems.
56 .PP
57 Directories are allocated in 512 byte units called chunks.
58 This size is chosen so that each allocation can be transferred
59 to disk in a single operation.
60 Chunks are broken up into variable length records termed
61 directory entries.  A directory entry
62 contains the information necessary to map the name of a
63 file to its associated inode.
64 No directory entry is allowed to span multiple chunks.
65 The first three fields of a directory entry are fixed length
66 and contain: an inode number, the size of the entry, and the length
67 of the file name contained in the entry.
68 The remainder of an entry is variable length and contains
69 a null terminated file name, padded to a 4 byte boundary.
70 The maximum length of a file name in a directory is
71 currently 255 characters.
72 .PP
73 Available space in a directory is recorded by having
74 one or more entries accumulate the free space in their
75 entry size fields.  This results in directory entries
76 that are larger than required to hold the
77 entry name plus fixed length fields.  Space allocated
78 to a directory should always be completely accounted for
79 by totaling up the sizes of its entries.
80 When an entry is deleted from a directory,
81 its space is returned to a previous entry
82 in the same directory chunk by increasing the size of the
83 previous entry by the size of the deleted entry.
84 If the first entry of a directory chunk is free, then 
85 the entry's inode number is set to zero to indicate
86 that it is unallocated.
87 .NH 2
88 File locking
89 .PP
90 The old file system had no provision for locking files.
91 Processes that needed to synchronize the updates of a
92 file had to use a separate ``lock'' file.
93 A process would try to create a ``lock'' file. 
94 If the creation succeeded, then the process
95 could proceed with its update;
96 if the creation failed, then the process would wait and try again.
97 This mechanism had three drawbacks.
98 Processes consumed CPU time by looping over attempts to create locks.
99 Locks left lying around because of system crashes had
100 to be manually removed (normally in a system startup command script).
101 Finally, processes running as system administrator
102 are always permitted to create files,
103 so were forced to use a different mechanism.
104 While it is possible to get around all these problems,
105 the solutions are not straight forward,
106 so a mechanism for locking files has been added.
108 The most general schemes allow multiple processes
109 to concurrently update a file.
110 Several of these techniques are discussed in [Peterson83].
111 A simpler technique is to serialize access to a file with locks.
112 To attain reasonable efficiency,
113 certain applications require the ability to lock pieces of a file.
114 Locking down to the byte level has been implemented in the
115 Onyx file system by [Bass81].
116 However, for the standard system applications,
117 a mechanism that locks at the granularity of a file is sufficient.
119 Locking schemes fall into two classes,
120 those using hard locks and those using advisory locks.
121 The primary difference between advisory locks and hard locks is the
122 extent of enforcement.
123 A hard lock is always enforced when a program tries to
124 access a file;
125 an advisory lock is only applied when it is requested by a program.
126 Thus advisory locks are only effective when all programs accessing
127 a file use the locking scheme.
128 With hard locks there must be some override
129 policy implemented in the kernel.
130 With advisory locks the policy is left to the user programs.
131 In the UNIX system, programs with system administrator
132 privilege are allowed override any protection scheme.
133 Because many of the programs that need to use locks must
134 also run as the system administrator,
135 we chose to implement advisory locks rather than 
136 create an additional protection scheme that was inconsistent
137 with the UNIX philosophy or could
138 not be used by system administration programs.
140 The file locking facilities allow cooperating programs to apply
141 advisory
142 .I shared
144 .I exclusive
145 locks on files.
146 Only one process may have an exclusive
147 lock on a file while multiple shared locks may be present.
148 Both shared and exclusive locks cannot be present on
149 a file at the same time.
150 If any lock is requested when
151 another process holds an exclusive lock,
152 or an exclusive lock is requested when another process holds any lock,
153 the lock request will block until the lock can be obtained.
154 Because shared and exclusive locks are advisory only,
155 even if a process has obtained a lock on a file,
156 another process may access the file.
158 Locks are applied or removed only on open files.
159 This means that locks can be manipulated without
160 needing to close and reopen a file.
161 This is useful, for example, when a process wishes
162 to apply a shared lock, read some information
163 and determine whether an update is required, then
164 apply an exclusive lock and update the file.
166 A request for a lock will cause a process to block if the lock
167 can not be immediately obtained.
168 In certain instances this is unsatisfactory.
169 For example, a process that
170 wants only to check if a lock is present would require a separate
171 mechanism to find out this information.
172 Consequently, a process may specify that its locking
173 request should return with an error if a lock can not be immediately
174 obtained.
175 Being able to conditionally request a lock
176 is useful to ``daemon'' processes
177 that wish to service a spooling area.
178 If the first instance of the
179 daemon locks the directory where spooling takes place,
180 later daemon processes can
181 easily check to see if an active daemon exists.
182 Since locks exist only while the locking processes exist,
183 lock files can never be left active after
184 the processes exit or if the system crashes.
186 Almost no deadlock detection is attempted.
187 The only deadlock detection done by the system is that the file
188 to which a lock is applied must not already have a
189 lock of the same type (i.e. the second of two successive calls
190 to apply a lock of the same type will fail).
191 .NH 2
192 Symbolic links
194 The traditional UNIX file system allows multiple
195 directory entries in the same file system
196 to reference a single file.  Each directory entry
197 ``links'' a file's name to an inode and its contents.
198 The link concept is fundamental;
199 inodes do not reside in directories, but exist separately and
200 are referenced by links.
201 When all the links to an inode are removed,
202 the inode is deallocated.
203 This style of referencing an inode does
204 not allow references across physical file
205 systems, nor does it support inter-machine linkage. 
206 To avoid these limitations
207 .I "symbolic links"
208 similar to the scheme used by Multics [Feiertag71] have been added.
210 A symbolic link is implemented as a file that contains a pathname.
211 When the system encounters a symbolic link while
212 interpreting a component of a pathname,
213 the contents of the symbolic link is prepended to the rest
214 of the pathname, and this name is interpreted to yield the
215 resulting pathname.
216 In UNIX, pathnames are specified relative to the root
217 of the file system hierarchy, or relative to a process's
218 current working directory.  Pathnames specified relative
219 to the root are called absolute pathnames.  Pathnames
220 specified relative to the current working directory are
221 termed relative pathnames.
222 If a symbolic link contains an absolute pathname,
223 the absolute pathname is used,
224 otherwise the contents of the symbolic link is evaluated
225 relative to the location of the link in the file hierarchy.
227 Normally programs do not want to be aware that there is a
228 symbolic link in a pathname that they are using.
229 However certain system utilities
230 must be able to detect and manipulate symbolic links.
231 Three new system calls provide the ability to detect, read, and write
232 symbolic links; seven system utilities required changes
233 to use these calls.
235 In future Berkeley software distributions
236 it may be possible to reference file systems located on
237 remote machines using pathnames.  When this occurs,
238 it will be possible to create symbolic links that span machines.
239 .NH 2
240 Rename
242 Programs that create a new version of an existing
243 file typically create the
244 new version as a temporary file and then rename the temporary file
245 with the name of the target file.
246 In the old UNIX file system renaming required three calls to the system.
247 If a program were interrupted or the system crashed between these calls,
248 the target file could be left with only its temporary name.
249 To eliminate this possibility the \fIrename\fP system call
250 has been added.  The rename call does the rename operation
251 in a fashion that guarantees the existence of the target name.
253 Rename works both on data files and directories.
254 When renaming directories,
255 the system must do special validation checks to insure
256 that the directory tree structure is not corrupted by the creation
257 of loops or inaccessible directories.
258 Such corruption would occur if a parent directory were moved
259 into one of its descendants.
260 The validation check requires tracing the descendents of the target
261 directory to insure that it does not include the directory being moved.
262 .NH 2
263 Quotas
265 The UNIX system has traditionally attempted to share all available
266 resources to the greatest extent possible.
267 Thus any single user can allocate all the available space
268 in the file system.
269 In certain environments this is unacceptable.
270 Consequently, a quota mechanism has been added for restricting the
271 amount of file system resources that a user can obtain.
272 The quota mechanism sets limits on both the number of inodes
273 and the number of disk blocks that a user may allocate.
274 A separate quota can be set for each user on each file system.
275 Resources are given both a hard and a soft limit.
276 When a program exceeds a soft limit,
277 a warning is printed on the users terminal;
278 the offending program is not terminated
279 unless it exceeds its hard limit.
280 The idea is that users should stay below their soft limit between
281 login sessions,
282 but they may use more resources while they are actively working.
283 To encourage this behavior,
284 users are warned when logging in if they are over
285 any of their soft limits.
286 If users fails to correct the problem for too many login sessions,
287 they are eventually reprimanded by having their soft limit
288 enforced as their hard limit.
289 .ds RH Acknowledgements
290 .sp 2
291 .ne 1i