Tạo hệ điều hành từ đầu. Cách tạo hệ điều hành của riêng bạn từ đầu

Chu kỳ này bài viết được dành riêng cho lập trình cấp thấp, tức là kiến ​​trúc máy tính, thiết kế hệ điều hành, lập trình hợp ngữ và các lĩnh vực liên quan. Cho đến nay, hai người viết habrauser đang thực hiện việc viết - và . Đối với nhiều học sinh trung học, sinh viên và thậm chí cả các lập trình viên chuyên nghiệp, những chủ đề này hóa ra rất khó học. Có rất nhiều tài liệu và khóa học dành cho lập trình cấp thấp, nhưng rất khó để có được một bức tranh hoàn chỉnh và bao quát. Thật khó, sau khi đọc một hoặc hai cuốn sách về hợp ngữ và hệ điều hành, ít nhất là về mặt tổng quát có thể tưởng tượng được hệ thống phức tạp gồm sắt, silicon và nhiều chương trình - một chiếc máy tính - này thực sự hoạt động như thế nào.

Mọi người đều giải quyết vấn đề học tập theo cách riêng của mình. Một số người đọc rất nhiều tài liệu, một số cố gắng nhanh chóng chuyển sang thực hành và tìm hiểu trong khi tiến hành, một số cố gắng giải thích cho bạn bè mọi thứ họ đang học. Và chúng tôi quyết định kết hợp những cách tiếp cận này. Vì vậy, trong khóa học này, chúng tôi sẽ trình bày từng bước cách viết một hệ điều hành đơn giản. Các bài viết sẽ mang tính chất ôn tập, nghĩa là chúng sẽ không chứa thông tin lý thuyết đầy đủ, nhưng chúng tôi sẽ luôn cố gắng cung cấp liên kết đến các tài liệu lý thuyết hay và trả lời tất cả các câu hỏi nảy sinh. Chúng tôi không có kế hoạch rõ ràng, rất nhiều Quyết định quan trọng sẽ được áp dụng trong suốt quá trình, có tính đến phản hồi của bạn.

Chúng tôi có thể cố tình đưa quá trình phát triển vào ngõ cụt để cho phép bạn và chính chúng tôi hiểu đầy đủ về hậu quả của việc làm sai. quyết định đưa ra, đồng thời trau dồi một số kỹ năng kỹ thuật về nó. Vì vậy, bạn không nên coi những quyết định của chúng tôi là những quyết định đúng đắn duy nhất và tin tưởng chúng tôi một cách mù quáng. Chúng tôi nhấn mạnh một lần nữa rằng chúng tôi mong muốn độc giả tích cực thảo luận các bài viết, điều này sẽ ảnh hưởng lớn đến quy trình chung phát triển và viết các bài viết tiếp theo. Lý tưởng nhất là theo thời gian, tôi mong muốn một số độc giả cùng tham gia vào quá trình phát triển hệ thống.

Chúng tôi giả định rằng người đọc đã quen thuộc với những kiến ​​thức cơ bản về hợp ngữ và ngôn ngữ C, cũng như các khái niệm cơ bản về kiến ​​trúc máy tính. Nghĩa là, chúng tôi sẽ không giải thích sổ đăng ký là gì hoặc nói, ĐẬP. Nếu thiếu kiến ​​thức bạn luôn có thể liên hệ văn học bổ sung. Danh sách ngắn tài liệu và liên kết đến các trang có bài viết hay nằm ở cuối bài viết. Bạn cũng nên biết cách sử dụng Linux vì tất cả các hướng dẫn biên dịch sẽ được cung cấp riêng cho hệ thống này.

Và bây giờ - gần hơn với vấn đề. Trong phần còn lại của bài viết chúng tôi sẽ viết cùng bạn chương trình cổ điển « Chào thế giới" Helloworld của chúng tôi sẽ cụ thể hơn một chút. Nó sẽ không được khởi chạy từ bất kỳ hệ điều hành nào mà trực tiếp, có thể nói, “trên kim loại trần”. Trước khi bắt đầu viết mã, hãy tìm hiểu chính xác cách chúng tôi đang cố gắng thực hiện điều này. Và để làm được điều này, chúng ta cần xem xét quá trình khởi động máy tính.

Vì vậy, hãy lấy chiếc máy tính yêu thích của bạn và nhấn nút lớn nhất trên thiết bị hệ thống. Chúng tôi thấy một trình bảo vệ màn hình vui nhộn, đơn vị hệ thống Loa phát ra tiếng bíp vui vẻ và một lúc sau hệ điều hành sẽ tải. Như bạn đã hiểu, hệ điều hành được lưu trữ trên ổ cứng và ở đây câu hỏi được đặt ra: làm thế nào hệ điều hành tải vào RAM một cách kỳ diệu và bắt đầu thực thi?

Hãy biết điều này: hệ thống trên bất kỳ máy tính nào chịu trách nhiệm cho việc này và tên của nó - không, không phải Windows, bạn hãy lưu ý - nó được gọi là BIOS. Tên của nó là viết tắt của Basic I-Output System, tức là hệ thống đầu vào-đầu ra cơ bản. BIOS nằm trên một con chip nhỏ trên bo mạch chủ và bắt đầu ngay sau khi nhấp vào nút lớn TRÊN BIOS có ba nhiệm vụ chính:

  1. Phát hiện tất cả các thiết bị được kết nối (bộ xử lý, bàn phím, màn hình, RAM, card màn hình, đầu, cánh tay, cánh, chân và đuôi ...) và kiểm tra chức năng của chúng. Chương trình POST (Power On Self Test) chịu trách nhiệm về việc này. Nếu phần cứng quan trọng không được phát hiện thì không có phần mềm nào có thể trợ giúp và tại thời điểm này loa hệ thống sẽ phát ra thứ gì đó đáng ngại và hệ điều hành sẽ không hiểu được điều đó. Chúng ta đừng nói về những điều đáng buồn, hãy giả sử rằng chúng ta có một chiếc máy tính hoạt động hoàn chỉnh, hãy vui mừng và chuyển sang xem xét điều thứ hai Chức năng BIOS:
  2. Cung cấp cho hệ điều hành bộ cơ bản chức năng làm việc với phần cứng. Ví dụ: thông qua các chức năng của BIOS, bạn có thể hiển thị văn bản trên màn hình hoặc đọc dữ liệu từ bàn phím. Đó là lý do tại sao nó được gọi là hệ thống cơ bản Vào/ra Thông thường hệ điều hành truy cập các chức năng này thông qua các ngắt.
  3. Khởi chạy bộ tải hệ điều hành. Trong trường hợp này, theo quy định, khu vực khởi động được đọc - khu vực đầu tiên của phương tiện lưu trữ (đĩa mềm, ổ cứng, CD, ổ đĩa flash). Thứ tự thăm dò phương tiện có thể được đặt trong BIOS SETUP. Khu vực khởi động chứa một chương trình đôi khi được gọi là bộ tải khởi động chính. Nói một cách đại khái, công việc của bootloader là khởi động hệ điều hành. Quá trình tải một hệ điều hành có thể rất cụ thể và phụ thuộc nhiều vào các tính năng của nó. Do đó, bộ tải khởi động chính được các nhà phát triển hệ điều hành viết trực tiếp và được ghi vào khu vực khởi động trong quá trình cài đặt. Khi bộ nạp khởi động khởi động, bộ xử lý ở chế độ thực.
Tin buồn là bộ nạp khởi động chỉ có kích thước 512 byte. Tại sao lại ít như vậy? Để làm được điều này, chúng ta cần làm quen với cấu trúc của đĩa mềm. Đây là một hình ảnh thông tin:

Hình ảnh cho thấy bề mặt ổ đĩa. Đĩa mềm có 2 mặt. Mỗi bề mặt có các đường dẫn hình vòng (các rãnh). Mỗi rãnh được chia thành các phần nhỏ hình vòng cung gọi là các cung. Vì vậy, về mặt lịch sử, khu vực đĩa mềm có kích thước 512 byte. Khu vực đầu tiên trên đĩa, khu vực khởi động, được BIOS đọc vào phân đoạn bộ nhớ 0 ở offset 0x7C00, sau đó điều khiển được chuyển đến địa chỉ này, bộ nạp khởi động thường không phải chính hệ điều hành mà là một chương trình bộ nạp khởi động khác. được lưu trữ trên đĩa, nhưng vì lý do nào đó (rất có thể, lý do này là kích thước) không vừa với một khu vực. Và vì hiện tại, vai trò của hệ điều hành của chúng tôi do Helloworld tầm thường đảm nhận, mục tiêu chính của chúng tôi là tạo ra một máy tính. tin vào sự tồn tại của hệ điều hành của chúng tôi, ngay cả khi chỉ trong một lĩnh vực và khởi chạy nó.

Khu vực khởi động được cấu trúc như thế nào? Trên PC, yêu cầu duy nhất đối với khu vực khởi động là hai byte cuối cùng của nó chứa các giá trị 0x55 và 0xAA - chữ ký giày cao cổ. Vì vậy, ít nhiều chúng ta đã rõ những gì chúng ta cần làm. Hãy viết mã! Mã đã cho được viết cho trình biên dịch yasm.

phần. chữ

sử dụng16

tổ chức 0x7C00 ; chương trình của chúng tôi được tải tại địa chỉ 0x7C00

bắt đầu:

rìu di chuyển, cs

mov ds, rìu ; chọn phân đoạn dữ liệu



chuyển si , tin nhắn

cld ; hướng cho các lệnh chuỗi

di chuyển à , 0x0E ; Số tính năng BIOS

chuyển bh , 0x00 ; trang bộ nhớ video

đặt_loop:

lodsb ; tải biểu tượng tiếp theo vào al

kiểm tra al, al ; ký tự null có nghĩa là kết thúc dòng

jz put_loop_exit

int 0x10 ; gọi chức năng BIOS

jmp put_loop

đặt_loop_exit:

jmp$; chu kỳ vĩnh cửu



tin nhắn:

db "Xin chào thế giới!" , 0

hoàn thành:

lần 0x1FE - kết thúc+bắt đầu db 0

db 0x55, 0xAA ; chữ ký khu vực khởi động

Chương trình ngắn này yêu cầu một số giải thích quan trọng. Dòng org 0x7C00 là cần thiết để trình biên dịch mã (có nghĩa là chương trình, không phải ngôn ngữ) tính toán chính xác địa chỉ cho nhãn và biến (puts_loop, put_loop_exit, tin nhắn). Vì vậy, chúng tôi thông báo cho anh ta rằng chương trình sẽ được tải vào bộ nhớ tại địa chỉ 0x7C00.
Trong dòng
rìu di chuyển, cs

mov ds, rìu
phân đoạn dữ liệu (ds) được đặt bằng phân đoạn mã (cs), vì trong chương trình của chúng tôi, cả dữ liệu và mã đều được lưu trữ trong cùng một phân đoạn.

Tiếp theo trong vòng lặp, thông báo “Xin chào thế giới!” được hiển thị theo từng ký tự. Với mục đích này, chức năng 0x0E của ngắt 0x10 được sử dụng. Cô bé có thông số sau:
AH = 0x0E (số hàm)
BH = số trang video (đừng bận tâm, hãy ghi 0)
AL = Mã ký tự ASCII

Tại dòng "jmp$" chương trình bị treo. Và đúng như vậy, nó không cần phải thực thi thêm mã. Tuy nhiên, để máy tính hoạt động trở lại, bạn sẽ phải khởi động lại.

Trong dòng “nhân 0x1FE-kết thúc+bắt đầu db 0”, phần còn lại của mã chương trình (ngoại trừ hai byte cuối cùng) được điền bằng số không. Điều này được thực hiện sao cho sau khi biên dịch, hai byte cuối cùng của chương trình chứa chữ ký của khu vực khởi động.

Chúng ta dường như đã sắp xếp được mã chương trình, bây giờ chúng ta hãy thử biên dịch niềm hạnh phúc này. Để biên dịch, nói đúng ra, chúng ta cần một trình biên dịch - trình biên dịch được đề cập ở trên

Bản gốc: "Lăn đồ chơi của riêng bạn Hệ điều hành nhân bản UNIX"
Tác giả: James Molloy
Ngày xuất bản: 2008
Bản dịch: N. Romodanov
Ngày dịch: Tháng 1 năm 2012

Bộ hướng dẫn này được thiết kế để chỉ cho bạn một cách chi tiết cách lập trình một ứng dụng đơn giản giống UNIX hệ điều hành cho kiến ​​trúc x86. Trong các hướng dẫn này, ngôn ngữ lập trình được chọn là C, được bổ sung bằng hợp ngữ nếu cần. Mục đích của các hướng dẫn là để cho bạn biết về thiết kế và triển khai các giải pháp được sử dụng trong việc tạo ra hệ điều hành OS mà chúng tôi đang tạo, hệ điều hành này có cấu trúc nguyên khối (trình điều khiển được tải ở chế độ mô-đun hạt nhân chứ không phải ở chế độ người dùng như xảy ra với chương trình), vì giải pháp như vậy đơn giản hơn.

Bộ hướng dẫn này có tính chất rất thực tế. Mỗi phần cung cấp thông tin lý thuyết, Nhưng hầu hết Cuốn sổ tay này đề cập đến việc thực hiện các ý tưởng và cơ chế được coi là trừu tượng trong thực tế. Điều quan trọng cần lưu ý là phần cốt lõi được triển khai như phần cốt lõi đào tạo. Tôi biết rằng các thuật toán được sử dụng không phải là thuật toán tiết kiệm không gian nhất cũng như không phải là thuật toán tối ưu. Chúng thường được chọn do tính đơn giản và dễ hiểu của chúng. Mục đích của việc này là cung cấp cho bạn tư duy đúng đắn và nền tảng để làm việc. Lõi này có khả năng mở rộng và có thể kết nối dễ dàng thuật toán tốt nhất. Nếu bạn gặp bất kỳ vấn đề nào liên quan đến lý thuyết, có rất nhiều trang web có thể giúp bạn giải quyết vấn đề đó. Hầu hết các câu hỏi được thảo luận trên diễn đàn OSDev đều liên quan đến việc triển khai ("Chức năng get của tôi không hoạt động! Trợ giúp!") và đối với nhiều người, câu hỏi về lý thuyết giống như một luồng gió mới. Bạn có thể tìm thấy các liên kết ở cuối câu hỏi này giới thiệu.

Chuẩn bị sơ bộ

Để biên dịch và chạy mã ví dụ, tôi giả sử bạn chỉ cần GCC, ld, NASM và GNU Make. NASM là trình biên dịch x86 mã nguồn mở và là sự lựa chọn của nhiều nhà phát triển hệ điều hành x86.

Tuy nhiên, sẽ chẳng ích gì nếu chỉ biên soạn và chạy các ví dụ nếu bạn không hiểu chúng. Bạn phải hiểu những gì đang được mã hóa và để làm được điều đó bạn phải biết rất rõ về ngôn ngữ C, đặc biệt là khi nói đến con trỏ. Bạn cũng nên hiểu một số ngôn ngữ hợp ngữ (các hướng dẫn này sử dụng cú pháp của Intel), bao gồm cả mục đích sử dụng thanh ghi EBP.

Tài nguyên

Có rất nhiều tài nguyên nếu bạn biết làm thế nào để tìm kiếm chúng. Đặc biệt, bạn sẽ thấy các liên kết sau hữu ích:

  • RTFM! Hướng dẫn sử dụng của Intel là một ơn trời.
  • Các trang Wiki và diễn đàn của trang osdev.org.
  • Có rất nhiều hướng dẫn và bài viết hay trên Osdever.net và đặc biệt là các hướng dẫn phát triển kernel của Bran, mã trước đó mà hướng dẫn này dựa vào. Tôi đã tự mình sử dụng các hướng dẫn này để bắt đầu và mã trong đó tốt đến mức tôi đã làm theo. không thay đổi nó trong nhiều năm.
  • Nếu bạn không phải là người mới bắt đầu thì bạn có thể nhận được câu trả lời cho nhiều câu hỏi trong nhóm

Đầu tiên là học lập trình. Cần có kiến ​​thức về lắp ráp; Chúng tôi thực sự khuyên bạn nên có sự hiểu biết về các vấn đề khác ngôn ngữ bổ sung lập trình thêm cấp thấp, ví dụ như.

Quyết định thiết bị nào bạn muốn tải hệ điều hành.Đây có thể là CD, DVD, thiết bị bộ nhớ flash, ổ cứng hoặc máy tính khác.

Quyết định xem bạn muốn hệ điều hành của mình trông như thế nào.Đây có phải là phiên bản đầy đủ của hệ điều hành với Giao diện đồ họa giao diện người dùng (GUI) hoặc có thể thứ gì đó tối giản hơn? Bạn cần biết nên đi theo hướng nào trước khi bắt đầu quá trình.

Kiểm tra xem hệ điều hành của bạn sẽ hỗ trợ nền tảng bộ xử lý nào. AI-32 và x86_64 là hai phiên bản phổ biến nhất cho những máy tính cá nhân, vì vậy chúng có thể được coi là sự lựa chọn tốt nhất.

Quyết định xem bạn muốn tự mình làm mọi thứ từ đầu hay liệu có hạt nhân nào mà bạn muốn xây dựng trên hệ thống dựa trên đó hay không. Linux từ đầu là một dự án dành cho những ai muốn, chẳng hạn, tạo ra dự án của riêng mình phân phối riêng Linux.

Chọn xem bạn sẽ sử dụng bộ tải khởi động của riêng mình hay bộ tải hợp nhất được tạo sẵn bộ nạp khởi động Bộ tải khởi động hợp nhất lớn (GRUB). Kể từ khi mã hóa chương trình riêng tải xuống đòi hỏi kiến ​​thức sâu rộng trong lĩnh vực này phần mềm máy tính và BIOS, điều này có thể đẩy lùi lịch trình lập trình cho kernel hiện tại.

Đưa ra quyết định về ngôn ngữ lập trình bạn sẽ sử dụng. Tất nhiên, hoàn toàn có thể phát triển một hệ điều hành bằng ngôn ngữ như Pascal hoặc BASIC, nhưng tốt nhất nên viết nó bằng ngôn ngữ C hoặc hợp ngữ. Hợp ngữ là hoàn toàn cần thiết vì một số phần quan trọng của hệ điều hành yêu cầu kiến ​​thức về ngôn ngữ cụ thể này. Mặt khác, C++ chứa từ khóa bắt buộc phải chạy phiên bản đầy đủ hệ điều hành.

  • Để xây dựng một hệ điều hành bằng mã C hoặc C++, tất nhiên bạn sẽ sử dụng trình biên dịch này hoặc trình biên dịch khác. Điều này có nghĩa là bạn phải đọc hướng dẫn/hướng dẫn/tài liệu dành cho trình biên dịch C/C++ đã chọn đi kèm với phần mềm hoặc có sẵn trên trang web của nhà phân phối. Bạn sẽ phải học rất nhiều điều phức tạp về trình biên dịch, ngoài việc học thiết kế của nó và ABI để cải thiện C++. Bạn được mong đợi sẽ hiểu định dạng khác nhau nhiệm vụ điều hành (ELF, PE, COFF, nhị phân thông thường, v.v.) và lưu ý rằng nhiệm vụ của riêng bạn Định dạng Windows, PE (.exe) được bảo vệ bản quyền.
  • Chọn Giao diện lập trình ứng dụng (API). Một lựa chọn API tốt là POSIX, vì nó được ghi chép đầy đủ. Tất cả Hệ thống Unix có, bởi ít nhất, hỗ trợ POSIX một phần, vì vậy việc thêm vào sẽ không đáng kể chương trình Unix vào hệ điều hành của bạn.

    Quyết định về một thiết kế. Có hạt nhân nguyên khối và hạt vi mô. Hạt nhân nguyên khối chạy tất cả các dịch vụ trong hạt nhân, trong khi hạt nhân vi mô có hạt nhân nhỏ kết hợp với việc triển khai dịch vụ tùy chỉnh. Nói chung, hạt nhân nguyên khối nhanh hơn, nhưng hạt nhân vi mô có khả năng cách ly và bảo vệ tốt hơn trước các lỗi có thể xảy ra.

    Xem xét sự phát triển và làm việc theo nhóm. Bằng cách này bạn sẽ cần ít thời gian hơn để giải quyết vấn đề lớn, điều này sẽ cho phép bạn tạo một hệ điều hành chất lượng tốt nhất trong một khung thời gian ngắn hơn.

    Đừng xóa sạch ổ cứng của bạn hoàn toàn. Hãy nhớ rằng, việc định dạng đĩa sẽ xóa vĩnh viễn tất cả dữ liệu của bạn! Sử dụng GRUB hoặc trình quản lý khác để sao chép quá trình khởi động máy tính của bạn từ hệ điều hành khác cho đến khi phiên bản của bạn có đầy đủ chức năng.

    Khởi đầu nhỏ. Trước tiên, hãy chú ý đến những điều nhỏ nhặt như hiển thị văn bản và sự gián đoạn trước khi chuyển sang các yếu tố phức tạp như quản lý bộ nhớ và đa nhiệm.

    Cứu bản sao lưu phiên bản làm việc mới nhất.Điều này giúp bạn yên tâm hơn trong trường hợp có sự cố hoàn toàn xảy ra trong Phiên bản hiện tại Hệ điều hành của bạn hoặc các bổ sung tiếp theo. Nếu máy tính của bạn bị hỏng và không thể khởi động, như bản thân bạn hiểu, việc có một bản sao thứ hai để hoạt động sẽ là một cơ hội tuyệt vời để bạn có thể khắc phục các sự cố hiện có.

    Kiểm tra hệ điều hành mới của bạn máy ảo. Thay vì khởi động lại máy tính mỗi khi thực hiện thay đổi hoặc chuyển tệp từ máy tính sản xuất sang máy kiểm tra, bạn có thể sử dụng một ứng dụng để chạy HĐH trong máy ảo trong khi HĐH hiện tại của bạn tiếp tục chạy. Các ứng dụng VM bao gồm VMWare (cũng có máy chủ có sẵn miễn phí), mã nguồn mở thay thế, Bochs, Microsoft ảo PC (không tương thích với Linux), cũng như XVM VirtualBox.

    Phát hành một phiên bản phát hành.Điều này sẽ cho phép người dùng cho bạn biết về nhược điểm có thể có trên hệ điều hành của bạn.

  • Hệ điều hành cũng phải thân thiện với người dùng, vì vậy đừng quên thêm các tính năng hữu ích, điều này sẽ trở thành một phần không thể thiếu trong thiết kế của bạn.

    • Sau khi quá trình phát triển hoàn tất, hãy cân nhắc xem bạn muốn đặt mã ở chế độ công khai hay đặt ở chế độ riêng tư.
    • Hãy đảm bảo đặt các tính năng bảo mật là ưu tiên hàng đầu của bạn nếu bạn muốn hệ thống của mình hoạt động được.
    • Đừng bắt đầu một dự án phát triển hệ điều hành với mục tiêu học lập trình. Nếu bạn không biết C, C++, Pascal hoặc bất kỳ ngôn ngữ nào khác ngôn ngữ phù hợp và các thuộc tính, bao gồm các loại con trỏ, thao tác bit cấp thấp, lật bit, trình biên dịch nội tuyến, v.v., vẫn chưa sẵn sàng để tạo hệ điều hành.
    • Duyệt qua các cổng như OSDev và OSDever để giúp bạn cải thiện hệ điều hành của riêng mình. Xin đặc biệt lưu ý rằng đối với hầu hết các vấn đề, cộng đồng OSDev.org ưu tiên bạn tự mình tham khảo nội dung trang web hơn là tham gia diễn đàn. Tuy nhiên, nếu bạn quyết định gia nhập hàng ngũ thành viên diễn đàn, thì phải có một số điều kiện tiên quyết nhất định cho việc này. Bạn phải có kiến ​​thức kỹ lưỡng về ngôn ngữ hợp ngữ C hoặc C++ và x86. Bạn cũng nên hiểu các khái niệm chung và phức tạp trong lập trình như Danh sách liên kết, Hàng đợi, v.v. Cộng đồng OSDev tuyên bố rõ ràng trong các quy tắc của mình rằng không ai sẽ trông trẻ cho các lập trình viên mới. Nếu bạn đang cố gắng phát triển một hệ điều hành thì không cần phải nói rằng bạn là một thiên tài lập trình. Bạn cũng được yêu cầu đọc hướng dẫn sử dụng bộ xử lý cho kiến ​​trúc bộ xử lý mà bạn chọn; ví dụ x86 (Intel), ARM, MIPS, PPC, v.v. Bạn có thể dễ dàng tìm thấy sách tham khảo về cấu trúc bộ xử lý bằng cách tìm kiếm trên Google (“Sách hướng dẫn sử dụng Intel”, “Hướng dẫn sử dụng ARM”, v.v.). Đừng tham gia diễn đàn OSDev.org để đặt những câu hỏi rõ ràng. Điều này sẽ chỉ dẫn đến những phản hồi như “Đọc Hướng dẫn sử dụng chết tiệt”. Đầu tiên, bạn nên thử đọc Wikipedia, các hướng dẫn sử dụng nhiều loại nhạc cụ mà bạn sắp sử dụng.
    • Kiểm tra các điểm chết tiềm ẩn và các lỗi khác. Những khoảng trống, ngõ cụt và các vấn đề khác có thể ảnh hưởng đến thiết kế hệ điều hành của bạn.
    • Nếu bạn muốn một cách đơn giản hơn, hãy tưởng tượng Bản phân phối Linux- chẳng hạn như Fedora Revisor, Custom Nimble X, Puppy Remaster, PCLinuxOS mklivecd hoặc SUSE Studio và SUSE KIWI. Tuy nhiên, hệ điều hành đang được tạo ra thuộc về công ty giới thiệu dịch vụ này lần đầu tiên (mặc dù bạn có quyền tự do phân phối, thay đổi và chạy nó theo ý muốn theo GPL).
    • Một giải pháp tốt là tạo một phân vùng hoàn toàn mới cho hệ điều hành đang được phát triển.

    Cảnh báo

    • Việc sao chép hệ điều hành vào ổ cứng một cách bất cẩn có thể làm hỏng nó hoàn toàn. hãy cẩn thận
    • Bạn sẽ không thành công hoàn toàn hệ thống sẵn sàng Trong hai tuần. Bắt đầu với hệ điều hành có khả năng khởi động và sau đó chuyển sang những thứ thú vị hơn.
    • Nếu bạn làm điều gì đó liều lĩnh như ghi các byte ngẫu nhiên vào các cổng I/O ngẫu nhiên, bạn sẽ phá hủy hệ điều hành của mình và có thể (về lý thuyết) làm hỏng phần cứng của bạn.
    • Đừng hy vọng việc xây dựng một hệ điều hành chất lượng sẽ dễ dàng. Có nhiều sự phụ thuộc lẫn nhau phức tạp. Ví dụ: để HĐH có khả năng xử lý nhiều bộ xử lý, trình quản lý bộ nhớ của bạn phải có cơ chế "khóa" để ngăn các bộ xử lý bổ sung truy cập vào cùng một tài nguyên cùng một lúc. Các "khối" được sử dụng liên quan đến bộ lập lịch để đảm bảo rằng chỉ có một bộ xử lý truy cập vào tài nguyên quan trọng tại bất kỳ thời điểm nào, trong khi tất cả các bộ xử lý khác đều không hoạt động. Tuy nhiên, hoạt động của bộ lập lịch phụ thuộc vào sự hiện diện của bộ quản lý bộ nhớ. Đây là một ví dụ về sự phụ thuộc bế tắc. KHÔNG phương pháp chuẩn cho phép vấn đề tương tự; Mọi người tạo ra hệ điều hành đều phải có đủ kỹ năng để đưa ra giải pháp của riêng mình.

    Nguồn

    Những gì bạn sẽ cần

    • Máy tính
    • Bộ xử lý bạn sẽ xây dựng trên đó
    • Đủ bộ nhớ truy cập ngẫu nhiên (RAM) cho máy ảo
    • Hệ điều hành chính (dùng để phát triển mã nguồn người lắp ráp (v.v.), cũng như lắp ráp và đóng gói trong giai đoạn đầu của công việc; cuối cùng hệ điều hành của riêng bạn sẽ trở thành chính)
    • Trình chỉnh sửa mã màu cú pháp (được sử dụng khi không có Môi trường phát triển tích hợp)
    • Trình biên dịch
    • Ổ đĩa CD/DVD
  • Đối với câu hỏi Làm thế nào để tạo hệ điều hành của riêng bạn? do tác giả đưa ra câu hỏi câu trả lời tốt nhất là Ý tưởng này thật đáng khen ngợi.
    Trước hết, bạn cần biết hệ thống lệnh của máy mà bạn định viết HĐH.
    Hệ thống lệnh được phản ánh trực tiếp bằng hợp ngữ.
    Vì vậy, trước hết bạn cần phải nghĩ ra ngôn ngữ hợp ngữ của riêng mình và viết chương trình cho nó (assembler) để dịch các ký hiệu chữ và số sang ngôn ngữ máy.
    mã số.
    Nếu quan tâm, bạn có thể xem hệ điều hành mới (lý tưởng) cần có những yêu cầu gì.
    Một số tính năng như vậy được liệt kê ở đây:
    .ru/D_OS/OS-PolyM.html#IdealOS
    Cần nghiên cứu tài liệu từ các trang web dành cho nhà phát triển bộ vi xử lý. Ví dụ: Intel và AMD.
    Bạn có thể thấy khóa học video về hệ điều hành hữu ích, được trình bày ở đây:
    .ru/D_OS/OS_General.html
    PS: Đừng nghe những người bi quan. Dựa vào tư tưởng gà trống đuổi gà:
    "Tôi sẽ không bắt kịp, ít nhất tôi sẽ ấm lên."
    Nguồn: Trang web "Sử dụng PC đúng cách!"

    Câu trả lời từ tia chữ I[người mới]
    Tất nhiên) Chỉ có cổng ngồi ở đây) Hãy hỏi Microsoft)



    Câu trả lời từ Thiết bị[người mới]
    lấy tất cả các hệ điều hành và nhồi nhét chúng vào một


    Câu trả lời từ Alexander Tuntsov[đạo sư]
    Làm quen với hệ điều hành Linux, học lập trình và đi


    Câu trả lời từ ~Trong lửa~[đạo sư]
    Học lập trình tại cấp cao nhất, tập hợp cả một đám đông giống nhau thiên tài máy tính và sau đó bạn có thể làm điều đó.


    Câu trả lời từ Rasul Magomedov[đạo sư]
    Bắt đầu bằng cách tạo một hình nền vui nhộn


    Câu trả lời từ Đội trưởng Google[đạo sư]
    Đừng nghe câu “10 năm để học những điều cơ bản”; Torvalds đã viết phiên bản Linux đầu tiên ở tuổi 22 và có được một chiếc máy tính ở tuổi 12. Như bạn hiểu, anh ấy không chỉ nghiên cứu những điều cơ bản.
    Bắt đầu bằng cách nghiên cứu những gì đã tồn tại - một mặt là "Hệ điều hành hiện đại" của Tannenbaum - mặt khác - thu thập Linux từ Scratch, từ phần thứ ba - học Trình biên dịch mã, C, C++. Mọi thứ về mọi thứ đều có thể được thực hiện trong 3-4 năm. Sau đó, bạn có thể bắt đầu phát triển hệ thống của mình... nếu bạn vẫn muốn.


    Câu trả lời từ Yoanya Semenov[đạo sư]
    bạn có biết Gates đã làm gì không? hãy thử tương tự, họ nói rằng nó mang lại lợi nhuận..
    Khi bị cha mẹ trừng phạt, anh ta không còn việc gì để làm, bắt đầu nhảy lên bàn phím, sau đó bán nó và gọi thứ mà anh ta có là "windows"
    ps và nếu nó là thật, trước tiên hãy viết “Hello World” bằng C++ và bạn sẽ hiểu ngay rằng ý tưởng này thật hoang tưởng


    Câu trả lời từ Kostafey[đạo sư]
    Để làm gì? Điều gì về cơ bản không làm hài lòng những cái hiện có? Có thực sự không có cái nào đáp ứng được ít nhất một phần yêu cầu hệ điều hành của bạn không? Có lẽ tốt hơn là nên tham gia nhóm phát triển? Sẽ có ý nghĩa gấp 100500 lần.
    Và sau đó, bạn sẽ từ bỏ ý tưởng này để thực hiện thêm 0,(0)1% nữa.


    Câu trả lời từ Evgeniy Omega[đạo sư]
    E. Tanenbaum "Hệ điều hành: phát triển và triển khai"
    Chúc may mắn
    Tái bút Thật không may, bạn khó có thể thành công như Bill Gates đã làm được. Mẹ của anh ấy là một nhân viên ngân hàng tuyệt vời, còn bạn thì sao?


    Câu trả lời từ Vỏ Krab[đạo sư]
    Bạn có thể tự viết một hệ điều hành đơn giản, nhưng nó sẽ không bao giờ có thể cạnh tranh với một hệ điều hành như Windows, MAC OS hay Linux, nơi hàng trăm hoặc hàng nghìn lập trình viên đã làm việc trong ít nhất mười năm. Ngoài ra, hệ điều hành chỉ là nền tảng. Các nhà phát triển phần cứng cần phải viết trình điều khiển riêng cho hệ điều hành này, các nhà phát triển chương trình ứng dụng các biên tập viên, người chơi, trình duyệt, trò chơi, con quỷ trong cối đã viết cho nó... Và nếu không có điều này, hệ điều hành sẽ vẫn là một nền tảng vô dụng cho một ngôi nhà mà không ai xây dựng.


    Câu trả lời từ Vadim Stakhanov[tích cực]
    Sẽ tốt hơn nếu tôi đi học như một nhà ngữ văn. Và sau đó anh ấy sẽ hét lên “Máy tính tiền miễn phí!”


    Câu trả lời từ =Serge=[đạo sư]
    Hoan hô! Cuối cùng, câu hỏi 58 trên trang web về việc tạo hệ điều hành “của riêng bạn”))
    Dưới đây là các câu hỏi về việc “viết hệ điều hành của riêng bạn” - chỉ có 34 câu hỏi trong số đó))
    Đọc...92 câu hỏi*10 câu trả lời = khoảng 920 câu trả lời))
    Đồng thời, chắc chắn bạn sẽ hiểu “hình nền không nhàm chán” nghĩa là gì).


    Câu trả lời từ không thể sản xuất được[đạo sư]
    một Denis Popov khác với một BolgenOS khác?


    Câu trả lời từ Ivan Tatarchuk[người mới]
    khởi chạy notepad, tải xuống trình biên dịch toadscript và bắt đầu nhảy vào bàn phím
    biên dịch trong 60 phút và thế là xong
    oska của bạn đã sẵn sàng

    Cuốn sách "Hệ điều hành từ 0 đến 1" được xuất bản trên GitHub và có hơn 2.000 sao và 100 fork. Như tiêu đề gợi ý, sau khi đọc nó, bạn có thể tạo hệ điều hành của riêng mình - và có lẽ, hiếm có điều gì trong thế giới lập trình viên có thể thú vị hơn.

    Với cuốn sách này bạn sẽ học được những điều sau:

    • Tìm hiểu cách tạo một hệ điều hành dựa trên tài liệu kỹ thuậtốc lắp cáp. TRONG thế giới thựcđây là cách nó hoạt động, bạn sẽ không thể sử dụng Google để có câu trả lời nhanh.
    • Bạn sẽ hiểu làm thế nào Linh kiện máy tính tương tác với nhau, từ phần mềm đến phần cứng.
    • Học cách tự viết mã. Sao chép mã một cách mù quáng không phải là học, bạn thực sự sẽ học cách giải quyết vấn đề. Nhân tiện, sao chép mù quáng cũng nguy hiểm.
    • Nắm vững các công cụ quen thuộc để phát triển ở cấp độ thấp.
    • Làm quen với ngôn ngữ lắp ráp.
    • Tìm hiểu xem các chương trình được tạo ra từ đâu và hệ điều hành chạy chúng như thế nào. Một đánh giá ngắn Chúng tôi đã đưa ra chủ đề này cho những người tò mò trong .
    • Bạn sẽ tìm ra cách gỡ lỗi chương trình trực tiếp trên phần cứng bằng GDB và QEMU.
    • Bạn có thể nhanh chóng thành thạo ngôn ngữ lập trình C bằng cách làm theo.
    • Kiến thức cơ bản về Linux. Chỉ cần nghiên cứu trên trang web của chúng tôi.
    • Kiến thức cơ bản về vật lý: nguyên tử, electron, proton, neutron, điện áp.
    • Định luật Ohm về mối quan hệ giữa điện áp, dòng điện và điện trở.

    Cuốn sách đang được cải tiến và chỉnh sửa gần như mỗi ngày: chính bạn có thể thay đổi hoặc sửa lỗi đánh máy. Hệ điều hành, sự phát triển của nó được dùng làm “cốt truyện” cho cuốn sách này,