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

شروع موضوع توسط SajjadKhati ‏8 می 2018 در انجمن سخت افزار

  1. SajjadKhati

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

    ارسال‌ها:
    1,063
    تشکر شده:
    373
    امتیاز دستاورد:
    83
    سلام
    استاد علی ، در ادامه ی بحثی که اینجا میکردیم :

    گفتگو هایی در باب سی شارپ

    ببینید قبلا گفتید که پردازنده هر موقع تشخیص داد (معمولا موقعی که نخ رو متوقف کنیم یا به هر نحوی پردازنده حس کنه که نخ داره معطلش میکنه بیخودی و ...) ، یه نخ را رها میکنه ، نخ دیگه ای رو اجرا میکنه و بعد میاد ادامه ی نخ قبلی را اجرا میکنه (برداشت کلی رو گفتم)
    خوب . حالا منظورتون اینه که این سوئیچ کردن بین نخ ها ، زمان درخواست پردازنده برای خوندن و نوشتن اطلاعات از رم ، اتفاق نمیافته . مثا زمانی که پردازنده درخواست خوندن اطلاعات متغییر x را از حافظه میده ، به طبع چون سرعت رم خیلی پایینه ، پردازنده باید منتظر بمونه . در این لحظه ای که منتظر خوندن (یا نوشتن) اطلاعات در رم هست ، دیگه نمیره نخ دیگه ای (از یه پروسه ی دیگه یا از همون پروسه) را اجرا کنه . منتظر میمونه تا اطلاعات از رم برسه و ادامه ی نخ را اجرا کنه . منظورتون اینه . درسته؟
    اما زمانی سوئیچ بین نخ ها انجام میشه که غیر از زمان انتظار برای خوندن و نوشتن اطلاعات از رم باشه . مثلا وقتی خودمون نخ را متوقف کنیم . درسته؟
    حالا فرض میکنم اینها درست باشن ؛ حالا زمان منتظر موندن پردازنده برای دریافت اطلاعات متغییر x (هر میلی یا میکروثانیه که هست ، باشه) ولی ما فرض میکنیم این زمان انتظار ، فرضا 10 ثانیه هست . توی این 10 ثانیه انتظار ، در task manager اینو نشون میده که اون نخ ، در حال اشغال یک هسته از پردازنده هست؟ مثلا اگه پردازنده 4 هسته ای باشه ، توی task manager اون نخ رو نشون میده که 25 درصد از پردازنده را اشغال کرد؟
     
    نوشته شده توسط SajjadKhati در ‏8 می 2018
  2. the_king

    the_king مدیرکل انجمن

    ارسال‌ها:
    10,632
    تشکر شده:
    10,648
    امتیاز دستاورد:
    113

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


    در نظر بگیرید که توقف نخ دلایل و اشکال متفاوتی داره، و از طرف دیگه توقف دقیقا در هر لحظه که اراده کنین که اتفاق نمی افته. کد ها بصورت اتمیک اجرا میشه، مثل اتمیک بودن تراکنش بانکی. وقتی پول از حسابی به حساب دیگه منتقل میشه باید از حساب مبدا پولی کسر بشه و به حساب مقصد پولی اضافه بشه. وسط این دو تا مرحله توقف اتفاق نمی افته چون به اصطلاح این تراکنش بانکی اتمیک ئه. یعنی یا باید کامل انجام بشه یا اصلا نشه، وسط مراحل نمیتونه نیمه کاره قطع بشه. شما هم نمی توانید اجرا کد رو وسط یک انتظار نگه دارید. اون کد باید تا پایان انتظار و خاتمه کد ادامه پیدا کنه تا پشت سرش کدی اجرا بشه که فرضا نیت توقف اجرا رو داشته باشه.
    شرایطی که توصیف می کنید یک پردازنده است که 4 هسته داره، ولی نه معماری و تکنولوژی هاش مشخصه و نه روال کد های داخل اون یک نخ و نه تعداد و روال کد سایر نخ های در صف اجرا مشخصه. اینکه هسته پردازنده مشغول اجرای یک کد مرتبط با حافظه RAM باشه که فرضا 10 ثانیه طول می کشه مشکلی نیست، فرض ئه، مشکلی با 10 ثانیه اش ندارم، اما پردازنده ای که تصور کردید نمیتونه کد دیگری رو که کاری با حافظه RAM نداره اجرا کنه؟ اگه بتونه اجرا کنه که ممکنه حداقل 12.5 درصد اشغالی باشه. اگه قابلیتشو نداره حداقل 25 درصد ئه. شما نمی توانید برای محیطی با شرایط نامعین یک نتیجه مشخص تعیین کنید.
     
    نوشته شده توسط the_king در ‏8 می 2018
    SajjadKhati از این پست تشکر کرده است.
  3. SajjadKhati

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

    ارسال‌ها:
    1,063
    تشکر شده:
    373
    امتیاز دستاورد:
    83
    ممنونم از توضیحات مفصل تون استاد علی :rose:
    منظورتون از هسته های مجازی ، همون نخ فیزیکی برای هر هسته هست دیگه؟ یعنی مثلا یه پردازنده ای که 2 هسته و 4 نخ فیزیکی داره (برای هر هسته ، دو نخ فیزیکی) مثل i3 4150 و ...
    حالا اگه هسته ای ، قابلیت تقسیم شدن به هسته ی مجازی (نخ فیزیکی) را داشته باشه (یعنی ، یک هسته ، چند نخی باشه) ، چه فرقی داره؟ قبلا گفتید فرقی نداره با پردازنده ی معمولی (پردازنده هایی که به ازای هر هسته ، یک نخ دارن) جز اینکه سرعت سوئیچ کردن نخ ها (نخ های پروسه ها) در پردازنده های چند نخی ، سریع تره



    منظورتون از گذرگاه داده ای ، همون تعداد کانال های رم هست که پردازنده باهاش در تماس هه؟ مثلا اغلب مادربردها و پردازنده و رم های سوکت های معمولی امروزی ، دو کاناله (dual channel) هستن ، منظورتون اینه؟
    اگه آره ، یعنی همزمان ، پردازنده ، فقط دو دستور را میتونه بخونه یا بنویسه؟ چون کم پیش میاد که کدی یا تابعی ، نخواد از رم اطلاعاتی بخونه یا بنویسه . وهمچنین بخاطر اینکه برای سوکت های معمولی ، دو کانال بیشتر وجود ندارن . پس ، یه پردازنده ی 4 هسته ای که 4 نخِ همزمان را میتونه اجرا کنه ، چی؟ چون نمیتونه همزمان 4 مقدار را از رم بخونه یا بنویسه در یک سوکت دو کاناله (البته این سئوالات در صورتی هه که جواب پاراگراف بالا ، درست باشه)


    آها ممنون

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


    آها ممنون


    این تیکه ای که قرمز کردم ، به این معنی هه که فقط بعضی از پردازنده ها این قابلیت را دارن که کدهایی که با حافظه ی رم در ارتباط نیستن را اجرا کنه؟ و بعضی هاز پردازنده های دیگه ، این قابلیت را ندارن؟
    بعد اینکه محاسبه تون چجوری هه؟ پردازنده ، نمیدونم چه تفاوتی دارن؟ شما نسل های خیلی قبل ، منظورتونه؟ مثلا یه پردازنده ی نسل 4 ام core i از اینتل . یا نسل های بالاتر (مثلا نسل آخر یعنی 8) رو در نظر بگیرید
    بالاخره چه بتونه کدهای نامرتبط با رم را اجرا کنه یا نه ، این نخ فعلی (که 10 ثانیه منتظر میموند برای گرفتن اطلاعات از رم) ، یک هسته را درگیر میکنه دیگه . درسته؟
    بعد هم اینکه پس حالا بیایم توی شرابط واقعی . یعنی واقعا یه نخی 10 ثانیه طول بکشه تا بخواد اطلاعات مورد نظرش از رم به پردازنده برسه . همون لحظه ، یه نخ دیگه هم باشه که 1 ثانیه اجراش طول بکشه . قطعا در این حالت ، پردازنده ، سربار را میپذیره و نخ جاری (که 10 ثانیه) طول میکشه را متوقف میکنه و میره سراغ اون نخی که اجراش 1 ثانیه طول میکشه و دوباره میاد سروقت نخ فعلی . درسته؟
    غیر از اینکه این نخ را متوقف نمیکنه و سراغ نخ دیگه ای نمیره که هر دو نخ ، اجراشون یه زمان ببرن (در اینجا مثلا هر دو ، 10 ثانیه زمان ببرن) . درسته؟
    پس با این حساب ، پردازنده هیچ وقت از 50 درصد ، بیشتر برای رم یا هارد زمان صرف نمیکنه . یعنی اگه قرار باشه بیشتر از 50 درصد برای نخ ای زمان بذاره برای خوندن یا نوشتن از رم ، قطعا سربار را میپذیره و سراغ نخ دیگه ای میره . درسته؟
    پس ، اون مقاله ای که نشون داده بودم :

    چرا نمی‌توان به Task Manager ویندوز اعتماد کرد؟

    اشتباه حساب کرده بود . چون توی شکل نشون داد که وقتی در task manager نشون میده که 90 درصد از پردازنده مشغول هه ، ممکنه این طور نباشه و حدود 25 درصد مشغول باشه . که طبق روند بالا ، این طور نیست . درسته؟

    بعد اینکه ، طبق چیزی که اون مقاله گفت ، با پایش کننده‌های کارایی (PMC) مثل perf در سیستم عامل لینوکس ، میشه به مشغول بودن واقعی پردازنده پی برد؟ یعنی این برنامه ، مقداری که نخِ پردازنده ، منتظر خوندن و نوشتن اطلاعات از رم میشه را در نظر نمیگیره؟
     
    نوشته شده توسط SajjadKhati در ‏15 می 2018
  4. the_king

    the_king مدیرکل انجمن

    ارسال‌ها:
    10,632
    تشکر شده:
    10,648
    امتیاز دستاورد:
    113

    منظورتون درسته ولی اینکه بگید هسته مجازی همون نخ فیزیکیه برای هر هسته است اشتباهه، مثل اینه که بگید سیخ کباب همون کوبیده است، هسته مجازی کد یک نخی رو اجرا می کنه، خودش که نخ نیست. وقتی CPU خاموشه نخی دیگه وجود نداره اما اون هسته های مجازی همچنان سر جاشه.
    همه رو قاطی کردین با هم. سوئیچ نخ و سوئیچ پروسه و ... همون مطالب قبلی رو گفته بودم رو لطفا دوباره مطالعه کنین. پردازنده چند نخی دیگه چیه، اصطلاحات جدید اختراع می کنین. هسته مجازی با هسته فیزیکی خیلی فرق داره، هسته فیزیکی تمامی منابع عملیاتی خودشو مستقلا داره وقتی بخواد یک کدی رو اجرا کنه مستقل از اینکه نوع کد چیه میتونه انجامش بده، اما هسته مجازی مثل هم اتاقی هایی هستند که وسایل مشترکی دارند. هسته مجازی صرفا میتونه کدی رو اجرا کنه که هسته مجازی شریکش مانع اجراش نشه، فرضا هسته مجازی شریک درخواست داده از حافظه کرده، تو این فاصله که اون داده بیاد بخش اجرایی هسته بیکاره، اون یکی هسته مجازی تو این زمان فرصت داره یک کد اجرایی که کاری با حافظه نداره رو اجرا کنه، وگرنه اونقدر دستش که باز نیست مثل هسته فیزیکی هر کدی خواست همون لحظه اجرا کنه. همزمان که نمی توانند کار مشابهی رو انجام بدن.
    گذرگاه bus ئه، گذرگاه داده صرفا یک نوع از گذرگاه ئه. پردازنده هم که فقط با RAM در ارتباط نیست، در صورت تمایل در مورد گذرگاه و پل جنوبی و پل شمالی و ... مطالعه کنید.
    کد منظور متد یا Function و ... نیست، کد منظور یک عدد کد ماشین ئه یعنی یک دستور به زبان ماشین که پردازنده میفهمه و معادل یک کد زبان اسمبلی ئه. کم هم پیش نمیاد، خیلی هاشون هیچ ارتباطی با حافظه RAM ندارند.
    شما قبل از اینکه دو تا کد AX = 1 و BX = BX + 1 اجرا بشه نمیتونید تشخیص بدید که نتیجه این دو تا کد ربطی بهم ندارند و با هر ترتیبی اجرا بشوند نتیجه یکسانه؟ بعد از اینکه اجراشون کردید چطور نتیجه می گیرید که بهم ربط داشتند یا نه؟

    خیر. عرض کردم هسته پردازنده مشغول اجرای یک کد مرتبط با حافظه RAM باشه، در این شرایط که هسته فیزیکی پردازنده منتظر اجرای درخواستی از گذرگاه ئه، فقط برخی پردازنده ها میتوانند در این حالت کد مستقل دیگری رو روی اون هسته اجرا کنند. همه پردازنده ها که قابلیتی مثل Hyper-Threading ندارند.


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


    خیر. ابدا درست نیست. در مورد اتمیک بودن کد ها و شرایط توقف اجرای کد عرض کردم. توجه نکردید. پردازنده ای که مشغول اجرای یک کد ئه وسط کار چطور سوئیچ کنه؟ به نظرتون منطقیه که بگیم قراره بوده مقدار فلان خونه حافظه خوانده بشه در AX و تا الان که دو ثانیه گذشته 27 درصد مقدارش خونده شده و بقیه اش مونده؟ یکمی اش اجرا شده یا یه کمی اش مونده تو منطق کدی که پردازنده اجرا می کنه جایی نداره.

    اصلا میزان مشغول بودن واقعی پردازنده چه اهمیتی داره؟ چه کم باشه یا زیاد که از بیرون پردازنده نمی توانید برایش کاری بکنید. میتوانید تنظیمش کنید توانش تغییر کنه؟ نه. فرض کنید درصد مشغول بودن واقعی پردازنده حداکثر 20 درصد بشه، شما می توانید از اون 80 درصد باقی استفاده کنید؟ خوب معلومه که نه. این درصد واقعی چه چیزیش واقعی محسوب میشه وقتی ارتباط معنا داری با توان سیستم نداره. پردازنده چه مفید و چه غیر مفید، وقتی منتظر باشه در هر حال از دید بیرون پردازنده مشغول ئه. واقعیت چیزیه که به عنوان منبع سیستم مشهود باشه، واقعیت اینه که چه مشغول باشه و چه منتظر باشه برای سیستم عامل busy حساب میشه. اینکه داخلش چه چیزی دلیل busy بودن بوده که یا پردازنده اتلاف انرژی کم داره یا زیاد برای سیستم عامل که اهمیتی نداره. وقتی مشخصات یک خودرو رو مطالعه می کنید به این توجه میشه که با سرعت مشخص چقدر سوخت مصرف می کنه. حالا چه اهمیتی داره که چقدر از این سوخت واقعا برای حرکت صرف شده و چقدرش به اشکال مختلف اتلاف شده؟ مهم اینه که اونقدر سوخت رو بصورت مشهود مصرف میکنه.
     
    نوشته شده توسط the_king در ‏16 می 2018
    SajjadKhati از این پست تشکر کرده است.
  5. SajjadKhati

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

    ارسال‌ها:
    1,063
    تشکر شده:
    373
    امتیاز دستاورد:
    83

    سلام
    ممنونم استاد علی
    منظورم از پردازنده ی چند نخی ، همون پردازنده های hyper thread هستن .
    خوب پردازنده چجوری تشخیص میده؟
    پل جنوبی که برای پردازنده های امروزی حذف شد . پل شمالی هم باز هم اطلاعاتش رو از رم میخونه دیگه؟ درسته؟



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



    در مورد بقیه ی توضیحات هم ممنون
    :rose:
     
    نوشته شده توسط SajjadKhati در ‏16 می 2018
  6. the_king

    the_king مدیرکل انجمن

    ارسال‌ها:
    10,632
    تشکر شده:
    10,648
    امتیاز دستاورد:
    113

    مثل همون نمونه قبلی هسته مجازی همون نخ فیزیکیه شد که اشتباهه، پردازنده ها Hyper Thread نیستند، میتوانند تکنولوژی Hyper-Threading رو داشته باشند، ولی نه اینکه پردازنده Hyper Thread یا هر جور دیگری از Thread باشه. پردازنده چند هسته ای داریم، ولی پردازنده چند نخی معنی نداره. پردازنده نخ نداره که تک نخی باشه یا چند نخی.


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

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

    این جمله یعنی چی؟ از مطالعه چه مطلبی به این همچین سوالی رسیدید؟ چه برداشتی از نقش پل شمالی دارید؟

    عجب. لطفا اون بخشی از مطالبم که همچین عبارتی رو گفتم بمن نشون بدید.

    پردازنده چند نخی دیگه چیه؟ از اساس اشتباهه، یا مفهوم نخ رو متوجه نشدید یا پردازنده رو یا هر دو. پردازنده که برنامه و پروسه نیست نخ داشته باشه. نخ فیزیکی هم متعلق به سیستم عامله، وقتی کدی برای اجرا نباشه نخی وجود نداره. پردازنده که خودش نه کدی داره و نه کاری برای انجام. وقتی سوالتون اشتباه باشه و فرقی بین هسته و نخ قائل نشید جوابی بهش نمیشه داد.
    سوال میپرسید ولی توجهی به جواب ها نمی کنید، یک مطلب رو بارها هم توضیح میدم ولی همچنان یک قاعده و استدلال از خودتون اختراع می کنید و نهایتا میگید من اونطور گفتم. صحبت هسته فیزیکی یا مجازی نبوده، این مطالب که جدید نیست :
     
    نوشته شده توسط the_king در ‏17 می 2018
    SajjadKhati از این پست تشکر کرده است.
  7. SajjadKhati

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

    ارسال‌ها:
    1,063
    تشکر شده:
    373
    امتیاز دستاورد:
    83
    سلامی مجدد
    ممنون استاد علی
    میگم ، این چیزی که میگم درست نیست دیگه . درسته؟ :
    "اختصاص حافظه در سیستم عامل ویندوز به نسبت پردازنده و میزان حافظه RAM متغیر هست"
    یعنی مثلا برنامه ای در ویندوز 32 بیتی ، در سیستمی که مثلا 1 گیگ رم داره (مثلا پردازنده اش هم G2020 باشه) ، 300 مگ رم مصرف کنه و دقیقا در همون شرایط ، در ویندوز 32 بیت دیگه در سیستم دیگه ای که 256 مگ رم داره (مثلا پردازنده ی Athlon 3600+ و کلا یه پردازنده ی قدیمی) ، رم کمتری مصرف کنه (مثلا 100 مگ مصرف کنه) .
    چنین چیزی درست نیست . درسته؟
    یعنی نمیشه برنامه یه درخواستی بده که فلان میزان حافظه میخوام ولی سیستم عامل بگه چون محدودیت دارم ، پس بهت کمتر میدم و کار هم کنه . در این صورت ، سیستم عامل ، ارور مصرف حافظه ی کم رو میده و برنامه با خطا متوقف میشه دیگه . درسته؟
     
    نوشته شده توسط SajjadKhati در ‏23 جولای 2018
  8. the_king

    the_king مدیرکل انجمن

    ارسال‌ها:
    10,632
    تشکر شده:
    10,648
    امتیاز دستاورد:
    113
    ملاک تون حافظه RAM ئه و پردازنده است، در حالی که اولا حافظه پروسه صرفا RAM نیست، ترکیبی از حافظه RAM و حافظه مجازی است که سهم شون هم مدام و لحظه ای طبق شرایط سیستم تغییر میکنه. ثانیا مصرف کننده حافظه، اون پردازنده که نیست، پردازنده خودش یک منبع ئه، همانطور که RAM و دیسک یک منبع هستند. اون پروسه ها هستند که مصرف کننده اند. مصرف کننده RAM اون پروسه و نخی است که اجرا میشه، اینجا پردازنده نقشی نداره. اینکه پردازنده 32 بیتی حافظه کمتری نسبت به 64 بیتی مصرف میکنه ظاهر قضیه است، در واقع اون پروسه با کد ماشین 32 بیتی ئه که حافظه کمتری نسبت به پروسه با کد 64 بیتی مصرف می کنه، پروسه دلیلش بوده، نه پردازنده. چطور که شما وقتی روی لپ تاپ ویندوز 32 بیتی نصب می کنید یا ویندوز 64 بیتی نصب می کنید پردازنده تون یا ماژول های حافظه RAM عوض شده؟ نه. پردازنده یک قطعه سخت افزاری است که چه ویندوز 32 بیتی باشه و چه 64 بیتی باشه همونه که بود. چیزی که تغییر کرده نرم افزار ئه، پروسه های 32 بیتی و 64 بیتی هستند که تغییر در میزان مصرف منبع RAM رو باعث می شوند.

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

    در نتیجه اولا لزومی نداره که کل حافظه 300 مگابایتی یک پروسه بصورت کامل در حافظه RAM قرار بگیره، میتونه بخشی اش روی حافظه مجازی و تا لحظه مناسب روی دیسک باقی بمونه و ثانیا نیازی نیست که حافظه RAM ای که یک پروسه درخواست کرده همون لحظه بهش ارائه بشه، میتونه پروسه درخواست کننده بحالت تعلیق دربیاد تا زمانی که امکانش باشه، اینجا خطایی برای پروسه رخ نمیده. پروسه در حالت تعلیق قرار میگیره تا زمانی که اون حافظه درخواستی مهیا بشه و پروسه به اجراش ادامه بده. پروسه ای که در کما است اصلا متوجه نمیشه که چقدر در کما بوده، از دید پروسه خطایی رخ نمیده. دقیقا مربوط به این قضیه نیست اما از نظر فنی یک خطایی برای مدیریت حافظه رخ میده که اونم خطا به مفهوم بدی نیست، پروسه زمانی که سراغ آدرس مجازی حافظه میره Page مورد نظرش در حافظه RAM جستجو میشه، یک خطایی در این لحظه میتونه رخ بده که مربوط به جستجوی Page ها است، که میگه Page درخواستی در RAM نیست، اگر نیست پس حتما روی حافظه مجازی است و باید اول منتقل بشه به RAM تا بشه اون آدرس حافظه مجازی به مقصد منتهی بشه، اینجا یک عملیات انتقال صورت میگیره که بخاطرش نخ باید لحظه ای تعلیق بشه تا انتقال خاتمه پیدا کنه. از نظر فنی اینم خطا است ولی خطای بدی نیست و درضمن خطایی نیست که برای پروسه و نخ رخ بده، یک خطای داخل مدیریت حافظه است که پروسه ازش بیخبره.
     
    نوشته شده توسط the_king در ‏24 جولای 2018
    SajjadKhati از این پست تشکر کرده است.
  9. SajjadKhati

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

    ارسال‌ها:
    1,063
    تشکر شده:
    373
    امتیاز دستاورد:
    83
    آها ممنون استاد علی
    پس بسته به میزان رم ، سیستم عامل میتونه مقداری که در حال حاضر استفاده نمیشه را به حافظه ی مجازی منتقل کنه که بنابراین در حافظه های متفاوت ، میزان رم مختلفی استفاده میکنن . یا به عبارتی ، اختصاص حافظه در ویندوز ، به نسبت حافظه ی ram و حافظه ی مجازی دیسک سخت ، متغییر هست . درسته؟

    بعد اینکه اون قسمتی که به حافظه ی مجازی دیسک سخت منتقل شد ، در پروسه ی مربوطه اش در task manager که نشون نمیده؟ درسته؟ یعنی در task manager فقط بخش مربوط به ram برای اون پروسه را نشون میده . درسته؟

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

    بعد هم اینکه حالا فرض کنید یه سیستمی با 1 گیگ رم و یه سیستمی با 2 گیگ رم داریم که این برنامه را که (همون لحظه ی اول 300 مگ رم لازم داره) را توشون اجرا میکنیم . در این صورت سیستم عامل در هر دو سیستم ، کاملا اون 300 مگ را در اختیار این پروسه قرار میده دیگه ؟ درسته؟ یعنی هر چقدر از این 300 مگ لازم داشته باشه را در اختیارش قرار میده دیگه . درسته؟ چون در هر دو سیستم ، براحتی 300 مگابایت فضای خالی داره
     
    آخرین ویرایش: ‏24 جولای 2018
    نوشته شده توسط SajjadKhati در ‏24 جولای 2018
  10. the_king

    the_king مدیرکل انجمن

    ارسال‌ها:
    10,632
    تشکر شده:
    10,648
    امتیاز دستاورد:
    113

    بله.

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


    ستون های متفاوتی هست که میشه اضافه و کم شون کرد، میتونه نشون بده یا نده. بستگی داره در مورد اطلاعات چه ستونی صحبت کنید.


    الان و بعدا مفاهیم نسبیه که ما بکار میبریم، برای سیستم عامل بیمعنیه. الان و بعدا ما بر اساس یک مدت زمانی سنجیده میشه، الان و بعدا ما ممکنه کسری از ثانیه بعد باشه یا چند ساعت بعد. 300 مگابایت که در یک Page که جا نمیشه که بگیم یا همه اش یا اصلا هیچی. Page های زیادی رو شامل میشه. سیستم عامل میتونه هر لحظه اراده کرد بخشی از Page ها رو روی دیسک مجازی منتقل کنه. حتی اگه اون حافظه یک آرایه ای باشه که اینطوری بین RAM و حافظه مجازی تقسیم بشه.
    سیستم عامل که فقط در خدمت برنامه شما که نیست، پروسه های زیادی هستند که در حال اجرا اند. اصلا نمیتوانید اینجا هیچ شرایطی برای مقایسه ایجاد کنید. شما روی یک سیستم هم براتون تکرار شرایط قبلی میسر نیست، به اصطلاح تکرار پذیر نیست. هر بار سیستم روشن میشه و شروع به کار میکنه در ثانیه فلان شرایط متفاوت از دفعه قبلی است. روال کار مدیریت حافظه هم به این سادگی نیست که هر چی حافظه RAM داشت، همینطور به هر پروسه خواست فوری بده و بعد که یهو RAM ته کشید تازه یادش بیافته که قرار بود مدیریتی در کار باشه و شروع کنه به خالی کردن های پی در پی روی دیسک مجازی که سیستم عامل و پروسه ها سکته کنن و ناگهانی کند بشن. این اصلا روال منطقی و قابل استفاده ای نیست. مدیریت حافظه واقعا مدیریت ئه، تحلیل شده، روش ها مقایسه شده، همیطوری بی حساب و کتاب که RAM تخصیص نمیده.
     
    نوشته شده توسط the_king در ‏25 جولای 2018
    SajjadKhati از این پست تشکر کرده است.
  11. SajjadKhati

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

    ارسال‌ها:
    1,063
    تشکر شده:
    373
    امتیاز دستاورد:
    83
    سلام
    ممنون استاد علی
    چیزی بنام فناوری "Memory Enhancement" در پردازنده ها وجود داره؟ یا کلا فناوری ای برای مدیریت حافظه در پردازنده ها (مخصوصا پردازنده های روز) وجود داره؟
    اگه آره ، کارش مدیریت حافظه هست؟ به این معنی که پردازنده هایی که این فناوری را دارن ، توی دو سیستم ، یکی با این فناوری و یکی بدون این فناوری ، در یک نرم افزار و در یک شرایط ، چقدر در مدیریت رم و آزاد سازی حافظه ، تاثیر داره؟
    بعد اینکه کنترلر در پردازنده چیه؟ در واقع همون کنترل کننده ی حافظه هست؟ صرفا خوندن و نوشتن از حافظه را کنترل میکنه؟
     
    نوشته شده توسط SajjadKhati در ‏28 جولای 2018
  12. the_king

    the_king مدیرکل انجمن

    ارسال‌ها:
    10,632
    تشکر شده:
    10,648
    امتیاز دستاورد:
    113

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

    اینها که میگید ارتباطی با پردازنده نداره. و کلا پردازنده کاری به این مفاهیم نرم افزاری نداره.
    سوالتون همونقدر کلی ئه که باید کلی پاسخ بدم. نه. کنترلر یک مدار الکتریکی ئه که مدیریت ورود و خروج و نگهداری بخش خاصی بهش واگذار شده، قطعا کنترلر پردازنده یا Processor Controller بی معنیه چون صحبت بخش خاصی رو نمی کنه، پس باید ببینید در مورد کنترلر چه بخشی صحبت می کنید، مستقل از اینکه مدارش داخلش پردازنده قرار گرفته یا یک مدار مستقل بیرونیه. فرضا کنترلر حافظه. کنترلر مسئولیت نگهداری اون بخش رو هم بر عهده داره، فرضا حافظه با تکنولوژی های متفاوتی تولید میشه، جنس و ماهیت اون حافظه RAM سیستم تون با حافظه فلش درایو مدرن و حافظه سیستم های از رده خارج قدیمی و فلش درایو های اولیه یکجور نیست. کاملا به شیوه های متفاوتی کار می کنند، بعضی ها باید بصورت متوالی در کسری از ثانیه مجددا Refresh بشن وگرنه داده شون پاک میشه، بعضی ها به این راحتی بازنویسی نمیشن و قبل از بازنویسی باید پاک بشن و برای پاک شدن باید با روتین و مدار متفاوتی داده شون پاک بشه، بعضی هاشون مخصوصا برای استفاده در سرور برای صحت داده به شیوه ای چک میشن، اینها همگی وظایف همون کنترلر ئه، پس الزاما فقط Read و Write نیست، بماند که یک حافظه اصلا ممکنه ماهیتش Write پذیر نباشه.
     
    نوشته شده توسط the_king در ‏28 جولای 2018
    SajjadKhati از این پست تشکر کرده است.
  13. SajjadKhati

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

    ارسال‌ها:
    1,063
    تشکر شده:
    373
    امتیاز دستاورد:
    83
    سلام استاد علی .
    نمیدونم این سئوال به اینجا مربوط میشه یا نه (اگه نشد ، ببخشید)
    من page file ام را در تنظیمات ویندوز ، بصورت دستی حداکثر تا 6 گیگ تنظیم کردم ولی در نرم افزار msi after burner میزان استفاده را تا 14 گیگ هم نشون داد . چی این وسط اشتباه هست؟
     
    آخرین ویرایش: ‏25 سپتامبر 2018
    نوشته شده توسط SajjadKhati در ‏25 سپتامبر 2018
  14. the_king

    the_king مدیرکل انجمن

    ارسال‌ها:
    10,632
    تشکر شده:
    10,648
    امتیاز دستاورد:
    113
    بعدا از Set کردن میزان حافظه مجازی ویندوز رو Restart کردید؟ میتونه الگوریتم اشتباهی بکار ببره، میتونه مجموع حافظه ها باشه و ...
     
    نوشته شده توسط the_king در ‏26 سپتامبر 2018
    SajjadKhati از این پست تشکر کرده است.
  15. SajjadKhati

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

    ارسال‌ها:
    1,063
    تشکر شده:
    373
    امتیاز دستاورد:
    83

    سلام
    بله.
    در عنوان نرم افزار after burner گفت که اون آمار pagefile هست اما توضیحی نداد که مجموع حافظه هست یا نه . ولی میزان حافظه ی رم را بصورت جداگانه داره .
     
    نوشته شده توسط SajjadKhati در ‏26 سپتامبر 2018

به اشتراک بگذارید