Выделение памяти

Applications development, KoOS API questions
  • //DG, я вообще-то написал по дефолту. А если кому-то нужно сделать подмену. Например, для тестирования или отладки, то вот тогда и lib_init вызывать лишь при необходимости.
    А то сейчас программы вынуждены из-за прихоти разработчиков таких библиотек таскать с собой вот это http://websvn.kolibrios.org/filedetails ... %2Fdll.inc А так бы GetProcAddress было бы достаточно.
  • Там в левом нижнем углу написано Free memory(KB): 203716, а это меньше, чем запрошено(203716 < 1048576).
    Это не мешает выделить виртуальную память, т.е. диапазон адресов. Если ты начнёшь эту память обнулять, получишь страничную ошибку, когда физическая память закончится.
    Я проверял в VBox и VMware Player c 256 Мб
  • Serge, попробую по-другому тогда объяснить.
    Приложение1 резервирует всю память,
    Приложение2 резервирует всю память,
    ..............
    потом, когда приложения начнут её использовать, кто-то словит pagefault.
  • 0CodErr
    Словит, когда свободные страницы закончатся. Но в твоём случае вылезает не страничное нарушение, a gpf - общее нарушение защиты.
  • Serge wrote:Но в твоём случае вылезает не страничное нарушение, a gpf - общее нарушение защиты.
    Да это, похоже, не к этой теме относится.
    Словит, когда свободные страницы закончатся.
    Хорошо, как перед использованием какой-либо страницы определить, свободна она, или её уже кто-то другой использует?
    Ты говорил, что надо В цикле с шагом в 4Кб пройти по всем страницам. Это закрепит физ. страницы по адресам. Так почему бы ядру самому не закрепить страницы?
  • 0CodErr wrote://DG, я вообще-то написал по дефолту. А если кому-то нужно сделать подмену. Например, для тестирования или отладки, то вот тогда и lib_init вызывать лишь при необходимости.
    А то сейчас программы вынуждены из-за прихоти разработчиков таких библиотек таскать с собой вот это http://websvn.kolibrios.org/filedetails ... %2Fdll.inc А так бы GetProcAddress было бы достаточно.
    Так и я говорю: по дефолту ты просто прокидываешь адрес стандартных процедур. То, что надо с собой что-то таскать - совсем другой вопрос.


    Ококок, я воспринял "lib_init" как абстрактный вызов для инициализации данной библиотеки. А ты о конкретном lib_init, извини. еще не привык к вашему языку :D
  • 0CodErr wrote:
    Serge wrote:Но в твоём случае вылезает не страничное нарушение, a gpf - общее нарушение защиты.
    Да это, похоже, не к этой теме относится.
    Словит, когда свободные страницы закончатся.
    Хорошо, как перед использованием какой-либо страницы определить, свободна она, или её уже кто-то другой использует?
    Ты говорил, что надо В цикле с шагом в 4Кб пройти по всем страницам. Это закрепит физ. страницы по адресам. Так почему бы ядру самому не закрепить страницы?
    В Колибри есть что-то типа MEM_RESERVE/MEM_COMMIT? Ну, вызываешь ты функцию "дай мне памяти, ядро и закрепи-ка физические сразу" или просто "зарезервируй мне диапазон".
    А то если нет подкачки, резервирование без закрепления - странная штука.
  • Хорошо, как перед использованием какой-либо страницы определить, свободна она, или её уже кто-то другой использует?
    Ты про физическую страницу ? Физический адрес которой не имеет смысла в виртуальном адресном пространстве процесс ? А что это тебе даст ?
  • Serge, нет, я про виртуальную, которую будет использовать процесс в юзермоде.
  • Страница выделяется при первом обращении к ней. И остаётся закреплённой, пока процесс её не вернёт ядру.
  • Serge, первое обращение может совершить и любой другой процесс, зарезервировавший эту память. Получается, кто первый встал — того и тапки? :lol: А остальные pagefault поймают.
  • Ну обсуждалось же уже, тему перечитай.
  • первое обращение может совершить и любой другой процесс, зарезервировавший эту память.
    Нет, не может. У другого процесса другое адресное пространство. Общее только пространство ядра, юзерспейс индивидуальный.
  • Обсуждалось-то оно обсуждалось, а толку? Мне больше всего "понравился" 3-ий пункт алгоритма Serge viewtopic.php?f=2&t=3297&start=15#p65652
    Ну разве кто-то будет использовать эту ОС для серьёзных вещей? Представьте, что от этого зависила бы работа дорогостоящего оборудования. Я уж не говорю про жизнь людей. А тут, понимаешь, Скрестить пальцы.
    Так и представляю, пишет кто-то багрепорт, а Serge ему: "Пальцы скрещивали?" :)
    Нет, не может. У другого процесса другое адресное пространство.
    А я и не про это вовсе. Если 2 приложения зарезервируют каждый всю свободную память, то при обращении к ней рано или поздно у кого-то будет pagefault.
  • Who is online

    Users browsing this forum: No registered users and 7 guests