Физический адрес переменной в процессах

mkdir -p PDF
for f in *.pdf ; do
    bn=$(basename -- "$f" .pdf)
    [ -e "$bn.doc" ] && mv -- "$f" PDF/
done

Я оставлю это на ваше усмотрение rm -rf PDF / - я предпочитаю оставлять неотменяемый шаг как можно позже в любой потенциально рискованной процедуре.

Если вы предпочитаете просто удалить их, то:

for f in *.pdf ; do
    [ -e "$(basename -- "$f" .pdf).doc" ] && rm -f -- "$f"
done

Эта версия не требует установки промежуточной переменной «$ bn» - в любом случае работает ... первая версия IMO более «читабельна» и является также лучше, если у вас есть другие варианты использования базового имени файла.

0
21.05.2018, 23:04
2 ответа

Sí, todo lo que el proceso ve directamente son solo direcciones virtuales.

En su sistema de paginación habitual no hay un "registro base", ya que el mapeo de direcciones virtuales -a -físicas ocurre por páginas, que no necesitan estar en -orden. (por ej. puede tener la página virtual 1 en la página física 4563, pero la página virtual 2 en la página física 2413. )Consulte, p. la imagen en la página de Wikipedia en Tablas de página .

No creo que un proceso pueda acceder directamente a sus tablas de página, pero parece que Linux las exporta a través de /proc/<pid>/pagemap. La documentación del kernel para eso está enDocumentation/vm/pagemap.txt. También hay otra pregunta sobre la lectura del mapa de páginas:Ver tabla de páginas para un proceso .

1
28.01.2020, 02:31

No hay garantía de que una dirección virtual en particular se asigne a una dirección física única. No hay garantía de que una dirección virtual en particular se asigne a cualquier dirección física . No hay garantía de que cualquier asignación entre una dirección virtual y alguna dirección física se mantendrá constante durante un período de tiempo interesante.

Entonces, su pregunta realmente no refleja la forma en que funciona la memoria virtual. Trabajas en términos de direcciones virtuales. El kernel puede jugar con cosas como la MMU sin embargo y cuando quiera cambiar qué puntos dónde, por lo que incluso si conociera alguna dirección física, nunca podría usarla para nada. Incluso si obtuviste suficiente información del kernel visible que controla tu proceso para inferir dónde podría estar algo, no puedes estar seguro de que no estás en alguna VM, y hay otra capa de indirección además de lo que estás buscando. consulte --de modo que lo que cree que es una dirección física es en realidad solo la dirección virtual dentro de algún software de host de VM.

Sus direcciones virtuales se agrupan en páginas.La MMU está programada con algunas tablas de páginas, por lo que tiene algún mapeo. Si hay un registro simple con el desplazamiento dentro de la MMU, no tiene forma de sacarlo de la MMU, porque no es un registro de la CPU que sea parte de la ISA. (Y en máquinas más antiguas, la MMU era un chip físico completamente separado de la CPU. )Lo único que puede hacer es leer un montón de documentación de MMU para su arquitectura, obtener acceso a la configuración de la tabla de paginación del kernel y recorrer esas cosas para "emular" el comportamiento de la MMU en ciertas entradas. La propia CPU ni siquiera es (visible/directamente )consciente de la indirección.

Entonces, ¿qué es lo que realmente quieres hacer?

1
28.01.2020, 02:31

Теги

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