ควรสังเกตว่าในฮาร์ดแวร์เริ่มต้น (ก่อนปี 1960) I / O นั้นง่ายกว่ามาก คุณสามารถอ่านการ์ดหรือต่อยบัตรหรือพิมพ์บรรทัดบนเครื่องพิมพ์แต่ละอันมีคำสั่งเดียว: ขนาดบัฟเฟอร์ได้รับการแก้ไขและบ่อยครั้งที่ที่อยู่บัฟเฟอร์ถูกแก้ไขเช่นกัน
แม้ในช่วงต้นยุค 60 ที่มีโปรเซสเซอร์ที่ซับซ้อนมากขึ้น (เช่น 7090) คุณยังสามารถอ่านหรือต่อยบัตรด้วยรูทีนย่อย ๆ (ประมาณ 20 คำสั่ง) ซึ่งสามารถคัดลอกลงในแต่ละโปรแกรมได้อย่างง่ายดาย
เนื่องจากคอมพิวเตอร์อุทิศให้กับงานเพียงอย่างเดียวจึงไม่สำคัญว่าตัวประมวลผลจะว่างขณะรอให้เครื่องอ่านการ์ดพร้อมที่จะอ่านการ์ดถัดไปหรือให้เครื่องพิมพ์ Line ป้อนบรรทัดถัดไป
มันเป็นเรื่องสำคัญเพราะเวลาในการคำนวณมีราคาแพงจริงๆ นี่คือเหตุผลที่ผู้คนคิดค้นการประมวลผลหลายแบบการแบ่งปันเวลาเพิ่ม I / O อะซิงโครนัสและการขัดจังหวะและไดรเวอร์อุปกรณ์และระบบปฏิบัติการ ส่วนต่อประสานอุปกรณ์ฮาร์ดแวร์นั้นซับซ้อนมากขึ้นสำหรับโปรแกรมเมอร์ทำให้สามารถเข้าถึงการลงทะเบียน I / O ระดับต่ำกว่าซึ่งต้องการความซับซ้อนมากขึ้นจากไดรเวอร์อุปกรณ์ ต้นทุนความซับซ้อน (หน่วยความจำ, เวลาการเขียนโปรแกรม) นี้ถูกตัดจำหน่ายในหลาย ๆ โปรแกรมโดยใช้อุปกรณ์ "พร้อมกัน" ซึ่งมีหลายระบบปฏิบัติการ
ยังอยู่ในยุค 80 ที่ฉันใช้คอมพิวเตอร์ที่ใช้ไมโครโปรเซสเซอร์ซึ่งเลียนแบบหนึ่งในระบบเก่าเหล่านั้น คำแนะนำเครื่องมีรูปแบบที่สม่ำเสมอกว่า 80 บิต (10 octets) และคำแนะนำในการอ่านเซกเตอร์แรกของฮาร์ดดิสก์ตัวแรกและเก็บไว้ในหน่วยความจำที่ที่อยู่ 0 นั้นสะดวกมาก: 0000000000 ดังนั้นกระบวนการบูตประกอบด้วยทุกเช้า เพื่อพิมพ์คำสั่งนี้บนเทอร์มินัลซึ่งเก็บไว้ที่ที่อยู่ 0 และเรียกใช้งานจากนั้นโหลดเซกเตอร์สำหรับบู๊ตและดำเนินการต่อที่คำสั่งถัดไป (ที่ที่อยู่ 10) ระบบไฟล์ประกอบด้วยไฟล์ "ชื่อ" การแมปตารางแบบสแตติกกับช่วงของเซกเตอร์ซึ่งถูกจัดสรรด้วยตนเอง! I / O ทำในแอสเซมเบลอร์ไปยังไฟล์เหล่านั้นโดยการอ่านหรือเขียนเซกเตอร์โดยตรงชดเชยด้วยตำแหน่งของไฟล์บนฮาร์ดดิสก์ซึ่งกู้คืนโดย "