คำแนะนำสำหรับนักเรียนที่มีความทะเยอทะยานในการสร้างเคอร์เนลของคุณเอง [ปิด]


18

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

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

ขั้นตอนพื้นฐานในการสร้างเคอร์เนลคืออะไร สิ่งที่คุณต้องการที่อยู่? สั่งซื้อหรือทำสิ่งต่าง ๆ ? ฉันรู้ว่าฉันกัดมาก แต่ฉันตั้งใจมากพอที่จะรับมือกับมัน


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

2
ฉันคาดว่าจะมีทั้งหมด! ไม่ใช่ว่าจริง ๆ แล้วฉันแค่อยากเรียนรู้อย่างท่วมท้น
n0pe

@delnan ผู้ป่วยโรคจิตเภทหวาดระแวงหวาดระแวงก็เป็นเช่นนั้นเช่นกัน: templeos.org
DanteTheEgregore

@DanteTheEgregore คืออะไร
Panzercrisis

คำตอบ:


34

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

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

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

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

หากคุณวางแผนที่จะกำหนดเป้าหมาย x86 (อย่างน้อยที่สุด) คุณอาจต้องการดูMMURTL V 1.0โดย Richard Burgess สิ่งนี้นำเสนอระบบสำหรับ x86 ที่ใช้ฮาร์ดแวร์ x86 มากขึ้นตามที่ผู้ออกแบบซีพียูตั้งใจไว้ แต่เดิมเป็นสิ่งที่ระบบจริงส่วนใหญ่หลีกเลี่ยงการพกพาไปยัง CPU อื่น ๆ ในขณะที่คุณอาจเดาได้ว่าสิ่งนี้มีแนวโน้มที่จะมุ่งเน้นไปที่จุดสิ้นสุดของฮาร์ดแวร์ สำเนาที่พิมพ์ออกมาดูเหมือนจะมีราคาแพงและหายาก แต่คุณสามารถดาวน์โหลดข้อความและรหัสได้ฟรี

โชคดีที่มีความเป็นไปได้ค่อนข้างน้อยเช่นกัน - การออกแบบและการใช้งานระบบปฏิบัติการโดย Andrew Tanenbaum และ Albert Woodhull


ว้าวขอบคุณสำหรับการตอบรับที่ดี ฉันจะดูหนังสือเหล่านั้นทั้งหมด
n0pe

7
ฉันเพิ่มลิงก์ไปยัง PDF ของหนังสือและแหล่งที่มา สิ่งที่น่าอัศจรรย์เกี่ยวกับแหล่งที่มาสำหรับ v6 UNIX คือมันยาว 100 หน้ากับ 100 บรรทัดต่อหน้า และในโค้ด 10,000 บรรทัดคุณมีระบบปฏิบัติการที่สมบูรณ์และทำงานหลายอย่างพร้อมกัน หากคุณสามารถเข้าใจรหัสโดยรอบความคิดเห็นที่มีชื่อเสียงที่บรรทัด 2238 "คุณไม่ได้คาดหวังว่าจะเข้าใจสิ่งนี้" คุณสามารถให้ Gold Star และปริญญาโทกิตติมศักดิ์ได้ด้วยตัวคุณเอง สนุก!
Peter Rowell

ขอบคุณสำหรับลิงค์! ตอนนี้ฉันต้องหาที่ที่จะพิมพ์สิ่งนี้ ....
n0pe

1
Minix (หนังสือ Tannenbaum) ได้รับการออกแบบเพื่อการศึกษาและอาจเป็นสิ่งที่ต้องการในที่นี้

@PeterRowell, DMR ระบุว่ามันเป็นข้อผิดพลาดในcm.bell-labs.com/who/dmr/odd.html

12

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

นี่จะมีประโยชน์หลายอย่าง:

  1. ในที่สุดคุณจะต้องมีกระบวนการบูทสแตรปสำหรับเคอร์เนลของคุณดังนั้นมันจะไม่เป็นการออกกำลังกายที่ไม่มีจุดหมาย
  2. มันจะให้คุณฝึกฝนเป็นลายลักษณ์อักษรในที่ประชุม
  3. มันจะให้การฝึกฝนของคุณในการเขียนกิจวัตร IO ระดับต่ำ คุณเขียนข้อความไปยังหน้าจอได้อย่างไรหรืออ่านการกดแป้นเมื่อไม่มี OS ให้คุณโทร?
  4. มันจะทำให้คุณมีประสบการณ์ในการทำวิจัยเกี่ยวกับ minutiae ด้านเทคนิคของ CPU และบอร์ดแม่ (คำถามแรก: มาเธอร์บอร์ด / cpu หาโปรแกรมที่สามารถบู๊ตได้เมื่อมันเริ่มต้นอย่างไร)
  5. การเขียนเมล็ดได้กลายเป็นงานที่ซับซ้อนมากโดยมีรายละเอียดปลีกย่อยมากมาย งานนี้จะให้สิ่งที่คุณต้องเริ่มด้วยและอาจทำให้คุณไม่หลงทางในวัชพืชก่อนที่คุณจะเริ่มต้น

เมื่อคุณทำสิ่งนี้ได้แล้วคุณจะมีความคิดที่ดีขึ้นเกี่ยวกับสิ่งที่คุณกำลังทำ


ขอบคุณสำหรับสิ่งนี้ฉันคิดว่านี่เป็นสิ่งที่ฉันจะลองทำ อ่านเพิ่มเติมในอนาคตของฉัน
n0pe

7

การเรียนรู้วิธีการโปรแกรมในแอสเซมเบลอร์เป็นการเริ่มต้นที่ดีและการทำจาก MSDOS 6.0 อาจเป็นประโยชน์เช่นกันเนื่องจากขาดคุณสมบัติในตัว

การอ่านหนังสือที่ดีเช่นแนวคิดระบบปฏิบัติการจะเป็นการเริ่มต้นที่ยุติธรรมในการออกแบบเคอร์เนลของคุณเอง คุณจะต้องจัดการกับ boot boot, การจัดการไดรเวอร์อุปกรณ์, การเชื่อมต่อกับ BIOS, การสร้างและจัดการระบบไฟล์, การตั้งเวลาโปรแกรม, การโหลดโปรแกรมและการยกเลิกการโหลด, ใช้เชลล์อย่างน้อยบางประเภท (ง่ายกว่ามากในการสร้างระบบหน้าต่าง)

C / C ++ จะทำงานเฉพาะในกรณีที่เคอร์เนลของคุณเข้ากันได้กับไลบรารีมาตรฐานสำหรับภาษาเหล่านี้มิฉะนั้นคุณจะต้องเขียนสำเนาของไลบรารีเหล่านี้ด้วยเช่นกัน

นั่นไม่ได้เริ่มคิดเกี่ยวกับมัลติเธรดความปลอดภัยของระบบเครือข่าย


7

Minix เป็น Unix clone ที่ดี (ซึ่งเป็นแรงบันดาลใจให้กับ Linux) ซึ่งถูกเขียนขึ้นเพื่อการสอน

Andrew S. Tannenbaum เป็นนักเขียนและอาจารย์ที่ยอดเยี่ยมและได้เขียนหนังสือทั้งเล่มเกี่ยวกับระบบปฏิบัติการโดยใช้ Minix เป็นตัวอย่าง (และรวมถึงซอร์สโค้ดที่จะต้องปฏิบัติตาม): http://en.wikipedia.org/wiki/Operating_Systems:_Design_and_Implementation

โดยส่วนตัวฉันคิดว่าเขาเป็นนักเขียนที่ดีกว่าโปรแกรมเมอร์ดังนั้นบางสิ่งบางอย่างไม่ชัดเจนเท่าที่ฉันต้องการโดยส่วนตัว แต่ - เฮ้ - มันใช้งานได้!

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


ฉันขอแนะนำให้รับหนังสือทางกายภาพ จดบันทึกง่ายกว่า

จริง ๆ แล้วมาคิดฉันคิดว่าฉันเห็นหนังสือใน Amazon สำหรับราคาถูก ฉันอาจไปถึงที่นั่น ขอบคุณ
n0pe

โปรดทราบว่านี่เป็นรุ่นที่สาม ฉันเชื่อว่าเราใช้ฉบับพิมพ์ครั้งแรกเมื่อฉันมีหลักสูตร

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