จริงๆแล้วผมไม่ค่อยจะได้เขียนเรื่องราวที่มีสาระซักเท่าไหร่ เพราะส่วนใหญ่ผมชอบที่จะเขียนอะไรที่มันไร้สาระซะมากกว่าแหละครับ (ถึงปกติจะดองลูกเดียวก็เถอะ) แต่วันนี้หลังจากที่เห็นความเข้าใจผิดที่เกิดขึ้น ก็เลยอาจจะเขียนเรื่องที่ดูเป็นวิชาการหน่อย แต่ไม่วิชาการมากครับ
เรื่องก็มีอยู่ว่า สืบเนื่องมาจากการบ้านสุดท้ายของวิชา CS223 Computer Organization and Architecture ที่น้องปี 2 เรียนกันเพิ่งจบไป (ชักเริ่มรู้สึกว่าตัวเองแก่) ซึ่งมีการบ้านอยู่ข้อหนึ่งซึ่งให้หา อัตราการส่งข้อมูล หรือ Data Transfer Rate โดยสิ่งที่โจทย์กำหนดมาคือ มีฮาร์ดดิสก์แม่เหล็กหมุนด้วยความเร็ว 7200 รอบต่อนาที, seek time เฉลี่ยคือ 7 ms, 256 sectors/track, 512 bytes/sector, 2048 tracks/หน้า, ดิสก์มีทั้งหมด 8 จานจานละ 2 หน้า ทั้งหมดนี้คือที่โจทย์ให้มา แต่ผมก็ต้องตกใจนิดหน่อยเมื่อเห็นวิธีทำของน้องๆ คือ
Data Transfer Rate = ความจุของดิสก์ / Access Time
"เอ้ย!! เป็นไปได้ยังไง" ผมยังสงสัยอยู่เล็กน้อยว่าเข้าใจกันไปถึงไหนล่ะเนี่ย อัตราการรับส่งข้อมูล มันไปเกี่ยวกับความจุได้ยังไง แถมยังไปเกี่ยวกับ Access Time ซะอีก = =" (ไม่ได้มีเจตนาจะประจานจริงๆนะครับ แต่อยากยกตัวอย่างให้เห็นกัน) ก็ด้วยความตะลึงในความเข้าใจผิดอันนี้แหละครับ เลยอยากจะเขียนถึงวิธีการหาคำตอบของโจทย์ข้อนี้ โดยจะเล่าถึงความหมายของแต่ละคำ แล้วก็วิธีการคิด + การทำงานนิดหน่อยน่ะครับ ก็อยากจะให้ทุกคนเข้าใจจริงๆมากกว่า (แม้ว่า space จะไม่ค่อยมีคนอ่าน
)
Data Transfer Rate คือ อัตราการรับส่งข้อมูล ต่อ หนึ่งหน่วยเวลา พูดง่ายๆ(แล้วมั้ง) ก็คือปริมาณของข้อมูลที่รับ หรือส่งได้ในเวลาหนึ่ง ยกตัวอย่างง่ายๆที่คุ้นเคยกันดี ก็คือความเร็วของ Internet ที่ใช้กันอยู่ทุกวันนี้แหละครับ ว่าทำไมเน็ตแต่ละที่ถึงได้มีความเร็วแตกต่างกัน บางทีเล่นแล้วก็เร็ว บางที่เล่นแล้วก็ช้า ก็เพราะเข้าอัตราการรับส่งข้อมูลนี่แหละครับ ดังที่ได้เห็นใน package ของเน็ตต่างที่บอกว่ามีความเร็ว 1M บ้าง 2M บ้าง ซึ่ง M ในที่นี้มันก็คือ Mbps หรือ Mega bit per second แปลไทยก็ กี่ล้านบิตต่อวินาทีนั่นเอง เพราะฉะนั้นอัตรานี้ไม่ขึ้นกับความจุครับ ซึ่งยิ่งไฟล์ใหญ่มากก็ยิ่งใช้เวลาในการส่งเพิ่มขึ้นไป
Access Time คือเวลาในการเข้าถึงข้อมูลบิตแรกที่ต้องการ ในกรณีของดิสก์แม่เหล็กนั้นก็คือ เวลาตั้งแต่ที่ออกคำสั่งเพื่อนำข้อมูลกลุ่มหนึ่งมา จนถึงเวลาที่หัวอ่านไปถึง ข้อมูลบิตแรกของข้อมูลทั้งหมดครับ ก็แบ่งออกได้เป็น 2 ส่วนคือ Seek Time แล้วก็ Rotational Latency หรือเขียนในรูปแบบของสมการก็คือ
Access Time = Seek Time + Rotational Latency
โดยที่ Seek Time คือเวลาที่เลื่อนหัวอ่านไปยัง track ที่ต้องการ และ Rotational Latency คือเวลาที่ข้อมูลบิตแรกของ sector ที่ต้องการมาอ่านใต้หัวอ่านนั่นเอง
ดังนั้นการหา Data Transfer Rate ของดิสก์แม่เหล็กนั้น ไม่เกี่ยวกับ Access Time ครับ เพราะ Access Time เป็นตัวบอกว่าโดยเฉลี่ยแล้วเราเข้าถึงข้อมูลที่ต้องการด้วยเวลาเท่าไหร่ แต่ Data Transfer Rate จะบอกถึงว่าเราสามารถรับ หรือส่งข้อมูลด้วยความเร็วเท่าไหร่ครับ ซึ่งปัจจัยที่เป็นตัวกำหนดค่าของ Data Tranfer Rate ก็คือความเร็วในการหมุนของดิสก์นี่แหละครับ ยิ่งหมุนได้เร็วก็ยิ่งสามารถอ่านข้อมูลได้มา นอกจากนี้ตัวกำหนดอีกตัวก็คือ ความจุข้อมูลต่อ 1 track ครับ ยิ่งจุข้อมูลได้มาก ก็จะยิ่งมี Data Tranfer Rate สูง เพราะฉะนั้นการหาค่าของ Data Transfer Rate ก็ทำได้จาก นำความเร็วของ ดิสก์คูณกับความจุข้อมูลต่อ 1 track นั่นเอง หรือเขียนเป็นสมการว่า
Data Transfer Rate = ความเร็วในการหมุนของดิสก์ x ขนาดข้อมูลต่อ 1 track
แต่อาจจะต้องดูหน่วยซักนิดนึงคือ ความเร็วรอบของดิสก์ที่ปกติเราเห้นหรือใช้กันจะมีหน่วยเป็น rpm (round per minute) หรือรอบต่อวินาทีนั่นเอง (ถ้าไม่เคยเห็นก็ลองแงะเคสเอาฮาร์ดดิสก์ออกมาดูนะครับ ส่วนใหญ่ที่ใช้กันในปัจจุบันก็ 7200 rpm ครับ) แต่ว่าถ้าโจทย์ถามเป็นต่อวินาทีก็แค่เอาไปหารด้วย 60
ปล.ถ้าอ่านแล้วงงก็แปลว่าผมเขียนไม่ดีเองนะครับ อย่าตกใจไป
ปล2.ถ้ามีข้อผิดพลาดประการใด ก็ขออภัยมา ณ ที่นี้ด้วยนะครับ แล้วก็ถามผิดตรงไหนก็ comment บอกไว้เลยครับ