ฉันมักเจอคำว่า "เหมือนยูนิกซ์" ในเว็บไซต์หลายแห่ง
ไม่มีมาตรฐาน มันเป็นเพียงในลักษณะที่มันทำงาน
แต่ถ้าฉันต้องพัฒนาเคอร์เนลตั้งแต่เริ่มต้นอะไรจะทำให้มันพิจารณาว่า "เหมือนยูนิกซ์"?
โดยพื้นฐานแล้วอะไรคือสิ่งที่ทำให้โค้ดที่เขียนเหมือน Unix?
ฉันมักเจอคำว่า "เหมือนยูนิกซ์" ในเว็บไซต์หลายแห่ง
ไม่มีมาตรฐาน มันเป็นเพียงในลักษณะที่มันทำงาน
แต่ถ้าฉันต้องพัฒนาเคอร์เนลตั้งแต่เริ่มต้นอะไรจะทำให้มันพิจารณาว่า "เหมือนยูนิกซ์"?
โดยพื้นฐานแล้วอะไรคือสิ่งที่ทำให้โค้ดที่เขียนเหมือน Unix?
คำตอบ:
ไม่มีมาตรฐาน มันเป็นเพียงในลักษณะที่มันทำงาน
ฉันเชื่อว่าระบบปฏิบัติการ "เหมือนยูนิกซ์" ส่วนใหญ่ใช้ความพยายามอย่างจริงจังในการปฏิบัติตามมาตรฐาน POSIXซึ่งดูแลโดย Open Group ซึ่งเป็นผู้ควบคุมข้อกำหนดUNIX แบบเดี่ยวซึ่งกำหนด "UNIX ที่แท้จริง" อดีตคือแก่นของภายหลัง
จึงมีในความเป็นจริงมาตรฐานที่กำหนดปฏิบัติการของยูนิกซ์เช่นระบบปฏิบัติการ ดูรายการ "สมบูรณ์" และ "ส่วนใหญ่" ระบบปฏิบัติการที่เข้ากันได้ในตอนท้ายของบทความ wikipedia บน POSIX
มีเหตุผลบางอย่างที่ชัดเจนโดยเฉพาะอย่างยิ่งลินุกซ์อาจไม่ได้รับการพิจารณาอย่างสมบูรณ์ตามมาตรฐานหรือรับรองโดย Single Unix Specification (SUS) แต่สิ่งเหล่านี้ไม่ใช่เพราะระบบลินุกซ์ที่ให้มานั้นไม่สอดคล้องกับมัน บทความวิกิพีเดียสรุปข้อมูลจำเพาะด้วยวิธีนี้:
SUSv3 มีทั้งหมด 3700 หน้าซึ่งแบ่งออกเป็นสี่ส่วนหลัก:
คำจำกัดความฐาน (XBD) - รายการคำจำกัดความและข้อกำหนดที่ใช้ในข้อกำหนดและรายการของไฟล์ส่วนหัว C ซึ่งต้องจัดทำโดยระบบที่เป็นไปตามข้อกำหนด มีการจัดทำไฟล์ส่วนหัวทั้งหมด 84 ไฟล์
เชลล์และยูทิลิตี้ (XCU) - รายการของยูทิลิตี้และคำอธิบายของเชลล์, sh. มีการระบุสาธารณูปโภคทั้งหมด 160 รายการ
อินเทอร์เฟซระบบ (XSH) - มีคุณสมบัติของฟังก์ชั่นต่าง ๆ ซึ่งจะดำเนินการตามการเรียกระบบหรือฟังก์ชั่นห้องสมุด มีการระบุส่วนต่อประสานของระบบ 1123 ทั้งหมด
เหตุผล (XRAT) - คำอธิบายที่อยู่เบื้องหลังมาตรฐาน
บรรทัดคำสั่งผู้ใช้มาตรฐานและอินเตอร์เฟสการสคริปต์คือ POSIX เชลล์ซึ่งเป็นส่วนขยายของ Bourne Shell โดยอิงจาก Korn Shell เวอร์ชันก่อนหน้า
โปรแกรมบริการและยูทิลิตี้ระดับผู้ใช้อื่น ๆ ได้แก่ awk, echo, ed, vi และอื่น ๆ อีกหลายร้อยรายการ บริการระดับโปรแกรมที่ต้องการรวมถึงบริการ I / O พื้นฐาน (ไฟล์เทอร์มินัลและเครือข่าย)
ชุดทดสอบมาพร้อมกับมาตรฐาน เรียกว่า PCTS หรือ POSIX Certification Test Suite
นอกจากนี้ SUS ยังมีข้อมูลจำเพาะ CURSES (XCURSES) ซึ่งระบุฟังก์ชั่น 372 และ 3 ไฟล์ส่วนหัว โดยรวมแล้ว SUSv3 ระบุอินเตอร์เฟส 1742
เห็นได้ชัดว่านี้อ้างถึงส่วนประกอบผู้ใช้จำนวนมาก (เช่นเชลล์) ซึ่งไม่ได้เป็นส่วนหนึ่งของเคอร์เนลลินุกซ์ ดังนั้นจึงไม่มีวิธีที่ linux.org และ อัล สามารถรับรองเคอร์เนลเพียงอย่างเดียว - ในแง่นี้มันไม่ได้เป็นระบบปฏิบัติการเลย แน่นอนพวกเขาสามารถลองรับรองระบบบางอย่างโดยใช้เคอร์เนล แต่สิ่งนี้จะไม่มีความหมายในแง่ของรูปแบบการกระจายทั่วไป: เคอร์เนลและผู้ที่รักษามันเป็นอิสระจากคนที่รักษาแกน userland (GNU) ผู้ที่เป็นอิสระจากคนที่รักษาการกระจายระบบปฏิบัติการจริง (Debian, Fedora และอื่น ๆ )
ฉันคิดว่า Debian หรือ Fedora เองสามารถมีส่วนร่วมในกระบวนการรับรอง (เช่นเช่น RedHat Enterprise อาจกลายเป็น "ยูนิกซ์ที่ได้รับการรับรอง") แต่สิ่งนี้ทำให้เกิดคำถามว่าสิ่งเหล่านี้เป็นที่ต้องการจริงๆ ฉันคิดว่าเหตุผลหลักสำหรับระบบ SUS ก็คือการใช้งานซอฟต์แวร์ระดับเชิงพาณิชย์ที่ไม่ใช่ของผู้บริโภคที่เขียนขึ้นสำหรับสิ่งนี้ซึ่งไม่ใช่ช่อง linux ผู้คนที่ทำสิ่งนี้จะจ่ายเงินหลายพันดอลลาร์ต่อใบอนุญาตสำหรับระบบปฏิบัติการ การสนับสนุน ฯลฯ เนื่องจากพวกเขายังจ่ายเงินเป็นหมื่นหรือแสนดอลลาร์ต่อใบอนุญาตสำหรับซอฟต์แวร์เพิ่มเติมใด ๆ ก็ตามที่พวกเขาต้องการทำงานบนระบบ ในทางกลับกัน Linux และผู้ผิดกฎหมายอื่น ๆ ได้ดำเนินการตามเป้าหมายการออกแบบที่นอกเหนือไปจากการปฏิบัติตามวัตถุประสงค์เชิงพาณิชย์อย่างง่ายและยังมีตัวอย่างอีกหลายประการเช่น (จากhttp://en.wikipedia.org/wiki/STREAMS ):
จำเป็นต้องใช้ STREAMS เพื่อให้สอดคล้องกับข้อกำหนดคุณลักษณะ UNIX เดี่ยวรุ่น 1 (UNIX 95) และ 2 (UNIX 98) แต่เป็นผลมาจากการปฏิเสธของนักพัฒนา BSD และ Linux เพื่อให้บริการ STREAMS ถูกระบุว่าเป็นตัวเลือกสำหรับ POSIX การปฏิบัติตามข้อกำหนดโดย Austin Group ในเวอร์ชัน 3 (UNIX 03)
ที่พักที่น่าสนใจที่เน้นจุดที่ SUS และ The Open Group! = linux,! = BSD ฯลฯ
หากต้องการขยายคำตอบแรกเกี่ยวกับ POSIX ให้เข้าใจความหมายของคำว่า "เหมือนยูนิกซ์" ก่อนอื่นควรลองเข้าใจว่า UNIX คืออะไร ดูเอกสารจากOpen Groupซึ่งเป็นเจ้าของเครื่องหมายการค้า Unix คุณจะพบรายละเอียดเกี่ยวกับวิวัฒนาการของข้อมูลจำเพาะ Single UNIX - นี่คือUNIX03 :
มาตรฐานผลิตภัณฑ์ UNIX 03 เป็นเครื่องหมายสำหรับระบบที่สอดคล้องกับเวอร์ชั่น 3 ของข้อมูลจำเพาะ UNIX เดี่ยว เป็นรุ่นที่ปรับปรุงอย่างมากของมาตรฐานผลิตภัณฑ์ UNIX 98 การปรับปรุงที่จำเป็นรวมถึงการจัดตำแหน่งด้วย ISO / IEC 9989: 1999 ภาษาโปรแกรม C, IEEE Std 1003.1-2001 และ ISO / IEC 9945: 2002 มาตรฐานผลิตภัณฑ์นี้รวมถึงมาตรฐานผลิตภัณฑ์ที่บังคับใช้ดังต่อไปนี้: การโทรและไลบรารี่ระบบระหว่างประเทศแบบขยาย V3, คำสั่งและยูทิลิตี้ V4, C Language V2 และการเชื่อมต่อเทอร์มินัลสากล
UNIX98 :
มาตรฐานผลิตภัณฑ์ UNIX 98 เป็นรุ่นปรับปรุงอย่างมากของมาตรฐานผลิตภัณฑ์ UNIX 95 การปรับปรุงที่บังคับ ได้แก่ (1) เธรดอินเตอร์เฟส, (2) ส่วนขยายการสนับสนุนแบบหลายไบต์ (MSE), (3) การสนับสนุนไฟล์ขนาดใหญ่, (4) การเชื่อมโยงแบบไดนามิก (5) การเปลี่ยนแปลงเพื่อลบการอ้างอิงหรือข้อ จำกัด ของฮาร์ดแวร์ ) การเปลี่ยนแปลงปี 2000 นอกจากนี้ยังมีการปรับปรุงเพิ่มเติมดังต่อไปนี้: สิ่งอำนวยความสะดวกการบริหารซอฟต์แวร์และชุดของ API สำหรับการสนับสนุนเรียลไทม์ มาตรฐานผลิตภัณฑ์นี้รวมถึงมาตรฐานผลิตภัณฑ์ที่บังคับต่อไปนี้: การโทรระบบและไลบรารีที่ขยายเป็นสากล V2, คำสั่งและยูทิลิตี้ V3, ภาษา C, บริการการขนส่ง (XTI) V2, Sockets V2 และอินเตอร์เฟซเทอร์มินัลสากล นอกจากนี้ยังอาจเป็นไปตามมาตรฐานผลิตภัณฑ์การจัดการซอฟต์แวร์
UNIX95 (ความสำคัญของฉัน):
มาตรฐานผลิตภัณฑ์นี้กำหนดแพลตฟอร์มรวมสำหรับการสนับสนุนแอพพลิเคชั่นที่หลากหลายซึ่งพัฒนาขึ้นสำหรับคลาสระบบปฏิบัติการที่ได้รับมาจากรหัสระบบปฏิบัติการ UNIX และ / หรืออินเทอร์เฟซที่พัฒนาโดย AT&Tนอกเหนือจากสิ่งอำนวยความสะดวกที่ให้ ตามมาตรฐานผลิตภัณฑ์ฐาน มันมีขอบเขตที่กว้างกว่าฐาน มาตรฐานผลิตภัณฑ์นี้รวมถึงมาตรฐานผลิตภัณฑ์ต่อไปนี้: การโทรด้วยระบบที่เป็นสากลและไลบรารีที่ขยายเพิ่ม, คำสั่งและยูทิลิตี้ V2, C ภาษา, บริการการขนส่ง (XTI), ซ็อกเก็ตและอินเตอร์เฟซเทอร์มินัลสากล
เซิร์ฟเวอร์รุ่นมาตรฐานเพิ่ม Internet Server และ IPv6 ในบางกรณี
ดังนั้นเราจึงเห็นการอ้างอิงถึงAT&T Bell Laboratoriesและภาษา C คือหัวใจของ UNIX คือ: ภาษา C, เครื่องมือพื้นฐานแบบแยกส่วนและเชลล์และวิธีเคอร์เนลระบบไฟล์และส่วนประกอบระบบปฏิบัติการที่สำคัญอื่น ๆ ได้รับการออกแบบและดำเนินการ .
นั่นคือสิ่งที่หนังสือการออกแบบระบบปฏิบัติการ UNIXโดย Maurice J. Bach กลายเป็นการอ่านที่มีค่าเพราะมันเป็นเรื่องทางประวัติศาสตร์ ณ จุดนี้ แน่นอนว่าสิ่งนี้เกี่ยวข้องกับการประดิษฐ์อื่น ๆเช่นภาษา C แน่นอน C ได้รับการพัฒนาโดย AT&T Bell เพื่อใช้ Unix ด้วยภาษาที่สามารถทำงานได้เร็วเท่ากับการประกอบ แต่สามารถพกพาข้ามฮาร์ดแวร์ที่แตกต่างกันได้และ POSIX จำนวนมากเป็นส่วนเสริมของมาตรฐาน C
ตราบเท่าที่เคอร์เนลเป็นห่วงคุณมักจะพบไดอะแกรมแนวคิดเช่นนี้เพื่อแสดงให้เห็นถึงสิ่งที่เคอร์เนล UNIX แบบดั้งเดิมเกี่ยวกับ:
นี่คือข้อความที่ตัดตอนมาจากหนังสือคลาสสิกของ Mr Bach (1986) ซึ่งกล่าวถึงรากฐานของ UNIX System V kernel:
อย่างไรก็ตามพวกเขา [แอปพลิเคชันระบบย่อยและโปรแกรม] ทั้งหมดใช้บริการระดับล่างในท้ายที่สุดโดยเคอร์เนลและพวกเขาประโยชน์ตัวเองของบริการเหล่านั้นผ่านชุดของการเรียกระบบ มีการเรียกใช้ระบบ 64 ระบบใน System V ซึ่งน้อยกว่า 32 ใช้บ่อย พวกเขามีตัวเลือกง่าย ๆ ที่ทำให้ใช้งานง่าย แต่ให้พลังงานแก่ผู้ใช้มาก ชุดของการเรียกของระบบและอัลกอริธึมภายในที่นำมาใช้ในรูปแบบเนื้อความของเคอร์เนล [... ]
[... ] สององค์ประกอบหลักคือระบบย่อยไฟล์และระบบย่อยกระบวนการ
ไฟล์ถูกจัดระเบียบเป็นระบบไฟล์ซึ่งถือว่าเป็นอุปกรณ์โลจิคัล อุปกรณ์ฟิสิคัลเช่นดิสก์สามารถมีอุปกรณ์โลจิคัลหลายตัว (ระบบไฟล์) แต่ละระบบไฟล์มี superblock ที่อธิบายถึงโครงสร้างและเนื้อหาของระบบไฟล์และแต่ละไฟล์ในระบบไฟล์นั้นจะอธิบายโดย inode ที่ให้คุณสมบัติของไฟล์ การเรียกระบบที่จัดการไฟล์ทำได้ผ่าน inodes [และบัฟเฟอร์พูล]
[... ] มี inode สองรุ่น: สำเนาดิสก์ที่เก็บข้อมูล inode เมื่อไฟล์ไม่ได้ใช้งานและสำเนา in-core ที่บันทึกข้อมูลเกี่ยวกับไฟล์ที่ใช้งานอยู่
การดำเนินการของกระบวนการผู้ใช้บนระบบ UNIX แบ่งออกเป็นสองระดับ: ผู้ใช้และเคอร์เนล เมื่อกระบวนการดำเนินการเรียกระบบที่โหมดการดำเนินการของกระบวนการเปลี่ยนจากโหมดผู้ใช้ไปยังโหมดเคอร์เนล : รันระบบปฏิบัติการและความพยายามในการให้บริการการร้องขอผู้ใช้ [ ... ]
[... ] ปรัชญาของระบบ UNIX คือการจัดเตรียมระบบปฏิบัติการเบื้องต้นที่ช่วยให้ผู้ใช้สามารถเขียนโปรแกรมโมดูลาร์ขนาดเล็กที่สามารถใช้เป็นหน่วยการสร้างเพื่อสร้างโปรแกรมที่ซับซ้อนมากขึ้น หนึ่งเช่นดั้งเดิมที่มองเห็นเปลือกผู้ใช้คือความสามารถในการเปลี่ยนเส้นทางของ I / O
[... ] นอกเหนือจากการให้บริการระบบการเรียกเคอร์เนลทำบัญชีทั่วไปสำหรับชุมชนผู้ใช้การควบคุมการจัดตารางกระบวนการการจัดการการจัดเก็บและการป้องกันกระบวนการในหน่วยความจำหลักขัดจังหวะการจัดการไฟล์และอุปกรณ์และดูแลข้อผิดพลาดของระบบ เงื่อนไข
หากคุณสนใจกับการใช้งานที่แตกต่างกันของเมล็ดในระบบปฏิบัติการแบบยูนิกซ์คุณสามารถดูการใช้งาน FreeBSD (4.4BSD) หรือที่เคอร์เนล Machหรือดูการเปรียบเทียบคุณลักษณะเหล่านี้ได้
ยิ่งคุณรู้เกี่ยวกับการออกแบบของยูนิกซ์ที่มากกว่าที่คุณเข้าใจสิ่งที่เกิดขึ้นในแผนภาพต่อไปนี้เกี่ยวกับบรรพบุรุษของ UNIX และของประวัติศาสตร์ Mr Bach กำลังพูดถึง System V ในหนังสือของเขาเป็นส่วนใหญ่ แต่เขาก็พูดถึง BSD ด้วยเช่นกัน:
มีมากกว่านี้มากกว่าที่จะพบกับดวงตาจริงๆ ตัวอย่างเช่น Mac OSX ได้รับการรับรองจาก UNIX03 แต่คุณเห็นว่ามันเชื่อมต่อกับUNIX บริสุทธิ์ใด ๆ (สีแดงส่วนใหญ่)?
ด้านบนคุณจะเห็นว่า BSD, GNU, Microsoft และบุคคลที่มีความหลากหลายมีส่วนร่วมในจักรวาลนี้อย่างไร แม้ว่า GNU และท้ายที่สุด linux จะไม่มีเชื้อสายโดยตรงไปยัง UNIX คุณเห็นว่าGNUเป็นความพยายามในการสร้างวิศวกรในโลกโอเพนซอร์สเครื่องมือและซอฟต์แวร์จาก UNIX เชิงพาณิชย์ที่ปิดตัวลง ดังนั้นการดูซอฟต์แวร์ GNU ที่ปรับปรุงแล้วจึงให้แนวคิดเช่นแอพต้นแบบและไลบรารีเริ่มต้น
สงครามการออกใบอนุญาตมีบทบาทในการวิวัฒนาการ (และความซบเซาในบางครั้ง) ของ UNIX คุณสามารถเห็นได้ทันทีว่า UNIX ถูกเรียงตามประเภทไลเซนส์เทียบกับ BSD ( BSD อนุญาตให้สร้างซอร์สโค้ดโค้ดที่ปิด ... ดู OSX) และGPLซึ่งอนุญาตให้ Linux และ GNU ประกอบกันในโลกแห่งโคเลฟต์ นี่คือแผนที่คลาสสิกของเคอร์เนล linux ที่พัฒนาโดย Linus Torvalds ซึ่งยังเผยให้เห็นว่าเคอร์เนล "สามารถ" อยู่ในระบบปฏิบัติการแบบ Unix ได้อย่างไร:
คำแนะนำนี้มีแนวคิดว่าประเภทการออกแบบ " เคอร์เนล " ไม่ใช่สิ่งที่ทำให้มาตรฐาน UNIX หรือสิ่งที่กำหนดระบบปฏิบัติการยูนิกซ์ นี่เป็นหลักฐานจากความจริงที่ว่าระบบปฏิบัติการยูนิกซ์ที่เหมือนยูนิกซ์หลายตัวอาจมีทั้งเคอร์เนลเสาหินหรือ microkernel - เสาหินเป็นประเภทการออกแบบแบบคลาสสิกสำหรับ UNIX ในความเป็นจริงแม้ใน UNIX ที่บริสุทธิ์ HPUX มีเคอร์เนลเสาหินในขณะที่ AIX ใช้ microkernel นี้การอภิปรายเกี่ยวกับการออกแบบเป็นเรื่องเกี่ยวกับประสิทธิภาพการทำงานและไม่ได้เกี่ยวข้องกับระบบปฏิบัติการยูนิกซ์วงศ์ตระกูลหรือเอกลักษณ์ ในทางตรงกันข้ามมีแนวคิดแบบดั้งเดิมในการให้บริการซอฟต์แวร์การจัดการกับระบบไฟล์ ฯลฯ ภายใต้ระบบปฏิบัติการ UNIX / UNIX เหมือน
ฉันเชื่อว่าการพิจารณาดังกล่าวจะเพิ่มบริบทให้กับส่วนระบบปฏิบัติการของคำถามของคุณ