نحوه تعامل سخت افزار و نرم افزار

سلام, با این مقاله قصد داریم نگاهی به طرز کار سخت افزار و نرم افزار در کنار هم بیاندازیم. اگر مطلب «من می خواهم برنامه نویس شوم - قسمت دوم» را مطالعه کرده باشین در انتهای مطلب راجع به سطوح زبان های برنامه نویسی صحبت کردیم و مسیرهای مختلفی را در این رشته تعیین کردیم، ادامه سری آموزشی (من می خواهم برنامه نویس شوم) مسیر برنامه نویسان سطح بالا را روشن تر خواهد کرد و در این مقاله سعی داریم دید روشنی از برخی دروس رشته کامپیوتر و آی تی و علت مطالعه آن ها برای ورودی های جدید این رشته بدهیم. این مقاله در حقیقت نگاهی سطحی و اجمالی به چند درس از رشته علوم کامپیوتر و فناوری اطلاعات می باشد: معماری کامپیوترمدارهای منطقیسیستم عاملزبان ماشین و برنامه سازی سیستماصول ذخیره سازی دادهدر قسمت دوم «من می خواهم برنامه نویس شوم» مفهوم مفسر و کامپایلر ها توضیح داده شد. دستورات شما پس از کامپایل یا تفسیر در حقیقت به کدهایی از زبان ماشین که صفر و یک هستند تبدیل می شود و سخت افزار می تواند آن را اجرا کندچرا صفر و یک (باینری یا دودویی)؟به دلیل ساده بودن پیاده سازی مدار با دو حالت، در حقیقت «صفر و یک دو سطح ولتاژ» است. اگر کامپیوتری داشته باشیم که بخواهد با اعداد صفر تا نه کار کند این کار هزینه بالایی خواهد داشت چون به طراحی مدارهایی به ۱۰ سطح ولتاژ نیاز است. بصورت قراردادی دو سطح بالا و پایین می توانند ۰ و ۵ ولت (یا ولتاژ های دیگری) باشند. زمانیکه ولتاژ ضعیف است یعنی بین ۰ تا نیم ولت می توان «صفر» و زمانی که قوی است مانند ۵ آن را «یک» درنظر گرفت و این ولتاژ همین مقدار است. (حالت شارژ یا حالت قطع)البته اکنون به تکنولوژی محاسبات کوانتومی و کامپیوترهای کوانتومی نیز دست پیدا شده که در اختیار مراکز تحقیقاتی مانند گوگل. آمازون. آی بی ام و ... است و مبحث دیگری است و از هدف این مقاله خارج است.چگونه متن، عدد، صدا و تصویر و ویدئو به صفر و یک تبدیل می شود؟اعداد و متوندر مورد اعداد برای اینکه بتوان مفهوم و ارزش آن ها را همچنان حفظ کرد باید آن ها را به مبنای ۲ ببریم (به مبنا ها در ریاضی رجوع شود) و همه چیز از همین ایده شروع می شود با همین ایده ساده یعنی مبنای دو و استفاده از دو سطح ولتاژ برای تنها اعضای این مجموعه یعنی (صفر و یک) تحولات عظیمی شکل گرفته مثلا عدد ۱۳ در مبنای دو به این شکل است: ۱۱۰۱ همه متون از کاراکتر تشکیل می شوند و به ازای هر کاراکتر می توان یک عدد نسبت داد و در حقیقت بجای کاراکترها کد آن ها را به مبنای ۲ برده و استفاده می کنیم برای این کار ابتدا به تمامی اعداد و حروف و کلید های کیبورد یک عدد نسبت می دهند. از جمله این کدگذاری ها ASCII و Unicode هستند. مثلا در کاراکتر ست ASCII معادل علامت ! عدد 33 و معادل عدد 0 عدد 48 و معادل A عدد 65 و معادل a عدد 96 است که تمامی این ها را میتوان به مبنای دو برد. در این کاراکتر ست هر کاراکتر معادل 8 عدد باینری میشود، کد 0 معادل 00000000 و نهایتا کد 127 معادل 1111111 پس هر کاراکتر معادل 8 بیت که آن را یک بایت نام گذاری کردند. (در نرم افزاری مانند notepad ویندوز می توان بعد از تایپ متن آن را با کاراکتر ست دلخواه ذخیره کرد. اگر متن حاوی کاراکتر فارسی باشد و بخواهید آن را با کاراکتر ست ascii ذخیره کنید اخطار دریافت خواهید کرد که نمیتوان متن را با این کاراکتر ست ذخیره کرد چرا که این کد گذاری فقط شامل کاراکترهای انگلیسی است. و خواهید دید اگر متن انگلیسی را به دو صورت کاراکترست Ascii و UTF-8 ذخیره کنید حجم فایل ascii کمتر خواهد بود - علت را در ادامه خواهید دید)کاراکتر ست Unicode کمی کد گذاری متفاوتی دارد. در این کاراکتر ست باقی زبان ها مثل فارسی و عربی و چینی هم می توانند کد بگیرند و نیاز بود که تعداد کد بیشتری داده شود. در این کاراکتر ست هر کد معادل 16 بیت یا حتی ممکن است 32 بیت باشد. بنابراین همان متن در کاراکترست UTF-8 منطقا حجم بیشتری را اشغال خواهد کرد.تصاویردر ذخیره سازی تصاویر رنگ ها را کد گذاری می کنیم. تصاویر در دنیای کامپیوتر بصورت دیجیتال ذخیره و نمایش داده می شوند یعنی هر تصویر از تعدادی خانه رنگی تشکیل شده که این خانه ها را پیکسل می گوییم بنابراین وقتی می گوییم این دوربین ۱۲ مگاپیکسل است یعنی یک عکس آن شامل ۱۲۲۸۸ خانه رنگی است و همانطور که می دانید هرچه این خانه ها بیشتر باشد کیفیت بیشتری خواهید داشت. در طراحی دیجیتال برای بیان کیفیت از رزولوشن استفاده می کنند که بیان گر تعداد پیکسل در یک اینچ مربع است. مثلاً می‌گویند 300 dpi.بنابراین هرچه رزولوشن بیشتر یعنی خانه های بیشتر برای همان عکس و عکس بزرگ تر و با کیفیت تر. برای دیدن پیکسل ها کافی است تا آنجا که می توانید بر روی یک تصویر در کامپیوتر زوم کنید (مثلا در نرم افزاری مانند فوتوشاپ آنگاه خانه های رنگی تشکیل دهنده عکس را خواهید دید) در نتیجه برای تبدیل تصویر به صفر و یک اجرای تشکیل دهنده آن یعنی این خانه های رنگی را به صفر و یک تبدیل می کنیم. هر خانه یک رنگ بیشتر ندارد و طیف رنگی با در کنار هم قرار گرفتن این ها قابل مشاهده است و چون تعداد آن ها زیاد است چشم قابل به تشخیص مرز آن نیست برای تبدیل کردن رنگ ها به باینری مانند کاراکتر ها آن ها را کد گذاری می کنیم (تمام رنگ ها از ترکیب سه رنگ پایه قرمز، آبی، سبز ساخته می شود) و هر رنگ پایه را با یک عدد بین ۰ تا ۲۵۵ مشخص کنیم. یعنی کد هر پیکسل شامل سه عدد (هر کدام بین 0 تا 255) است که هر سه به مبنای دو تبدیل می شوند.ویدئوویدئو نیز از فریم تشکیل شده اند (وقتی می گوییم این ویدئو ۲۴ فریم/ثانیه است یعنی در هر ثانیه از این فیلم ۲۴ عکس استفاده شده) بسته به اندازه عکس های تشکیل دهنده و کیفیت آنها کیفیت فیلم و اندازه طول و عرض فیلم ها با هم متفاوت است مثلا در فیلم با کیفیت 720p تصاویری با عرض ۷۲۰ پیکسل در طول ۱۲۸۰ (معمولا برای کیفیت تنها عرض را بیان میکنند و معمولا نسبت عرض به طول برابر ۹ به ۱۶ است، البته میتواند هر نسبتی داشته باشد) که ضرب این دو عدد در هم تعداد خانه های رنگی یا پیکسل هر فریم فیلم را مشخص می کند و اگر فیلم ۲۴ فریم باشد، با ضرب حاصل آن با ۲۴ می توانید بفهمید در یک ثانیه از این فیلم چند پیکسل داده وجود دارد. البته برای فیلم باید صدا را نیز لحاظ کردصداصدا نیز از فرکانس و دامنه تشکیل شده (فرکانس همان لحن یا زیر و بم بودن است و دامنه کم و زیاد بودن) که باز هم این دو به عدد تبدیل می شوند برای پخش صدا در هر لحظه از آن، این دو عدد به بلندگو داده می شود. میکروفون یک پرده مرتعش دارد که فرکانس صدا را میگیرد و تعداد ارتعاشی که ایجاد می شود بلندی و کمی صدا را مشخص می کند، بلندگو نیز مشابه آن.خوب چطور میشود با باینری کار کرد چطور با صفر و یک سیستم عامل نوشته شده؟دوست دارید بدانید از کجا شروع شده و سیستم عامل به عنوان برنامه ای که مدیریت سخت افزار را بعهده دارد چطور به صفر و یک تبدیل می شود و خود با صفر و یک کار می کند. در حقیت با یک سیر تکاملی روبه رو هستیم و طبعا پیچیده اما ابتدا این طور نبوده و تک تک قطعات کامپیوتر رشد فوق العاده ای داشته اند از کیبورد و ماوس گرفته تا تک تک قطعات بکاررفته در برد اصلی و مانتیور و ... به زودی به شما میگوییم ماده سیلیکون (همان ماده ای که در مغز مداد استفاده شده) چه تحول عظیمی را ایجاد کرده. به زودی به شما میگوییم ماده سیلیکون (همان ماده ای که در مغز مداد استفاده شده) چه تحول عظیمی را ایجاد کرده . همه چیز از زبان ماشین شروع می شود و به آن بر می گردد.دستورات پیچیده از دستورات ساده تشکیل میشوند مثلا ضرب همان جمع اعداد است. قطعات سخت افزاری در خود عملیات منطقی را انجام میدهند اگر در ریاضیات جبر منطقی را خوانده باشید با عملیات های And و Or آشنایی دارید. مثلا قطعه ای که دو ولتاژ ورودی میگیرد و بگونه ای طراحی شده که ولتاژ خروجی معادل همان عملیات and می تواند باشد. حال اگر شما بتوانید بصورت سخت افزاری مداری درست کنید که یک سری عملیات پیچیده تر را جهت ارسال داده به یک مدار دیگر (مثلا این دیتا (پالسی از ولتاژ های 0 و 5) را ببر به این قسمت از مدار) و گرفتن خروجی از آن (خروجی را از این قسمت بگیر و ...) طراحی کنید با استفاده از مجموعه ای از مدارها و استفاده از جبر بولی می توانید هر مسئله ای را به مجموعه ای از دستورات پایه مثل همین and و or تبدیل کنید و به مدار که شامل همین عملیات است بدهید و از خروجی مجددا در مدار دیگری استفاده کنید. این عملیات کمی پیچیده تر بدین صورت است: انتقال، جمع، تفریق، تقسیم و ضرب، شما مجموعه ای از دستورات را با همین توابع که مدارهای آنها در CPU قرار دارد، در دست دارید و مثلا می توانید دیتایی را داخل رم که مجموعه ای از خازن ها هست ذخیره کنید و یا دوباره آن را بگیرید. به صورت بسیار ساده می‌توان گفت پردازنده‌های متفاوت، دستورالعمل‌های متفاوتی دارند که در قیمت و سرعت و ... آنها تاثیرگذار است، اما تمامی پردازنده‌ها (بدون توجه به تفاوت‌هایشان) دارای چهار مجموعه دستورالعمل زیر می‌باشند: کپی کردن بیت‌هاچهار عمل اصلی ریاضی (محاسبات ریاضی: جمع، ضرب، تفریق و تقسیم)بیت منطقی (NOT, AND, OR, XOR)پرش (شامل پرشهای مشروط) که به منظور پرش از یک آدرس حافظه اصلی (RAM) به آدرس دیگری از حافظه کاربرد دارددر اینجا زبان اسمبلی زبان سطح پایینی هست که این دستورات را با آن می نویسید و اسمبلری که بسته به پردازنده شما شرکت سازنده در اختیارتان گذاشته کد شما را یک یا دومرحله ساده تر کرده و به صفر و یک تبدیل میکند. (می توانید با کمی جست و جو اطلاعت زیادی در مورد آنها بدست آورید) اولین سیستم عامل با استفاده از زبان اسمبلی نوشته شده و سیستم عامل های کنونی از زبان اسمبلی و سی و سی پلاس پلاس. در اینجا دیگر وارد جزئیات قطعات سخت افزاری بکار رفته در کامپیوتر مانند ثبات ها و ... نمی شویم. در صورتی که به این بحث علاقه دارید باید درس معماری کامپیوتر، مدارهای منطقی و زبان ماشین رجوع کنید و از ابتدا آن ها را مطالعه کنید اما اکنون شما می دانید که با چه چیزهایی روبه رو خواهید شد و از ابتدا دیدی کلی راجع به موضوع مورد مطالعه دارید. در مورد cpu بهتر است این موارد را نیز بدانید:فرکانس CPU (ساعت CPU، یا Clock Speed) که با 4 رقم اول آن مشخص می شود، مثلا 3330، و به این معنی است که این پردازنده محاسبات را با چه سرعتی انجام می دهد. مثلا CPU با مشخصات 2.70GHz up to 4.00 GHz می تواند 2.70 تا 4 میلیارد محاسبه را در هر ثانیه انجام می دهد.تعداد هسته یا Core CPU: کامپیوتر در هر لحظه در حال انجام میلیونها محاسبه در هر ثانیه است، وقتی شما برنامه ای را اجرا می کنید (مثلا اکسل)، CPU، کسری از ثانیه را برای پردازش محاسبات مربوط به این برنامه اختصاص می دهد و باقی زمان را به انجام سایر محاسبات می پردازد. بنابراین اگر CPU یک هسته داشته باشد زمان اجرا باید بین برنامه ها تقسیم شود اما با ۸ هسته این سرعت عملا ۸ برابر شده است.با کشف سیلیکون توانستند ترانزیستورهای نانومتری بسازند و تعداد آن را به 6500 عدد در یک پردازنده و امروزه به 100 ها میلیون و در بهترین CPU های امروزی به بیش از 2 میلیارد عدد افزایش دهند.کامپیوتر را روشن می کنیدحال کامپیوتر را روشن می کنید، بصورت سخت افزاری CPU بطور خودکار در شروع کار کامپیوتر به سراغ اولین دستور BIOS (اولین نرم افزاری که در برد اصلی ذخیره شده) می رود. وظایف BIOS بدین شرح است: تست قطعات بر اساس تنظیم کاربر (در کامپیوتر ها با زدن دکمه del در ابتدای شروع کار کامپیوتر به تنظیمات BIOS می روید) کپی کردن برخی اطلاعات از جمله جداول گلایف (تصویر نمونه پایین را مشاهده کنید) و برخی توابع لازم برای کار یک سیستم عامل (توابع وقفه برای کنترل پردازش ها و نوبت دهی) جست و جوی حافظه جانبی برای یافتن سیستم عامل و در صورتی که آن را نیافت دادن پیغام لازمبه بارگذاری سیستم عامل از حافظه جانبی(Hard Disk) به حافظه اصلی (RAM) عمل بوت می گویند. پس از بوت شدن سیستم عامل قسمتی از آن بطور دائم در حافظه می ماند که هسته سیستم عامل است و به آن Kernel هم می گویند و بقیه قسمت ها در حافظه جانبی می ماند و در صورت لزوم فراخوانی می شوند. سیستم عامل مدیریت همه پردازش ها برای همه برنامه ها، اجرای برنامه ها و مدیریت حافظه جانبی و حافظه اصلی و ورودی و خروجی ها را به عهده دارد. اینکه چطور این کار را انجام می دهد هم بحث طولانی است و علاقه مندان می توانند کتاب مفاهیم و مبانی سیستم عامل را مطالعه کنند که تمامی استراتژی ها و حتی کد دستورات سیستم عامل هم در آن نوشته شده (چطور وقفه ایجاد میکند و ...) وقتی شما یک کاراکتر را روی کیبورد فشار می دهید سیستم عامل می داند چه کدی فشرده شده، سیستم عامل می داند باید نتیجه آن را به کدام برنامه ای بدهد که وضعیت آن مثلا در حال استفاده توسط کاربر است، می داند که از جدول گلایف چه نقشی را استخراج کند و آن را بررسی می کند و تغییرات لازم را به صفحه نمایش می فرستد.جدول گلایف، نقشه بیتی جهت مشخص شدن شکل کاراکترموفق باشید.