ระบบปฏิบัติการมัลติทาสกิ้งมีสองประเภทหลักคือแบบ preemptive และแบบร่วมมือ ทั้งสองอนุญาตให้มีการกำหนดหลายภารกิจในระบบความแตกต่างคือวิธีการสลับงาน แน่นอนว่าด้วยหน่วยประมวลผลหลักเดียวมีเพียงงานเดียวเท่านั้นที่ทำงานในเวลาจริง
ระบบมัลติทาสกิ้งทั้งสองประเภทต้องใช้สแต็กแยกต่างหากสำหรับแต่ละงาน ดังนั้นสิ่งนี้จึงมีความหมายสองอย่างคือประการแรกหน่วยประมวลผลกลางอนุญาตให้วางที่ใดก็ได้ใน RAM และจึงมีคำแนะนำในการย้ายตัวชี้สแต็ก (SP) ไปรอบ ๆ - นั่นคือไม่มีจุดประสงค์ฮาร์ดแวร์สแต็คพิเศษเหมือนอย่างต่ำ PIC ของ สิ่งนี้ทำให้ซีรี่ย์ PIC10, 12 และ 16 ออกไป
คุณสามารถเขียนระบบปฏิบัติการเกือบทั้งหมดใน C แต่ตัวสลับงานซึ่ง SP จะย้ายไปรอบ ๆ จะต้องอยู่ในชุดประกอบ ในหลาย ๆ ครั้งฉันได้เขียนตัวสลับงานสำหรับ PIC24, PIC32, 8051 และ 80x86 ความกล้าทั้งหมดแตกต่างกันมากขึ้นอยู่กับสถาปัตยกรรมของโปรเซสเซอร์
ข้อกำหนดที่สองคือมี RAM เพียงพอที่จะจัดให้มีหลาย ๆ กอง โดยปกติแล้วหนึ่งต้องการอย่างน้อยสองร้อยไบต์สำหรับกอง; แต่แม้เพียง 128 ไบต์ต่องานแปดกองจะต้องใช้ 1K ไบต์ของ RAM - คุณไม่จำเป็นต้องจัดสรรกองซ้อนขนาดเดียวกันสำหรับแต่ละงาน จำไว้ว่าคุณต้องการสแต็กมากพอที่จะจัดการกับงานปัจจุบันและการเรียกใด ๆ ไปยังรูทีนย่อยที่ซ้อนอยู่ แต่ยังมีพื้นที่สแต็กสำหรับการโทรขัดจังหวะเนื่องจากคุณไม่เคยรู้ว่าเมื่อใดจะเกิดขึ้น
มีวิธีการที่ค่อนข้างง่ายในการพิจารณาจำนวนสแต็คที่คุณใช้สำหรับแต่ละงาน ตัวอย่างเช่นคุณสามารถเริ่มต้นกองทั้งหมดให้เป็นค่าเฉพาะพูด 0x55 และเรียกใช้ระบบในขณะที่แล้วหยุดและตรวจสอบหน่วยความจำ
คุณไม่ได้พูดว่า PIC ประเภทใดที่คุณต้องการใช้ PIC24 และ PIC32 ส่วนใหญ่จะมีพื้นที่เหลือเฟือสำหรับเรียกใช้ระบบปฏิบัติการมัลติทาสก์ PIC18 (PIC 8 บิตเพียงตัวเดียวที่มีสแต็คใน RAM) มีขนาด RAM สูงสุด 4K นั่นเป็นเรื่องที่ค่อนข้างแน่นอน
ด้วยความร่วมมือในการทำงานหลายอย่างพร้อมกัน (ที่ง่ายกว่าของสองคน) การสลับงานจะทำได้ก็ต่อเมื่องาน "เลิก" การควบคุมกลับไปยังระบบปฏิบัติการ สิ่งนี้จะเกิดขึ้นเมื่อใดก็ตามที่งานต้องเรียกรูทีน OS เพื่อทำหน้าที่บางอย่างที่มันจะรอเช่นการร้องขอ I / O หรือการจับเวลา สิ่งนี้ทำให้ง่ายขึ้นสำหรับระบบปฏิบัติการที่จะสลับกองเนื่องจากไม่จำเป็นต้องบันทึกการลงทะเบียนและข้อมูลสถานะทั้งหมด SP สามารถสลับไปยังงานอื่นได้ (ถ้าไม่มีงานอื่นพร้อมที่จะทำงาน การควบคุมที่กำหนด) หากงานปัจจุบันไม่จำเป็นต้องทำการเรียกใช้ OS แต่ได้ทำงานมาระยะหนึ่งแล้วก็จำเป็นต้องยกเลิกการควบคุมโดยสมัครใจเพื่อให้ระบบตอบสนอง
ปัญหาเกี่ยวกับการทำงานมัลติทาสกิ้งแบบมีส่วนร่วมคือถ้างานไม่เคยยอมแพ้การควบคุมก็สามารถทำให้ระบบทำงานได้ เฉพาะมันและกิจวัตรการขัดจังหวะใด ๆ ที่เกิดขึ้นเพื่อให้ได้รับการควบคุมเท่านั้นที่สามารถทำงานได้ดังนั้นระบบปฏิบัติการจะดูเหมือนล็อค นี่คือแง่มุม "ความร่วมมือ" ของระบบเหล่านี้ หากมีการใช้งานตัวจับเวลาจ้องจับผิดที่ถูกรีเซ็ตเฉพาะเมื่อมีการสลับงานจะสามารถจับงานที่ต้องทำผิดเหล่านี้ได้
Windows 3.1 และรุ่นก่อนหน้าเป็นระบบความร่วมมือซึ่งเป็นส่วนหนึ่งที่ทำให้ประสิทธิภาพไม่ได้ดีนัก
มัลติทาสกิ้งแบบ preemptive ยากที่จะใช้ ที่นี่งานไม่จำเป็นต้องยกเลิกการควบคุมด้วยตนเอง แต่แต่ละงานสามารถให้เวลาในการรันได้สูงสุด (กล่าวคือ 10 ms) จากนั้นจะสลับงานไปยังงานที่สามารถรันต่อไปได้หากมี สิ่งนี้ต้องหยุดงานโดยพลการบันทึกข้อมูลสถานะทั้งหมดแล้วสลับ SP ไปยังงานอื่นและเริ่มต้น สิ่งนี้ทำให้ตัวสลับงานซับซ้อนขึ้นต้องการกองซ้อนมากขึ้นและทำให้ระบบช้าลงเล็กน้อย
สำหรับมัลติทาสกิ้งทั้งแบบร่วมมือและแบบยึดเอาได้การขัดจังหวะสามารถเกิดขึ้นได้ทุกเวลาซึ่งจะยึดเอางานที่กำลังรันอยู่ชั่วคราว
เมื่อซูเปอร์แคทแสดงความคิดเห็นข้อดีข้อหนึ่งของการทำงานมัลติทาสกิ้งแบบร่วมมือคือการแบ่งปันทรัพยากร (เช่นฮาร์ดแวร์เช่น ADC หลายช่องทางหรือซอฟต์แวร์เช่นการแก้ไขรายการที่ลิงก์) บางครั้งสองภารกิจต้องการเข้าถึงทรัพยากรเดียวกันในเวลาเดียวกัน ด้วยการกำหนดตารางเวลาไว้ล่วงหน้าเป็นไปได้ที่ระบบปฏิบัติการจะสลับงานระหว่างงานหนึ่งโดยใช้ทรัพยากร ดังนั้นการล็อกจึงจำเป็นเพื่อป้องกันไม่ให้งานอื่นเข้ามาและเข้าถึงทรัพยากรเดียวกัน ด้วยความร่วมมือในการทำงานมัลติทาสก์สิ่งนี้ไม่จำเป็นเพราะงานจะควบคุมเมื่อมันจะปล่อยมันกลับคืนสู่ระบบปฏิบัติการด้วยตนเอง