Làm thế nào để thực hiện chương trình xảy ra trong phần sụn?


9

Tôi đã nghe từ những người làm việc trong miền phần sụn, rằng không có phần mềm điều khiển hệ điều hành (ví dụ phần sụn trong ổ USB). Chỉ có một luồng duy nhất chạy trong vòng lặp while chờ lệnh bên ngoài và đây là điểm bắt đầu cho một ngắt xảy ra, theo sau là ISR và điều khiển chảy suốt cho đến phần cứng. Nhưng về cơ bản, phần cứng đó đang thực thi mã phần sụn là gì? Có CPU hay mã dựa trên ASIC được kích hoạt miễn là thiết bị được cấp nguồn. Tôi không hiểu được sự thay đổi mô hình từ hệ thống dựa trên CPU-OS thông thường sang phần sụn.


Nếu có thể, ai đó có thể lấy ví dụ về phần sụn, cho biết CPU tạo và mọi chi tiết phần cứng và phần mềm khác. Ví dụ có thể là phần sụn trong thẻ SD, USB, bộ điều khiển ổ cứng, v.v.
Abhijit K Rao

Câu trả lời:


13

Không có sự thay đổi mô hình; trong cả hai trường hợp, CPU đang thực thi phần mềm / phần sụn.

Phần sụn và phần mềm là cùng một thứ; sự khác biệt duy nhất là cách nó được lưu trữ. Phần mềm thường được lưu trữ trên một thiết bị lưu trữ dung lượng lớn (ví dụ: ổ đĩa) và được tải vào bộ nhớ dễ bay hơi (ví dụ DRAM) trước khi được thực thi. Thật dễ dàng để thay đổi phần mềm, chỉ bằng cách thay thế tệp chứa nó bằng một phần mềm khác.

Phần sụn thường được lưu trữ trong bộ nhớ không biến đổi (ví dụ: FLASH) được kết nối trực tiếp ít nhiều với CPU. Khó sửa đổi hơn (do đó là "hãng") và nó có thể hoặc không thể được chuyển sang bộ nhớ khác để thực thi.

Thực sự, hoạt động của một máy tính có "hệ điều hành" về cơ bản không khác gì mô tả về phần sụn của bạn. Hãy nhớ rằng, bản thân HĐH chỉ là một phần mềm khác - hay nhiều khả năng là một bộ phần mềm khổng lồ phụ thuộc lẫn nhau. Ở mức thấp nhất, CPU vẫn đang ngồi trong một vòng lặp nào đó, chờ đợi mọi thứ sẽ làm. Chỉ là vòng lặp đó được chôn trong HĐH.


9

Ngay cả CPU "thông thường" có HĐH cũng phải thực thi phần sụn ... nó thường được gọi là BIOS trong một PC chung. Phần sụn cho bất kỳ CPU nào chỉ là phần mềm luôn khả dụng khi bật nguồn, cho dù CPU có được kết nối với bất kỳ thiết bị ngoại vi nào (ổ đĩa, USB, v.v.) hay không. Nếu bạn có một hệ điều hành đầy đủ thì phần sụn chỉ cần tìm ra thiết bị nào (đĩa, ổ USB, v.v.) giữ mã cho HĐH, sao chép mã vào RAM và chạy nó. Đối với các thiết bị nhúng nhỏ, không cần hệ điều hành đầy đủ vì bạn sẽ không tải các ứng dụng khác nhau hoặc kết nối nhiều loại thiết bị, vì vậy các CPU nhỏ chỉ sử dụng một hệ điều hành rất đơn giản hoặc có thể là "trình lập lịch tác vụ". Các tác vụ khác nhau có thể là đọc cảm biến, chờ nhấn nút và cập nhật màn hình. Đối với các ứng dụng rất đơn giản, CPU có nhiều thời gian để thực hiện tất cả các tác vụ, vì vậy nó chỉ thực hiện từng bước một, mà còn được gọi là phương pháp "vòng tròn". Lập lịch phức tạp hơn xem xét các ưu tiên của các nhiệm vụ.

Điểm cơ bản là mọi CPU phải có một số mã luôn có sẵn để thực thi khi bật nguồn. Mã đó thường được lưu trữ trong một bộ nhớ "chỉ đọc" hoặc ROM tương đối nhỏ, mặc dù các CPU hiện đại đưa phần sụn vào Flash ROM "hầu hết là đọc". Mã được lưu trữ theo cách này là "phần sụn" cho CPU.


6

Dường như có một số quan niệm sai lầm trong câu hỏi của bạn.

Phần sụn chỉ là phần mềm ở dạng cố định, được sử dụng trong ROM đơn giản (ghi một lần hoặc thậm chí được lập trình mặt nạ), bây giờ chủ yếu ở dạng flash (có thể ghi lại). Trên một số hệ thống, phần sụn này là phần mềm duy nhất có mặt, trên các hệ thống khác (như PC thông thường), chức năng chính của nó là tải phần mềm khác.

Một ứng dụng có thể chạy dưới sự kiểm soát của HĐH hoặc nó có thể chạy mà không cần HĐH. Tình huống thứ hai thường được gọi là 'kim loại trần': ứng dụng chạy không có gì giữa nó là 'kim loại'. Các chức năng trong tình huống với HĐH được thực hiện bởi HĐH, ví dụ như xử lý và cung cấp hệ thống tệp cho đa luồng, vẫn có thể có trong một hệ thống kim loại trần, nhưng ở dạng thư viện được liên kết với ứng dụng .

Phần mềm có thể có rất nhiều kiến ​​trúc khác nhau. Một hình thức rất đơn giản là vòng lặp 'nhận đầu vào, xử lý, ghi đầu ra'. Các hình thức phức tạp hơn có thể bao gồm bỏ phiếu, ngắt hoặc đa luồng. Cả hai ứng dụng phụ thuộc vào hệ điều hành và kim loại trần đều có thể sử dụng tất cả các kiến ​​trúc này.

Ba vấn đề này là độc lập: ví dụ phần sụn có thể chạy kim loại trần và sử dụng kiến ​​trúc đa luồng. Hoặc phần sụn là một hệ điều hành tải ứng dụng từ đĩa mềm (xin lỗi, thẻ flash ..) sử dụng kiến ​​trúc vòng lặp get-do-write đơn giản.


5

HĐH và CPU là những khái niệm khác nhau. Vâng, có một CPU, là phần cứng chính của trái tim. Nó tìm nạp các hướng dẫn phần sụn từ bộ nhớ phần sụn và mang chúng ra ngoài. (Ngày nay người ta thường cho dù hệ thống nhỏ có nhiều CPU là để thực hiện song song, bằng cách này, vì thế nó được phần nào lỗi thời để nói chuyện riêng về sự . CPU)

Phần sụn là phần mềm được lưu trữ trong bộ nhớ không bay hơi (hoặc thậm chí chỉ đọc). Bởi vì nó nằm trong bộ nhớ như vậy, phần sụn có sẵn khi máy được bật. Máy gần như có thể ngay lập tức bắt đầu thực thi phần sụn khi được bật hoặc một số chương trình khởi động nhỏ (phần sụn chính) có thể kéo phần sụn lớn hơn từ một số bộ lưu trữ điện tử như flash và đưa vào RAM, sau đó thực thi nó. Việc sử dụng lưu trữ flash hiện đại ngày nay là lý do tại sao đôi khi bạn có thể nghe thấy cụm từ "flash firmware mới", đề cập đến một quy trình nâng cấp. Phần sụn không phải dễ dàng nâng cấp như thế này. Nó có thể đi kèm với chip mạch tích hợp, do đó, việc cập nhật thiết bị lên phần sụn mới có thể liên quan đến việc loại bỏ một mạch tích hợp ("chip EPROM") khỏi ổ cắm và cắm vào một thiết bị mới. BIOS PC ' s được sử dụng để được cập nhật theo cách này và vô số các thiết bị khác. Đây thực sự là nơi mà từ này đến từ. Một số người không thoải mái khi gọi một chương trình là "phần mềm", nếu họ phải đổi chip hoặc bảng mạch để thay thế, trông giống như một bản cập nhật phần cứng. Do đó "phần sụn" đã được đặt ra: một cái gì đó "khó thay đổi" hơn phần mềm.

Phần sụn có thể là một hệ điều hành "toàn diện". Ví dụ: Tomato là phần sụn dựa trên Linux cho các bộ định tuyến không dây:

http://www.polarcloud.com/tomato

Chúng tôi có thể đăng nhập vào Tomato thông qua ssh và nhận được lời nhắc Linux. Vì vậy, nó là một hệ điều hành tiên tiến, và nó là phần sụn. Nhưng nếu bộ định tuyến có một đĩa cứng trong đó và nếu cùng một hệ điều hành phải được tải từ đĩa đó khi khởi động, nó không còn có thể được gọi là phần sụn hợp pháp. Phần sụn phải có trong bộ lưu trữ điện tử mà bộ xử lý có thể truy cập ngay lập tức khi bật nguồn, như bộ nhớ flash hoặc chip EPROM.

Nhiều thiết bị tiêu dùng hiện nay có phần mềm nâng cấp. Ví dụ: nếu bạn có máy ảnh kỹ thuật số, bạn nên tìm trang web của nó và xem liệu phiên bản phần sụn mới hơn không khả dụng để khắc phục một số vấn đề có thể có trong phần sụn được cài đặt tại nhà máy. Ngày nay, có thể dễ dàng cập nhật firmware ngay cả đối với người dùng cuối tương đối không có kỹ thuật. Cà chua đã nói ở trên là một ví dụ về phần sụn nguồn mở của bên thứ ba thay thế phần sụn của nhà máy.

Từ "hệ điều hành" chỉ đơn giản đề cập đến một chương trình điều khiển có mức độ tinh vi và hoàn thiện nhất định trong việc quản lý tài nguyên của máy và cung cấp các dịch vụ cấp cao hợp lý cho các chương trình: các tính năng như hệ thống tệp, giao thức mạng, quản lý bộ nhớ và quy trình, mức độ truy cập cao vào các thiết bị và có lẽ một số mô hình của người dùng cũng như bảo mật. Không phải tất cả trong số này phải có mặt trong một hệ điều hành. Thông thường bộ nhớ, quản lý quá trình và I / O là chìa khóa. Nếu chương trình điều khiển cho phép các chương trình khác thực thi, cung cấp cho các chương trình đó một danh tính thông qua đó chúng được liên kết với tài nguyên của chính chúng và nếu nó cung cấp dịch vụ cho chúng để quản lý bộ xử lý và bộ nhớ, và thực hiện I / O, chúng ta có thể gọi điều khiển đó lập trình một hệ điều hành.

Vì bạn tò mò, bạn thực sự có thể thích một số sách giáo khoa về kiến ​​trúc máy tính, như những cuốn của William Stallings, hoặc của Hennesy và Patterson.


4

Ở cấp độ cơ bản nhất, CPU chỉ là một máy trạng thái bước qua một chuỗi các hướng dẫn làm thay đổi trạng thái bên trong của chính nó và / hoặc tạo ra một số đầu ra. Tóm tắt và tinh chỉnh khái niệm này ở mức rất cao và bạn sẽ nhận được các sản phẩm bộ xử lý di động và máy tính để bàn mới nhất cho Intel. Nhưng nguyên tắc cơ bản khá đơn giản - bạn có thể xây dựng bộ xử lý rất cơ bản với khoảng một chục mạch tích hợp TTL và bộ vi xử lý từ đầu đến giữa những năm 1970, được thiết kế để sử dụng cho máy tính để bàn và bộ điều khiển đèn giao thông, không phức tạp hơn thế này . Rõ ràng, luật của Moore đã đưa điều này lên một cấp độ khác, và các bộ xử lý hiệu suất cao hiện đại có chút tương đồng với tổ tiên của họ từ 35 năm trước.

Mặc dù vậy, vẫn còn một thị trường khổng lồ cho các bộ xử lý (thường được gọi là vi điều khiển) ít phức tạp hơn đáng kể so với các sản phẩm tiên tiến; đây là những loại bộ xử lý bạn có thể tìm thấy trên ổ USB của mình. Để giải quyết câu hỏi của bạn - có thể một số chức năng của các thiết bị bạn đề cập có thể được xử lý bởi ASIC, nhưng nếu đồng nghiệp của bạn đang nói về các luồng và làm gián đoạn thì điều này thường cho thấy rằng có một CPU có thời gian liên quan, có thể là trên vi điều khiển . Đây thực sự là những máy tính hoàn chỉnh theo nghĩa là chúng có ALU, thanh ghi, bộ đếm chương trình, ngăn xếp, v.v., nhưng chúng có công suất rất thấp và rất rẻ, và có thể chỉ có vài chục hướng dẫn, thay vì hàng trăm kiến ​​trúc x86.

Không có yêu cầu rằng các thiết bị này có hệ điều hành thuộc bất kỳ loại nào hoặc bất kỳ khái niệm nào về chuyển đổi ngữ cảnh (mặc dù trong một số trường hợp có thể), tất cả những gì được yêu cầu cho ứng dụng của nó là thực hiện từng bước trong chương trình của nó khác, và như bạn nói nó có thể là một chương trình rất đơn giản.


1

Trừ một số quyền, CPU sẽ không biết liệu mã thực thi của nó từ HĐH hay bất kỳ loại chương trình nào khác. Đối với CPU, nó chỉ thực hiện các hướng dẫn được lấy từ bộ nhớ.

Chúng ta đừng quên hệ điều hành là gì: một chương trình luôn có trong bộ nhớ chịu trách nhiệm xử lý và lên lịch an toàn cho nhiều tác vụ. Thuật ngữ mà chúng tôi sử dụng để mô tả một nhiệm vụ độc lập là một "quy trình". Hệ điều hành cho phép các quy trình chia sẻ tài nguyên (phần cứng, bộ nhớ, v.v.) một cách an toàn và lên lịch và ưu tiên thực hiện chúng, nó cũng cung cấp các tính năng như giao tiếp giữa các quá trình. Tất cả điều này phát sinh từ nhu cầu hỗ trợ nhiều nhiệm vụ đồng thời. Trừ một số mức cấp phép, đối với CPU, nó chỉ thực hiện các lệnh OS hoặc không có HĐH - nó không biết sự khác biệt.

Khi chúng tôi viết chương trình cơ sở cho vi điều khiển, thông thường chúng tôi không có chương trình bổ sung này (HĐH) luôn trong bộ nhớ để quản lý các tác vụ cho chúng tôi. Tại sao? Bởi vì chúng tôi không có nhu cầu cho nhiều tác vụ đồng thời - các hệ thống nhúng thường được thiết kế và lập trình để chỉ làm tốt một ứng dụng. Tương phản điều này với một PC dự kiến ​​sẽ rất linh hoạt và có thể chạy tất cả các loại ứng dụng cùng một lúc.

Không còn mối lo ngại về một quá trình chiếm giữ và vượt qua không gian bộ nhớ của một tiến trình khác hoặc một quá trình ăn mòn tất cả thời gian của CPU. Điều này là do chúng tôi đang viết một chương trình duy nhất có quyền truy cập vào tất cả các tài nguyên bất cứ lúc nào vì đây là chương trình duy nhất chạy trên hệ thống và do đó chúng tôi không cần một chương trình khác như HĐH để quản lý. Một lần nữa, với CPU, nó chỉ thực hiện các hướng dẫn được lấy từ bộ nhớ, nó không thể cho biết sự khác biệt, HĐH hoặc không có HĐH.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.