Kontrol sumber daya bawaan RAM yang digunakan dalam aplikasi
Menjelaskan alat implementasi perangkat lunak yang cukup sederhana untuk mengendalikan sumber daya RAM yang digunakan selama eksekusi aplikasi. Dasar dari implementasi adalah intersepsi dan pendaftaran permintaan untuk alokasi, pelepasan dan penggunaan kembali sumber daya memori yang dikirim oleh aplikasi ke sistem operasi melalui panggilan malloc (), calloc (), realloc (), free () . Semua permintaan memori dicatat dalam log khusus dan di akhir aplikasi, informasi yang terakumulasi ditampilkan dalam bentuk laporan di konsol atau ditulis ke file teks. Analisis laporan memungkinkan Anda untuk mengidentifikasi kasus-kasus penggunaan RAM yang tidak efisien dalam aplikasi. Ini termasuk "kebocoran memori" ketika sumber daya memori yang diminta tidak dibebaskan dan tidak diklaim oleh aplikasi, fragmentasi, ketika ukuran bagian memori yang terkontaminasi dan dibebaskan berdekatan tidak cukup untuk memenuhi permintaan baru, yang mengarah ke alokasi sumber daya tambahan.
Alat kontrol memori yang terpasang dapat dihidupkan atau dimatikan (untuk mendaftarkan permintaan memori), dan kemungkinan pemindahan status terprogram memungkinkan Anda untuk mengontrol dan mengoptimalkan jumlah data yang diterima untuk sumber daya memori yang dialokasikan.
Pendahuluan
Proporsi yang signifikan dari sistem perangkat lunak modern dikembangkan menggunakan bahasa pemrograman
C #, Java dan sejenisnya, di mana pengelolaan sumber daya RAM dilakukan pada tingkat sistem dengan meminimalkan tanggung jawab pengembang perangkat lunak. Contoh dari sistem perangkat lunak tersebut adalah
Delta Design end-to-end otomatis sistem desain berbantuan komputer diimplementasikan dalam
C # dalam lingkungan
.net . Di sisi lain, perangkat lunak sistem otomasi memiliki "rentang hidup" yang agak panjang (hingga beberapa puluh tahun), yang mengarah pada kebutuhan untuk mempertahankan teknologi manajemen memori RAM yang "ketinggalan zaman", khususnya, ketika mengintegrasikan dua kelas sistem yang disebutkan ke dalam skema kontrol bersama.
Untuk alasan ini, hingga sekarang, masalah mendesak dalam pembuatan, pengembangan, dan pemeliharaan aplikasi perangkat lunak yang secara fungsional tetap menjadi kebutuhan untuk mengoptimalkan pengelolaan sumber daya RAM di dalamnya. Seiring dengan metode yang efisien (smart pointer, pengumpul sampah), perangkat lunak terus digunakan yang mengeksekusi permintaan untuk sumber daya memori melalui panggilan
malloc, calloc, realloc, gratis.Pendekatan ini memberi pengembang kendali penuh atas manajemen RAM dalam aplikasi, sambil memaksakan pada tingkat tinggi tanggung jawab atas pelepasan sumber daya ini secara tepat waktu untuk menghindari "kebocoran".
Sebagai aturan, pada tahap awal pengembangan perangkat lunak, tugas mengidentifikasi fakta-fakta penggunaan sumber daya memori yang tidak efisien bukanlah prioritas, karena struktur aplikasi cukup transparan. Namun, masalah mulai muncul ketika mengintegrasikan berbagai komponen struktural dan fungsional dari sistem dengan skema kompleks kendali distribusi sumber daya RAM dan pertukaran informasi di antara mereka. Perubahan generasi pengembang sistem juga berdampak pada pemecahan masalah mengoptimalkan pengelolaan sumber daya RAM. Akibatnya, properti negatif berikut mulai muncul di aplikasi:
- kesenjangan signifikan ditemukan antara ukuran aktual dari RAM yang dikonsumsi dan perkiraan pengembang;
- Ada peningkatan linear dalam memori dinamis yang digunakan selama eksekusi aplikasi.
Alasan penggunaan RAM yang tidak efisien dalam aplikasi adalah berbagai faktor, yang merupakan komposisi dari peristiwa dasar berikut:
- ketidakcocokan permintaan untuk penempatan dan pelepasan RAM ("kebocoran");
- rendahnya penggunaan kembali area bebas dari RAM, yang mengarah pada permintaan untuk area baru (fragmentasi).
Praktek mengembangkan dan memelihara aplikasi perangkat lunak dengan arsitektur yang kompleks dan fungsionalitas yang dikembangkan menunjukkan bahwa kontrol atas penggunaan sumber daya RAM di dalamnya harus dimulai sedini mungkin untuk mempertahankan kontrol atas proses ini. Anda dapat mengontrol sumber daya memori aplikasi dengan memperoleh dan menggunakan produk perangkat lunak yang sesuai (misalnya,
valgrind ), atau dengan menerapkan dan menanamkan cara untuk mencegat dan mendaftarkan permintaan untuk sumber daya RAM dalam kode program aplikasi.
Di bawah ini adalah contoh dari salah satu kemungkinan implementasi dari pendekatan ini.
Perangkat Lunak Kontrol Tertanam
Dasar dari solusi yang disajikan adalah intersepsi dengan cara mengontrol semua permintaan ke sumber daya RAM yang dikirim oleh aplikasi ke sistem operasi selama pelaksanaannya. Seluruh variasi permintaan tersebut diimplementasikan melalui panggilan ke
malloc (), realloc () atau
gratis () . Contoh urutan peristiwa saat memproses permintaan untuk mengalokasikan RAM malloc () ketika kontrol bawaan dimatikan dan dihidupkan ditunjukkan pada diagram di bawah ini (diagram serupa dapat dibuat untuk panggilan
realloc () atau
gratis () ). Pita "
A " mencakup urutan peristiwa selama alokasi memori yang terjadi dalam keadaan tidak aktif dari mode kontrol bawaan. Aplikasi mengirimkan permintaan ke sistem operasi untuk mengalokasikan ukuran memori yang diperlukan dan menerima pointer ke alamat mulai dari fragmen yang dipilih. Dalam kasus ketika ukuran memori yang diminta tidak tersedia, pointer dengan alamat nol dikembalikan, yang harus ditangani oleh aplikasi yang meminta sesuai.

Pita "
B " termasuk urutan kejadian saat mengalokasikan memori yang terjadi ketika mode kontrol bawaan aktif. Urutan ini sepenuhnya sesuai dengan yang dijelaskan sebelumnya, dengan pengecualian bahwa setelah mengalokasikan memori yang diminta, kontrol dilewatkan ke fungsi register_request (), yang menyimpan informasi tentang alamat dan ukuran memori yang dialokasikan sesuai dengan permintaan yang dibuat.
Sebenarnya, intersepsi dan pendaftaran permintaan ke sumber daya RAM dilakukan oleh objek memSupervisor, yang dibuat dalam satu contoh dengan memanggil init_memSupervisor () dan yang kemudian dapat dinyalakan atau dimatikan melalui panggilan masing-masing untuk mengaktifkan_memSupervisor () atau menonaktifkan_ memSupervisor ().
Teknik mencegat permintaan untuk sumber daya RAM didasarkan pada penggunaan variabel statis dari
pustaka GNU, seperti yang ditunjukkan dalam fragmen kode berikut.


Semua permintaan yang diproses untuk sumber daya RAM terdaftar dalam tabel catatan khusus, yang isinya disimpan dalam atribut memSupervisor.memRegister. Setiap entri berisi informasi berikut:

Setiap catatan dalam tabel dikaitkan dengan titik kontrol dari kode program, setelah melewati mana memori dialokasikan dan permintaan terdaftar.
Generator laporan teks (
memSupervisor.genReport (file_name) ) menghasilkan laporan menggunakan data tabel dan menulis informasi ke file teks yang ditentukan (atau output ke konsol aplikasi). Mengunduh data pelaporan ke tabel MS Excel dan mengatur yang terakhir sesuai akan memungkinkan Anda untuk mendapatkan representasi grafis dari data laporan tentang penggunaan sumber daya RAM.
Antarmuka ke kontrol bawaan
Pengumpulan informasi tentang permintaan aplikasi untuk sumber daya RAM dapat diimplementasikan dengan mengkompilasi dan menempatkan makro dalam kode sumber aplikasi yang dikompilasi hanya ketika variabel lingkungan yang sesuai diatur.

Di bawah ini adalah sepotong kode program yang menunjukkan penggunaan kontrol bawaan.



Berikut ini adalah ilustrasi penggunaan sarana yang dijelaskan dari kendali bawaan sumber daya RAM yang diminta oleh aplikasi
'foo' , yang melakukan penelusuran otomatis koneksi pada papan sirkuit tercetak. Untuk analisis, dipilih model meander yang cukup jelas dan nyaman, yang menampilkan dimensi memori akses acak dinamis yang diminta oleh aplikasi dalam proses meletakkan koneksi pada papan sirkuit cetak.

Model ini membantu mengidentifikasi masalah manajemen sumber daya RAM berikut:
- pada titik "A" dan "D" harus berukuran kira-kira sama dengan RAM yang digunakan
- peningkatan ukuran memori yang diminta pada tahap melakukan peletakan koneksi harus lancar. Jika perlu, langkah-langkah utama dari tahap ini harus dikontrol dengan menetapkan breakpoint dalam fragmen kode yang sesuai. Penghapusan paksa semua data pada koneksi yang diletakkan harus mengarah ke ukuran yang sama dari memori yang dikonsumsi pada titik "B" dan "C"
Diagram di bawah ini menunjukkan masalah manajemen memori dalam aplikasi
'foo' yang disebutkan.

Kesimpulan singkat
Sarana yang diuraikan kontrol terintegrasi sumber daya RAM dapat digunakan dalam kasus di mana produk perangkat lunak yang sesuai tidak tersedia dan tidak berlaku untuk alasan apa pun.
- Alat kontrol bawaan mendaftarkan dan mengumpulkan informasi tentang sumber daya dari memori yang diminta dengan tingkat akurasi dan detail;
- Kemampuan untuk beralih kontrol bawaan antara mode aktif dan tidak aktif memungkinkan Anda untuk mengonfigurasinya untuk mengekstrak dan menganalisis data dalam fragmen yang dipilih dari kode program aplikasi;
- Kontrol bawaan memungkinkan pengecualian lengkap dari aplikasi saat merakit yang terakhir tanpa menetapkan parameter kompilasi yang sesuai;
- Implementasi program analisis konten laporan yang diterima pada aplikasi sumber daya RAM yang digunakan selama pelaksanaan aplikasi dan verifikasi yang terakhir dengan salinan referensi memungkinkan untuk mengembangkan prosedur pengujian regresi untuk aplikasi untuk mendeteksi degradasi dalam penggunaan RAM;
- Kode program semacam ini kontrol RAM built-in terbuka untuk memperluas kemampuannya dan beradaptasi dengan kondisi tertentu penggunaannya;
- Kerugian utama dari alat yang dijelaskan adalah kebutuhan untuk memasukkan kode kontrol memori yang terpasang dalam kode aplikasi yang dipantau.
Sebagai kesimpulan, harus dicatat bahwa pendekatan yang dijelaskan untuk implementasi kontrol bawaan sumber daya RAM dalam aplikasi perangkat lunak tidak mengandung solusi baru yang radikal. Kegunaan dari pendekatan ini terletak pada kesederhanaan implementasi dan efisiensi aplikasi praktis yang agak tinggi.