ระบบ unix หรือ linux ทำงานอย่างไร [ปิด]


37

ผมอยากจะทราบวิธีการทำงานของระบบปฏิบัติการสั้น :

  • ส่วนประกอบพื้นฐานที่สร้างขึ้น
  • องค์ประกอบเหล่านั้นทำงานร่วมกันอย่างไร
  • อะไรทำให้ยูนิกซ์ยูนิกซ์
  • สิ่งที่ทำให้แตกต่างจากระบบปฏิบัติการอื่น ๆ เช่น Windows

3
ว้าวคำถามนี้จะใช้เวลานานในการตอบคำถาม ... เหมือนหนังสือหลายเล่ม มีระบบปฏิบัติการน้อยมาก (มีพื้นที่ฝังตัวอยู่ด้านข้างและหน้าต่างเป็นข้อยกเว้นที่น่าสังเกต) ซึ่งไม่ใช่ Unix
xenoterracide

2
ไม่แน่ใจว่าจะร้องไห้หรือหัวเราะ
zvolkov

27
ระบบ unix หรือ linux ทำงานอย่างไร สบายดีมากขอบคุณ :-).
Gaurav

3
รักคำถาม เป็นชนิดที่ทำให้ผู้ใช้ที่มีประสบการณ์พูดด้วยความเข้าใจของตนเองและเปิดโอกาสให้เราทุกคนเข้าใจจักรวาลของยูนิกซ์และลินุกซ์
Stein Åsmul

5
โดยสรุปแล้วคุณมีเปลือกและคุณมีเคอร์เนล นี่คือวิธีการทำงานของ Unix
Tom Zych

คำตอบ:


74

ระบบ UNIX ประกอบด้วยหลายส่วนหรือหลายชั้นตามที่ฉันต้องการเรียกพวกมัน

ในการเริ่มระบบโปรแกรมที่เรียกว่าบูตโหลดเดอร์จะอยู่ที่เซกเตอร์แรกของพาร์ติชั่นฮาร์ดดิสก์ มันเริ่มต้นโดยระบบและในทางกลับกันมันจะอยู่ในเคอร์เนลระบบปฏิบัติการและโหลด

layering

  1. เคอร์เนล นี่คือโปรแกรมกลางที่เริ่มต้นโดยบูตโหลดเดอร์ มันเป็นการโต้ตอบฮาร์ดแวร์ขั้นพื้นฐานสำหรับระบบ (ดิสก์หน่วยความจำวิดีโอเสียง) และมีสภาพแวดล้อมเสมือนจริงซึ่งสามารถเริ่มโปรแกรมได้ เคอร์เนลยังจัดส่งไดรเวอร์ทั้งหมดที่จัดการกับความแตกต่างเล็กน้อยระหว่างอุปกรณ์ฮาร์ดแวร์ สำหรับโลกภายนอก (เลเยอร์ที่สูงขึ้น) แต่ละคลาสของอุปกรณ์นั้นจะทำงานในลักษณะที่สอดคล้องกัน - ซึ่งโปรแกรมสามารถสร้างขึ้นได้

  2. ระบบย่อยพื้นหลัง มีเพียงโปรแกรมปกติที่เพิ่งออกนอกเส้นทางของคุณ พวกเขาจัดการสิ่งต่าง ๆ เช่นการเข้าสู่ระบบจากระยะไกลจัดทำบัสข้อความส่วนกลางและดำเนินการตามเหตุการณ์ฮาร์ดแวร์ / เครือข่าย ตัวอย่างเช่นการค้นพบบลูทู ธ การจัดการ wifi ฯลฯ บริการเครือข่ายใด ๆ (ไฟล์เซิร์ฟเวอร์เซิร์ฟเวอร์การพิมพ์เว็บเซิร์ฟเวอร์) ก็อยู่ในระดับนี้เช่นกัน ในระบบ UNIX ทั้งหมดนี้เป็นเพียงโปรแกรมปกติ

  3. เครื่องมือบรรทัดคำสั่ง โปรแกรมเหล่านี้เป็นโปรแกรมเล็ก ๆ ที่สามารถเริ่มทำสิ่งต่าง ๆ เช่นการแก้ไขข้อความการดาวน์โหลดไฟล์หรือการดูแลระบบ ณ จุดนี้ระบบ UNIX สามารถใช้งานได้อย่างสมบูรณ์สำหรับผู้ดูแลระบบ ใน Windows เลเยอร์นี้ไม่มีอยู่จริงอีกต่อไป

  4. ส่วนต่อประสานกราฟิกกับผู้ใช้ สิ่งเหล่านี้เป็นเพียงโปรแกรมความแตกต่างเพียงอย่างเดียวก็คือการวาดหน้าต่างที่หน้าจอแทนที่จะเขียนข้อความ สิ่งนี้ทำให้ระบบใช้งานง่ายขึ้นสำหรับผู้ใช้ทั่วไป

บริการหรือกิจกรรมใด ๆ จะไปจากด้านล่างทั้งหมดขึ้นไปด้านบน

ไลบรารี - แพลตฟอร์มทั่วไป

โปรแกรมทำสิ่งต่าง ๆ มากมายเช่นแสดงหน้าต่างวาดสิ่งที่หน้าจอหรือดาวน์โหลดไฟล์ สิ่งเหล่านี้จะเหมือนกันสำหรับหลาย ๆ โปรแกรมดังนั้นโค้ดจะถูกใส่ในไฟล์ " .soไลบรารี่" แยกต่างหาก ( ไฟล์ - หมายถึงวัตถุที่ใช้ร่วมกัน) ห้องสมุดสามารถใช้ร่วมกันได้ในทุกโปรแกรม

สำหรับทุกสิ่งเท่าที่จะเป็นไปได้มีห้องสมุด มีหนึ่งสำหรับการอ่าน / เขียนไฟล์ PNG มีหนึ่งไฟล์สำหรับ JPEG สำหรับอ่าน XML สำหรับการเข้ารหัสสำหรับการเล่นวิดีโอและอื่น ๆ

บน Linux ไลบรารีทั่วไปสำหรับนักพัฒนาแอปพลิเคชันคือ Qt และ Gtk ไลบรารีเหล่านี้ใช้ไลบรารีระดับต่ำกว่าภายในสำหรับความต้องการเฉพาะของพวกเขาในขณะที่เปิดเผยการทำงานของพวกเขาในวิธีที่สอดคล้องและรัดกุมดีสำหรับนักพัฒนาแอปพลิเคชันเพื่อสร้างแอปพลิเคชันได้เร็วขึ้น

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

บางไลบรารีสามารถใช้ได้กับระบบปฏิบัติการที่แตกต่างกัน (ตัวอย่างเช่น Qt) บางไลบรารีถูกผูกเข้ากับระบบปฏิบัติการเดียว สิ่งนี้จะ จำกัด โปรแกรมของคุณเพื่อให้สามารถทำงานบนแพลตฟอร์มนั้นเท่านั้น

การสื่อสารระหว่างกระบวนการ

มุมที่สามของระบบปฏิบัติการคือวิธีที่โปรแกรมสามารถสื่อสารระหว่างกันได้ เหล่านี้เป็นกลไกการสื่อสารระหว่างกระบวนการ (IPC) สิ่งเหล่านี้มีอยู่ในหลายรสชาติเช่นหน่วยความจำที่แบ่งใช้หรือช่องสัญญาณขนาดเล็กถูกตั้งค่าระหว่างสองโปรแกรมเพื่อแลกเปลี่ยนข้อมูล นอกจากนี้ยังมีบัสข้อความกลางซึ่งแต่ละโปรแกรมสามารถโพสต์ข้อความและรับการตอบกลับ สิ่งนี้ใช้สำหรับการสื่อสารทั่วโลกซึ่งไม่ทราบว่าโปรแกรมใดสามารถตอบสนองได้

จากห้องสมุดไปจนถึงระบบปฏิบัติการ

ด้วยไลบรารี, IPC และเคอร์เนล, โปรแกรมเมอร์สามารถสร้างแอพพลิเคชั่นสำหรับบริการระบบ, การจัดการผู้ใช้, การกำหนดค่า, การจัดการ, งานสำนักงาน, ความบันเทิง, ฯลฯ . นี้เป็นชุดที่สมบูรณ์ซึ่งผู้ใช้มือใหม่จำได้ว่าเป็นระบบปฏิบัติการ "

ในระบบ UNIX / Linux บริการทั้งหมดเป็นเพียงโปรแกรม เครื่องมือการดูแลระบบทั้งหมดเป็นเพียงโปรแกรม พวกเขาทั้งหมดทำงานของพวกเขาและพวกเขาสามารถถูกล่ามโซ่ด้วยกัน ฉันได้สรุปโปรแกรมสำคัญ ๆ มากมายที่http://codingdomain.com/linux/sysadmin/


ส่วนที่แตกต่างกับ Windows

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

รายละเอียดนี่คือหลักการที่สามารถพบได้ในระบบ UNIX / Linux:

  • มีวิธีที่เหมือนกันในการเข้าถึงข้อมูล ("ทุกอย่างเป็นเพียงไฟล์") คุณสามารถเปิดไฟล์ซ็อกเก็ตเครือข่ายช่อง IPC พารามิเตอร์เคอร์เนลและอุปกรณ์บล็อกเป็นไฟล์ ดังนั้นการปรากฏตัวของระบบไฟล์เสมือนใน / dev, / sys และ / proc API ที่เดียวที่คุณต้องเป็นopen, และreadclose

  • ระบบพื้นฐานมีความโปร่งใส ทุกโปรแกรมทำงานภายใต้กฎเดียวกัน ต่างจาก Windows ไม่มีความแตกต่างที่เกิดขึ้นระหว่าง "โปรแกรมคอนโซล", "โปรแกรม gui" หรือ "บริการพื้นหลัง" พวกเขาทั้งหมดเป็นเพียงโปรแกรมที่เกิดขึ้นกับสิ่งที่แตกต่าง พวกเขายังสามารถสังเกตวิเคราะห์และตรวจแก้จุดบกพร่องในลักษณะเดียวกัน

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

  • ไม่มีแอปพลิเคชั่น "ทำทั้งหมดในครั้งเดียว" ที่มีขนาดใหญ่ มนต์คือ "ทำสิ่งหนึ่งทำมันให้ดี" เครื่องมือบรรทัดคำสั่งสามารถถูกผูกมัดและร่วมกันมีประสิทธิภาพ บริการที่แยกต่างหาก (เช่น SMTP, IMAP และ POP และการเข้าสู่ระบบ) เป็นโปรแกรมย่อยที่แยกต่างหากหลีกเลี่ยงรหัสที่ซับซ้อนและปัญหาด้านความปลอดภัย สภาพแวดล้อมเดสก์ทอปที่ซับซ้อนมอบการทำงานอย่างหนักให้กับแต่ละโปรแกรม

  • fork(). โปรแกรมใหม่เริ่มต้นโดยโปรแกรมที่มีอยู่ในการโคลนตัวเอง โคลนตั้งค่าทุกอย่าง (เช่นจัดการไฟล์) และเลือกแทนที่ตัวเองด้วยรหัสโปรแกรมใหม่ สิ่งนี้ทำให้ง่ายต่อการใช้การตั้งค่าความปลอดภัยและข้อ จำกัด เดียวกันกับโปรแกรมใหม่แชร์หน่วยความจำหรือตั้งค่ากลไก IPC ต้นทุนในการเริ่มต้นกระบวนการยังต่ำมาก

  • ระบบไฟล์เป็นหนึ่งทรีซึ่งพาร์ติชันดิสก์อื่นและเครือข่ายแชร์สามารถติดตั้งได้ มีอีกวิธีการเข้าถึงข้อมูลที่เป็นสากล ตำแหน่งระบบทั่วไป (เช่น/usrสามารถติดตั้งได้อย่างง่ายดายในฐานะเครือข่ายที่ใช้ร่วมกัน

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

  • ทุกโปรแกรมจัดเก็บการตั้งค่าในไฟล์ / โฟลเดอร์ที่ซ่อนของโฮมไดเรกทอรีผู้ใช้ ไม่มีโปรแกรมใดพยายามเขียนไฟล์การตั้งค่าส่วนกลาง

  • ความโปรดปรานต่อกลไกการสื่อสารที่อธิบายอย่างเปิดเผยเกี่ยวกับกลไกลับหรือกลไก 1 ต่อ 1 ที่เฉพาะเจาะจง ผู้ค้ารายอื่นและนักพัฒนาซอฟต์แวร์ได้รับการสนับสนุนให้ปฏิบัติตามข้อกำหนดเดียวกันดังนั้นสิ่งต่าง ๆ สามารถเชื่อมต่อแลกเปลี่ยนและยังอยู่คู่กันอย่างหลวม ๆ ได้อย่างง่ายดาย


1
คำตอบที่น่ารักฉันรู้ว่ามันยากที่จะอธิบายสั้น ๆ ! ขอบคุณ! ;-)
Sander Versluys

1
ใช่แล้วท่านทำได้ดีในคำตอบนี้
สเตฟาน

14
ปุ่ม +10 อยู่ที่ไหน ???
EricSchaefer

1
ขอบคุณสำหรับความคิดเห็นและโหวต! ดีใจที่ได้ทราบคำตอบก็คือสิ่งนี้ดีมาก!
vdboor

1
@faif มันเป็นมาตรฐาน (แม้มีระบบปฏิบัติการ Microsoft อยู่) และความงามก็อยู่ในสายตาของคนดูที่ฉันคิดเอาไว้ ประเด็นคือทุกอย่างเป็นไฟล์แม้แต่ไฟล์พิเศษ
psusi

11

UNIX เป็นระบบปฏิบัติการที่แข็งแกร่งสร้างบนการออกแบบเสียงที่พิสูจน์แล้วว่าประสบความสำเร็จมานานกว่า 40 ปี (ซึ่งเกือบตลอดกาลในสาขาวิทยาศาสตร์คอมพิวเตอร์) เทคโนโลยีกลางขึ้นอยู่กับภาษา C และโปรแกรมขนาดเล็กมากมาย: คำสั่ง UNIX ปรัชญาพื้นฐานได้รับการสรุปโดย McIlroy:

เขียนโปรแกรมที่ทำสิ่งหนึ่งและทำได้ดี เขียนโปรแกรมเพื่อทำงานร่วมกัน เขียนโปรแกรมเพื่อจัดการสตรีมข้อความเนื่องจากเป็นอินเตอร์เฟสสากล

ข้อมูลเพิ่มเติมเกี่ยวกับปรัชญา UNIX สามารถพบได้ใน ESRaymond "The Art of UNIX Programming"


2
+1 สำหรับ "The Art of UNIX Programming" อย่างไรก็ตามในขณะที่ API ถูกกำหนดรอบ C ไม่มีปัญหาทางเทคนิคกับการใช้ทั้งระบบใน Haskell (พร้อมบิตของแอสเซมบลี;)) หรืออะไรทำนองนั้น
Maciej Piechotka

3
สามารถเขียนบิตของชุดประกอบใน Haskell ได้เช่นกัน ดูศักยภาพ
Phil Miller

10

มีคำตอบที่ยอดเยี่ยมอยู่ที่นี่ อย่างไรก็ตามสิ่งหนึ่งที่ฉันคิดว่าถูกทิ้งไว้คือ * แตกต่างจากระบบปฏิบัติการอื่นโดยเฉพาะอย่างยิ่ง Microsoft Windows

แนวคิดพื้นฐานที่กล่าวมาแล้วข้างต้น "ทำสิ่งหนึ่งสิ่งที่ทำได้ดี" เป็นศูนย์กลางของระบบปฏิบัติการ * ระวังซึ่งบางครั้งมันอาจถูกมองข้าม แต่เป็นปรัชญาการออกแบบที่ทำให้ Linux มีความยืดหยุ่นและทรงพลัง

ตัวอย่างเช่นส่วนต่อประสานกราฟิกกับผู้ใช้ (GUI) สำหรับ MS Windows นั้นเชื่อมโยงกันในระบบปฏิบัติการ แทบเป็นไปไม่ได้เลยที่จะติดตั้งระบบปฏิบัติการ MS โดยไม่ต้องใช้ GUI ใน Linux คุณสามารถนำเซิร์ฟเวอร์หรือระบบสมองกลฝังตัวที่ไม่มีส่วนประกอบกราฟิกได้เลย มันสามารถขับเคลื่อนบรรทัดคำสั่งทั้งหมดและยังคงเป็นเซิร์ฟเวอร์ที่โดดเด่นเต็มรูปแบบ

การออกแบบแบบแยกส่วนของ Linux ยังช่วยให้ผู้ดูแลระบบสามารถนำบริการมาอัพเกรดและนำกลับมาสำรองได้โดยไม่ต้องรีบูตระบบปฏิบัติการ ในความเป็นจริงเกี่ยวกับเวลาเดียวที่คุณต้องรีบูตระบบปฏิบัติการ Linux คือเมื่อเคอร์เนลเองจะถูกปรับเปลี่ยนหรืออัพเกรด

ตัวอย่างเช่นคุณสามารถติดตั้งตัวจัดการ windows ใหม่ (gnome, kde หรืออะไรก็ได้) บน Linux และผู้ใช้ที่เข้าสู่ระบบในปัจจุบันอาจไม่เคยรู้มาก่อน

บน Windows บ่อยครั้งการเปลี่ยนแปลงที่ง่ายที่สุดในระบบจำเป็นต้องมีการรีบูตแม้ว่าบางครั้งนี่จะเป็นปัญหาด้านความปลอดภัยมากกว่าข้อกำหนดทางเทคนิคที่เกิดขึ้นจริง ฉันขอเสนอว่านี่เป็นหนึ่งในข้อบกพร่องพื้นฐานของระบบปฏิบัติการ MS บน Linux คุณสามารถอัพเกรดโมดูลไดรเวอร์จำนวนมากและส่งผลกระทบเล็กน้อยต่อผู้ใช้ บน Windows คุณอาจต้องรีบูตทั้งช่องหากคุณเพียงติดตั้งแอปพลิเคชั่นใหม่

การออกแบบแบบแยกส่วนนี้ยังให้ความยืดหยุ่นเป็นพิเศษแก่ Linux ระบบลีนุกซ์แต่ละระบบสามารถปรับให้เหมาะกับงานเฉพาะที่คุณต้องทำให้สำเร็จโดยใช้ทรัพยากรให้น้อยที่สุดเท่าที่จะทำได้ สำหรับ Windows คุณไม่สามารถปิดส่วนต่อประสาน GUI เพื่อเรียกใช้เซิร์ฟเวอร์ HTTP อย่างง่าย มี footprint หน่วยความจำที่ Windows สันนิษฐานว่าสร้างอุปสรรคด้านล่างซึ่งฮาร์ดแวร์ของคุณไม่สามารถไปได้ นี่เป็นเหตุผลหลักที่ลีนุกซ์กลายเป็นระบบปฏิบัติการที่เป็นทางเลือกสำหรับแอพพลิเคชั่นมือถือและเอ็มเบ็ดเด็ด

ฉันสามารถไปต่อได้ แต่ฉันหวังว่าตัวอย่างเหล่านี้จะช่วยอธิบายว่าทำไม Linux จึงเป็นที่นิยมมากและแตกต่างจากระบบปฏิบัติการอื่น ๆ อย่างไร



2

ฉันอยากจะแนะนำให้อ่านการเขียนโปรแกรมขั้นสูงใน Unix Environment 2eเพื่อเรียนรู้มากมายเกี่ยวกับ Single Unix Standard (SUS) API และ POSIX ซึ่งจะทำให้คุณมีความคิดเกี่ยวกับสิ่งที่ทำให้ Unix Unix และองค์ประกอบทำงานอย่างไรและทำงานร่วมกัน

อย่างไรก็ตามมันเป็นหนังสือที่หนักมาก C และคู่มืออ้างอิงเพิ่มเติม หากคุณมีปัญหาเกี่ยวกับการนอนไม่หลับเพียงแค่เอามันไปนอนกับคุณ นอกจากนี้หากคุณเป็นโปรแกรมเมอร์ Unix C มันจะต้องมี


2

ด้วยจิตวิญญาณของหนังสือสองเล่มก่อนหน้านี้ฉันขอแนะนำด้วย

อินเตอร์เฟสการเขียนโปรแกรม LINUXโดย M. Kerrisk

ซึ่งแม้ว่าการกำหนดเป้าหมายหัวข้อของการเขียนโปรแกรมระบบ UNIX / Linux จะเปิดเผยข้อมูลโดยละเอียดมากมายเกี่ยวกับการทำงานของ Linux และระบบ UNIX โดยทั่วไปจากมุมมองของโปรแกรมเมอร์ / ผู้ใช้ มันเจาะลึกรายละเอียดลงในกระสุนส่วนใหญ่ที่กล่าวถึงในคำตอบของ vdboor และเปิดเผยรายละเอียดที่เพียงพอในลักษณะที่เข้าใจและอ่านได้เพื่อให้ได้ความรู้สึก / ภาพของแนวคิดพื้นฐานของ UNIX และการสนับสนุนของพวกเขา

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.