почему в пентеве плохие 16-литровые банки

Postby fk0 » 29 Nov 2013, 10:56

Вообще бы надо как то наебать шестнадцатибитность адреса зетника.
Допустим длинный JP вполне реально реализовать, теми же префиксами или неиспользуемыми командами.


Не надо. Для этого есть jump table в нижней памяти.

а вот что делать с данными хз, из постов fk0 ничё не понял, ввиду отсутствия вышки.


Помимо высшего образования нужно среднее соображение.
http://pc.fk0.name/pub/books/os/os/node ... 0000000000
* Origin: зип файл! (2:5030/1559)
User avatar
fk0
 
Posts: 1535
Joined: 07 Apr 2007, 01:08
Group: Registered users

Postby fk0 » 29 Nov 2013, 10:57

PS: кстати сразу нахаляву можно garbage collector и дефрагментатор ОЗУ сделать.
* Origin: зип файл! (2:5030/1559)
User avatar
fk0
 
Posts: 1535
Joined: 07 Apr 2007, 01:08
Group: Registered users

Postby lvd » 29 Nov 2013, 11:01

fk0 wrote:Помимо высшего образования нужно среднее соображение.
http://pc.fk0.name/pub/books/os/os/node ... 0000000000

Этащито? Общие слова, разбавленные рассказом про выньдос311 и далее копипастой из рождественской ёлки? А в конце упоминание про з80. Или ты хочешь сказать, что надо делать как в вынь-дос311?
F̞͖̭̿̔ͯu̐̅cͬ̑ͩk̨̤̳͇̮̭̪̠̽̿̓̆ͭͩ ̷̩̰͎̩͓̘̾̀ͬ̊ͭ͛ͅda̝̺͙̬͎̝̾͟ ̰̜̝̯͉̯̖̓̎́ͨ̽ͫ͟f̟͇̭̀ͬͨͭ̐̚u̹̼̹̗̞͑̔͂͐̚cͭ̅̊̆̒̆ǩ̝̩̯́ͥ̔̍̑ḭ͓͍̳̬ͦ̽͂n͍͎͈̈̅ͩͬ ̊ͫ̂̾̑̈́f̲͚͉͓͗̋́ͧͦ̅ȗ͇̲̻͈̲̅̎͗͒ͭ͡c̬̟̠̹̯̈́ͩ͘ͅk̫̠̻̋͜a̲͒̾̇!͙͕̺͉̗̩̲̂̏̄̀
User avatar
lvd
 
Posts: 7262
Joined: 07 Apr 2007, 21:28
Group: Registered users

Postby fk0 » 29 Nov 2013, 17:44

Да! Можно даже пойти дальше и взять концепцию ОС-фантом им. DZ, но наоборот. Не "у нас всё будет в памяти и не будет файловой системы...", а "у нас будут только файлы и ничего кроме файлов". И сделать функцию mmap. Ограниченную банкой или двумя (по размеру непрерывного окна, в которое виден кусок файла). Надо данные: открыл файл, отмапил (включилась нужная банка, если нужно подкачали данные с флоповода), поработал, сделал unmap... когда-то потом сделал close или fsync (данные записались на диск, если они не записались ещё раньше, когда страниц в системе не хватало и началось выкидывание не записанного на флоповод). Так даже лучше, чем предлагаемое ранее. В том смысле, что это не отменяет, то что я ранее предлагал, а просто добавляет сверху всего ещё слой файлов. И не нужно тогда разделять -- мол это у нас оперативная память, а это дисковый кеш -- всё едино.

Т.е. вот пример, например, работы программы, например:
Code: Select all
   1. char name[] = "XXXXXXX";
       int fd=mkstemp(name);  // создаём файл для временных данных
       unlink(name);  // сразу удаляем файл (только для временных файлов)
                                 // чтоб при (аварийном) завершении программы не засирать /tmp
     
   2. if (pwrite(fd, ..., 10000) <= 0)  {  // резервируем 10000 памяти
            perror(...);  // нет места на диске и др. ошибки...
            exit(1);
       }
   
   while (1) {   // цикл работы программы

        3. int *addr=mmap(preferred_addr, fd, offset, size);  // отображаем кусок файла в память (включается банка)
            if (addr==NULL)  {
                   perror(...);  // какая-то ошибка: либо кончилось адресное пространство (слишком много mmap и не unmap),
                   abort();      // либо ошибка чтения с диска и т.п.
            }

        4. *addr=*addr++.... // поработали с отображаемой памятью

        5. munmap(addr);    // банка выключилась, память больше не доступна, но данные ещё в ОЗУ

  }

  6. fsync(fd);             // принудительно сохранили данные если нужно (если файл не временный, а постоянный).

  7. close(fd);    // данные записались на диск и будут максимально быстро
                         // (когда потребуется память) удалены из памяти



PS: Офигенно удобно, что временные файлы можно в рамдиске создавать. Или своп на винт, если рамдиска не хватает.

PPS: Я бы забыл про рамдиск. Вся память -- дисковый кеш. Остальное на винт (SD-карточку). Не хватает -- пошёл в своп (в том смысле, что как такового своп-файла не будет, просто файлы действительно запишутся в виде файлов на карточку).

PPPS: Только работать оно тогда должно с FAT с большим диском. На TR-DOS'ном диске можно не высвопишь, да и проблемы с записью в первый файл, после записи второго...
* Origin: зип файл! (2:5030/1559)
User avatar
fk0
 
Posts: 1535
Joined: 07 Apr 2007, 01:08
Group: Registered users

Postby fk0 » 29 Nov 2013, 18:01

К этому всему нужно написать таки какой-то аллокатор памяти (чтоб получать осмысленное смещение в файле, не руками же всё распределять). На тот случай, когда нужно 100500 маленьких сегментов памяти и неудобно на каждый отдельный файл заводить. Он должен работать примерно как обычный malloc, но с файлом большого размера.

Но тут возникает фрагментация (впрочем, не так страшен чёрт). Но из этого можно выкрутиться, если таки сделать то, что было в win 3.11. Над аллокатором построить штуку, которая будет типа базы данных, ключ-значение. И уже работать не с файлом и смещением в файле. А с ключём, а в остальном всё так же. Просто будут вызовы отмапливания по ключу, а не по адресу. Идея в том, что прослойка будет делать realloc(), если нужно, после отмапливания (и запись в новое место файла, благо какая-то часть, и возможно всё, т.к. актуально для маленьких кусочков, уже в памяти) и таким образом будет дефрагментироваться.

BerkeleyDB же имеет такой режим. Единственное что, ключ нужно изначально получать уникальный. Надо сделать что-то подобное просто и всё.
* Origin: зип файл! (2:5030/1559)
User avatar
fk0
 
Posts: 1535
Joined: 07 Apr 2007, 01:08
Group: Registered users

Postby fk0 » 29 Nov 2013, 18:06

И будет офигенно, если программа хранит данные, например, в /var/tmp как бы (не удаляется при перезапуске) то добавить несложный функционал записи данных программы, хранимых без mmap (это где-то пара десятков кБайт максимум: стек, bss, data и т.п.) в файл. И получаем сохранение состояния при выключении питания. Причём персонально для программы. Можно сделать многозадачность. Конечно 100500 раз в секунду так не сделаешь, но переключение между задачами -- удобно. Естесственно, подразумевается, что text программы мапится из файла всегда и его нет смысла сохранять. Самомодифицирующийся код -- это данные.
* Origin: зип файл! (2:5030/1559)
User avatar
fk0
 
Posts: 1535
Joined: 07 Apr 2007, 01:08
Group: Registered users

Postby fk0 » 29 Nov 2013, 18:08

Для реальной многозадачности нужно перемапливать (почти) все банки. Какое-то небольшое число задач так влезет. Но... они не должны лезть напрямую к аппаратуре, а работать только через ОС. В частности, касается дисплея. Это краеугольный камень.
* Origin: зип файл! (2:5030/1559)
User avatar
fk0
 
Posts: 1535
Joined: 07 Apr 2007, 01:08
Group: Registered users

Postby DimkaM » 01 Dec 2013, 15:28

скопипиздили мою мыслю гяф/showthread.php?t=22240
N>"Идите нахуй" со своей политикой...
DimkaM
 
Posts: 1011
Joined: 24 Mar 2010, 12:42
Location: г.Щёлково М.О.
Group: Registered users

Postby fk0 » 02 Dec 2013, 05:56

Дурость. Давайте уже сразу пеньтиум поставим...
* Origin: зип файл! (2:5030/1559)
User avatar
fk0
 
Posts: 1535
Joined: 07 Apr 2007, 01:08
Group: Registered users

Previous

Return to ZX Spectrum

Who is online

Users browsing this forum: No registered users and 10 guests

cron