กลับไปหน้าบทความ

อ่าน 7 นาที

การอัปเดตซอฟต์แวร์แบบไดนามิก

ใน สาขา วิทยาการ คอมพิวเตอร์ การอัปเดตซอฟต์แวร์แบบไดนามิก ( DSU ) เป็นสาขาการวิจัยที่เกี่ยวข้องกับ การอัปเกรด โปรแกรมขณะที่โปรแกรมกำลังทำงานอยู่ ปัจจุบัน DSU...

การอัปเดตซอฟต์แวร์แบบไดนามิก

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

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

การแนะนำ

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

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

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

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

โปรแกรมที่ได้รับการอัปเดตโดยระบบ DSU เรียกว่าโปรแกรมเป้าหมาย สิ่งพิมพ์ทางวิชาการเกี่ยวกับระบบ DSU มักจะรวมโปรแกรมเป้าหมายหลายโปรแกรมไว้เป็นกรณีศึกษาvsftpd , OpenSSH , PostgreSQL , Tor , Apache , GNU Zebra , memcachedและRedisล้วนเป็นเป้าหมายของการอัปเดตแบบไดนามิกสำหรับระบบต่างๆ เนื่องจากมีโปรแกรมเพียงไม่กี่โปรแกรมที่เขียนขึ้นโดยคำนึงถึงการรองรับการอัปเดตแบบไดนามิก การปรับปรุงโปรแกรมที่มีอยู่จึงเป็นวิธีการที่มีคุณค่าในการประเมินระบบ DSU สำหรับการใช้งานจริง

ปัญหาที่ระบบอัปเดตแบบไดนามิกแก้ไขนั้น อาจมองได้ว่าเป็นจุดตัดของปัญหาอื่นๆ หลายอย่าง ตัวอย่างเช่นการบันทึกสถานะ (checkpointing) , การเชื่อมโยงแบบไดนามิก (dynamic linking ) และ การคงอยู่ของข้อมูล (persistence ) เช่น ฐานข้อมูลที่ต้องใช้งานร่วมกับไฟล์รูปแบบเดิมบนดิสก์ได้ ต้องทำการแปลงสถานะแบบเดียวกับที่ระบบอัปเดตแบบไดนามิกต้องการ ในทำนองเดียวกัน โปรแกรมที่มีสถาปัตยกรรมแบบปลั๊กอิน ต้องสามารถโหลดและเรียกใช้โค้ดใหม่ได้ในขณะรันไทม์

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

ประวัติศาสตร์

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

ระบบอัปเดตซอฟต์แวร์ แบบ ไดนามิกที่แท้จริง ระบบแรกคือDYMOS ( Dynamic Modification System ) [ 4 ]นำเสนอในปี 1983 ในวิทยานิพนธ์ปริญญาเอกของ Insup Lee DYMOS เป็นระบบที่บูรณาการอย่างสมบูรณ์ซึ่งสามารถเข้าถึงอินเทอร์เฟซผู้ใช้แบบโต้ตอบ คอมไพเลอร์และรันไทม์สำหรับModulaเวอร์ชันหนึ่ง และซอร์สโค้ด สิ่งนี้ทำให้ DYMOS สามารถตรวจสอบประเภทของการอัปเดตกับโปรแกรมที่มีอยู่ได้

การดำเนินการ

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

ไม่มีวิธีแก้ปัญหามาตรฐานเพียงวิธีเดียวสำหรับปัญหาเหล่านี้ โดยทั่วไป ระบบ DSU ที่ทำงานได้ดีในด้านปัญหาหนึ่ง มักจะต้องแลกมาด้วยประสิทธิภาพที่ลดลงในด้านอื่นๆ ตัวอย่างเช่น การทดสอบเชิงประจักษ์ของการอัปเดตแบบไดนามิกแสดงให้เห็นว่า การเพิ่มจำนวนจุดอัปเดตส่งผลให้จำนวนการอัปเดตที่ไม่ปลอดภัยเพิ่มขึ้น[ 5 ]

การแปลงโค้ด

ระบบ DSU ส่วนใหญ่ใช้ซับรูทีนเป็นหน่วยของโค้ดสำหรับการอัปเดต อย่างไรก็ตาม ระบบ DSU รุ่นใหม่กว่าจะใช้การอัปเดตโปรแกรมทั้งหมด[ 6 ] [ 7 ]

หากโปรแกรมเป้าหมายถูกเขียนด้วย ภาษา เครื่องเสมือน (Virtual Machine Language) เครื่องเสมือนสามารถใช้โครงสร้างพื้นฐานที่มีอยู่เพื่อโหลดโค้ดใหม่ได้ เนื่องจากเครื่องเสมือนสมัยใหม่รองรับการโหลดโค้ดขณะรันไทม์สำหรับกรณีการใช้งานอื่นๆ นอกเหนือจาก DSU (ส่วนใหญ่คือการดีบัก ) JVM ของ HotSpot รองรับการโหลดโค้ดขณะรันไทม์ และระบบ DSU ที่กำหนดเป้าหมายเป็น Java (ภาษาโปรแกรม)สามารถใช้คุณสมบัตินี้ได้

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

Ekiden และ Kitsuneโหลดโค้ดโปรแกรมใหม่โดยเริ่มโปรแกรมใหม่ทั้งหมด ไม่ว่าจะผ่านfork-execหรือการโหลดแบบไดนามิกจากนั้นสถานะโปรแกรมที่มีอยู่จะถูกถ่ายโอนไปยังพื้นที่โปรแกรมใหม่[ 6 ] [ 7 ]

การเปลี่ยนแปลงสถานะ

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

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

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

อัปเดตความปลอดภัย

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

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

Cons-Freenessเป็นอีกวิธีหนึ่งในการพิสูจน์ความปลอดภัยของประเภท โดยส่วนของโค้ดจะถือว่าปลอดภัยหากไม่เข้าถึงสถานะของประเภทที่กำหนดในลักษณะที่ต้องอาศัยความรู้เกี่ยวกับการแสดงประเภท โค้ดนี้อาจกล่าวได้ว่าไม่ได้เข้าถึงสถานะโดยตรงในขณะที่อาจเข้าถึงสถานะโดยนามธรรมเป็นไปได้ที่จะพิสูจน์หรือหักล้างcons-freenessสำหรับทุกประเภทในส่วนใดส่วนหนึ่งของโค้ด และระบบ DSU Ginseng ใช้สิ่งนี้เพื่อพิสูจน์ความปลอดภัยของประเภท[ 8 ] [ 9 ]หากฟังก์ชันได้รับการพิสูจน์ว่าcons-free แล้วก็สามารถอัปเดตได้แม้ว่าจะยังทำงานอยู่บนสแต็ก เนื่องจากจะไม่ทำให้เกิดข้อผิดพลาดของประเภทโดยการเข้าถึงสถานะโดยใช้การแสดงแบบเก่า

การวิเคราะห์เชิงประจักษ์ของ ความปลอดภัย แบบไร้ข้อจำกัดและความปลอดภัยเชิงรุกโดย Hayden et al. แสดงให้เห็นว่าทั้งสองเทคนิคอนุญาตให้มีการอัปเดตที่ถูกต้องส่วนใหญ่และปฏิเสธการอัปเดตที่ผิดพลาดส่วนใหญ่ อย่างไรก็ตาม การเลือกจุดอัปเดตด้วยตนเองส่งผลให้ไม่มีข้อผิดพลาดในการอัปเดต และยังคงอนุญาตให้มีการอัปเดตบ่อยครั้ง[ 5 ]

ระบบที่มีอยู่

ไดมอส

DYMOS โดดเด่นตรงที่เป็นระบบ DSU ที่ได้รับการเสนอเป็นครั้งแรก DYMOS ประกอบด้วยสภาพแวดล้อมแบบบูรณาการอย่างสมบูรณ์สำหรับโปรแกรมที่เขียนขึ้นในรูปแบบอนุพันธ์ของModulaทำให้ระบบสามารถเข้าถึงตัวแปลคำสั่ง ซอร์สโค้ด คอมไพเลอร์ และสภาพแวดล้อมรันไทม์ คล้ายกับREPLใน DYMOS การอัปเดตจะเริ่มต้นโดยผู้ใช้ดำเนินการคำสั่งในสภาพแวดล้อมแบบโต้ตอบ คำสั่งนี้ประกอบด้วยคำสั่งที่ระบุว่าการอัปเดตจะเกิดขึ้นได้เมื่อใด เรียกว่าเงื่อนไข whenข้อมูลที่มีให้ DYMOS ช่วยให้สามารถบังคับใช้ความปลอดภัยของประเภทของการอัปเดตที่เกี่ยวข้องกับโปรแกรมเป้าหมายที่กำลังทำงานอยู่[ 4 ]

Ksplice, kpatch และ kGraft

Kspliceเป็นระบบ DSU ที่กำหนดเป้าหมายเฉพาะเคอร์เนล Linux เท่านั้น ทำให้เป็นหนึ่งในระบบ DSU เฉพาะทางที่รองรับเคอร์เนลระบบปฏิบัติการ เป็นโปรแกรมเป้าหมาย Ksplice ใช้ การเปรียบเทียบระดับซอร์สโค้ดเพื่อกำหนดการเปลี่ยนแปลงระหว่างเวอร์ชันปัจจุบันและเวอร์ชันที่อัปเดตของเคอร์เนล Linux จากนั้นใช้การเขียนไบนารีใหม่เพื่อแทรกการเปลี่ยนแปลงลงในเคอร์เนลที่กำลังทำงานอยู่[ 10 ] Ksplice ได้รับการดูแลโดยกิจการเชิงพาณิชย์ที่ก่อตั้งโดยผู้เขียนดั้งเดิม Ksplice Inc. ซึ่งถูกซื้อกิจการโดยOracle Corporationในเดือนกรกฎาคม 2011 [ 11 ] Ksplice ถูกใช้ในเชิงพาณิชย์และเฉพาะในระบบปฏิบัติการOracle Linux เท่านั้น [ 12 ]

SUSEพัฒนาkGraftเป็นทางเลือกโอเพนซอร์สสำหรับการแพตช์เคอร์เนลแบบเรียลไทม์ และRed Hatก็ทำเช่นเดียวกันกับkpatchทั้งสองอนุญาตให้ใช้การเปลี่ยนแปลงระดับฟังก์ชันกับเคอร์เนล Linux ที่กำลังทำงานอยู่ โดยอาศัยกลไกการแพตช์แบบเรียลไทม์ที่สร้างขึ้นโดยftraceความแตกต่างหลักระหว่าง kGraft และ kpatch คือวิธีการที่พวกเขารับประกันความสอดคล้องของส่วนโค้ดที่อัปเดตในขณะที่ใช้hot patches kGraft และ kpatch ถูกส่งเพื่อรวมเข้ากับ เคอร์เนล Linux หลักในเดือนเมษายน 2014 และพฤษภาคม 2014 ตามลำดับ[ 13 ] [ 14 ]และพื้นฐานขั้นต่ำสำหรับการแพตช์แบบเรียลไทม์ถูกรวมเข้ากับเคอร์เนล Linux หลักในเคอร์เนลเวอร์ชัน 4.0 ซึ่งเผยแพร่เมื่อวันที่ 12 เมษายน 2015 [ 15 ]

ตั้งแต่เดือนเมษายน 2558 มีการดำเนินการอย่างต่อเนื่องในการพอร์ต kpatch และ kGraft ไปยังแกนหลักของการแพตช์สดทั่วไปที่จัดทำโดยเคอร์เนล Linux สายหลัก อย่างไรก็ตาม การใช้งานกลไกความสอดคล้องระดับฟังก์ชัน ซึ่งจำเป็นสำหรับการเปลี่ยนผ่านอย่างปลอดภัยระหว่างเวอร์ชันดั้งเดิมและเวอร์ชันที่แพตช์ของฟังก์ชันนั้นล่าช้าออกไป เนื่องจากสแต็กการเรียกที่จัดทำโดยเคอร์เนล Linux อาจไม่น่าเชื่อถือในสถานการณ์ที่เกี่ยวข้องกับโค้ดแอสเซมบลีที่ไม่มีเฟรมสแต็ก ที่เหมาะสม ส่งผลให้งานพอร์ตยังคงดำเนินต่อไปจนถึงเดือนกันยายน 2558 ในความพยายามที่จะปรับปรุงความน่าเชื่อถือของสแต็กการเรียกของเคอร์เนล ได้มีการพัฒนาเครื่องมือยูทิลิตี้พื้นที่ผู้ใช้สำหรับตรวจสอบความถูกต้องของสแต็ก โดยเฉพาะ โดยมีวัตถุประสงค์เพื่อตรวจสอบ ไฟล์ ออบเจ็กต์เวลาคอมไพล์ของเคอร์เนล และรับรองว่าสแต็กการเรียกได้รับการดูแลรักษาอยู่เสมอ นอกจากนี้ยังเปิดโอกาสให้ได้สแต็กการเรียกที่น่าเชื่อถือมากขึ้นซึ่งเป็นส่วนหนึ่งของข้อความoops ของเคอร์เนล[ 16 ] [ 17 ]

โสม

Ginseng เป็นระบบ DSU อเนกประสงค์ เป็นระบบ DSU เพียงระบบเดียวที่ใช้ เทคนิคความปลอดภัย แบบ cons-freenessซึ่งช่วยให้สามารถอัปเดตฟังก์ชันที่กำลังทำงานอยู่บนสแต็กได้ ตราบใดที่ฟังก์ชันเหล่านั้นไม่ได้เข้าถึงประเภทที่ได้รับการอัปเดตโดยตรง

Ginseng ถูกนำมาใช้เป็นคอมไพเลอร์แบบ source-to-sourceที่เขียนโดยใช้ เฟรมเวิร์ก C Intermediate LanguageในOCamlคอมไพเลอร์นี้จะแทรกการอ้างอิงทางอ้อมให้กับการเรียกฟังก์ชันและการเข้าถึงประเภททั้งหมด ทำให้ Ginseng สามารถแปลงสถานะแบบ lazy ได้โดยมีค่าใช้จ่ายคือค่าโอเวอร์เฮดคงที่สำหรับการดำเนินการโปรแกรมทั้งหมด[ 9 ]คอมไพเลอร์ของ Ginseng พิสูจน์ คุณสมบัติ cons-freenessของโปรแกรมเริ่มต้นทั้งหมดและของแพตช์แบบไดนามิก

Ginseng เวอร์ชันต่อมายังรองรับแนวคิดเรื่องความปลอดภัยในการทำธุรกรรมด้วย ซึ่งช่วยให้นักพัฒนาสามารถระบุลำดับการเรียกฟังก์ชันเป็นหน่วยตรรกะ ป้องกันการอัปเดตจากการละเมิดความหมายของโปรแกรมในลักษณะที่ไม่สามารถตรวจจับได้ด้วยความปลอดภัยในการดำเนินการหรือความปลอดภัยแบบไม่มีข้อจำกัดตัวอย่างเช่น ในOpenSSH สองเวอร์ชัน ที่ผู้เขียน Ginseng ตรวจสอบ โค้ดการตรวจสอบผู้ใช้ที่สำคัญถูกย้ายไปมาระหว่างสองฟังก์ชันที่เรียกใช้ตามลำดับ หากเวอร์ชันแรกของฟังก์ชันแรกทำงาน การอัปเดตเกิดขึ้น และเวอร์ชันใหม่ของฟังก์ชันที่สองทำงาน การตรวจสอบจะไม่เกิดขึ้น การทำเครื่องหมายส่วนนี้เป็นธุรกรรมทำให้มั่นใจได้ว่าการอัปเดตจะไม่ขัดขวางการตรวจสอบ[ 18 ]

อัพสตาร์

UpStare เป็นระบบ DSU ที่ใช้กลไกการอัปเดตที่ไม่เหมือนใคร นั่นคือการสร้างสแต็ก ใหม่ ในการอัปเดตโปรแกรมด้วย UpStare นักพัฒนาจะระบุการแมประหว่างเฟรมสแต็กที่เป็นไปได้ทั้งหมด UpStare สามารถใช้การแมปนี้เพื่ออัปเดตโปรแกรมได้ทันที ณ จุดใดก็ได้ ด้วยจำนวนเธรดเท่าใดก็ได้ และด้วยฟังก์ชันใด ๆ ที่อยู่ในสแต็ก[ 19 ]

โพลิส

PoLUS เป็นระบบ DSU สำหรับการเขียนไบนารีใหม่ในภาษา Cสามารถอัปเดตโปรแกรมที่ไม่ได้รับการแก้ไขได้ทุกจุดในระหว่างการทำงาน ในการอัปเดตฟังก์ชัน จะเขียนคำนำหน้าของฟังก์ชันเป้าหมายใหม่เพื่อเปลี่ยนเส้นทางไปยังฟังก์ชันใหม่ โดยเชื่อมโยงการเปลี่ยนเส้นทางเหล่านี้ผ่านหลายเวอร์ชัน วิธีนี้ช่วยหลีกเลี่ยงโอเวอร์เฮดสถานะคงที่ในฟังก์ชันที่ยังไม่ได้รับการอัปเดต[ 20 ]

คาตานะ

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

คิทสึเนะและเอกิเด็น

Ekiden และ Kitsune เป็นระบบ DSU สองรูปแบบที่ใช้รูปแบบการถ่ายโอนสถานะของ DSU สำหรับโปรแกรมที่เขียนด้วยภาษาCแทนที่จะอัปเดตฟังก์ชันภายในโปรแกรมเดียว Ekiden และ Kitsune จะทำการอัปเดตทั้งโปรแกรม โดยถ่ายโอนสถานะที่จำเป็นระหว่างการทำงานทั้งสองครั้ง Ekiden ทำได้โดยการเริ่มต้นโปรแกรมใหม่โดยใช้หลักการfork-exec ของ UNIXทำการแปลงสถานะของโปรแกรมเป้าหมายเป็นอนุกรม และถ่ายโอนสถานะนั้น ในขณะที่ Kitsune ใช้การเชื่อมโยงแบบไดนามิกเพื่อทำการถ่ายโอนสถานะแบบ "in-place" Kitsune พัฒนามาจากโค้ดเบสของ Ekiden และอาจถือได้ว่าเป็นเวอร์ชันที่ใหม่กว่าของ Ekiden

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

เออร์ลัง

Erlangรองรับการอัปเดตซอฟต์แวร์แบบไดนามิก ซึ่งโดยทั่วไปเรียกว่า " การโหลดโค้ดขณะทำงาน" (hot code loading ) Erlang ไม่ได้กำหนดการรับประกันความปลอดภัยใด ๆ สำหรับการอัปเดต แต่แนวคิดของ Erlang แนะนำให้ผู้พัฒนาเขียนโค้ดในลักษณะที่ป้องกันความผิดพลาด เพื่อจัดการกับข้อผิดพลาดประเภทข้อมูลที่เกิดขึ้นจากการอัปเดตได้อย่างราบรื่น

ไพมอลต์

Pymoult เป็นแพลตฟอร์มการสร้างต้นแบบสำหรับการอัปเดตแบบไดนามิกที่เขียนด้วย Python โดยรวบรวมเทคนิคต่างๆ จากระบบอื่นๆ มากมาย ทำให้สามารถผสมผสานและกำหนดค่าได้ วัตถุประสงค์ของแพลตฟอร์มนี้คือเพื่อให้ผู้พัฒนาสามารถเลือกเทคนิคการอัปเดตที่เหมาะสมกับความต้องการของตนได้ ตัวอย่างเช่น สามารถผสมผสานการอัปเดตสถานะแบบ lazy ดังเช่นใน Ginseng ในขณะที่เปลี่ยนแปลงโค้ดทั้งหมดของแอปพลิเคชันดังเช่นใน Kitsune หรือ Ekiden [ 21 ] [ 22 ]

ไมโครซอฟต์ วิชวล ซี++

Microsoft กำลังใช้เทคโนโลยีการแก้ไขภายในสำหรับ Microsoft Visual C++ ซึ่งรองรับการแก้ไขฟังก์ชัน C++ แต่ละรายการในขณะที่ยังคงรักษาความถูกต้องในการทำงานของการแก้ไข ปัจจุบันแอปพลิเคชันที่ทราบคือ SQL Server ใน Azure SQL Database [ 23 ]

ดูเพิ่มเติม

  • หน้าแรกของ Ksplice
  • ซอร์สโค้ด Ksplice
  • หน้าเว็บโครงการโสมและซอร์สโค้ด / เอกสาร UpStare / เอกสาร PoLUS
  • หน้าแรกของ Erlang
  • หน้าแรกของ Katana
  • บทความไวท์เปเปอร์ในบล็อกเกี่ยวกับการแก้ไขช่องโหว่ใน Visual C++
ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=Dynamic_software_updating&oldid=1356551860 "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ การอัปเดตซอฟต์แวร์แบบไดนามิก

ใน สาขา วิทยาการ คอมพิวเตอร์ การอัปเดตซอฟต์แวร์แบบไดนามิก ( DSU ) เป็นสาขาการวิจัยที่เกี่ยวข้องกับ การอัปเกรด โปรแกรมขณะที่โปรแกรมกำลังทำงานอยู่ ปัจจุบัน DSU...

การแนะนำ

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

สาขาที่เกี่ยวข้อง

ปัญหาที่ระบบอัปเดตแบบไดนามิกแก้ไขนั้น อาจมองได้ว่าเป็นจุดตัดของปัญหาอื่นๆ หลายอย่าง ตัวอย่างเช่น การบันทึกสถานะ (checkpointing) , การเชื่อมโยงแบบไดนามิก (dynamic linking ) และ การคงอยู่ของข้อมูล (persistence ) เช่น ฐานข้อมูลที่ต้องใช้ งานร่วม...

ประวัติศาสตร์

รากฐานแรกสุดของการอัปเดตซอฟต์แวร์แบบไดนามิกคือ ระบบสำรอง ในสภาพแวดล้อมที่มีระบบสำรอง จะมีระบบสำรองพร้อมที่จะเข้าควบคุมการคำนวณที่กำลังทำงานอยู่ ในกรณีที่ระบบหลักล้มเหลว ระบบเหล่านี้ประกอบด้วยเครื่องหลักและเครื่อง สำรองพร้อมใช้งาน (hot spare ) เครื่อง...