บทที่ 1
องค์ประกอบของระบบคอมพิวเตอร์และระบบปฏิบัติการ
<h1 style="margin: 5pt 0cm">1.1 ระบบคอมพิวเตอร์พื้นฐาน</h1><h1 style="margin: 5pt 0cm">วัตถุประสงค์ของระบบปฏิบัติการคือ</h1><p style="margin: 0cm 0cm 0pt 36pt; text-indent: -18pt" class="MsoNormal">1. เตรียมสิ่งแวดล้อมเพื่อให้ผู้ใช้สามารถ execute โปรแกรมได้</p><p style="margin: 0cm 0cm 0pt 18pt" class="MsoNormal">2. ทำให้ระบบคอมพิวเตอร์ใช้ง่ายขึ้น</p><p style="margin: 0cm 0cm 0pt 36pt; text-indent: -18pt; tab-stops: list 36.0pt" class="MsoNormal">3. ใช้ฮาร์ดแวร์ให้เกิดประสิทธิภาพอย่างสูงสุด</p> ระบบปฏิบัติการคืออะไรระบบคอมพิวเตอร์แบ่งออกเป็น 4 ส่วน <p style="margin: 0cm 0cm 0pt 36pt; text-indent: -18pt; text-align: justify" class="MsoNormal">1. ฮาร์ดแวร์ สนับสนุนปัจจัยในการคำนวณ เช่น CPU , หน่วยความจำ , อุปกรณ์รับส่งข้อมูล</p><p style="margin: 0cm 0cm 0pt 36pt; text-indent: -18pt; text-align: justify" class="MsoNormal">2. ระบบปฏิบัติการ ควบคุมและบริหารการใช้ปัจจัยระหว่างโปรแกรม ต่าง ๆ สำหรับผู้ใช้ เช่น Dos , Unix , Windows 2000 , Windows NT ฯลฯ</p><p style="margin: 0cm 0cm 0pt 36pt; text-indent: -18pt; text-align: justify" class="MsoNormal">3. โปรแกรมประยุกต์ กำหนดทิศทางในการใช้ปัจจัยสำหรับการแก้ปัญหาต่าง ๆ ของผู้ใช้ เช่น compilers , database systems , video games , business programs</p><p style="margin: 0cm 0cm 0pt 36pt; text-indent: -18pt; text-align: justify" class="MsoNormal">4. ผู้ใช้ เช่น บุคลากร (people) , เครื่องจักร (machines) , คอมพิวเตอร์เครื่องอื่น ๆ (other computers)</p> <table border="0" cellspacing="0" cellpadding="0" width="100%"><tbody><tr><td style="background-color: transparent; border: #d4d0c8"><div class="shape" style="padding-right: 7.2pt; padding-left: 7.2pt; padding-bottom: 3.6pt; padding-top: 3.6pt"><p style="margin: 0cm 0cm 0pt" class="MsoNormal"></p></div></td></tr></tbody></table>
รูปที่ 1.1 ส่วนประกอบของระบบคอมพิวเตอร์ นิยามของระบบปฏิบัติการ <p style="margin: 0cm 0cm 0pt 36pt; text-indent: -18pt" class="MsoNormal">1. Resource allocator – บริหารการจัดสรรทรัพยากร เช่น การจัดการ Harddisk , memory , printer ให้เกิดประโยชน์ได้อย่างเต็มที่</p><p style="margin: 0cm 0cm 0pt 36pt; text-indent: -18pt" class="MsoNormal">2. Control program – ควบคุมการ execute โปรแกรมของผู้ใช้ และการทำงานของอุปกรณ์รับส่งข้อมูล</p><p style="margin: 0cm 0cm 0pt" class="MsoNormal"> 3. Kernel (แก่นแท้) – โปรแกรมที่ทำงานอยู่ตลอดเวลาบนคอมพิวเตอร์</p> <p style="margin: 0cm 0cm 0pt; text-indent: 1cm" class="MsoNormal">โดยทั่วไปแล้วความหมายของระบบปฏิบัติการ คือกลุ่มโปรแกรมซึ่งได้รับการจัดระเบียบให้เป็นส่วนเชื่อมโยงระหว่างเครื่องและผู้ใช้เครื่อง โดยจะเอื้ออำนวยการพัฒนาและการใช้โปรแกรมต่างๆ รวมถึงการจัดสรรทรัพยากร (resource) ต่างๆ ให้มีประสิทธิผลที่ดี</p><p style="margin: 0cm 0cm 0pt" class="MsoNormal">หากจะกล่าวให้เฉพาะเจาะจงกว่านี้ หน้าที่ของระบบปฏิบัติการ สามารถแบ่งได้เป็นสองหน้าที่ใหญ่ๆ ด้วยกันคือ</p><p style="text-justify: inter-cluster; margin: 0cm 0cm 0pt; text-indent: 1cm; text-align: justify" class="MsoNormal">1. ควบคุมการทำงานของโปรแกรมและอุปกรณ์ต่างๆ โดยเฉพาะอุปกรณ์รับข้อมูลและแสดงผล (input/output device) ความหมายนี้รวมถึงการเอื้ออำนวยให้ผู้ใช้สามารถใช้อุปกรณ์ต่างๆ อย่างสะดวก หน้าที่นี้เป็นหลักสำคัญ ซึ่งจะขาดเสียมิได้ในระบบปฏิบัติการทุกรูปแบบ ตั้งแค่เครื่องเล็กไปจนถึงเครื่องใหญ่ สำหรับในเครื่องเล็ก (microcomputer) ระบบปฏิบัติการจะเป็นแบบง่ายๆ และทำหน้าที่ควบคุมในลักษณะนี้แต่เพียงอย่างเดียว จึงมักเรียกกันว่าเป็น โปรแกรมควยคุม (Control program หรือ CP) จุดประสงค์ของหน้าที่นี้ คือการให้ความสะดวกแก่ผู้ใช้เครื่อง</p><p style="text-justify: inter-cluster; margin: 0cm 0cm 0pt; text-align: justify" class="MsoNormal">2. จัดสรรทรัพยากรที่ใช้ร่วมกัน (shared resources) ความหมายของหน้าที่นี้จะเห็นได้ชัดในเครื่องระดับใหญ่ (mainframe) ซึ่งจะมีอุปกรณ์ต่างๆ จำพวกหน่วยประมวลผลกลาง หน่วยความจำ ฯลฯ ซึ่งมีสมรรถนะหรือขนาดใหญ่ เกินความจำเป็นของงานแต่ละงาน จึงมีการใช้ทรัพยากรเหล่านี้ร่วมกัน ในลักษณะของระบบมัลติโปรแกรมมิ่ง (multiprogramming) หน้าที่ของระบบปฏิบัติการ จึงต้องครอบคลุมถึงการจัดสรรทรัพยากรเหล่านี้ เพื่อขจัดความชัดแย้ง โดยคำนึงถึงความยุติธรรมต่อผู้ใช้แต่ละคน และประสิทธิผลของเครื่องเป็นหลักสำคัญ</p>1.1.1 บอกระบบคอมพิวเตอร์ยุคเริ่มต้น <h6 style="text-justify: inter-cluster; text-align: justify">ในสมัยแรกเริ่มรวมปี พ.ศ. 2483-2492 คอมพิวเตอร์มีแต่เครื่องเปล่าๆ ไม่มีระบบปฏิบัติ</h6><p style="margin: 0cm 0cm 0pt; text-align: justify" class="MsoNormal">การใดๆเลย ผู้ใช้เครื่องต้องเขียนโปรแกรมเป็นภาษาเครื่องทั้งหมด รวมถึงควบคุมเครื่อง ตระเตรียมงาน ตรวจสอบและทำโปรแกรม แต่ลักษณะการใช้เช่นนี้ ทำให้ประโยชน์ใช้สอย (utilization) ของเครื่องต่ำมาก โดยเฉพาะเมื่อเครื่องในสมัยก่อนมีราคาแพงมากเมื่อเทียบกับเครื่องในสมัยนี้ ซึ่งมีความสามารถทัดเทียมกัน ดังนั้น จึงมีการจ้างพนักงานคุมเครื่อง (operator) เพื่อลดเวลาที่เสียไปในการตระเตรียมงาน (set - up time) และเวลาที่ต้องเก็บกวาด (tear-down time) ซึ่งนอกจากพนักงานคุมเครื่องอาชีพจะชำนาญกว่าผู้ใช้แล้ว ยังสามารถจัดงานที่มีลักษณะคล้ายคลึงกันไว้พวกเดียวกัน เช่นงานที่ต้องใช้ตัวแปลภาษา (translator หรือ compiler) ตัวเดียวกัน ลักษณะนี้เรียกว่า เป็นการป้อนงานแบบกลุ่มด้วยมือ (manual batch system) ระบบนี้ก็ยังไม่ต้องอาศัยระบบปฏิบัติการแต่อย่างใด</p> 1.1.1.1 การป้อนงานแบบกลุ่มโดยอัตโนมัติ <h6>แม้ว่าจะมีการใช้พนักงานคุมเครื่องมืออาชีพ แต่เวลาของเครื่องก็ยังทิ้งเสียเปล่าในขณะที่</h6>พนักงานตรวจสอบความต้องการของงาน หางาน (ซึ่งโดยปกติอยู่ในรูปของบัตรเจาะรู และเทปแม่เหล็ก) และป้อนงานเข้าสู่เครื่อง (เช่นใส่บัตรในเครื่องอ่านบัตร หรือใส่เทปในตู้เทป) รวมถึงการนำงานนั้นๆ ออกจากเครื่อง (เช่น เก็บเทป เก็บบัตร หรือฉีกกระดาษผลลัพธ์ เป็นต้น) ดังนั้นในช่วงต้นทศวรรษที่ 5 (พ.ศ. 2493 - 2497) General Motors Research Laboratories ได้พัฒนาระบบปฏิบัติการรุ่นแรกออกมาโดยใช้กับเครื่อง IBM 701 ที่ใช้กันอยู่ในห้องทดลองนั้นระบบปฏิบัติการรุ่นแรกนี้ เรียกว่าเป็นการประมวลผลแบบกลุ่มโดยอัตโนมัติ (automatic batch processing) ระบบปฏิบัติการรุ่นแรกนี้ เป็นเพียงโปรแกรมเล็กๆ ซึ่งจะอยู่ในเครื่องตลอดเวลา (resident monitor) และจะส่งมอบการควบคุมเครื่องให้กับโปรแกรมของผู้ใช้ทีละโปรแกรมเรียงตามลำดับตามกันไป ซึ่งในกรณีนี้ จะต้องมีข้อมูลปะหน้าและท้ายโปรแกรม เพื่อแยกงานออกจากกัน รวมทั้งบอกระบบปฏิบัติการถึงลักษณะงาน เช่นตัวแปลภาษาที่ต้องใช้ ตู้เทป และเลขหมายของม้วนเทป เป็นต้น จึงเกิดเป็นภาษาใหม่ขึ้น คือ ภาษาคุมงาน (job control language หรือ JCL) <p style="margin: 0cm 0cm 0pt; text-align: justify" class="MsoNormal">ปัญหาที่สำคัญอีกประการหนึ่ง คือความแตกต่างของความเร็ว ระหว่างหน่วยประมวลผลกลาง (central processing unit หรือ cpu) กับอุปกรณ์รับข้อมูลและแสดงผล แม้ว่าจะได้มีการพัฒนาอุปกรณ์รับข้อมูลและแสดงผลอย่างไรก็ตาม แต่ขีดจำกัดของเครื่องกลไกก็ยังทำให้อุปกรณ์เหล่านี้ ช้ากว่าหน่วยประมวลผลกลางซึ่งทำงานด้วยความเร็วของวงจรอิเล็กทรอนิกส์เป็นหลายพันเท่า ความแตกต่างนี้ ทำให้การใช้ประโยชน์ของหน่วยประมวลผลกลางต่ำมากตัวอย่างเช่น การแปลภาษาเครื่องของงานหนึ่ง ใช้เวลาของหน่วยประมวลผลกลางเพียง 4.8 วินาที ขณะที่การอ่านโปรแกรมนั้น (1579 บัตร ด้วยความเร็ว 1,200 บัตรต่อนาที) ใช้เวลา 78.9 วินาที ดังนั้นหน่วยประมวลผลกลางจะต้องรอเครื่องอ่านบัตร 74.1 วินาที หรือร้อยละ 93.9 ของเวลาที่ใช้ในการทำงานชิ้นนี้ เรียกได้ว่าการใช้ประโยชน์ (utilization) ของหน่วยประมวลผลกลางเป็นเพียงร้อยละ 6.1 เท่านั้น ซึ่งหากรวมความล่าช้าในการแสดงผลเข้าไปด้วยแล้ว การใช้ประโยชน์ของหน่วยประมวลผลกลางก็ยิ่งต่ำลงไปอีก วิธีแก้ปัญหานี้ นับจากสมัยแรกเริ่ม ได้แก่ระบบ buffering ระบบ off-time และระบบ spooling</p> การทำงานแบบ buffering <p style="margin: 0cm 0cm 0pt; text-indent: 1cm; text-align: justify" class="MsoNormal">แนวความคิดนี้คือ ให้หน่วยรับข้อมูลและแสดงผล ทำงานขนานไปพร้อมกันกับหน่วยประมวลผลกลางมากที่สุดเท่าที่จะทำได้ วิธีการคือ ขณะที่หน่วยประมวลกลาง ประมวลผลข้อมูลจำนวนหนึ่ง หน่วยรับข้อมูลจะอ่านข้อมูลถัดไปเข้ามาไว้ในหน่วยความจำ ส่วนที่เตรียมไว้เพื่อการนี้ ซึ่งเรียกว่าบัฟเฟอร์ (buffer) ซึ่งหากการอ่านข้อมูล (หรือการพิมพ์ผลลัพธ์) สำหรับข้อมูลแต่ละหน่วยพอดี อุปกรณ์ทั้งสองประเภทก็ไม่ต้องรอซึ่งกันและกัน ทำให้ได้ประโยชน์ใช้สอยเต็มที่คือ ร้อยละร้อย แต่ในความเป็นจริงแล้วจะเกิดความเหลื่อมล้ำ (mismatch) ของเวลาการทำงานสำหรับข้อมูลแต่ละหน่วย ความเหลื่อมล้ำนี้ขึ้นกับสาเหตุที่สำคัญสองประการคือ อัตราความเร็วของอุปกรณ์ต่างๆ และประเภทของงานเนื้อหาสำหรับสาเหตุแรกนั้น ไม่ว่าเครื่องคอมพิวเตอร์ประเภทใด หน่วยประมวลผลกลางจะมีความเร็วสูงกว่าหน่วยรับข้อมูลและแสดงผลมาก แม้ว่าจะมีบัฟเฟอร์ แต่ละหน่วยประมวลผลก็ยังต้องรออยู่ดี ส่วนสาเหตุประการที่สองนี้ หากงานเป็นพวกที่ใช้หน่วยรับข้อมูลและแสดงผลมากๆ (I/O bounded) หน่วยประมวลผลกลางจำทำงานน้อย เพราะต้องรอข้อมูลจากหน่วยรับข้อมูล (หรือรอให้หน่วยแสดงผลนำผลที่ได้ไปแสดง)</p><p style="margin: 0cm 0cm 0pt; text-align: justify" class="MsoNormal">ในทำนองกลับกัน หากงานเป็นประเภทที่ใช้หน่วยประมวลผลกลางมากๆ (cpu bounded) ช่วงเวลาที่หน่วยประมวลผลกลางจะว่างก็ลดลงจนอาจถึงกับไม่ต้องรอเลย กลายเป็นว่า หน่วยรับข้อมูลและแสดงผลต้องเป็นฝ่ายรอหน่วยประมวลผลกลาง</p><p style="margin: 0cm 0cm 0pt; text-align: justify" class="MsoNormal"> ในเครื่องสมัยแรกเริ่มนั้น (หรือแม้แต่ในปัจจุบันเองก็ตาม) ความเหลื่อมล้ำระหว่างหน่วยประมวลผลกลางต่ำมาก วิธีการแก้ทางหนึ่งคือ เพิ่มความเร็วของหน่วยรับข้อมูลและแสดงผลแต่วิธีนี้ทำได้ยาก เพราะอุปกรณ์เหล่านั้น เป็นเครื่องกลไกซึ่งมีข้อจำกัดทางด้านความเร็วเป็นธรรมดาอยู่แล้ว จึงได้มีการนำอุปกรณ์ที่มีความเร็วสูงขึ้นอีกระดับ เช่น เทปและจานแม่เหล็กมาคั่นระหว่างหน่วยประมวลผลกลาง และหน่วยรับข้อมูลและแสดงผล ส่วนอีกวิธีหนึ่งคือ การทำงานหลายๆ งานพร้อมกัน เพื่อไม่ให้หน่วยประมวลผลกลางต้องอยู่เฉย ขณะรอการรับข้อมูลหรือแสดงผลของงานหนึ่งงานใด ซึ่งลักษณะนี้ คือการทำมัลติโปรแกรมมิ่ง (multiprogramming) ซึ่งจะกล่าวถึงต่อไป</p>การทำงานแบบ off - line ปัญหาความเหลื่มล้ำของความเร็ว สามารถผ่อนหนักให้เป็นเบาได้วิธีหนึ่งคือ การใช้เทปแม่เหล็กมาแทนเครื่องอ่านบัตรหรือเครื่องพิมพ์ที่มีความเร็วต่ำมาก วิธีการคือ การจำลองข้อมูลจากบัตรลงบนเทปแม่เหล็ก เมื่อโปรแกรมต้องการอ่านบัตร ระบบปฏิบัติการจะเปลี่ยนไปอ่านเทปให้แทน ส่วนการพิมพ์ผลก็ทำทำนองเดียวกัน โดยการพิมพ์ลงเทปแม่เหล็กก่อน แล้วนำเทปนั้นไปถ่ายออกเครื่องพิมพ์อีกที การถ่ายเทข้อมูลผ่านเทปนี้กระทำได้สองวิธีคือ ใช้เครื่องอ่านบัตรและเครื่องพิมพ์ที่ออกแบบมาเป็นพิเศษ สามารถถ่ายข้อมูลกับเครื่องอ่านเทปแม่เหล็กได้โดยตรง ไม่ต้องผ่านหน่วยประมวลผลกลาง ส่วนอีกวิธีหนึ่งคือ ใช้อุปกรณ์มาตรฐานปกติแต่ใช้เครื่องคอมพิวเตอร์ขนาดเล็ก เป็นตัวถ่ายเทข้อมูล แทนที่จะใช้เครื่องใหญ่การทำงานโดยอาศัยเทปแม่เหล็กนี้ จะต้องได้รับความช่วยเหลือจากระบบปฏิบัติการในอันที่จะทำให้คำสั่งรับข้อมูลหรือแสดงผล (input / output operation) ในโปรแกรมของผู้ใช้สามารถเปลี่ยนไปใช้กับอุปกรณ์ใดก็ได้ ขึ้นกับความเหมาะสมในการบริหารระบบ ลักษณะการทำงานเช่นนี้เรียกว่า อิสรภาพจากอุปกรณ์ (device independence) <p style="margin: 0cm 0cm 0pt; text-align: justify" class="MsoNormal"> ข้อเสียของระบบ off-line คือ โปรแกรมจะต้องผ่านขั้นตอนมากขึ้น และในการเก็บข้อมูลเทปแม่เหล็ก ต้องรอให้มีหลายๆ โปรแกรมเสียก่อน จึงค่อยนำเข้าเครื่องคอมพิวเตอร์ใหญ่เสียทีหนึ่ง ทำให้ผู้ใช้ต้องรอนานขึ้น แม้ว่าประโยชน์ใช้สอยของหน่วยประมวลผลกลางจะดีขึ้นก็ตาม</p> การทำงานแบบ spooling <p style="margin: 0cm 0cm 0pt" class="MsoBodyTextIndent">เมื่อเทคโนโลยีของจานแม่เหล็กได้รับการพัฒนามากขึ้น ระบบปฏิบัติการก็เริ่มหันมาใช้จานแม่เหล็กแทนเทปแม่เหล็กด้วยเหตุผลสำคัญประการหนึ่งที่เห็นได้ชัดเจนคือ การที่ไม่สามารถทำการประมวลผลข้อมูลในเทป ไปพร้อมๆ กัน กับที่ถ่ายเทข้อมูลจากเครื่องอ่านบัตร ลงเทปม้วนเดียวกันนั้นได้</p><p style="margin: 0cm 0cm 0pt" class="MsoBodyTextIndent">หลักการใช้จานแม่เหล็กมีลักษณะคล้ายกับเทปแม่เหล็ก ข้อแตกต่างที่สำคัญมีด้วยกันสองประการคือ</p><p style="margin: 0cm 0cm 0pt; text-align: justify" class="MsoNormal"> 1. เนื่องจากการเข้าถึง (access) จานแม่เหล็กเป็นแบบตรง (direct) ไม่ใช่แบบเรียงลำดับ (sequential) อย่างเทปแม่เหล็ก จึงทำให้สามรถแยกงานออกจากกันได้ โดยสร้างตารางบ่งบอกว่าข้อมูล (หรือผลลัพธ์) ของงานใดอยู่ในส่วนใดของจานบันทึก</p><p style="margin: 0cm 0cm 0pt; text-align: justify" class="MsoNormal"> 2. เมื่อการใช้จานแม่เหล็กเป็นแบบตามสาย หรือต่อตรง (on-line) หน่วยประมวลผลที่ใช้ในการถ่ายเทข้อมูลระหว่างจานแบะอุปกรณ์รับข้อมูลและแสดงผล จึงต้องเป็นตัวเดียวกับที่ใช้ในการประมวลงานของผู้ใช้ หรือกล่าวอีกนัยหนึ่งคือ ต้องมีโปรแกรมพิเศษตัวหนึ่ง ทำงานคู่ขนานไปกับโปรแกรมของผู้ใช้ เพื่อทำการถ่านเทข้อมูลกับจานแม่เหล็ก จึงเกิดเป็นการทำมัลติโปรแกรมมิ่งแบบพื้นฐานขึ้น</p><p style="margin: 0cm 0cm 0pt; text-indent: 1cm; text-align: justify" class="MsoNormal">หลักการใช้จานแม่เหล็กแทนอุปกรณ์รับข้อมูล และแสดงผลนี้ เรียกว่า spooling ซึ่งย่อมาจาก Simultaneous Peripheral Operation On - Line </p><p style="margin: 0cm 0cm 0pt; text-indent: 1cm; text-align: justify" class="MsoNormal">ข้อดีที่สำคัญของ spooling คือความจำเป็นที่ต้องพัฒนาระบบมัลติโปรแกรมมิ่งแบบพื้นฐานขึ้น ซึ่งก่อให้เกิดความก้าวหน้าต่อวงการ โดยเฉพาะทางศาสตร์ด้านระบบปฏิบัติการระบบนี้ทำให้สามารถเหลื่อมการประมวลผลของงานหนึ่งกับการรับข้อมูลและแสดงผล (โดยผ่านโปรแกรม spool ) ของอีกงานหนึ่งได้ จุดนี้ต่างกับการใช้บัฟเฟอร์ ตรงที่การใช้บัฟเฟอร์นั้นเป็นการเหลื่อมกันระหว่างการประมวลผล และการรับและแสดงข้อมูลของโปรแกรมเดียวกันซึ่งก็ไม่อาจทำได้มากเท่าไรนัก ด้วยจำกัดอยู่ที่ขั้นตอนการทำงานของโปรแกรมนั้นๆ</p><p style="margin: 0cm 0cm 0pt; text-indent: 1cm; text-align: justify" class="MsoNormal">ข้อดีอีกประการหนึ่งของ spooling คือ ลักษณะการเข้าถึงแบบตรงของจานแม่เหล็กงานที่ถูกป้อนเข้ามาแบบเรียงลำดับ สามารถถูกจัดแยกเป็นอิสระ เกิดเป็น job pool ซึ่งระบบปฏิบัติการสามารถเลือกงานเข้าประมวลผล ตามความเหมาะสมได้ เช่นตามความสำคัญของงานซึ่งกำหนดโดยผู้ใช้หรือผู้บริหารระบบ หรือตามระดับและลักษณะการใช้งานอุปกรณ์ต่างๆ ในระบบ เช่นเลือกงานที่ใช้เทป เมื่อมีตู้เทปว่าง เป็นต้น ทำให้เกิดเป็นระบบคัดเลือกงาน (job scheduling) แบบพื้นฐานขึ้น</p> 1.1.1.2 ระบบมัลติโปรแกรมมิ่ง <p style="margin: 0cm 0cm 0pt 1cm; text-align: justify" class="MsoNormal">แม้ว่า spooling จะเป็นการทำงานแบบมัลติโปรแรมมิ่งอย่างง่ายๆ โดยมีโปรแกรมวิ่ง</p><p style="margin: 0cm 0cm 0pt; text-align: justify" class="MsoNormal">ขนานกันอยู่สองโปรแกรม คือโปรแกรม spool และโปรแกรมของผู้ใช้ (ในลักษณะการประมวลผลแบบกลุ่ม) แต่ลักษณะของโปรแกรมที่เกี่ยวข้อง ก็ยังไม่อาจใช้ประโยชน์องค์ประกอบต่างๆ ของคอมพิวเตอร์ได้เต็มที่ เหตุเพราะโปรแกรมของผู้ใช้ได้เต็มที่ เหตุเพราะโปรแกรมของผู้ใช้อาจทำงานร่วมกับเทปแม่เหล็ก ซึ่งมีความเหลื่อมล้ำทางความเร็วกับหน่วยประมวลผลกลางมากอยู่ดี ในสมัยต่อมาจึงได้มีการขยายการทำมัลติโปรแกรมมิ่งออกไป เพื่อให้ประโยชน์ใช้สอยของระบบสูงขึ้น</p><p style="margin: 0cm 0cm 0pt; text-indent: 1cm; text-align: justify" class="MsoNormal">หลักการของระบบมัลติโปรแกรมมิ่ง คือการให้มีโปรแกรมอยู่ในหน่วยความจำหลักพร้อมที่จะถูกประมวลผลได้หลายๆ โปรแกรม ระบบปฏิบัติการจะเลือกโปรแกรมมาตัวหนึ่งให้หน่วยประมวลกลางทำการประมวลผลไปเรื่อยๆ ในที่สุดโปรแกรมนั่นต้องหยุดคอยอะไรสักสิ่งหนึ่ง เช่น รอให้พนักงานคุมเครื่องใส่เทปแม่เหล็กเข้าตู้เทป หรือรอให้เครื่องอ่านบัตรอ่านข้อมูลชิ้นถัดไปเข้ามา ซึ่งในลักษณะมัลติโปรแกรมมิ่งนี้ หน่วยประมวลผลกลางจะไม่อยู่เฉยโดยระบบปฏิบัติการจะคัดเลือกงานอื่นที่พร้อมจะถูกประมวลผล มาให้หน่วยประมวลผลกลางทำการดำเนินต่อได้ หน่วยประมวลผลกลางจะเปลี่ยนไปทำงานที่พร้อมจะให้ทำเช่นนี้เรื่อยๆ ไปและในที่สุด งานแรกที่ค้างไว้จะกลับมาพร้อมให้ทำอีก เนื่องจากสิ่งที่รออยู่นั้นสำเร็จลุล่วงแล้วซึ่งเมื่อหน่วยประมวลผล</p><p style="margin: 0cm 0cm 0pt" class="MsoHeading7">ว่างก็จะหันกลับมาทำงานแรกนั้นต่อไป</p><p style="margin: 0cm 0cm 0pt; text-align: justify" class="MsoBodyTextIndent2">ลักษณะของมัลติโปรแกรมมิ่งนี้ มีตัวอย่างที่เห็นได้ชัดในชีวิตประจำวันโดยทั่วไป เช่นผู้จัดการบริษัทสั่งเลขานุการ ให้ติดต่อกับผู้จัดการของอีกบริษัทหนึ่ง ขณะที่เลขาฯ หมุนโทรศัพท์ติดต่อ ผู้จัดการผู้นั้นก็สามารถหันไปทำงานอื่น รอจนเลขาฯ ติดต่อได้แล้ว จึงหันกล้องมาคุยโทรศัพท์</p><p style="text-justify: inter-cluster; margin: 0cm 0cm 0pt; text-indent: 1cm; text-align: justify" class="MsoNormal">อาจถือได้ว่า ระบบมัลติโปรแกรมมิ่ง เป็นต้นกำเนิดของศาสตร์ทางระบบปฏิบัติการก็ว่าได้ เนื่องจากระบบมัลติโปรแกรมมิ่ง ไม่ว่าจะเป็นแบบใดจะซับซ้อนมาก การที่จะทำงานหลายๆ งานพร้อมๆ กัน ระบบปฏิบัติการต้องคอยควบคุม และจัดการองค์ประกอบต่างๆ เช่น การจัดสรรเนื้อที่ในหน่วยความจำหลักที่มีจำกัด ให้แก่งานเหล่านั้น ทั้งต้องสับหลีกงาน เมื่อมีงานหลายๆ งาน พร้อมที่จะให้ทำการประมวลผล และรวมถึงการจัดการอุปกรณ์ข้างเคียงให้มีประสิทธิภาพในการใช้งานสูง นอกจากนี้ความต้องการทรัพยากรของงานต่างๆ อาจเกิดความขัดแย้ง และสับสน ในลักษณะนี้เรียกว่า deadlock ซึ่งระบบปฏิบัติการจำเป็นต้องหาทางป้องกันของงานแต่ละงานต่างๆ เหล่านี้เป็นต้น ซึ่งจะเห็นได้ในหัวข้อต่อๆ ไปว่า หัวข้อต่างๆ ในศาสตร์ด้านระบบปฏิบัติการ จะเกี่ยวพันกับจุดประสงค์ของการทำงานระบบมัลติโปรแกรมมิ่ง</p> <p style="margin: 0cm 0cm 0pt" class="MsoNormal">1.1.2 ลักษณะระบบคอมพิวเตอร์แบบแบทซ์</p><p style="margin: 0cm 0cm 0pt" class="MsoNormal">คอมพิวเตอร์ยุคแรก ๆ มีขนาดใหญ่ทำการรับจาก console อุปกรณ์นำเข้า (input) เป็นพวก card reader และ tape drive อุปกรณ์แสดงผล (output) เป็นพวก line printer, tape drive และ บัตรเจาะรู ผู้ใช้จะไม่ได้ติดต่อกับระบบคอมพิวเตอร์โดยตรง วิธีการติดต่อคือ ผู้ใช้ไม่ได้ติดต่อกับระบบคอมพิวเตอร์โดยตรง วิธีติดต่อคือ ผู้ใช้เตรียม job พวกโปรแกรม, ข้อมูล, และสารสนเทศเพื่อการควบคุมเกี่ยวกับธรรมชาติของงาน (control card) และนำไปให้ operator งานดังกล่าวมักอยู่ในรูปบัตรเจาะรู (punched card) จึงต้องมี card reader เพื่อประมวลผล ระบบปฏิบัติการในยุคแรก งานหลักจะถูก execute ทีละงาน โดยระบบปฏิบัติการจะฝังในหน่วยความจำตลอดเวลา ดังรูป</p><table border="0" cellspacing="0" cellpadding="0" width="100%"><tbody><tr><td style="background-color: transparent; border: #d4d0c8"><div class="shape" style="padding-right: 7.2pt; padding-left: 7.2pt; padding-bottom: 3.6pt; padding-top: 3.6pt"><p style="margin: 0cm 0cm 0pt" class="MsoNormal"></p></div></td></tr></tbody></table>
รูปที่ 1.2 ระบบคอมพิวเตอร์แบบแบทซ์ <p style="margin: 0cm 0cm 0pt; text-align: justify" class="MsoBodyTextIndent2">เพื่อที่จะให้กระบวนการเร็วขึ้น งานที่คล้าย ๆ กันก็จะถูกเอามารวมกัน แล้ว run เป็นกลุ่ม ดังนั้นโปรแกรมเมอร์ก็จะเอาโปรแกรมของพวกเขาไปให้ operator operator จะเรียงโปรแกรมเหล่านั้นเป็นกลุ่มที่คล้าย ๆ กน แล้วให้คอมพิวเตอร์ run ทีละกลุ่ม (batch) ผลลัพธ์ (output) ที่ได้โปรแกรมเมอร์จะพอใจกว่าแบบเดิม</p>ระบบปฏิบัติการแบบกลุ่มจะอ่าน card reader ซึ่งแต่ละ control card ก็จะทำงานไปเมื่องานเสร็จก็ print ออกมาจะเห็นว่าระบบแบบกลุ่ม (batch) จะไม่มีการปฏิสัมพันธ์ (interaction) ระหว่างผู้ใช้และงาน (job) ในขณะ execute เพราะฉะนั้น delay ระหว่างช่วงที่รังงานจนถึงงานเสร็จจะเรียกว่า turnaround time <p style="margin: 0cm 0cm 0pt; text-align: justify" class="MsoBodyTextIndent2">จะเห็นได้ว่า CPU จะว่างบ่อยมาก เนื่องจาก speed ของเครื่องจักร อุปกรณ์รับส่งข้อมูลช้ากว่าอุปกรณ์อิเล็กทรอนิกส์ ตัวอย่างเช่น CPU ทำงานช้า ๆ ก็เป็น ไมโครวินาที หรือทำงานตามคำสั่งได้ 1000 ชุดคำสั่งใน 1 วินาที แต่ card reader อย่างเร็วก็ทำได้เพียง 20 card ในวินาที</p><p style="margin: 0cm 0cm 0pt; text-align: justify" class="MsoNormal">ปัญหานี้ถูกแก้ไขโดย disk technology แทนที่ card จะถูกอ่านจากเครื่องอ่านเข้าสู่หน่วยความจำ และงานจะถูก process เราควรอ่าน card เข้าสู่ disk ตำแหน่งของ card image จะถูกบันทึกไว้เป็นตาราง โดยระบบปฏิบัติการ เมื่องานถูก execute ระบบปฏิบัติการจะร้องขอให้เครื่องอ่านทำการอ่านจาก disk เช่นเดียวกับ output เมื่องานร้องขอ printer ให้พิมพ์ 1 บรรทัด บรรทัดนั้นจะถูกคัดลอก</p>
ได้ความรู้ดีมากๆ เลยครับ
ได้ความรู้ดีครับ
ดเก่ดเดนดาดาดาดาดาด่เเรกรกรตกากรกรกดนาดกิ
Thak you yoyo