Ученик Zet9! прочитали ли Вы список рекомендуемой литературы? Ознакомились ли с рекомендованными ссылками?
Вид для печати
Ученик Zet9! прочитали ли Вы список рекомендуемой литературы? Ознакомились ли с рекомендованными ссылками?
Привет, народ!
Как, по-вашему, системные процедуры для ОС следует оптимизировать по размеру кода или по скорости?
Я думаю, что по размеру важнее - ведь вызовы системных функций интенсивностью не отличаются?
По данному признаку процедуру оптимизировать невозможно: она не может быть "чуть-чуть не реентерабельной".
Вот для Спека с его ограниченным адресным пространством и слабым CPU, что предпочтительней, чтобы, к примеру, захват памяти занимал 100 байт и 400 тактов или же 80 байт и 450 тактов?
Если malloc была прервана в момент частичного изменения списков памяти, то другая задача, выполняя malloc, разрушит их.
А если процедуре нужны Forbid() и Permit(), то она уже не реентерабельна.
Не так ли?
Что и требовалось доказать.Цитата:
Может. Правда в абсолюте это называется "нереентерабельность".
По существу кто-то может высказаться?
по существу я бы сказал так: it depends :)
если у тебя места под код ос полно (например она в странице сидит), тогда по скорости оптимизируй и не парься. если же места мало, то тогда по размеру. ну и зависит еще от типа того, что ты оптимизируешь. если это шедулер, постоянно выполняющийся, то его лучше так и так по скорости, а если это редко запускаемая штука типа создания потока - ее можно сделать медленной. думаю, даже тот же malloc() можно сделать медленным.
Реентерабельность в данном случае зависит исключительно от факта использования общих данных. Примитивы синхронизации как раз и предназначены для разделения доступа.
1) Что делают эти функции?
2) Помимо модели "одна куча на всех", есть еще и другие модели, более ресурсоемкие, но и более безопасные.