OSDev

для всех
Текущее время: 09 май 2024, 05:54

Часовой пояс: UTC + 3 часа




Форум закрыт Эта тема закрыта, вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 93 ]  На страницу Пред.  1, 2, 3, 4, 5, 6, 7 ... 10  След.
Автор Сообщение
 Заголовок сообщения: Re: Память
СообщениеДобавлено: 28 авг 2012, 14:39 
Заблокирован

Зарегистрирован: 28 окт 2011, 12:14
Сообщения: 555
Откуда: Новосибирск
А если например страница в оперативке занята мы же можем копировать её в другую и заменить её другой, тоже вариант если понадобится.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Память
СообщениеДобавлено: 28 авг 2012, 15:05 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
Станислав писал(а):
Я вот подумал, что система должна иметь общую таблицу всего адресного пространства и при добавлении страниц приложениям отмечать у себя их как занятые, т.е. она имеет в своём виртуальном пространстве просто карту физического пространства, и при выделении первой страницы для приложения под создания её таблицы сможет считать её физическим адресом, который сможет загрузить в CR3.
Кстати нужно тупо сделать массив свободных страниц и при использовании страницы будем уменьшать его размер, а при освобождении добавлять в массив адрес страницы и увеличивать его размер, и нам не важно в каком порядке они там расположены, больше нам от этого массива ни чего не требуется, но нам большую работу будет делать.
Да, это называется битовой картой и стеком страниц соответственно.

grindars писал(а):
Это работает ровно до тех пор, пока в игру не вступают устройства с DMA, которые работают с физическими адресами и которым нужны буфера, непрерывные в физической памяти.
Да, такие устройства могут быть. Но также есть и устройства, которые могут работать и с несмежными буферами, например, PCI IDE. Для основного пула страниц я не использую группирование по их физ. местоположению. Для выделения смежных физ. страниц мне пока достаточно небольшого пула, занимающего базовую память.

Станислав писал(а):
Я так и думал, что возникнет такой вопрос, кстати если заполнить массив с низу в верх, то впереди будут адреса верхних страниц(участков памяти по 4096 байт), и работа начнётся с ними в первую очередь, а в начале массива с нижними адресами.
Заполнять можно по-разному. Если считать, что функция SMAP возвращает области памяти в возрастающем порядке, то у меня при инициализации физ. адреса в массиве будут идти от старших к младшим. Забор страниц выполняется с конца массива, т.е. сначала будут выделяться страницы с младшими адресами. Потом конечно все перемешается.

Цитата:
Я имею в виду что на этот случай можно создать доп. функцию и она может искать нужный объём страниц перебором, главное, чтобы работала быстро первая функция как постоянно востребованная, а вторая нужна редко и в основном при загрузке системы, когда все страницы пусты и ещё не перемешаны.
Искать перебором в большом массиве слишком накладно, тем более что ты до конца перебора не можешь быть уверен, что в массиве содержится нужное количество смежных страниц. Здесь лучше использовать карту страниц или более сложную структуру, в которой группируются блоки определенных размеров. Мне смежные физ. страницы нужны только для работы с устройствами. На момент размещения ядра по своему постоянному адресу память уже виртуальная, поэтому не требует физической непрерывности.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Память
СообщениеДобавлено: 28 авг 2012, 15:10 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
Станислав писал(а):
А если например страница в оперативке занята мы же можем копировать её в другую и заменить её другой, тоже вариант если понадобится.
Блин, хотел я еще к пред. посту написать: "Ты еще ради непрерывности начни задействованную память отнимать!" На самом деле и это возможно, если в структурах, отвечающих за распределение памяти хранится идентификатор владельца страницы и др. сопутствующая инфа. Но я такого не использую, поэтому и говорить не буду.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Память
СообщениеДобавлено: 28 авг 2012, 15:13 

Зарегистрирован: 22 май 2007, 15:29
Сообщения: 283
У себя я храню список свободных регионов физической памяти, общий объем свободной памяти и размер наибольшего непрерывного куска, плюс то же самое для свободного адресного пространства.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Память
СообщениеДобавлено: 28 авг 2012, 15:23 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
Не, я сразу разбираю "свободные регионы" на отдельные страницы. Общее количество свободных страниц - это фактически вершина массива. Правда, есть еще и страницы, занятые непосредственно самим массивом, но их я использую в последнюю очередь, т.к. они требуют отцепления от ВАП.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Память
СообщениеДобавлено: 28 авг 2012, 16:00 
Заблокирован

Зарегистрирован: 28 окт 2011, 12:14
Сообщения: 555
Откуда: Новосибирск
Повспоминал я устройства которые работают с DMA и думаю что пора нам вообще отказаться от такой функции, т.к. для дисков, флешек и сетевух это уже не нужно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Память
СообщениеДобавлено: 28 авг 2012, 16:22 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
Насчет флешек и сетевух не скажу, а для дисков мне нужно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Память
СообщениеДобавлено: 28 авг 2012, 21:51 

Зарегистрирован: 26 мар 2012, 17:32
Сообщения: 209
Для сетевух не нужен DMA? Бред-то какой. То что там не используется выделенный DMA контроллер - ещё не значит что устройство не использует прямой доступ к памяти выделенного для работы буфера. То же самое и с usb контроллерами.
PIO - не вариант.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Память
СообщениеДобавлено: 29 авг 2012, 03:45 
Заблокирован

Зарегистрирован: 28 окт 2011, 12:14
Сообщения: 555
Откуда: Новосибирск
Nable писал(а):
Для сетевух не нужен DMA? Бред-то какой. То что там не используется выделенный DMA контроллер - ещё не значит что устройство не использует прямой доступ к памяти выделенного для работы буфера. То же самое и с usb контроллерами.
PIO - не вариант.

Объясняю для тех кто не в курсе принцип работы устройств с памятью для DMA
Для сетевух требуется страница с адресами блоков(пакетов), каждый адрес 16 байт, я делал по максимуму 256 пакетов и получилось как раз 4096 байт, сами пакеты это так же как и страницы не связанные участки памяти.
У юсб заголовок для команд вообще 64 байта, а дальше ссылки на мелкие команды у которых тоже адрес на следующий, есть ещё более старый вариант, через список непрерывных команд но там тоже не больше 4096. А данные с флешки всё ровно за раз не больше кластера.
У дисков есть один непрерывный буфер для команд к винту который может быть больше 4096, но без него обойтись очень легко. Вернее он даже бесполезен, т.к. столько секторов в память не прочитать.
Вообще чем современнее устройство тем больше шанс отсутствия потребности в непрерывном буфере. Я даже сказал бы, что устройства требующие непрерывный буфер это история, как rlt389, которая из своего непрерывного буфера требовала выцарапывать побайтово данные, чем вызывала нагрузку на процессор и теряла пакеты из за того, что не всегда успеваеш это сделать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Память
СообщениеДобавлено: 29 авг 2012, 04:26 
Заблокирован

Зарегистрирован: 28 окт 2011, 12:14
Сообщения: 555
Откуда: Новосибирск
Я примерно понял, как нужно создавать таблицы для процессов, мы выделяем страницу для каталога страниц и страницу для таблицы страниц, дающую нам 4мб памяти, если нужно будет ещё 4мб выделим страницу для второй таблицы страниц и занесём её в адрес каталога страниц, а системные таблицы страницы у нас будут в каждом каталоге страниц, и по вызове прерывания от любого устройства, в любой таблице страниц у нас забиты данные страниц устройств и его код, так что для этого не нужно будет перезагружать CR3.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Форум закрыт Эта тема закрыта, вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 93 ]  На страницу Пред.  1, 2, 3, 4, 5, 6, 7 ... 10  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB