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

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

5
คืออะไร ":-!!" ในรหัส C?
ฉันชนรหัสมาโครแปลก ๆ นี้ใน/usr/include/linux/kernel.h : /* Force a compilation error if condition is true, but also produce a result (of value 0 and type size_t), so the expression can be used e.g. in a structure initializer (or where-ever else comma expressions aren't permitted). */ #define BUILD_BUG_ON_ZERO(e) (sizeof(struct { int:-!!(e); })) #define …
1665 c  linux  macros  linux-kernel 

10
มาโครที่น่าจะเป็น / ไม่น่าจะทำงานในเคอร์เนล Linux ได้อย่างไรและประโยชน์ของมันคืออะไร?
ฉันขุดผ่านบางส่วนของเคอร์เนล Linux และพบสายเช่นนี้: if (unlikely(fd < 0)) { /* Do something */ } หรือ if (likely(!err)) { /* Do something */ } ฉันได้พบคำจำกัดความของพวกเขา: #define likely(x) __builtin_expect((x),1) #define unlikely(x) __builtin_expect((x),0) ฉันรู้ว่ามีไว้สำหรับการปรับให้เหมาะสม แต่จะทำงานอย่างไร และสามารถลดขนาดประสิทธิภาพ / ขนาดได้เท่าไรจากการใช้งาน? และมันก็คุ้มค่ากับความยุ่งยาก (และการสูญเสียความสามารถในการพกพา) อย่างน้อยในโค้ดคอขวด (ใน userspace แน่นอน)


13
เคอร์เนล Linux ทดสอบอย่างไร?
นักพัฒนาเคอร์เนล Linux จะทดสอบรหัสของพวกเขาแบบโลคัลและหลังจากที่พวกเขายอมรับแล้ว? พวกเขาใช้การทดสอบหน่วยการสร้างอัตโนมัติหรือไม่? แผนการทดสอบ?

3
จำนวนสูงสุดของทฤษฏีการเชื่อมต่อ TCP แบบเปิดที่กล่องลีนุกซ์สมัยใหม่สามารถมีได้คืออะไร
สมมติว่าไม่มีที่สิ้นสุดประสิทธิภาพจากฮาร์ดแวร์กล่อง Linux สามารถรองรับ> 65536 เปิดการเชื่อมต่อ TCP? ฉันเข้าใจว่าจำนวนพอร์ตชั่วคราว (<65536) จำกัด จำนวนการเชื่อมต่อจาก IP ท้องถิ่นหนึ่งไปยังหนึ่งพอร์ตบน IP ระยะไกลเดียว tuple (โลคัล ip, โลคัลพอร์ต, รีโมตไอพี, รีโมตพอร์ต) คือสิ่งที่นิยามการเชื่อมต่อ TCP โดยเฉพาะ สิ่งนี้หมายความว่าการเชื่อมต่อมากกว่า 65K สามารถรองรับหากมีมากกว่าหนึ่งพารามิเตอร์เหล่านี้ฟรี เช่นการเชื่อมต่อไปยังหมายเลขพอร์ตเดียวบนโฮสต์ระยะไกลหลายแห่งจากหลาย IP ท้องถิ่น มีข้อ จำกัด อีก 16 บิตในระบบหรือไม่ จำนวนไฟล์อธิบายอาจ?

4
เพิ่มจำนวนสูงสุดของการเชื่อมต่อ TCP / IP ใน Linux
ฉันกำลังเขียนโปรแกรมเซิร์ฟเวอร์และดูเหมือนว่าจำนวนการเชื่อมต่อของฉันถูก จำกัด เนื่องจากแบนด์วิดท์ของฉันไม่อิ่มตัวแม้เมื่อฉันตั้งค่าจำนวนการเชื่อมต่อเป็น "ไม่ จำกัด " ฉันจะเพิ่มหรือกำจัดจำนวนการเชื่อมต่อสูงสุดที่กล่อง Ubuntu Linux ของฉันสามารถเปิดได้ในแต่ละครั้งได้อย่างไร ระบบปฏิบัติการนี้ จำกัด หรือไม่หรือเป็นเราเตอร์หรือ ISP หรือไม่ หรือมันเป็นอย่างอื่น?

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

4
การค้นหากระบวนการที่ถูกฆ่าโดย Linux OOM killer
เมื่อ Linux มีหน่วยความจำไม่เพียงพอ (OOM) OOM killer จะเลือกกระบวนการเพื่อฆ่าตามฮิวริสติกบางอย่าง (เป็นการอ่านที่น่าสนใจ: http://lwn.net/Articles/317814/ ) หนึ่งสามารถกำหนดโดยทางโปรแกรมว่ากระบวนการใดที่ฆาตกร OOM ฆ่าเมื่อไม่นานมานี้

2
วัดเวลาใน Linux - เวลาเทียบกับนาฬิกาเทียบกับ getrusage เทียบกับ clock_gettime เทียบกับ gettimeofday เทียบกับ timespec_get?
ท่ามกลางฟังก์ชั่นจับเวลา, time, clock getrusage, clock_gettime, gettimeofdayและtimespec_getผมต้องการที่จะเข้าใจอย่างชัดเจนว่าพวกเขาจะดำเนินการและสิ่งที่มีค่าที่พวกเขากลับมาเพื่อที่จะทราบซึ่งในสถานการณ์ที่ผมต้องใช้พวกเขา แรกที่เราต้องฟังก์ชั่นประเภทกลับค่าผนังนาฬิกาเปรียบเทียบกับฟังก์ชั่นที่กลับมากระบวนการหรือหัวข้อค่า gettimeofdayส่งคืนค่านาฬิกาแขวนclock_gettimeส่งคืนค่านาฬิกาแขวนหรือค่ากระบวนการหรือเธรดขึ้นอยู่กับClockพารามิเตอร์ที่ส่งผ่านไป getrusageและclockคืนค่ากระบวนการ จากนั้นคำถามที่สองเกี่ยวกับการใช้งานฟังก์ชั่นเหล่านี้และเป็นผลให้ความถูกต้องของพวกเขา ฟังก์ชันเหล่านี้ใช้กลไกฮาร์ดแวร์หรือซอฟต์แวร์ใด ดูเหมือนว่าgetrusageจะใช้เฉพาะเคอร์เนลเห็บ (โดยทั่วไปจะมีความยาว 1 มิลลิวินาที) และด้วยเหตุนี้จึงไม่แม่นยำกว่า ms ถูกต้องหรือไม่ จากนั้นgetimeofdayฟังก์ชั่นการใช้งานดูเหมือนว่าจะถูกต้องมากที่สุดฮาร์ดแวร์พื้นฐานที่มีอยู่ ผลที่ตามมาคือความถูกต้องแม่นยำคือไมโครวินาที (ไม่สามารถมากไปกว่าเพราะ API) บนฮาร์ดแวร์ล่าสุด สิ่งที่เกี่ยวกับclockหน้าพูดคนเกี่ยวกับ "ประมาณ" มันหมายความว่าอะไร? สิ่งที่เกี่ยวกับclock_gettimeAPI อยู่ในระดับนาโนวินาทีหมายความว่าสามารถแม่นยำได้หรือไม่ถ้าฮาร์ดแวร์พื้นฐานอนุญาต? แล้วเรื่อง monotonicity ล่ะ? มีฟังก์ชั่นอื่น ๆ อีกหรือไม่?
148 c  linux  time  linux-kernel 

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

5
การเขียนโปรแกรมเพื่อรับมือกับข้อผิดพลาดของ I / O ทำให้การเขียนที่หายไปบน Linux
TL; DR: ถ้าเคอร์เนล Linux สูญเสียการเขียน I / O ที่บัฟเฟอร์แล้วมีวิธีใดบ้างที่แอปพลิเคชันจะค้นหา? ฉันรู้ว่าคุณต้องfsync()แฟ้ม (และไดเรกทอรีแม่ของมัน) เพื่อความทนทาน คำถามคือหากเคอร์เนลสูญเสียบัฟเฟอร์สกปรกที่รอการเขียนเนื่องจากข้อผิดพลาด I / O แอปพลิเคชันสามารถตรวจพบสิ่งนี้และกู้คืนหรือยกเลิก? คิดว่าแอ็พพลิเคชันฐานข้อมูล ฯลฯ ที่ลำดับการเขียนและความทนทานในการเขียนมีความสำคัญ เขียนหายไป? อย่างไร? ลินุกซ์เคอร์เนลสามารถป้องกันชั้นภายใต้สถานการณ์บางแพ้บัฟเฟอร์การร้องขอ I / O ที่ได้รับการส่งเรียบร้อยแล้วโดยwrite(), pwrite()ฯลฯ ด้วยข้อผิดพลาดเช่น: Buffer I/O error on device dm-0, logical block 12345 lost page write due to I/O error on dm-0 (ดูend_buffer_write_sync(...)และend_buffer_async_write(...)ในfs/buffer.c ) ในเมล็ดที่ใหม่กว่าข้อผิดพลาดจะมี …
138 c  linux  linux-kernel  posix 

2
ไดรเวอร์อุปกรณ์ IOCTL Linux [ปิด]
ปิด . คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ขณะนี้ยังไม่ยอมรับคำตอบ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เน้นไปที่ปัญหาเดียวโดยแก้ไขโพสต์นี้เท่านั้น ปิดให้บริการเมื่อปีที่แล้ว ปรับปรุงคำถามนี้ ใครช่วยอธิบายฉันที คืออะไรIOCTL? ใช้ทำอะไร? ฉันจะใช้มันได้อย่างไร? ทำไมฉันจึงไม่สามารถกำหนดฟังก์ชั่นใหม่ที่ทำงานเช่นเดียวกับIOCTL?

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

3
กองเคอร์เนลและสแตกพื้นที่ผู้ใช้
อะไรคือความแตกต่างระหว่าง kernel stack และ user stack? เหตุใดจึงใช้เคอร์เนลสแต็ก หากมีการประกาศตัวแปรภายในใน ISR จะเก็บไว้ที่ใด แต่ละกระบวนการมี kernel stack ของตัวเองหรือไม่? แล้วกระบวนการประสานงานระหว่างทั้งสองกองนี้อย่างไร?

7
จะเกิดอะไรขึ้นกับตัวจัดการไฟล์แบบเปิดบน Linux หากไฟล์ปลายแหลมถูกย้ายหรือถูกลบ
จะเกิดอะไรขึ้นกับตัวจัดการไฟล์ที่เปิดอยู่บน Linux หากไฟล์ปลายแหลมได้รับ: ย้ายออกไป -> ที่จับไฟล์ยังคงใช้ได้หรือไม่ ลบ -> สิ่งนี้นำไปสู่ ​​EBADF ซึ่งบ่งชี้ว่าไฟล์จัดการไม่ถูกต้องหรือไม่? แทนที่ด้วยไฟล์ใหม่ -> จัดการไฟล์ที่ชี้ไปที่ไฟล์ใหม่นี้หรือไม่ แทนที่ด้วยฮาร์ดลิงก์ไปยังไฟล์ใหม่ -> ไฟล์ของฉันจัดการ "ตาม" ลิงก์นี้หรือไม่ แทนที่ด้วยซอฟต์ลิงก์ไปยังไฟล์ใหม่ -> ไฟล์ของฉันจัดการกับไฟล์ซอฟต์ลิงก์นี้หรือไม่ ทำไมฉันถึงถามคำถามเช่นนี้: ฉันใช้ฮาร์ดแวร์แบบเสียบปลั๊กไฟ (เช่นอุปกรณ์ USB เป็นต้น) อาจเกิดขึ้นได้ที่อุปกรณ์ (รวมถึง / dev / file) ได้รับการแนบซ้ำโดยผู้ใช้หรือ Gremlin อื่น แนวทางปฏิบัติที่ดีที่สุดในการจัดการกับสิ่งนี้คืออะไร?

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