گفتیم که هر کس برای آن که بتواند از آنچه در ذهن به عنوان یک نرمافزار دارد طراحی خوبی داشته باشد، بهتر است که درک صحیح و نسبتا کاملی از کارکرد رایانه و منطق آن داشته باشد و با اجزای سیستم و منابع مورد نیاز و نیز منابعی که در اختیار است آشنا باشد.
پردازنده
پردازنده که در واقع مهمترین بخش و اصلیترین منبع سختافزاری سیستم است، به واحد پردازش مرکزی یاCPU معروف است. درونCPU دو بخش عمده وجود دارد که به واحد محاسبه و منطق و واحد کنترل معروف است.
همانطور که از نام این واحدها مشخص است، تمامی کارهای محاسباتی در واحد محاسبه و منطق انجام میگیرد و واحد کنترل، بخشی است که به واحد محاسبه و منطق نظارت دارد و امور آن را کنترل میکند. در کنار این 2 واحد، حافظههای کوچک و بسیار سریعی به نام ثبات (register) قرار دارند که کار نگهداری موقت دادهها را به عهده دارند.
هر پردازنده تعداد مشخص و انواع معینی ثبات دارد که وظیفه هریک از آنها مشخص است. اندازه ثباتها نیز به نوعCPU بستگی دارد. به عنوان مثال، پردازندههای قدیمی،8086, 8088,80286 پردازندههایی بودند که هم اندازه ثباتها و هم اندازه گذرگاههای درونی آنها 16 بیت بود. پردازندههای 80386 و 80486 و پس از آن پردازندههای پنتیوم، ساختار 32بیتی دارند. پردازندههای 64بیتی نیز که چند سالی است طراحی شدهاند گویای اندازه ثباتها و گذرگاههای خود هستند. در مورد ثباتها کمی جلوتر، بیشتر صحبت خواهیم کرد.
در کنار ثباتها حافظههای دیگری هستند که به پرچم(Flag) معروف هستند. هرFlag یک بیت است که میتواند مقدار صفر یا یک را بپذیرد.
البته پرچمها هم به صورت یک ثبات درونCPU قرار دارند، اما مانند ثباتها از آنها استفاده نمیشود. از ثباتها معمولا به صورت واحدهای حافظه 8، 16و 32 بیتی استفاده میشود، اما پرچمها به صورت بیت به بیت مورد استفاده قرار میگیرند.
پرچمها
در صورتی که از زبان اسمبلی استفاده کنید، در ساخت برنامهها و نوشتن رابطهها، گاهی لازم میشود که حالتی بررسی شود که در صورت رخ دادن آن یک کار بخصوص و در غیر اینصورت کار دیگر انجام شود. صفر یا یک بودن یک بیت میتواند گویای آن باشد که آن حالت یا وضعیت رخ داده است یا خیر.
به عنوان مثال فرض کنید میخواهیم محتوای دو ثبات را با هم مقایسه کنیم. بعد از آنکه عمل مقایسه انجام شد برابر بودن محتوای آن دو ثبات از بررسی یک بیت به نام Zero Flag انجام میشود. به این معنی که اگر آن بیت 1 باشد به آن معناست که محتوای دو ثبات با هم برابر بودهاند و اگر صفر باشد به معنای نابرابر بودن دو ثبات خواهد بود.
پرچمهای دیگری نیز وجود دارند که هر کدام به منظور خاصی به کار گرفته میشوند و معنای بخصوصی نیز دارند.
گاهی نیز بررسی دو یا چند پرچم به طور همزمان میتواند ما را به یک نتیجه خاص برسانند. اغلب برای برنامهنویسان این سوال مطرح میشود که چرا این بیتها بیت پرچم نامیده شدهاند. شاید دانستن علت نامگذاری این بیتها به پرچم، شخص را به درک بهتری از کاربرد آنها برساند. هنگامی که یک قله توسط شخص یا یک گروه کوهنورد فتح میشود پرچمی در قله قرار داده میشود.
با قرار دادن آن پرچم، اگر اشخاص دیگری به آنجا راه بیابند متوجه میشوند که این قله قبلا توسط گروه دیگری فتح شده است و اگر پرچمی وجود نداشت میتوانند نتیجه بگیرند که خود اولین کسانی هستند که قله را فتح میکنند. با مفهومی مشابه، پرچم را میتوان برای رخ دادن یا ندادن یک وضعیت در رایانه به کار برد.
وظایف پردازنده
به طور کلی میتوان وظایف پردازنده را در 3 عمل خلاصه کرد:
1 - واکشی
2 - رمزگشایی
3 - اجرا
واکشی عمل خواندن یک دستورالعمل از برنامه و قرار دادن آن در صف برنامه است. پس از اینکه این کار انجام شد عمل رمزگشایی صورت میگیرد. مفهوم رمزگشایی در اینجا با عمل رمزگشایی در امنیت و ارتباطات متفاوت است.
رمزگشایی در امنیت معادل کلمهdecrypt است، اما در اینجا معادل کلمهdecode است که به عمل ترجمه آدرس و واکشی عملوندهای آن از حافظه است. پس از اینکه عمل رمزگشایی نیز انجام شد نوبت به اجرای دستورالعمل میرسد. به طور کلی اجرا در اینجا معنای انجام محاسبات مورد نیاز ذخیره در ثباتها و حافظه اصلی و تغییر وضعیت پرچمها است.
حافظه
بدون شک هم برای ذخیرهسازی دائمی دادهها و هم برای نگهداری موقت آنها به حافظه نیاز داریم. اما در ذخیرهسازی دادهها 2 مساله اهمیت دارد. یکی حجم دادهای است که میخواهیم ذخیره کنیم و دیگری زمان نیاز مجدد و رجوع به داده ذخیره شده است.
دیسک سخت پرظرفیتترین، ارزانترین و درعینحال کندترین رسانه ذخیره داده است.
حافظه اصلی یا RAM از دیسک سخت سریعتر و بهخاطر گرانتر بودن از آن، ظرفیت کمتری دارد.
ثباتها نیز حافظههایی هستند که فوقالعاده سریع و گرانقیمت هستند و در نتیجه ظرفیت آنها محدود و تعداد آنها برای هر پردازنده مشخص است.
یک برنامهنویس اسمبلی باید بداند که چه زمان باید داده روی دیسک سخت یا حافظه اصلی نوشته شود و چه زمان برای نگهداری داده از ثباتها استفاده کند.
به عنوان مثال برای محاسبات سریع و نگهداری نتایج میانی محاسبات بهتر است از ثباتها، برای نگهداری نتایج و ثبت دادههای بزرگتر از حافظه اصلی و برای ذخیرهسازی دائمی اطلاعات از دیسک سخت استفاده شود. البته برای این امور محدودیتی وجود ندارد، اما استفاده نادرست و نابجا از هر کدام از این حافظهها میتواند کارایی و سرعت برنامه را به شدت تحت تاثیر قرار دهد.
به عنوان مثال، اگر برای نگهداری نتایج میانی محاسبات از دیسک سخت استفاده شود، خواندن و نوشتن روی دیسک سخت هزاران برابر بیشتر از آن محاسبات به طول خواهد انجامید.
ثباتها
ثباتهای داخل پردازنده به چند نوع تقسیمبندی میشوند. یک سری از آنها به ثباتهای عمومی معروف هستند که از آنها برای ذخیرهسازی موقت دادهها در هر نوع پردازش و محاسباتی استفاده میشود و در به کارگیری آنها محدودیت خاصی وجود ندارد. این ثباتها در پردازندههای 16بیتیAX ،BX،CX،DX نام دارند. ثباتهایی نیز وجود دارند که به ثباتهای کنترلی معروفند. ثبات پرچم و ثباتی به نام IP از این دسته هستند. ثبات IP یاInstruction pointer حاوی آدرس محلی است که برای تعیین آدرس دستورالعمل بعدی به کار میرود. ثباتهای دیگری نیز به نام سگمنت (segment) و اندیس (index) وجود دارند که توضیح کاربردهای آنها بحث و زمان بیشتری میطلبد و ما قصد نداریم در اینجا به تمام جزئیات بپردازیم.
پارسا ستودهنیا
در تپش این هفته، ماجرای فریب و تعرض در پوشش عرفانهای دروغین و رمالی را بررسی کردیم