วันอังคารที่ 21 ตุลาคม พ.ศ. 2551

ตอบคำถามความรู้เบื้องต้นเกี่ยว่กับ UNIX


**ความเป็นมาของระบบปฏิบัติการ UNIX**

ย้อนหลังไปในช่วงทศวรรษที่ 1940 และ 1950 เครื่องคอมพิวเตอร์ทุกเครื่องที่มีในโลกอาจกล่าวได้ว่าเป็นเครื่องคอมพิวเตอร์ส่วนบุคคล เนื่องจากระบบปฏิบัติการของเครื่องอนุญาตให้ผู้ใช้ใช้งานเครื่องได้เพียงครั้งละคนเดียว ดังนั้นผู้ใช้ที่มีความประสงค์จะใช้เครื่องต้องทำการจองเวลาใช้เครื่องไว้ล่วงหน้า เมื่อถึงเวลาที่จองไว้ผู้ใช้นั้นจะได้เครื่องคอมพิวเตอร์นั้นแต่เพียงผู้เดียวตลอดระยะเวลาที่จองไว้ ผู้ใช้อื่นไม่สามารถใช้งานเครื่องอีกได้ และโดยทั่วไปในระหว่างการใช้งาน ผู้ใช้ไม่ได้ใช้งานหน่วยประมวลผลกลางเต็มกำลัง เพราะอาจต้องหยุดคิดแก้ปัญหา หรือป้อนข้อมูลเข้าเครื่องซึ่งใช้ความสามารถของเครื่องน้อยมาก จึงกล่าวได้ว่าผู้ใช้งานนั้นไม่ได้ใช้เครื่องจนเต็มขีดความสามารถตลอดเวลา เนื่องจากระบบคอมพิวเตอร์ในยุคนั้นมีราคาแพงจึงเกิดแนวความคิดที่จะสร้างระบบปฏิบัติการที่ผู้ใช้สามารถใช้งานเครื่องได้เต็มกำลังตลอดเวลาโดยการให้ผู้ใช้แต่ละคนเตรียมงานไว้ล่วงหน้าโดยใช้บัตรเจาะรู เมื่อมีปริมาณของงานมากถึงระดับหนึ่งจึงจะเดินเครื่องและทำการอ่านงานเหล่านั้นเข้าไปประมวลผลต่อเนื่องกันไป ระบบปฏิบัติการเช่นนี้เรียกว่าระบบการประมวลผลแบบ batch ระบบนี้ช่วยให้ใช้งานเครื่องได้โดยมีประสิทธิภาพมากขึ้นกว่าเดิม แต่อย่างไรก็ดีสำหรับผู้เขียนโปรแกรมแล้วระบบเช่นนี้ยังมีการตอบสนองไม่ดีนัก กล่าวคือเมื่อผู้เขียนโปรแกรมนำโปรแกรมต้นฉบับซึ่งอยู่ในรูปของบัตรเจาะรูไปส่งที่ห้องเครื่อง แล้วต้องรอเป็นระยะหนึ่งกว่าจะทราบผลการดำเนินการภายใต้ภาวะการณ์เช่นนี้การตรวจสอบและแก้ไขโปรแกรม (debugging) จึงเป็นกระบวนการที่กินเวลามาก หากผู้เขียนโปรแกรมลืมใส่เครื่องหมายวรรคตอนเพียงตัวเดียวผู้เขียนโปรแกรมต้องใช้เวลานานหลายชั่วโมงกว่าทราบความผิดพลาดนั้นและทำการแก้ไข ทำให้การพัฒนางานล่าช้า ดังนั้นผู้เขียนโปรแกรมโดยทั่วไปจึงต้องการระบบปฏิบัติการที่มีการตอบสนองเร็วเพื่อให้สามารถตรวจสอบแก้ไขโปรแกรมได้ดียิ่งขึ้น
จากความต้องการดังกล่าวนี้เองจึงมีการคิดระบบปฏิบัติการแบบ timesharing ซึ่งช่วยให้ผู้ใช้หลายคนสามารถใช้เครื่องในเวลาเดียวกันได้ โดยอาศัยการแบ่งเวลาของหน่วยประมวลผลกลางให้แก่ผู้ใช้เวียนกันไป ระบบ timesharing ที่ประสบความสำเร็จเกิดขึ้นที่ Dartmouth College และที่ Massachusetts Institute of Technology (M.I.T.) โดยระบบของ Dartmouth College เป็นระบบปฏิบัติการที่ใช้สนับสนุนการเขียนโปรแกรมด้วยภาษา BASIC เพียงอย่างเดียวและประสบความสำเร็จในการใช้งานทางธุรกิจในระยะหนึ่ง ส่วนระบบปฏิบัติการของ M.I.T. มีชื่อเรียกว่าระบบ CTSS เป็นระบบที่ได้รับการออกแบบเพื่อให้เป็นระบบปฏิบัติการเอนกประสงค์ และประสบความสำเร็จสูงกว่าโดยเฉพาะในกลุ่มนักวิทยาศาสตร์ หลังจากระบบ CTSS ประสบความสำเร็จแล้วไม่นาน M.I.T., Bell Labs และบริษัท General Electric ซึ่งเป็นบริษัทผู้ผลิตคอมพิวเตอร์ได้ร่วมกลุ่มกันเพื่อทำการวิจัยและออกแบบระบบปฏิบัติการแบบ timesharingใหม่ให้มีความสามารถมากขึ้นและกำหนดชื่อระบบปฏิบัติใหม่เป็น MULTICS (MULTiplexed Information and Computing Service)
ระบบปฏิบัติการ MULTICS ไม่ทำงานตามที่คณะผู้ทำงานหวังไว้ เนื่องจากระบบได้รับการออกแบบให้สามารถรองรับผู้ใช้ได้หลายร้อยคนบนเครื่องคอมพิวเตอร์ที่มีหน่วยประมวลผลกลางซึ่งมีความสามารถสูงกว่าหน่วยประมวลผลกลางแบบ 80286 ในปัจจุบันเพียงเล็กน้อย อย่างไรก็ดีแนวความคิดดังกล่าวนี้เป็นเรื่องที่เป็นไปได้ในยุคนั้นเนื่องจากเป็นระยะเริ่มต้นของการใช้คอมพิวเตอร์ โปรแกรมที่เขียนขึ้นใช้งานส่วนใหญ่เป็นโปรแกรมขนาดเล็ก สาเหตุที่แท้จริงของความล้มเหลวของโครงการนี้มีมากมายเช่นในการออกแบบระบบกำหนดให้มีการใช้ภาษาระดับสูงคือภาษา PL/I ซึ่งเป็นภาษาที่อยู่ระหว่างการพัฒนาและมีการพัฒนาล่าช้ากว่ากำหนดการที่กำหนดไว้มากและมีข้อบกพร่องมากมาย นอกจากนี้แล้วยังมีการนำความคิดที่ล้ำสมัยหลายอย่างมาใช้ในขณะที่เทคโนโลยียังไม่พร้อม ปัจจัยเหล่านี้ส่งผลให้โครงการนี้ไม่ประสบความสำเร็จเช่นเดียวกับการพัฒนางานของ Charles Babbage ในสมัยศตวรรษที่ 19เมื่อสิ้นระยะแรกของโครงการ ห้องปฏิบัติการ Bell ถอนตัวออกจากโครงการ ทำให้นักวิจัยคนหนึ่งในโครงการนี้คือ Ken Thompson ซึ่งว่างงานอยู่เริ่มหาแนวทางในการทำวิจัยต่อไปในที่สุดตัดสินใจที่จะทำการเขียนระบบปฏิบัติการ MULTICS แบบย่อส่วนขึ้นโดยใช้ภาษา Assembly โดยใช้เครื่องมินิคอมพิวเตอร์รุ่น PDP-7 ซึ่งว่างอยู่ในขณะนั้น ระบบปฏิบัติการของ Thompson สามารถทำงานได้เป็นอย่างดี ระบบปฏิบัติการนี้นักวิจัยอีกคนหนึ่งของห้องปฏิบัติการ Bell คือ Brian Kernighan ตั้งชื่อให้ว่า UNICS หรือ Uniplexed Information and Computing Service เพื่อเป็นการล้อเลียนโครงการ MULTICS และต่อมาได้รับการเปลี่ยนชื่อเป็น UNIX

http://nooma511.exteen.com/20080923/unix



**คุณสมบัติของระบบ**

UNIXSoftwere tool- โปรแกรมบนUNIX จะแบ่งตัวเองออกเป็นส่วนย่อยๆและสามารถใช้งานส่วนย่อยเหล่านั้นร่วมกัน ระหว่างหลายๆโปรแกรมได้portability- เนื่องจาก UNIX สามารถนำไปใช้กับเครื่องแบบต่างๆได้มากมาย โปรแกรมที่ใช้งานบนUNIXจะสามารถนำไปใช้ได้ด้วยเช่นเดียวกันflexibility- UNIX จะมีความยืดหยุ่นในการใช้งานสูง สามารถนำไปใช้งานกับงานเล็กๆหรืองานใหญ่ๆก็ได้power- สามารถทำงานที่ซับซ้อนได้ดี และมีความสามารถในด้านต่างๆมากกว่าระบบปฏิบัติการอื่นๆmulti – user & multitasking- สามารถมีผู้ใช้งานได้ทีละหลายๆคน และทำงานหลายๆอย่างพร้อมกันElegance- หลักการทำงานของส่วนต่างๆจะเหมือนกันดังนั้นเมื่อผู้ใช้ทำงานส่วนหนึ่งได้ ก็จะเรียนรู้และใช้งานส่วนอื่นๆได้ง่ายnetwork orientation- UNIXเป็นระบบปฏิบัติการที่สนับสนุนการใช้งานเครือข่ายโดยเฉพาะเครือข่าย TCP/IP ซึ่งใช้ในระบบ Internet
http://q5a.blogspot.com/2008/09/blog-post_05.html


**โครงสร้างของระบบปฏิบัติการ UNIX**

ระบบปฏิบัติการ UNIX มีลักษณะโครงสร้างคล้ายระบบปฏิบัติการทั่วไปคือแยกการทำงานออกเป็นชั้นโดยในระดับล่างสุดเป็น hardware ประกอบด้วยหน่วยประมวลผลกลาง, หน่วยความจำ, จานแม่เหล็ก, จอภาพ และอุปกรณ์อื่นๆ ชั้นถัดมาเป็นระบบปฏิบัติการ UNIX ซึ่งมีหน้าที่ในการควบคุมและจัดการ process หน่วยความจำ ระบบแฟ้ม และhardware อื่นๆ รวมถึงการให้บริการต่างๆแก่ระดับชั้นที่อยู่เหนือขึ้นไปและสามารถให้บริการผู้ใช้โดยตรงผ่านการบริการที่เรียกว่า system call การทำงานของระบบปฏิบัติการในชั้นนี้เรียกว่า kernel mode ส่วนการทำงานของชั้นที่อยู่เหนือขึ้นไปทั้งหมดเรียกว่า user mode ชั้นที่อยู่ถัดจากระบบปฏิบัติการขึ้นไปเป็นชั้นที่เรียกว่า standard library ซึ่งเป็นที่รวมของโปรแกรมย่อยสำหรับบริการของระบบปฏิบัติการที่โปรแกรมผู้ใช้สามารถเรียกใช้ได้ เช่น open, close, read, write และ fork เป็นต้น ชั้นต่อไปเป็นชั้นของโปรแกรมอรรถประโยชน์ (utility) ในระบบ เช่น shell ตัวแปลภาษาเป็นต้น และชั้นสุดท้ายเป็นชั้นของผู้ใช้ (user)
จากโครงสร้างดังกล่าวแล้วเมื่อผู้ใช้ต้องการเรียกใช้บริการของระบบปฏิบัติการ (system call) จากโปรแกรมภาษา Assembly ผู้ใช้ต้องกำหนดค่า arguments ที่ต้องการลงใน register หรือใน stack ที่กำหนดไว้สำหรับ system call นั้นๆ จากนั้นจึงใช้คำสั่ง trap เพื่อเปลี่ยนภาวะการทำงานของโปรแกรมจาก user mode ไปเป็น kernel mode เพื่อทำงานตามความต้องการ สำหรับภาษาระดับสูงเช่น C ซึ่งไม่สามารถใช้คำสั่ง trap ได้โดยตรง ต้องมีการสร้าง library สำหรับเรียกใช้งาน system call เหล่านี้ โดยกำหนดให้มีโปรแกรมย่อยหนึ่งโปรแกรมต่อ system call หนึ่งตัว โปรแกรมย่อยเหล่านี้เขียนขึ้นด้วยภาษา Assembly และสามารถเรียกใช้ได้จากภาษา C เสมือนหนึ่งเป็นโปรแกรมย่อยที่เขียนขึ้นด้วยภาษา C เมื่อผู้ใช้ต้องการใช้งาน system call ผู้ใช้จะทำการเรียกใช้ได้เช่นเดียวกับการเรียกใช้ฟังก์ชันทั่วไปในภาษา C เช่นการเรียกใช้ READ system call โปรแกรมภาษา C จะทำการเรียกใช้ โปรแกรมย่อย READ ที่กำหนดไว้ใน library บริการหรือ system call เหล่านี้มีการกำหนดไว้เป็นมาตรฐานโดย POSIX เพื่อให้การให้บริการของระบบปฏิบัติการ UNIX ที่มีการพัฒนาจากผู้ผลิตต่างๆ มีการให้บริการแบบเดียวกันและมีวิธีการเรียกเหมือนกัน
นอกจากตัวระบบปฏิบัติการและ system calls แล้ว ระบบปฏิบัติการ UNIX ทุกระบบยังมีโปรแกรมอรรถประโยชน์ (utility) จำนวนมาก โปรแกรมเหล่านี้ส่วนหนึ่งเป็นไปตามมาตรฐาน POSIX 1003.2 และอีกส่วนหนึ่งมีความแตกต่างกันออกไปตามผู้ผลิตและรุ่นระบบปฏิบัติการ โปรแกรมเหล่านี้ได้แก่โปรแกรมสำหรับติดต่อกับผู้ใช้เรียกว่า command preprocessor หรือ shell โปรแกรมตัวแปลภาษา (compiler) โปรแกรมสำหรับใช้พิมพ์เอกสารทั่วไป (editor) โปรแกรมสำหรับดำเนินการกับข้อความ (text processing program) และโปรแกรมสำหรับดำเนินการกับแฟ้ม หรือกล่าวอีกนัยหนึ่งคือเป็นโปรแกรมทั่วไปที่ผู้ใช้เรียกใช้ในระบบนั่นเอง
จากที่ได้กล่าวมาแล้วจะเห็นได้ว่าการเชื่อมต่อระหว่างผู้ใช้และระบบปฏิบัติการ UNIX มีสามแบบคือ การเชื่อมต่อผ่าน system call การเชื่อมต่อผ่าน library และการเชื่อมต่อผ่านโปรแกรมอรรถประโยชน์ เนื่องจากผู้ใช้ทั่วไปมีการเชื่อมต่อกับระบบปฏิบัติการส่วนใหญ่ผ่านโปรแกรมอรรถประโยชน์ จึงทำให้ผู้ใช้ทั่วไปคิดว่าโปรแกรมอรรถประโยชน์เหล่านี้คือระบบปฏิบัติการ UNIX ซึ่งโดยความเป็นจริงแล้วเป็นโปรแกรมส่วนนี้ไม่ใช่ระบบปฏิบัติการและสามารถเปลี่ยนแทนได้โดยง่าย เช่นในระบบปฏิบัติการ UNIX ที่สนับสนุนการติดต่อกับผู้ใช้แบบรูปภาพ (Graphic User Interface) โดยใช้ระบบ X-Window สามารถนำโปรแกรมส่วนของการติดต่อกับผู้ใช้ด้วย mouse เพิ่มเติมเข้าในระบบหรือเปลี่ยนแทนโปรแกรมการติดต่อกับผู้ใช้ด้วยแป้นพิมพ์ โดยไม่ต้องมีการเปลี่ยนแปลงตัวระบบปฏิบัติการแต่อย่างใด ความยืดหยุ่นเช่นนี้เองที่ทำให้ระบบปฏิบัติการ UNIX เป็นระบบปฏิบัติการที่ได้รับความนิยมแพร่หลาย และเป็นระบบปฏิบัติที่คงอยู่ได้ตลอดเวลาถึงแม้ว่าเทคโนโลยีจะเปลี่ยนแปลงไปเพียงใดก็ตาม


http://www.compsci.buu.ac.th/~seree/lecture/LinuxDoc/unix1.doc


**shell**

shell เป็นคำของ UNIX สำหรับการอินเตอร์เฟซ ระหว่างผู้ใช้กับระบบปฏิบัติการ shell เป็นชั้นของโปรแกรมที่เข้าใจ และประมวลผลคำสั่งที่ผู้ใช้ป้อนเข้า ในบางระบบ shell ได้รับการเรียกว่า command interpreter โดยทั่วไป shell หมายถึง การอินเตอร์เฟซกับไวยากรณ์คำสั่ง (เปรียบเทียบกับระบบปฏิบัติการ DOS และ "c:\>" คือ prompts และคำสั่งผู้ใช้ เช่น " dir" และ "edit" ) shell เป็นชั้นนอกของระบบปฏิบัติการ ดังนั้น จึงแตกต่างจาก "kernel" ซึ่งเป็นชั้นใจของระบบปฏิบัติการ หรือแกนของการบริการ

http://www.widebase.net/knowledge/itterm/it_term_desc.php?term_id=shell



**ระบบไฟล์และไดเรคทอรีบน UNIX **

UNIX มองทุกอย่างเป็นไฟล์หมด แม้แต่หน่วยความจำ (/dev/mem) ซีดีรอม (/dev/cdrom) เม้าส์ (dev/mouse) โมเด็ม (/dev/modem) ระบบไฟล์และไดเรคทอรีบนUNIX มีโครงสร้างแบบต้นไม้ (tree structure) โดยไดเรคทอรีนอกสุด คือ ไดเรคทอรีราก (root directory) ใช้ / เป็นตัวแทนครับ ซึ่งก็จะมีไดเรคทอรีย่อยแตกแขนง ออกไปอีกเช่น
/usr /local /lib /etc /bin
ในแต่ละไดเรคทอรีบรรจุไฟล์และไดเรคทอรีย่อยลงไปอีกเช่นใน /usr จะมี local bin

ชื่อไดเรคทอรีแบบนี้จะมีความหมาย ก็ต่อเมื่อ เรารู้ว่าไดเรคทอรีนอกก่อนคืออะไร วิธีเรียกชื่อแบบนี้ถูกเรียกว่า relative pathname แต่ถ้าหากเราใช้ /usr/local หรือ /usr/bin แทน local หรือ bin เราก็จะทราบโครงสร้าง tree structure ที่แท้จริงของไดเรคทอรีนี้ วิธีการเรียกแบบนี้เรียก absolute pathname ไดเรคทอรีที่ผู้ใช้ล็อกอินเข้าไปเรียกว่า home directory ซึ่งก็ขึ้นกับผู้บริหารระบบว่าจะให้ไปอยู่ที่ไหน

http://wiki.nectec.or.th/ntl/Main/Unix-doc

ไม่มีความคิดเห็น: