Какова цель логических адресов в операционной системе? Почему они генерируются

Я бы интерполировал данные на регулярной сетке. Например, вы можете использовать LinearTriInterpolator .

So:

import matplotlib.tri as mtri

Затем замените вашу строку

cs = m.pcolormesh( lons, lats, data, shading='flat', latlon=True, vmin=0, vmax=100)

на что-то как

ngrid = 50
rlons = np.repeat(np.linspace(np.min(lons), np.max(lons), ngrid),
                  ngrid).reshape(ngrid, ngrid)
rlats = np.repeat(np.linspace(np.min(lats), np.max(lats), ngrid),
                  ngrid).reshape(ngrid, ngrid).T
tli = mtri.LinearTriInterpolator(mtri.Triangulation(lons.flatten(), lats.flatten()),
                                 data.flatten())
rdata = tli(rlons, rlats)
cs = m.pcolormesh(rlons, rlats, rdata, latlon=True, vmin=0, vmax=100)

-2
задан Aadil Chan 16 January 2019 в 03:03
поделиться

1 ответ

Виртуальные адреса необходимы для запуска нескольких программ на компьютере.

Предположим, что нет механизма виртуальных адресов. Компиляторы и редакторы ссылок генерируют макет памяти с заданным шаблоном. Инструкция (текстовый сегмент) размещается в памяти с адреса 0. Затем идут сегменты для инициализированных или неинициализированных данных (data и bss) и динамической памяти (куча и стек). (см., например, https://www.geeksforgeeks.org/memory-layout-of-c-program/ , если у вас нет представления о разметке памяти)

Когда вы запускаете эту программу он будет занимать часть памяти, которая больше не будет доступна другим процессам совершенно непредсказуемым образом. Например, адреса от 0 до 1M будут заняты, или от 0 до 16k, или от 0 до 128M, это полностью зависит от характеристик программы. Если теперь вы хотите одновременно запустить вторую программу, куда ее инструкции и данные попадут в память? Адреса памяти генерируются компилятором, который, очевидно, не знает во время компиляции, что будет свободной памятью. И помните, что адреса памяти (для инструкций или данных) как-то жестко запрограммированы в программном коде.

Вторая проблема возникает, когда вы хотите запустить много процессов и у вас заканчивается память. В таких ситуациях некоторые процессы выгружаются на диск и позже восстанавливаются. Но после восстановления процесс пойдет туда, где память свободна, и опять же, это что-то непредсказуемое и потребует изменения внутренних адресов программы.

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

0
ответ дан Alain Merigot 16 January 2019 в 03:03
поделиться
Другие вопросы по тегам:

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