Вызывает ли файл, прочитанный из приложения Java, системный вызов?

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

Итак, системный вызов, похоже, вообще отсутствует. Может ли кто-нибудь исправить возможные ошибки в описанной выше процедуре?

4 голоса | спросил simpatico 3 J000000Saturday10 2010, 17:22:35

4 ответа


0

В самом первом предложении (вызывать файловую систему), которое подразумевает системный вызов, поскольку он обязательно должен передать контроллер ядру ....

ответил ennuikiller 3 J000000Saturday10 2010, 17:25:51
0

(обычно), когда вы открываете /читаете /пишете файл в Java, вызывается ядро ​​ОС, иначе говоря. системный вызов для открытия /чтения /записи этого файла. Как это сделать и задействовать управление памятью, все в руках ядра, но в конечном итоге считанные из файла байты копируются обратно в буфер, передаваемый через системный вызов.

ответил nos 3 J000000Saturday10 2010, 17:26:48
0

То, что вы описываете - это Memory Mapped IO, который ни в коем случае не является единственным или даже стандартным способом. И даже в этом сценарии происходят системные вызовы, хотя они могут находиться позади приложения.

Если у вас ошибка страницы, то есть отсутствует часть памяти, ядро ​​все равно будет уведомлено о том, что нужно сделать все возможное, чтобы получить страницы в память от блочного устройства. Есть кое-что, что нужно выяснить, с какого устройства можно получить информацию. С программным рейдом это может быть очень запутанным, с другими это может быть просто, как настройка передачи DMA и позволить ей разорваться. Может быть, есть наборы микросхем, которые могут делать это самостоятельно при определенных обстоятельствах, но, конечно, не все.

Дело не в том, что ваша программа их не выполняет, поэтому нет «системных вызовов». Однако такая абстракция дает специалисту по ядру больше свободы при извлечении последней унции производительности из аппаратного обеспечения.

ответил Peter Tillemans 3 J000000Saturday10 2010, 17:56:03
0

Что вас интересует, так это дизайн операционной системы. Доступно много подходов, и, располагая абстракцию файловой системы поверх абстракции файла (все является файлом, состоящим из потока байтов), вы можете сделать довольно много, не меняя абстракцию.

Подумайте, как операционная система должна обращаться с RAM-диском по сравнению с FireWire-диском по сравнению с сетевым ресурсом Windows. Абстракция файла такая же.

Теперь, если вы действительно хотите ЗНАТЬ, что происходит, я настоятельно рекомендую загрузить и установить OpenSolaris и научиться работать с dtrace. Он позволяет вам спросить систему, что она делает, от вашего основного метода до отдельных драйверов поверх физического оборудования.

ответил Thorbjørn Ravn Andersen 3 J000000Saturday10 2010, 18:14:12

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

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132