ความหมายของระบบปฏิบัติการ (Operating System : OS)
1. ระบบปฏิบัติการ หมายถึง โปรแกรมที่ใช้ในการควบคุมการทำงานของคอมพิวเตอร์
2. ระบบปฏิบัติการ หมายถึง ระบบที่สามารถช่วยให้ผู้ใช้คอมพิวเตอร์สามารถใช้งานคอมพิวเตอร์ได้
3.ระบบปฏิบัติการ หมายถึง ระบบที่ใช้ในการควบคุมการทำงานระหว่างคอมพิวเตอรืกับหน่วยรับ-ส่งข้อมูล
หน้าที่ของระบบปฏิบัติการ
1. ติดต่อกับผู้ใช้ (user interface)OS จะมีหน้าจอโปรแกรมที่เป็นกราฟิกเพื่อรอการสั่งงานหรือเลือกจากผู้ใช้
2.ควบคุมดูแลอุปกรณ์และการทำงานของเครื่องคอมพิวเตอร OS จะควบคุมดูแลการทำงานของอุปกรณ์ต่างๆ เพื่อให้การทำงานของระบบเป็นไปได้อย่างถูกต้องและสอดคล้องกัน
3.จัดสรรทรัพยากรต่างๆ ในระบบ ทรัพยากร (resource) คือ สิ่งซึ่งถูกใช้เพื่อให้โปรแกรมดำเนินต่อไปได้ เช่น ซีพียู หน่วยความจำ ดิสก์ เป็นต้น OS จะจัดสรรทรัพยากรของระบบเพื่อให้เกิดประโยชน์สูงสุด
วิวัฒนาการของระบบปฏิบัติการ
OS รุ่นที่ 0 (ช่วงทศวรรษ 1940)
ระบบคอมพิวเตอร์ในยุคต้นๆ ไม่มี OS ไว้ใช้งาน การใช้คอมพิวเตอร์ทำด้วยภาษาเครื่องเท่านั้น
OSรุ่นที่ 1 (ช่วงทศวรรษ 1950)
ระบบปฏิบัติการถูกสร้างขึ้นมาเพื่อทำงานซ้ำๆ แทนมนุษย์ เรียกว่า ระบบประมวลผลแบบกลุ่ม (bacth processing systems) คือ งานทั้งหลายจะถูกนำมารวบรวมกันไว้เป็นกลุ่มหรือที่เรียกว่าแบตซ์ แล้วส่งให้เครื่องคอมพิวเตอร์ทำงานจนเสร็จ
OSรุ่นที่ 2 (ช่วงทศวรรษ 1960)
OS ทำงานในลักษณะมัลติโปรแกรมมิ่ง (multiprogramming) และเป็นจุดเริ่มต้นของระบบ multiprocessing
OSรุ่นที่ 3 (ช่วงทศวรรษ 1960 - กลางทศวรรษ 1970)
ในยุคนี้ถูกออกแบบให้เป็นระบบปฏิบัติการเอนกประสงค์ หมายถึง สามารถใช้านทั่วๆ ไปไม่เฉพาะเจาะจง
OSรุ่นที่ 4 (กลางทศวรรษ 1970 ถึงปัจจุบัน)
ยุคนี้ถูกพัฒนาให้มีความสามารถในงานพิเศษด้านอื่นเพิ่มขึ้น
วิวัฒนาการและชนิดของระบบปฏิบัติการ
ในสมัยก่อนที่เริ่มมีการประดิษฐ์เครื่องคำนวณ ผู้ประดิษฐ์เครื่องจะเป็นผู้เดียวที่สามารถใช้เครื่องนั้นได้ หรือไม่ก็ต้องเป็นผู้ที่มีความรู้เกี่ยวกับการทำงานของเครื่องอย่างถ่องแท้เท่านั้นที่จะใช้เครื่องได้ จุดประสงค์ของการสร้างเครื่องคำนวณก็เพื่อช่วยเหลือนักวิทยาศาสตร์ในการคำนวณฟังก์ชั่นต่างๆที่ยุ่งยากสลับซับซ้อน และเสียเวลาในการคำนวณนาน เมื่อสร้างเป็นเครื่องจักรขึ้นมาจึงทำให้นักวิทยาศาสตร์ไม่ต้องเสียเวลาในการคำนวณฟังก์ชั่นเหล่านั้น เพียงแต่ส่งให้เครื่องคำนวณช่วยคำนวณให้ อย่างไรก็ตามนักวิทยาศาสตร์ก็ยังต้องอาศัยผู้สร้างซึ่งเป็น ผู้เดียวที่สามารถใช้เครื่องนั้นได้ การพัฒนาเครื่องคำนวณเหล่านี้มีมาตลอดจนกระทั่งมาเป็นเครื่องคอมพิวเตอร์ ในปัจจุบัน เครื่องคอมพิวเตอร์ในยุคแรกๆ ก็ยังมีปัญหาเช่นเดียวกับเครื่องคำนวณ คือ ผู้ประดิษฐ์เครื่องเท่านั้น ที่จะเขียนโปรแกรมควบคุมมันได้ ทั้งนี้เพราะโปรแกรมต้องอาศัยความเข้าใจในการทำงานทุกขั้นตอนของเครื่องและต้องใช้คำสั่งเป็นภาษาเครื่อง (machine language) เท่านั้น ซึ่งภาษาเครื่องนี้ผู้ประดิษฐ์เครื่องจะเป็นผู้กำหนดขึ้นเอง ซึ่งจะลำดับวิวัฒนาการระบบปฏิบัติการดังต่อไปนี้
การป้อนงานแบบกลุ่มด้วยมือ (Manual batch system) พ.ศ. 2483 – 2492
ในสมัยแรกเริ่มราวปี พ.ศ.2483-2492 เครื่องคอมพิวเตอร์มีแต่เครื่องเปล่าๆ ยังไม่มีระบบปฏิบัติการใดๆ เลย ผู้ใช้เครื่องต้องเขียนโปรแกรมเป็นภาษาเครื่องทั้งหมด รวมถึงควบคุมเครื่อง ตระเตรียมงาน ตรวจสอบ และทำโปรแกรม และลักษณะการใช้เช่นนี้ ทำให้ประโยชน์ใช้สอย (utilization) ของเครื่องต่ำมาก โดยเฉพาะเมื่อเครื่องในสมัยก่อนมีราคาแพงมากเมื่อเทียบกับเครื่องในสมัยนี้ ซึ่งมีความสามารถทัดเทียมกัน ดังนั้น จึงมีการจ้างพนักงานคุมเครื่อง (operator) เพื่อลดเวลาที่เสียไปในการตระเตรียมงาน (set-up time) และเวลาที่ต้องเก็บกวาด (tear-down time) ซึ่งนอกจากพนักงานคุมเครื่องอาชีพจะชำนาญกว่าผู้ใช้แล้ว ยังสามารถจัดงานที่มีลักษณะคล้ายคลึงกันไว้พวกเดียวกัน เช่น งานที่ต้องใช้ตัวแปลภาษา (translator หรือ compiler) ตัวเดียวกัน ลักษณะนี้เรียกว่า เป็นการป้อนงานแบบกลุ่มด้วยมือ (manual batch system) ระบบการทำงานแบบนี้ทำให้เกิดปัญหาคือการสั่งงานแต่ละครั้งซึ่งใช้เวลานาน เพราะในขณะที่มีการนำตัวแปลภาษาเข้าหรือออกจากหน่วยความจำหลักนั้นใช้เวลาในการติดตั้งนานแล้วยังทำให้สูญเสียเวลาของหน่วยประมวลผลโดยเปล่าประโยชน์ และต้องทำขั้นตอนเดิมๆ กับงานทุกงานที่เข้ามาในระบบ นอกจากนี้ยังเกิดข้อผิดพลาดในโปรแกรมและจะต้องเริ่มต้นใหม่เสมอ
การป้อนงานแบบกลุ่มโดยอัตโนมัติ (Automatic batch processing) พ.ศ. 2493 - 2497
แม้ว่าจะมีการใช้พนักงานคุมเครื่องมืออาชีพ แต่เวลาของเครื่องก็ยังทิ้งเสียเปล่าในขณะที่พนักงาน ตรวจสอบความต้องการของงาน หางาน (ซึ่งโดยปกติอยู่ในรูปของบัตรเจาะรู และเทปแม่เหล็ก) และป้อนงานเข้า สู่เครื่อง (เช่นใส่บัตรในเครื่องอ่านบัตร หรือใสเทปในตู้เทป) รวมถึงการนำงานนั้นๆ ออกจากเครื่อง (เช่น เก็บเทป เก็บบัตร หรือฉีกกระดาษผลลัพธ์เป็นต้น) ดังนั้นในช่วงต้นทศวรรษที่ 5 General Motors Research Laboratories ได้พัฒนาระบบปฏิบัติการรุ่นแรก ออกมาโดยใช้กับเครื่อง IBM 701 ที่ใช้กันอยู่ในห้องทดลองนั้นเรียกว่าเป็นการประมวลผลแบบกลุ่มอัตโนมัติ (automatic batch processing) ระบบปฏิบัติการรุ่นแรกนี้ เป็นเพียงโปรแกรมเล็กๆ ซึ่งอยู่ในเครื่องตลอดเวลา (resident monitor) ประกอบด้วย 3 ส่วน คือ โหลดเดอร์ (loader) ตัวจัดลำดับงานโดยอัตโนมัติ (automatic job sequencing) และตัวแปรบัตรควบคุม (control card interpreter) ซึ่งตัวมอนิเตอร์นี้ ทำหน้าที่ส่งงานเข้าไปในระบบอย่างต่อเนื่องโดยอัตโนมัติ และอยู่ในหน่วยความจำหลักตลอดเวลาที่เครื่องคอมพิวเตอร์ทำงาน โดยมีการแบ่งหน่วยความจำหลักเป็น 2 ส่วน ส่วนหนึ่งสำหรับโปรแกรมของผู้ใช้ และอีกส่วนหนึ่งเป็นของระบบปฏิบัติการเมื่อเริ่มต้นระบบ ตัวระบบปฏิบัติการ(มอนิเตอร)์จะถูกเรียกใช้ โดยโหลดเดอร์จะนำโปรแกรมระบบและโปรแกรมผู้ใช้เข้าสู่หน่วยความจำหลักแล้วส่งการควบคุมไปยังโปรแกรมเพื่อทำงานต่อไป หลังจากสิ้นสุดการทำงานของโปรแกรมหนึ่งๆ จะส่งการควบคุมกลับไปยังตัวระบบปฏิบัติการ เพื่อนำงานชิ้นต่อไปเข้ามา และจะส่งมอบการควบคุมเครื่องให้กับโปรแกรมของผู้ใช้ทีละโปรแกรมเรียงลำดับตามกันไป ซึ่งในกรณีนี้ จะต้องมีข้อมูลปะหน้าและท้ายโปรแกรม เพื่อยกงานออกจากกัน รวมทั้งบอกระบบปฏิบัติการถึงลักษณะงาน เช่น ตัวแปลภาษาที่ต้องใช้ ตู้เทป และเลขหมายของม้วนเทป เป็นต้น ซึ่งเกิดเป็นภาษาใหม่ขึ้น คือ ภาษาคุมงาน (job control language หรือ JCL)ปัญหาที่สำคัญอีกประการหนึ่ง คือ ความแตกต่างของความเร็วระหว่างหน่วยประมวลผลกลาง กับอุปกรณ์นำข้อมูลเข้า/ออก แม้ว่าจะได้มีการพัฒนาอุปกรณ์นำข้อมูลเข้า/ออกแล้วก็ตาม แต่ขีดจำกัดของเครื่อง กลไกก็ยังทำให้อุปกรณ์เหล่านี้ช้ากว่าหน่วยประมวลผลกลางซึ่งทำงานด้วยความเร็วของวงจรอิเล็กทรอนิกส์เป็นหลายพันเท่า ความแตกต่างนี้ทำให้การใช้ประโยชน์ของหน่วยประมวลผลกลางต่ำมาก ตัวอย่างเช่น การแปลภาษาเครื่องของงานหนึ่ง ใช้เวลาของหน่วยประมวลผลกลางเพียง 4.8 วินาที ขณะที่การอ่านโปรแกรมนั้น (1,579 บัตร ความเร็ว 1,200 บัตรต่อนาที) ใช้เวลา 78.9 วินาที ดังนั้นหน่วยประมวลผลกลางจะต้องรอเครื่องอ่านบัตร 74.1 วินาที หรือร้อยละ 93.9 ของเวลาที่ใช้ในการทำงานชิ้นนี้ เรียกได้ว่าการใช้ประโยชน์ (utilization) ของหน่วยประมวลผลกลางเป็นเพียงร้อยละ 6.1 เท่านั้น ซึ่งหากรวมความล่าช้าในการแสดงผลเข้าไปด้วยแล้ว การใช้ประโยชน์ของหน่วยประมวลผลกลางก็ยิ่งต่ำลงไปอีก วิธีแก้ปัญหานี้ นับจากสมัยแรกเริ่ม ได้แก่การใช้ระบบ buffering ระบบ off-line และระบบ spooling
การทำงานแบบ Buffering
แนวความคิดนี้คือ ให้หน่วยนำข้อมูลเข้า/ออกทำงานขนานไปพร้อมกันกับหน่วยประมวลผลกลางมากที่สุดเท่าที่จะทำได้ วิธีการคือ ขณะที่หน่วยประมวลผลกลางประมวลผลข้อมูลจำนวนหนึ่ง หน่วยรับข้อมูลจะอ่านข้อมูลถัดไปเข้ามาไว้ในหน่วยความจำ ส่วนที่เตรียมไว้เพื่อการนี้ ซึ่งเรียกว่าบัฟเฟอร์ (buffer) ซึ่งหากการอ่านข้อมูล (หรือการพิมพ์ผลลัพธ์) สำหรับข้อมูลแต่ละหน่วย ใช้เวลาเท่ากับการประมวลผลข้อมูลแต่ละหน่วยพอดี อุปกรณ์ทั้งสองประเภทนี้ไม่ต้องรอซึ่งกันและกัน ทำให้ได้ประโยชน์ใช้สอยเต็มที่ คือร้อยละร้อย แต่ในความจริงแล้วจะเกิดความเหลื่อมล้ำ (mismatch) ของเวลาการทำงานสำหรับข้อมูลแต่ละหน่วย ความเหลื่อมล้ำนี้ ขึ้นกับสาเหตุที่สำคัญสองประการคือ อัตราความเร็วของอุปกรณ์ต่างๆ และประเภทของงานที่ต่างกัน
สำหรับสาเหตุของอัตราความเร็วของอุปกรณ์ต่างกันนั้น ไม่ว่าเครื่องคอมพิวเตอร์ประเภทใด หน่วยประมวลผลกลางจะมีความเร็วสูงกว่าหน่วยนำข้อมูลเข้า/ออกมาก แม้จะมีบัฟเฟอร์ แต่หน่วยประมวลผล ก็ยังต้องรออยู่ดี ส่วนสาเหตุประเภทของงานต่างกันนั้น หากงานที่เป็นพวกที่ใช้หน่วยนำข้อมูลเข้า/ออกมากๆ (I/O bounded) หน่วยประมวลผลกลางจะทำงานน้อย เพราะต้องรอข้อมูลจากหน่วยรับข้อมูล (หรือรอให้หน่วยแสดงผลนำผลที่ได้ไปแสดง) ในทำนองกลับกัน หากงานเป็นประเภทที่ใช้หน่วยประมวลผลกลางมากๆ (CPU bounded) ช่วงเวลาที่หน่วยประมวลผลกลางจะว่างก็ลดลง จนอาจถึงกับไม่ว่างเลย กลายเป็นว่าหน่วยนำข้อมูลเข้า/ออกต้องเป็นฝ่ายรอหน่วยประมวลผลกลาง
ในสมัยเริ่มแรกนั้น (หรือแม้แต่ในปัจจุบันก็ตาม) ความเหลื่อมล้ำระหว่างหน่วยประมวลผลกลางกับหน่วยนำข้อมูลเข้า/ออก จะออกไปในทางที่ทำให้การใช้ประโยชน์หน่วยประมวลผลกลางต่ำมาก วิธีการแก้ทางหนึ่งคือ เพิ่มความเร็วของหน่วยนำข้อมูลเข้า/ออก แต่วิธีนี้ทำได้ยาก เพราะอุปกรณ์เหล่านั้นเป็นเครื่องกลไกซึ่งมี ข้อจำกัดทางด้านความเร็วเป็นธรรมดาอยู่แล้ว จึงได้มีการนำอุปกรณ์ที่มีความเร็วสูงขึ้นอีกระดับ เช่น เทปและจานแม่เหล็กมาคั่นระหว่างหน่วยประมวลผลกลาง และหน่วยนำข้อมูลเข้า/ออก ส่วนอีกวิธีหนึ่งคือ การทำงานหลายๆ งานพร้อมกัน เพื่อไม่ให้หน่วยประมวลผลกลางต้องอยู่เฉย ขณะรอการรับข้อมูลหรือแสดงผลของงานหนึ่งงานใด ซึ่งลักษณะนี้ คือการทำมัลติโปรแกรมมิ่ง (multiprogramming) ซึ่งจะกล่าวถึงต่อไป
การทำงานแบบ Off-line
การทำงานแบบนี้เป็นวิธีการนำมาเพื่อแก้ปัญหาความเหลื่อมล้ำของความเร็ว สามารถผ่อนหนักเป็นเบาได้วิธีหนึ่ง โดยการใช้เทปแม่เหล็กมาแทนเครื่องอ่านบัตรหรือเครื่องพิมพ์ที่มีความเร็วต่ำมาก วิธีการคือการจำลองข้อมูลจากบัตรลงบนเทปแม่เหล็ก เมื่อโปรแกรมต้องการอ่านบัตร ระบบปฏิบัติการจะเปลี่ยนไปอ่านเทปให้แทน ส่วนการพิมพ์ผลก็ทำทำนองเดียวกัน โดยการพิมพ์ลงเทปแม่เหล็กก่อน แล้วนำเทปนั้นไปถ่ายออกเครื่องพิมพ์อีกที การถ่ายเทข้อมูลผ่านเทปนี้กระทำได้สองวิธีคือ ใช้เครื่องอ่านบัตรและเครื่องพิมพ์ที่ออกแบบมาเป็นพิเศษ สามารถถ่ายเทข้อมูลกับเครื่องอ่านเทปแม่เหล็กได้โดยตรง ไม่ต้องผ่านหน่วยประมวลผลกลาง ส่วนอีกวิธีหนึ่งคือ ใช้อุปกรณ์มาตรฐานปกติ แต่ใช้เครื่องคอมพิวเตอร์ขนาดเล็ก เป็นตัวถ่ายเทข้อมูล แทนที่จะใช้เครื่องใหญ่
การทำงานโดยอาศัยเทปแม่เหล็กนี้ จะต้องได้รับความช่วยเหลือจากระบบปฏิบัติการในอันที่จะให้คำสั่งรับข้อมูลหรือแสดงผล (input/output operation) ในโปรแกรมของผู้ใช้สามารถเปลี่ยนไปใช้กับอุปกรณ์ ใดๆก็ได้ ขึ้นอยู่กับความเหมาะสมในการบริหารระบบ ลักษณะการทำงานเช่นนี้เรียกว่า อิสระภาพจากอุปกรณ์ (device independence)
ข้อเสียของระบบ off-line คือ โปรแกรมจะต้องผ่านขั้นตอนมากขึ้น และในการเก็บข้อมูลลงเทปแม่เหล็ก ต้องรอให้มีหลายๆ โปรแกรมเสียก่อน จึงค่อยนำเข้าเครื่องคอมพิวเตอร์ใหญ่เสียทีหนึ่ง ทำให้ผู้ใช้ต้อง รอนานขึ้น แม้ว่าประโยชน์ใช้สอยของหน่วยประมวลผลกลางจะดีขึ้นก็ตาม
การทำงานแบบ Spooling
เมื่อเทคโนโลยีของจานแม่เหล็กได้รับการพัฒนามากขึ้น ระบบปฏิบัติการก็เริ่มหันมาใช้จานแม่เหล็กแทนเทปแม่เหล็กด้วยเหตุผลสำคัญประการหนึ่งที่เห็นได้ชัด คือ การไม่สามารถทำการประมวลผลข้อมูลในเทป ไปพร้อมๆ กับที่ถ่ายเทข้อมูลจากเครื่องอ่านบัตร ลงเทปม้วนเดียวกันนั้นได้ หลักการใช้จานแม่เหล็กมีลักษณะคล้ายกับเทปแม่เหล็ก ข้อแตกต่างที่สำคัญมีด้วยกันสองประการคือ
เนื่องจากการเข้าถึง (access) ของจานแม่เหล็กเป็นแบบตรง (direct) ไม่ใช่แบบเรียงลำดับ (sequential) อย่างเทปแม่เหล็ก จึงทำให้สามารถแยกงานออกจากกันได้ โดยสร้างตารางบ่งบอกว่าข้อมูล (หรือผลลัพธ์) ของงานใดอยู่ในส่วนใดของจานบันทึก
เมื่อการใช้จานแม่เหล็กเป็นแบบตามสาย หรือต่อตรง (on-line) หน่วยประมวลผลที่ใช้ในการถ่ายเทข้อมูลระหว่างจานและอุปกรณ์นำข้อมูลเข้า/ออก จึงต้องเป็นตัวเดียวกับที่ใช้ในการประมวลงานของผู้ใช้ หรือกล่าวอีกนัยหนึ่งคือต้องมีโปรแกรมพิเศษตัวหนึ่ง ทำงานคู่ขนานไปกับโปรแกรมของผู้ใช้ เพื่อทำการถ่ายเท ข้อมูลกับจานแม่เหล็ก จึงเกิดเป็นการทำมัลติโปรแกรมมิ่งแบบพื้นฐานขึ้น หลักการใช้จานแม่เหล็กแทนอุปกรณ์นำข้อมูลเข้า/ออกนี้ เรียกว่า spooling ซึ่งย่อมาจาก Simultaneous Peripheral Operation On-Line
ข้อดีที่สำคัญของ spooling คือความจำเป็นที่ต้องพัฒนาระบบมัลติโปรแกรมมิ่งแบบพื้นฐานขึ้น ซึ่งก่อให้เกิดความก้าวหน้าต่อวงการโดยเฉพาะทางศาสตร์ด้านระบบปฏิบัติการ ระบบนี้ทำให้สามารถเหลื่อมการประมวลผลของงานหนึ่งกับการรับข้อมูลและแสดงผล (โดยผ่านโปรแกรม spool) ของอีกงานหนึ่งได้ จุดนี้ต่างกับการใช้บัฟเฟอร์ ตรงที่การใช้บัฟเฟอร์นั้นเป็นการเหลื่อมกันระหว่างการประมวลผล และการรับและแสดงข้อมูลของโปรแกรมเดียวกัน ซึ่งก็ไม่อาจทำได้มากเท่าไรนัก ด้วยจำกัดอยู่ที่ขั้นตอนการทำงานของโปรแกรมนั้นๆ
ข้อดีอีกประการหนึ่งของ spooling คือ ลักษณะการเข้าถึงแบบตรงของจานแม่เหล็กงานที่ถูกป้อนเข้ามาแบบเรียงลำดับ สามารถถูกจัดแยกเป็นอิสระ เกิดเป็น job pool ซึ่งระบบปฏิบัติการสามารถเลือกงานเข้าประมวลผลตามความเหมาะสมได้ เช่น ตามความสำคัญของงานซึ่งกำหนดโดยผู้ใช้หรือผู้บริหารระบบ หรือตามระดับและลักษณะการใช้งานอุปกรณ์ต่างๆ ในระบบ เช่น เลือกงานที่ใช้เทป เมื่อมีตู้เทปว่าง เป็นต้น ทำให้เกิดเป็นระบบคัดเลือกงาน (job scheduling) แบบพื้นฐานขึ้น
3. ระบบมัลติโปรแกรมมิ่ง (Multiprogramming system) ระบบปฏิบัติการรุ่นที่ 2 พ.ศ. 2498-2508
แม้ว่า Spooling จะเป็นการทำงานแบบมัลติโปรแกรมมิ่งอย่างง่ายๆ โดยมีโปรแกรมวิ่งขนานกันอยู่สองโปรแกรม คือ โปรแกรม spool และโปรแกรมของผู้ใช้ (ในลักษณะการประมวลผลแบบกลุ่ม) แต่ลักษณะของโปรแกรมที่เกี่ยวข้อง ก็ยังไม่อาจใช้ประโยชน์องค์ประกอบต่างๆ ของคอมพิวเตอร์ได้เต็มที่ เหตุเพราะ
ในสมัยก่อนที่เริ่มมีการประดิษฐ์เครื่องคำนวณ ผู้ประดิษฐ์เครื่องจะเป็นผู้เดียวที่สามารถใช้เครื่องนั้นได้ หรือไม่ก็ต้องเป็นผู้ที่มีความรู้เกี่ยวกับการทำงานของเครื่องอย่างถ่องแท้เท่านั้นที่จะใช้เครื่องได้ จุดประสงค์ของการสร้างเครื่องคำนวณก็เพื่อช่วยเหลือนักวิทยาศาสตร์ในการคำนวณฟังก์ชั่นต่างๆที่ยุ่งยากสลับซับซ้อน และเสียเวลาในการคำนวณนาน เมื่อสร้างเป็นเครื่องจักรขึ้นมาจึงทำให้นักวิทยาศาสตร์ไม่ต้องเสียเวลาในการคำนวณฟังก์ชั่นเหล่านั้น เพียงแต่ส่งให้เครื่องคำนวณช่วยคำนวณให้ อย่างไรก็ตามนักวิทยาศาสตร์ก็ยังต้องอาศัยผู้สร้างซึ่งเป็น ผู้เดียวที่สามารถใช้เครื่องนั้นได้ การพัฒนาเครื่องคำนวณเหล่านี้มีมาตลอดจนกระทั่งมาเป็นเครื่องคอมพิวเตอร์ ในปัจจุบัน เครื่องคอมพิวเตอร์ในยุคแรกๆ ก็ยังมีปัญหาเช่นเดียวกับเครื่องคำนวณ คือ ผู้ประดิษฐ์เครื่องเท่านั้น ที่จะเขียนโปรแกรมควบคุมมันได้ ทั้งนี้เพราะโปรแกรมต้องอาศัยความเข้าใจในการทำงานทุกขั้นตอนของเครื่องและต้องใช้คำสั่งเป็นภาษาเครื่อง (machine language) เท่านั้น ซึ่งภาษาเครื่องนี้ผู้ประดิษฐ์เครื่องจะเป็นผู้กำหนดขึ้นเอง ซึ่งจะลำดับวิวัฒนาการระบบปฏิบัติการดังต่อไปนี้
การป้อนงานแบบกลุ่มด้วยมือ (Manual batch system) พ.ศ. 2483 – 2492
ในสมัยแรกเริ่มราวปี พ.ศ.2483-2492 เครื่องคอมพิวเตอร์มีแต่เครื่องเปล่าๆ ยังไม่มีระบบปฏิบัติการใดๆ เลย ผู้ใช้เครื่องต้องเขียนโปรแกรมเป็นภาษาเครื่องทั้งหมด รวมถึงควบคุมเครื่อง ตระเตรียมงาน ตรวจสอบ และทำโปรแกรม และลักษณะการใช้เช่นนี้ ทำให้ประโยชน์ใช้สอย (utilization) ของเครื่องต่ำมาก โดยเฉพาะเมื่อเครื่องในสมัยก่อนมีราคาแพงมากเมื่อเทียบกับเครื่องในสมัยนี้ ซึ่งมีความสามารถทัดเทียมกัน ดังนั้น จึงมีการจ้างพนักงานคุมเครื่อง (operator) เพื่อลดเวลาที่เสียไปในการตระเตรียมงาน (set-up time) และเวลาที่ต้องเก็บกวาด (tear-down time) ซึ่งนอกจากพนักงานคุมเครื่องอาชีพจะชำนาญกว่าผู้ใช้แล้ว ยังสามารถจัดงานที่มีลักษณะคล้ายคลึงกันไว้พวกเดียวกัน เช่น งานที่ต้องใช้ตัวแปลภาษา (translator หรือ compiler) ตัวเดียวกัน ลักษณะนี้เรียกว่า เป็นการป้อนงานแบบกลุ่มด้วยมือ (manual batch system) ระบบการทำงานแบบนี้ทำให้เกิดปัญหาคือการสั่งงานแต่ละครั้งซึ่งใช้เวลานาน เพราะในขณะที่มีการนำตัวแปลภาษาเข้าหรือออกจากหน่วยความจำหลักนั้นใช้เวลาในการติดตั้งนานแล้วยังทำให้สูญเสียเวลาของหน่วยประมวลผลโดยเปล่าประโยชน์ และต้องทำขั้นตอนเดิมๆ กับงานทุกงานที่เข้ามาในระบบ นอกจากนี้ยังเกิดข้อผิดพลาดในโปรแกรมและจะต้องเริ่มต้นใหม่เสมอ
การป้อนงานแบบกลุ่มโดยอัตโนมัติ (Automatic batch processing) พ.ศ. 2493 - 2497
แม้ว่าจะมีการใช้พนักงานคุมเครื่องมืออาชีพ แต่เวลาของเครื่องก็ยังทิ้งเสียเปล่าในขณะที่พนักงาน ตรวจสอบความต้องการของงาน หางาน (ซึ่งโดยปกติอยู่ในรูปของบัตรเจาะรู และเทปแม่เหล็ก) และป้อนงานเข้า สู่เครื่อง (เช่นใส่บัตรในเครื่องอ่านบัตร หรือใสเทปในตู้เทป) รวมถึงการนำงานนั้นๆ ออกจากเครื่อง (เช่น เก็บเทป เก็บบัตร หรือฉีกกระดาษผลลัพธ์เป็นต้น) ดังนั้นในช่วงต้นทศวรรษที่ 5 General Motors Research Laboratories ได้พัฒนาระบบปฏิบัติการรุ่นแรก ออกมาโดยใช้กับเครื่อง IBM 701 ที่ใช้กันอยู่ในห้องทดลองนั้นเรียกว่าเป็นการประมวลผลแบบกลุ่มอัตโนมัติ (automatic batch processing) ระบบปฏิบัติการรุ่นแรกนี้ เป็นเพียงโปรแกรมเล็กๆ ซึ่งอยู่ในเครื่องตลอดเวลา (resident monitor) ประกอบด้วย 3 ส่วน คือ โหลดเดอร์ (loader) ตัวจัดลำดับงานโดยอัตโนมัติ (automatic job sequencing) และตัวแปรบัตรควบคุม (control card interpreter) ซึ่งตัวมอนิเตอร์นี้ ทำหน้าที่ส่งงานเข้าไปในระบบอย่างต่อเนื่องโดยอัตโนมัติ และอยู่ในหน่วยความจำหลักตลอดเวลาที่เครื่องคอมพิวเตอร์ทำงาน โดยมีการแบ่งหน่วยความจำหลักเป็น 2 ส่วน ส่วนหนึ่งสำหรับโปรแกรมของผู้ใช้ และอีกส่วนหนึ่งเป็นของระบบปฏิบัติการเมื่อเริ่มต้นระบบ ตัวระบบปฏิบัติการ(มอนิเตอร)์จะถูกเรียกใช้ โดยโหลดเดอร์จะนำโปรแกรมระบบและโปรแกรมผู้ใช้เข้าสู่หน่วยความจำหลักแล้วส่งการควบคุมไปยังโปรแกรมเพื่อทำงานต่อไป หลังจากสิ้นสุดการทำงานของโปรแกรมหนึ่งๆ จะส่งการควบคุมกลับไปยังตัวระบบปฏิบัติการ เพื่อนำงานชิ้นต่อไปเข้ามา และจะส่งมอบการควบคุมเครื่องให้กับโปรแกรมของผู้ใช้ทีละโปรแกรมเรียงลำดับตามกันไป ซึ่งในกรณีนี้ จะต้องมีข้อมูลปะหน้าและท้ายโปรแกรม เพื่อยกงานออกจากกัน รวมทั้งบอกระบบปฏิบัติการถึงลักษณะงาน เช่น ตัวแปลภาษาที่ต้องใช้ ตู้เทป และเลขหมายของม้วนเทป เป็นต้น ซึ่งเกิดเป็นภาษาใหม่ขึ้น คือ ภาษาคุมงาน (job control language หรือ JCL)ปัญหาที่สำคัญอีกประการหนึ่ง คือ ความแตกต่างของความเร็วระหว่างหน่วยประมวลผลกลาง กับอุปกรณ์นำข้อมูลเข้า/ออก แม้ว่าจะได้มีการพัฒนาอุปกรณ์นำข้อมูลเข้า/ออกแล้วก็ตาม แต่ขีดจำกัดของเครื่อง กลไกก็ยังทำให้อุปกรณ์เหล่านี้ช้ากว่าหน่วยประมวลผลกลางซึ่งทำงานด้วยความเร็วของวงจรอิเล็กทรอนิกส์เป็นหลายพันเท่า ความแตกต่างนี้ทำให้การใช้ประโยชน์ของหน่วยประมวลผลกลางต่ำมาก ตัวอย่างเช่น การแปลภาษาเครื่องของงานหนึ่ง ใช้เวลาของหน่วยประมวลผลกลางเพียง 4.8 วินาที ขณะที่การอ่านโปรแกรมนั้น (1,579 บัตร ความเร็ว 1,200 บัตรต่อนาที) ใช้เวลา 78.9 วินาที ดังนั้นหน่วยประมวลผลกลางจะต้องรอเครื่องอ่านบัตร 74.1 วินาที หรือร้อยละ 93.9 ของเวลาที่ใช้ในการทำงานชิ้นนี้ เรียกได้ว่าการใช้ประโยชน์ (utilization) ของหน่วยประมวลผลกลางเป็นเพียงร้อยละ 6.1 เท่านั้น ซึ่งหากรวมความล่าช้าในการแสดงผลเข้าไปด้วยแล้ว การใช้ประโยชน์ของหน่วยประมวลผลกลางก็ยิ่งต่ำลงไปอีก วิธีแก้ปัญหานี้ นับจากสมัยแรกเริ่ม ได้แก่การใช้ระบบ buffering ระบบ off-line และระบบ spooling
การทำงานแบบ Buffering
แนวความคิดนี้คือ ให้หน่วยนำข้อมูลเข้า/ออกทำงานขนานไปพร้อมกันกับหน่วยประมวลผลกลางมากที่สุดเท่าที่จะทำได้ วิธีการคือ ขณะที่หน่วยประมวลผลกลางประมวลผลข้อมูลจำนวนหนึ่ง หน่วยรับข้อมูลจะอ่านข้อมูลถัดไปเข้ามาไว้ในหน่วยความจำ ส่วนที่เตรียมไว้เพื่อการนี้ ซึ่งเรียกว่าบัฟเฟอร์ (buffer) ซึ่งหากการอ่านข้อมูล (หรือการพิมพ์ผลลัพธ์) สำหรับข้อมูลแต่ละหน่วย ใช้เวลาเท่ากับการประมวลผลข้อมูลแต่ละหน่วยพอดี อุปกรณ์ทั้งสองประเภทนี้ไม่ต้องรอซึ่งกันและกัน ทำให้ได้ประโยชน์ใช้สอยเต็มที่ คือร้อยละร้อย แต่ในความจริงแล้วจะเกิดความเหลื่อมล้ำ (mismatch) ของเวลาการทำงานสำหรับข้อมูลแต่ละหน่วย ความเหลื่อมล้ำนี้ ขึ้นกับสาเหตุที่สำคัญสองประการคือ อัตราความเร็วของอุปกรณ์ต่างๆ และประเภทของงานที่ต่างกัน
สำหรับสาเหตุของอัตราความเร็วของอุปกรณ์ต่างกันนั้น ไม่ว่าเครื่องคอมพิวเตอร์ประเภทใด หน่วยประมวลผลกลางจะมีความเร็วสูงกว่าหน่วยนำข้อมูลเข้า/ออกมาก แม้จะมีบัฟเฟอร์ แต่หน่วยประมวลผล ก็ยังต้องรออยู่ดี ส่วนสาเหตุประเภทของงานต่างกันนั้น หากงานที่เป็นพวกที่ใช้หน่วยนำข้อมูลเข้า/ออกมากๆ (I/O bounded) หน่วยประมวลผลกลางจะทำงานน้อย เพราะต้องรอข้อมูลจากหน่วยรับข้อมูล (หรือรอให้หน่วยแสดงผลนำผลที่ได้ไปแสดง) ในทำนองกลับกัน หากงานเป็นประเภทที่ใช้หน่วยประมวลผลกลางมากๆ (CPU bounded) ช่วงเวลาที่หน่วยประมวลผลกลางจะว่างก็ลดลง จนอาจถึงกับไม่ว่างเลย กลายเป็นว่าหน่วยนำข้อมูลเข้า/ออกต้องเป็นฝ่ายรอหน่วยประมวลผลกลาง
ในสมัยเริ่มแรกนั้น (หรือแม้แต่ในปัจจุบันก็ตาม) ความเหลื่อมล้ำระหว่างหน่วยประมวลผลกลางกับหน่วยนำข้อมูลเข้า/ออก จะออกไปในทางที่ทำให้การใช้ประโยชน์หน่วยประมวลผลกลางต่ำมาก วิธีการแก้ทางหนึ่งคือ เพิ่มความเร็วของหน่วยนำข้อมูลเข้า/ออก แต่วิธีนี้ทำได้ยาก เพราะอุปกรณ์เหล่านั้นเป็นเครื่องกลไกซึ่งมี ข้อจำกัดทางด้านความเร็วเป็นธรรมดาอยู่แล้ว จึงได้มีการนำอุปกรณ์ที่มีความเร็วสูงขึ้นอีกระดับ เช่น เทปและจานแม่เหล็กมาคั่นระหว่างหน่วยประมวลผลกลาง และหน่วยนำข้อมูลเข้า/ออก ส่วนอีกวิธีหนึ่งคือ การทำงานหลายๆ งานพร้อมกัน เพื่อไม่ให้หน่วยประมวลผลกลางต้องอยู่เฉย ขณะรอการรับข้อมูลหรือแสดงผลของงานหนึ่งงานใด ซึ่งลักษณะนี้ คือการทำมัลติโปรแกรมมิ่ง (multiprogramming) ซึ่งจะกล่าวถึงต่อไป
การทำงานแบบ Off-line
การทำงานแบบนี้เป็นวิธีการนำมาเพื่อแก้ปัญหาความเหลื่อมล้ำของความเร็ว สามารถผ่อนหนักเป็นเบาได้วิธีหนึ่ง โดยการใช้เทปแม่เหล็กมาแทนเครื่องอ่านบัตรหรือเครื่องพิมพ์ที่มีความเร็วต่ำมาก วิธีการคือการจำลองข้อมูลจากบัตรลงบนเทปแม่เหล็ก เมื่อโปรแกรมต้องการอ่านบัตร ระบบปฏิบัติการจะเปลี่ยนไปอ่านเทปให้แทน ส่วนการพิมพ์ผลก็ทำทำนองเดียวกัน โดยการพิมพ์ลงเทปแม่เหล็กก่อน แล้วนำเทปนั้นไปถ่ายออกเครื่องพิมพ์อีกที การถ่ายเทข้อมูลผ่านเทปนี้กระทำได้สองวิธีคือ ใช้เครื่องอ่านบัตรและเครื่องพิมพ์ที่ออกแบบมาเป็นพิเศษ สามารถถ่ายเทข้อมูลกับเครื่องอ่านเทปแม่เหล็กได้โดยตรง ไม่ต้องผ่านหน่วยประมวลผลกลาง ส่วนอีกวิธีหนึ่งคือ ใช้อุปกรณ์มาตรฐานปกติ แต่ใช้เครื่องคอมพิวเตอร์ขนาดเล็ก เป็นตัวถ่ายเทข้อมูล แทนที่จะใช้เครื่องใหญ่
การทำงานโดยอาศัยเทปแม่เหล็กนี้ จะต้องได้รับความช่วยเหลือจากระบบปฏิบัติการในอันที่จะให้คำสั่งรับข้อมูลหรือแสดงผล (input/output operation) ในโปรแกรมของผู้ใช้สามารถเปลี่ยนไปใช้กับอุปกรณ์ ใดๆก็ได้ ขึ้นอยู่กับความเหมาะสมในการบริหารระบบ ลักษณะการทำงานเช่นนี้เรียกว่า อิสระภาพจากอุปกรณ์ (device independence)
ข้อเสียของระบบ off-line คือ โปรแกรมจะต้องผ่านขั้นตอนมากขึ้น และในการเก็บข้อมูลลงเทปแม่เหล็ก ต้องรอให้มีหลายๆ โปรแกรมเสียก่อน จึงค่อยนำเข้าเครื่องคอมพิวเตอร์ใหญ่เสียทีหนึ่ง ทำให้ผู้ใช้ต้อง รอนานขึ้น แม้ว่าประโยชน์ใช้สอยของหน่วยประมวลผลกลางจะดีขึ้นก็ตาม
การทำงานแบบ Spooling
เมื่อเทคโนโลยีของจานแม่เหล็กได้รับการพัฒนามากขึ้น ระบบปฏิบัติการก็เริ่มหันมาใช้จานแม่เหล็กแทนเทปแม่เหล็กด้วยเหตุผลสำคัญประการหนึ่งที่เห็นได้ชัด คือ การไม่สามารถทำการประมวลผลข้อมูลในเทป ไปพร้อมๆ กับที่ถ่ายเทข้อมูลจากเครื่องอ่านบัตร ลงเทปม้วนเดียวกันนั้นได้ หลักการใช้จานแม่เหล็กมีลักษณะคล้ายกับเทปแม่เหล็ก ข้อแตกต่างที่สำคัญมีด้วยกันสองประการคือ
เนื่องจากการเข้าถึง (access) ของจานแม่เหล็กเป็นแบบตรง (direct) ไม่ใช่แบบเรียงลำดับ (sequential) อย่างเทปแม่เหล็ก จึงทำให้สามารถแยกงานออกจากกันได้ โดยสร้างตารางบ่งบอกว่าข้อมูล (หรือผลลัพธ์) ของงานใดอยู่ในส่วนใดของจานบันทึก
เมื่อการใช้จานแม่เหล็กเป็นแบบตามสาย หรือต่อตรง (on-line) หน่วยประมวลผลที่ใช้ในการถ่ายเทข้อมูลระหว่างจานและอุปกรณ์นำข้อมูลเข้า/ออก จึงต้องเป็นตัวเดียวกับที่ใช้ในการประมวลงานของผู้ใช้ หรือกล่าวอีกนัยหนึ่งคือต้องมีโปรแกรมพิเศษตัวหนึ่ง ทำงานคู่ขนานไปกับโปรแกรมของผู้ใช้ เพื่อทำการถ่ายเท ข้อมูลกับจานแม่เหล็ก จึงเกิดเป็นการทำมัลติโปรแกรมมิ่งแบบพื้นฐานขึ้น หลักการใช้จานแม่เหล็กแทนอุปกรณ์นำข้อมูลเข้า/ออกนี้ เรียกว่า spooling ซึ่งย่อมาจาก Simultaneous Peripheral Operation On-Line
ข้อดีที่สำคัญของ spooling คือความจำเป็นที่ต้องพัฒนาระบบมัลติโปรแกรมมิ่งแบบพื้นฐานขึ้น ซึ่งก่อให้เกิดความก้าวหน้าต่อวงการโดยเฉพาะทางศาสตร์ด้านระบบปฏิบัติการ ระบบนี้ทำให้สามารถเหลื่อมการประมวลผลของงานหนึ่งกับการรับข้อมูลและแสดงผล (โดยผ่านโปรแกรม spool) ของอีกงานหนึ่งได้ จุดนี้ต่างกับการใช้บัฟเฟอร์ ตรงที่การใช้บัฟเฟอร์นั้นเป็นการเหลื่อมกันระหว่างการประมวลผล และการรับและแสดงข้อมูลของโปรแกรมเดียวกัน ซึ่งก็ไม่อาจทำได้มากเท่าไรนัก ด้วยจำกัดอยู่ที่ขั้นตอนการทำงานของโปรแกรมนั้นๆ
ข้อดีอีกประการหนึ่งของ spooling คือ ลักษณะการเข้าถึงแบบตรงของจานแม่เหล็กงานที่ถูกป้อนเข้ามาแบบเรียงลำดับ สามารถถูกจัดแยกเป็นอิสระ เกิดเป็น job pool ซึ่งระบบปฏิบัติการสามารถเลือกงานเข้าประมวลผลตามความเหมาะสมได้ เช่น ตามความสำคัญของงานซึ่งกำหนดโดยผู้ใช้หรือผู้บริหารระบบ หรือตามระดับและลักษณะการใช้งานอุปกรณ์ต่างๆ ในระบบ เช่น เลือกงานที่ใช้เทป เมื่อมีตู้เทปว่าง เป็นต้น ทำให้เกิดเป็นระบบคัดเลือกงาน (job scheduling) แบบพื้นฐานขึ้น
3. ระบบมัลติโปรแกรมมิ่ง (Multiprogramming system) ระบบปฏิบัติการรุ่นที่ 2 พ.ศ. 2498-2508
แม้ว่า Spooling จะเป็นการทำงานแบบมัลติโปรแกรมมิ่งอย่างง่ายๆ โดยมีโปรแกรมวิ่งขนานกันอยู่สองโปรแกรม คือ โปรแกรม spool และโปรแกรมของผู้ใช้ (ในลักษณะการประมวลผลแบบกลุ่ม) แต่ลักษณะของโปรแกรมที่เกี่ยวข้อง ก็ยังไม่อาจใช้ประโยชน์องค์ประกอบต่างๆ ของคอมพิวเตอร์ได้เต็มที่ เหตุเพราะ
ไม่มีความคิดเห็น:
แสดงความคิดเห็น