การทำงานของโปรแกรมเกิดขึ้นในเฟิร์มแวร์อย่างไร


9

ฉันได้ยินจากคนที่ทำงานในโดเมนเฟิร์มแวร์ว่าไม่มีระบบปฏิบัติการที่ควบคุมเฟิร์มแวร์ (เช่นเฟิร์มแวร์ในไดรฟ์ USB) มีเธรดเดียวที่ทำงานในขณะที่รอคำสั่งภายนอกและนี่คือจุดเริ่มต้นสำหรับการขัดจังหวะที่จะเกิดขึ้นตามด้วย ISR และการควบคุมที่ไหลไปตลอดจนถึงฮาร์ดแวร์ แต่โดยพื้นฐานแล้วอะไรคือส่วนของฮาร์ดแวร์ที่รันโค้ดเฟิร์มแวร์? มีซีพียูหรือมันเป็นรหัสตาม ASIC ซึ่งถูกเรียกใช้ตราบใดที่อุปกรณ์ใช้พลังงาน ฉันไม่เข้าใจการเปลี่ยนกระบวนทัศน์จากระบบที่ใช้ CPU-OS ปกติเป็นเฟิร์มแวร์


ถ้าเป็นไปได้ใครบางคนสามารถนำตัวอย่างของเฟิร์มแวร์ระบุ CPU ทำและรายละเอียดฮาร์ดแวร์และซอฟต์แวร์อื่น ๆ ตัวอย่างอาจเป็นเฟิร์มแวร์ในการ์ด SD, USB, ตัวควบคุม HDD และอื่น ๆ
Abhijit K Rao

คำตอบ:


13

ไม่มีการเปลี่ยนกระบวนทัศน์ ในทั้งสองกรณี CPU กำลังเรียกใช้ซอฟต์แวร์ / เฟิร์มแวร์

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

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

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


9

แม้แต่ CPU "ปกติ" ที่มีระบบปฏิบัติการจะต้องใช้เฟิร์มแวร์ ... โดยปกติจะเรียกว่า BIOS ในพีซีทั่วไป เฟิร์มแวร์สำหรับ CPU ใด ๆ เป็นเพียงซอฟต์แวร์ที่สามารถใช้งานได้เสมอเมื่อเปิดเครื่องไม่ว่าจะเชื่อมต่อ CPU กับอุปกรณ์ต่อพ่วงใด ๆ (ดิสก์ไดรฟ์ USB ฯลฯ ) หรือไม่ หากคุณมีระบบปฏิบัติการเต็มรูปแบบจากนั้นเฟิร์มแวร์จะระบุว่าอุปกรณ์ใด (ดิสก์ไดรฟ์ USB ฯลฯ ) ถือรหัสสำหรับระบบปฏิบัติการคัดลอกรหัสลงใน RAM และเรียกใช้งาน สำหรับอุปกรณ์ฝังตัวขนาดเล็กไม่จำเป็นต้องใช้ระบบปฏิบัติการแบบเต็มเพราะคุณจะไม่ต้องโหลดแอพพลิเคชั่นต่าง ๆ หรือเชื่อมต่ออุปกรณ์ที่หลากหลายดังนั้นซีพียูขนาดเล็กก็ใช้ระบบปฏิบัติการที่ง่ายมากหรืออาจเป็น "task scheduler" งานที่แตกต่างกันอาจกำลังอ่านค่าเซ็นเซอร์รอให้กดปุ่มและอัปเดตจอแสดงผล สำหรับแอพพลิเคชั่นที่ง่ายมากซีพียูมีเวลาเหลือเฟือที่จะทำทุกอย่างดังนั้นมันจึงทำตามลำดับซึ่งก็เป็นที่รู้จักกันในชื่อ "round robin" ตัวกำหนดเวลาที่ซับซ้อนมากขึ้นพิจารณาลำดับความสำคัญของงาน

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


6

ดูเหมือนจะมีความเข้าใจผิดในคำถามของคุณ

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

แอปพลิเคชันสามารถทำงานภายใต้การควบคุมของระบบปฏิบัติการหรือสามารถทำงานได้โดยไม่ต้องใช้ระบบปฏิบัติการ สถานการณ์หลังมักเรียกว่า 'โลหะเปลือย': แอปพลิเคชันทำงานโดยไม่มีอะไรอยู่ระหว่างฮาร์ดแวร์นั้นคือ 'โลหะ' ฟังก์ชั่นที่อยู่ในสถานการณ์ with-OS ดำเนินการโดย OS เช่นการจัดการระบบไฟล์และข้อกำหนดสำหรับมัลติเธรดสามารถยังคงปรากฏอยู่ในระบบเปลือยโลหะ แต่ในรูปแบบของไลบรารีที่เชื่อมโยงกับแอปพลิเคชัน .

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

ปัญหาสามข้อนี้มีความเป็นอิสระ: สำหรับเฟิร์มแวร์เช่นสามารถเรียกใช้งานโลหะเปลือยและใช้สถาปัตยกรรมแบบมัลติเธรด หรือเฟิร์มแวร์เป็นระบบปฏิบัติการที่โหลดแอปพลิเคชันจากฟลอปปี้ (ขออภัยแฟลชการ์ด .. ) ที่ใช้สถาปัตยกรรมวนรอบแบบ Get-do-write อย่างง่าย


5

ระบบปฏิบัติการและ CPU เป็นแนวคิดที่แตกต่าง ใช่มี CPU ซึ่งเป็นชิ้นส่วนสำคัญของฮาร์ดแวร์ที่เป็นหัวใจของเครื่อง มันดึงคำแนะนำเฟิร์มแวร์จากหน่วยความจำเฟิร์มแวร์และดำเนินการ (ปัจจุบันมันเป็นเรื่องธรรมดาสำหรับแม้แต่ระบบขนาดเล็กที่มีหลาย CPU สำหรับการดำเนินการแบบคู่ขนานโดยวิธีการดังนั้นมันล้าสมัยค่อนข้างที่จะพูดเฉพาะเกี่ยวกับ. CPU)

เฟิร์มแวร์คือซอฟต์แวร์ที่เก็บไว้ในหน่วยความจำแบบไม่ลบเลือน (หรืออาจเป็นแบบอ่านอย่างเดียว) เนื่องจากอยู่ในหน่วยความจำเช่นนี้เฟิร์มแวร์จึงสามารถใช้งานได้เมื่อเปิดเครื่อง เครื่องอาจเริ่มดำเนินการเฟิร์มแวร์ได้เกือบจะทันทีเมื่อเปิดเครื่องหรือบางโปรแกรมบูตขนาดเล็ก (เฟิร์มแวร์ตัวเอง) สามารถดึงเฟิร์มแวร์ที่ใหญ่กว่าจากที่เก็บข้อมูลอิเล็กทรอนิกส์บางตัวเช่นแฟลชและใส่ลงใน RAM แล้วดำเนินการ การใช้งานที่ทันสมัยของที่เก็บแฟลชในปัจจุบันคือสาเหตุที่บางครั้งคุณอาจได้ยินคำว่า "กระพริบเฟิร์มแวร์ใหม่" ซึ่งหมายถึงกระบวนการอัปเกรด เฟิร์มแวร์ไม่จำเป็นต้องอัปเกรดได้อย่างง่ายดายเช่นนี้ อาจมาพร้อมกับชิปวงจรรวมเพื่อให้การอัปเดตอุปกรณ์เป็นเฟิร์มแวร์ใหม่อาจเกี่ยวข้องกับการลบวงจรรวม ("ชิป EPROM") ออกจากซ็อกเก็ตและเสียบใหม่ PC BIOS ' เคยถูกปรับปรุงด้วยวิธีนี้และอุปกรณ์อื่น ๆ อีกมากมาย นี่เป็นคำที่มาจากไหนจริงๆ บางคนอึดอัดกับการเรียกโปรแกรม "ซอฟต์แวร์" ถ้าพวกเขาต้องเปลี่ยนชิปหรือแผงวงจรเพื่อแทนที่ซึ่งดูเหมือนว่าจะเป็นการปรับปรุงฮาร์ดแวร์ ดังนั้น "เฟิร์มแวร์" จึงชื่อว่า: สิ่งที่ "ยาก" ที่จะเปลี่ยนแปลงกว่าซอฟต์แวร์

เฟิร์มแวร์อาจเป็นระบบปฏิบัติการ "เต็มเป่า" ตัวอย่างเช่น Tomato เป็นเฟิร์มแวร์ที่ใช้ Linux สำหรับเราเตอร์ไร้สาย:

http://www.polarcloud.com/tomato

เราสามารถเข้าสู่ระบบ Tomato ผ่าน ssh และรับพรอมต์ Linux ดังนั้นมันจึงเป็นระบบปฏิบัติการขั้นสูงและเป็นเฟิร์มแวร์ แต่ถ้าเราเตอร์มีฮาร์ดดิสก์อยู่ในนั้นและหากต้องโหลดระบบปฏิบัติการเดียวกันจากดิสก์นั้นเมื่อเริ่มต้นระบบจะไม่สามารถเรียกเฟิร์มแวร์ได้อย่างถูกกฎหมายอีกต่อไป เฟิร์มแวร์จะต้องอยู่ในที่จัดเก็บข้อมูลอิเล็กทรอนิกส์ที่โปรเซสเซอร์เข้าถึงได้ทันทีที่เปิดเครื่องเช่นหน่วยความจำแฟลชหรือชิป EPROM

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

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

เมื่อคุณอยากรู้คุณอาจสนุกกับหนังสือเรียนเกี่ยวกับสถาปัตยกรรมคอมพิวเตอร์เช่นหนังสือของ William Stallings หรือโดย Hennesy และ Patterson


4

ในระดับพื้นฐานที่สุดซีพียูเป็นเพียงเครื่องจักรของรัฐที่ก้าวผ่านลำดับของคำสั่งที่เปลี่ยนสถานะภายในของตัวเองและ / หรือสร้างเอาท์พุทบางอย่าง สรุปและปรับแต่งแนวคิดนี้ให้อยู่ในระดับสูงมากและคุณจะได้รับข้อเสนอเดสก์ท็อปและโปรเซสเซอร์มือถือล่าสุดจาก Intel แต่หลักการพื้นฐานนั้นค่อนข้างง่าย - คุณสามารถสร้างโปรเซสเซอร์พื้นฐานที่มีวงจรรวม TTL ประมาณโหลและไมโครโปรเซสเซอร์ตั้งแต่ต้นถึงกลางปี ​​1970 ออกแบบมาเพื่อใช้ในเครื่องคิดเลขเดสก์ท็อปและตัวควบคุมสัญญาณไฟจราจรไม่ซับซ้อนกว่านี้มาก . เห็นได้ชัดว่ากฎของมัวร์ได้นำสิ่งนี้ไปสู่อีกระดับหนึ่งและโปรเซสเซอร์ที่มีประสิทธิภาพสูงที่ทันสมัยมีความคล้ายคลึงกันเล็กน้อยกับบรรพบุรุษของพวกเขาจาก 35 ปีที่ผ่านมา

ถึงกระนั้นก็ตามยังมีตลาดขนาดใหญ่สำหรับโปรเซสเซอร์ (โดยปกติเรียกว่าไมโครคอนโทรลเลอร์) ซึ่งมีความซับซ้อนน้อยกว่าคมตัดอย่างมีนัยสำคัญ นี่คือประเภทของโปรเซสเซอร์ที่คุณอาจพบในไดรฟ์ USB ของคุณ เพื่อตอบคำถามของคุณ - เป็นไปได้ว่าฟังก์ชั่นบางอย่างของอุปกรณ์ที่คุณพูดถึงอาจถูกจัดการโดย ASIC แต่ถ้าเพื่อนร่วมงานของคุณกำลังพูดถึงเธรดและการขัดจังหวะโดยทั่วไปแสดงว่ามีเวลา CPU ที่เกี่ยวข้องอาจเป็นไมโครคอนโทรลเลอร์ . คอมพิวเตอร์เหล่านี้เต็มเปี่ยมในแง่ที่ว่าพวกเขามี ALU, รีจิสเตอร์, ตัวนับโปรแกรม, สแต็ก ฯลฯ แต่พวกมันมีพลังงานต่ำมากและราคาไม่แพงมากและอาจมีเพียงไม่กี่โหลเท่านั้น สถาปัตยกรรม x86 หลายร้อยรายการ

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


1

ลบด้วยการอนุญาตบางอย่าง CPU จะไม่ทราบว่ารหัสการเรียกใช้จาก OS หรือโปรแกรมอื่น ๆ สำหรับซีพียูมันเป็นเพียงการดำเนินการคำสั่งที่ดึงมาจากหน่วยความจำ

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

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

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.