avva: (Default)
[personal profile] avva
Реймонд Чен: Why does each drive have its own current directory?

Во всех версиях DOS и Windows командная строка "помнит" отдельно текущую директорию для каждого диска. Если на C: сделать cd foo, потом пойти на D: и там сделать cd bar, а потом вернуться "c:", то окажешься в запомненной директории foo. Так было всегда, но я никогда не понимал, зачем это нужно. У такого поведения были свои преимущества, но были и недостатки.

Из этой записи Чена я наконец узнал, зачем это так сделано: для совместимости DOS 2.0 с программами DOS 1.0. И по этой причине текущая директория так работает во всех версиях DOS и Windows, включая самые последние. Потому что когда-то нужно было, чтобы программы для DOS 1.0, не знавшие что такое "директория", могли писать в разные директории на дискетах, когда их запускали в DOS 2.0. Бедный, бедный мой мозг.

Было бы полезно сделать подборку записей Реймонда Чена (а у него немало записей в таком духе) обязательной для изучения будущими программистами в университетах.

Date: 2010-10-15 06:27 am (UTC)
From: [identity profile] skylump.livejournal.com
Ой, а расскажите, в чем была принципиальная разница между COM и EXE? Я попробовал погуглить, но на поверхности ничего не нашлось.

Date: 2010-10-15 08:06 am (UTC)
From: [identity profile] vveakling.livejournal.com
COM-файл - это просто бинарный кусок кода, имел ограничение на размер - 64К.
А у EXE (во временах MS-DOS) в начале файла шёл кусок данных описывающий расположение отдельных сегментов кода внутри файла, таким образом обходилось ограничение на размер. Во времена Windows формат развился дальше.

Date: 2010-10-16 11:29 pm (UTC)
From: [identity profile] mfi.livejournal.com
COM - расширение запускаемого файла, вся адресация команд и данных которого находится внутри единственного 64К сегмента, как у 8-разрядной машины. Т.е. программу, написанную для 8-разрядной архитектуры, например - интел 8080, можно запустить на процессоре 8088/8086. Понятно, что надо что то сделать с системными вызовами ОС, они разные у CP/M и MS DOS (но это решалось). Т.е. на первом ПС под Досом можно было писать и запускать программы, как для CP/M, со старым расширением .com. Либо даже собственно CP/M, пока нет нужных программ для MS DOS.

Для EXE файлов таких ограничений не было, можно было использовать все адресное пространство 16-разрядной машины (1 мегабайт), использовать разные адресные экстенты для данных, для разных частей кода и т.п. Загрузчик понимал, куда что положить в памяти - что в начало, что в конец и т.п., т.е. один файл мог раскидываться по частям, а не одним непрерывным куском в память.

Date: 2010-11-07 05:08 am (UTC)
From: [identity profile] dmitry zuikov (from livejournal.com)
Вообще-то адресное пространство 16-битной машины это как раз 64K. 8086 вроде бы могли адресовать до 220 памяти по схеме сегмент-смещение, но 384 килобайта были зарезервированы.

December 2025

S M T W T F S
  123 4 56
78 9 10 11 1213
1415 1617181920
21 22 23 24 2526 27
28293031   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Dec. 29th, 2025 12:11 pm
Powered by Dreamwidth Studios