สำรวจเคอร์เนลลินุกซ์
(reverser.dev)- เคอร์เนลลินุกซ์ ไม่ใช่โปรเซสเดี่ยว แต่เป็น ชั้นแกนหลักที่ประกอบขึ้นเป็นทั้งระบบ ซึ่งเป็นโครงสร้างที่คงอยู่ตลอดเวลาและเชื่อมฮาร์ดแวร์กับซอฟต์แวร์
- ทำหน้าที่ประสาน system call, interrupt, scheduling เพื่อให้การทำงานสำหรับโปรเซสของผู้ใช้ดำเนินต่อไป
- เคอร์เนลทำงานเป็นโครงสร้างหลายชั้นที่ ถูกทำให้เป็นนามธรรม, ทำแผนที่, แยกขาด, และควบคุม
- ยก ไฟล์ซอร์สหลัก สำหรับการเรียนรู้ เช่น
init/main.c,kernel/fork.c,include/linux/sched.h,arch/x86/kernel/entry_64.S - มีความสำคัญในฐานะ สื่อการเรียนรู้พื้นฐาน เพื่อทำความเข้าใจโครงสร้างและบทบาทของเคอร์เนล
แก่นแท้ของเคอร์เนล
- เคอร์เนลคือ ตัวระบบเอง ไม่ใช่โปรเซส เป็น ชั้นอำนาจหลักที่คงอยู่ตลอดเวลา ซึ่งเชื่อมฮาร์ดแวร์กับซอฟต์แวร์
- ทำหน้าที่ศูนย์กลางในการรองรับการทำงานของโปรเซสผู้ใช้และจัดการทรัพยากรของระบบ
- เคอร์เนลเป็น ผู้ให้บริการแก่โปรเซส โดยประสาน system call, interrupt และ scheduling เพื่อคงการทำงานของผู้ใช้ไว้
โครงสร้างแบบลำดับชั้นของระบบ
- เคอร์เนลประกอบด้วย โครงสร้างควบคุมที่ถูกทำให้เป็นนามธรรม ถูกทำแผนที่ และแยกขาดจากกัน
- หลายชั้นทำงานโต้ตอบกันในรันไทม์เพื่อรักษาเสถียรภาพและการควบคุมของระบบ
ไฟล์สำหรับการเรียนรู้
- มีการยกไฟล์สำคัญ 4 ไฟล์ต่อไปนี้เพื่อทำความเข้าใจโครงสร้างของเคอร์เนล
init/main.ckernel/fork.cinclude/linux/sched.harch/x86/kernel/entry_64.S
คำถามทบทวนแนวคิด
- ความแตกต่างพื้นฐานระหว่างเคอร์เนลกับโปรเซส: B. เคอร์เนลไม่ใช่โปรเซส แต่คือตัวระบบเอง
- วิธีที่เคอร์เนลรองรับโปรเซสผู้ใช้: B. ประสาน system call, interrupt และ scheduling
- ลักษณะเชิงลำดับชั้นของเคอร์เนล: C. โครงสร้างที่ถูกทำให้เป็นนามธรรม ถูกทำแผนที่ แยกขาด และควบคุม
1 ความคิดเห็น
ความคิดเห็นบน Hacker News
เป็นโปรเจกต์ที่เจ๋งมาก ทำให้นึกถึง โครงหน้าแบบ Talmud — โครงสร้างที่มีคำอธิบายประกอบจากหลายร้อยปีซ้อนทับกันอยู่ในหน้าเดียวช่างน่าสนใจ
แม้โค้ดจะไม่ได้เป็นเส้นตรงแบบนั้น แต่ใน Linux Kernel Explorer นี้ก็ให้ความรู้สึกถึง ‘ชั้นของคำอธิบาย’ ที่คล้ายกัน
ชอบรูปแบบโน้ตที่แปะไว้ด้านข้างเป็นพิเศษ
ลิงก์อ้างอิงที่เกี่ยวข้อง: เลย์เอาต์หน้าของ Talmud, โน้ตเกี่ยวกับเลย์เอาต์ Talmud
เหมือนผมจะพลาดอะไรไป เพราะก่อนหน้านี้ก็มีเว็บสำหรับสำรวจซอร์สเคอร์เนลมานานแล้ว — เช่น Elixir Bootlin
แต่ยังไม่เห็นว่าอันนี้มี ความสามารถเพิ่มเติม อะไรบ้าง Bootlin ยังค้นหาได้ แต่ที่นี่ไม่เห็นมี
ในยุคนี้คาดหวังว่าจะมีคำอธิบายโค้ดด้วย LLM หรืออะไรอย่าง dependency graph
GitHub API ติด rate limit เลยไม่แสดงรายการไฟล์
ถ้าใครเจอปัญหาเดียวกัน เปลี่ยน IP ด้วย VPN หรือ Cloudflare Wrap ก็แก้ได้
ถ้าเป็นฝั่งนักพัฒนา น่าจะเพิ่มตัวเลือกล็อกอิน GitHub หรือเพิ่มชั้นแคช เพื่อให้ผู้ใช้ใหม่เข้าถึงได้ง่ายขึ้น
ชอบเครื่องมือแบบนี้มาก เคยใช้เครื่องมือคล้ายกันที่ Red Hat ทำไว้เพื่อวิเคราะห์ ซอร์สโค้ดเครื่องลงคะแนนอิเล็กทรอนิกส์ของบราซิล
ตอนนั้นผมรับหน้าที่จัดระเบียบไฟล์และฟังก์ชันที่ซ้ำกัน และมันเป็นแอปเดสก์ท็อปที่ใช้ Motif UI
ชอบไอเดียนี้มาก เวลาไล่ดูโค้ดของโปรเจกต์ซับซ้อนทีไร มักไม่รู้จะเริ่มจากตรงไหน แต่เครื่องมือนี้ช่วยให้ มองเห็นโครงสร้างหลักได้อย่างรวดเร็ว
แต่เจอบั๊กอยู่อย่างหนึ่ง — ใน Chapter 2 ถ้าเปิดไดเรกทอรีอย่าง “mm/” จะขึ้นข้อผิดพลาด “Invalid file response” ดูเหมือนมันพยายามเปิดไดเรกทอรีเหมือนเป็นไฟล์
ขอชื่นชมงานของ Florent Revest ด้วย
Explorer ตัวนี้ดูเหมือนเป็นเครื่องมือที่นักพัฒนาหลายคนต้องการมานาน
ซอร์สเคอร์เนลทั้งใหญ่และซับซ้อนมากจนไม่รู้จะเริ่มตรงไหน แต่อันนี้แสดงโครงสร้างออกมาเหมือนเป็น แผนที่
มองเห็นทั้ง VFS และวิธีเชื่อมต่อของโมดูลได้ในภาพรวม แม้จะยังมีปัญหาอย่างข้อจำกัดของ API หรือข้อผิดพลาดเกี่ยวกับไดเรกทอรี แต่ก็เป็นก้าวแรกที่ยอดเยี่ยม
ตอนผมเริ่มทำงานกับลินุกซ์มันช่วยได้มาก และหลังจากนั้นก็มี Elixir ที่เขียนใหม่ด้วย Python รวมถึง ซอร์สโค้ด ด้วย
Elixir Bootlin มีมานานแล้ว แต่ ใช้งานบนมือถือได้ดีกว่า
ดูเจ๋งมาก ผู้สร้างคือ fabiomaia.eu
ผมกำลังคิดว่าจะขอให้ทำเครื่องมือคล้ายกัน สำหรับ Python
น่าจะมีประโยชน์เวลาใช้สอนวิศวกรใหม่ให้เข้าใจโครงสร้างของรีโพซิทอรี CPython
จู่ ๆ ก็สงสัยว่า ในบรรดาโค้ดของเคอร์เนล ส่วนไหนที่ น่าทึ่งที่สุด?
ไฟล์
arch/x86/kernel/entry_64.Sใน Chapter 1 เปิดไม่ได้ในต้นไม้ไดเรกทอรีก็ไม่เห็นด้วย
(เหมือนเคยมีคอมเมนต์อื่นพูดถึงปัญหานี้ แต่ดูเหมือนจะถูกลบไปแล้ว)
arch/x86/entry/entry_64.S