จะทำการดัดแปลงซอฟต์แวร์ให้เป็นแบบเรียลไทม์ได้อย่างไร? [ปิด]


9

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

คำถามโดยย่อ: วิธีใช้งานซอฟต์แวร์แบบเรียลไทม์อย่างหนักเพื่อให้แน่ใจว่าตรงตามกำหนดเวลาที่ยากหรือไม่ จำเป็นต้องใช้คุณสมบัติ QNX ใช่ไหม หรือมันเพียงพอที่จะเขียนสำหรับ linux, พอร์ตไปยัง QNX และมันจะเป็นเรียลไทม์โดยค่าเริ่มต้น

คำถามเต็ม: เราได้นำซอฟต์แวร์มัลติโพรเซสเซอร์ข้ามแพลตฟอร์มที่ซับซ้อนมาพร้อมกับการสื่อสารระหว่างกระบวนการสำหรับ Linux, Windows, Android และ QNX ภาษาการเขียนโปรแกรมคือ C ++ เราใช้ Boost และ planty ของ libs อื่น ๆ ซอฟต์แวร์ของเราทำงานได้ดีและรวดเร็ว แต่ก็ยังเป็นเครื่องต้นแบบอยู่ เพื่อจุดประสงค์ในการผลิตเราต้องดำเนินการตามเวลาจริงคุณสมบัติบางอย่างของเราต้องเป็นแบบเรียลไทม์และแข็งแกร่งมากเพราะมันมีความสำคัญและความปลอดภัยของคนที่ใช้ซอฟต์แวร์ของเราอาจขึ้นอยู่กับคุณสมบัติเหล่านั้น พวกมันทำงานได้อย่างรวดเร็ว - มากถึงหลายร้อยมิลลิวินาที แต่ฉันไม่แน่ใจว่าระบบของเราเป็นแบบเรียลไทม์เนื่องจากความจริงข้อนี้ (ฉันพูดถูก)

ดังนั้นจึงมีคำถามหลัก: วิธีการปรับเปลี่ยนซอฟต์แวร์ของเราเป็นเรียลไทม์? ฉัน googled มาก แต่ก็ยังไม่รู้จะทำยังไง

ข้อมูลเพิ่มเติมเกี่ยวกับแพลตฟอร์มของเรา: Linux และ Windows ปัจจุบันเราใช้เพื่อการทดสอบเท่านั้น Android - เรายังไม่ได้ตัดสินใจว่าต้องการหรือไม่ QNX - เป็นระบบปฏิบัติการเป้าหมายของเราสำหรับการผลิต ฉันเดาว่าคำตอบสำหรับคำถามต่อไปของฉันคือ "ไม่" :) แต่เป็นไปได้หรือไม่ที่จะรวมซอฟต์แวร์ข้ามเวลาแบบเรียลไทม์ (สำหรับ OS แบบเรียลไทม์ (RTOS) เช่นเดียวกับ OS ทั่วไป (GPOS))

อาจเป็นไปได้ว่าเราต้องใช้ความพยายามของเราในการใช้คุณสมบัติแบบเรียลไทม์สำหรับ QNX เท่านั้น แต่ฉันก็ยังไม่เข้าใจว่าจะทำอย่างไร มีใครเล่าให้ฟังคำถามนี้บ้างไหม?


55
หากโครงการของคุณสำคัญต่อความปลอดภัยคุณต้องมีคนที่เข้าใจระบบเรียลไทม์ของบัญชีเงินเดือนของคุณ
Blrfl

18
ระบบเรียลไทม์คือความแม่นยำของรหัสในแง่ของเวลาในการดำเนินการไม่ว่าจะเร็วหรือช้า
Pagotti

22
ความรู้สึกของฉันคือคุณไม่ได้ปรับเปลี่ยนซอฟต์แวร์ที่มีอยู่ให้กลายเป็นเรียลไทม์คุณออกแบบและเขียนตั้งแต่เริ่มต้นซอฟต์แวร์ใหม่โดยคำนึงถึงข้อ จำกัด ตามเวลาจริงอย่างชัดเจน และคำถามของคุณกว้างเกินไป: ซอฟต์แวร์ของคุณทำอะไรอยู่ สำหรับระบบฝังตัวแบบเรียลไทม์ที่แม่นยำสำหรับระบบฝังตัวประเภทใด (จุดประสงค์: infotainment บนเครื่องบินในเครื่องบินพาณิชย์ไม่เหมือนกับการควบคุมเครื่องปฏิกรณ์นิวเคลียร์)? คุณจำเป็นต้องแก้ไขคำถามของคุณให้เป็นรูปธรรมมากขึ้นแม่นยำและกระตุ้นให้มากขึ้น
Basile Starynkevitch

24
ความคิดเห็นของ Reread @ Blrfl จากนั้นอ่านซ้ำอีกครั้งและอีกครั้งและอีกครั้งจนกว่าคุณจะจ้างคนที่มีประสบการณ์ที่เหมาะสม หรือตรวจสอบให้แน่ใจว่าประกันความรับผิดของคุณได้รับการชำระแล้ว เพราะถ้าคุณกำลังสร้างซอฟต์แวร์ที่สำคัญต่อความปลอดภัยที่มีข้อกำหนดแบบเรียลไทม์และไม่มีประสบการณ์นั้นคุณก็จะถูกละเลยทางอาญา
kdgregory

4
คุณถามว่า: " เป็นไปได้หรือไม่ที่จะใช้ซอฟต์แวร์ข้ามแพลตฟอร์มแบบเรียลไทม์ (สำหรับระบบปฏิบัติการเรียลไทม์ (RTOS) เช่นเดียวกับระบบปฏิบัติการทั่วไป (GPOS)) " เดาของฉันคือไม่มิเช่นนั้น RTOS จะไม่ ที่มีอยู่ "Cross Platform" นั้นคล้ายกับ "Holy Grail"

คำตอบ:


38

ฟาสต์ไม่ได้หมายถึงเรียลไทม์และเรียลไทม์ไม่ได้แปลว่ารวดเร็ว

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

ตัวอย่างเช่นลองนึกถึงเครื่องเล่นวิดีโอ หากเฟรมวิดีโอไม่แสดงในอัตราที่เหมาะสมผู้ใช้จะไม่พอใจ ยิ่งถ้าภาพและเสียงไม่ตรงกัน

ตัวอย่างนี้แสดงว่าแอปพลิเคชันแบบเรียลไทม์บางตัวสามารถนำไปใช้กับระบบปฏิบัติการที่ใช้งานทั่วไปในปัจจุบัน

แต่มีความแตกต่างระหว่างฮาร์ดเรียลไทม์และซอฟท์เรียลไทม์ที่เกี่ยวกับผลที่ตามมาของการพลาดกำหนดเวลา: ในระบบเรียลไทม์ที่นุ่มนวลนี่เป็นเพียงความรำคาญหรือบริการเสื่อมโทรม ตัวอย่างเครื่องเล่นวิดีโอ) ในขณะที่มันเป็นความล้มเหลว (อาจเกิดภัยพิบัติ) ในระบบแบบเรียลไทม์เช่นในโรงไฟฟ้านิวเคลียร์


Mr. mouviciel ขอขอบคุณที่ตอบคำถามของฉันเราต้องการคุณสมบัติบางอย่างที่จะยากแบบเรียลไทม์อื่นได้นุ่มในเวลาจริงฉันไม่เข้าใจวิธีการเขียนซอฟต์แวร์เพื่อรับประกันกำหนดเวลา? คุณช่วยอธิบายคำถามนี้หน่อยได้ไหม?
user172825

7
@ user172825 - คำตอบสำหรับคำถามนี้ครอบคลุมชั้นของห้องสมุด จุดเริ่มต้นอาจเป็น googling "การเขียนโปรแกรมแบบเรียลไทม์" บทความวิกิพีเดียที่เกี่ยวข้องหรือบทช่วยสอนของ RTOS เช่น QNX หรือ RTEMS
mouviciel

มันเป็นคำถามที่ซับซ้อนที่สุดสำหรับฉัน ฉันพบหนังสือขนาดใหญ่จำนวนมากเกี่ยวกับหัวข้อนี้ แต่ฉันหวังว่ามันเป็นไปได้ที่จะอธิบายในสองประโยค :)
user172825

5
" มีเพียงสองสิ่งที่ยากในวิทยาศาสตร์คอมพิวเตอร์: การทำให้ใช้ไม่ได้และการตั้งชื่อแคช " - Phil Karlton OK และเรียลไทม์ ที่นั่นหนึ่งประโยคอธิบายว่าทำไมมันไม่สามารถอธิบายได้ในสองประโยค ตอนนี้เราจะนำคุณกลับไปที่รายการปกติของคุณ

1
ฉันพบว่าการโทรหา "เวลาจริงยาก" "เวลาที่กำหนด" มักจะช่วยชี้ประเด็นให้ผู้คนทราบ
whatsisname

15

ตามที่@mouvicielได้กล่าวไปแล้วเรียลไทม์และฟาสต์เป็นคุณสมบัติสองอย่างที่เป็นอิสระแม้ว่าจะถึงกำหนดเวลาแบบเรียลไทม์จำนวนมากแสดงว่าต้องการการตอบสนองที่รวดเร็ว

เมื่อเขียนซอฟต์แวร์ตามเวลาจริงคุณสมบัติที่สำคัญที่สุดถัดจากการตอบสนองที่ถูกต้องคือคุณสามารถทำนายได้อย่างแม่นยำว่าจะให้การตอบสนองเร็วแค่ไหน สำหรับคุณสมบัติแบบเรียลไทม์ที่ยากคุณจะต้องสามารถรับประกันได้ว่าจะถึงกำหนดเวลาภายใต้เงื่อนไขที่เป็นไปได้ทั้งหมดซึ่งไม่ได้เกิดจากไฟฟ้าดับทั้งหมด

แหล่งทั่วไปของความไม่แน่นอนสามารถพบได้ใน

  • การจัดสรรหน่วยความจำแบบไดนามิกและการรวบรวมขยะ
  • (ลำดับความสำคัญสูงกว่า) ขัดจังหวะ
  • ตัวจัดตารางเวลาในระบบปฏิบัติการ
  • การสร้างแบบไดนามิกและการทำลายของวัตถุ
  • โค้ดจำนวนมากที่ทำงานแบบมีเงื่อนไข

ฉันไม่ได้บอกว่าคุณต้องหลีกเลี่ยงพื้นที่เหล่านั้น (ตามที่คุณไม่สามารถทำได้) แต่คุณต้องระวังว่ามันจะส่งผลต่อความสะดวกในการใช้งานอย่างไรซึ่งคุณสามารถคาดการณ์ได้ว่าคุณจะตรงตามกำหนดเวลาแบบเรียลไทม์สำหรับคุณสมบัติที่เกี่ยวข้อง


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

2
ในบางกรณีคุณอาจต้องทำการวิเคราะห์WCETเพื่อทำนายเวลาดำเนินการเป็นมิลลิวินาที
Basile Starynkevitch

3
@ user172825: การจัดทำโปรไฟล์สามารถช่วยได้ แต่ส่วนมากจะมาจากประสบการณ์และการรู้ภาษาและห้องสมุดเป็นอย่างดี
Bart van Ingen Schenau

3
การทำโปรไฟล์อาจไม่ดีพอหากคุณมีข้อกำหนดแบบเรียลไทม์อย่างหนัก หากเวลารันไทม์ไม่ได้ถูกกำหนดอย่างสมบูรณ์การทำโปรไฟล์อาจทำให้คุณรู้สึกว่ามันจะเสร็จสิ้นตามกำหนดเวลาเสมอเมื่ออันที่จริงมันตรงตามกำหนดเวลา 99 ครั้งจาก 100 ถ้าคุณมีความต้องการแบบเรียลไทม์ยาก ต้องพบกัน 100 ครั้งจาก 100 ครั้ง
James_pic

2
@ user172825 เรียลไทม์สำหรับซอฟต์แวร์การผ่าตัดสมองสำหรับยา - คุณต้องมีประสบการณ์และทักษะมากมายในการดึงมันออกมาอย่างถูกต้องและคุณจะต้องมีความมั่นใจในสิ่งที่คุณกำลังทำจริงๆ โครงการเหล่านั้นถูกสร้างขึ้นให้ดีขึ้นภายใต้การดูแลของผู้เชี่ยวชาญที่มีทักษะในพื้นที่ พวกเขาไม่ใช่สิ่งที่คุณสามารถโยนให้นักพัฒนาทั่วไปและพูดว่า "ทำให้สิ่งนี้ทำงานเป็นระบบเรียลไทม์"
ต. Sar

8

ผมคิดว่าคำอธิบายที่สองประโยคเรียลไทม์คือระบบเรียลไทม์ถูกออกแบบมาเพื่อทำความเข้าใจและควบคุมเลวร้ายที่สุดกรณีเวลาการตอบสนองจากปัจจัยการผลิตที่เปลี่ยนไปเปลี่ยนเอาท์พุท

ที่ต้องมีการวิเคราะห์ที่ครอบคลุมทั้งระบบ สมมติว่าคุณมีระบบเล็ก ๆ น้อย ๆ ที่ประกอบด้วยแป้นพิมพ์ USB และเซอร์โวเบรค การตอบสนองอะไรที่คุณสามารถทำได้ด้วยระบบนี้ คุณอาจต้องพิจารณา:

  • ความถี่ในการป้อนข้อมูลการโพลและระยะเวลานี้
  • เวลาแฝงสัญญาณอินเทอร์รัปต์อินพุต
  • เวลาสลับบริบทระบบปฏิบัติการเมื่อคุณมีเหตุการณ์อินพุต
  • การจัดลำดับความสำคัญของระบบปฏิบัติการของงาน
  • หลีกเลี่ยงการใช้การจัดสรรแบบไดนามิกหรือหน่วยความจำเสมือนในโปรแกรมเพื่อหลีกเลี่ยงความล่าช้าในการตอบสนองที่ไม่แน่นอนหรือเหตุการณ์ OOM
  • หลีกเลี่ยงการใช้การรวบรวมขยะ
  • หลีกเลี่ยงการใช้ O (n) หรืออัลกอริทึมที่แย่กว่าด้วย N หรือที่คาดเดาไม่ได้สูง (โหลดเพลย์ลิสต์ขนาดใหญ่มากเข้าไปในระบบความบันเทิงในรถของคุณชะลอการตอบสนองการเบรกหรือไม่)
  • พิจารณาความล่าช้าของดิสก์หรือเครือข่าย (เช่นการใช้ CAN บัสในรถยนต์)
  • แฝงการควบคุมผลลัพธ์

ในสภาพแวดล้อมแบบนี้มักจะมีการพิจารณาเป็นพิเศษสำหรับความน่าเชื่อถือเช่นมาตรฐาน MISRA C


เป็นจริงหรือไม่ที่การเป็นเรียลไทม์นั้นรวมถึงการพิจารณาว่าการดำเนินการนั้นถูกกำหนดไว้อาจเป็นแบบเรียกซ้ำหรืออาจคำนวณได้ในบางกรณี?

ใช่สิ่งเหล่านั้นจะเป็น "ไม่ จำกัด " อนุญาตให้ใช้อัลกอริทึมแบบเรียกซ้ำได้หากการใช้สแต็กมีขอบเขตบนที่กำหนดไว้
pjc50

5
avoiding use of garbage collection- avoiding use of non-deterministic memory managementนี้ควรจะเป็น การรวบรวมขยะสามารถทำได้แบบเรียลไทม์และการจัดการหน่วยความจำแบบแมนนวลนั้นไม่จำเป็นต้องกำหนดmallocไว้ล่วงหน้า(ดูการใช้งานทั่วไปสำหรับ C)
8bittree
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.