185 похожих чатов

А какие существуют способы обработки ошибок выделения памяти в ядре?

Т.е., допустим, есть функция, которая возвращает адрес свободной страницы в физической памяти и диапазон виртуальных адресов, который должен быть замаплен на свежевыделенную память. Так вот если пойти прямолинейно и в "тупую" и просто пройтись по всем записям таблицы страниц, которые надо замапить и присвоить им результат функции (получается по вызову на каждую запись таблицы). Так вот, что делать если во время этого процесса выяснится, что память закончилась и удовлетворить запрос выделения памяти невозможно? Дело в том, что в результате у нас остаётся частично удовлетворённый запрос, который надо откатить. Напрашивается только 2 основных решения, либо придумать способ, чтобы такой запрос можно было действительно откатить, либо как-то заранее прикинуть сколько запрос потребует памяти, чтобы "тупой" алгоритм никогда не мог сломаться. Первый вариант, кажется не очень хорошим. Второй вариант сложноват для реализации. Есть ли варианты проще?

51 ответов

5 просмотров

Стикер

disba1ancer- Автор вопроса

потому что алгоритм надо посреди работы развернуть в обратном направлении

Знаешь историю про qnx?

откат должен работать если правильно коды возврата использовать и дерево вызовов красиво построить тогда что-то типа intermediate_page = allocated.x; if allocate_subpages.failure { deallocate(intermediate_page); return failure; } commit_pages();

disba1ancer- Автор вопроса
disba1ancer
не знаю ни одной

Ну вот оно делало в какой-то версии то же что и предлагаешь ты и по итогу висло, ядром, намертво

disba1ancer
и почему оно висло?

Потому что ядро не должно так делать

disba1ancer- Автор вопроса
ᛒ ᛖ ᚱ ᚲ ᚢ ᛊ ᛞ ᛖ ᚲ ᛖ ᚱ
откат должен работать если правильно коды возврата...

ну для этого надо кодами пользоваться, а не как очень часто бывает - если не ноль(или другой код удачного завершения), то кидаем в панику

disba1ancer
а как оно должно делать?

Оно должно быть просто интерефейсом

Mixail Frolov
ну для этого надо кодами пользоваться, а не как оч...

у меня Result<T,E> зачем мне коды еще я про общую структуру как это должно работать, реализуйте как удобнее

disba1ancer- Автор вопроса
Boris Vinogradov
Нее, просто надо делать ролбэк

роллбек сделать не так просто, нужно учитывать, что было уже замаплено до нас, обычно это случаи в районе начала и конца аллокации

disba1ancer- Автор вопроса
disba1ancer
стек не резиновый

или страничку под номера строниц выделить

А зачем нужно искать страницу для ядра? Смаппить в уже известное место нельзя?

disba1ancer- Автор вопроса
disba1ancer
вопроса в том куда мапить нет

А, извиняюсь, я чет не сразу понял, при чем здесь странички. В таком случае, у тебя память может только у физического аллокатора закончится, но тогда уже делать нечего, мне кажется:)

disba1ancer- Автор вопроса
Evg Resh
А, извиняюсь, я чет не сразу понял, при чем здесь ...

про этот случай речь и идёт, возможно я не совсем правильно пояснил, прошу прощения если где-то ввёл в заблуждение

Evg Resh
А, извиняюсь, я чет не сразу понял, при чем здесь ...

Ну если маппинг страниц норм сделан то можно утилизировать, по сжимать или же посвоппить на диск

disba1ancer- Автор вопроса
disba1ancer- Автор вопроса
Boris Vinogradov
А почему нет диска?

потому что нет подсистемы взаимодейтсвия с ним, а если бы и была, инициализирована она будет позже инициализации аллокатора

disba1ancer
потому что нет подсистемы взаимодейтсвия с ним, а ...

А ты планируешь oom словить на инициализации?

disba1ancer
потому что нет подсистемы взаимодейтсвия с ним, а ...

если у тебя пиздец на инициализации происходит то иди читай посты Brendan-а на осдев форуме

disba1ancer- Автор вопроса
Evg Resh
А ты планируешь oom словить на инициализации?

если катастрофически мало памяти

disba1ancer
потому что нет подсистемы взаимодейтсвия с ним, а ...

А для чего ты ос делаешь что у тебя просрана память еще до работы с фс?

disba1ancer
если катастрофически мало памяти

Ты под avr с 512 байт рамы пишешь штоль?

disba1ancer- Автор вопроса
Wild_Wind
Ты под avr с 512 байт рамы пишешь штоль?

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

disba1ancer
я просто любитель предусматривать корнеркейсы

тогда тебе точно за брендановскими постами

disba1ancer
ну нет

ну а на компах обычных домашних на инициализацию всего и вся(видюхи не в счёт) уйдёт максимум пару метров, так что пофиг, а потом уже и свап прикрутить сбоку можно

disba1ancer
я просто любитель предусматривать корнеркейсы

Тогда тебе надо писать на расте или аде

disba1ancer- Автор вопроса
disba1ancer- Автор вопроса
Boris Vinogradov
Тогда тебе надо писать на расте или аде

не думаю, что это чем-то сильно поможет

disba1ancer
не думаю, что это чем-то сильно поможет

Поможет, вдруг ты будешь писать мимо массива

disba1ancer
не думаю, что это чем-то сильно поможет

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

ᛒ ᛖ ᚱ ᚲ ᚢ ᛊ ᛞ ᛖ ᚲ ᛖ ᚱ
сишников ожидает неприятный сюрприз - ВЕЗДЕ

Ну можно еще предложить frama-c и канистру вазелина.

Boris Vinogradov
Не помогает

Если не знать что проверять то ничего наверное и не поможет уже.

ᛒ ᛖ ᚱ ᚲ ᚢ ᛊ ᛞ ᛖ ᚲ ᛖ ᚱ
сишников ожидает неприятный сюрприз - ВЕЗДЕ

после асма сишные компили тоже говорят что перед монитором дурак сидит

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

Обсуждают сегодня

а проверьте, собирается ли у кого сейчас транк лазаря через делюкс? у меня вот: fpcupdeluxe: info: Lazarus Native Installer (BuildModuleCustom: UserIDE): LazBuild: building Us...
Iluha Companets
20
добрый день. возможно ли изменить цвет окон лазаруса? Как?
Budemposmotret
35
This is a big issue. Just by being a citizen of a country, you are denied to contribute to Open Source software: https://youtu.be/L5Ec5jrpLVk?si=1iIuHnMPbCB4anV-
Sharuzzaman Ahmat Raslan
72
Господа, а кто-нибудь сталкивался с размещением на TTabControl/TTabSheet множества контролов (> 100) с последующими External: Access violation? Вот буквально на ровном месте. ...
Dmitry
29
Вот например простой пример, как получить стоимость хешрейта монеты монеро с сайта whattomine.com c использование сеарилизатора при парсинге JSON TaskProfit := TTask.Run(proc...
Delphi Coder
2
ну так че, сделать програмулину, в которую можно добавлять в Едиты свои строчки кода(закладки) а потом по ним прыгать. ну и сохраняться они естественно будут той програмуленно...
Kraszx
15
Приветствую всех!)) Подскажите, а кто мог бы написать на делфи движок (самую базу) интерпретатора очень легковесного и минималистичного языка программирования? Язык - проце...
Моринаро
8
Does anyone have some zeroday's left?
Wito!d ♥️🩷
44
#include <stdlib.h> #include <stdio.h> #include <math.h> #include <assert.h> #include <limits.h> long long avg3(long long a, long long b, long long c) { if (a == b && b =...
Malformed C
4
class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( home: SplashScreen(), ); } } class SplashScreen e...
Anway
3
Карта сайта