از زمان رایانههای اولیه که در سال ۱۹۴۱ ساخته شده بودند تا کنون فناوریهای دیجیتالی رشد نمودهاست، معماری فون نوِیمن یک رایانه را به چهار بخش اصلی توصیف میکند: [[واحد محاسبه و منطق]] (Arithmetic and Logic Unit یا ALU)، [[واحد کنترل]] یا حافظه، و ابزارهای ورودی و خروجی ( که جمعا I/O نامیده میشود). این بخشها توسط اتصالات داخلی سیمی به نام [[گذرگاه]] (bus) با یکدیگر در پیوند هستند.
=== حافظه ===
[[پرونده:Seagate_Hard_Disk.jpg|thumb|200px|left|تصویری از یک هارددیسک]]
در این [[سامانه]]، [[حافظه]] بصورت متوالی شماره گذاری شده در خانهها است، هرکدام محتوی بخش کوچکی از دادهها میباشند. دادهها ممکن است [[دستورالعمل]]هایی باشند که به رایانه میگویند که چه کاری را انجام دهد باشد. خانه ممکن است حاوی اطلاعات مورد نیاز یک [[دستورالعمل]] باشد.
اندازه هر خانه، وتعداد خانهها، در رایانهٔ مختلف متفاوت است، همچنین فناوریهای بکاررفته برای اجرای حافظه نیز از رایانهای به رایانه دیگر در تغییر است(از بازپخشکنندههای الکترومکانیکی تا تیوپها و فنرهای پر شده از جیوه و یا ماتریسهای ثابت مغناطیسی و در آخر [[ترانزیستور]]های واقعی و [[مدار مجتمع]]ها با میلیونها فيوز نيمه هادی يا MOSFET هايي با عملکردی شبيه ظرفيت خازنی روی یک [[تراشه]] تنها).
=== پردازش ===
[[پرونده:C65cpu.jpg|200px|thumb|left|تصویری از یک CPU یا واحد پردازشگر مرکزی]]
[[واحد محاسبه و منطق]] یا ALU دستگاهی است که [[عملیات]] پایه مانند چهار عمل اصلی حساب (جمع و تفریق و ضرب و تقسیم)، عملیات [[منطقی]] ([[و (منطق)|و]]،[[یا (منطق)|یا]]،[[نقیض (منطق)|نقیض]])، عملیات [[قیاس]]ی (برای مثال مقایسه دو [[بایت]] برای شرط برابری) و دستورات انتصابی برای مقدار دادن به یک متغیر را انجام میدهد. این واحد جائیست که «کار واقعی» در آن صورت میپذیرد.
البته CPUها به دو دسته کلی RISC و CISC تقسیم بندی میشوند.
نوع اول پردازشگرهای مبتنی بر اعمال ساده هستند و نوع دوم پردازشگرهای مبتنی بر اعمال پیچیده میباشند. پردازشگرهای مبتنی بر اعمال پیچیده در واحد محاسبه و منطق خود دارای اعمال و دستوراتی بسیار فراتر از چهار عمل اصلی یا منطقی میباشند. تنوع دستورات این دسته از پردازندهها تا حدی است که توضیحات آنها خود میتواند یک کتاب با قطر متوسط ایجاد کند.
پردازندههای مبتنی بر اعمال ساده اعمال بسیار کمی را پوشش میدهند و در حقیقت برای برنامهنویسی برای این پردازندهها بار نسبتاً سنگینی بر دوش برنامهنویس است. این پردازندهها تنها حاوی ۴ عمل اصلی و اعمال منطقی ریاضی و مقایسهای به علاوه چند دستور بیاهمیت دیگر میباشند.هرچند ذکر این نکته ضروری است که دستورات پیچیده نیز از ترکیب تعدادی دستور ساده تشکیل شدهاند و برای پیادهسازی این دستورات در معماریهای مختلف از پیادهسازی سختافزاری(معماری CISC) و پیادهسازی نرمافزاری(معماری RISC) استفاده میشود.
(قابل ذکر است پردازندههای اینتل از نوع پردازنده مبتنی بر اعمال پیچیده میباشند.)
[[واحد کنترل]] همچنین این مطلب را که کدامین بایت از [[حافظه]] حاوی [[دستورالعمل]] فعلی اجرا شوندهاست را تعقیب میکند، سپس به [[واحد محاسبه و منطق]] اعلام میکند که کدام عمل اجرا و از حافظه دریافت شود و نتایج به بخش اختصاص داده شده از حافظه ارسال گردد. بعد از یک بار عمل، واحد کنترل به [[دستورالعمل]] بعدی ارجاع میکند(که معمولاً در خانه حافظه بعدی قرار دارد، مگر اینکه [[دستورالعمل جهش]] دستورالعمل بعدی باشد که به رایانه اعلام میکند دستورالعمل بعدی در خانه دیگر قرار گرفتهاست).
=== ورودی/خروجی ===
[[پرونده:MonitorLCD_17in.jpg|thumb|200px|left|تصویری از یک رایانه، صفحه نمایشگر(Monitor) نقش خروجی و صفحه کلید(keyboard) نقش ورودی را دارد.]]
بخش [[ورودی/خروجی]] (I/O) این امکان را به رایانه میدهد تا اطلاعات را از جهان بیرون تهیه و نتایج آنها را به همان جا برگرداند. محدوده فوق العاده وسیعی از دستگاههای ورودی/خروجی وجود دارد، از خانواده آشنای [[صفحهکلید]]ها، [[نمایشگر]]ها، [[نَرمدیسک]] گرفته تا دستگاههای کمی غریب مانند [[رایابین]]ها (webcams). (از سایر ورودی/خروجیها میتوان [[موشواره]] mouse، قلم نوری، چاپگرها (printer)، اسکنرها، انواع لوحهای فشرده(CD, DVD) را نام برد ).
چیزی که تمامی دستگاههای عمومی در آن اشتراک دارند این است که آنها رمزکننده اطلاعات از نوعی به نوع دیگر که بتواند مورد استفاده سیستمهای رایانه [[دیجیتال]]ی قرار گیرد، هستند. از سوی دیگر، دستگاههای خروجی آن اطلاعات به رمز شده را [[رمزگشایی]] میکنند تا کاربران آنها را دریافت نمایند. از این رو یک سیستم رایانه [[دیجیتال]]ی یک نمونه از یک [[سامانه دادهپردازی]] میباشد.
=== دستورالعملها ===
هر رایانه تنها دارای یک مجموعه کم تعداد از [[دستورالعمل]]های ساده و تعریف شده میباشد. از انواع پرکاربردشان میتوان به دستورالعمل «'محتوای خانه ۱۲۳ را در خانه ۴۵۶ کپی کن!'»، «'محتوای خانه ۶۶۶ را با محتوای خانه ۰۴۲ جمع کن، نتایج را در خانه ۰۱۳ کن!'»، «'اگر محتوای خانه ۹۹۹ برابر با صفر است، به دستورالعمل واقع در خانه ۳۴۵ رجوع کن!'».
دستورالعملها در داخل رایانه بصورت اعداد مشخص شدهاند - مثلاً [[کد دستور العمل]] (copy instruction) برابر ۰۰۱ میتواند باشد. مجموعه معین دستورالعملهای تعریف شده که توسط یک رایانه ویژه پشتیبانی میشود را [[زبان ماشین]] مینامند. در واقعیت، اشخاص معمولاً به [[زبان ماشین]] دستورالعمل نمینویسند بلکه بیشتر به نوعی از انواع سطح بالای [[زبانهای برنامهنویسی]]، [[برنامهنویسی]] میکنند تا سپس توسط [[برنامه]] ویژهای ([[تفسیرگر]]ها (interpreters) یا [[همگردان]]ها (compilers) به دستورالعمل ویژه ماشین تبدیل گردد. برخی [[زبانهای برنامهنویسی]] از نوع بسیار شبیه و نزدیک به زبان ماشین که [[اسمبلر]] (یک زبان سطح پایین) نامیده میشود، استفاده میکنند؛ همچنین زبانهای سطح بالای دیگری نیز مانند [[پرولوگ]] نیز از یک زبان انتزاعی و چکیده که با زبان ماشین تفاوت دارد بجای دستورالعملهای ویژه ماشین استفاده میکنند.
=== معماریها ===
در رایانههای معاصر [[واحد محاسبه و منطق]] را به همراه واحد کنترل در یک مدار مجتمع که [[واحد پردازشی مرکزی]] (CPU) نامیده میشود، جمع نمودهاند. عموما، حافظه رایانه روی یک مدار مجتمع کوچک نزدیک CPU قرار گرفته. اکثریت قاطع بخشهای رایانه تشکیل شدهاند از سامانههای فرعی (به عنوان نمونه، [[منبع تغذیه]]) و یا دستگاههای [[I/O|ورودی/خروجی]].
برخی رایانههای بزرگتر چندین CPU و واحد کنترل دارند که بصورت همزمان با یکدیگر درحال کارند. اینگونه رایانهها بیشتر برای کاربردهای پژوهشی و محاسبات علمی بکار میروند.
کارایی رایانهها بنا به تئوری کاملاً درست است. رایانه دادهها و دستورالعملها را از حافظهاش [[واکشی]] (fetch) میکند. دستورالعملها اجرا میشوند، نتایج ذخیره میشوند، دستورالعمل بعدی [[واکشی]] میشود. این رویه تا زمانی که رایانه خاموش شود ادامه پیدا میکند.
[[واحد پردازنده مرکزی]] در رایانههای شخصی امروزی مانند پردازندههای شرکت ای-ام-دی و شرکت اینتل از معماری موسوم به [[Pipeline]] استفاده میشود و در زمانی که پردازنده در حال ذخیره نتیجه یک دستور است مرحله اجرای دستور قبلی و مرحله واکشی دستور قبل از آن را آغاز میکند. همچنین این رایانهها از سطوح مختلف [[حافظه نهانگاهی]] استفاده میکنند که در زمان دسترسی به حافظه اصلی صرفهجویی کنند.
=== برنامهها ===
[[برنامه رایانهای]] فهرستهای بزرگی از دستورالعملها (احتمالاً به همراه جدولهائی از داده) برای اجرا روی رایانه هستند. خیلی از رایانهها حاوی میلیونها دستورالعمل هستند، و بسیاری از این دستورات به تکرار اجرا میشوند. یک [[رایانه شخصی]] نوین نوعی (درسال [[۲۰۰۳ (میلادی)|۲۰۰۳]]) میتواند در ثانیه میان ۲ تا ۳ میلیارد دستورالعمل را پیاده نماید. رایانهها این مقدار محاسبه را صرف انجام دستورالعملهای پیچیده نمیکنند. بیشتر میلیونها دستورالعمل ساده را که توسط اشخاص باهوشی «[[برنامه نویسی|برنامه نویسان]]» در کنار یکدیگر چیده شدهاند را اجرا میکنند. برنامهنویسان خوب مجموعههایی از دستورالعملها را توسعه میدهند تا یکسری از وظایف عمومی را انجام دهند(برای نمونه، رسم یک نقطه روی صفحه) و سپس آن مجموعه دستورالعملها را برای دیگر برنامهنویسان در دسترس قرار میدهند. (اگر مایلید «'یک برنامهنویس خوب'» باشید به [[GNU|این]] مطلب مراجعه نمایید.)
رایانههای امروزه، قادرند چندین برنامه را در آن واحد اجرا نمایند. از این قابلیت به عنوان [[چندکارگی]] (multitasking) نام برده میشود. در واقع، CPU یک رشته دستورالعملها را از یک برنامه اجرا میکند، سپس پس از یک مقطع ویژه زمانی دستورالعملهایی از یک برنامه دیگر را اجرا میکند. این فاصله زمانی اکثرا بهعنوان یک برش زمانی (time slice) نام برده میشود. این ویژگی که CPU زمان اجرا را بین برنامهها تقسیم میکند، این توهم را بوجود میآورد که رایانه همزمان مشغول اجرای چند برنامهاست. این شبیه به چگونگی نمایش فریمهای یک فیلم است، که فریمها با سرعت بالا در حال حرکت هستند و به نظر میرسد که صفحه ثابتی تصاویر را نمایش میدهد. [[سیستم عامل]] همان برنامهای است که این اشتراک زمانی را بین برنامههای دیگر تعیین میکند.
=== سیستم عامل ===
رایانه همیشه نیاز دارد تا برای بکار انداختنش حداقل یک برنامه روی آن در حال اجرا باشد. تحت عملکردهای عادی این برنامه همان سیستم عامل یا OS که مخفف واژه های Operating System است. سیستم یا سامانه عامل بر اساس پيشفرض ها تصمیم میگیرد که کدام برنامه برای انجام چه وظيفه ای اجرا شود، چه زمان، از کدام منابع (مثل [[حافظه]]، [[ورودی/خروجی]] و ...) استفاده شود. همچنین سیستم عامل یک لایه انتزاعی بین سخت افزار و برنامههای دیگر که میخواهند از سخت افزار استفاده کنند، میباشد، که این امکان را به برنامه نویسان میدهد تا بدون اینکه جزئیات ریز هر قطعه الکترونیکی از سخت افزار را بدانند بتوانند برای آن قطعه [[برنامهنویسی]] نمایند.
در گذشته يک اصطلاح متداول بود که گفته می شد با تمام این وجود کامپیوتر ها نمیتوانند برخی از مسائل را حل کنند که به این مسائل حل نشدنی گفته میشود مانند مسائلی که در مسیر حلشان در حلقه بی نهایت می افتند. به همين دليل نياز است که با کمک روشهای خاص بطور مثال به چند بخش تقسيم نمودن مساله يا روشهای متداول ديگر از رخ دادن اين خطا تا حد امکان جلوگيری نمود.
نظرات شما عزیزان: