﻿1
00:00:18,801 --> 00:00:19,580
คราวนี้มาดูบทที่ 4 นะครับ การจัดการหน่วยความจำ เราพูดถึง

2
00:00:19,580 --> 00:00:21,528

3
00:00:21,528 --> 00:00:25,528
บทนี้เราก็จะพูดถึงการจัดการหน่วยความจำ

4
00:00:27,221 --> 00:00:29,422
เตือนความจำก็เป็น

5
00:00:29,422 --> 00:00:33,422
อุปกรณ์ตัวหนึ่ง

6
00:00:34,900 --> 00:00:36,563
ที่มีส่วนสำคัญในคอมพิวเตอร์ของเรานะครับ

7
00:00:36,563 --> 00:00:40,563
เราจะรู้ว่าเครื่องคอมพิวเตอร์เครื่องไหน

8
00:00:44,443 --> 00:00:47,593
มีขีดความสามารถมากกว่ากัน

9
00:00:47,593 --> 00:00:47,892
เราก็อาจจะดูได้จากหน่วยความจำนะครับ

10
00:00:47,892 --> 00:00:51,892
แต่ทั้งนี้ทั้งนั้นนะครับ

11
00:00:53,209 --> 00:00:57,209
ไม่ได้ตอบได้เสมอว่า เครื่องที่มีหน่วย

12
00:01:00,413 --> 00:01:03,457
ความจำมาก

13
00:01:03,457 --> 00:01:04,511
ทำงานได้ดีกว่านะครับ

14
00:01:04,511 --> 00:01:08,511
ในการจัดการหน่วยความจำนั้นก็เป็นขีดความสามารถอันหนึ่งของระบบปฏิบัติการของเราด้วยนะครับ

15
00:01:12,909 --> 00:01:16,909
ระบบปฏิบัติการของเรา

16
00:01:17,016 --> 00:01:17,274
จัดการหน่วยความจำไม่ดีนะครับ

17
00:01:17,274 --> 00:01:21,274
ประสิทธิภาพในการใช้งานก็จะด้อยลงนะครับ

18
00:01:22,508 --> 00:01:26,135
คราวนี้เรามาดูว่า

19
00:01:26,135 --> 00:01:27,440
มันจัดการอย่างไรนะครับ

20
00:01:27,440 --> 00:01:31,440
การจัดการหน่วยความจำมีอยู่ 3 แบบ

21
00:01:34,049 --> 00:01:36,788
มีอยู่ 3

22
00:01:36,788 --> 00:01:40,788
แบบ เฟส วาง แทนที่นะครับ หรือ 3 ลักษณะ

23
00:01:44,188 --> 00:01:48,188
เรามาดูว่าทำอย่างไรนะครับ

24
00:01:48,735 --> 00:01:52,735
วันนี้มาดูการจัดสรรหน่วยความจำนะครับ โปรแกรมทุกโปรแกรมที่เราใช้งานในคอมพิวเตอร์ของเรานั้น

25
00:01:57,024 --> 00:01:58,782
จำเป็นต้องใช้หน่วยความจำนะครับ

26
00:01:58,782 --> 00:02:01,868
จะมากจะน้อยก็แล้วแต่โปรแกรมนะครับ

27
00:02:01,868 --> 00:02:04,168
โปรแกรม

28
00:02:04,168 --> 00:02:05,771
เกม

29
00:02:05,771 --> 00:02:07,752
อาจจะใช้เยอะ

30
00:02:07,752 --> 00:02:11,752
โปรแกรมพิมพ์งานอาจจะใช้น้อย อะไรประมาณนี้นะครับ

31
00:02:12,443 --> 00:02:14,884
คราวนี้เรามาดูว่า ถ้าเกิด

32
00:02:14,884 --> 00:02:18,884
ในการจัดสรรหน่วยความจำนะครับ จะมีสามารถแบ่งออกเป็น 2 ประเภท

33
00:02:25,641 --> 00:02:26,221
นะครับ ก็คือ

34
00:02:26,221 --> 00:02:27,823
บ้านจัดสรรแบบ

35
00:02:27,823 --> 00:02:29,238
ต่อเนื่อง

36
00:02:29,238 --> 00:02:31,936
แล้วก็แบบไม่ต่อเนื่องนะครับ

37
00:02:31,936 --> 00:02:35,936
การจัดสรรหน่วยความจำแบบ

38
00:02:36,221 --> 00:02:38,651
ต่อเนื่อง ก็คือหมายความว่า

39
00:02:38,651 --> 00:02:41,111
หน่วยความจำจะต้องว่างต่อกัน

40
00:02:41,111 --> 00:02:44,935
นะครับ พื้นที่ว่าง

41
00:02:44,935 --> 00:02:45,135
ต่อเนื่องกัน

42
00:02:45,135 --> 00:02:47,435
ครับ ขาดช่วงอะไรไม่ได้นะครับ

43
00:02:47,435 --> 00:02:51,037
แล้วก็ต้องมีขนาดใหญ่พอนะครับ

44
00:02:51,037 --> 00:02:52,900
ถึงจะ

45
00:02:52,900 --> 00:02:54,572
สามารถ

46
00:02:54,572 --> 00:02:54,814
เข้าไปทำงานได้นะครับ

47
00:02:54,814 --> 00:02:58,814
ส่วนไม่ต่อเนื่องนะครับ

48
00:03:01,522 --> 00:03:01,982
ก็คือ

49
00:03:01,982 --> 00:03:05,982
เข้าไปครอบครองหรือความจำแล้ว หน่วยความจำอาจจะอยู่คนละที่

50
00:03:06,107 --> 00:03:08,577
อยู่คนละแบบ

51
00:03:08,577 --> 00:03:09,894
อยู่คนละที่นะครับ

52
00:03:09,894 --> 00:03:13,642
แต่ก็ต้องมีเนื้อที่

53
00:03:13,642 --> 00:03:16,546
เพียงพอนะครับ

54
00:03:16,546 --> 00:03:16,907
ที่โปรแกรมจะใช้งานนะครับ

55
00:03:16,907 --> 00:03:20,907
คราวนี้มาดูในระบบ

56
00:03:22,465 --> 00:03:26,110
โปรแกรมเดียว โปรแกรมเดี่ยว

57
00:03:26,110 --> 00:03:29,130
Single Program

58
00:03:29,130 --> 00:03:31,891
นะครับ ก็คือ

59
00:03:31,891 --> 00:03:32,289
คอมพิวเตอร์

60
00:03:32,289 --> 00:03:36,289
มีผู้ใช้งานแค่โปรแกรมเดียว

61
00:03:37,986 --> 00:03:38,566
การจัดสรรหน่วยความจำจะไม่ยุ่งยาก

62
00:03:38,566 --> 00:03:40,191
ครับ

63
00:03:40,191 --> 00:03:44,191
ซึ่งเราสามารถแบ่งพื้นที่

64
00:03:47,919 --> 00:03:48,897
ของหน่วยความจำออกเป็น 2 ส่วนนะครับ

65
00:03:48,897 --> 00:03:52,897
ก็คือส่วนแรก

66
00:03:53,242 --> 00:03:53,482
เป็นส่วนของระบบปฏิบัติการนะครับ

67
00:03:53,482 --> 00:03:55,642
และ

68
00:03:55,642 --> 00:03:58,414
เป็นส่วนที่จำเป็นจะต้อง

69
00:03:58,414 --> 00:04:01,439
มีพื้นที่ว่าง

70
00:04:01,439 --> 00:04:03,667
ยาวติดต่อกัน

71
00:04:03,667 --> 00:04:04,013
เป็นผืนใหญ่ผืนเดียวเลย

72
00:04:04,013 --> 00:04:05,816
นะครับ

73
00:04:05,816 --> 00:04:09,816
นี่ OS นะครับ

74
00:04:12,631 --> 00:04:16,482
ต้องมีพื้นที่หน่วยความจำของมันด้วย

75
00:04:16,482 --> 00:04:20,002
และต้องเป็นพื้นที่ยาวต่อเนื่องกันนะครับ

76
00:04:20,002 --> 00:04:24,002
2

77
00:04:24,586 --> 00:04:27,361
. ส่วนของผู้ใช้

78
00:04:27,361 --> 00:04:27,559
นะครับ

79
00:04:27,559 --> 00:04:30,218
ก็คือเหลือจาก OS

80
00:04:30,218 --> 00:04:33,068
ก็กลายเป็นส่วนของผู้ใช้นะครับ

81
00:04:33,068 --> 00:04:35,880
ในระบบโปรแกรมเดียวนะครับ

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

83
00:04:41,206 --> 00:04:45,206
ตัวของระบบปฏิบัติการก็จำเป็นจะต้องป้องกัน

84
00:04:47,130 --> 00:04:47,909
ให้ตัวมันเอง ไม่ให้โดนรุกล้ำเข้ามา

85
00:04:47,909 --> 00:04:50,555
วิธีการป้องกันก็คือ

86
00:04:50,555 --> 00:04:53,566
การใช้ register ขอบเขต

87
00:04:53,566 --> 00:04:55,839
นะครับ Register

88
00:04:55,839 --> 00:04:59,839
ขอบเขตคืออะไร ก็คือส่วนที่ป้องกัน

89
00:05:02,144 --> 00:05:03,394
ระหว่าง

90
00:05:03,394 --> 00:05:05,644
ระหว่างอะไรครับ

91
00:05:05,644 --> 00:05:06,105
OS

92
00:05:06,105 --> 00:05:06,632
นะครับ

93
00:05:06,632 --> 00:05:10,031
กับส่วนของผู้ใช้

94
00:05:10,031 --> 00:05:11,520
ไม่ให้เข้ามา

95
00:05:11,520 --> 00:05:13,573
ยุ่งเกี่ยวกันนะครับ

96
00:05:13,573 --> 00:05:15,023
ดังนั้น

97
00:05:15,023 --> 00:05:15,613
การเขียนโปรแกรม

98
00:05:15,613 --> 00:05:18,272
ไวรัสคอมพิวเตอร์

99
00:05:18,272 --> 00:05:22,010
ตัวหนึ่ง ก็คือเจาะ

100
00:05:22,010 --> 00:05:23,971
register ขอบเขต เจาะเข้าไป

101
00:05:23,971 --> 00:05:27,971
นี่นะครับ

102
00:05:29,475 --> 00:05:33,475
ถ้ามีการรุกล้ำ register ขอบเขต

103
00:05:36,178 --> 00:05:36,790
ก็จะแจ้งเตือนนะครับ

104
00:05:36,790 --> 00:05:40,790
คราวนี้มาดูระบบหลายโปรแกรมนะครับ

105
00:05:51,484 --> 00:05:51,859
ระบบหลายโ

106
00:05:43,798 --> 00:05:47,798
ปรแกรม การทำงานของระบบหลายโปรแกรมนั้น ส่วนมาก

107
00:05:50,301 --> 00:05:54,301
นะครับ ส่วนมากจะเกิดขึ้น ก็คือ

108
00:05:55,859 --> 00:05:56,090
การไปทำงาน input output

109
00:05:56,090 --> 00:06:00,090
ก็คือการไป

110
00:06:02,221 --> 00:06:04,150
ก็คือการที่มันไม่ได้ครอบครอง CPU ว่าง่าย ๆ ไม่ได้เข้าไปครอบครองหน่วยความจำ

111
00:06:04,150 --> 00:06:08,150
แล้วเรียกระบบนี้ว่าระบบ Multi programming

112
00:06:11,802 --> 00:06:15,802
ระบบ multi programming นี้นะครับ ก็คือการทำงานที่

113
00:06:19,533 --> 00:06:23,533
มีโปรแกรมมากกว่า 1 โปรแกรม

114
00:06:23,961 --> 00:06:24,272
ทำงานในเวลาเดียวกัน

115
00:06:24,272 --> 00:06:26,016
2 3 4 5 6

116
00:06:26,016 --> 00:06:30,016
7 นะครับ การทำงานของระบบไหลโปรแกรมนั้น ก็จะแบ่ง partition ของ

117
00:06:34,007 --> 00:06:36,106
หน่วยความจำ

118
00:06:36,106 --> 00:06:39,104
แบ่ง partition ของหน่วยความจำ

119
00:06:39,104 --> 00:06:39,525
ไปสวน

120
00:06:39,525 --> 00:06:43,525
เป็นส่วน ๆ นะครับ

121
00:06:47,094 --> 00:06:51,094
ซึ่งการแบ่งหน่วยความจำนะครับ ระบบ หลาย Program

122
00:06:53,764 --> 00:06:54,910
แบ่งหน่วยความจำ

123
00:06:54,910 --> 00:06:55,182
ก็ยังสามารถ

124
00:06:55,182 --> 00:06:59,182
แบ่งได้เป็น 2 ประเภทนะครับ

125
00:07:01,866 --> 00:07:03,363
ก็คือระบบ หลายโปรแกรมแบบ

126
00:07:03,363 --> 00:07:03,903
แบ่งหน่วยความจำ

127
00:07:03,903 --> 00:07:05,197
แบบคงที่

128
00:07:05,197 --> 00:07:07,234
แล้วก็ไม่คงที่น

129
00:07:07,234 --> 00:07:11,234
ะครับ ในระบบหลายโปรแกรมแบบ

130
00:07:13,417 --> 00:07:13,995
สลับหน่วยความจำ

131
00:07:13,995 --> 00:07:15,990
นะครับ

132
00:07:15,990 --> 00:07:19,990
แบ่งหน่วยความจำนะครับ แล้วก็สลับหน่วยความจำ

133
00:07:22,296 --> 00:07:25,326
คราวนี้เรามาดูประเภทที่ 1 นะครับ

134
00:07:25,326 --> 00:07:29,309
การแบ่งหน่วยความจำ

135
00:07:29,309 --> 00:07:31,142
ขนาดคงที่นะครับ

136
00:07:31,142 --> 00:07:35,142
เห็นไหมครับ

137
00:07:38,635 --> 00:07:39,179
โปรแกรมส่วนที่ 1 ส่วนที่ 2 ส่วนที่ 3

138
00:07:39,179 --> 00:07:41,331
มีขนาดที่เท่ากัน

139
00:07:41,331 --> 00:07:45,331
นะครับ ที่เท่ากัน

140
00:07:51,385 --> 00:07:55,385
และการแบ่งหน่วยความจำแบบคงที่ ก็ยังสามารถแบ่งได้

141
00:07:58,900 --> 00:07:59,961
2 ประเภท

142
00:07:59,961 --> 00:08:00,660
นะครับ 2 แบบ

143
00:08:00,660 --> 00:08:02,105
ได้แก่

144
00:08:02,105 --> 00:08:05,871
การแปลงและโหลดด้วยค่าสมบูรณ์

145
00:08:05,871 --> 00:08:09,085
นะครับ ดูรูปนี้ประกอบนะครับ

146
00:08:09,085 --> 00:08:13,085
โปรแกรมส่วนที่ 1

147
00:08:14,804 --> 00:08:17,892
เห็นไหมครับ ส่วนที่ 1

148
00:08:17,892 --> 00:08:18,022
เข้าส่วนที่ 1 ส่วนที่ 2 เข้าส่วนที่

149
00:08:18,022 --> 00:08:20,419
2 ส่วนที่ 3 เข้าส่วนที่ 3 ส่วนที่ 1

150
00:08:20,419 --> 00:08:24,419
ที่ 2 ที่ 3

151
00:08:24,980 --> 00:08:26,015
จะเห็นว่ามีขนาดที่เท่ากันนะครับ

152
00:08:26,015 --> 00:08:26,987
ที่เท่ากัน

153
00:08:26,987 --> 00:08:30,094
พอมันเท่ากัน

154
00:08:30,094 --> 00:08:32,502
ปุ๊บ โปรแกรมส่วนที่ 1

155
00:08:32,502 --> 00:08:36,502
เช่นเรากำหนดว่าส่วนที่ 1 ส่วนที่ 2 ส่วนที่ 3 = 4

156
00:08:38,549 --> 00:08:41,666
โปรแกรมตรวจที่ 1

157
00:08:41,666 --> 00:08:44,950
ถ้าแปลงเสร็จแล้ว โหลดเข้าไป

158
00:08:44,950 --> 00:08:48,486
มีค่าไม่เกิน 10

159
00:08:48,486 --> 00:08:49,250
เข้าไปในส่วนที่ 1

160
00:08:49,250 --> 00:08:51,343
นะครับ

161
00:08:51,343 --> 00:08:55,343
แต่ถ้าโปรแกรมส่วนที่ 2

162
00:08:56,028 --> 00:08:59,014
จะต้องมีค่าตั้งแต่ 11 จนถึง 20

163
00:08:59,014 --> 00:09:02,795
ร มันถึงจะเข้าส่วนที่ 2

164
00:09:02,795 --> 00:09:06,795
นะครับ แต่ถ้าบังเอิญว่าโปรแกรมส่วนที่ 1

165
00:09:07,678 --> 00:09:10,764
โปรแกรม a โปรแกรม B โปรแกรม C

166
00:09:10,764 --> 00:09:14,764
เมื่อแปลงแล้วโหลดด้วยค่าสัมบูรณ์เสร็จแล้วมีค่าไม่เกิน 10

167
00:09:17,068 --> 00:09:19,520
มันจะเข้าคิวที่ 1 อย่างเดียว

168
00:09:19,520 --> 00:09:22,502
นะครับ นี่คือข้อเสียของมันนะครับ

169
00:09:22,502 --> 00:09:26,502
เห็นไหมครับ มันจะว่างเลย ส่วนที่ 2 ที่ 3 ที่ 4 ที่ 5

170
00:09:28,785 --> 00:09:31,353
6 7 นะครับ

171
00:09:31,353 --> 00:09:35,353
ดังนั้นก็เลยมีการ

172
00:09:38,132 --> 00:09:38,463
แก้ปัญหานะครับ

173
00:09:38,463 --> 00:09:42,463
เป็นการแปลงและโหลดด้วยค่าสัมพัทธ์นะค

174
00:09:43,734 --> 00:09:47,734
รัย เพื่อแก้ปัญหาเมื่อกี้นะครับ ก็คือ

175
00:09:48,570 --> 00:09:51,585
มีคิวเดียวเลย

176
00:09:51,585 --> 00:09:51,773
นะครับ มีคิวเดียว

177
00:09:51,773 --> 00:09:55,773
คิวเดียวเสร็จแล้ว ส่วนที่ 1 2 3 4 หมายความว่า

178
00:09:57,162 --> 00:10:00,254
เตรียมจะโดน

179
00:10:00,254 --> 00:10:02,181
โหลดมาตรงนี้

180
00:10:02,181 --> 00:10:03,848
ที่คิว โดยมีคิว

181
00:10:03,848 --> 00:10:04,177
แค่คิวเดียวนะครับ

182
00:10:04,177 --> 00:10:08,177
แปลงเสร็จปุ๊บ

183
00:10:08,778 --> 00:10:09,019
ได้ค่าเท่ากับ 10

184
00:10:09,019 --> 00:10:11,263

185
00:10:11,263 --> 00:10:13,310
เข้าส่วนที่ 1 แปลงเสร็จปุ๊บ มีค่าเท่ากับ

186
00:10:13,310 --> 00:10:16,378
10 เอาบวกเข้าไปอีก

187
00:10:16,378 --> 00:10:19,820
2 เข้าส่วนที่ 2

188
00:10:19,820 --> 00:10:22,226
และแปลงเสร็ได้ 15

189
00:10:22,226 --> 00:10:24,715
เข้าไม่ได้ข้อ 2 ไม่ได้

190
00:10:24,715 --> 00:10:27,389
7 + 10 เข้าไปนะครับ

191
00:10:27,389 --> 00:10:31,389
เพื่อให้เข้าในส่วนที่ 2

192
00:10:31,898 --> 00:10:32,540
ที่ 3 ที่ 4 ที่ 5 ไปเรื่อย ๆ

193
00:10:32,540 --> 00:10:32,951
นะครับ

194
00:10:32,951 --> 00:10:36,951
ดังนั้น การป้องกัน

195
00:10:38,857 --> 00:10:40,149
ถ้าเป็นในระบบ

196
00:10:40,149 --> 00:10:40,328
โปรแกรมเดี่ยว

197
00:10:40,328 --> 00:10:43,694
ใช้ Register ขอบเขต ในการป้องกัน

198
00:10:43,694 --> 00:10:47,694
ถ้าในระบบหลายโปรแกรม ประเภทหน่วยความจำนะครับ

199
00:10:52,157 --> 00:10:54,328
วิธีที่นิยมใช้ก็คือใช้ register ขอบเขตบนและขอบเขตล่าง

200
00:10:54,328 --> 00:10:56,102
ในการป้องกันไม่ให้

201
00:10:56,102 --> 00:10:56,758
โปรแกรมเข้ามา

202
00:10:56,758 --> 00:10:57,256
ครับ

203
00:10:57,256 --> 00:11:00,751
เห็นไหมครับ ขอบเขตล่าง ขอบเขตบน

204
00:11:00,751 --> 00:11:03,342
เขตล่าง ขอบเขตบน

205
00:11:03,342 --> 00:11:03,493
นะครับ

206
00:11:03,493 --> 00:11:07,493
ส่วนตัวของระบบปฏิบัติการ

207
00:11:08,514 --> 00:11:12,514
ใช้ตัวของ register ขอบเขตนะครับ ในการป้องกันนะครับ

208
00:11:13,134 --> 00:11:17,134
คราวนี้การแบ่งหน่วยความจำ ไม่ว่าจะใช้วิธีการใดก็แล้วแต่

209
00:11:20,998 --> 00:11:22,487
ถ้าเกิด

210
00:11:22,487 --> 00:11:24,004
ไม่ถูกใช้งาน

211
00:11:24,004 --> 00:11:26,317
เราเรียกว่า "การแตกกระจาย

212
00:11:26,317 --> 00:11:30,317
" การแตกกระจาย ก็คือ

213
00:11:30,982 --> 00:11:34,438
ส่วนของหน่วยความจำที่ไม่ถูกใช้งาน

214
00:11:34,438 --> 00:11:38,438
ในระบบแบ่งหน่วยความจำนะครับ แบ่งหน่วยความจำ

215
00:11:39,203 --> 00:11:42,277
ซึ่งเราเรียก

216
00:11:42,277 --> 00:11:46,277
การแตกกระจายนี้ออกเป็น 2 กรณีนะครับ

217
00:11:47,442 --> 00:11:48,844
ว่ามีการแตกกระจาย

218
00:11:48,844 --> 00:11:50,197
ภายนอก แล้วก็ตาม

219
00:11:50,197 --> 00:11:50,456
กระจาย

220
00:11:50,456 --> 00:11:54,456
ภายในนะครับ การแตกกระจายภายนอกเป็นอย่างไรครับ

221
00:11:54,779 --> 00:11:56,347
ดูครับ

222
00:11:56,347 --> 00:11:59,025
ส่วนที่ 1

223
00:11:59,025 --> 00:12:02,937
การแตกกระจายภายนอก

224
00:12:02,937 --> 00:12:06,038
หมายถึง ส่วนของ

225
00:12:06,038 --> 00:12:10,038
หน่วยความจำที่ไม่ถูกใช้งาน

226
00:12:10,226 --> 00:12:10,767
ในระบบ

227
00:12:10,767 --> 00:12:14,767
แบ่งหน่วยความจำขนาดคงที่ ไม่ถูกใช้งานเลยเห็นไหมครับ ส่วนที่ 1 ไม่ถูกใช้งาน

228
00:12:18,071 --> 00:12:21,311
การแตกกระจายภายใน

229
00:12:21,311 --> 00:12:22,663
ภายใน

230
00:12:22,663 --> 00:12:24,532
หมายถึง

231
00:12:24,532 --> 00:12:28,316
ส่วนของหน่วยความจำ

232
00:12:28,316 --> 00:12:30,218
ที่ถูกใช้งาน

233
00:12:30,218 --> 00:12:33,194
นะครับ

234
00:12:33,194 --> 00:12:33,503
ที่ถูกใช้งาน แต่ใช้งานไม่หมด

235
00:12:33,503 --> 00:12:37,256
นะครับ ใช้ไม่หมดนะครับ

236
00:12:37,256 --> 00:12:39,714
ในการ

237
00:12:39,714 --> 00:12:41,283
แบ่งหน่วยความจำ

238
00:12:41,283 --> 00:12:41,505
ขนาดคงที่

239
00:12:41,505 --> 00:12:45,505
ต่างกันนะครับ

240
00:12:48,502 --> 00:12:51,757
การแตกกระจายภายนอก ก็คือส่วนที่ว่างไม่ถูกใช้งานเลย

241
00:12:51,757 --> 00:12:53,240
ส่วนการแตกกระจายภายใน คือ

242
00:12:53,240 --> 00:12:55,703
ความจำว่าง

243
00:12:55,703 --> 00:12:55,981
โดนใช้แล้วใช้ไม่หมดนะครับ

244
00:12:55,981 --> 00:12:59,981
คราวนี้มาดูความจำขนาดคงที่ขนาดไม่คงที่นะครับ

245
00:13:07,532 --> 00:13:10,595
เมื่อกี้เป็นขนาดคงที่นะครับ

246
00:13:10,595 --> 00:13:14,595
ผู้ออกแบบระบบปฏิบัติการได้ตระหนักถึงข้อเสียของการแบ่ง

247
00:13:17,466 --> 00:13:20,881
ขนาดคงที่ไว้

248
00:13:20,881 --> 00:13:21,614
มีข้อจำกัด

249
00:13:21,614 --> 00:13:25,614
ก็เลย

250
00:13:26,113 --> 00:13:28,699
คิดค้นวิธีการที่เรียกว่า "การแบ่ง

251
00:13:28,699 --> 00:13:29,048
หน่วยความจำขนาดไม่คงที่" ขึ้น

252
00:13:29,048 --> 00:13:32,081
ดังตัวอย่างนะครับ เห็นไหมครับ

253
00:13:32,081 --> 00:13:35,169
ผู้ใช้ A

254
00:13:35,169 --> 00:13:35,666
ต้องการใช้

255
00:13:35,666 --> 00:13:39,666
10 ก็เข้าไปเลย 10K

256
00:13:45,761 --> 00:13:49,761
นะครับ

257
00:13:50,347 --> 00:13:54,347
ผู้ใช้ D ต้องการใช้ 10

258
00:13:55,531 --> 00:13:56,169
เดี๋ยวเข้าไป

259
00:13:56,169 --> 00:13:59,008
ขนาดไม่คงที่นะครับ

260
00:13:59,008 --> 00:14:02,501
ที่ว่าเพียงพอก็สามารถจัดการ

261
00:14:02,501 --> 00:14:04,898
หน่วยความจำได้เลยนะครับ

262
00:14:04,898 --> 00:14:08,898
ระบบหลายโปรแกรม แบบแบ่งหน่วยความจำแบบไม่คงที่นะครับ

263
00:14:16,118 --> 00:14:17,809
สามารถ Run

264
00:14:17,809 --> 00:14:21,084
ได้หลายโปรแกรมนะครับ ดูนะครับ

265
00:14:21,084 --> 00:14:25,084
ถึงแม้ว่าการแบ่งหน่วยความจำขนาดไม่คงที่

266
00:14:31,385 --> 00:14:32,803
นะครับ

267
00:14:32,803 --> 00:14:36,803
ก็ยังมีส่วนที่ไม่ถูกใช้งานนะครับเหมือนกันนะครับ เหมือนเดิม

268
00:14:38,926 --> 00:14:39,598

269
00:14:39,598 --> 00:14:43,176
ถ้าเป็นแบบขนาดคงที่เรียกว่า "การแตกกระจายนะครับ"

270
00:14:43,176 --> 00:14:46,820
ถ้าเกิดขึ้นในกรณีที่

271
00:14:46,820 --> 00:14:50,820
พื้นที่ที่ไม่ถูกใช้งาน ในการแบ่งหน่วยความจำขนาด

272
00:14:52,097 --> 00:14:56,097
ไม่คงที่ เราเรียกว่า "ช่องโหว่

273
00:14:56,173 --> 00:14:58,427
นะครับ" หรือ

274
00:14:58,427 --> 00:15:02,427
hole hole เกิดขึ้นได้อย่างไร

275
00:15:02,999 --> 00:15:06,999
ครับ โปรแกรม A โปรแกรม B โปรแกรม C Program

276
00:15:12,384 --> 00:15:15,221
D เห็นไหมครับ เกิดขึ้นแล้ว

277
00:15:15,221 --> 00:15:16,885
ข้างล่างสุด

278
00:15:16,885 --> 00:15:17,829
ข้างล่างช่องโหว่

279
00:15:17,829 --> 00:15:21,829
สักระยะหนึ่ง

280
00:15:22,456 --> 00:15:22,584
โปรแกรม

281
00:15:22,584 --> 00:15:24,899
โปรแกรม B คือหน่วยความจำให้ระบบ

282
00:15:24,899 --> 00:15:26,567
เห็นไหมคะ

283
00:15:26,567 --> 00:15:26,816
ช่องโหว่เกิดขึ้นแล้ว

284
00:15:26,816 --> 00:15:30,816
สักพักนึง

285
00:15:32,460 --> 00:15:32,747
โปรแกรมดี

286
00:15:32,747 --> 00:15:36,747
คืนหน่วยความจำให้ระบบเกิดขึ้นแล้ว

287
00:15:38,544 --> 00:15:42,544
เมื่อเกิด hole ขึ้น

288
00:15:45,902 --> 00:15:47,931
ก็มีวิธีการ

289
00:15:47,931 --> 00:15:51,931
เอาโปรแกรมใหม่ลงไปวางแทนนะครับ

290
00:15:53,616 --> 00:15:53,859
ซึ่งมีอยู่ 3 วิธีการนะครับ

291
00:15:53,859 --> 00:15:57,859
1. เรื่อง hole ที่พบก่อน

292
00:16:00,591 --> 00:16:04,591
และมีขนาดใหญ่พอที่จะวางโปรแกรมใหม่ลงไป

293
00:16:06,053 --> 00:16:08,898
นะครับ วิธีการที่ 2

294
00:16:08,898 --> 00:16:10,852
เลือก hole ที่เหมาะสม

295
00:16:10,852 --> 00:16:14,852
เลือก hole ที่เหมาะสมที่สุด ก็คือเหลือหน่วยความจำ

296
00:16:17,405 --> 00:16:18,406
เหลือ

297
00:16:18,406 --> 00:16:19,918
hole น้อยที่สุด

298
00:16:19,918 --> 00:16:23,436
3

299
00:16:23,436 --> 00:16:27,119
. เลือก hole ที่ใหญ่ที่สุด

300
00:16:27,119 --> 00:16:28,129
นะครับ

301
00:16:28,129 --> 00:16:28,404
ที่ใหญ่ที่สุด

302
00:16:28,404 --> 00:16:32,404
มาดูนะครับ ว่าวิธีแต่ละวิธีเป็นอย่างไรดูรูปนะครับ

303
00:16:34,012 --> 00:16:37,947
วิธีการที่ 1

304
00:16:37,947 --> 00:16:40,889
เจอก่อนพบก่อน

305
00:16:40,889 --> 00:16:44,284
แต่ต้องมีเงื่อนไขว่า

306
00:16:44,284 --> 00:16:45,010
จะต้องมีพื้นที่ของ

307
00:16:45,010 --> 00:16:49,010

308
00:16:49,898 --> 00:16:51,760
hole ใหญ่เพียงพอ

309
00:16:51,760 --> 00:16:54,400
นะครับ 13 เข้า 16

310
00:16:54,400 --> 00:16:54,843
ได้ไหมครับ

311
00:16:54,843 --> 00:16:56,000
ได้

312
00:16:56,000 --> 00:17:00,000
มาก่อนเลยพบก่อนเลย เจอก่อน

313
00:17:00,643 --> 00:17:01,125
เข้าไปวางก่อนเลย

314
00:17:01,125 --> 00:17:05,125
ครับ 2. เหมาะสมที่สุดเมื่อเข้าไปวัดเสร็จแล้ว

315
00:17:06,585 --> 00:17:06,784
โทรใหม่ที่เกิดขึ้น

316
00:17:06,784 --> 00:17:09,949
ขนาดเหลือน้อยที่สุด

317
00:17:09,949 --> 00:17:13,949
16 เหลือ 3

318
00:17:15,491 --> 00:17:15,990
ถ้าเข้า 14 เหลือ 1

319
00:17:15,990 --> 00:17:19,990
ถ้าเข้า 5 เข้าไม่ได้

320
00:17:21,105 --> 00:17:21,873
ถ้าเข้า 30 เหลือ 17

321
00:17:21,873 --> 00:17:25,208
เห็นไหมครับ

322
00:17:25,208 --> 00:17:29,168
เหมาะสมที่สุด ก็คือเ

323
00:17:29,168 --> 00:17:29,425
ลือก hole ที่ เมื่อเข้าไปแล้วทำให้เกิด hole ใหม่น้อยที่สุด

324
00:17:29,425 --> 00:17:33,089
ส่วนแบบที่ 3 นะครับ

325
00:17:33,089 --> 00:17:35,477
วิธีการที่ 3 ก็คือ

326
00:17:35,477 --> 00:17:39,270
เลือก hole ที่ใหญ่ที่สุด

327
00:17:39,270 --> 00:17:42,562
ใช่ครับ

328
00:17:42,562 --> 00:17:42,919
30 ใหญ่กว่าเพื่อน

329
00:17:42,919 --> 00:17:46,919
คราวนี้ในกรณีที่

330
00:17:52,208 --> 00:17:56,208
มี hole เกิดขึ้น พื้นที่ติดกันนะครับ ติดกัน

331
00:17:57,006 --> 00:18:01,006
ถ้า OS มีความสามารถนะครับ

332
00:18:04,824 --> 00:18:08,824
มันจะต้องมีความสามารถในการจัดรวม hole เข้าไปด้วยกันเลย

333
00:18:10,760 --> 00:18:13,727
ครับ

334
00:18:13,727 --> 00:18:17,727
นึกออกไหมครับ เมื่อมี hole อยู่ติดกัน

335
00:18:19,977 --> 00:18:20,809
ว่างติดกัน

336
00:18:20,809 --> 00:18:23,656
จับยุบรวมกันนะครับ

337
00:18:23,656 --> 00:18:27,288
อีกวิธีการหนึ่ง การอัดหน่วยความจำ

338
00:18:27,288 --> 00:18:31,288
หน่วยความจำ ก็คือถ้าเกิดมี

339
00:18:32,016 --> 00:18:35,488
hole เกิดว่าง

340
00:18:35,488 --> 00:18:35,840
ขึ้น

341
00:18:35,840 --> 00:18:39,840
ติดกันก็ได้ไม่ติดก็ได้นะครับ

342
00:18:40,436 --> 00:18:44,436
วิธีการอัดหน่วยความจำ ก็คือระบบจะหยุดการทำงาน แล้วก็เช็กดูระบบ

343
00:18:47,000 --> 00:18:51,000
แล้วก็ไปเอาหน่วยความจำว่าง ๆ อยู่ มาจัดรวมกัน เพื่อให้ได้หน่วยความจำที่ใหญ่ขึ้นนะครับ

344
00:18:54,677 --> 00:18:58,677
เราเรียกว่า "การรวบรวมขยะ" นะครับ

345
00:19:02,258 --> 00:19:04,272
เปิดโปรแกรม

346
00:19:04,272 --> 00:19:08,272
degrag เดี๋ยวพอเราเรียกไปเรียนปฏิบัติเราจะเห็นว่า

347
00:19:08,910 --> 00:19:11,338
โปรแกรม defrag

348
00:19:11,338 --> 00:19:13,141
ทำงาน

349
00:19:13,141 --> 00:19:14,413
ทำงานอย่างไร

350
00:19:14,413 --> 00:19:18,413
มาทีหลังทำไมไม่เอาแบบฝึกหัด

351
00:19:18,848 --> 00:19:20,706
เพิ่งเข้ามาเมื่อกี้น่ะ

352
00:19:20,706 --> 00:19:23,326
มาเอาแบบฝึกหัด

353
00:19:23,326 --> 00:19:27,326
แล้วทำอะไรอยู่

354
00:19:30,413 --> 00:19:34,413
นี่ดูวิธีการรวบรวมนะครับ

355
00:19:44,280 --> 00:19:45,239
อัดหน่วยความจำนะครับ

356
00:19:45,239 --> 00:19:48,810
เห็นไหมครับ นี่

357
00:19:48,810 --> 00:19:52,810
ใช้งาน 1 2 3 hole hole hole

358
00:19:54,263 --> 00:19:56,880
นะครับ

359
00:19:56,880 --> 00:20:00,099
พออัดหน่วยความจำ

360
00:20:00,099 --> 00:20:03,696
เกิดช่อ

361
00:20:03,696 --> 00:20:04,285
งว่างเกิดช่องว่างขึ้นใหญ่ขึ้น

362
00:20:04,285 --> 00:20:07,892
นี่คือวิธีการอ่านหน่วยความจำ

363
00:20:07,892 --> 00:20:11,892
คำนี้มาดูระบบหลายโปรแกรมแบบ... โปรแกรม เมื่อกี้เป็นแบบแบ่งโปรแกรม

364
00:20:19,195 --> 00:20:20,845
แบ่งหน่วยความจำนะครับ

365
00:20:20,845 --> 00:20:24,845
เข้าใจว่ามีแบบคงที่จะไม่คงที่ทีนี้มาดูกัน

366
00:20:24,971 --> 00:20:28,971
โปรแกรมแบบสลับหน่วยความจำ

367
00:20:31,452 --> 00:20:31,621
ก็คือหลักการก็คือเมื่อโปรแกรมถูกใช้งาน

368
00:20:31,621 --> 00:20:34,245
เราเรียกว่า "สลับเข้า" นะครับ

369
00:20:34,245 --> 00:20:38,245
เข้ามา เข้ามา

370
00:20:43,167 --> 00:20:47,167


