معماری پردازنده

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
سلامی مجدد
خیلی ممنون استاد از جواب تون .

طبق توضیحات زیر ، چیزهایی که میگم ، درسته؟ :


task-manager.png


قسمتِ اولِ Commited ، معروف به commit charge ، همون حافظه ی مجازی در حال استفاده هست .
حافظه ی مجازی هم که شامل حافظه ی فیزیکی و page file بود .
قسمت دومِ Commited ، معروف به commit limit ، کل حافظه ی فیزیکی و page file هست .
درسته؟

در لینک بالا جمله ی زیر را گفته :

The system commit memory limit is the sum of physical memory and all page files combined.

مگه ما چند تا page file داریم که میگه "همه ی page file های متصل شده"؟
مگه یه دونه page file در ریشه ی درایو c (یا درایوی که سیستم عامل توش نصب شد) بصورت پیش فرض با نامِ pagefile.sys نیست؟
اگه چند تا هستن ، آدرس فایل هاشون در کجان؟


همونطور که ما یه حجم از حافظه ی فیزیکی داریم (در عکس بالا 32 گیگ) ، اما یه بخشی اش در حال استفاده هست (In Use) ، آیا page file هم همینطوره که یه حجمی از فایل داشته باشه اما یه بخشی از اون فایل در حال استفاده باشه و فقط اون بخش از page file پُر باشه؟


بعد اینکه من الان هر جور حساب کردم ، page file ای را که از اطلاعاتی که Task Manager میده را با حجم فایل pagefile.sys مقایسه میکنم ، جور در نمیاد .
مثلا در لحظه ای که کاری نمیکردم و این اطلاعات ثابت بودن ، نه اختلافِ قسمتِ اولِ Commited با In use (و همچنین به علاوه ی paged pool) ، و نه اختلاف قسمت دومِ Commited با حجم کل رم و نه اطلاعاتی که در بقیه ی نرم افزارها میدادن ، برابر با حجم فایلِ pagefile.sys ام نمیشد . و حداقل از هر لحاظ ، اختلاف 300 مگابایتی تا 500 مگابایتی و گاها بیشتر داشتن .

پس حجم page file چجوری هست؟
مایکروسافت چرا گزینه ای توی Task Manager نمیذاره که مستقیما مقدار page file را بنویسه؟
تشکر
 

the_king

مدیرکل انجمن
سلامی مجدد
خیلی ممنون استاد از جواب تون .

طبق توضیحات زیر ، چیزهایی که میگم ، درسته؟ :


task-manager.png


قسمتِ اولِ Commited ، معروف به commit charge ، همون حافظه ی مجازی در حال استفاده هست .
خیر. قبلا هم در پست های 24 و 26 و 28 توضیح دادم که اشتباه ئه. در حال استفاده یعنی چی؟ یعنی In Use، که نمیتونه معادل Commited باشه.
حافظه ی مجازی هم که شامل حافظه ی فیزیکی و page file بود .
بله.
قسمت دومِ Commited ، معروف به commit limit ، کل حافظه ی فیزیکی و page file هست .
بله.
مگه ما چند تا page file داریم که میگه "همه ی page file های متصل شده"؟
مثل اینکه بپرسید مگه ما در یک دیسک چند تا درایو داریم؟ n تا که n عددی برابر صفر یا بزرگتر است.
مگه یه دونه page file در ریشه ی درایو c (یا درایوی که سیستم عامل توش نصب شد) بصورت پیش فرض با نامِ pagefile.sys نیست؟
اگه چند تا هستن ، آدرس فایل هاشون در کجان؟
سوال تون در مورد کدوم سیستم ئه؟ در دنیا تعداد زیادی سیستم ویندوز نصب شده با تنظیمات کاملا متفاوت.
تعداد page file ها در هر سیستم مثل تعداد فایل ها در هر دیسک ئه، ممکنه در یک سیستم 0 تا باشه و در سیستم دیگری 5 تا. شما باید بروید پای هر سیستمی و چک کنید که در اون سیستم چند تا page file تنظیم شده.
همونطور که ما یه حجم از حافظه ی فیزیکی داریم (در عکس بالا 32 گیگ) ، اما یه بخشی اش در حال استفاده هست (In Use) ، آیا page file هم همینطوره که یه حجمی از فایل داشته باشه اما یه بخشی از اون فایل در حال استفاده باشه و فقط اون بخش از page file پُر باشه؟
بله.
بعد اینکه من الان هر جور حساب کردم ، page file ای را که از اطلاعاتی که Task Manager میده را با حجم فایل pagefile.sys مقایسه میکنم ، جور در نمیاد .
مثلا در لحظه ای که کاری نمیکردم و این اطلاعات ثابت بودن ، نه اختلافِ قسمتِ اولِ Commited با In use (و همچنین به علاوه ی paged pool) ، و نه اختلاف قسمت دومِ Commited با حجم کل رم و نه اطلاعاتی که در بقیه ی نرم افزارها میدادن ، برابر با حجم فایلِ pagefile.sys ام نمیشد . و حداقل از هر لحاظ ، اختلاف 300 مگابایتی تا 500 مگابایتی و گاها بیشتر داشتن .
در یک دیسک 100000 بایتی با فرمت NTFS/FAT32 یا هر فرمت دیگری چند تا فایل 1000 بایتی جا میشه؟ 100 تا؟ طبعا نه، چون هر ساختار داده ای بجز اون داده داخل فایل ها برای نگهداری مشخصات خود فایل ها و مسیر اش و موقعیت سکتور هاش هم فضا میخواد.
مایکروسافت چرا گزینه ای توی Task Manager نمیذاره که مستقیما مقدار page file را بنویسه؟
به چه دردی میخوره؟
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
خیر. قبلا هم در پست های 24 و 26 و 28 توضیح دادم که اشتباه ئه. در حال استفاده یعنی چی؟ یعنی In Use، که نمیتونه معادل Commited باشه.

سلامی مجدد .
خیلی ممنون استاد .

توی عکس بالا (در سایت مایکروسافت) برای قسمت اول (Commited Charge) نوشت

Commited Byte (Ram+Pagefile in use currently)

یعنی در حال استفاده دیگه .
منظورم نمودارِ In Use که فقط حافظه ی فیزیکیِ در حال استفاده (در قسمت Memory در Task Manager) را نشون میده ، نیست .
بلکه حافظه ی مجازیِ در حال استفاده (که شامل Ram و Pagefile میشه) هست (طبق عکس بالا) .

بله.

بله.

مثل اینکه بپرسید مگه ما در یک دیسک چند تا درایو داریم؟ n تا که n عددی برابر صفر یا بزرگتر است.

سوال تون در مورد کدوم سیستم ئه؟ در دنیا تعداد زیادی سیستم ویندوز نصب شده با تنظیمات کاملا متفاوت.
تعداد page file ها در هر سیستم مثل تعداد فایل ها در هر دیسک ئه، ممکنه در یک سیستم 0 تا باشه و در سیستم دیگری 5 تا. شما باید بروید پای هر سیستمی و چک کنید که در اون سیستم چند تا page file تنظیم شده.

آها ، منظورتون اینه که در درایوهای دیگه هم میشه page file درست کرد .
نه منظورم بصورت تنظیمات پیش فرض ویندوز بود که یه دونه page file در درایو سیستم عامل درست میکنه ، بود .


آها . پس یکی از نکات مهم ، اینجاست .
یعنی ممکنه حجم فایلِ page file مون ، هر چیزی که باشه ، صرفا به این معنی نباشه که اون مقدار از حجمِ page file در حال استفاده باشه . ممکنه خیلی کمتر از اون مقدار باشه .

بعد اینکه پس با این حساب ، حجم فایلِ page file مون فرضا اگه 5 گیگ باشه ، با این حساب (که تایید کردین که همه ی اون 5 گیگ ممکنه در حال استفاده نباشه) ، پس آیا همه ی این 5 گیگ (که حجم فایلِ page file هست) ، در هارد دیسک نوشته شده یا صرفا اینکه فایلی با این حجم در هارد رزرو شده (تا فرضا فایل های دیگه در اون درایو ، اون درایو را پُر نکنن و باعث نشن که 5 گیگ به page file مون نرسه) اما حجمی که روی اون فایلِ page file مون نوشته شده ، 5 گیگ نیست و ممکنه کمتر باشه؟

همچنین دلیلِ فایل hiberfile.sys (فایلِ مربوط به hibernate) چیه که بصورت پیش فرض ، چند گیگ داره؟ چون هایبرنت که موقعی که دکمه ی hibernate را بزنیم ، به کار میاد .
آیا دلیلِ این فایل هم همینه؟ که حجمی را رزور میکنه اما روش نمینویسه . زمانی شروع به نوشتن روش میکنه که دکمه ی hibernate را بزنیم؟

در یک دیسک 100000 بایتی با فرمت NTFS/FAT32 یا هر فرمت دیگری چند تا فایل 1000 بایتی جا میشه؟ 100 تا؟ طبعا نه، چون هر ساختار داده ای بجز اون داده داخل فایل ها برای نگهداری مشخصات خود فایل ها و مسیر اش و موقعیت سکتور هاش هم فضا میخواد.

نکته ی مهم دیگه هم پس همینه که چرا تفاوت حجم ها دارن .

به چه دردی میخوره؟

همین جوری . اطلاعات داشتن ، خوبه دیگه .
وگرنه میتونستن اون همه اطلاعات دیگه برای انواع قسمت های رم و cpu و هارد و بقیه ی چیزها که برای هر کدوم ، چندین مولفه و اطلاعاتِ دیگه میذارن را نذارن .

تشکر استاد .
 

the_king

مدیرکل انجمن
سلامی مجدد .
خیلی ممنون استاد .

توی عکس بالا (در سایت مایکروسافت) برای قسمت اول (Commited Charge) نوشت
یعنی در حال استفاده دیگه .
عبارت چیه؟ "Commited Byte (Ram+Pagefile in use currently)"
فارسی اش چیه؟ بایت های Commited (حافظه RAM به علاوه Pagefile که در حال استفاده است). درسته؟
کجای این عبارت نوشته "قسمتِ اولِ Commited ، معروف به commit charge ، همون حافظه ی مجازی در حال استفاده هست
Commited رو چی ترجمه کرده اید؟ قبلا هم که در موردش حرف زدیم و معنی اش در توضیحاتی که دادم مشخصه.
به نظر شما Commited = Virtual Memory؟ یا Commited = In Use؟ کدومش به نظرتون درسته؟
در منابع مختلف بگردید ببینید Commited رو معادل کدوم یکی شون گرفتن؟ هیچکدوم.
منظورم نمودارِ In Use که فقط حافظه ی فیزیکیِ در حال استفاده (در قسمت Memory در Task Manager) را نشون میده ، نیست .
بلکه حافظه ی مجازیِ در حال استفاده (که شامل Ram و Pagefile میشه) هست (طبق عکس بالا) .
متوجه هستم چی میگید.
بعد اینکه پس با این حساب ، حجم فایلِ page file مون فرضا اگه 5 گیگ باشه ، با این حساب (که تایید کردین که همه ی اون 5 گیگ ممکنه در حال استفاده نباشه) ، پس آیا همه ی این 5 گیگ (که حجم فایلِ page file هست) ، در هارد دیسک نوشته شده یا صرفا اینکه فایلی با این حجم در هارد رزرو شده (تا فرضا فایل های دیگه در اون درایو ، اون درایو را پُر نکنن و باعث نشن که 5 گیگ به page file مون نرسه) اما حجمی که روی اون فایلِ page file مون نوشته شده ، 5 گیگ نیست و ممکنه کمتر باشه؟
بسته به تنظیماتش هر دو حالت ممکنه. page file میتونه حجم ثابت یا حجم متغیر داشته باشه.
همچنین دلیلِ فایل hiberfile.sys (فایلِ مربوط به hibernate) چیه که بصورت پیش فرض ، چند گیگ داره؟ چون هایبرنت که موقعی که دکمه ی hibernate را بزنیم ، به کار میاد .
در موردش جستجو کنید. به تاپیک معماری پردازنده ربطی نداره.
آیا دلیلِ این فایل هم همینه؟ که حجمی را رزور میکنه اما روش نمینویسه . زمانی شروع به نوشتن روش میکنه که دکمه ی hibernate را بزنیم؟
بله.
وگرنه میتونستن اون همه اطلاعات دیگه برای انواع قسمت های رم و cpu و هارد و بقیه ی چیزها که برای هر کدوم ، چندین مولفه و اطلاعاتِ دیگه میذارن را نذارن
اونها دکوری که نیستند، برای پر کردن فرم هم نیستند. اطلاعاتی قرار میده که مهم ئه، کاربردی ئه. حجم فایل فلان روی سیستم عامل مهم نیست که در همچین جایی نمایش داده بشه.
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
بله.

همون که نیست، این دو عبارت معادل هم نیستند که بگید همونه. می توانید بگید commited از حافظه مجازی تامین میشه یا مقدارش بخشی از حافظه مجازی رو تفکیک می کنه.

خیر. توضیحات Commited رو مجددا بخونید، وقتی میگید مقدار استفاده (In use) رو نشون میده یعنی تعریف Commited رو نخوندید. نمیشه که بگید چیزی استفاده شده ولی بخشی اش استفاده نشده.

تفریق تون مشکلی نداره اما چیزی که به دست میاد باز بخشی از Commited ئه و در نتیجه ممکنه بخشی اش استفاده شده باشه و بخشی اش نشده باشه. هر چیزی که در Commited هست که الزاما استفاده نشده. Commited معادل In use نیست. براتون پارکینگ آپارتمان رو هم مثال زدم.

عبارت چیه؟ "Commited Byte (Ram+Pagefile in use currently)"
فارسی اش چیه؟ بایت های Commited (حافظه RAM به علاوه Pagefile که در حال استفاده است). درسته؟
کجای این عبارت نوشته "قسمتِ اولِ Commited ، معروف به commit charge ، همون حافظه ی مجازی در حال استفاده هست
Commited رو چی ترجمه کرده اید؟ قبلا هم که در موردش حرف زدیم و معنی اش در توضیحاتی که دادم مشخصه.
به نظر شما Commited = Virtual Memory؟ یا Commited = In Use؟ کدومش به نظرتون درسته؟
در منابع مختلف بگردید ببینید Commited رو معادل کدوم یکی شون گرفتن؟ هیچکدوم.

سلامی مجدد استاد .
خیلی ممنون از توضیحات تون .

تقریبا به چیزی که گفتید انگار دارم میرسم (که در ادامه ، جریان را توضیح میدم) .
یعنی انگار دارم به این میرسم که Commited ، بخشی از حافظه ی مجازی هست ؛ نه اینکه کلِ حافظه ی مجازی باشه (که حالا در ادامه بیشتر توضیح میدم و اسناد را ارائه میکنم) .

اول درباره ی اسنادِ اینکه میگفتم Commited ، حافظه ی مجازی هستن و تعجب میکنم اگه بخشی از حافظه ی مجازی هستن ، پس چرا در اون اسناد به این قضیه (که بخشی از حافظه ی مجازی هستن) ، اشاره نکردن بگم که طبق چیزهایی که در همون لینکی که قبلا دادم :


میگه :
Page files extend how much "committed memory" (also known as "virtual memory") is used to store modified data.

که committed memory که عنچنین به عنوان "حافظه ی مجازی" شناخته شده هست .
بعد هم میگه :
The system commit memory limit is the sum of physical memory and all page files combined.

که میگه commit limit (که در عکس ، به عنوان قسمتِ دومِ Commited در Task Manager نشون داده هست) ، مجموعه ی حافظه ی فیزیکی و همه ی page file ها هستن . (که مجموعه ی حافظه ی فیزیکی و همه ی page file ها هم همون حافظه ی مجازی میشن دیگه) .
در ادامه هم :
It represents the maximum system-committed memory (also known as the "system commit charge") that the system can support.
The system commit charge is the total committed or "promised" memory of all committed virtual memory in the system.

که میگه این commit limit (که به عنوان commit charge هم شناخته میشه) ، حداکثرِ حافظه ای که سیستم میتونه پشتیبانی کنه را ارائه میکنه . (که قبلا هم توضیح داده بود و در ادامه ی متن که متن دوم هست هم میگه که منظورش ، کل حافظه ی مجازی هست) .

اما در هیچ کجای این دو متن ، اشاره نکرد که committed memory ، بخشی از حافظه ی مجازی هست .

. ببخشید من اشتباه کرده بودم که در پست قبلی گفته بودم که قسمت اولِ Commited در Task Manager ، همون commit charge ، هست . بلکه قسمت دوم (سمت راست) ئه Commited در Task Manager ، همون commit charge ، هست .
اما متن و عکس زیر ، من را به اشتباه انداخت که فکر کردم به قسمت اولِ Commited در Task Manager ، همون commit charge میگن (باز هم دقیق نمیدونم) :

If the system commit charge reaches the system commit limit, the system and processes might not get committed memory.
This condition can cause freezing, crashing, and other malfunctions.

out-of-memory.png


task-manager-commit.png


که میگه اگه قسمت اولِ Commited (در عکس بالا در Task Manager) ، به قسمتِ دوم که حداکثرِ حافظه ی مجازی (یا بخشی از حداکثرِ حافظه ی مجازی هست ؛ دقیق نمیدونم) ، برسه ، در این صورت ، برنامه کرش میشه و ارور حافظه میده .

در لینک زیر هم Commited Charge را این طور توضیح داده :


توضیح :
commit charge ... describe the total amount of virtual memory of all processes that must be backed by either physical memory or the page file.

هیچ کدوم شون نگفتن بخشی از حافظه ی مجازی هستن .

علاوه بر این ، در عکسی که مایکروسافت در اون لینک قرار داده :

task-manager.png


قسمت دوم ئه Commited را که هم در عکس و هم در توضیحات گفته بود که کل رم (نه میزانِ استفاده شده اش در حال حاضر فقط) به علاوه ی کل page file (این هم اگه میزانِ استفاده شده داره ، نه میزانِ استفاده شده اش در حال حاضر فقط) ، همون Commit Limit هست . که همون کل حافظه ی مجازی میشه (نه حافظه ی مجازی ای که در حال حاضر در حال استفاده هست) .

قسمت اول ئه Commited را هم که در عکس به عنوان Commit Byte مشخص کرد ، همون مقداری از حافظه ی رم ای که در حال استفاده هست به علاوه ی مقداری از حافظه ی page file ای که در حال استفاده هست ، هست (اگه page file ، مقدارِ در حالِ استفاده اش ، از کلِ حافظه ای که براش در فایلِ pagefile.sys رزرو میشه ، جدا باشه که نمیدونم . این طور هست؟) .

البته commited charge را چون نمیدونم دقیقا قسمتِ اولِ Commited در Task Manager میشه یا قسمت دومش ، نام نبردم .

ولی شواهد انگار نشون میدن که بقول شما ، حافظه ی Commited ، بخشی از حافظه ی مجازی هستن ، نه همه ی حافظه ی مجازی (باز هم نمیدونم) .

یعنی قسمت اولِ Commited در Task Manager (همون Commit Byte) ، بخشی از حافظه ی مجازیِ در حال استفاده هست (نه همه ی حافظه ی مجازیِ در حال استفاده) .
و همچنین قسمت دومِ Commited در Task Manager (همون Commit Limit) ، بخشی از کلِ حافظه ی مجازی هست (نه همه ی حافظه ی مجازی) .

البته باز این قضیه هم که بخشی از حافظه ی مجازیِ در حال استفاده باشه ، هم انگار حداقل برای Commit Byte درست نیست .
چون در این صورت با کم کردنِ این مقدار (بخش اولِ Commited) از قسمت In Use در Task Manager ، بخشی از مقدارِ page file (نه صرفا همه اش) باید بدست بیاد و مهمتر اینکه مقدارِ حاصل از این تفاضل ، نباید بیشتر از مقدارِ تفاضل بین Commit Limit (بخش دومِ Commited) از کل حافظه ی رم (که بخشی از کل حافظه ی مجازی هست) ، بشه .

اما برای من الان به این صورت هست :

100.JPG

و حجم فایل page file ام که یه دونه در درایو c فقط تنظیم شده هست (البته بصورت اتوماتیک به دست ویندوز سپرده شده که احتمالا فقط یه دونه page file در ریشه ی درایو ویندوز میسازه دیگه) :

101.JPG

حجم page file که 5.72 گیگ هست .
تفاضل Commit Limit با حجم رم ام (که حجم رم ام 7.9 گیگ هست) ، برابر با 5.2 گیگ میشه .
تفاضل Commit Byte با In Use (که مقدار In Use ، برابر با 4.4 گیگ هست) ، برابر با 6.4 گیگ میشه .

فرضا اون 450 مگ که در In Use که فشرده کرد را هم از مقدارِ 6.4 گیگ کم کنیم ، باز میشه 5.95 گیگ که باز از مقدارِ اون 5.2 گیگ ، بیشتره .

اصلا آدم قاتی میکنه روالش چجوری هه .
اطلاعات Commited (حداقل Commited Byte) ، نه به حافظه ی مجازیِ در حالِ استفاده میمونه و همچنین به بخشی از حافظه ی مجازیِ در حال استفاده هم نمیمونه .
پس این ، دقیقا چیه؟!
شما میتونین دو تا عکس آخر که از سیستمم را دادم ، اطلاعات و رابطه ی مقادیرِ حجم pagefile.sys با رابطه ی مقادیرِ Commit Byte و Commit Limit (و در صورت نیاز ، بقیه ی مقادیر) را تحلیل کنید و یه جوری توضیح بدین من متوجه شم؟

بسته به تنظیماتش هر دو حالت ممکنه. page file میتونه حجم ثابت یا حجم متغیر داشته باشه.

در موردش جستجو کنید. به تاپیک معماری پردازنده ربطی نداره.

بله.

آها .
یعنی این حجمی که برای pagefile.sys نشون میده ، صرفا فایلی هست که اون مقدار براش رزرو شده . صرفا به این معنا نیست که به اندازه ی همه ی حجمِ pagefile.sys ، توش هم اطلاعات نوشته شده باشه . ممکنه کمتر از اون ، توش اطلاعات نوشته شده باشه .

یعنی فرضا در عکس بالا که حجمِ pagefile.sys ام را در اون لحظه دادم که 5.72 گیگ بود ، این ، حجمی هست که سیستم عامل براش رزرو کرده . به این معنا نیست که در این لحظه ، حتما 5.72 گیگ ، اطلاعات در این فایل نوشته شده باشه (یا در واقع ، میزان استفاده شده در اون لحظه ، 5.72 گیگ باشه) . ممکنه کمتر از 5.72 گیگ ، در این فایل ، اطلاعات ذخیره و نوشته شده باشه .

درست میگم؟
تشکر استاد . و ببخشید که طولانی شد :rose:
 

the_king

مدیرکل انجمن
سلامی مجدد استاد .
خیلی ممنون از توضیحات تون .

تقریبا به چیزی که گفتید انگار دارم میرسم (که در ادامه ، جریان را توضیح میدم) .
یعنی انگار دارم به این میرسم که Commited ، بخشی از حافظه ی مجازی هست ؛ نه اینکه کلِ حافظه ی مجازی باشه (که حالا در ادامه بیشتر توضیح میدم و اسناد را ارائه میکنم) .
باز که شروع کردید به فرضیه بافی. مستندات چی رو ارائه می کنید؟ Commited تعریف خودش رو داره و مشخصه چیه، دیگه میخواهید به چی برسید؟
میخواهید برای Commited تعریف جدید ارائه کنید؟ یا میخواهید موضوع تازه ای کشف کنید که قبلا جایی مطرح نشده؟
هیچ مساله مبهمی نه در مورد حافظه مجازی و نه تعریف Commited نیست که بخواهید در موردش تحقیق کنید یا به کسی توضیح بدهید.
اطلاعات Commited (حداقل Commited Byte) ، نه به حافظه ی مجازیِ در حالِ استفاده میمونه و همچنین به بخشی از حافظه ی مجازیِ در حال استفاده هم نمیمونه .
پس این ، دقیقا چیه؟!
حافظه تخصیص داده شده به پروسه ها، مثل اون قضیه پارکینگ که توضیح دادم. چند بار باید بگم تخصیص داده شده؟ حالا تا ابد هی بگید استفاده شده، اصلا هم کاری به این نداشته باشید که Commited در مورد استفاده شدن حرف نمی زنه، هزار بار هم بگم تخصیص داده شده باز اهمیت نمی دهید.
شما میتونین دو تا عکس آخر که از سیستمم را دادم ، اطلاعات و رابطه ی مقادیرِ حجم pagefile.sys با رابطه ی مقادیرِ Commit Byte و Commit Limit (و در صورت نیاز ، بقیه ی مقادیر) را تحلیل کنید و یه جوری توضیح بدین من متوجه شم؟
هیچ رابطه ای بین حجم pagefile.sys و این چیزها که میگید نیست. pagefile.sys یک فایل سیستمی است روی سیستم شما که ساختار خودش رو داره و اطلاعات page file رو نگه میداره. همانطور که یک جدول در پایگاه داده ممکنه 0 تا رکورد داشته باشه ولی حجم فایل پایگاه داده 80 مگابایت باشه، این فایل هم ممکنه حجمی داشته باشه که تناسبی با حجم فعلی page file نداشته باشه.
یعنی این حجمی که برای pagefile.sys نشون میده ، صرفا فایلی هست که اون مقدار براش رزرو شده . صرفا به این معنا نیست که به اندازه ی همه ی حجمِ pagefile.sys ، توش هم اطلاعات نوشته شده باشه . ممکنه کمتر از اون ، توش اطلاعات نوشته شده باشه .

یعنی فرضا در عکس بالا که حجمِ pagefile.sys ام را در اون لحظه دادم که 5.72 گیگ بود ، این ، حجمی هست که سیستم عامل براش رزرو کرده . به این معنا نیست که در این لحظه ، حتما 5.72 گیگ ، اطلاعات در این فایل نوشته شده باشه (یا در واقع ، میزان استفاده شده در اون لحظه ، 5.72 گیگ باشه) . ممکنه کمتر از 5.72 گیگ ، در این فایل ، اطلاعات ذخیره و نوشته شده باشه .

درست میگم؟
حجم pagefile.sys ربطی به این محاسباتی که انجام می دهید نداره. وقتی ربطی نداره یعنی نباید دنبال رابطه بین حجم شون بگردید.
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
باز که شروع کردید به فرضیه بافی. مستندات چی رو ارائه می کنید؟ Commited تعریف خودش رو داره و مشخصه چیه، دیگه میخواهید به چی برسید؟
میخواهید برای Commited تعریف جدید ارائه کنید؟ یا میخواهید موضوع تازه ای کشف کنید که قبلا جایی مطرح نشده؟
هیچ مساله مبهمی نه در مورد حافظه مجازی و نه تعریف Commited نیست که بخواهید در موردش تحقیق کنید یا به کسی توضیح بدهید.

سلامی مجدد استاد .
خیلی ممنون .

فرضیه بافی نکردم . اطلاعاتی بود که متن هاشو اینجا هم گذاشتم و درکی که از اون مطالب پیدا کردم را نوشتم .
حالا ممکنه درک و فهم ام از اون مطالب ، درست هم نباشه که واسه ی همین اینجا اینها را براتون مطرح کردم .
که به اون نوشته ها که گذاشتم و درکم را ازشون گفتم، توجهی نکردین .

حافظه تخصیص داده شده به پروسه ها، مثل اون قضیه پارکینگ که توضیح دادم. چند بار باید بگم تخصیص داده شده؟ حالا تا ابد هی بگید استفاده شده، اصلا هم کاری به این نداشته باشید که Commited در مورد استفاده شدن حرف نمی زنه، هزار بار هم بگم تخصیص داده شده باز اهمیت نمی دهید.

خوب ، حافظه ی تخصیص داده شده به پروسه ها ، همون حافظه ی استفاده شده نمیشه مگه؟
الان فرضا من شی ای از یه کلاس بسازم که 100 کیلوبایت بهش حافظه اختصاص یافته ، پس اون شی از برنامه ام (و پروسه ی برنامه ام) ، در حال استفاده از اون 100 کیلوبایت حافظه ای که بهش اختصاص داده شده هم هست دیگه . مگه این طور نیست؟

منظورتون از تخصیص داده شده ، حافظه ی رزرو شده هست مگه؟ (که ممکنه به اون میزان ، استفاده هم نشن) ؟

هیچ رابطه ای بین حجم pagefile.sys و این چیزها که میگید نیست. pagefile.sys یک فایل سیستمی است روی سیستم شما که ساختار خودش رو داره و اطلاعات page file رو نگه میداره. همانطور که یک جدول در پایگاه داده ممکنه 0 تا رکورد داشته باشه ولی حجم فایل پایگاه داده 80 مگابایت باشه، این فایل هم ممکنه حجمی داشته باشه که تناسبی با حجم فعلی page file نداشته باشه.

حجم pagefile.sys ربطی به این محاسباتی که انجام می دهید نداره. وقتی ربطی نداره یعنی نباید دنبال رابطه بین حجم شون بگردید.

مگه بدون رابطه میشه؟
آخه اون منابع ها همه تاکید میکنن که Commited ، حافظه ی مجازی هست (حالا حافظه ی مجازیِ تخصیص داده شده به پروسه ها یا رزرو شده یا در حال استفاده یا کل حافظه یا هر مورد دیگه ای را نمیدونم) .

اگه این طور باشه ، پس باید رابطه ای وجود داشته باشه دیگه .
الان اون تعاریف هایی که برای Commit Byte و Commit Limit از اون منابع گفتم ، درست هست؟
چجوری هه آخر جریان شون ، متوجه نشدم

تشکر
 

the_king

مدیرکل انجمن
خوب ، حافظه ی تخصیص داده شده به پروسه ها ، همون حافظه ی استفاده شده نمیشه مگه؟
خیر. معلومه که نمیشه. وقتی یک چیزی تعریف داره با چه منطقی میایید تعریف رو تغییر می دهید؟ شما معنی Commited رو بهتر از اون کسانی که اون تعریف رو برایش نوشته اند میفهمید که میایید تخصیص داده شده رو با استفاده شده جایگزین می کنید؟ در یک پارکینگ 2 واحد به شما تخصیص داده شده، شما می توانید در این پارکینگ 0 الی 2 خودرو پارک کنید، یعنی 0 الی 2 واحد استفاده کنید، می توانید اصلا استفاده نکنید.
وقتی شما میگید استفاده شده همون تخصیص داده شده است یعنی به نظرتون 0 = 2 و 1 = 2 که نمیتونه درست باشه.
الان فرضا من شی ای از یه کلاس بسازم که 100 کیلوبایت بهش حافظه اختصاص یافته ، پس اون شی از برنامه ام (و پروسه ی برنامه ام) ، در حال استفاده از اون 100 کیلوبایت حافظه ای که بهش اختصاص داده شده هم هست دیگه . مگه این طور نیست؟
بارها در مورد GC صحبت کرده ایم، خودتون خیلی خوب میدونید که وقتی اون شیء آزاد شد حافظه اش فورا به سیستم عامل بر نمیگرده، یعنی چی؟ یعنی میزان حافظه مورد استفاده پروسه میتونه کمتر از حافظه تخصیص یافته به پروسه باشه. وقتی دو مقدار با هم برابر نیستند، چطور می توانند یک مفهوم باشند؟ اون 100 کیلوبایت حافظه رو کد خودتون به شیء اختصاص داده، نه سیستم عامل. سیستم عامل که شیء شما رو نمیشناسه که بیاد برایش حافظه اختصاص بده. پروسه برنامه شما از سیستم عامل 100 کیلوبایت حافظه درخواست کرده و سیستم عامل به پروسه تون فرضا 128 کیلوبایت حافظه تخصیص داده، حالا 100 کیلوبایتش رو پروسه بابت هر چه خواست استفاده بکنه یا نکنه کل اش تخصیص یافته است، ربطی به استفاده شدنش نداره.
اگر پروسه تون به اندازه کافی حافظه تخصیص یافته داشته باشه اصلا برای اون شیء از سیستم عامل حافظه اضافی درخواست نخواهد کرد.
منظورتون از تخصیص داده شده ، حافظه ی رزرو شده هست مگه؟ (که ممکنه به اون میزان ، استفاده هم نشن) ؟
تخصیص یافته یعنی تخصیص یافته (Allocated)، نه رزرو شده (Reserved) و نه استفاده شده (Used) و نه هر چیز دیگری که میخواهید بجایش قرار بدهید. به خدا من فارسی بلد هستم، وقتی میگم تخصیص یافته بخاطر این نیست که نتوانم کلمه مناسب فارسی رو پیدا کنم، منظورم از تخصیص یافته دقیقا تخصیص یافته است، هیچ منظور دیگری ندارم.
نمیدونم چرا اصرار دارید یک چیزی دیگری جایش قرار بدهید. رزرو شده یعنی چیزی که بدون استفاده حفظ میشه تا شاید در آینده مورد استفاده قرار بگیره، اما وقتی استفاده شد دیگه رزرو نیست. رزرو نمیتونه چیزی باشه که الان استفاده شده. اگر دو واحد پارکینگ رزرو داشتید و دو ماشین پارک کنید دیگه هیچ واحد رزرو ای ندارید. اما تخصیص یافته کاری به استفاده شدن و نشدن نداره، تخصیص یافته میتونه شامل چیزی باشه که الان در حال استفاده هست یا نیست، شامل چیزی باشه که رزرو شده یا نشده، کاری به این نداره که در چه وضعیتی است.
اگه این طور باشه ، پس باید رابطه ای وجود داشته باشه دیگه .
اصراری ندارم که قبول کنید.
الان اون تعاریف هایی که برای Commit Byte و Commit Limit از اون منابع گفتم ، درست هست؟
چجوری هه آخر جریان شون ، متوجه نشدم
خیر. گفتم که اشتباه ئه. شما کلا تعریف Commited رو نادیده می گیرید و استفاده شدن یک چیزی که معلوم نیست چیه توصیف می کنید.
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
حافظه تخصیص داده شده به پروسه ها، مثل اون قضیه پارکینگ که توضیح دادم. چند بار باید بگم تخصیص داده شده؟ حالا تا ابد هی بگید استفاده شده، اصلا هم کاری به این نداشته باشید که Commited در مورد استفاده شدن حرف نمی زنه، هزار بار هم بگم تخصیص داده شده باز اهمیت نمی دهید.

خیلی ممنون استاد . همچنین از پست قبلی تون .
عصبانی نشید دیگه . داریم بحث علمی میکنیم . این که عصبانیت نداره .

الان شما میگید که Commit Byte (یعنی قسمتِ اول یا همون سمت چپِ Commited در Task Manager) ، همون حافظه ی مجازی ای هست که به همه ی پروسه ها اختصاص داده شده (چه پروسه های سیستم عامل و پروسه ی بقیه ی برنامه ها)؟
یا اینکه بخشی از حافظه ی مجازی ای هست که به کل پروسه ها اختصاص داده شده؟


بعد ، توی توضیحاتِ ستونِ Commit (KB) در قسمت Memory ئه Resource Monitor نوشته :
"مقدار حافظه ی مجازیِ رزرو شده (که به قول شما ، برابر با استفاده شده نیست) توسط سیستم عامل برای پروسه ها" .

که به این معنی نیست که همه ی این مقدارِ را داره استفاده میکنه . بلکه بخشی از این حافظه ی مجازی را داره استفاده میکنه که اطلاعاتی در این باره ارائه نکرد .
یعنی برخلافِ In Use که فقط مقدارِ قابل استفاده (نه مقدارِ اختصاص داده شده) اون هم فقط در حافظه ی فیزیکی را میگه.

حالا ، یعنی حافظه ای در رم وجود داره که به پروسه ها اختصاص داده شده و رزرو شده (اما استفاده نمیشه) ، اما در Task Manager نشون داده نمیشه؟
یعنی وقتی آمار در In Use ئه Task Manager بگه که 4 گیگ در حال In Use در رم هست ، به این معنی هست که حافظه ی بیشتری در رم برای پروسه ها در نظر گرفته شد و اختصاص داده شد اما فعلا همین 4 گیگ در حال استفاده شدن در رم هست؟

مجموعِ مقادیرِ این ستون ، همون برابر با مقدار Commit Byte در قسمت Task Manager میشه؟
درست میگم؟


بعد ، Commit Limit (یعنی قسمتِ دوم یا همون سمت راستِ Commited در Task Manager) پس چیه؟
آیا همون کل حافظه ی مجازی رزرو شده برای تمام پروسه ها به علاوه ی مقدار فضای در دسترسِ رم هست؟
تشکر استاد .
 

the_king

مدیرکل انجمن
الان شما میگید که Commit Byte (یعنی قسمتِ اول یا همون سمت چپِ Commited در Task Manager) ، همون حافظه ی مجازی ای هست که به همه ی پروسه ها اختصاص داده شده (چه پروسه های سیستم عامل و پروسه ی بقیه ی برنامه ها)؟
بله.
یا اینکه بخشی از حافظه ی مجازی ای هست که به کل پروسه ها اختصاص داده شده؟
نمیشه که چیزی به پروسه اختصاص داده باشه ولی Commited نباشه. همه اون حافظه ای که به پروسه اختصاص داده شده Commited ئه. حافظه مجازی دیگری نداریم که بخواد به پروسه اختصاص داده بشه ولی جزو Commited نباشه.
که به این معنی نیست که همه ی این مقدارِ را داره استفاده میکنه . بلکه بخشی از این حافظه ی مجازی را داره استفاده میکنه که اطلاعاتی در این باره ارائه نکرد .
چه اطلاعاتی ارائه کنه؟ سیستم عامل چه میدونه اون حافظه تخصیص یافته استفاده میشه یا نمیشه، سیستم عامل هیچ چیزی در این مورد نمیدونه.
یعنی برخلافِ In Use که فقط مقدارِ قابل استفاده (نه مقدارِ اختصاص داده شده) اون هم فقط در حافظه ی فیزیکی را میگه.
همه مقدار تخصیص یافته قابل استفاده است، مگه میشه به شما دو واحد پارکینگ اختصاص داده بشه ولی نتوانید از دو تایش استفاده کنید؟
حالا ، یعنی حافظه ای در رم وجود داره که به پروسه ها اختصاص داده شده و رزرو شده (اما استفاده نمیشه) ، اما در Task Manager نشون داده نمیشه؟
نه.
یعنی وقتی آمار در In Use ئه Task Manager بگه که 4 گیگ در حال In Use در رم هست ، به این معنی هست که حافظه ی بیشتری در رم برای پروسه ها در نظر گرفته شد و اختصاص داده شد اما فعلا همین 4 گیگ در حال استفاده شدن در رم هست؟
نه. اونم تخصیص یافته است، نه استفاده شده. فقط خود پروسه میدونه چقدر از این حافظه استفاده شده. اما از دید سیستم مدیریت حافظه این بخش از حافظه RAM در حال استفاده محسوب میشه، چون امکان تخصیص اش به پروسه دیگری نیست. سیستم عامل نمیفهمه حافظه ای که تخصیص میده واقعا استفاده میشه یا نه، فقط تخصیص اش میده و پس میگیره. اتفاقی که داخل پروسه برای حافظه می افته مربوط به خود پروسه است.
مجموعِ مقادیرِ این ستون ، همون برابر با مقدار Commit Byte در قسمت Task Manager میشه؟
درست میگم؟
بله.
بعد ، Commit Limit (یعنی قسمتِ دوم یا همون سمت راستِ Commited در Task Manager) پس چیه؟
ظرفیتی است که در این لحظه برای حداکثر اندازه حافظه مجازی هست، یعنی اگر پروسه ها حافظه بیشتری درخواست کنند، نهایتا Commited میتونه به این حجم برسه. این ظرفیت بر اساس حجم قابل استفاده از RAM و حجم page file در این لحظه بدست میاد. اگر حجم page file ثابت نشده نباشه، در صورت نیاز به حافظه بیشتر میتونه حجم page file افزایش پیدا کنه تا Commit Limit هم بزرگتر بشه.
آیا همون کل حافظه ی مجازی رزرو شده برای تمام پروسه ها به علاوه ی مقدار فضای در دسترسِ رم هست؟
حافظه مجازی خودش شامل فضای در دسترس RAM ئه، برای همین به علاوه معنی نمیده. کل حافظه مجازی ای است که میتونه در اختیار پروسه ها قرار بگیره، چه در page file باشه و چه در RAM، چه الان در حال استفاده باشه و چه نباشه.
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
ظرفیتی است که در این لحظه برای حداکثر اندازه حافظه مجازی هست، یعنی اگر پروسه ها حافظه بیشتری درخواست کنند، نهایتا Commited میتونه به این حجم برسه. این ظرفیت بر اساس حجم قابل استفاده از RAM و حجم page file در این لحظه بدست میاد. اگر حجم page file ثابت نشده نباشه، در صورت نیاز به حافظه بیشتر میتونه حجم page file افزایش پیدا کنه تا Commit Limit هم بزرگتر بشه.

چه اطلاعاتی ارائه کنه؟ سیستم عامل چه میدونه اون حافظه تخصیص یافته استفاده میشه یا نمیشه، سیستم عامل هیچ چیزی در این مورد نمیدونه.

نه. اونم تخصیص یافته است، نه استفاده شده. فقط خود پروسه میدونه چقدر از این حافظه استفاده شده. اما از دید سیستم مدیریت حافظه این بخش از حافظه RAM در حال استفاده محسوب میشه، چون امکان تخصیص اش به پروسه دیگری نیست. سیستم عامل نمیفهمه حافظه ای که تخصیص میده واقعا استفاده میشه یا نه، فقط تخصیص اش میده و پس میگیره. اتفاقی که داخل پروسه برای حافظه می افته مربوط به خود پروسه است.

بله.


سلامی مجدد
خیلی ممنون استاد .
آها ، پس هر دوی In Use و Commit Byte (در Task Manager) ، حافظه ای هستن که سیستم عامل به همه ی پروسه ها اختصاص میده .

یعنی ، حافظه ی استفاده شده نیستن . چون سیستم عامل ، از حافظه ی استفاده شده در هر پروسه خبر نداره و اینکه چه پروسه ای ، چقدر از حافظه ای که سیستم عامل بهش اختصاص میده را استفاده میکنه ، به خودِ اون پروسه ربط داره .

منظورتون از حجم قابل استفاده ، همون Available در Task Manager که میزان حافظه ی آزادِ رم را اعلام میکنه ، هست؟


حافظه مجازی خودش شامل فضای در دسترس RAM ئه، برای همین به علاوه معنی نمیده. کل حافظه مجازی ای است که میتونه در اختیار پروسه ها قرار بگیره، چه در page file باشه و چه در RAM، چه الان در حال استفاده باشه و چه نباشه.

منظورتون حافظه ی مجازی برای Commit Limit هست دیگه؟ که میگین شاملِ فضای Available ئه رم هم میشه دیگه؟
چون Commit Byte که حافظه ی مجازیِ اختصاص داده شده (به پروسه ها) هست و طبعا نباید شامل فضای Available ئه رم (همون فضای در دسترسِ رم) باشه .
درسته؟


بله.

نمیشه که چیزی به پروسه اختصاص داده باشه ولی Commited نباشه. همه اون حافظه ای که به پروسه اختصاص داده شده Commited ئه. حافظه مجازی دیگری نداریم که بخواد به پروسه اختصاص داده بشه ولی جزو Commited نباشه.


همه مقدار تخصیص یافته قابل استفاده است، مگه میشه به شما دو واحد پارکینگ اختصاص داده بشه ولی نتوانید از دو تایش استفاده کنید؟

نه.


خوب ، الان استاد اگه یه مرور کنیم ، باز دوباره برمیگردیم به حرف اول من (احتمالا) .
لطفا ناراحت نشین و بذارین من یه مرور در زیر کنم تا قشنگ درک کنم و ببینین مروری که میکنم ، درسته؟ :

- الان شما گفتین که حافظه های In Use و Commit Byte ، حافظه هایی هستن که سیستم عامل اختصاص میده (جدای از بحث حافظه ی فیزیکی یا مجازی شون) . یعنی حافظه ی در حال استفاده توسط پروسه ها نیستن . تا اینجا درسته؟

- حافظه ی In Use ، حافظه ی فیزیکی (رم) ای هست که در حال حاضر سیستم عامل به همه ی پروسه ها اختصاص داد .

- حافظه ی Commit Byte هم حافظه ی مجازی ای (حافظه ی رم + page file (ها) ) هست که در حال حاضر سیستم عامل به همه ی پروسه ها اختصاص داد .
تا اینجا را درست گفتم؟

اگه اینها درست باشن ، خوب حافظه ی page file (ها) ای که در حال حاضر سیستم عامل به همه ی پروسه ها اختصاص داد ، با تفریفِ Commit Byte از In Use (در Task Manager) باید بدست بیاد دیگه .
و حاصل این تفریق ، نباید از حجم فایلِ page file (ها) بیشتر بشه .
درسته؟

اما چرا حاصل این تفریق ، در دو عکسِ آخری که در پست 45 فرستادم (در سیستم ام) ، از مقدار و حجم فایل page file ام بیشتر شد؟
 

the_king

مدیرکل انجمن
منظورتون از حجم قابل استفاده ، همون Available در Task Manager که میزان حافظه ی آزادِ رم را اعلام میکنه ، هست؟
نه. به آزاد بودنش مربوط نیست، بخشی از حافظه RAM ممکنه همون اول کار برای استفاده سخت افزار ها (مثلا کارت گرافیکی) و هسته سیستم عامل تخصیص داده بشه و صرفا چیزی که از حافظه RAM میمونه قابل استفاده برای حافظه مجازی ئه.
منظورتون حافظه ی مجازی برای Commit Limit هست دیگه؟ که میگین شاملِ فضای Available ئه رم هم میشه دیگه؟
بله.
چون Commit Byte که حافظه ی مجازیِ اختصاص داده شده (به پروسه ها) هست و طبعا نباید شامل فضای Available ئه رم (همون فضای در دسترسِ رم) باشه .
درسته؟
بله. منطقیه.
- الان شما گفتین که حافظه های In Use و Commit Byte ، حافظه هایی هستن که سیستم عامل اختصاص میده (جدای از بحث حافظه ی فیزیکی یا مجازی شون) . یعنی حافظه ی در حال استفاده توسط پروسه ها نیستن . تا اینجا درسته؟
بله.
- حافظه ی In Use ، حافظه ی فیزیکی (رم) ای هست که در حال حاضر سیستم عامل به همه ی پروسه ها اختصاص داد .
بله.
- حافظه ی Commit Byte هم حافظه ی مجازی ای (حافظه ی رم + page file (ها) ) هست که در حال حاضر سیستم عامل به همه ی پروسه ها اختصاص داد .
تا اینجا را درست گفتم؟
بله.
اگه اینها درست باشن ، خوب حافظه ی page file (ها) ای که در حال حاضر سیستم عامل به همه ی پروسه ها اختصاص داد ، با تفریفِ Commit Byte از In Use (در Task Manager) باید بدست بیاد دیگه .
خیر. چون اولا In Use شامل حافظه های Modified و Standby نمیشه، یعنی In Use به علاوه حافظه خالی RAM کل حافظه قابل دسترس RAM نیست.
ثانیا بخشی از حافظه مورد استفاده توسط پروسه میتونه اشتراکی با سایر پروسه ها باشه.
و حاصل این تفریق ، نباید از حجم فایلِ page file (ها) بیشتر بشه .
درسته؟
خیر. چون همونطور که میدونید و قبلا گفتم حجم فایل page file رابطه ای با این محاسبات که می کنید نداره.
اما چرا حاصل این تفریق ، در دو عکسِ آخری که در پست 45 فرستادم (در سیستم ام) ، از مقدار و حجم فایل page file ام بیشتر شد؟
چون محاسبه ای کردید که قبلا هم گفتم نتیجه اش ربطی به حجم فایل page file نداره، وقتی ربط نداشته باشه دیگه بزرگتر و کوچکتر بودنش فاقد مفهوم میشه.
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
سلام
خیلی ممنون استاد .

استاد ، اینجا درباره ی حافظه های ECC نوشته :

What does ECC memory prevent?
While a single-bit error could be harmless, or have a comparatively mild effect (like a wrongly coloured pixel in an image), it could equally result in a completely garbled file, or even a system crash. In applications that process large volumes of sensitive or high-value data, even one single-bit error could be disastrous. A 'one' that should be a 'zero' could result in a number being stored with an incorrect decimal place – something that you might not notice until it's too late.

Ultimately, a bit error could lead to loss of data, interrupted services, or inaccurate information being stored and displayed. ECC memory prevents these single-bit errors by detecting and correcting them, and ensuring the data is properly preserved.​

یعنی حافظه های کامپیوترهای شخصی که اغلب Non-ECC هست ، احتمال اشتباه در یک بیت را داره؟
اگه داره ، خوب به همون اندازه (که در بالا میگه برای سیستم هایی که با داده های بزرگ کار میکنن ، فاجعه بار ممکنه باشه) ، برای اون برنامه ای که در کامپیوتر شخصی میخواد داده ای که ذخیره کرد را بخونه ، فاجعه بار میتونه باشه که .

فرض کنید در یک بیت ، یه برنامه ، در یک متغییرش ، مقدار true را ذخیره کرد اما موقع خوندن ، مقدار false را اشتباها در حافظه ذخیره ، و برگردونده شه . بسته به حساسیت اون برنامه ، ممکنه یه کار دیگه انجام بده که نباید بده .
یا فرضا یک بیت در یک عدد تغییر کنه ، کلا عددش را عوض میکنه .
یا حتی به قول طرف ، ممکنه باعث کرش ویندوز یا سیستم بشه و ... .

همه ی اینها به گونه ای رخ میده که نه ما متوجه میتونیم بشیم و نه سیستم عامل و نرم افزارها متوجه میتونن بشن (چون مقداری که اشتباها در حافظه برگردونده میشه را که سیستم عامل و برنامه ها نمیتونن متوجه بشن) .

درست میگم؟
حالا این احتمال اشتباه چقدر میتونه باشه؟
آیا این احتمال اشتباه ، به عواملی هم بستگی داره؟ اگه آره ، چی ها هستن؟
تشکر
 

the_king

مدیرکل انجمن
سلام
خیلی ممنون استاد .

استاد ، اینجا درباره ی حافظه های ECC نوشته :


یعنی حافظه های کامپیوترهای شخصی که اغلب Non-ECC هست ، احتمال اشتباه در یک بیت را داره؟
بله، بدیهی است که هر سخت افزاری میتونه خراب بشه یا دچار اختلال بشه.
اگه داره ، خوب به همون اندازه (که در بالا میگه برای سیستم هایی که با داده های بزرگ کار میکنن ، فاجعه بار ممکنه باشه) ، برای اون برنامه ای که در کامپیوتر شخصی میخواد داده ای که ذخیره کرد را بخونه ، فاجعه بار میتونه باشه که .

فرض کنید در یک بیت ، یه برنامه ، در یک متغییرش ، مقدار true را ذخیره کرد اما موقع خوندن ، مقدار false را اشتباها در حافظه ذخیره ، و برگردونده شه . بسته به حساسیت اون برنامه ، ممکنه یه کار دیگه انجام بده که نباید بده .
یا فرضا یک بیت در یک عدد تغییر کنه ، کلا عددش را عوض میکنه .
یا حتی به قول طرف ، ممکنه باعث کرش ویندوز یا سیستم بشه و ... .

همه ی اینها به گونه ای رخ میده که نه ما متوجه میتونیم بشیم و نه سیستم عامل و نرم افزارها متوجه میتونن بشن (چون مقداری که اشتباها در حافظه برگردونده میشه را که سیستم عامل و برنامه ها نمیتونن متوجه بشن) .

درست میگم؟
بله.
حالا این احتمال اشتباه چقدر میتونه باشه؟
در سخت افزار سالم و در محیط مناسب خیلی کم، اونقدر که لازم نیست کاربران عادی حافظه ECC خریداری کنند.
آیا این احتمال اشتباه ، به عواملی هم بستگی داره؟ اگه آره ، چی ها هستن؟
کیفیت سخت افزار، شرایط اتصالات، عمر قطعات، پایداری جریان ورودی و شرایط محیطی (مثلا دما، رطوبت و ...)
 

جدیدترین ارسال ها

بالا