BIOS

**BIOS,** viết tắt của cụm từ "**Basic Input/Output System**" (tạm dịch: **Hệ thống nhập xuất cơ bản)** là chương trình được chạy đầu tiên khi máy tính cá nhân khởi động để chuẩn bị cho máy tính nạp các chương trình phần mềm được lưu trữ trên các thiết bị lưu trữ (chẳng hạn như ổ cứng, đĩa mềm và đĩa CD). Quá trình này được biết đến là quá trình khởi động máy tính. 

BIOS nằm trên bo mạch chủ. Thuật ngữ BIOS xuất hiện lần đầu trong hệ điều hành CP/M để chỉ phần đặc thù phần cứng của CP/M được nạp trong quá trình khởi động, tương tác trực tiếp với phần cứng (các máy CP/M thường có duy nhất một trình khởi động trong ROM). Các phiên bản của DOS có một tập tin gọi là "IBMBIO.COM" hoặc "IO.SYS"; tệp này chứa các phần đặc thù phần cứng của hệ điều hành. Cùng với bộ phận đặc thù phần cứng nhưng độc lập với hệ điều hành là BIOS hệ thống (trong ROM), chúng tạo nên một phiên bản tương tự như BIOS của CP/M.

BIOS cũng là bộ phận chuẩn của máy tính. Một máy tính có thể thiếu màn hình, bàn phím, chuột, ổ cứng,... nhưng không thể thiếu BIOS.

## Cơ chế vận hành của BIOS
BIOS được chứa sẵn (thường ở dạng nén dữ liệu) trong các con chip như là PROM, EPROM hay bộ nhớ flash của bảng mạch chính. Khi máy tính được mở qua công tắc bật điện hay khi được nhấn nút nguồn,thì BIOS được khởi động và chương trình này sẽ tiến hành các thử nghiệm khám nghiệm trên các ổ đĩa, bộ nhớ, bo hình, các con chip có chức năng riêng khác và các phần cứng còn lại.

Thông thường, BIOS tự giải nén vào trong bộ nhớ chính của máy tính và bắt đầu vận hành từ đây. Hầu hết các lắp đặt của BIOS ngày nay có thể thực thi cài đặt các chương trình giao diện CMOS. Bộ phận này (CMOS) là nơi lưu giữ các dữ liệu cài đặt chuyên biệt của người dùng; như thời gian, các đặc tính chi tiết của ổ đĩa, việc gán chức năng khởi động cho bộ điều khiển (*controller*) nào, hay ngay cả mật mã khởi động máy,... CMOS được truy cập bởi BIOS.

Đối với hệ kiến trúc 80x86, mã nguồn BIOS của các máy PC và AT thời kỳ đầu đã có kèm Bản tham chiếu kĩ thuật IBM.

Trong hầu hết các lắp đặt của BIOS ngày nay, người dùng có thể lựa chọn thiết bị nào được khởi động trước: CD, đĩa cứng, đĩa mềm, ổ USB, hay các thiết bị lưu trữ tương thích. Thủ tục này đặc biệt hữu ích cho việc cài đặt các hệ điều hành hay khởi động từ CD/DVD khởi động được hay ổ USB khởi động được và cho việc lựa chọn thứ tự của việc kiểm tra sự hiện hữu của các vật liệu (*media*) khởi động được.

Một số BIOS cho phép người dùng lựa chọn hệ điều hành để nạp vào bộ nhớ (thường thấy khả năng này trong các máy mới có kiến trúc 64-bit như các hệ máy chủ Itanium của HP chẳng hạn). Mặc dù vậy, thường thấy hơn, thì thao tác này được tiến hành bởi giai đoạn hai của bộ tải khởi động (*boot loader*).

## BIOS và chế độ thực (''realmode'')
Đối với các máy theo kiến trúc 8086, khi CPU bắt đầu hoạt động nó lập tức tự cài đặt vào chế độ thực và tìm đến vị trí của đúng 16 byte trên đỉnh của Mega byte của chế độ thực tại địa chỉ 0FFFF0h. Chính tại địa chỉ này, một lệnh `jump` sẽ dẫn tới nơi mà mã BIOS được bắt đầu thi hành.

## BIOS như là phần lõi

BIOS đôi khi được gọi là phần lõi vì nó là phần tích hợp trong một hệ thống phần cứng.

Trước năm 1990, BIOS được lưu giữ trong các con chip ROM và do đó không thể thay đổi (ngoại trừ phải có các thiết bị đặc biệt để đổi phần mềm cho con chip BIOS). Do BIOS ngày càng phức tạp và nhu cầu cập nhật trở nên ngày càng cao, phần sụn BIOS nay thường được chứa trong EEPROM hay trong bộ nhớ flash để người dùng có thể cập nhật chúng dễ dàng hơn (qua đĩa mềm, ổ USB, hay các CD khởi động được). Mặc dù vậy, nếu công việc cập nhật BIOS được tiến hành với sai sót, ngắt hoặc không được tiến hành trong thời gian đủ dài thì có thể dẫn đến tình trạng máy tính hay thiết bị không sử dụng được nữa (do BIOS bị hỏng hoặc không tương thích với đòi hỏi mới của hệ điều hành). Để tránh hỏng hóc BIOS, một số bảng mạch chính loại mới có thêm chức năng lưu giữ lại một phiên bản BIOS cũ (dual bios). Ngoài ra, hầu hết các BIOS còn có một **khối khởi động** mà chúng là một phần của ROM được chạy trước tiên và không thể đổi mới được. Khối mã này sẽ kiểm nghiệm xem các phần còn lại của BIOS có còn hoạt động hay không (thông qua các thao tác như là giá trị tổng kiểm, băm (*hash*),... v.v.) trước khi thực thi chúng. Nếu khối khởi động này tìm ra hỏng hóc, thì nó thường sẽ tự khởi động từ ổ mềm để cho người dùng có thể thử đổi mới BIOS lại. Các nhà hãng sản xuất phần cứng thường xuất bản các cập nhật BIOS để cải tiến sản phẩm của họ và sửa các trục trặc trong phiên bản cũ.

## BIOS firmware
Một máy tính có thể có nhiều chip có BIOS firmware. BIOS của bo mạch chính thường chỉ chứa mã để truy cập các thành phần cơ bản của phần cứng như bàn phím, ổ đĩa mềm, các bộ điều khiển ATA (IDE), các giao diện người dùng USB (*USB human interface*) và các thiết bị lưu trữ. Thêm vào đó, các bộ điều hợp được cắm thêm vào máy, chẳng hạn các loại bộ điều khiển SCSI, RAID, NIC và các bo video, thường có BIOS của riêng mình với mục đích để hoàn thiện hay để thay thế mã của hệ thống BIOS cho chính các bộ phận đó.

Trong nhiều trường hợp, khi các thiết bị được sử dụng bởi các bộ điều hợp cắm thêm và được trực tiếp tích hợp trên bo mạch chính, thì ROM cắm thêm có thể cũng được lưu trữ như là một khối mã riêng biệt trong con chip BIOS chính. Phần này có thể được cập nhật một cách riêng biệt tùy theo BIOS "cắm thêm" (đôi khi còn được gọi là "option ROM").

Các bo cắm thêm thường chỉ đòi hỏi có thêm BIOS nếu chúng:

* Cần được sử dụng trước khi có mặt hệ điều hành (nghĩa là chúng có thể được dùng như là một phần của quá trình tải các khởi động mồi (*bootstrap*) của hệ điều hành (chẳng hạn như các cài đặt RAID cho ổ cứng trên các bộ điều khiển RAID Array cần được tiến hành trước khi cài đặt hệ điều hành), và
* Không quá đơn giản hay quá chung chung trong hoạt động. (Vì nếu quá đơn giản hoặc quá chung chung thì có thể tiến hành trực tiếp qua BIOS chính.)

Các hệ điều hành cũ như DOS, cũng như các bộ tải khởi động, có thể tiếp tục sử dụng BIOS để xử lý vào ra dữ liệu (thông qua các ngắt BIOS (*BIOS interrupt*) mà thường thấy nhất là `INT 13h`). Mặc dù vậy, hầu hết các hệ điều hành ngày nay sẽ trực tiếp liên lạc với các thiết bị phần cứng bằng cách sử dụng trình điều khiển (*device driver*) của chính các phần cứng đó để truy cập chúng. Đôi khi các BIOS cắm thêm này cũng được gọi bởi các hệ điều hành hiện đại, nhằm thực thi các thao tác đặc biệt chẳng hạn việc khởi tạo cho các thiết bị đó.

Trong khi khởi động, để tìm ra địa chỉ của ROM mở rộng được ánh xạ vào bộ nhớ chính, các kiến tạo của PC BIOS sẽ đọc quét bộ nhớ thực từ địa chỉ 0xC0000 đến địa chỉ 0xF0000, nội trong giới hạn 2 kilobyte để tìm ra hai byte chữ ký (*signature byte*) có giá trị lần lượt là 0x55 và 0xAA, nằm ngay sau hai byte đó sẽ là một byte cho biết số lượng của các khối 512 byte mà ROM mở rộng chiếm chỗ trong bộ nhớ thực.

BIOS sau đó sẽ thường dùng lệnh `jump` nhảy tới offset (*khoảng cách/địa chỉ tương đối*) được ghi ngay sau byte chứa kích thước nói trên. Từ đây, các mã ROM mở rộng sẽ lấy quyền điều hành và gọi các dịch vụ BIOS để cung cấp một giao diện cấu hình cho người dùng, đăng ký các vector ngắt cho các ứng dụng sau khởi động, hay hiển thị thông tin khám nghiệm.

Đối với các hệ thống UNIX và Windows/DOS, có một số tiện ích dành cho việc đọc phần sụn BIOS tại địa chỉ http://www.linuks.mine.nu/ree/.

## Đặc tả BIOS Khởi động
Nếu ROM mở rộng muốn thay đổi cách thức khởi động hệ thống (chẳng hạn từ một thiết bị mạng hay từ một bộ điều hợp SCSI mà BIOS chính không có mã điều vận), nó có thể dùng API của Đặc tả BIOS Khởi động (*BIOS Boot Specification -- BBS*) để đăng ký khả năng này của mình—Trên các NIC, khả năng này thường được gọi là Thức giấc bằng LAN (*wake up on LAN*) nghĩa là qua một mệnh lệnh truyền qua mạng, ta có thể khởi động một máy tính có mã BIOS hỗ trợ chức năng này).

Một khi các ROM mở rộng đã đăng ký dùng các API của BBS, người dùng máy có thể lựa chọn trong số các chức năng thêm vào này để khởi động qua giao diện sử dụng của BIOS. Đây cũng là lý do tại sao các BIOS sẽ không cho phép người dùng vào được giao diện sử dụng của BIOS cho tới khi tất cả các ROM mở rộng đã hoàn tất việc tự thực thi và đăng ký phần của chúng với API của BBS.

## Tăng và giảm chức năng
Các hệ điều hành cũ như DOS dùng BIOS để thực thi hầu hết các thao tác xuất nhập trên máy PC. Với sự xuất hiện của các hệ điều hành mới hơn như Microsoft Windows, Linux, BIOS gần như cơ bản chỉ dùng để cung cấp cài đặt khởi động phần cứng và khởi động mồi. Một khi đã chạy được, hệ điều hành ít khi phụ thuộc vào BIOS.

Trong những năm gần đây, nhờ các hệ thống thiết kế như ACPI, BIOS nhận thêm nhiều chức năng phức tạp, chẳng hạn các khía cạnh của quản lý năng lượng, cắm nóng (*hotplug*), quản lý nhiệt độ,.... Điều này dẫn tới đổi mới trách vụ của BIOS thông qua các nhà sản xuất hệ điều hành, và độ phức tạp của mã BIOS cũng tăng lên.

## Hạn chế của BIOS

Sau hơn 60 năm hoạt động trong hầu hết PC trên thế giới, BIOS dần trở nên lỗi thời, bộc lộ nhiều hạn chế. Một ví dụ, BIOS chỉ có 1 MB (Megabyte) dung lượng thực thi. Điều đó có nghĩa là BIOS gặp khó khăn trong việc khởi động các thiết bị ngoại vi đa giao tiếp qua các cổng như USB, eSATA, ThunderBolt,…, và các bộ điều khiển trên một chiếc PC đời mới. Đặc biệt là BIOS *không thể* thực thi khởi động các thiết bị *trong vòng 30 giây* sau khi bật công tắc để sẵn sàng cho quá trình nạp hệ điều hành trên máy tính.

BIOS cũng không thể khởi động từ các đĩa cứng với dung lượng lớn hơn 2,19TB (terabyte). Giới hạn này là do hạn chế từ Bản ghi khởi động chủ (MBR - Master Boot Record) trong phần cung mồi (sector 0). Trong BIOS MBR, dung lượng cực đại cho một ổ đĩa bằng 232 x 512byte (tối đa 232 sector; kích thước mỗi sector là 512 byte), tức tương đương với 2,19TB. Đây là một "lược đồ" địa chỉ cho ổ đĩa cứng đời cũ. Nghĩa là, máy tính của bạn không thể khởi động từ các ổ đĩa cứng dung lượng lớn hơn 2,2TB.

## BIOS trong thương vụ
Hầu hết các nhà cung cấp bo mạch chính PC mua quyền sử dụng một "cốt lõi" BIOS và bộ công cụ từ các hãng thương mại, nơi đã tạo ra và bảo trì các "cốt lõi" đó. Sau đó, các nhà máy sản xuất bo mạch chính sẽ điều chỉnh BIOS này cho hợp với phần cứng của họ - vì lý do này, việc cập nhật các BIOS thường được tiếp nhận trực tiếp từ các hãng chế tạo main.

## Danh mục các nhà cung cấp BIOS
* American Megatrends Inc.
* Phoenix Technologies
* Award Software International
* MicroID Research (MRBIOS)
* Insyde Software (Insyde)
* General Software (General Software)
## Chú thích

## Xem thêm
* Extensible Firmware Interface (EFI)
* LinuxBIOS là một đề án phần mềm miễn phí nhắm thay thế các BIOS thông thường.
* Input/Output Base Address
* Advanced Configuration and Power Interface (ACPI)
* machine code
* microchip
* BIOS boot devices
* BIOS Interrupt Calls
* Interface
* Tự kiểm tra khi nguồn bật (POST)

## Liên kết ngoài
* UEFI homepage
* OpenBIOS homepage
* LinuxBIOS homepage
* Adrian's Rojak Pot's The Definitive BIOS Optimization Guide
* Motherboard BIOS Flashing Guide
* BIOS Hot Flashing Guide
* BIOS-Kompendium Homepage == BIOS-Info, BIOS-Forum, Selling/programming: (E)EPROMs & FLASH-EEPROMs ("BIOS Chips") 
* Biosflash homepage - BIOS Chips Sale + Programming
* BIOS Agent
* The BIOS Boot Specification 
* BNOBTC - BIOS Tool collection - (All?) BIOS Tools in one collection 
* Video BIOS Hot Flashing Guide
* How to flash a BIOS
* Award bios identification page
* Wim's BIOS Page
* How to bypass BIOS passwords 

## Tham khảo
* Winn L. Rosch. "Hardware Bible". SAMS. ISBN 1566861276