﻿1
463491:07:46,613 --> 463491:07:50,613
(อาจารย์พิเชนทร์)

2
463491:07:38,928 --> 463491:07:41,182
คราวนี้ดูบทที่ 4 นะครับ การจัดการหน่วยความ จำ

3
463491:07:41,182 --> 463491:07:41,891
งวดที่แล้วนะครับ

4
463491:07:41,891 --> 463491:07:45,265
เราพูดถึง C นะครับ การจัดการ CPU

5
463491:07:45,265 --> 463491:07:49,265
งวดนี้

6
463491:07:49,524 --> 463491:07:52,397
เราก็จะพูดถึงการจัดการหน่วยความจำนะครับ

7
463491:07:52,397 --> 463491:07:55,913
หน่วยความจำก็เป็น

8
463491:07:55,913 --> 463491:07:57,322
อุปกรณ์ตัวหนึ่ง

9
463491:07:57,322 --> 463491:07:57,572
ที่มีส่วนสำคัญ

10
463491:07:57,572 --> 463491:08:01,572
ของคอมพิวเตอร์ของเรานะครับ

11
463491:08:01,920 --> 463491:08:05,920
เราจะดูว่าเครื่องคอมพิวเตอร์เครื่องไหนมีขีดความสามารถมากกว่ากัน

12
463491:08:08,526 --> 463491:08:12,236
เราก็อาจจะดูได้จากหน่วยความจำนะครับ

13
463491:08:12,236 --> 463491:08:16,236
แต่ทั้งนี้ทั้งนั้นนะครับ

14
463491:08:17,093 --> 463491:08:21,093
ไม่ได้ตอบได้เสมอว่า

15
463491:08:23,213 --> 463491:08:23,702
เครื่องที่มีหน่วยความจำมาก

16
463491:08:23,702 --> 463491:08:27,290
ทำงานได้ดีกว่านะครับ

17
463491:08:27,290 --> 463491:08:31,290
ในการจัดการหน่วยความจำนั้นก็เป็นขีดความสามารถอีกหนึ่งของ

18
463491:08:35,888 --> 463491:08:38,133
ระบบปฏิบัติการของเราด้วย

19
463491:08:38,133 --> 463491:08:40,769
ถ้าระบบปฏิบัติการของเรา

20
463491:08:40,769 --> 463491:08:40,953
จัดการหน่วยความจำไม่ดีนะครับ

21
463491:08:40,953 --> 463491:08:44,953
ประสิทธิภาพ

22
463491:08:46,074 --> 463491:08:46,662
ในการใช้งานก็จะน้อยลงนะครับ คราวนี้ก็จัด

23
463491:08:46,662 --> 463491:08:50,662
เรามาดูว่ามันจัดการอย่างไรนะคะ

24
463491:08:51,954 --> 463491:08:55,954
การจัดการหน่วยความจำมีอยู่ 3 แบบ

25
463491:08:58,476 --> 463491:09:00,512
นะครับ มี 3

26
463491:09:00,512 --> 463491:09:04,512

27
463491:09:05,035 --> 463491:09:06,456
วางแทนที่

28
463491:09:06,456 --> 463491:09:07,152
มีอยู่ 3

29
463491:09:07,152 --> 463491:09:11,152
ซึ่งเราต้องรู้ว่าทำอย่างไรนะครับ

30
463491:09:12,548 --> 463491:09:16,548
ปีนี้มาดู

31
463491:09:18,504 --> 463491:09:19,517
โปรแกรมทุกโปรแกรมที่เราใช้งานคอมพิวเตอร์ของเรานั้นจำเป็นจะต้องใช้

32
463491:09:19,517 --> 463491:09:20,471
หน่วยความจำ

33
463491:09:20,471 --> 463491:09:21,677
นะครับ

34
463491:09:21,677 --> 463491:09:25,677
จะมากจะน้อยก็แล้วแต่

35
463491:09:26,482 --> 463491:09:27,492
โปรแกรม

36
463491:09:27,492 --> 463491:09:31,492
โปรแกรมเกมอาจจะใช้เยอะ

37
463491:09:31,922 --> 463491:09:35,922
โปรแกรมพิมพ์งานอาจจะใช้น้อยอย่างนี้นะครับ ที่นี้เรามาดูกันว่าถ้าเกิด

38
463491:09:37,195 --> 463491:09:41,195
... ในการจัดสรรหน่วยความจำนะครับ จะมีสามารถแบ่งออกเป็น 2 ประเภทนะครับ ก็คือ

39
463491:09:49,706 --> 463491:09:52,314
การจัดสรรแบบ

40
463491:09:52,314 --> 463491:09:55,643
ต่อเนื่องและก็แบบไม่ต่อเนื่องนะครับ

41
463491:09:55,643 --> 463491:09:59,643
การจัดสรรหน่วยความจำแบบ

42
463491:10:01,857 --> 463491:10:02,288
ต่อเนื่อง ก็คือหมายความว่า

43
463491:10:02,288 --> 463491:10:06,288
หน่วยความจำจะต้องว่างต่อกัน

44
463491:10:06,838 --> 463491:10:10,203
นะครับ

45
463491:10:10,203 --> 463491:10:11,765
พื้นที่ว่างต้องต่อเนื่องกันนะครับ ขาดช่วงอะไรไม่ได้นะครับ

46
463491:10:11,765 --> 463491:10:15,399
แล้วก็ต้องมีขนาดใหญ่พอ

47
463491:10:15,399 --> 463491:10:19,399
ถึงจะเข้าไปทำงานได้

48
463491:10:19,973 --> 463491:10:23,973
นะครับ ส่วนไม่ต่อเนื่องนะครับ

49
463491:10:24,445 --> 463491:10:28,445
ก็คือเข้าไปครอบครองหน่วยความจำแล้ว หน่วยความจำอาจจะอยู่คนละที่ คนละแบบ

50
463491:10:31,968 --> 463491:10:32,334
อยู่คนละที่

51
463491:10:32,334 --> 463491:10:36,334
แต่ก็ต้องมีพื้นที่เพียงพอนะครับ

52
463491:10:39,868 --> 463491:10:40,112
ที่โปรแกรมจะใช้งาน

53
463491:10:40,112 --> 463491:10:44,112
คราวนี้มาดูใน

54
463491:10:46,561 --> 463491:10:49,824
ระบบโปรแกรมเดียว

55
463491:10:49,824 --> 463491:10:51,962
Single Program

56
463491:10:51,962 --> 463491:10:55,962
นะครับ คือ

57
463491:10:55,980 --> 463491:10:56,933
คอมพิวเตอร์

58
463491:10:56,933 --> 463491:11:00,148
มีผู้ใช้งานเพียงแค่บอก

59
463491:11:00,148 --> 463491:11:02,370
คนเดียว

60
463491:11:02,370 --> 463491:11:03,141
การจัดสรรหน่วยความจำจะไม่ยาก

61
463491:11:03,141 --> 463491:11:07,141
ซึ่งเราจะ

62
463491:11:09,693 --> 463491:11:12,078
สามารถแบ่ง

63
463491:11:12,078 --> 463491:11:13,238
หน่วยความจำออกเป็น 2 ส่วนนะครับ

64
463491:11:13,238 --> 463491:11:14,877
ก็คือส่วนแรก

65
463491:11:14,877 --> 463491:11:18,725
ส่วนของระบบปฏิบัติการ

66
463491:11:18,725 --> 463491:11:19,097
และ

67
463491:11:19,097 --> 463491:11:23,097
เป็นส่วนที่จำเป็นจะต้อง

68
463491:11:23,596 --> 463491:11:24,694
มีพื้นที่ว่าง

69
463491:11:24,694 --> 463491:11:28,285
ยาวติดต่อกันเป็นผืนใหญ่ผืนเดียวเลย

70
463491:11:28,285 --> 463491:11:28,501
นะครับ

71
463491:11:28,501 --> 463491:11:32,501
นี่

72
463491:11:34,107 --> 463491:11:36,522
OS

73
463491:11:36,522 --> 463491:11:39,576
นะครับ ต้องมีพื้นที่หน่วยความจำของมันด้วยนะครับ

74
463491:11:39,576 --> 463491:11:43,576
และต้องเป็นพื้นที่ยาวต่อเนื่องกันนะครับ

75
463491:11:45,823 --> 463491:11:49,823
2

76
463491:11:50,126 --> 463491:11:51,144
ส่วนของผู้ใช้

77
463491:11:51,144 --> 463491:11:51,753
นะครับ

78
463491:11:51,753 --> 463491:11:53,852
ก็คือเหลือจาก

79
463491:11:53,852 --> 463491:11:56,329
OS ก็กลาย

80
463491:11:56,329 --> 463491:11:59,672
เป็นส่วนของผู้ใช้

81
463491:11:59,672 --> 463491:12:03,672
ระบบโปรแกรมเดียวนะครับ

82
463491:12:04,536 --> 463491:12:04,771
เมื่อหน่วยความจำถูกแบ่งออกเป็น 2 ส่วนนะครับ 2 ส่วน

83
463491:12:04,771 --> 463491:12:07,285
ตัว ตัวของระบบปฏิบัติการ

84
463491:12:07,285 --> 463491:12:08,113
เอง

85
463491:12:08,113 --> 463491:12:12,113
ก็จะเป็นส่วนป้องกันไม่ให้ตัวเองโดนรุกล้ำเข้ามา

86
463491:12:13,272 --> 463491:12:17,272
วิธีการป้องกัน ก็คือใช้การRegis

87
463491:12:17,789 --> 463491:12:18,302
ter ขอบเขต

88
463491:12:18,302 --> 463491:12:22,302
Regis

89
463491:12:22,813 --> 463491:12:26,575
ter ขอบเขตคืออะไร

90
463491:12:26,575 --> 463491:12:27,390
ก็คือส่วนที่ป้องกันระหว่าง

91
463491:12:27,390 --> 463491:12:30,077
ระวังอะไรครับ

92
463491:12:30,077 --> 463491:12:32,202

93
463491:12:32,202 --> 463491:12:32,420
ส่วนของผู้ใช้

94
463491:12:32,420 --> 463491:12:35,453
ไม่ให้เข้ามายุ่งเกี่ยวกัน

95
463491:12:35,453 --> 463491:12:39,453
นะครับ ดังนั้น การเขียน

96
463491:12:40,028 --> 463491:12:40,455
โปรแกรม

97
463491:12:40,455 --> 463491:12:42,320
ไวรัส

98
463491:12:42,320 --> 463491:12:43,586
คอมพิวเตอร์

99
463491:12:43,586 --> 463491:12:46,050
ส่วนหนึ่ง ก็คือ

100
463491:12:46,050 --> 463491:12:46,523
เจาะเลยนะครับ เจาะ Register ขอบเขต เจาะเข้าไป

101
463491:12:46,523 --> 463491:12:50,523
นะครับ

102
463491:12:53,593 --> 463491:12:56,405
ถ้ามีการรุกล้ำ

103
463491:12:56,405 --> 463491:12:58,287
Regis

104
463491:12:58,287 --> 463491:12:58,808
ter ขอบเขต

105
463491:12:58,808 --> 463491:13:00,622
ก็จะแจ้งเตือน

106
463491:13:00,622 --> 463491:13:04,622
นะครับ คราวนี้มาดูระบบหลายโปรแกรมนะครับ ระบบหลายโปรแกรม

107
463491:13:09,417 --> 463491:13:13,417
การทำงานของระบบหลายโปรแกรมนั้นส่วนมาก

108
463491:13:14,948 --> 463491:13:18,948
ส่วนมากจะเกิดขึ้น ก็คือการทำงาน

109
463491:13:23,028 --> 463491:13:24,742
input output ก็คือการไปการที่มันได้ครอบครอง

110
463491:13:24,742 --> 463491:13:25,764
CPU ว่าง่าย ๆ ไม่ได้ครอบครอง

111
463491:13:25,764 --> 463491:13:26,182
หน่วยความจำ

112
463491:13:26,182 --> 463491:13:30,182
เราเรียกระบบนี้ว่า "ระบบ Multi programming" นะครับ

113
463491:13:36,079 --> 463491:13:40,079
ระบบ programming นี้นะครับ ก็คือการทำงานที่

114
463491:13:49,884 --> 463491:13:50,782
มีโปรแกรมมากกว่า 1 โปรแกรมทำงานในเวลาเดียวกัน 2 3 4 5 6 7 นะครับ

115
463491:13:50,782 --> 463491:13:54,782
การทำงานของระบบ

116
463491:13:58,553 --> 463491:13:59,994
หลายโปรแกรมนั้นก็จะแบ่ง Partition ของหน่วยความจำ

117
463491:13:59,994 --> 463491:14:03,994
นะครับ แบ่ง Partition ของระบบหน่วยความจำเป็นส่วน ๆ

118
463491:14:04,801 --> 463491:14:08,801
ซึ่งการแบ่งหน่วยความจำนะครับ

119
463491:14:14,547 --> 463491:14:16,250
ระบบ

120
463491:14:16,250 --> 463491:14:17,269

121
463491:14:17,269 --> 463491:14:19,462
หลายโปรแกรมแบบหน่วยความจำก็ยังสามารถ

122
463491:14:19,462 --> 463491:14:23,111
แบ่งได้เป็น 2 ประเภทนะครับ

123
463491:14:23,111 --> 463491:14:27,111
ก็คือ

124
463491:14:27,205 --> 463491:14:28,312
ระบบหลายโปรแกรมแบบหลายหน่วยความจำแบบ

125
463491:14:28,312 --> 463491:14:28,789
คงที่

126
463491:14:28,789 --> 463491:14:31,413
แล้วก็ไม่คงที่นะครับ

127
463491:14:31,413 --> 463491:14:35,413
ระบบหลายโปรแกรมแบบสลับหน่วยความจำนะครับ

128
463491:14:40,102 --> 463491:14:44,102
แบ่งหน่วยความจำ

129
463491:14:44,485 --> 463491:14:48,319
นะครับ แล้วก็สลับหน่วยความจำ

130
463491:14:48,319 --> 463491:14:48,691
คราวนี้เรามาดูประเภทที่ 1 นะครับ

131
463491:14:48,691 --> 463491:14:52,506
การแบ่งหน่วยความจำ

132
463491:14:52,506 --> 463491:14:53,050
ขนาดคงที่นะครับ

133
463491:14:53,050 --> 463491:14:57,050
เห็นไหมครับ

134
463491:14:59,972 --> 463491:15:03,812
โปรแกรมส่วนที่ 1 ที่ 2 ส่วนที่ 3 มีขนาดที่เท่ากัน

135
463491:15:03,812 --> 463491:15:05,584
นะครับ

136
463491:15:05,584 --> 463491:15:06,605
ที่เท่ากัน

137
463491:15:06,605 --> 463491:15:10,605
และการแบ่งหน่วยความจำขนาดคงที่ก็สามารถแบ่งออกได้เป็น 2 ประเภทนะครับ 2 แบบ

138
463491:15:23,749 --> 463491:15:27,749
ได้แก่

139
463491:15:27,834 --> 463491:15:28,230
การแปลงและโหลดด้วยค่าสัมบูรณ์

140
463491:15:28,230 --> 463491:15:31,530
นะครับ ดูรูปนี้ประกอบนะครับ

141
463491:15:31,530 --> 463491:15:35,530
โปรแกรมส่วนที่ 1

142
463491:15:35,600 --> 463491:15:39,600
เห็นไหมครับ ส่วนที่ 1 เราเข้าส่วนที่ 1 และส่วนที่ 2 ก็เข้าส่วนที่ 2 ส่วนที่ 3 เข้าที่ 3

143
463491:15:43,080 --> 463491:15:47,080
โปรแกรมส่วนที่ 1 ที่ 2 ที่ 3 จะเห็นได้ว่ามีขนาดที่เท่ากันนะครับ

144
463491:15:49,287 --> 463491:15:53,287
ที่เท่ากัน

145
463491:15:54,132 --> 463491:15:56,086
พอมันเท่ากันปุ๊บ ดูนะครับ โปรแกรมส่วนที่ 1

146
463491:15:56,086 --> 463491:16:00,086
เรากำหนดส่วนที่ 1 ส่วนที่ 2 ส่วนที่ 3

147
463491:16:00,933 --> 463491:16:01,307
มีขนาดเท่ากับ 10

148
463491:16:01,307 --> 463491:16:02,916
เท่ากับ 10

149
463491:16:02,916 --> 463491:16:06,502
นะครับ โปรแกรมส่วนที่ 1

150
463491:16:06,502 --> 463491:16:07,647
เมื่อแปลงเสร็จแล้ว

151
463491:16:07,647 --> 463491:16:10,354
โหลดเข้าไป

152
463491:16:10,354 --> 463491:16:11,957
มีค่าไม่เกิน 10

153
463491:16:11,957 --> 463491:16:12,206
จะเข้าไปในส่วนที่ 1

154
463491:16:12,206 --> 463491:16:15,239
นะครับ

155
463491:16:15,239 --> 463491:16:19,239
แต่ถ้า

156
463491:16:21,073 --> 463491:16:22,382
โปรแกรมส่วนที่ 2 จะต้องมีค่าตั้งแต่ 11

157
463491:16:22,382 --> 463491:16:22,682
จนถึง 20

158
463491:16:22,682 --> 463491:16:26,628
มันถึงจะไปเข้าส่วนที่ 2

159
463491:16:26,628 --> 463491:16:26,827
นะครับ

160
463491:16:26,827 --> 463491:16:30,827
แต่ถ้าบังเอิญว่า

161
463491:16:31,804 --> 463491:16:35,433
โปรแกรมส่วนที่ 1

162
463491:16:35,433 --> 463491:16:35,694
Program A Program B Programe C

163
463491:16:35,694 --> 463491:16:39,694
ตั้งค่าด้วยค่าสมบูรณ์เสร็จแล้วมันจะเข้าทีที่ 1

164
463491:16:39,966 --> 463491:16:41,390
อย่างเดียว

165
463491:16:41,390 --> 463491:16:41,777
นะครับ

166
463491:16:41,777 --> 463491:16:45,777
นี่คือข้อเสียของมันนะครับ

167
463491:16:46,569 --> 463491:16:50,569
เห็นไหม

168
463491:16:51,174 --> 463491:16:51,420
จะว่างเลยส่วนที่ 2 ส่วนที่ 2 ส่วนที่ 3

169
463491:16:51,420 --> 463491:16:53,808
ส่วนที่ 4 5 6 7 นะครับ

170
463491:16:53,808 --> 463491:16:57,808
ดังนั้น ก็เลยมีการ

171
463491:17:01,789 --> 463491:17:02,754
แก้ปัญหานะครับ

172
463491:17:02,754 --> 463491:17:05,617
โดยการ

173
463491:17:05,617 --> 463491:17:06,115
แปลงและโหลดด้วยค่าสัมพัทธ์

174
463491:17:06,115 --> 463491:17:07,204
นะครับ

175
463491:17:07,204 --> 463491:17:09,910
เพิ่งแก้ปัญหาเมื่อกี้นะครับ

176
463491:17:09,910 --> 463491:17:13,910
ก็คือมีคิวเดียวเลยนะครับ มีคิวเดียว

177
463491:17:16,039 --> 463491:17:20,039
คิวเดียวเดี๋ยวเสร็จแล้ว ก็คือส่วนที่ 1 2 3 4 หมายความว่า

178
463491:17:21,904 --> 463491:17:22,748
โปรแกรมจะโดน

179
463491:17:22,748 --> 463491:17:26,748
โหลดมาตรงนี้

180
463491:17:27,234 --> 463491:17:27,332
ที่คิว โดยมีคิวแค่คิวเดียว

181
463491:17:27,332 --> 463491:17:31,332
นะครับ แปลงเสร็จปุ๊บได้ค่าเท่ากับ 10

182
463491:17:33,146 --> 463491:17:35,305
ส่วนที่ 1

183
463491:17:35,305 --> 463491:17:39,305
แปลงเสร็จปุ๊บมีค่าเท่ากับ 10

184
463491:17:39,451 --> 463491:17:40,023
มีบวกเข้าไปอีก

185
463491:17:40,023 --> 463491:17:43,921
เป็น 12 เข้าส่วนที่ 2

186
463491:17:43,921 --> 463491:17:47,921
+6 +7 +10

187
463491:17:48,679 --> 463491:17:49,608

188
463491:17:49,608 --> 463491:17:53,608

189
463491:17:55,801 --> 463491:17:56,088

190
463491:17:56,088 --> 463491:18:00,088
ดังนั้น การป้องกันนะครับ ถ้าเป็น

191
463491:18:03,412 --> 463491:18:03,976
ในระบบโปรแกรมเดียว

192
463491:18:03,976 --> 463491:18:05,758
ใช้

193
463491:18:05,758 --> 463491:18:06,288
Regis

194
463491:18:06,288 --> 463491:18:10,288
ter  ขอบเขต แต่ถ้าเป็นระบบหลายโปรแกรม

195
463491:18:12,989 --> 463491:18:13,400
วิธีใช้

196
463491:18:13,400 --> 463491:18:17,400
Register ขอบเขตบน

197
463491:18:17,780 --> 463491:18:20,649
และขอบเขตล่าง โดยป้องกัน

198
463491:18:20,649 --> 463491:18:20,847
ไม่ให้โปรแกรมเข้ามานะครับ

199
463491:18:20,847 --> 463491:18:24,282
เห็นไหมครับ ขอบเขต

200
463491:18:24,282 --> 463491:18:28,282
ล่าง ขอบเขตบน ส่วนตัวของ

201
463491:18:31,349 --> 463491:18:31,775
ระบบปฏิบัติการ

202
463491:18:31,775 --> 463491:18:35,775
ใช้ตัวของ register ขอบเขตป้องกันนะครับ

203
463491:18:35,895 --> 463491:18:39,895
คราวนี้การแบ่งหน่วยความจำไม่ว่าจะใช้วิธีการใดก็แล้วแต่

204
463491:18:44,394 --> 463491:18:48,394
ย่อมเกิดพื้นที่ที่ไม่ใช้งาน เราเรียกว่า "การแตกกระจาย

205
463491:18:48,893 --> 463491:18:52,893
" การกระจาย ก็คือ

206
463491:18:53,810 --> 463491:18:57,810
ส่วนของหน่วยความจำที่ไม่ถูกใช้งาน

207
463491:18:57,847 --> 463491:18:58,865
ในระบบ

208
463491:18:58,865 --> 463491:19:02,302
แบบหน่วยความจำ

209
463491:19:02,302 --> 463491:19:02,711
นะครับ แบ่งหน่วยความจำ

210
463491:19:02,711 --> 463491:19:06,711
ซึ่งเราเรียก

211
463491:19:09,907 --> 463491:19:10,422
การแตกกระจายนี้ออกเป็น 2 กรณีนะครับ ก็คือ

212
463491:19:10,422 --> 463491:19:14,422
กระจายภายนอกและก็การแพร่กระจายภายใน

213
463491:19:16,257 --> 463491:19:17,208
นะครับ การแตกกระจายภายนอก

214
463491:19:17,208 --> 463491:19:17,565
เป็นอย่างไรครับ

215
463491:19:17,565 --> 463491:19:19,430
ดู

216
463491:19:19,430 --> 463491:19:23,430
นะครับ ส่วนที่ 1

217
463491:19:24,648 --> 463491:19:25,110
การแตกกระจายภายนอก

218
463491:19:25,110 --> 463491:19:29,110
หมายถึง ส่วนของ

219
463491:19:29,952 --> 463491:19:33,225
หน่วยความจำที่ไม่ถูกใช้งาน

220
463491:19:33,225 --> 463491:19:33,545
ในระบบ

221
463491:19:33,545 --> 463491:19:37,545
แบ่งหน่วยความจำระบบหน่วยคงที่ ไม่ถูกใช้งานเลยเห็นไหมครับ ส่วนที่ 1

222
463491:19:39,282 --> 463491:19:43,282
ไม่ถูกใช้งาน

223
463491:19:43,817 --> 463491:19:45,681
ส่วนการแพร่กระจายภายใน

224
463491:19:45,681 --> 463491:19:47,515
อยู่นะครับ ภายใน

225
463491:19:47,515 --> 463491:19:50,664
หมายถึง

226
463491:19:50,664 --> 463491:19:50,953
ส่วนของหน่วยความจำ

227
463491:19:50,953 --> 463491:19:53,411
ที่ถูกใช้งาน

228
463491:19:53,411 --> 463491:19:56,727
นะครับ ที่ถูกใช้งานแต่ใช้งานไม่หมด

229
463491:19:56,727 --> 463491:20:00,727
นะครับ ใช้ไม่หมดนะครับ

230
463491:20:01,170 --> 463491:20:05,170
ในการ

231
463491:20:05,252 --> 463491:20:06,685
แบ่งหน่วยความจำขนาดคงที่

232
463491:20:06,685 --> 463491:20:07,183
ต่างกันนะครับ

233
463491:20:07,183 --> 463491:20:11,183
การกระจายภายนอก ก็คือส่วนที่ว่างไม่ถูกใช้งานเลย

234
463491:20:12,182 --> 463491:20:16,182
ส่วนกระจายภายใน ก็คือหน่วยความจำว่า

235
463491:20:16,503 --> 463491:20:19,960
โดนใช้แล้วใช้ไม่หมดนะครับ

236
463491:20:19,960 --> 463491:20:23,960
คราวนี้มาดู

237
463491:20:31,105 --> 463491:20:32,158
การแบ่งหน่วยความจำขนาดคงที่... เอ้ย ขนาดไม่คงที่นะครับ

238
463491:20:32,158 --> 463491:20:33,907
เมื่อกี้

239
463491:20:33,907 --> 463491:20:34,928
เป็นขนาดคงที่

240
463491:20:34,928 --> 463491:20:37,865
นะครับ

241
463491:20:37,865 --> 463491:20:40,490
ผู้ออกแบบ

242
463491:20:40,490 --> 463491:20:41,361
ระบบปฏิบัติการได้ตระหนักถึงข้อเสีย

243
463491:20:41,361 --> 463491:20:44,990
ของการแบ่งหน่วยความจำแบบคงที่มีข้อ

244
463491:20:44,990 --> 463491:20:46,576
ก็เลย

245
463491:20:46,576 --> 463491:20:50,576

246
463491:20:54,313 --> 463491:20:54,965
คิดค้นวิธีการแบ่งหน่วยความจำแบบไม่คงที่

247
463491:20:54,965 --> 463491:20:55,616

248
463491:20:55,616 --> 463491:20:57,420
เห็นไหมคะ

249
463491:20:57,420 --> 463491:20:58,783
ผู้ชาย

250
463491:20:58,783 --> 463491:20:59,005
A ต้องการใช้สิทธิ์

251
463491:20:59,005 --> 463491:21:03,005
เข้าไปเลย 10K

252
463491:21:03,354 --> 463491:21:07,354
นะครับ

253
463491:21:18,494 --> 463491:21:19,128
ผู้ใช้ D ต้องการ 30

254
463491:21:19,128 --> 463491:21:20,951

255
463491:21:20,951 --> 463491:21:21,612
ก็เข้าไป ขนาดไม่คงที่นะครับ

256
463491:21:21,612 --> 463491:21:25,572
ขอให้มีพื้นที่ว่างเพียงพอก็สามารถจัดการ

257
463491:21:25,572 --> 463491:21:28,493
บอกความจำได้เลยนะครับ

258
463491:21:28,493 --> 463491:21:32,493
ระบบหลายโปรแกรมแบบแบ่งหน่วยความจำแบบไม่คงที่นะครับ

259
463491:21:40,519 --> 463491:21:41,370
สามารถ

260
463491:21:41,370 --> 463491:21:44,690
Run

261
463491:21:44,690 --> 463491:21:45,402
ได้หลายโปรแกรมนะครับ ดูนะครับ

262
463491:21:45,402 --> 463491:21:49,402
ถึงแม้ว่าการแบ่งหน่วยความจำขนาดไม่คงที่

263
463491:21:54,742 --> 463491:21:56,330
นะครับ

264
463491:21:56,330 --> 463491:22:00,330
ก็ยังมีส่วนที่ไม่ถูกใช้งานนะเหมือนกันนะครับ เหมือนเดิม ถ้าเป็นแบบขนาดคงที่

265
463491:22:04,908 --> 463491:22:07,613
เรียกว่า "การแตกกระจาย" นะครับ

266
463491:22:07,613 --> 463491:22:11,613
ถ้าเกิดในกรณีที่

267
463491:22:12,504 --> 463491:22:13,515
พื้นที่ที่ไม่ถูกใช้งาน

268
463491:22:13,515 --> 463491:22:15,764
ใน

269
463491:22:15,764 --> 463491:22:16,907
การแบ่งหน่วยความจำขนาด

270
463491:22:16,907 --> 463491:22:19,942
ไม่คงที่

271
463491:22:19,942 --> 463491:22:20,019
เราเรียกว่า "ช่องโหว่" หรือ

272
463491:22:20,019 --> 463491:22:24,019
"Hole" Hole เกิดขึ้นได้อย่างไร

273
463491:22:24,917 --> 463491:22:25,075
นะครับ

274
463491:22:25,075 --> 463491:22:29,075
โปรแกรม A โปรแกรม B โปรแกรม C

275
463491:22:38,122 --> 463491:22:38,636
เห็นไหม Hole เกิดขึ้นแล้วนะครับ ข้างล่างสุด

276
463491:22:38,636 --> 463491:22:40,676
ช่องว่างช่องโหว่

277
463491:22:40,676 --> 463491:22:44,676
สักระยะหนึ่งโปรแกรม B จบ คืนหน่วยความจำให้ระบบ

278
463491:22:49,774 --> 463491:22:50,144
เห็นไหมครับ ช่องโหว่เกิดขึ้นแล้ว

279
463491:22:50,144 --> 463491:22:53,055
ระยะนี้

280
463491:22:53,055 --> 463491:22:57,055
สักพักหนึ่ง

281
463491:22:59,173 --> 463491:22:59,348
โปรแกรม D จบ คืนหน่วยความจำให้ระบบ

282
463491:22:59,348 --> 463491:23:03,339
Hole เกิดขึ้นแล้ว

283
463491:23:03,339 --> 463491:23:07,339
เมื่อเกิด Hole ขึ้นนะครับ ก็มีวิธีการ

284
463491:23:11,328 --> 463491:23:15,328
โปรแกรมใหม่

285
463491:23:17,026 --> 463491:23:17,906
ลงไปวางแทน ซึ่งมีอยู่ 3 วิธีการนะครับ

286
463491:23:17,906 --> 463491:23:21,398
1

287
463491:23:21,398 --> 463491:23:24,308
. เลือก Hole ที่พบก่อน

288
463491:23:24,308 --> 463491:23:28,308
และมีขนาดใหญ่พอที่จะวางโปรแกรมใหม่ลงไปนะครับ

289
463491:23:30,290 --> 463491:23:32,993
วิธีการที่ 2

290
463491:23:32,993 --> 463491:23:35,323
เลือก Hole ที่เหมาะสม

291
463491:23:35,323 --> 463491:23:38,985
เมื่อเลือก Hole ที่เหมาะสมที่สุดก ็คือ

292
463491:23:38,985 --> 463491:23:40,197
เอาเข้าไปแล้ว

293
463491:23:40,197 --> 463491:23:42,189
เหลือความจำ

294
463491:23:42,189 --> 463491:23:42,308
เหลือ Hole น้อยที่สุด

295
463491:23:42,308 --> 463491:23:43,442
นะครับ

296
463491:23:43,442 --> 463491:23:47,442
3

297
463491:23:47,729 --> 463491:23:51,729
. เรื่อง Hole ที่ใหญ่ที่สุด

298
463491:23:52,721 --> 463491:23:53,971
นะครับ ที่ใหญ่ที่สุด

299
463491:23:53,971 --> 463491:23:57,883
มาดูแต่ละวิธี

300
463491:23:57,883 --> 463491:23:58,032
เป็นอย่างไร ดูรูปนะครับ

301
463491:23:58,032 --> 463491:24:02,032
วิธีการที่ 1

302
463491:24:02,197 --> 463491:24:06,197
เจอก่อน พบก่อน

303
463491:24:07,004 --> 463491:24:07,954
มีเงื่อนไขจะต้องมีพื้นที่ของ

304
463491:24:07,954 --> 463491:24:11,892
Hole

305
463491:24:11,892 --> 463491:24:14,952
ใหญ่เพียงพอนะครับ

306
463491:24:14,952 --> 463491:24:18,952
13 เข้า 16 ได้ไหมครับ ได้

307
463491:24:19,059 --> 463491:24:23,059
มาก่อนเลยพบก่อนเลยเข้าก่อนเข้าไปวางก่อนเลย 2

308
463491:24:26,569 --> 463491:24:26,897
. เหมาะสมที่สุด

309
463491:24:26,897 --> 463491:24:28,712
เมื่อเข้าไปวางเสร็จแล้ว

310
463491:24:28,712 --> 463491:24:32,258
Hole ใหม่ที่เกิดขึ้น

311
463491:24:32,258 --> 463491:24:33,235
มีขนาด

312
463491:24:33,235 --> 463491:24:34,061
เหลือน้อยที่สุด

313
463491:24:34,061 --> 463491:24:36,697
เข้า 16 เหลือ

314
463491:24:36,697 --> 463491:24:38,294
3

315
463491:24:38,294 --> 463491:24:39,689
ถ้าเข้า 14

316
463491:24:39,689 --> 463491:24:41,889
เหลือ 1

317
463491:24:41,889 --> 463491:24:43,367
ถ้าเข้า

318
463491:24:43,367 --> 463491:24:44,637
5 เข้าไม่ได้

319
463491:24:44,637 --> 463491:24:44,881
ค่าเข้า 30

320
463491:24:44,881 --> 463491:24:45,736
เหลือ

321
463491:24:45,736 --> 463491:24:49,736
... เลือก

322
463491:24:51,426 --> 463491:24:53,628
แล้ว

323
463491:24:53,628 --> 463491:24:57,628
Hole ใหม่น้อยที่สุด

324
463491:24:58,433 --> 463491:25:01,001
ส่วนแบบที่ 3 นะครับ วิธีการที่ 3 ก็คือ

325
463491:25:01,001 --> 463491:25:01,419
เลือก Hole ที่ใหญ่ที่สุด

326
463491:25:01,419 --> 463491:25:05,419
เห็นไหมครับ

327
463491:25:05,716 --> 463491:25:06,536
30 ใหญ่กว่าเพื่อนนะครั

328
463491:25:06,536 --> 463491:25:10,536
บ คราวนี้

329
463491:25:14,105 --> 463491:25:14,958
ในกรณีที่

330
463491:25:14,958 --> 463491:25:18,958
มี Hole เกิดขึ้นพื้นที่ติดกัน ติดกันนะครับ ติดกัน

331
463491:25:21,192 --> 463491:25:25,192
OS

332
463491:25:25,959 --> 463491:25:27,610
มีความ

333
463491:25:27,610 --> 463491:25:27,801
สามารถ

334
463491:25:27,801 --> 463491:25:31,212
นะครับ

335
463491:25:31,212 --> 463491:25:33,701
มันจะต้องมีความสามารถในการ

336
463491:25:33,701 --> 463491:25:34,045
จัดรวม Hole เข้าไปด้วยกันเลย

337
463491:25:34,045 --> 463491:25:35,428
นะครับ

338
463491:25:35,428 --> 463491:25:39,428
นึกออกไหมครับ เมื่อมี Hole อยู่ติดกัน

339
463491:25:43,702 --> 463491:25:45,753
วางติดกัน

340
463491:25:45,753 --> 463491:25:46,038
จับยุบรวมกันนะครับ

341
463491:25:46,038 --> 463491:25:50,038
อีกวิธีการหนึ่ง การอัดหน่วยความจำ

342
463491:25:50,154 --> 463491:25:53,958
นะครับ อัดความจำ

343
463491:25:53,958 --> 463491:25:55,774
ก็คือถ้าเกิดมี

344
463491:25:55,774 --> 463491:25:57,346
Hole ว่าง

345
463491:25:57,346 --> 463491:25:59,027
เกิดขึ้น

346
463491:25:59,027 --> 463491:26:03,027
ติดกันก็ได้ ไม่ติดก็ได้นะครับ

347
463491:26:04,640 --> 463491:26:08,640
วิธีการอัดหน่วยความจำ ก็คือระบบ

348
463491:26:09,990 --> 463491:26:11,145
จะหยุดการทำงานและเช็ก

349
463491:26:11,145 --> 463491:26:11,665
ดูระบบ

350
463491:26:11,665 --> 463491:26:15,665
และการเอาความจำที่ว่าง ๆ มาจับรวมกันให้ได้ความจำที่ใหญ่ขึ้นนะครับ

351
463491:26:18,330 --> 463491:26:22,330
เขาเรียกว่า "การรวบรวมขยะ

352
463491:26:24,832 --> 463491:26:28,832
" เหมือนโปรแกรม

353
463491:26:30,546 --> 463491:26:30,957
reflex เดี๋ยวพอเราแยกไปเรียนปฏิบัติ

354
463491:26:30,957 --> 463491:26:33,852
เราจะเห็นว่า

355
463491:26:33,852 --> 463491:26:35,519
โปรแกรม

356
463491:26:35,519 --> 463491:26:36,689
reflex

357
463491:26:36,689 --> 463491:26:36,951
ทำงานอย่างไร

358
463491:26:36,951 --> 463491:26:40,951
มาทีหลังทำไมไม่เอาแบบฝึกหัด

359
463491:26:41,800 --> 463491:26:45,800
เพิ่งเข้ามาเมื่อกี้

360
463491:26:46,487 --> 463491:26:47,679
มาเอาแบบฝึกหัด

361
463491:26:47,679 --> 463491:26:51,679
แล้วทำอะไรอยู่

362
463491:26:51,793 --> 463491:26:55,793
นี่ดูวิธีการรวบรวมนะครับ อัดหน่วยความจำนะครับ

363
463491:27:09,016 --> 463491:27:13,016
เห็นไหมครับนี่

364
463491:27:14,696 --> 463491:27:15,501
ใช้งาน 1 2 3

365
463491:27:15,501 --> 463491:27:18,128
Hole

366
463491:27:18,128 --> 463491:27:19,076

367
463491:27:19,076 --> 463491:27:23,066
Hole Hole นะครับ

368
463491:27:23,066 --> 463491:27:23,433
พออัดหน่วยความจำ

369
463491:27:23,433 --> 463491:27:27,433
เกิดช่องว่างขึ้น เกิดว่างขึ้น

370
463491:27:28,013 --> 463491:27:30,601
ใหญ่ขึ้นนะครับ

371
463491:27:30,601 --> 463491:27:32,329
นี่คือวิธีการอัดหน่วยความจำนะครับ

372
463491:27:32,329 --> 463491:27:36,329
คราวนี้มาดูระบบหลายโปรแกรม

373
463491:27:38,612 --> 463491:27:42,612
แบบสลับหน่วยความจำ เมื่อกี้เป็นแบบแบ่งหน่วยความจำนะครับ

374
463491:27:43,757 --> 463491:27:47,757
แบ่งหน่วยความจำหลักมีขนาดแบบ

375
463491:27:48,108 --> 463491:27:51,379
คงที่กับแบบไม่คงที่

376
463491:27:51,379 --> 463491:27:53,715
คราวนี้มาดูหลักการก็คือ

377
463491:27:53,715 --> 463491:27:54,961
เมื่อโปรแกรมถูก

378
463491:27:54,961 --> 463491:27:58,061
ใช้งาน

379
463491:27:58,061 --> 463491:27:58,682
เราเรียกว่า "สลับเข้า" นะครับ เข้ามา เข้ามา

380
463491:27:58,682 --> 463491:28:02,682

381
463491:28:04,700 --> 463491:28:08,700


