PDA

نسخه کامل مشاهده نسخه کامل : درخواست منبع برای مطالعه مبانی اساسی کامپوتر؟



vb.civil
21-03-2018, 22:35
سلام دوستان

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

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

به عنوان مثال مواردی که الان دنبالش هستم موارد زیر هست که نمیدونم اینها در کدام سرفصل های دانشگاهی رشته نرم افزار هست و در دوره لیسانس تدریس میشه یا فوق لیسانس یا اساسا کجاها تدریس میشه این موارد

وقتی یه متغییر مثلا از نوع Integer تعریف میکنم و مقداری رو در اون میزارم این مقدار چه جوری و به چه شکل و در کجای حافظه ی RAM نوشته میشه ؟

تبدیل اعداد به مبنای 2 و مبنای 16 در کامپوتر برای چیست و به چه معناست ؟

به طور کلی دنبال نام درسی از رشته مهندسی نرم افزار هستم که راجع به این مسائل توضیح داده باشه

ممنون./

am_merman01
23-03-2018, 00:40
با عرض سلام و تبریک سال نو
دوست عزیز من هم مثل شما تجربی یاد گرفتم و چیز زیادی بلد نیستم اما چند نکته که خوندم رو بهتون میگم شاید براتون مفید باشه
اول اینکه حافظه ram مخفف کلمه حافظه با دسترسی تصادفی هستش بنابراین اطلاعات به صورت کاملا تصادفی بر روی اون میشینن ولی جایی که قرار گرفتن یک آدرس داره که اون آدرس توی حافظه کش cpu (معمولا کش L1 ) که در واقع خودش( cpu ) دستور داده تا اطلاعات اونجا برن به صورت موقت تا زمان از بین رفتن اطلاعات ذخیره میشه. بنابراین دونستن مکان و نحوه ذخیره اطلاعات بر روی رم چندان کاربردی نیست و چیزی نیست که هر روز بخوای ازش استفاده کنی مگر برای موارد خیلی خاص.
فقط کافیه بدونی که رم مثل یک زنجیره بلند از خونه هاس (بایت ها) که هر خونه به ۸ اتاق (بیت) تقسیم شده و اطلاعات برای ذخیره شدن حداقل باید یک خونه (بایت) رو اشغال کنن یا به بیان دیگه اطلاعات نمیتونن یک خونه رو ناقص اشغال کنن مثلا نمیشه داده ای حجمش ۱.۵ بایت باشه یا یک بایته و یا دو بایت و یا بیشتر (فکر نکنم چندان خوب توضیح داده باشم ولی خلاصه چندین صفحه مقاله انگلیسی بود که چند سال پیش خوندم شما سعی کن خودت تصورش کنی :n02:)
در مورد تبدیل مبنای ۲ به ۱۶ هم یک دلیل ساده وجود داره. همونطور که بالا گفتم (البته نگفتم :n09:) کوچکترین واحد در کامپیوتر بیت هستش که میتونه صفر و یا یک باشه (روشن و یا خاموش) و از کنار هم قرار گرفتن ۸ بیت یک بایت بوجود میاد که کوچترین واحد ذخیره سازیه و در اصطلاح بهش یک کارکتر هم گفته میشه. حالا اگه کمی باینری( سیستم عددی ۲ تایی) بلد باشی متوجه میشی که بزرگترین عدد ممکنه که با فقط ۴ بیت میشه ساخت عدد ۱۱۱۱ هستش که تبدیلش به سیستم دسیمال یا ۱۰ تایی میشه عدد ۱۵ و تبدیلش به سیستم هگزادسیمال یا ۱۶ تایی میشه F به این شکل یک بایت که از ۸ بیت تشکیل شده رو میشه فقط با دو رقم نمایش داد که اینجوری خوانایی بایت ها کمی راحت تر میشه و احتمال بروز خطا در اثر خواندن حجم زیاد داده کمتر میشه.(حتی خودم هم نفهمیدم چی گفتم :n09: )
در کل این دست اطلاعات که دنبالش هستید کمیش مربوط به ساختمان داده میشه و کمیش مربوط به طراحی سخت افزار ولی در کل باز هم تکرار میکنم این اطلاعات چیزی نیست که یک برنامه نویس لازم داشته باشه هر روز ازش استفاده کنه ، همین قدر که بدونیم مثلا داده نوع int16 دو بایته و تا موقعی که ما یک متغیر از این نوع استفاده میکنیم دو بایت از رم اشغال میشه معمولا کافیه.
امیدوارم تونسته باشم کمک کوچکی کرده باشم
و صد البته امیدوارم اساتید گرامی بتونن این بحث رو کامل تر برای شما و بنده توضیح بدن

vb.civil
23-03-2018, 12:17
مرسی دوست عزیز

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

_H2_
24-03-2018, 21:39
سلام
ضمن تایید صحیت های دوستمان am_merman01، میتوانم اضافه کنم...

در عمل برای اجرای هر برنامه ای یک بخش از RAM کدهای دستورات برنامه بارگذاری میشود
و بطور معمول، دو بخش از RAM به ذخیره متغییرها و داده تخصیص داده میشود.
یک بخش که با نام حافظه STACK شناخته میشود و مختص هرریسمان/Thread است و متغییرهای struct ای هر تابع در آن ذخیره میشود.
یک بخش دیگر با نام حافظه HEAP شناخته میشود و داده های class برنامه در آن ذخیره میشود.

داده ها در STACK بطور کامل پشت سرهم ذخیره میشوند و در شروع هر تابع STACK پرتر و در پایان هر تابع خالی تر میشود.
اگر شما توابعی را پشت سر هم به تعداد زیاد فراخوانی کنید و هیچ کدام تمام نشود و مجدد تابع بعدی را اجرا کنید، خطای مشهور Stack-Overflow را دریافت خواهید کرد که به پر شدن STACK اشاره دارد.

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

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

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

ولی این را هم عرض کنم که واژه "تصادفی" در RAM بیشتر به کلمه "دلخواه" دلالت دارد.
قدیم برخی حافظه ها مانند نوارهای مغناطیسی Tape رایج تر بودند الان هم برای پشتیبان گیری انبوه اطلاعات وبرای طولانی مدت هنوز استفاده میشوند.
ساختار این حافظه ها "ترتیبی" بوده ، زیاد وارد بحث نشوم ، یعنی نمیشود یک دفعه شما بگویید من بایت 1000000 ام Tape را میخواهم... ... ...
ولی در RAM شما میتوانید در هرلحظه و "تصادفی/دلخواه" به هر نقطه ای دسترسی پیدا کنید. یعنی یک لحظه میتوانید بایت 100 ام را بخوانید و در لحظه بعد میتوانید بایت 1000000 ام را تغییر دهید و...


وقتی یه متغییر مثلا از نوع Integer تعریف میکنم و مقداری رو در اون میزارم این مقدار چه جوری و به چه شکل و در کجای حافظه ی RAM نوشته میشه ؟
بطور عادی اگر این متغییر را درون یک تابع/متد تعریف کنید.
این متغییر در شروع تابع (در دات نت 4 بایت) از حافظه STACK بصورت معکوس میگیرد.

عدد 305419896 برابر 0x12345678 در مبنای 16 است.
یعنی اگر عدد 0x12345678 درون این int باشد، بایت های 0x78 و بعد 0x56 و بعد 0x34 و بعد 0x12 درون STACK خواهند نشست.


تبدیل اعداد به مبنای 2 و مبنای 16 در کامپوتر برای چیست و به چه معناست ؟
چون ذات رایانه 1 و 0 است.
اعداد هم در سلول های RAM و هارد و سی.دی و... واقعا بصورت رشته ای از یک ها و صفرها ذخیره میشود.
پس با دیدن باینری(مبنای 2) اعداد میتوان درک بهتری از برخی دستورات داشت.
ارزش مبنای 16 هم از این بابت است که بدلیل آنکه 16 توان صحیح از 2 است ، تبدیل یا نمایش مبنای 2 و 16 به یکدیگر بسیار ساده است و حتی ذهنی هم میتوان اعداد مبنای 2 و 16 را به هم تبدیل کرد...
الان نمیخواهم اطاله کلام کنم، ولی بدانید تبدیل فوق ساده ای دارد، پس یک بایت را بجای 8 رقم باینری ، میتوان در دو رقم هگزادسیمال نمایش داد.
هر دو رقم مبنای 16 معادل یک بایت را نمایش میدهد.

در همین مثال قبل اگر شما عدد 305419896 را در 4 بایت ذخیره کنید به خروجی زیر خواهید رسید:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
یعنی عدد بزرگ 305419896 در غالب چهار بایت کوچک 120 و 86 و 52 و 18 در حافظه ذخیره میشود!
خیلی معنی خاصی ندارد؟ درست است؟

ولی اگر به این اعداد باچشم هگزادسیمالی نگاه کنیم ، خواهیم دید معنی خیلی منطقی دارد

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
با دید مبنای 16 کاملا مشخص است که عدد بزرگ 0x12345678 در چهار بایت شسته-رفته در RAM شکسته شده است.

همچنین برای اعمال فلاگی و ماسک و And و Or و Not و شیفت بیتی و... و... با تبدیل مبنای 16 میتوان بهتر عملی که در رایانه انجام میشود را درک کرد.
با تبدیل مبنای 16 برای خودمان، در واقع با چشم رایانه به این اعداد نگاه میکنیم.


به طور کلی دنبال نام درسی از رشته مهندسی نرم افزار هستم که راجع به این مسائل توضیح داده باشه
دوستمان am_merman01 هم اشاره ای کردند.
نزدیک ترین مبحث دانشگاهی واحد "ساختمان داده ها" است که در مقاطع مختلف شاخه نرم افزار دوباره و دوباره تدریس میشود.
که البته باید عرض کنم خیلی هم عمیق وارد نمیشوند ولی اگر خودتان کتابهایی با این عنوان را تهیه و مطالعه کنید، شاید به جواب هایتان برسید.

موفق باشید.

vb.civil
28-03-2018, 14:36
_H2_ ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]) مرسی دوست عزیز از توضیحات خوبتون

برای کتاب "ساختمان داده ها" نام کتاب داخلی که معمولا تدریس میشه رو هم میشه به من بگید من همونو تهیه کنم ؟

am_merman01
29-03-2018, 01:49
باز هم سلام خدمت دوست عزیز
نام کتاب همین هست که استاد گرمی H2 عزیز بهش اشاره کرد و نام درس هم تو دانشگاه همینه ولی کتاب های زیادی توسط افراد متفاوت نوشته شده که بعضا دارای کلیات نزدیک به هم هستند(بعضی از اساتید تو دانشگاه دوست دارن کتابی رو که مثلا خودشون نوشتن رو تدریس کنن تا یکم کلاس بزارن برای دیگران ). شما با یک سرچ ساده میتونی چند تاش رو از اینترنت دانلود کنی.
امیدوارم تونسته باشم کمک کنم.