ในกรณีที่มีระบบปฏิบัติการที่เกี่ยวข้องโปรแกรมจะไม่พูดคุยกับไดรเวอร์อุปกรณ์อย่างน้อยก็ไม่ใช่โดยตรง โปรแกรมพูดคุยกับสิ่งที่ไม่เป็นที่รู้จักในที่สุดพวกเขาก็จบลงด้วยการพูดคุยกับไดรเวอร์อุปกรณ์โดยใช้นามธรรมอย่างน้อยหนึ่งเลเยอร์
ฉันจะข้ามความซับซ้อนของระบบปฏิบัติการที่ทันสมัยและใช้CP / Mซึ่งเป็นระบบปฏิบัติการไมโครคอมพิวเตอร์ที่พัฒนาขึ้นเมื่อ 45 ปีก่อนเป็นตัวอย่าง CP / M เป็นเค้กชั้นที่มีสามชั้น:
โปรแกรม. ชั้นบนสุดเป็นโปรแกรมที่ทำสิ่งที่มีประโยชน์ (ประมวลผลคำเล่น Space Invaders) โดยทำการคำนวณและ I / O สมมติว่าในบางจุดโปรแกรมต้องการแสดงตัวอักษร 'A' เพื่อให้ผู้ใช้เห็น CP / M จัดให้มีสิ่งที่เป็นนามธรรมที่เรียกว่าคอนโซลซึ่งเป็นที่ที่ผู้ใช้โต้ตอบกับโปรแกรมควรมองหา วิธีการทั่วไปในการส่งอักขระมีคำแนะนำในการประกอบน้อย:
LD C,2 ; Load 2 into register C
LD E,65 ; Load the ASCII code for 'A' into register E
CALL 5 ; Call CP/M's routine for getting things done
(หากคุณไม่คุ้นเคยกับสิ่งเหล่านี้การลงทะเบียนอาจถือได้ว่าเป็นตัวแปรที่อยู่ในโปรเซสเซอร์) เราจะไปถึงหมายเลขมายากล2
และ5
ประมาณหนึ่งนาที Takeaway ที่นี่เป็นที่โปรแกรมทั้งหมดรู้คือมีคอนโซลและมีวิธีการเขียนถึงมัน มันไม่รู้หรือสนใจอะไรเลยนอกจากนั้น นี่เป็นนามธรรมแรกของสองเรื่องที่ CP / M ใช้สำหรับ I / O
BDOS ที่อยู่5
โปรแกรมที่เรียกว่าเป็นจุดเริ่มต้นสำหรับชั้นถัดไปที่ระบบปฏิบัติการขั้นพื้นฐานดิสก์หรือBDOS BDOS นำเสนอฟังก์ชั่นตัวเลขทั้งหมดที่เหมือนกับการสั่งซื้อตามหมายเลขจากเมนูร้านอาหาร คุณบอกว่าคุณต้องการเอาท์พุทของคอนโซลโดยโหลดC
รีจิสเตอร์ด้วยหมายเลขฟังก์ชั่น ( 2
สำหรับเอาท์พุทของคอนโซล) และE
ลงทะเบียนด้วยตัวละครที่จะส่ง เอาท์พุทของคอนโซลเป็นการทำงานที่ง่ายมากและ BDOS ไม่จำเป็นต้องทำอะไรมากไปกว่าการเรียกเลเยอร์ถัดไป
ไบออส BIOS หรือระบบอินพุต / เอาท์พุตพื้นฐานเป็นเลเยอร์ที่โค้ดเฉพาะของฮาร์ดแวร์ทำงาน ในระบบที่ทันสมัยนี่จะถือว่าเป็นชุดไดรเวอร์อุปกรณ์ เช่นเดียวกับ BDOS BIOS ให้การเรียกสำหรับชุดมาตรฐานของการดำเนินการดั้งเดิมที่ BDOS ใช้ในการทำธุรกิจ หนึ่งในการดำเนินการเหล่านั้นเรียกว่าCONOUT
ซึ่งดูแลการรับอักขระที่โปรแกรมขอให้เขียนสองเลเยอร์ด้านบนผ่านฮาร์ดแวร์ใด ๆ ก็ตามที่ทำ (ต่างจากพีซีสิ่งต่าง ๆ ไม่เหมือนกันในตอนนี้ระบบของทุกคนมีวิธีการต่าง ๆ ที่ทำให้มันเกิดขึ้น) เอาท์พุทของคอนโซลเป็นการส่งผ่านอย่างง่ายสำหรับ BDOS แต่การทำสิ่งที่ซับซ้อนกว่าเช่นการสร้างไฟล์บนดิสก์ การเรียก BIOS เพื่อจัดการกับสื่อ อีกครั้งเนื่องจาก BIOS มีอินเทอร์เฟซมาตรฐานที่เป็นนามธรรม BDOS มักจะรู้วิธีที่จะได้รับสิ่งที่ต้องการและไม่สนใจว่า BIOS ทำอะไร
คุณอาจสงสัยว่าทำไมมีสอง abstractions (program-to-BDOS และ BDOS-to-BIOS) แทนที่จะเป็นเพียงหนึ่งเดียว คำตอบคือ CP / M และ BDOS ของมันสามารถให้ในรูปแบบไบนารีให้กับผู้ผลิตคอมพิวเตอร์พวกเขาจะเขียนไบออสที่กำหนดเองพร้อมไดรเวอร์อุปกรณ์สำหรับฮาร์ดแวร์ของพวกเขาโบลต์ทั้งสองเข้าด้วยกันและจัดส่งเป็น OS สำหรับระบบของพวกเขา นี่เป็นเรื่องใหญ่เพราะ BDOS ได้รับการดูแลโดยองค์กรหนึ่งและดังนั้นจึงเป็นปริมาณที่ผู้ใช้โปรแกรมรู้อยู่เสมอทำให้สามารถเรียกใช้แอพพลิเคชั่นเดียวกันบนฮาร์ดแวร์ที่หลากหลาย (ในขณะนั้น) นี่คือเหตุผลที่ระบบปฏิบัติการที่มีอยู่และเราไม่ได้เป็นเพียงแค่การเขียนโปรแกรมที่กระดิกนิ้วเล่นกับฮาร์ดแวร์โดยตรง
ทุกสิ่งที่ฉันอธิบายที่นี่ใช้กับระบบปฏิบัติการที่ทันสมัยเช่นกัน เช่น Unix, abstracts ทุกอย่างเป็นไฟล์ มันจะช่วยให้โปรแกรมชุดเดียวกันของสายระบบ ( open()
, write()
, close()
ฯลฯ ) ในการสื่อสารไม่ว่าจะเป็นดิสก์ไดรฟ์หรือพอร์ตอนุกรม ชุดของการตัดสินใจและ abstractions มีความซับซ้อนมากขึ้น แต่ในที่สุดก็ยังคงลดลงเพื่อเลือกรหัสไดรเวอร์อุปกรณ์ที่ชั้นล่างสุดที่จะต้องทำงานเพื่อให้การดำเนินการเกิดขึ้น