Как Создать Вашу Собственную x86 Операционную систему для современных [закрытых] Компьютеров ПК

Давайте рассмотрим ваш пример класса Dog и Cat, и давайте проиллюстрируем использование C #:

И собака, и кошка - животные, в частности четвероногие млекопитающие (животные слишком общие). Предположим, что у вас есть абстрактный класс Mammal, для обоих из них:

public abstract class Mammal

Этот базовый класс, вероятно, будет иметь методы по умолчанию, такие как:

  • Feed
  • Mate

Все это поведение, которое имеет более или менее ту же реализацию между любыми видами. Чтобы определить это, вы будете иметь:

public class Dog : Mammal
public class Cat : Mammal

Теперь предположим, что есть другие млекопитающие, которые мы обычно увидим в зоопарке:

public class Giraffe : Mammal
public class Rhinoceros : Mammal
public class Hippopotamus : Mammal

Это будет по-прежнему действительным, потому что в основе функциональности Feed() и Mate() все равно будут одинаковыми.

Однако, жирафы, носороги и бегемоты - это не совсем животные, из которых вы можете сделать домашних животных. Вот где будет полезен интерфейс:

public interface IPettable
{
    IList<Trick> Tricks{get; set;}
    void Bathe();
    void Train(Trick t);
}

Реализация вышеуказанного контракта не будет одинаковой между кошкой и собакой; их реализация в абстрактном классе для наследования будет плохой идеей.

Теперь ваши определения Dog и Cat должны выглядеть так:

public class Dog : Mammal, IPettable
public class Cat : Mammal, IPettable

Теоретически вы можете переопределить их из более высокого базового класса, но по существу интерфейс позволяет вам добавлять только те вещи вам нужно в класс без необходимости наследования.

Следовательно, поскольку вы обычно можете наследовать только один абстрактный класс (в большинстве статически типизированных языков OO, которые являются ... исключениями включают C ++), но могут реализовать несколько интерфейсов, он позволяет строить объекты строго по мере необходимости .

28
задан mudge 10 May 2010 в 06:30
поделиться

6 ответов

Вы, вероятно, для начала захотите просто запустить его внутри виртуальной машины. Это PITA, пытающаяся разработать ОС на реальном оборудовании (с постоянной перезагрузкой и отладкой по последовательному кабелю).

Внутри виртуальной машины у вас обычно есть упрощенный (и относительно стандартизованный) набор оборудования для поддержки, который также может облегчить начальную разработку. В частности, если вы хотите показать кому-то свою ОС, просто дайте ему файл .vhd и будьте достаточно уверены, что если он работает для вас, то он будет работать и для них.

Вы также можете захотеть начать с чего-то, что уже изначально работает (например, Microsoft Singularity довольно изящно). Это позволит вам избавиться от утомительного загрузчика и базовых драйверов устройств, и вы сможете быстрее приступить к "содержательным" вещам.

13
ответ дан 18 July 2019 в 06:43
поделиться

Лучше взглянуть на исходный код Linux 0.01 . это первая версия ОС. это очень просто и информативно. Это хорошее место для начала

21
ответ дан Matthew Murdoch 18 July 2019 в 06:43
поделиться

Начните с загрузчика, узнайте о получении карты памяти, сканировании шины PCI, инициализации различных микросхем, таких как APIC, и о том, как перейти в защищенный режим.

В начале загрузки ядра попробуйте написать подпрограммы, которые будут выводить на экран, читать с клавиатуры, запустить простой отладчик, затем диспетчер физической памяти, а затем диспетчер виртуальной памяти. Последние два нельзя откладывать надолго, потому что каждой программе, включая операционную систему, нужен способ упорядоченного распределения и освобождения памяти.

1
ответ дан Anthony Dellow 18 July 2019 в 06:43
поделиться

Я бы рекомендовал сначала изучить небольшую ОС, такую как Minix1, которая была создана для образовательных целей или Minix3, которая совместима с POSIX.

6
ответ дан 18 July 2019 в 06:43
поделиться

Вам понадобится эта книга:

alt text http://ecx.images-amazon.com/images/I/5169V5J687L._SL500_AA300_.jpg

8
ответ дан 18 July 2019 в 06:43
поделиться

Вам придется реализовать несколько видов дескрипторных таблиц, чтобы включить 32-битный режим. Включение многопоточности - задача не из легких и почти наверняка будет обязательным условием. Вы, вероятно, также захотите разработать поддержку файловой системы на раннем этапе, чтобы уйти от образа дискеты или чего-либо, что вы сейчас используете.

Я уверен, что вы уже сталкивались с этим сайтом http://wiki.osdev.org/Main_Page , но на нем есть много замечательных статей.

Вы также можете найти эту книгу полезной для той стадии развития, на которой вы находитесь: The Indispensable PC Hardware Book, в ней очень подробно описаны детали, есть много диаграмм, а также фрагменты кода.

4
ответ дан 18 July 2019 в 06:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: