Khởi động máy tính

Trong máy tính, **khởi động máy tính** hay **boot máy tính** (**booting**) là một quá trình tải hay tự mồi (bootstrapping) để khởi động sự làm việc của hệ điều hành khi người dùng bật một hệ thống máy tính. Một **trình tự khởi động** (boot sequence) là một tập hợp các lệnh ban đầu được máy tính thực hiện khi nó được khởi động. Trình khởi động (bootloader) sẽ nạp hệ điều hành chính vào máy tính để hoạt động.

## Tên gọi
Boot là từ ngắn gọn của từ *bootstrap* (hay *bootstrap load*, *bootstrapping*) và có nguồn gốc từ thành ngữ *pull oneself up by one's bootstraps* (theo từ nguyên học) Việc sử dụng kéo sự chú ý đến các yêu cầu đó, nếu phần mềm trước tiên được tải lên một máy tính bằng phần mềm khác đang chạy trên máy tính, một số cơ chế phải tồn tại để tải các phần mềm ban đầu vào máy tính. Các máy tính ban đầu đã sử dụng một loạt các phương pháp ad-hoc để có được một chương trình nhỏ vào bộ nhớ để giải quyết vấn đề này. Việc phát minh ra bộ nhớ chỉ đọc (ROM) của nhiều loại hình giải quyết nghịch lý này bằng cách cho phép các máy tính sẽ được xuất xưởng với một chương trình khởi động lên mà không thể bị xóa. Tăng trưởng trong khả năng của ROM đã cho phép ngày càng nhiều quy trình xây dựng khởi động được thực hiện.

## Trình nạp khởi động (Boot loader)

Các hệ thống tính toán hoạt động được nhờ bộ xử lý trung tâm (hay một tập hợp các bộ xử lý), chỉ có thể thực thi các đoạn mã ở bộ nhớ điều hành, được biết đến với tên gọi là bộ nhớ hệ thống, với nhiều loại tùy thuộc vào công nghệ sản xuất như: ROM (Read-Only Memory - bộ nhớ chỉ đọc), hay RAM (Random Access Memory - bộ nhớ truy cập ngẫu nhiên). Mã của các hệ điều hành, các chương trình ứng dụng và dữ liệu hiện nay thường được lưu trữ trên các bộ nhớ bền, bộ nhớ ngoại vi, hay bộ nhớ thứ cấp. Các ví dụ của các loại bộ nhớ đó là: hard disk (ổ cứng), CD, USB, đĩa mềm. Khi một máy tính được bật, ban đầu nó dựa hoàn toàn vào các mã và dữ liệu nằm trên những phần có sẵn của bản đồ bộ nhớ hệ thống, như ROM, NVRAM hay CMOS RAM. Các đoạn mã và dữ liệu "cứng" được lưu trữ trên bản đồ bộ nhớ hệ thống này là những hướng dẫn cần thiết tối thiểu để truy nhập vào những thiết bị cứng ngoại vi và nạp vào bộ nhớ hệ thống tất cả những phần cần thiết của hệ điều hành. Có thể nói trong khoảng thời gian khởi động máy tính, hệ thống máy tính không có hệ điều hành nào trong bộ nhớ trong. Tuy nhiên, nếu chỉ có phần cứng máy tính không thôi (vi xử lý hay bộ nhớ hệ thống) thì không thể thực hiện được những thao tác phức tạp để nạp các tệp tin chương trình từ hệ thống lưu trữ vào bộ nhớ, mà đây vốn là một trong những tác vụ quan trọng nhất.

Chương trình giúp bắt đầu một chuỗi các lệnh được kết thúc bằng việc toàn bộ hệ điều hành được nạp vào hệ thống gọi là "bootstrap loader". Những nhà thiết kế máy tính thời kỳ đầu đã từng có ý tưởng: trước khi một máy tính ở trạng thái hoạt động hoạt động, nó phải trải qua một giai đoạn khởi động hay "mồi". Do đó, để thiết lập trạng thái hoạt động cho hệ thống máy tính, một chương trình đặc biệt, dung lượng nhỏ, gọi là "trình nạp khởi động" (tiếng Anh: "bootstrap loader" hay "bootstrap" hay "boot loader"), sẽ được thực thi trước tiên. Chương trình này chỉ có nhiệm vụ duy nhất là nạp các phần mềm khác để hệ điều hành có thể bắt đầu hoạt động. Thường thì trình nạp khởi động gồm nhiều giai đoạn, mỗi giai đoạn là một chương trình nhỏ hơn được thực hiện tuần tự, sau khi chương trình này kết thúc sẽ gọi tiếp đến chương trình kia, cho đến khi chương trình cuối cùng nạp hệ điều hành.

Những máy tính thời kỳ đầu có một dãy công tắc chuyển mạch (toggle switch) ở bảng điều khiển cho phép người điều hành có thể nhập bằng tay những lệnh khởi động bằng dưới dạng các số hệ nhị phân vào bộ nhớ trước khi chuyển tiếp điều khiển cho CPU. Trình nạp khởi động sau đó sẽ đọc hệ điều hành từ một bộ nhớ ngoài như băng đục lỗ, thẻ đục lỗ, hay đĩa nhớ.

Mã giả với ngôn ngữ Assembly mô tả một quá trình nạp hệ thống đơn giản gồm 8 bước:

 0: Đặt thanh ghi P là 8
 1: Kiểm tra thiết bị đọc băng đục lỗ sẵn sàng chưa
 2: Nếu chưa sẵn sàng, nhảy đến 1
 3: Đọc 1 byte từ băng đục lỗ vào bộ lưu
 4: Nếu kết thúc băng, nhảy đến 8
 5: Lưu bộ lưu vào địa chỉ trong thanh ghi P
 6: Tăng thanh ghi P lên
 7: Nhảy đến 1

Một ví dụ liên quan dựa trên một trình nạp hệ thống trong một máy tính cá nhân của tập đoàn Nicolet Instrumet vào những năm 1970. Lưu ý: các byte trong bước thứ hai (bước số **1**) được đọc từ băng đục lỗ theo chiều ngược.

 0: Đặt thanh ghi P là 106
 1: Kiểm tra thiết bị đọc băng đục lỗ sẵn sàng chưa
 2: Nếu chưa sẵn sàng, nhảy đến 1
 3: Đọc 1 byte từ băng đục lỗ vào bộ lưu
 4: Lưu bộ lưu vào địa chỉ trong thanh ghi P
 5: Giảm thanh ghi P 
 6: Nhảy đến 1

## Các loại boot
### Boot đa năng (multi-boot)
Gồm các thành phần Hiren's Boot, mini Windows/Windows PE, Norton Ghost, Dos Programs,...
### Boot cài đặt Windows
### Boot chạy Windows
Có khả năng khởi động windows, tệp có thể nằm ở ổ C: và có tên "win.com" (chỉ có ở phiên bản Windows chạy trên nền DOS)

## Hướng dẫn tạo khả năng boot
### Cho ổ cứng trong máy
### Cho USB và ổ cứng gắn ngoài

## Tham khảo

## Liên kết ngoài

*Máy tính khởi động như thế nào
*Giới thiệu về bootloader cho người điều hành ATmega
*Làm thế nào GRUB ăn khớp với sự bố trí trong ổ cứng của PC
*Khởi động với Grub