บทที่ 5 การจัดการหน่วยความจำ
นาย ธนโชติ ฟ้าคะนอง ปวส 1/1 เลขที่ 5 64301280005
บทที่ 5
การจัดการหน่วยความจำ
5.1 ความนำ
หน่วยความจำเป็นทรัพยากรที่มีความส าคัญในระบบคอมพิวเตอร์ที่จ ำเป็นต้องมีการจัดการอย่างระมัดระวัง ปัจจุบันหน่วยความจ าในเครื่องคอมพิวเตอร์มีมากขึ้นเมื่อเทียบกับเครื่องคอมพิวเตอร์รุ่นก่อนๆ ท ำให้สามารถเก็บข้อมูลหรือโปรแกรมที่มีขนาดใหญ่ขึ้นได้ และจากการที่หน่วยความจ าท าหน้าที่เก็บข้อมูลและโปรแกรมที่ท ำงานในคอมพิวเตอร์นี้เอง ท าให้ขนาดและปริมาณงานที่เครื่องคอมพิวเตอร์แต่ละเครื่องท างานได้จึงมีขนาดที่แตกต่างกันออกไป เนื่องจากการที่โปรแกรมหรือข้อมูลจะถูกน าไปเก็บไว้ ในต าแหน่งใดของหน่วยความจ า หรือการเรียกข้อมูลจากหน่วยความจ าต าแหน่งต่างๆ มาใน้้งานต้องอยู่ภายใต้การควบคุมดูแล ของระบบปิิบัตการเสมอึึ่งส่วนของระบบปิิบัติการที่ทำหน้าที่ดังกล่าวเรียกว่า ผู้บริหารหน่วยความจำ (Memory Manager)
5.2 ความหมายของหน่วยความจำ
หน่วยความจำ (Memory Unit) หมายถึง หน่วยหรืออุปกรณ์ที่ใช้ในการจดจ าหรือจัดเก็บข้อมูลที่ใช้ในระบบคอมพิวเตอร์ ซึ่งหากคอมพิวเตอร์ปราศจากหน่วยความจำแล้ว คอมพิวเตอร์จะไม่สามารถท างานได้เลย หน่วยความจำจึงถือเป็นหน่วยส าคัญหน่วยหนึ่งในระบบคอมพิวเตอร์ หน่วยความจำของคอมพิวเตอร์จะมีขนาดแตกต่างกัน
5.3 ประเภทของหน่วยความจำ
หน่วยความจำในระบบคอมพิวเตอร์แบ่งออกเป็น 2 ประเภทหลัก คือ
5.3.1 หน่วยความจำหลัก (Main Memory)
หน่วยความจำหลัก คือ หน่วยความจำที่ทำหน้าที่ร่วมกับ CPU ในด้านต่างๆ โดยจะเป็นที่เก็บข้อมูลสำคัญๆ สำหรับ CPU หากจะใช้ระบบคอมพิวเตอร์ท างานใดก็ตามภายในหน่วยความจ าหลักของเครื่องคอมพิวเตอร์จะต้องมีข้อมูล
5.3.1.1 หน่วยความจำถาวร (Nonvolatile Memory)
หน่วยความจำถาวรนี้ เป็นหน่วยความจำที่ทำหน้าที่ในการเก็บโปรแกรม
ควบคุมระบบหรือข่าวสารที่มีการใช้งานบ่อยๆ ซึ่งเมื่อโปรแกรมหรือข้อมูลเหล่านั้นถูกเขียนลงบน
หน่วยความจำถาวรแล้วจะสามารถท าการอ่านได้เพียงอย่างเดียว
1. PROM (Programmable Read-Only Memory) 2. EPROM (Erasable Programmable Read-Only Memory) 3. EAROM (Electrically Alterable Read-Only Memory)
5.3.1.2 หน่วยความจำชั่วคราว (Volatile Memory)
เป็นหน่วยความจำที่สามารถเข้าไปเขียน และอ่านได้ นอกจากนี้แล้วยังสามารถ
เลื่อนตำแหน่งต่างๆ ของการเขียน และอ่านข้อมูลในหน่วยความจ านี้โดยจะใช้เวลาเท่ากันในการอ่านหรือการเขียนข้อมูลลงในหน่วยความจำตำแหน่งที่แตกต่างกัน
เลื่อนตำแหน่งต่างๆ ของการเขียน และอ่านข้อมูลในหน่วยความจ านี้โดยจะใช้เวลาเท่ากันในการอ่านหรือการเขียนข้อมูลลงในหน่วยความจำตำแหน่งที่แตกต่างกัน
5.3.2 หน่วยความจำสำรอง (Secondary Memory)
หน่วยความจำสำรองทำหน้าที่เก็บชุดคำสั่งหรือข้อมูลที่ไม่สามารถเก็บได้หมด ในหน่วยความจำหลัก หรือใช้หน่วยความจำสำรองในการเก็บข้อมูลไว้เพื่อการเรียกใช้งาน ในภายหลังโดยไม่ต้องเสียเวลาป้ อนข้อมูลหรือโปรแกรมนั้นใหม่ทุกครั้งที่มีการใช้งาน ซึ่งเปรียบเสมือนกับสมุดบันทึกส าหรับเก็บข้อมูลข่าวสารหรือโปรแกรมเอาไว้ใช้งานในโอกาสต่อไป ข้อดีของหน่วยความจ าประเภทนี้ คือ ข้อมูลที่เก็บไว้ไม่สูญหายเมื่อปิดเครื่องและคงอยู่ตลอดไปตราบใดที่ไม่ลบข้อมูลทิ้ง หน่วยความจ าหลักที่กล่าวมาแล้วนั้นแม้จะมีข้อดีในแง่ที่เป็ น วงจรอิเล็กทรอนิกส์ ซึ่งท าให้การอ่านเขียนข้อมูลเป็นไปได้ด้วยความรวดเร็วก็ตาม แต่บางครั้งใน
การประมวลผลข้อมูลเรามีความจ าเป็นจะต้องใช้ข้อมูลจ านวนมากหรือใช้โปรแกรมที่มีความยาวมากๆ จนไม่สามารถบรรจุฟในหน่วยความจ าหลักได้เราจึงจ าเป็นต้องใช้หน่วยความจ าส ารองเข้าช่วยซึ่งเหมาะส าหรับเก็บชุดค าสั่งและข้อมูลที่มีจ านวนมากหรือใช้บ่อยครั้ง สื่อที่ใช้เก็บข้อมูล ได้แก่ เทปแม่เหล็ก จานแม่เหล็ก การน าข้อมูลเข้าหรือออกจากสื่อเหล่านี้ จะต้องใช้อุปกรณ์ที่เหมาะสม กับสื่อนั้นๆ เช่น เครื่องขับจานแม่เหล็กใช้จะเพื่อการอ่านหรือบันทึกข้อมูลลงในจานแม่เหล็ก หรือเครื่องขับเทปแม่เหล็กจะใช้เพื่อการอ่านหรือบันทึกข้อมูลลงบนเทปแม่เหล็ก เป็นต้น
หน่วยความจำสำรองทำหน้าที่เก็บชุดคำสั่งหรือข้อมูลที่ไม่สามารถเก็บได้หมด ในหน่วยความจำหลัก หรือใช้หน่วยความจำสำรองในการเก็บข้อมูลไว้เพื่อการเรียกใช้งาน ในภายหลังโดยไม่ต้องเสียเวลาป้ อนข้อมูลหรือโปรแกรมนั้นใหม่ทุกครั้งที่มีการใช้งาน ซึ่งเปรียบเสมือนกับสมุดบันทึกส าหรับเก็บข้อมูลข่าวสารหรือโปรแกรมเอาไว้ใช้งานในโอกาสต่อไป ข้อดีของหน่วยความจ าประเภทนี้ คือ ข้อมูลที่เก็บไว้ไม่สูญหายเมื่อปิดเครื่องและคงอยู่ตลอดไปตราบใดที่ไม่ลบข้อมูลทิ้ง หน่วยความจ าหลักที่กล่าวมาแล้วนั้นแม้จะมีข้อดีในแง่ที่เป็ น วงจรอิเล็กทรอนิกส์ ซึ่งท าให้การอ่านเขียนข้อมูลเป็นไปได้ด้วยความรวดเร็วก็ตาม แต่บางครั้งใน
การประมวลผลข้อมูลเรามีความจ าเป็นจะต้องใช้ข้อมูลจ านวนมากหรือใช้โปรแกรมที่มีความยาวมากๆ จนไม่สามารถบรรจุฟในหน่วยความจ าหลักได้เราจึงจ าเป็นต้องใช้หน่วยความจ าส ารองเข้าช่วยซึ่งเหมาะส าหรับเก็บชุดค าสั่งและข้อมูลที่มีจ านวนมากหรือใช้บ่อยครั้ง สื่อที่ใช้เก็บข้อมูล ได้แก่ เทปแม่เหล็ก จานแม่เหล็ก การน าข้อมูลเข้าหรือออกจากสื่อเหล่านี้ จะต้องใช้อุปกรณ์ที่เหมาะสม กับสื่อนั้นๆ เช่น เครื่องขับจานแม่เหล็กใช้จะเพื่อการอ่านหรือบันทึกข้อมูลลงในจานแม่เหล็ก หรือเครื่องขับเทปแม่เหล็กจะใช้เพื่อการอ่านหรือบันทึกข้อมูลลงบนเทปแม่เหล็ก เป็นต้น
5.4 เทคนิคการจัดการหน่วยความจำหลัก
ในหน่วยความจำหลัก จะประกอบไปด้วยที่เก็บข้อมูลย่อยที่มีขนาดเป็นไบต์ (Byte) ซึ่งโดยแต่ละไบต์ จะมีแอดเดรส (Address) บอกตำแหน่งของข้อมูลว่าอยู่ ณ ตำแหน่งใดของหน่วยความจำ แอดเดรส หรือ ตำแหน่งของหน่วยความจ า แบ่งออกเป็น 2 แบบ 1. ตำแหน่งทางกายภาพ (Physical Address) คือ ตำแหน่งจริงของอุปกรณ์หน่วยความจ า 2. ตำแหน่งทางตรรกะ (Logical Address) คือ ต าแหน่งที่ถูกสร้างโดยซีพียู (พิรพร หมุนสนิท และคนอื่น ๆ, 2553)
ในหน่วยความจำหลัก จะประกอบไปด้วยที่เก็บข้อมูลย่อยที่มีขนาดเป็นไบต์ (Byte) ซึ่งโดยแต่ละไบต์ จะมีแอดเดรส (Address) บอกตำแหน่งของข้อมูลว่าอยู่ ณ ตำแหน่งใดของหน่วยความจำ แอดเดรส หรือ ตำแหน่งของหน่วยความจ า แบ่งออกเป็น 2 แบบ 1. ตำแหน่งทางกายภาพ (Physical Address) คือ ตำแหน่งจริงของอุปกรณ์หน่วยความจ า 2. ตำแหน่งทางตรรกะ (Logical Address) คือ ต าแหน่งที่ถูกสร้างโดยซีพียู (พิรพร หมุนสนิท และคนอื่น ๆ, 2553)
วิธีต่างๆ ที่ใช้ในการจัดการหน่วยความจำนั้น โดยทั่วไปแล้วต้องมีความสามารถพื้นฐานหรือมีกระบวนการพื้นฐาน 5 กระบวนการดังนี้ (นรีรัตน์ นิยมไทย, 2549) 1. การย้ายตำแหน่ง (Relocation)
2. การป้องกันพื้นที่ (Protection)
3. การใช้พื้นที่ร่วมกัน (Sharing)
4. การจัดการแบ่งทางตรรกะ (Logical Organization)
5. การจัดการแบ่งทางกายภาพ (Physical Organization)
1. การย้ายตำแหน่ง (Relocation)
ในการท างานหลาย ๆ โปรแกรมพร้อมกัน หรือระบบมัลติโปรแกรมมิ่ง (Multiprogramming system) จะต้องมีการใช้ทรัพยากรต่างๆ ร่วมกัน
2. การป้องกันพื้นที่ (Protection)
3. การใช้พื้นที่ร่วมกัน (Sharing)
4. การจัดการแบ่งทางตรรกะ (Logical Organization)
5. การจัดการแบ่งทางกายภาพ (Physical Organization)
1. การย้ายตำแหน่ง (Relocation)
ในการท างานหลาย ๆ โปรแกรมพร้อมกัน หรือระบบมัลติโปรแกรมมิ่ง (Multiprogramming system) จะต้องมีการใช้ทรัพยากรต่างๆ ร่วมกัน
2. การป้องกันพื้นที่ (Protection)
ในการทำงานที่มีหลายงานพร้อมกัน การจะนำโปรเซสเข้าไปใน หน่วยความจำ จำเป็นต้องมีการตรวจสอบว่าพื้นที่ ที่จะน างานเข้าไปนั้นว่างหรือไม่ ซึ่งก็เป็นการล าบากที่จะหาว่างานที่มีอยู่ก่อนหน้านั้นมีขนาด หรือจะสิ้นสุดที่ใด
ในการทำงานที่มีหลายงานพร้อมกัน การจะนำโปรเซสเข้าไปใน หน่วยความจำ จำเป็นต้องมีการตรวจสอบว่าพื้นที่ ที่จะน างานเข้าไปนั้นว่างหรือไม่ ซึ่งก็เป็นการล าบากที่จะหาว่างานที่มีอยู่ก่อนหน้านั้นมีขนาด หรือจะสิ้นสุดที่ใด
3. การใช้พื้นที่ร่วมกัน (Sharing)
ถึงแม้จะมีการป้องกันพื้นที่ แต่ก็ยังมีงานบางอย่างที่อาจจะอนุญาตให้โปรเซสอื่นเข้ามาเรียกใช้ข้อมูลได
ถึงแม้จะมีการป้องกันพื้นที่ แต่ก็ยังมีงานบางอย่างที่อาจจะอนุญาตให้โปรเซสอื่นเข้ามาเรียกใช้ข้อมูลได
4. การจัดแบ่งทางตรรกะ (Logical Organization)
เป็นการแบ่งโปรแกรมออกเป็นโมดูลย่อยๆ ซึ่งหากโมดูลย่อยใดที่ไม่ถูกเรียกใช้ก็
จะไม่ถูกบรรจุลงในหน่วยความจำ เมื่อต้องการเรียกใช้งานจึงค่อยตรวจสอบว่ามีโมดูลย่อยนั้นหรือ
ยัง ถ้ายังไม่มีจึงค่อยดึงมาบรรจุลงในหน่วยความจำ
เป็นการแบ่งโปรแกรมออกเป็นโมดูลย่อยๆ ซึ่งหากโมดูลย่อยใดที่ไม่ถูกเรียกใช้ก็
จะไม่ถูกบรรจุลงในหน่วยความจำ เมื่อต้องการเรียกใช้งานจึงค่อยตรวจสอบว่ามีโมดูลย่อยนั้นหรือ
ยัง ถ้ายังไม่มีจึงค่อยดึงมาบรรจุลงในหน่วยความจำ
5. การจัดแบ่งทางกายภาพ (Physical Organization)
หน่วยความจำของระบบคอมพิวเตอร์มี 2 ระดับ คือหน่วยความจำหลัก และหน่วยความจำสำรอง หน่วยความจำหลักได้แก่แรม ซึ่งมีขนาดไม่ใหญ่ ราคาแพง เก็บข้อมูลได้
หน่วยความจำของระบบคอมพิวเตอร์มี 2 ระดับ คือหน่วยความจำหลัก และหน่วยความจำสำรอง หน่วยความจำหลักได้แก่แรม ซึ่งมีขนาดไม่ใหญ่ ราคาแพง เก็บข้อมูลได้
5.4.1 การสับเปลี่ยน (Swapping)
ทุกโปรเซสเมื่ออยู่ในสถานะทำงาน จำเป็นต้องอยู่ในหน่วยความจำเสมอแต่อาจจะถูกโยกย้ายไปเก็บไว้ชั่วคราวที่ หน่วยเก็บโปรแกรมชั่วคราว (Backing Store) ในระบบการจัดตารางงานให้กับซีพียู
5.4.2 การจัดสรรพื้นที่ที่อยู่ติดกัน (Contiguous Allocation)
ทุกโปรเซสเมื่ออยู่ในสถานะท างานก็จะเข้ามาใช้เนื้อที่ของหน่วยความจ าที่ยังว่างอยู่ หากโปรเซสใดมีขนาดใหญ่กว่าพื้นที่ว่างของหน่วยความจำ
ทุกโปรเซสเมื่ออยู่ในสถานะทำงาน จำเป็นต้องอยู่ในหน่วยความจำเสมอแต่อาจจะถูกโยกย้ายไปเก็บไว้ชั่วคราวที่ หน่วยเก็บโปรแกรมชั่วคราว (Backing Store) ในระบบการจัดตารางงานให้กับซีพียู
5.4.2 การจัดสรรพื้นที่ที่อยู่ติดกัน (Contiguous Allocation)
ทุกโปรเซสเมื่ออยู่ในสถานะท างานก็จะเข้ามาใช้เนื้อที่ของหน่วยความจ าที่ยังว่างอยู่ หากโปรเซสใดมีขนาดใหญ่กว่าพื้นที่ว่างของหน่วยความจำ
5.4.3 การจัดการแบบบิตแมพ (Memory Management with Bitmap)
การจัดการแบบนี้จะทำการแบ่งหน่วยความจ าออกเป็นหน่วย หรือยูนิต(Unit) ซึ่งแต่ละยูนิตอาจจะมีขนาดใหญ่ หรือเล็กก็ได้ ในแต่ละยูนิตนั้นจะแทนค่า 1 บิตเสมอ
การจัดการแบบนี้จะทำการแบ่งหน่วยความจ าออกเป็นหน่วย หรือยูนิต(Unit) ซึ่งแต่ละยูนิตอาจจะมีขนาดใหญ่ หรือเล็กก็ได้ ในแต่ละยูนิตนั้นจะแทนค่า 1 บิตเสมอ
5.4.4 การจัดการแบบลิงค์ลิสต์ (Memory Management with Link List)
การจัดการแบบลิงค์ลิสต์จะมีการระบุการใช้พื้นที่หน่วยความจ าโดยระบุว่ามีโปรเซส
เริ่มต้นอยู่ที่แอดเดรสใด และมีความยาวของโปรเซสเท่าใด โดยมีรูปแบบการจัดเก็บข้อมูลดังนี้
1. ในส่วนแรก หากเป็นพื้นที่ว่างจะแสดงด้วยตัวอักษร H (Hold) ถ้าเป็นช่วงที่มีโปรเซสจะขึ้นต้นด้วย P (Process)
การจัดการแบบลิงค์ลิสต์จะมีการระบุการใช้พื้นที่หน่วยความจ าโดยระบุว่ามีโปรเซส
เริ่มต้นอยู่ที่แอดเดรสใด และมีความยาวของโปรเซสเท่าใด โดยมีรูปแบบการจัดเก็บข้อมูลดังนี้
1. ในส่วนแรก หากเป็นพื้นที่ว่างจะแสดงด้วยตัวอักษร H (Hold) ถ้าเป็นช่วงที่มีโปรเซสจะขึ้นต้นด้วย P (Process)
2. ในส่วนที่ 2 จะบอกแอดเดรสที่ส่วนนั้นเริ่มต้นของพื้นที่ว่าง หรือโปรเซส
3. ในส่วนที่ 3 เป็นความยาวของพื้นที่
3. ในส่วนที่ 3 เป็นความยาวของพื้นที่
4. ในส่วนที่ 4 เป็นส่วนที่ชี้ไปยังข้อมูลของพื้นที่ส่วนต่อไป
5.4.5 การแบ่งหน้า (Paging)
การจัดการหน่วยความจำแบบการแบ่งหน้า คือการแบ่งเนื้อที่ของหน่วยความจำออกเป็นส่วนเล็กๆ โดยมีขนาดเท่าๆ กัน ซึ่งเรียกว่า เฟรม (Frames) หรือ เพจเฟรม (Page Frames) โดยการจัดการหน่วยความจ าแบบนี้จะมีการแบ่งโปรเซส ออกเป็นงานเล็กๆ เรียกว่า หน้า (Page) โดยทุกๆหน้าจะมีขนาดเท่ากันหมด และมีเงื่อนไขคือ
1. ขนาดของ 1 หน้า จะต้องเท่ากับขนาดของ 1 เฟรม 2. ใน 1 เฟรม จะมีการนำเอาแค่ 1 หน้า มาบรรจุได้เท่านั้น เช่น หน่วยความ
การจัดการหน่วยความจำแบบการแบ่งหน้า คือการแบ่งเนื้อที่ของหน่วยความจำออกเป็นส่วนเล็กๆ โดยมีขนาดเท่าๆ กัน ซึ่งเรียกว่า เฟรม (Frames) หรือ เพจเฟรม (Page Frames) โดยการจัดการหน่วยความจ าแบบนี้จะมีการแบ่งโปรเซส ออกเป็นงานเล็กๆ เรียกว่า หน้า (Page) โดยทุกๆหน้าจะมีขนาดเท่ากันหมด และมีเงื่อนไขคือ
1. ขนาดของ 1 หน้า จะต้องเท่ากับขนาดของ 1 เฟรม 2. ใน 1 เฟรม จะมีการนำเอาแค่ 1 หน้า มาบรรจุได้เท่านั้น เช่น หน่วยความ
จำหลักขนาด 1 MB และแบ่งออกเป็น 4 เฟรม ขนาดของเฟรมคือ 256 KB หน้าในดิสก์เท่ากับ 256 KB เหมือนกัน
5.4.6 การแบ่งเป็นตอน (Segmentation)
เป็นวิธีการจัดการหน่วยความจำหลักที่มีลักษณะการทำงานคล้ายกับการจัดการหน่วยความจำแบบการแบ่งหน้า แต่วิธีจัดการหน่วยความจำแบบการแบ่งเป็นตอนนั้นจะมีการแบ่ง โปรเซส ออกเป็นงานย่อยๆ ที่ไม่จำเป็นต้องมีขนาดเท่ากันทุกงาน การแปลง Logical Address ให้เป็น Physical Address นั้นจะต้องใช้ข้อมูล 2 ส่วนคือ เลขที่ของเซ็กเมนต์ (Segment) และ ระยะเริ่มต้นจากเซ็กเมนต์นั้น (Offset)
เป็นวิธีการจัดการหน่วยความจำหลักที่มีลักษณะการทำงานคล้ายกับการจัดการหน่วยความจำแบบการแบ่งหน้า แต่วิธีจัดการหน่วยความจำแบบการแบ่งเป็นตอนนั้นจะมีการแบ่ง โปรเซส ออกเป็นงานย่อยๆ ที่ไม่จำเป็นต้องมีขนาดเท่ากันทุกงาน การแปลง Logical Address ให้เป็น Physical Address นั้นจะต้องใช้ข้อมูล 2 ส่วนคือ เลขที่ของเซ็กเมนต์ (Segment) และ ระยะเริ่มต้นจากเซ็กเมนต์นั้น (Offset)
5.4.7 หน่วยความจำเสมือน (Virtual Memory)
เป็นการนำพื้นที่ว่างของฮาร์ดิสก์ มาทำเป็นหน่วยความจำหลัก โดยวิธีการนี้โปรเซส จะสามารถทำงานได้ถึงแม้ว่าโปรเซส นั้นๆ จะไม่ได้อยู่ในหน่วยความจำหลัก ทั้งหมดก็ตาม โดยระบบปฏิบัติการจะทำหน้าที่เก็บบางส่วนของโปรเซส
เป็นการนำพื้นที่ว่างของฮาร์ดิสก์ มาทำเป็นหน่วยความจำหลัก โดยวิธีการนี้โปรเซส จะสามารถทำงานได้ถึงแม้ว่าโปรเซส นั้นๆ จะไม่ได้อยู่ในหน่วยความจำหลัก ทั้งหมดก็ตาม โดยระบบปฏิบัติการจะทำหน้าที่เก็บบางส่วนของโปรเซส
5.4.8 หน่วยความจำแคช (Cache Memory)
แคช คือหน่วยความจำประเภทหนึ่งที่มีความเร็วในการทำงานสูงมาก การเข้าถึงข้อมูลใน แคช สามารถทำได้รวดเร็วกว่าการเข้าถึงข้อมูลในฮาร์ดิสก์
5.4.9 หน่วยความจำบัพเฟอร์ (Buffer) แคช คือหน่วยความจำประเภทหนึ่งที่มีความเร็วในการทำงานสูงมาก การเข้าถึงข้อมูลใน แคช สามารถทำได้รวดเร็วกว่าการเข้าถึงข้อมูลในฮาร์ดิสก์
บัพเฟอร์ คือหน่วยความจำประเภทหนึ่งที่ใช้เก็บพักข้อมูลในการถ่ายโอนข้อมูลระหว่างอุปกรณ์ 2 ชนิด โดยการใช้งานบัพเฟอร์มีเหตุผลมาจาก
ความคิดเห็น
แสดงความคิดเห็น