คอมพิวเตอร์ 101 (ตอนซอฟต์แวร์)

สวัสดีครับ วันนี้ทางทีม QuTE จะพาไปทำความเข้าใจหลักการทำงานของคอมพิวเตอร์แบบ 101 อีกครั้ง

จากบทความก่อนหน้านี้ COMP101 (ตอนฮาร์ดแวร์) น่าจะพอเห็นภาพว่าคอมพิวเตอร์ฮาร์ดแวร์ทำงานได้อย่างไร ซึ่งใจความบทความที่แล้ว ที่จะสานต่อมาถึงบทความนี้ (ตอนซอฟต์แวร์) อยู่ตรงที่การทำงานภายใน CPU เพื่อแปลความหมายของโค้ตคำสั่ง (Instruction Code) ตามรูปที่ 1 แสดงให้เห็นองค์ประกอบภายใน CPU กรอบที่อยู่ขวาสุดแสดงโค้ตคำสั่ง 4 บรรทัด ที่เก็บอยู่ในหน่วยความจำภายใน CPU ตัวหนึ่ง ที่เรียกว่า Instruction Register (IR) แต่ละบรรทัดคือแต่ละคำสั่ง ซึ่งจะถูกโหลดใส่เข้าไปใน Instruction Decoder แล้วแปลเป็นชุดสัญญาณควบคุม (Control Signals) ทีละคำสั่ง โดยชุดสัญญาณควบคุมเหล่านี้ จะถูกส่งไปสั่งการให้ฮาร์ดแวร์ใน CPU ทำงานตามคำสั่งต่อไป ส่วนคำถามที่เคยถามไปแล้วก็คือ โค้ตคำสั่งทั้ง 4 บรรทัดนี้มาจากไหน ซึ่งก็ตอบแบบสั้นๆ แล้วว่า ได้มาจากการรันโปรแกรมคอมพิวเตอร์ (ซอฟต์แวร์) และบทความนี้เองจะมาอธิบายในส่วนของซอฟต์แวร์คอมพิวเตอร์ว่า โดยหลักการแล้วมันกลายมาเป็นโค้ตคำสั่งที่ใช้ในการทำงานของ CPU ได้อย่างไร แต่อย่างไรก็ดีซอฟต์แวร์คอมพิวเตอร์ ยังมีบทบาทอีกหลากหลาย ซึ่งจะอธิบายบทบาทเหล่านั้นปนๆ กันไปในบทความนี้

รูปที่ 1 องค์ประกอบใน CPU อย่างง่าย

อย่างที่ได้เห็นกันแล้วว่าคอมพิวเตอร์ฮาร์ดแวร์ทำงานได้จากการรับกลุ่มโค้ตคำสั่ง ซึ่งถ้ามนุษย์เรารู้จักโค้ตคำสั่งทุกตัว เราก็จะสามารถคุย (สั่งงาน) คอมพิวเตอร์โดยตรงด้วยโค้ตคำสั่งเหล่านั้นได้เลย แต่ต่อให้มนุษย์เราท่องโค้ตคำสั่งได้ทุกตัว ก็ยังคงเป็นเรื่องยากมากกกก..กอยู่ดี ที่จะสั่งการคอมพิวเตอร์ได้ เช่น ถ้าต้องการให้คอมพิวเตอร์เรียงเลขจากน้อยไปมาก ต้องใช้โค้ตคำสั่งใดผสมกันบ้าง เพื่อจะให้คอมพิวเตอร์เข้าใจ เพราะคอมพิวเตอร์ไม่เข้าใจภาษามนุษย์แน่ๆ ดังนั้น ถ้า สมมุติให้เรียกกลุ่มของโค้ตคำสั่งที่ใช้สั่งการคอมพิวเตอร์ ว่าภาษาเครื่อง (Machine Language) แล้ว ความท้าทายก็คือการแปลภาษามนุษย์ให้เป็นภาษาเครื่อง จากภาษามนุษย์ “เรียงลำดับเลขจากน้อยไปมาก” แปลเป็นภาษาเครื่องได้ว่า “@W#$R%&^%&DE@#$” ถูกต้อง นี่เป็นเพียงการสมมุติภาษาเครื่อง แต่ที่แน่ๆ เข้าใจยากมาก จะเห็นว่าหน้าที่นี้คล้ายกับอาชีพล่ามแปลภาษา เช่น ล่ามแปลภาษาอังกฤษเป็นภาษาไทย แต่ล่ามแปลภาษามนุษย์กับภาษาเครื่อง ต้องไม่ใช่หน้าที่ของมนุษย์อย่างเราๆ แน่นอน (จะใช้คอมพิวเตอร์แต่ละทีต้องมีล่ามมนุยษ์ ลองนึกภาพตามดูว่าลำบากแค่ไหน)

นักวิทยาศาสตร์คอมพิวเตอร์จึงค้นคว้าและพัฒนาเครื่องมือที่จะสามารถให้มนุษย์คุย (สั่งการ) กับคอมพิวเตอร์ฮาร์ดแวร์ได้ ซึ่งเครื่องมือที่ว่านั้นก็คือซอฟต์แวร์ที่ทำหน้าที่เป็นล่ามนั่นเอง อ่านดูแล้วก็ลงตัวดีทุกอย่าง แต่ไม่ง่ายอย่างที่คิด เพราะการสร้างซอฟต์แวร์ที่ว่านี้ก็ยังเป็นเรื่องยากอยู่ดี (อาจจะไม่มากกกก..กเหมือนตอนแรกก็ตาม) นักวิทยาศาสตร์คอมพิวเตอร์ก็ยังคิดค้นต่อไปอีกว่าจะหาเครื่องมืออะไรมาช่วยสร้างซอฟต์แวร์ให้ง่ายขึ้น เครื่องมือที่ว่าคือ ซอฟต์แวร์ (งงแหละ ซอฟต์แวร์สร้างซอฟต์แวร์) เข้าใจถูกแล้ว แต่ซอฟต์แวร์ที่ใช้สร้างซอฟต์แวร์มีชื่อเฉพาะว่า ซอฟต์แวร์ตัวแปลภาษา (Compiler Software) ในที่นี้ขอเรียกสั้นๆเลยว่า คอมไพเลอร์ ก่อนจะไปต่อในรายละเอียดการทำงานของคอมไพเลอร์ มาสรุปส่วนนี้สักหน่อยดังรูปที่ 2 แทนที่มนุษย์จะคุยกับคอมพิวเตอร์ด้วยภาษาเครื่อง แบบรูปที่ 2 (ก) ก็มีซอฟต์แวร์มาเป็นเครื่องมือที่ใช้ในการช่วยคุยกันระหว่างคอมพิวเตอร์กับมนุษย์ ดังรูปที่ 2 (ข) แต่การสร้างซอฟต์แวร์ก็ไม่ได้ง่ายกับคนทั่วไป อาชีพโปรแกรมเมอร์ (Programmer) จึงเกิดขึ้นมาเพื่อใช้คอมไพเลอร์สร้างซอฟต์แวร์ให้ได้ใช้งานกันง่ายๆกับผู้ใช้งานทั่วไป ดังรูปที่ 2 (ค)

รูปที่ 2(ก) ภาพแสดงความเชื่อมโยงของ ผู้ใช้งานคอมพิวเตอร์กับคอมพิวเตอร์ ด้วยหลักการต่างๆ
รูปที่ 2(ข) ภาพแสดงความเชื่อมโยงของ ผู้ใช้งานคอมพิวเตอร์กับคอมพิวเตอร์ ด้วยหลักการต่างๆ
รูปที่ 2(ค) ภาพแสดงความเชื่อมโยงของ ผู้ใช้งานคอมพิวเตอร์กับคอมพิวเตอร์ ด้วยหลักการต่างๆ

ตอนนี้เรารู้แล้วว่าคอมไพเลอร์คือซอฟต์แวร์ที่ใช้สร้างซอฟต์แวร์ เพื่อให้แยกแยะได้ชัดเจน ซอฟต์แวร์ที่ถูกสร้างขึ้นมาจะขอเรียกอีกชื่อหนึ่งไปเลยว่าซอฟต์แวร์ประยุกต์ (Application Software) หรือบางที่ก็เรียกว่า โปรแกรมประยุกต์ (Application Program) อย่างเช่น โปรแกรมประยุกต์ไมโครซอฟต์เอ็กเซล (MS-Excel) เป็นซอฟต์แวร์ที่สามารถเรียงเลขจากน้อยไปมากได้ (จริงๆแล้วสามารถทำอะไรได้เยอะกว่านี้อีกเยอะ) ด้วยการสั่งการง่ายๆจากมนุษย์ เพียงแค่ปลายนิ้วสัมผัส แน่นอนว่าโปรแกรม MS-Excel ก็ต้องสร้างมาจากคอมไพเลอร์สักยี่ห้อ แต่ไม่ว่าจะยี่ห้อไหน สิ่งหนึ่งที่ผู้สร้างโปรแกรมประยุกต์หรือที่เรียกว่าตัวเองว่าโปรแกรมเมอร์ต้องเรียนรู้คือ ภาษาคอมพิวเตอร์ (Computer Programming Language) (ง่ายกว่าเรียนภาษาเครื่องเยอะ) อย่างเช่น ภาษาซี (C)ภาษาจาวา (JAVA) ภาษาพีเอชพี (PHP) และภาษาไพธอน (Python) เป็นต้น ถ้าเราเป็นโปรแกรมเมอร์ที่มีความรู้ภาษาซี ก็ต้องหาคอมไพเลอร์ที่แปลภาษาซีเป็นโปรแกรมประยุกต์ได้มาใช้งาน ในตลาดมีให้เลือกอยู่หลายเจ้า อย่างเช่น ไมโครซอฟต์วิชวลสตูดิโอ (MS-Visual Studio) เทอโบ ซี (Turbo C) หรือ มิราเคิล ซี (Miracle C) เป็นต้น ชอบคอมไพเลอร์ยี่ห้อไหนก็ใช้ยี่ห้อนั้น แต่ไม่ว่าจะยี่ห้อไหนหรือภาษาคอมพิวเตอร์ใด ก็มีกลไกพื้นฐานในการแปลจากภาษาคอมพิวเตอร์เป็นโปรแกรมประยุกต์คล้ายๆกัน รายละเอียดกลไกที่ว่า จะอธิบายในย่อหน้าต่อๆไป

ภาษาคอมพิวเตอร์ที่ยกตัวอย่างข้างต้นคือภาษาซี คำถามคือ ถ้าเราอยากจะเขียนภาษาคอมพิวเตอร์สักตัวควรจะเรียนภาษาใด คำถามนี้ตอบตรงไปตรงมาได้ค่อนข้างยาก เพราะปัจจัยที่จะใช้พิจารณาว่าเรียนภาษาคอมพิวเตอร์ใดดีที่สุด มีอยู่หลายปัจจัย ไม่ว่าจะเป็น (1) รูปแบบการเขียน (2) ลักษณะของโปรแกรมประยุกต์ที่จะสร้าง หรือแม้กระทั่ง (3) ความรู้พื้นฐานด้านคอมพิวเตอร์ของผู้เรียน ลงรายละเอียดกันสักนิด (1) รูปแบบการเขียน ก็แบ่งเป็นสองจำพวกใหญ่ๆ Structural Programming (อย่างภาษาซี ภาษาพาสคาล และภาษา PHP) หรือ Object Oriented Programming (อย่างภาษาซีพลัสพลัส (C++) หรือภาษาจาวา) ถนัดการเขียนแบบใดก็เลือกแบบนั้น สำหรับ (2) ลักษณะของโปรแกรมประยุกต์ที่จะสร้างก็เป็นปัจจัยสำคัญต่อการเลือกใช้ภาษาคอมพิวเตอร์ เพราะถ้าจะสร้างโปรแกรมเว็บไซต์ก็ควรใช้ภาษา PHP ถ้าจะสร้างโปรแกรมคำนวณรายได้ของบริษัทก็อาจเป็นภาษาไพธอน เป็นต้น โดยถ้า (3) ผู้เรียนเข้าใจโครงสร้างการจัดการหน่วยความจำของคอมพิวเตอร์ ก็อาจเรียนภาษาซีได้ดี แต่หากไม่ก็ไปเรียนภาษาไพธอนจะดีกว่า แต่ไม่ใช่ว่าพิจารณาเพียง 3 ปัจจัยนี้ก็จะทำให้รู้ว่าเราควรจะเรียนภาษาอะไรดีที่สุด สรุปเรียนอะไรได้ก็เรียนไปเถอะ (ถ้าไม่กลัวเสียเวลา) เพราะอย่างน้อยเขียนเป็นภาษาหนึ่ง ก็จะเรียนรู้อีกภาษาหนึ่งได้เร็วขึ้น แต่ไม่ว่าจะภาษาคอมพิวเตอร์ใดก็ตาม หลักการพื้นฐานของภาษาคอมพิวเตอร์จะคล้ายๆกันหมด ซึ่งสามารถหาเรียนเรื่องเหล่านี้ได้ในวิชา Principle Language Programming

รูปที่ 3 ลำดับกลไกการแปลง Source Code เป็นภาษาเครื่อง

คราวนี้กลับมาเรื่องของกลไกการแปลจากภาษาคอมพิวเตอร์เป็นโปรแกรมประยุกต์ ถ้าไปอ่านในหลายๆตำราอาจบอกว่าเป็นการแปลภาษาคอมพิวเตอร์เป็นภาษาเครื่อง ซึ่งก็ไม่ผิด เพราะในความเป็นจริงโปรแกรมประยุกต์ก็คือกลุ่มของภาษาเครื่อง หรือบางทียังเรียกอีกแบบว่า ไบนารีโค้ต (Binary Code) ด้วยซ้ำ แต่จุดเริ่มต้นเหมือนกันหมดคือ ภาษาคอมพิวเตอร์จะถูกนำไปเขียนอยู่ในรูปไฟล์เอกสารทั่วไปโดยโปรแกรมเมอร์ มีชื่อเรียกเฉพาะของไฟล์นั้นว่า Source Code ดังแสดงในตัวอย่างด้านล่าง Source Code ภาษาซีที่ Save เป็นไฟล์ชื่อว่า HelloWorld.c

main()

{

            int x, y;               //บรรทัดนี้เป็นการกำหนดให้มีตัวแปร x กับ y เป็นเลขจำนวนเต็ม

            x = 2;                 //บรรทัดนี้สั่งให้ตัวแปร x มีค่าเท่ากับ 2

            y = x+10;             //บรรทัดนี้เป็นการนำค่าในตัวแปร x บวกกับ 10 แล้วเก็บไว้ในตัวแปร y

}

ไม่ว่าจะเป็นภาษาคอมพิวเตอร์ใด ก็จะมีกฎเกณฑ์ และ Grammar (Syntax) เฉพาะของแต่ละภาษา (ก็เหมือนภาษามนุษย์แหละ..ว่าไหม) เนื้อหาของเราไม่ได้อยู่ที่ว่าภาษาซีมี Syntax เป็นอย่างไร (ศึกษาด้วยตนเองได้จากหนังสือการเขียนโปรแกรมด้วยภาษาซี) แต่อยู่ที่ว่าเมื่อได้ Source Code ที่โปรแกรมเมอร์เขียนขึ้นมาแล้ว ต่อไปมันจะกลายเป็นภาษาเครื่องได้อย่างไร รูปที่ 3 แสดงลำดับการแปลงจาก Source Code ไปเป็นภาษาเครื่อง (ไปเป็นโปรแกรมประยุกต์) อาจจะยากสักนิด เราลองมาดูทีละขั้นตอนไปด้วยกัน ขั้นแรก Source Code จะถูกนำไปประมวลขั้นต้นก่อนเรียกว่า Pre-processing เพื่อเตรียมความพร้อมโค้ต มีหลายอย่างที่ต้องทำในขั้นตอนนี้ เช่น การอ่านไฟล์ Source Code อื่นๆที่ถูกระบุว่าให้แปลงไปเป็นภาษาเครื่องรวมกัน เป็นต้น แล้วผลที่ได้คือโค้ตที่อยู่ในรูปแบบพร้อมจะแปลงไปเป็น Assembly Code ซึ่งขั้นตอนนี้เรียกว่า Compiling ในอดีตเคยมองว่า คอมไพเลอร์ทำแค่ส่วนนี้ (แต่ในปัจจุบัน คอมไพเลอร์ทำทั้ง 3 ขั้นตอนในคราวเดียว) ซึ่งการแปลงเป็น Assembly Code นี้เอง รายละเอียดภายในก็ยังยิบย่อยสุดๆ (สามารถหาเรียนได้ในวิชา Compiler Design) ขั้นตอนสุดท้ายคือการแปลง Assembly Code ให้กลายเป็น Machine Code หรือแปลงเป็นโปรแกรมประยุกต์นั่นแหละ ทีนี้ก็จบทั้งสามขั้นตอน แต่ที่น่าจะงงหน่อย ก็คงเป็นคำว่า Assembly Code (Language) หรือภาษาแอสเซมบลี เป็นภาษาระดับต่ำที่ถูกสร้างขึ้นมาพร้อมกับตอนสร้าง CPU แต่ละยี่ห้อแต่ละรุ่น โดยวิศวกรคอมพิวเตอร์ก็ต้องผลิต Software Assembler ขึ้นมาด้วย เพื่อใช้ในการแปลงจากภาษาแอสเซมบลีไปเป็นภาษาเครื่อง ซึ่งทั้งภาษาแอสเซมบลีและภาษาเครื่องเอง ก็มีความคล้ายคลึงกันพอสมควร

อยากอธิบายลงรายละเอียดของภาษาแอสเซมบลีและภาษาเครื่องเหลือเกิน (สามารถเรียนรู้เพิ่มเติมได้ในวิชา Computer Architecture) แต่เพื่อไม่ให้ซับซนไปกว่านี้ เอาเป็นว่าข้างต้นเรารู้แล้วว่าจาก Source Code แปลงเป็นภาษาเครื่องได้ ซึ่งก็หมายความว่าแปลงเป็นโค้ตคำสั่งที่โหลดเข้าไปทำงานใน CPUหรือ อีกนัยหนึ่งก็คือ ตอนนี้เราเห็นภาพทั้งหมดแล้วว่า คอมพิวเตอร์ฮาร์ดแวร์ทำงานได้ โดยรวมมือกับซอฟต์แวร์ที่ถูกเขียนขึ้นมา

แต่การที่จะมีแต่ซอฟต์แวร์ประยุกต์เพียงอย่างเดียวที่นำมาใช้ในคอมพิวเตอร์มันยังไม่พอ ยังต้องมีซอฟต์แวร์อีกประเภทหนึ่งเรียกว่า ซอฟต์แวร์ระบบซึ่งซอฟต์แวร์ระบบเป็นซอฟต์แวร์ประเภทหนึ่งที่มาควบคุมการทำงานของซอฟต์แวร์ประยุกต์ หรือควบคุมการทำงานของฮาร์ดแวร์บางตัวที่จำเป็นต้องควบคุม สำหรับซอฟต์แวร์ระบบเองก็มีหลายอย่าง แต่ที่จะกล่าวถึงในบทความนี้ เป็นซอฟต์แวร์ระบบที่สำคัญมาก ที่ทำให้ซอฟต์แวร์ประยุกต์หลายตัวสามารถทำงานได้พร้อมๆกัน ในเครื่องคอมพิวเตอร์เครื่องเดียวกันได้ โดยไม่แย้งกันจนมั่วไปหมด ซึ่งซอฟต์แวร์ระบบที่ว่านั้นก็คือ ซอฟต์แวร์ระบบปฏิบัติการ (Operating System: OS) งั้นเรามาเริ่มรู้จักกับ OS กันดีกว่า อย่างที่ทราบกันว่า OS คือซอฟต์แวร์ระบบที่ใช้ควบคุมการทำงานของซอฟต์แวร์ประยุกต์ เมื่อซอฟต์แวร์ประยุกต์มีหลายตัวที่จะขอเข้าใช้งานฮาร์ดแวร์พร้อมกัน ต้องเกิดคำถามแน่ว่าจะทำอย่างไรให้มีระบบระเบียบ คำตอบนั้นง่ายมาก ก็คือต้องมีการบริหารจัดการที่ดี ดังนั้น OS ก็ต้องบริหารด้วยการกำหนดนโยบายการเข้าใช้งานฮาร์ดแวร์นั้นๆ และต้องคอยจัดการให้เป็นไปตามนโยบายดังกล่าวด้วย (ดังนั้นวิชาที่ว่าด้วย Computer Organization and Management ก็คือวิชาที่ว่าด้วย OS นั้นเอง) ทีนี้ซอฟต์แวร์ประยุกต์ไม่ได้ขอเข้าใช้คอมพิวเตอร์ฮาร์ดแวร์เฉพาะ CPU เพียงอย่างเดียว ยังมีหน่วยความจำ (ที่ชอบเรียกกันว่า RAM) และอุปกรณ์ I/O อื่นๆอีก ดังนั้น OS ก็ต้องบริหารจัดการทั้งหมดนี้แหละ แต่เพื่อให้พอที่เข้าใจการบริหารจัดการของ OS บทความนี้ขอยกตัวอย่างเฉพาะการบริหารจัดการกับ CPU อย่างเดียว ถ้าลงรายละเอียดฮาร์ดแวร์ทุกอย่างที่ OS บริหารจัดการ ก็คงเยอะเกินไปสำหรับ COMP101 แล้วถ้ามีโอกาสจะเขียนบทความเกี่ยวกับ OS ให้ได้อ่านกัน

 

ซอฟต์แวร์ระบบปฏิบัติการหรือ OS ที่มีใช้กันอยู่ในปัจจุบันก็มีหลากหลายยี่ห้อ อย่างเช่น ไมโครซอฟต์วินโดว์ (MS-Windows) ลินุกซ์ (Linux-SUSE หรือ Linux-Ubuntu) เป็นต้น ไม่ว่าจะยี่ห้อไหนก็ต้องทำหน้าที่บริหารจัดการ (ดังที่กล่าวไว้ย่อหน้าก่อน) เหมือนกันหมด แต่จะต่างกันก็ตรงวิธีการจัดการ หรือนโยบายการบริหาร ที่จะอธิบายต่อไปเป็นตัวอย่างการบริหารจัดการ CPU (แต่ไม่ได้บอกว่าเป็นของยี่ห้อใดแบบเจาะจง) มาเข้าเรื่องกันดีกว่า ต่อไปนี้ขอเรียกโปรแกรมประยุกต์ว่า โปรแกรมเฉยๆ (จะได้สั้นลง) ถ้า OS กำหนดนโยบายบริหารการเข้าใช้งาน CPU ของโปรแกรมว่า โปรแกรมใดมาก่อนใช้ก่อน (First-Come First-Serve: FCFS) ตามรูปที่ 4 (ก) แสดงแผนภาพของสถานการณ์การจัดการด้วยนโยบาย FCFS มี 3 โปรแกรมมาใช้งาน CPU คือ โปรแกรม A, B และ C โดยแต่ละโปรแกรมเข้ามาขอใช้งาน CPU ตอนวินาทีที่ 0, 0 และ 10 ตามลำดับ จะเห็นว่า ก็ดูสงบดี แต่จริงๆแล้ว ประสิทธิภาพแย่ คำถามคือวัดจากอะไรว่าแย่ คำตอบคงไม่ใช่ว่าผู้ใช้งานบ่นว่าช้า แต่ในทีนี้มีตัววัดที่ชัดเจนกล่าวคือ Turnaround Time (TT)

รูปที่ 4 ภาพแสดงการเข้าใช้งาน CPU ของโปรแกรม A, B และ C (ก:ซ้าย) First-Come First-Serve: FCFS (ข:ขวา) Shorted Job First: SJF

ทีนี้มาลองคำนวณค่าตัวชี้วัด TT จากสถานการณ์ในรูปที่ 4 โดย TT เท่ากับ เวลาที่เสร็จ (Completed Time: CT) ลบ เวลาเข้ามาทำงาน (Arrival Time: AT) เขียนเป็นสมการสักนิดได้ว่า TT = CT – AT สรุป TT ของโปรแกรม A, B และ C ดังตารางด้านล่าง จะเห็นได้ว่าค่าเฉลี่ยของ TT = ((100-0) + (110-0) + (120-10))/3 = 106.67 วินาที

แล้วถ้าเราเปลี่ยนนโยบายการบริหารนี้จาก “โปรแกรมใดมาก่อนใช้ก่อน” เป็น “โปรแกรมไหนเสร็จเร็วกว่าให้ทำก่อน (Shorted Job First: SJF)” สถานการณ์ก็จะเปลี่ยนไป ดังแสดงในรูปที่ 4 (ข) ค่า TT ก็เปลี่ยนไปด้วย ดังตารางด้านล่าง ค่าเฉลี่ยของ TT = (120+10+10)/3 = 46.67 วินาที

จะเห็นได้ว่าถ้าใช้นโยบาย SJF จะให้ค่า TT เฉลี่ยดีกว่า FCFS งั้นทุก OS ก็ใช้นโยบาย SJF ให้หมดเลยแล้วกัน คิดว่าดีไหม คำตอบคือยังมีนโยบายอื่นที่ดีกว่านี้ อีกทั้งตัวชี้วัดก็ไม่ได้มีแค่ Turnaround Time (TT) ยังมีตัวอื่นๆอีก ซึ่งแต่ละนโยบายก็จะให้ค่าตัวชี้วัดประสิทธิภาพที่ดีมากน้อยแตกต่างกันไป มาถึงจุดนี้คงพอเห็นภาพว่า OS บริหารอย่างไร นี่ยังไม่ได้กล่าวถึงเทคนิคการจัดการของ OS ด้วย ว่า OS ทำอย่างไรจึงทำให้เป็นไปตาม นโยบายที่กล่าวมาข้างต้นได้ แต่สำหรับบทความนี้ ขอจบเรื่อง OS ไว้เท่านี้ก่อน แต่ก่อนจากเรื่อง OS ไป อยากกล่าวถึงประเด็นหนึ่งว่า OS ก็เป็นเพียงซอฟต์แวร์ตัวหนึ่ง แล้วจะทำอย่างไรให้ OS มีอำนาจควบคุมนโยบายดังกล่าวกับซอฟต์แวร์ประยุกต์ตัวอื่นๆ ลองคิดเปรียบเทียบว่า อาจารย์ก็เป็นคน นักเรียนก็เป็นคน แล้วมีกลไกอะไรให้นักเรียนเชื่อฟังอาจารย์ OS ได้อำนาจในการควบคุมโปรแกรมต่างๆจากไหน แล้วจะเขียนให้อ่านกันในเรื่องของ OS

มาทิ้งท้ายบทความของ COMP101 กัน เรารู้จักแล้วว่าทั้งฮาร์ดแวร์ (ตอนที่แล้ว) และซอฟต์แวร์ ทั้งสองสิ่งนี้ร่วมกันทำงานจนเราเห็นเป็นรูปเป็นร่าง เรียกว่าคอมพิวเตอร์นั้นไม่ได้ง่ายเลย ใช้เวลาพัฒนามาก็หลายสิบปี แต่ถ้าคิดดีๆ มันเป็นช่วงเวลาที่สั้นมาก กับการมาของอารยธรรมมนุษย์เรา จริงๆต้องเรียกว่าก้าวกระโดดเลยก็ว่าได้ ดังนั้นเทคโนโลยีที่ได้รู้จักกันไปในบทความ 2 บทความนี้ อีกไม่กี่สิบปี อาจกลายเป็นเพียงประวัติศาสตร์หน้าหนึ่งเท่านั้นว่าคอมพิวเตอร์เราเคยทำงานกันแบบนี้ ผู้เขียนศึกษามาทางคอมพิวเตอร์หลายปี ติดตามข่าวการพัฒนาเทคโนโลยีของบริษัทไอทียักษ์ใหญ่มาก็เยอะ มีความมั่นใจมากว่า ในไม่ช้าคอมพิวเตอร์ที่เรารู้จักกัน จะถูกเรียกว่า Classical Computer กันได้อย่างเต็มปากแน่นอน

ชวนคิด

  • ถ้าเรามีภาษาเครื่องแล้วจะแปลงกลับมาเป็นภาษาคอมพิวเตอร์ได้ไหม
  • จะมีไหม ซอฟต์แวร์ที่เขียนซอฟต์แวร์ใหม่ขึ้นมาเอง โดยมนุษย์ไม่ได้ช่วยเขียนเลย
  • ถ้ามีหลายโปรแกรมประยุกต์กำลังใช้คอมพิวเตอร์ที่มีหน่วยความจำอย่างจำกัดจะเกิดปัญหาใดบ้าง

 

เรียบเรียง

ราชวิชช์ สโรชวิกสิต (QuTE Co-Founder)

วิศวกรรมคอมพิวเตอร์ มหาวิทยาลัยเทคโนโลยีพระจอมเกล้าธนบุรี(มจธ)