คำถามติดแท็ก os-kernel

2
ความแตกต่างระหว่างเธรดระดับผู้ใช้และเธรดระดับเคอร์เนลคืออะไร
หลังจากอ่านหลายแหล่งฉันยังคงสับสนเกี่ยวกับเธรดผู้ใช้และเคอร์เนลระดับ โดยเฉพาะอย่างยิ่ง: เธรดสามารถอยู่ได้ทั้งในระดับผู้ใช้และระดับเคอร์เนล อะไรคือความแตกต่างระหว่างระดับผู้ใช้และระดับเคอร์เนล?

2
ข้อผิดพลาดที่อาจเกิดขึ้นกับการมีเคอร์เนลน้อยที่สุดที่เรียกใช้รหัสที่ได้รับการจัดการคืออะไร?
สมมติว่าฉันต้องการสร้างระบบปฏิบัติการโดยใช้เคอร์เนลตัวล่างที่เล็กมากซึ่งทำหน้าที่เป็นตัวแปลรหัสที่ได้รับการจัดการ / รันไทม์และเคอร์เนลส่วนบนขนาดใหญ่ที่คอมไพล์กับภาษาเครื่องที่ไม่ใช่เจ้าของภาษา (Java bytecode, CIL เป็นต้น) ตัวอย่างของระบบปฏิบัติการที่คล้ายกันจะเป็นเอกเทศและคอสมอส ข้อผิดพลาดและความท้าทายในการพัฒนาที่มีอยู่คือการเขียนระบบปฏิบัติการด้วยโครงสร้างพื้นฐานแบบนี้ซึ่งแตกต่างจากโซลูชั่นดั้งเดิม

2
ประสิทธิภาพของ microkernel เทียบกับ kernel แบบ monolithic
microkernel ใช้ไดรเวอร์ทั้งหมดเป็นโปรแกรมพื้นที่ผู้ใช้และใช้คุณสมบัติหลักเช่น IPC ในเคอร์เนลเอง เคอร์เนลเสาหินอย่างไรก็ตามใช้ไดรเวอร์เป็นส่วนหนึ่งของเคอร์เนล (เช่นทำงานในโหมดเคอร์เนล) ฉันได้อ่านการอ้างสิทธิ์บางอย่างว่า microkernels นั้นช้ากว่า monolithic kernels เนื่องจากพวกเขาจำเป็นต้องจัดการกับข้อความที่ส่งระหว่างไดรเวอร์ในพื้นที่ของผู้ใช้ มันเป็นเรื่องจริงเหรอ? เป็นเวลานานเมล็ดส่วนใหญ่เป็นเสาหินเนื่องจากฮาร์ดแวร์ช้าเกินกว่าที่จะเรียกใช้ไมโครเคอร์เนลได้อย่างรวดเร็ว อย่างไรก็ตามขณะนี้มีไมโครเคิลและไฮบริดหลายเมล็ดเช่น GNU / Hurd, Mac OS X, สาย Windows NT เป็นต้น แล้วมีอะไรเปลี่ยนแปลงเกี่ยวกับประสิทธิภาพของ microkernels บ้าง? คำติชมของ microkernels นี้ยังใช้ได้ในปัจจุบันหรือไม่?

3
หน่วยประมวลผลหารหัสเคอร์เนลหลังจากถูกขัดจังหวะได้อย่างไร
เมื่อการขัดจังหวะเกิดขึ้นโปรเซสเซอร์จะดำเนินการกระบวนการปัจจุบันและเรียกใช้รหัสเคอร์เนลเพื่อจัดการการขัดจังหวะ โปรเซสเซอร์รู้ได้อย่างไรว่าจะเข้าไปยังเคอร์เนลอย่างไร ฉันเข้าใจว่ามีตัวจัดการขัดจังหวะซึ่งสามารถติดตั้งสำหรับแต่ละบรรทัดขัดจังหวะ แต่เนื่องจากโปรเซสเซอร์ประมวลผล 'hardwired logic' เท่านั้นจึงต้องมีสถานที่ที่กำหนดไว้ล่วงหน้าซึ่งชี้ไปที่ interrupt handler เองหรือบางรหัสที่ประมวลผลก่อน handler (เนื่องจากอาจมีตัวจัดการหลายตัวสำหรับ interrupt line หนึ่งผมถือว่า หลัง)

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

1
วัตถุประสงค์ของการทำเกลียว M: N (Hybrid) คืออะไร?
กล่าวอีกนัยหนึ่งข้อดีของการทำเธรดไฮบริดมีมากกว่า 1: 1 (เคอร์เนลเท่านั้น) และการทำเธรด N: 1 (ผู้ใช้เท่านั้น) นี่คือการติดตามเพื่อเธรดระดับผู้ใช้และเธรดระดับเคอร์เนลแตกต่างกันอย่างไร

2
ไฟล์คืออะไร?
ฉันกำลังมองหาความหมายอย่างเป็นทางการของไฟล์ที่ไม่เพียงรวมที่เก็บข้อมูล แต่ยังรวมถึง abstractions เช่น procfs หรือ / dev / null (หรือไฟล์อิงฟิวส์) ที่ไม่เกี่ยวข้องกับการจัดเก็บ จนถึงตอนนี้ฉันรู้ว่าไฟล์ทั้งหมดเป็นนามธรรมที่ สามารถระบุได้ สามารถมีชื่อ (มักจัดระเบียบในโครงสร้างแบบลำดับชั้น) สามารถเข้าถึงได้เป็นสตรีมไบต์ มักจะให้สิทธิ์และข้อมูลเมตาอื่น ๆ (เฉพาะระบบ) แต่ฉันไม่สามารถหาคำจำกัดความที่เป็นทางการที่มีประโยชน์ในหนังสือ OS ที่ฉันอ่านมา

1
การเขียนระบบปฏิบัติการมัลติทาสก์สำหรับโปรเซสเซอร์ที่ไม่มี MMU
ฉันคิดถึงการเขียนระบบปฏิบัติการอดิเรกสำหรับโปรเซสเซอร์ ARM บางตัว มีคอมพิวเตอร์บอร์ดเดี่ยวยอดนิยมหลายตัวที่มี ARM MPU ดังนั้นฉันแค่อยากจะซื้อหนึ่งในนั้น (เลือกหนึ่งที่มีเอกสารเปิดมากกว่า) ฉันรู้สึกประหลาดใจเมื่อพบว่าแม้บอร์ดที่มีหน่วยความจำเพียงพอจริง ๆ ก็ไม่มี MPUs ที่มีหน่วยความจำจัดการ เนื่องจากฉันทำงานกับโปรเซสเซอร์ i386 + มาตลอดและไม่เคยทำสิ่งอื่นใด (ยกเว้น Microchip PIC บางตัว) ตอนนี้ฉันสับสนและไม่แน่ใจว่าใครสามารถเขียนระบบปฏิบัติการที่ใช้งานได้ซึ่งฟังก์ชั่นจะไม่ถูก จำกัด เมื่อเปรียบเทียบกับระบบปฏิบัติการที่เขียน สำหรับ MPU กับ MMU ฉันสามารถคิดถึงวิธีแก้ปัญหาเล็กน้อยสำหรับ "การแทนที่" หรือ "การจำลอง" MMU และฉันมีคำถามสองสามข้อ: บนโปรเซสเซอร์ Intel ในโหมด 16 และ 32 บิตมีวิธีการใช้เซกเมนต์และตัวเลือกเซกเมนต์เพื่อใช้บล็อกหน่วยความจำที่แตกต่างกันตามงานที่แตกต่างกัน นั่นหมายความว่าฉันสามารถเปลี่ยนพื้นที่หน่วยความจำได้โดยการเปลี่ยนเนื้อหาของเซกเมนต์รีจิสเตอร์เมื่อทำการสลับงานเมื่อใช้ x86 มีแนวคิดทั่วไปสำหรับการแบ่งส่วนหน่วยความจำที่สามารถใช้กับสถาปัตยกรรม ARM ได้หรือไม่? โดยการโหลดไฟล์ออบเจกต์ที่เชื่อมโยงแทนการปฏิบัติการฉันสามารถใช้การเปลี่ยนตำแหน่ง (การแก้ไข) หรือวางโค้ดอิสระเพื่อชี้ตำแหน่งงานบนชิ้นส่วนของหน่วยความจำในลักษณะเดียวกับที่ฉันทำแผนที่หน่วยความจำโดยใช้โครงสร้างเพจจิ้ง สิ่งนี้จะมีประสิทธิภาพเพียงพอหรือไม่ …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.