1 Востаннє редагувалося Fox (06.05.2018 16:32:05)

Тема: Питання про написання "ОС"

Хотiв написати iграшкову ОС яку можна встановити на флешку (GRUB завантажувач).
По ходу написання виникло декiлька питань.
1) Чи можливо спалити щось в ПК через кривий запит до порту I/O ?
2) Як можна зробити нормальний memory manager ?
Спробував погуглити i почитати про нього, але нiц не зрозумiв.
Можливо щось готове вже придумали для таких цiлей ?

PS: Iснують книжки на укр. мовi про написання ос чи щось таке ?

2 Востаннє редагувалося koala (06.05.2018 16:56:59)

Re: Питання про написання "ОС"

vtorgashov написав:

1) Чи можливо спалити щось в ПК через кривий запит до порту I/O ?

Зазвичай лише якщо спеціально зробити такий набір запитів. Пристрої зараз досить розумні, щоб не дозволити вам зробити це випадково.

vtorgashov написав:

2) Як можна зробити нормальний memory manager ?

Прочитати книжку на цю тему. Основне питання - ви збираєтеся чужі програми виконувати в себе? Якщо ні, то вся пам'ять ваша, розподіляйте, як хочете. Якщо хочете, щоб код на C/C++ працював - доведеться писати свій компілятор із STL. Якщо хочете, щоб програми, скомпільовані під інші ОС працювали - ви попали :)

vtorgashov написав:

Можливо щось готове вже придумали для таких цiлей ?

Звісно, зветься Linux.

vtorgashov написав:

Iснують книжки на укр. мовi про написання ос чи щось таке ?

Підписуюся на питання. Танненбаума ніби не перекладали, на жаль.

3

Re: Питання про написання "ОС"

koala написав:

Прочитати книжку на цю тему. Основне питання - ви збираєтеся чужі програми виконувати в себе? Якщо ні, то вся пам'ять ваша, розподіляйте, як хочете. Якщо хочете, щоб код на C/C++ працював - доведеться писати свій компілятор із STL. Якщо хочете, щоб програми, скомпільовані під інші ОС працювали - ви попали

Хочу щоб код на С++ працював.
Хоча вiн працювати може (g++ ворк), але без видiлення пам'ятi.

4

Re: Питання про написання "ОС"

сама нижча прослойка між залізом і ОС буде на асемблері, без асемблера нема чого робити
2. Написати як процес, або він може бути "залізно спроектований", часто в мануалі пишуть як працює MMU, але часто він є наприклад в ARM серії А і R

- Поганому трояну фаєрвол заважає
- Ніколи не програмуйте та не пийте пиво
Якщо ви з першого разу написали програму, в якій немає жодної помилки, повідомте про це системного програмісту: він виправить помилки в компіляторі

5

Re: Питання про написання "ОС"

reverse2500 написав:

сама нижча прослойка між залізом і ОС буде на асемблері, без асемблера нема чого робити
2. Написати як процес, або він може бути "залізно спроектований", часто в мануалі пишуть як працює MMU, але часто він є наприклад в ARM серії А і R

Ну керувати розподiлом пам'ятi i без нього ?

6

Re: Питання про написання "ОС"

Танненбаума ви вже прочитали? Це для сучасного розробника ОС обов'язкова література.
За великим рахунком, вам треба написати всього дві функції - malloc і free (вони ж new та delete). Але диявол, як завжди, в деталях.

7

Re: Питання про написання "ОС"

vtorgashov написав:

Ну керувати розподiлом пам'ятi i без нього ?

ну звісно, що не можна впяти, то можна зпрограмувати, програмісти іноді пишуть і свої аналоги free, malloc.

- Поганому трояну фаєрвол заважає
- Ніколи не програмуйте та не пийте пиво
Якщо ви з першого разу написали програму, в якій немає жодної помилки, повідомте про це системного програмісту: він виправить помилки в компіляторі

8

Re: Питання про написання "ОС"

https://wiki.osdev.org/Memory_management

Maybe a = Just a | Nothing
Подякували: leofun011

9

Re: Питання про написання "ОС"

Читав вже... Але не зрозумiло як воно може отримати вмiсть пам'ятi, якщо вона разкидана не по порядку.
Як я зрозумiв:
------Вiльно 1 ------ ||||||||Зайнято 1 |||||||| ||||||||Зайнято 2|||||||| ------Вiльно 2------ ||||||||Зайнято 3 ||||||||
Потрiбно в malloc знайти такi вiльнi дiлянки i в них записувати.
Але як зробити це....
malloc поверне "Вiльно 1", а треба щоб при виходi з нього наступний елемент масиву був на дiлянцi "Вiльно 2".
Але як таке зробити ?
Теж саме з читанням пам'ятi.
Чи я не так зрозумiв ?

10 Востаннє редагувалося koala (07.05.2018 16:42:14)

Re: Питання про написання "ОС"

Вільно/зайнято - позначайте, як вам зручно. Поки що вся пам'ять - ваша, як один масив. Можете тримати десь бітову мапу вільного місця. Можете до кожного виділеного блоку дописувати на початку його характеристики (довжину і id процеса, якому виділено, наприклад). Можете ще якось... коротше, це ваша система і ваші правила.
Зазвичай використовується купа.

Подякували: leofun011

11

Re: Питання про написання "ОС"

vtorgashov написав:

Читав вже... Але не зрозумiло як воно може отримати вмiсть пам'ятi, якщо вона разкидана не по порядку.
Як я зрозумiв:
------Вiльно 1 ------ ||||||||Зайнято 1 |||||||| ||||||||Зайнято 2|||||||| ------Вiльно 2------ ||||||||Зайнято 3 ||||||||
Потрiбно в malloc знайти такi вiльнi дiлянки i в них записувати.
Але як зробити це....
malloc поверне "Вiльно 1", а треба щоб при виходi з нього наступний елемент масиву був на дiлянцi "Вiльно 2".
Але як таке зробити ?
Теж саме з читанням пам'ятi.
Чи я не так зрозумiв ?

А оце почитали? https://wiki.osdev.org/Memory_Allocation

Maybe a = Just a | Nothing
Подякували: leofun011