ในนั้น

จากวิกิพีเดีย สารานุกรมเสรี
ข้ามไปที่การนำทาง ข้ามไปที่การค้นหา
เวอร์ชัน 7 Unix : /etcรายการแสดงinitและrc
เวอร์ชัน 7 Unix: เนื้อหาของสคริปต์เชลล์/etc/rc Bourne

ในUnix -based คอมพิวเตอร์ระบบปฏิบัติการ , init (สั้นสำหรับการเริ่มต้น ) เป็นครั้งแรกขั้นตอนการเริ่มต้นในช่วงบูตของระบบคอมพิวเตอร์ Init เป็นกระบวนการdaemonที่ยังคงทำงานต่อไปจนกว่าระบบจะปิดลง มันเป็นทางตรงหรือทางอ้อมบรรพบุรุษของกระบวนการอื่น ๆ ทั้งหมดโดยอัตโนมัติและกฎหมายทุกกระบวนการกำพร้า Init เริ่มต้นโดยเคอร์เนลระหว่างกระบวนการบูทความตื่นตระหนกของเคอร์เนลจะเกิดขึ้นหากเคอร์เนลไม่สามารถเริ่มต้นได้ โดยทั่วไป Init จะถูกกำหนดตัวระบุกระบวนการ 1

ในระบบ Unix เช่นSystem IIIและSystem Vการออกแบบของ init แตกต่างจากฟังก์ชันที่ init จัดเตรียมไว้ในResearch Unixและอนุพันธ์BSDจนถึงเมื่อเร็ว ๆ นี้ลีนุกซ์รุ่นส่วนใหญ่ใช้ init ดั้งเดิมที่ค่อนข้างเข้ากันได้กับ System V ในขณะที่บางดิสทริบิวชัน เช่นSlackwareใช้สคริปต์เริ่มต้นแบบ BSD และอื่น ๆ เช่นGentooมีเวอร์ชันที่ปรับแต่งเอง

ตั้งแต่นั้นมา มีการสร้างการใช้งาน init เพิ่มเติมหลายอย่าง โดยพยายามแก้ไขข้อจำกัดในการออกแบบในเวอร์ชันดั้งเดิม เหล่านี้รวมถึงlaunchdที่สิ่งอำนวยความสะดวกการจัดการบริการ , systemd , RunitและOpenRC

วิจัยสไตล์ Unix / สไตล์ BSD

วิจัย Unix init วิ่งเริ่มต้นเชลล์สคริปต์อยู่ที่/etc/rc, [1]เปิดตัวแล้วGetty/etc/ttysบนขั้วใต้การควบคุมของ [2]ไม่มีระดับการรัน; /etc/rcไฟล์กำหนดสิ่งที่โปรแกรมจะดำเนินการโดย init ข้อดีของระบบนี้คือการแก้ไขด้วยตนเองที่ง่ายและสะดวก อย่างไรก็ตาม ซอฟต์แวร์ใหม่ที่เพิ่มลงในระบบอาจจำเป็นต้องเปลี่ยนแปลงไฟล์ที่มีอยู่ซึ่งเสี่ยงต่อการทำให้ระบบไม่สามารถบู๊ตได้

การเริ่มต้นBSDก่อน 4.3BSD เหมือนกับการเริ่มต้นของ Research UNIX [3] [4]ใน4.3BSDก็เพิ่มการสนับสนุนสำหรับการทำงานของระบบ windowingเช่นX/etc/ttysบนขั้วกราฟิกภายใต้การควบคุมของ [5] [6]ในการลบข้อกำหนดในการแก้ไข/etc/rcตัวแปร BSD ได้รองรับ/etc/rc.localไฟล์เฉพาะไซต์ที่รันในเชลล์ย่อยใกล้จุดสิ้นสุดของลำดับการบูตเป็นเวลานาน

ระบบโมดูลาร์เต็มรูปแบบถูกนำมาใช้กับNetBSD 1.5 และย้ายไปยังFreeBSD 5.0 และผู้สืบทอด ระบบนี้รันสคริปต์ใน/etc/rc.dไดเร็กทอรี ต่างจากการจัดลำดับสคริปต์ของ System V ซึ่งได้มาจากชื่อไฟล์ของแต่ละสคริปต์ ระบบนี้ใช้แท็กการพึ่งพาที่ชัดเจนซึ่งวางไว้ภายในแต่ละสคริปต์ [7]ลำดับที่สคริปต์ถูกเรียกใช้งานจะถูกกำหนดโดยยูทิลิตี้rcorderตามข้อกำหนดที่ระบุไว้ในแท็กเหล่านี้

สไตล์ SysV

SysV-RC-confเป็นTUIยูทิลิตี้ที่เลือกซึ่ง SysV สไตล์สคริปต์ init จะถูกเรียกใช้ในแต่ละระดับการทำงาน

เมื่อเปรียบเทียบกับรุ่นก่อนUNIX System IIIของ AT&T ได้นำเสนอรูปแบบใหม่ของการกำหนดค่าการเริ่มต้นระบบ[8]ซึ่งรอดชีวิต (ด้วยการดัดแปลง) เข้าสู่UNIX System Vและถูกเรียกว่า "SysV-style init"

ในขณะใด ๆ ที่ใช้ระบบวีเป็นหนึ่งในจำนวนที่กำหนดไว้ของรัฐที่เรียกว่าระดับการทำงาน อย่างน้อยหนึ่งระดับการทำงานคือสถานะการทำงานปกติของระบบ โดยทั่วไป runlevels อื่น ๆ จะแสดงโหมดผู้ใช้คนเดียว (ใช้สำหรับซ่อมแซมระบบที่ผิดพลาด) การปิดระบบและสถานะอื่น ๆ การเปลี่ยนจากระดับการรันระดับหนึ่งไปอีกระดับหนึ่งจะทำให้ชุดสคริปต์ต่อระดับการรันทำงาน ซึ่งโดยทั่วไปจะเมาท์ระบบไฟล์ start หรือ stop daemonsเริ่มหรือหยุดX Window Systemปิดเครื่อง ฯลฯ

รันเลเวล

ระดับการรันในระบบ V อธิบายสถานะบางอย่างของเครื่อง โดยแสดงลักษณะโดยกระบวนการและ daemons ที่ทำงานอยู่ในแต่ละสถานะ โดยทั่วไป มีระดับการรันเจ็ดระดับ ซึ่งระดับการรันสามระดับถือเป็น "มาตรฐาน" เนื่องจากจำเป็นต่อการทำงานของระบบ:

0. ปิด
1. โหมดผู้ใช้คนเดียว (เรียกอีกอย่างว่าSหรือs )
6. รีบูต

นอกเหนือจากมาตรฐานเหล่านี้แล้ว ระบบที่คล้าย Unix และ Unix ปฏิบัติต่อระดับการรันต่างกันบ้าง ตัวหารร่วม/etc/inittabไฟล์ กำหนดว่าแต่ละระดับการทำงานที่กำหนดค่าไว้ทำอะไรในระบบที่กำหนด

ระดับการทำงานเริ่มต้น

ระบบปฏิบัติการ runlevel เริ่มต้น
AIX 2
antiX 5
Gentoo Linux 3 [9]
HP-UX 3 (คอนโซล/เซิร์ฟเวอร์/ผู้ใช้หลายคน) หรือ 4 (กราฟิก)
Linux ตั้งแต่เริ่มต้น 3
Slackware Linux 3
Solaris / อิลลูโมส 3 [10]
UNIX System Vเปิดตัว 3.x, 4.x 2
UnixWare 7.x 3

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

ในระบบส่วนใหญ่ ผู้ใช้ทั้งหมดสามารถตรวจสอบระดับการทำงานปัจจุบันด้วยคำสั่งrunlevelor [11]รากผู้ใช้มักจะมีการเปลี่ยนแปลงระดับการทำงานในปัจจุบันโดยการเรียกใช้หรือคำสั่ง ไฟล์ชุด runlevel เริ่มต้นกับรายการ who -rtelinitinit/etc/inittab:initdefault:

บนระบบ Unix การเปลี่ยนระดับการทำงานทำได้โดยการเริ่มบริการที่ขาดหายไปเท่านั้น (เนื่องจากแต่ละระดับกำหนดเฉพาะบริการที่เริ่มต้น/หยุดทำงาน) [ อ้างอิงจำเป็น ]ตัวอย่างเช่น การเปลี่ยนระบบจาก runlevel 3 เป็น 4 อาจเริ่มต้นเฉพาะเซิร์ฟเวอร์ X ในเครื่องเท่านั้น กลับไปที่รันระดับ 3 มันจะถูกหยุดอีกครั้ง

การใช้งานอื่นๆ

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

มีความพยายามหลายอย่างในการแทนที่ init daemons ดั้งเดิมเพื่อแก้ไขปัญหานี้และปัญหาการออกแบบอื่นๆ รวมไปถึง:

  • BootScriptsในGoboLinux
  • busybox-initเหมาะกับระบบปฏิบัติการฝังตัวใช้งานโดยOpenWrtก่อนที่จะถูกแทนที่ด้วยprocd
  • Epochซึ่งเป็นระบบ Linux init แบบเธรดเดียวที่เน้นความเรียบง่ายและการจัดการบริการ[12]
  • Initngการแทนที่แบบเต็มของ init ที่ออกแบบมาเพื่อเริ่มกระบวนการแบบอะซิงโครนัส
  • launchdแทนที่ init ในดาร์วิน / macOS / iOS / tvOS ที่เริ่มต้นด้วยMac OS X v10.4 (เปิดตัว SystemStarter เพื่อเรียกใช้กระบวนการ 'rc.local' และ SystemStarter แบบเก่า)
  • OpenRC โปรเซส spawner ที่ใช้ init ที่ระบบจัดเตรียมไว้ ในขณะที่ให้การแยกกระบวนการ การเริ่มต้นแบบขนาน และการพึ่งพาบริการ ใช้โดยAlpine Linux , Gentooและอนุพันธ์ และมีตัวเลือกในDevuanและArtix Linux
  • runitการแทนที่แบบเต็มข้ามแพลตฟอร์มสำหรับ init ด้วยการเริ่มบริการแบบขนาน ใช้โดยค่าเริ่มต้นในVoid Linux [13]
  • Sun Service Management Facility (SMF) แทนที่/ออกแบบ init ใหม่ทั้งหมดตั้งแต่เริ่มต้นในillumos / Solaris โดยเริ่มด้วย Solaris 10 แต่เปิดตัวเป็นบริการเดียวโดยเริ่มต้น System V-style init
  • ต้อนที่GNUบริการและผู้จัดการภูตซึ่งให้ตรงกัน initialisation พึ่งพาตาม; เขียนในGuile Schemeและตั้งใจให้แฮ็กแบบโต้ตอบได้ระหว่างการทำงานของระบบปกติ[14]
  • s6 ซึ่งเป็นชุดซอฟต์แวร์ที่มีระบบเริ่มต้น [15] [16]
  • systemdซึ่งเป็นชุดซอฟต์แวร์ที่แทนที่ init อย่างสมบูรณ์ใน Linux ที่มี init daemon พร้อมการเริ่มต้นบริการ ตัวจัดการบริการ และคุณสมบัติอื่นๆ พร้อมกัน
  • SystemStarterซึ่งเป็นโปรเซส spawner ที่เริ่มต้นโดย init สไตล์ BSD ในMac OS Xก่อน Mac OS X v10.4
  • Upstartเป็นการแทนที่ init อย่างเต็มรูปแบบที่ออกแบบมาเพื่อเริ่มกระบวนการแบบอะซิงโครนัส ริเริ่มโดยอูบุนตูและใช้งานโดยพวกเขาจนกว่าปี 2014 นอกจากนั้นยังใช้ใน Fedora 9 [17] [18] Red Hat Enterprise Linux 6 [19]และGoogle 's Chrome OS (20)

ตั้งแต่เดือนกุมภาพันธ์ 2019 เป็นต้นไป systemd ได้ถูกนำไปใช้โดยลีนุกซ์รุ่นหลักๆ ส่วนใหญ่ [21]

ดูเพิ่มเติม

อ้างอิง

  1. ^ init(8)  – เวอร์ชัน 7 Unix Programmer's Manual
  2. ^ ttys(5)  – เวอร์ชัน 7 Unix Programmer's Manual
  3. ^ init(8)  –  4.2BSD System Manager's Manual
  4. ^ ttys(5)  – คู่มือรูปแบบไฟล์ 4.2BSD
  5. ^ init(8)  –  4.3BSD System Manager's Manual
  6. ^ ttys(5)  – คู่มือรูปแบบไฟล์ 4.3BSD
  7. ^ แอนดรู Smallshaw (7 ธันวาคม 2009) "Unix และ Linux สคริปต์เริ่มต้น 2 ส่วน"
  8. ^ "เริ่มต้น(8)" . minnie.tuhs.org .
  9. ^ "อักษรย่อ" . เอกสารคู่มือGentoo Linux Gentoo.org 2014-12-13 . สืบค้นเมื่อ2020-12-08 .
  10. ^ "วิ่งระดับ" . ออราเคิล Solaris บริหาร: งานทั่วไป ออราเคิล .
  11. ^ "หน้าคนของ UNIX : runlevel (8)" . Unixhelp.ed.ac.uk 1997-05-27. เก็บถาวรจากต้นฉบับเมื่อ 2014-07-14 . สืบค้นเมื่อ2014-07-12 .
  12. ^ "โฮมเพจระบบ Epoch Init" .
  13. ^ เป็นโมฆะหน้าหลักของลินุกซ์
  14. ^ "คนเลี้ยงแกะ - โครงการ GNU" . มูลนิธิซอฟต์แวร์เสรี, Inc สืบค้นเมื่อ2016-01-16 .
  15. ^ https://www.skarnet.org/software/s6/why.html
  16. ^ https://www.linuxquestions.org/questions/slackware-14/s6-init-system-4175658553/
  17. ^ คุณลักษณะที่ยอมรับของ Fedora 14 , 2010-07-13 , เรียกข้อมูล2010-07-13
  18. ^ "คล้อยตาม Fedora systemd เพื่อ F15" ข่าวรายสัปดาห์ของลินุกซ์ 2010-09-14 . สืบค้นเมื่อ2010-09-17 .
  19. ^ "การปรับใช้" . Red Hat Enterprise Linux 6: หมายเหตุด้านเทคนิค หมวกแดง. ดึงข้อมูลเมื่อ2013-12-31 .
  20. ^ สถาปัตยกรรมซอฟต์แวร์: เอกสารการออกแบบ Chromium OSดึงข้อมูลเมื่อ25 มกราคม 2014
  21. ^ ดู Systemd#Adoption

ลิงค์ภายนอก