Hướng dẫn này sẽ chỉ bạn cách lập kế hoạch và phát triển một hệ điều hành nếu bạn không biết cách viết mã bằng ngôn ngữ C hoặc C++. Hệ điều hành quản lý phần cứng máy tính và cung cấp các tài nguyên mà các ứng dụng cần để chạy. Viết một hệ điều hành từ đầu yêu cầu hiểu biết sâu sắc về khoa học máy tính, một ngôn ngữ lập trình như C hoặc C++, ngôn ngữ assembly và các phương pháp quản lý mã nguồn.
Bước
Học Các Kiến Thức Cơ Bản

Học một số khóa học Cơ Bản về Khoa Học Máy Tính. Khác với việc phát triển cho web, việc tạo ra một hệ điều hành đòi hỏi sự hiểu biết sâu sắc về các thuật toán, cấu trúc dữ liệu, phần cứng máy tính và quản lý tài nguyên. Mọi người đều cần một bằng cấp trong lĩnh vực này, vì vậy đừng mong chờ viết một hệ điều hành hoàn chỉnh sau khi đọc một hướng dẫn trực tuyến! Khóa học Giới thiệu về Khoa Học Máy Tính của Harvard có sẵn trực tuyến qua EDX mà không tốn phí.

Học một ngôn ngữ lập trình cấp cao như Python. Khi bạn đã có kiến thức cơ bản vững chắc về khoa học máy tính, bước tiếp theo là nắm vững C và/hoặc C++. Tương tự như việc học về khoa học máy tính, việc thành thạo một ngôn ngữ không phải là tùy chọn - bạn sẽ không thể viết mã cho một hệ điều hành nếu bạn không thể viết ứng dụng chắc chắn.

Học một ngôn ngữ hợp ngữ. Ngôn ngữ hợp ngữ là ngôn ngữ cấp thấp được thiết kế để giao tiếp với các bộ xử lý khác nhau. Vì ngôn ngữ hợp ngữ khác nhau cho các loại bộ xử lý khác nhau (ví dụ, Ngôn ngữ hợp ngữ x86 cho Intel, AMD, VIA, và các bộ xử lý khác), bạn sẽ cần phải học phiên bản cho loại bộ xử lý bạn đang viết mã cho.

Hoàn thành một hướng dẫn về hệ điều hành. Hướng dẫn về hệ điều hành sẽ hướng dẫn bạn qua quá trình tạo ra một hệ điều hành cơ bản. Điều này giúp bạn làm quen với quy trình và giúp bạn xác định xem có bất kỳ phần nào bạn thiếu sót hay không. Sau khi hoàn thành một hoặc hai hướng dẫn, bạn sẽ trở nên rất thành thạo trong việc tạo ra hệ điều hành của riêng bạn.

Xác định mục tiêu của hệ điều hành của bạn. Bạn muốn hệ điều hành của bạn làm gì? Nó nên trông như thế nào? Bạn thực sự cần phải viết một hệ điều hành hoàn chỉnh hay bạn chỉ muốn tạo ra một cái nhìn cụ thể cho máy tính để bàn của bạn? Đây là những điều cần xem xét trước khi bắt đầu viết mã.
Xây dựng Hệ điều hành của bạn

Chọn môi trường phát triển. Đây là nền tảng bạn sẽ sử dụng để lập trình hệ điều hành mới của bạn. Đây là vấn đề cá nhân, nhưng hầu hết mọi người đều sử dụng Windows hoặc một phiên bản của UNIX. Nếu bạn đang sử dụng Windows, nên cài đặt một môi trường UNIX như Cygwin hoặc MinGW. Bạn nên đảm bảo rằng bất kỳ môi trường nào bạn đang sử dụng đều bao gồm các thành phần sau:
- GCC (trình biên dịch GNU). Nếu bạn đang sử dụng Windows, bạn có thể cài đặt nó trong Cygwin hoặc MinGW.
- Binutils là một bộ công cụ được sử dụng để thao tác các tệp đối tượng. Một lần nữa, nếu bạn đang sử dụng Windows, bạn có thể cài đặt nó trong Cygwin.
- Một trình soạn thảo văn bản tốt. Vim và emacs thường được sử dụng trong môi trường UNIX. Người dùng Windows có thể sử dụng Notepad, hoặc tham khảo Notepad++ để nâng cấp lên một bảng nhiều tab.
- Perl và/hoặc Python. Một trong hai hoặc cả hai đều được khuyến nghị cho việc xử lý chuỗi.

Thiết lập hệ thống quản lý phiên bản của bạn. Viết một hệ điều hành có nghĩa là bạn có thể tạo ra hàng trăm (hoặc hàng nghìn!) dòng mã. Khi bạn làm việc trên các bản sửa đổi, điều này có thể gây nhầm lẫn. Một số lựa chọn để xem xét là CVS, Mercurial, và Subversion.

Quyết định về trình khởi động. Nếu bạn không muốn tạo ra riêng của mình, bạn có thể sử dụng một trình khởi động hiện có như Grand Unified Bootloader (GRUB). Nếu bạn thực sự muốn mạo hiểm để lập trình một trình khởi động, hãy xem Rolling Your Own Bootloader trên OSDev.org.

Chọn một thiết kế nhân hệ điều hành. Nhân hệ điều hành là trái tim của hệ điều hành của bạn, cung cấp giao diện giữa người dùng và phần cứng máy tính. Có nhân hệ điều hành monolithic và nhân hệ điều hành micro. Nhân hệ điều hành monolithic thực hiện tất cả các dịch vụ trong nhân, trong khi nhân hệ điều hành micro có một nhân nhỏ kết hợp với các tiến trình người dùng thực hiện dịch vụ. Nói chung, nhân hệ điều hành monolithic nhanh hơn, nhưng nhân hệ điều hành micro có sự cách ly lỗi và đáng tin cậy tốt hơn.

Bắt đầu từ những điều nhỏ nhặt. Bắt đầu với những thứ nhỏ như hiển thị văn bản và ngắt trước khi chuyển sang các thứ như quản lý bộ nhớ và đa nhiệm. Bạn cũng có thể thử tạo ra một hệ điều hành đơn giản 16-bit, thay vì thực hiện một bước lớn.
- Bạn sẽ không có một hệ thống đầy đủ trong hai tuần. Bắt đầu với một hệ điều hành khởi động, sau đó chuyển sang những thứ thú vị.

Kiểm thử hệ điều hành mới của bạn bằng máy ảo. Thay vì khởi động lại máy tính mỗi khi bạn thay đổi hoặc phải chuyển các tệp từ máy tính phát triển của bạn sang máy thử nghiệm, hãy sử dụng một ứng dụng máy ảo. VMWare là một lựa chọn phổ biến hoạt động trên cả Windows và Linux, và Bochs cũng vậy. Kiểm tra xem có deadlock và lỗi khác nào và sửa chúng khi cần thiết.

Phát hành một 'ứng viên phát hành.' Bạn có thể làm điều này bằng cách tải mã đã được kiểm tra của bạn lên kho lưu trữ công cộng của bạn. Điều này sẽ cho phép mọi người kiểm tra hệ điều hành của bạn và báo cáo về bất kỳ vấn đề nào họ gặp phải.

Mạng với các nhà phát triển hệ điều hành khác. Có một cộng đồng toàn bộ các nhà phát triển hệ điều hành tập trung trên các diễn đàn khác nhau, bao gồm cả /r/osdev trên Reddit và the Software Engineering Stack Exchange. Một khi bạn đã hiểu được cách phát triển một hệ điều hành cơ bản, hãy đọc các bài viết hiện có để xem loại vấn đề nào xuất hiện trong quá trình phát triển.
Mẹo
-
Để tạo ra một hệ điều hành có khả năng xử lý nhiều bộ xử lý, Bộ Quản lý Bộ Nhớ của bạn phải có các cơ chế 'khoá' để ngăn chặn nhiều bộ xử lý truy cập vào cùng một tài nguyên cùng một lúc. Các 'khóa' được sử dụng cho điều này sẽ đòi hỏi sự hiện diện của một lập lịch để đảm bảo chỉ một bộ xử lý truy cập vào một tài nguyên quan trọng vào bất kỳ thời điểm nào và tất cả các bộ xử lý khác được làm cho đợi. Tuy nhiên, lập lịch phụ thuộc vào sự hiện diện của một Bộ Quản lý Bộ Nhớ. Đây là một trường hợp của một phụ thuộc bị kẹt. Không có cách tiêu chuẩn nào để giải quyết các vấn đề như vậy; như một lập trình viên, bạn được mong đợi là đủ tài năng để tìm ra cách riêng của mình để xử lý nó.
-
Đảm bảo triển khai các tính năng bảo mật là ưu tiên hàng đầu nếu bạn muốn hệ thống của bạn có thể hoạt động.
-
Sau khi tất cả các công việc phát triển đã được hoàn thành, quyết định xem bạn có muốn phát hành mã nguồn mở, hoặc độc quyền.