"Memori tersedia" yang dikatakan Sistem Operasi untuk proses anak

1

Saya bertanya-tanya tentang bagaimana sistem operasi membiarkan proses anak tahu berapa banyak memori yang tersedia.

Katakanlah seluruh komputer memiliki memori RAM 1GB. Operasi berjalan dan menggunakan 100MB (Saya tidak tahu berapa banyak sebenarnya sistem operasi menggunakan). Jadi masih tersisa 900MB.

Kemudian Anda menjalankan 10 program. Setiap program menciptakan 10 proses anak. Pertanyaannya adalah, apa yang dilihat oleh proses orangtua dan anak ini sebagai total memori yang tersedia bagi mereka.

Sebagai bagian kedua dari pertanyaan untuk membuatnya sedikit lebih kompleks, katakan bahwa aplikasi telah berjalan untuk sementara waktu dan sekarang ada 500MB tersedia di komputer (katakanlah sistem operasi menggunakan 100MB lebih banyak, dan aplikasi menggunakan 300MB lebih, untuk mencapai level 500MB tersisa). Pertanyaannya sekarang adalah apa yang dilihat oleh proses orangtua dan anak ini sebagai memori yang tersedia pada saat ini. Jika sama dengan sebelumnya, atau berbeda, dan bagaimana perbedaannya.

Alasan untuk pertanyaan ini adalah karena saya telah membaca tentang Memori Virtual yang menyatakan:

memori virtual [adalah] teknik yang menyediakan "abstraksi ideal dari sumber daya penyimpanan yang sebenarnya tersedia pada mesin yang diberikan" yang "menciptakan ilusi bagi pengguna memori (utama) yang sangat besar."

Jadi pada dasarnya, sepertinya setiap proses dalam kasus (1) akan diberitahu "Anda memiliki memori yang tersedia 1GB", atau "Anda memiliki memori yang tersedia 900MB". Saya tidak yakin apa yang sebenarnya akan dikatakan, jika dikatakan total pada seluruh komputer, atau total - penggunaan sistem operasi.

Kemudian untuk kasus (2), itu akan berbunyi "1GB tersedia", "900MB tersedia", "600MB tersedia", atau "500MB tersedia". Situasi yang sama, saya tidak yakin apa yang akan dikatakan.

Bisa juga berbeda dari nilai-nilai itu. Sistem operasi entah bagaimana dapat memperkirakan memori yang tersedia untuk masing-masing proses 100 anak, membaginya secara merata mungkin. Jadi jika ada 500MB tersisa di komputer, itu berarti setiap proses akan diberitahu "Anda memiliki 500/100 == 5MB ruang yang tersedia". Tetapi kemudian jika ini masalahnya, jika satu proses menghabiskan 5MB, dan masih ada 495MB yang tersisa, bertanya-tanya apakah akan diizinkan untuk mulai menggunakan ini, dan diberi tahu nomor baru dari apa yang tersedia. Inilah mengapa saya tidak berpikir ini adalah bagaimana biasanya dilakukan, dan sepertinya OS akan memberi tahu apa yang mungkin tersedia di komputer secara keseluruhan (jadi 1GB).

Juga, alasan mengapa saya pikir itu akan selalu mengatakan "1GB" adalah karena saya tidak yakin apakah ada cara untuk menentukan berapa banyak memori yang digunakan oleh proses tunggal (atau jika sistem operasi tahu berapa banyak memori yang digunakan). Jika OS tidak tahu berapa banyak itu sendiri menggunakan, maka tampaknya seperti itu akan melaporkan 900MB.

Bagian lain dari kebingungan adalah bahwa, jika penggunaan memori terus berubah, dan OS memberi tahu setiap proses berapa total memori - memori yang digunakan, maka Anda harus terus-menerus memeriksa berapa banyak memori yang tersedia jika Anda mencoba mengakses lebih banyak memori. Artinya, Anda tidak bisa men-cache penggunaan memori saat program dimulai. Bisa jadi program, duduk diam selama beberapa jam, dimulai dengan 100MB memori "di komputer", tetapi kemudian setelah itu sementara memeriksa lagi untuk menemukan "oh tunggu, hanya ada 5MB tersedia". Untuk beberapa alasan yang kelihatannya seperti perilaku yang tidak diinginkan, tapi saya tidak yakin.

Setiap bantuan untuk memahami secara umum bagaimana suatu OS memberi tahu anak memproses berapa banyak memori yang tersedia di berbagai titik waktu akan sangat membantu. Terima kasih.


sumber
OS hanya akan melaporkan ukuran memori virtual untuk "memori" yang dilaporkan ke suatu proses, karena memori fisik tidak dapat diakses secara langsung.
serbuk gergaji

Jawaban:

0

OS tidak "memberi tahu" program apa pun tentang memori bebas.

Setiap program beroperasi di area memori virtualnya sendiri di mana ia memiliki akses ke (Apa yang dilihatnya) seluruh ruang alamat memori potensial yang diijinkan. Untuk proses 32-bit, apa yang dikenal sebagai "memori" adalah seluruh 4GB memori yang dapat dialamatkan, untuk 64-bit ruangnya jauh lebih besar. Proses ini dapat mengalokasikan memori dari area tersebut yang kemudian memberi tahu sistem operasi bahwa ia perlu mendukung area-area dari ruang alamat tersebut dengan memori fisik sehingga dapat dibaca dan ditulis, tetapi program ini (secara teori) memiliki memori sebanyak itu ingin.

Pada sistem dengan hanya 1GB RAM, ini berarti bahwa ketika memori fisik penuh sistem operasi kemudian mulai mendorong data ke file swap atau partisi. Hal ini dilakukan tanpa keterlibatan proses aktual yang ingatannya sedang paged. Jika proses mencoba mengakses memori paged out maka sistem operasi menghentikan proses, menarik kembali data dari disk dan melanjutkan proses.

Suatu program dapat menanyakan berapa banyak RAM fisik gratis, sehingga mereka dapat membatasi diri dalam situasi memori rendah, tetapi mereka tidak secara artifisial dibatasi oleh sistem operasi kecuali jika kehabisan RAM fisik dan ruang swap dalam hal ini program hanya akan mendapatkan kesalahan saat mencoba mengalokasikan memori.

Mokubai
sumber
0

Salah satu hal hebat tentang menjalankan pada OS modern adalah bahwa aplikasi tidak perlu tahu berapa banyak RAM dalam sistem atau berapa banyak yang tersedia. Faktanya, sebagian besar aplikasi tidak mengetahui rincian RAM, berapa banyak core yang dimiliki CPU, ukuran dan jumlah drive fisik, apakah komputer terhubung ke jaringan atau Internet, dan banyak lagi. Ini sudah seharusnya. OS dirancang untuk digunakan dengan cara ini.

OS menyediakan lingkungan standar tervirtualisasi yang independen terhadap perangkat keras. Alih-alih mengakses RAM secara langsung, aplikasi hanya mengakses ruang alamat virtual yang tidak tergantung pada ukuran RAM. Untuk suatu aplikasi, itulah memori itu. RAM hanyalah optimasi kinerja (dengan teknologi saat ini yang diperlukan) dan detail implementasi. Bagian dari kode aplikasi dan data akan berada dalam RAM, file halaman, atau dalam file asli. Ini dapat berubah sesuai dengan kebutuhan aplikasi dan ketersediaan sumber daya. Rincian ini dikelola oleh OS dan tidak dapat dilihat oleh aplikasi yang tidak dapat mengetahuinya meskipun ia menginginkannya.

Untuk aplikasi yang memerlukan informasi ini, detail perangkat keras dapat diminta dari OS tetapi hanya sedikit yang melakukannya. Sebagian besar hanya utilitas sistem yang memerlukan informasi ini. Sebagian besar aplikasi hanya memiliki sedikit kebutuhan untuk ini karena pengemudi rata-rata perlu tahu tentang waktu pengapian atau campuran bahan bakar.

Semua ini untuk kebaikan. Ini berarti pengembang aplikasi dapat mencurahkan waktu mereka untuk persyaratan aplikasi tanpa harus berurusan dengan perincian perangkat keras yang berantakan. Itulah gunanya OS. Ini berarti aplikasi yang ditulis dengan benar yang dirancang untuk Windows 95 dengan RAM 4 MB dapat berjalan pada sistem Windows 10 modern dengan banyak RAM. Dan aplikasi beroperasi sama dan tidak menyadari perbedaannya. Tidak semua aplikasi ditulis dengan baik. Tentu saja sistem modern akan berkinerja lebih baik dan memberikan lebih banyak kemampuan kepada pengguna tetapi aplikasi tidak mengetahui hal itu.

Ini berarti banyak pekerjaan untuk perancang dan pengembang OS tetapi jutaan pengguna menuai manfaat.

LMiller7
sumber
Ini semua masuk akal. Mengenai "Sebagian besar aplikasi hanya memiliki sedikit kebutuhan untuk ini karena pengemudi rata-rata perlu tahu tentang waktu pengapian atau campuran bahan bakar." Saya berpikir dalam hal cara kerja debugger, seperti debugging sistem operasi .