Memory-mapped I/O

وحدة منخفضة المستوى لـ mmap (تعيين الذاكرة للملفات).

Mmap.AnonymousType
Mmap.Anonymous(name::AbstractString="", readonly::Bool=false, create::Bool=true)

إنشاء كائن يشبه IO لإنشاء ذاكرة mmap مُعَدَّة بالصفر وغير مرتبطة بملف للاستخدام في mmap. يُستخدم بواسطة SharedArray لإنشاء مصفوفات ذاكرة مشتركة.

أمثلة

julia> using Mmap

julia> anon = Mmap.Anonymous();

julia> isreadable(anon)
true

julia> iswritable(anon)
true

julia> isopen(anon)
true
source
Mmap.mmapFunction
mmap(io::Union{IOStream,AbstractString,Mmap.AnonymousMmap}[, type::Type{Array{T,N}}, dims, offset]; grow::Bool=true, shared::Bool=true)
mmap(type::Type{Array{T,N}}, dims)

أنشئ Array ترتبط قيمه بملف، باستخدام الذاكرة المخصصة. يوفر هذا طريقة ملائمة للعمل مع البيانات التي تكون أكبر من أن تتناسب مع ذاكرة الكمبيوتر.

النوع هو Array{T,N} مع عنصر من نوع bits-type T وأبعاد N التي تحدد كيفية تفسير بايتات المصفوفة. لاحظ أن الملف يجب أن يكون مخزناً بتنسيق ثنائي، ولا يمكن إجراء تحويلات تنسيقية (هذه هي قيود أنظمة التشغيل، وليس جوليا).

dims هو مجموعة أو عدد صحيح واحد Integer يحدد حجم أو طول المصفوفة.

يتم تمرير الملف عبر وسيط الدفق، إما كـ IOStream مفتوح أو سلسلة اسم الملف. عند تهيئة الدفق، استخدم "r" لمصفوفة "للقراءة فقط"، و "w+" لإنشاء مصفوفة جديدة تستخدم لكتابة القيم إلى القرص.

إذا لم يتم تحديد وسيط type، فإن القيمة الافتراضية هي Vector{UInt8}.

اختياريًا، يمكنك تحديد إزاحة (بالبايت) إذا، على سبيل المثال، كنت ترغب في تخطي رأس في الملف. القيمة الافتراضية للإزاحة هي موضع الدفق الحالي لـ IOStream.

تحدد وسيطة الكلمة grow ما إذا كان يجب توسيع ملف القرص لاستيعاب الحجم المطلوب من المصفوفة (إذا كان الحجم الإجمالي للملف < الحجم المطلوب للمصفوفة). تتطلب صلاحيات الكتابة لتوسيع الملف.

تحدد وسيطة الكلمة shared ما إذا كانت Array الناتجة والتغييرات التي تم إجراؤها عليها ستكون مرئية لعمليات أخرى تقوم بربط نفس الملف.

على سبيل المثال، الكود التالي

# إنشاء ملف للذاكرة المخصصة
# (يمكنك أيضًا استخدام mmap للقيام بهذه الخطوة)
using Mmap
A = rand(1:20, 5, 30)
s = open("/tmp/mmap.bin", "w+")
# سنكتب أبعاد المصفوفة كأول عددين صحيحين في الملف
write(s, size(A,1))
write(s, size(A,2))
# الآن اكتب البيانات
write(s, A)
close(s)

# اختبار عن طريق قراءته مرة أخرى
s = open("/tmp/mmap.bin")   # الافتراضي هو للقراءة فقط
m = read(s, Int)
n = read(s, Int)
A2 = mmap(s, Matrix{Int}, (m,n))

ينشئ مصفوفة Matrix{Int} بحجم m في n، مرتبطة بالملف المرتبط بالدفق s.

سيحتاج ملف أكثر قابلية للنقل إلى ترميز حجم الكلمة – 32 بت أو 64 بت – ومعلومات ترتيب البايت في الرأس. في الممارسة العملية، ضع في اعتبارك ترميز البيانات الثنائية باستخدام تنسيقات قياسية مثل HDF5 (التي يمكن استخدامها مع الذاكرة المخصصة). ```

source
mmap(io, BitArray, [dims, offset])

أنشئ BitArray ترتبط قيمه بملف، باستخدام الذاكرة المخصصة؛ له نفس الغرض، ويعمل بنفس الطريقة، وله نفس الوسائط، مثل mmap، لكن تمثيل البايت مختلف.

أمثلة

julia> using Mmap

julia> io = open("mmap.bin", "w+");

julia> B = mmap(io, BitArray, (25,30000));

julia> B[3, 4000] = true;

julia> Mmap.sync!(B);

julia> close(io);

julia> io = open("mmap.bin", "r+");

julia> C = mmap(io, BitArray, (25,30000));

julia> C[3, 4000]
true

julia> C[2, 4000]
false

julia> close(io)

julia> rm("mmap.bin")

هذا ينشئ BitArray بحجم 25 في 30000، مرتبط بالملف المرتبط بالتدفق io.

source
Mmap.sync!Function
Mmap.sync!(array)

يُجبر على التزامن بين النسخة الموجودة في الذاكرة من Array أو BitArray المخصصة للذاكرة والنسخة الموجودة على القرص.

source