cpu

کامپیوتر،نرم افزار،سخت افزار،مخابرات،جنگ سایبری،موبایل،بازي رايانه ي،سیاسی،ورزشی و....

.
اطلاعات کاربری
درباره ما
دوستان
خبرنامه
آخرین مطالب
لینکستان
نظر سنجی
دیگر موارد
آمار وب سایت
cpu

بعضي از فلاسفه، وجه تمايز بين انسان و ساير حيوانات را در استفادة انسان از ابزار مي دانند. انسانها از ابتدا در پي ابداع و ساخت ابزار و ادوات جديد بوده اند. اختراع چرخ، اتوموبيل، لامپ، ترانزيستور و غيره همه بر اثر اين تمايلات بشري رخ داده اند. هدف اصلي بشر از اين ابداعات، تسريع و تسهيل امور روزمرة وي بوده است. يعني، ابزار پيشرفته تر موجب نياز كمتر به دخالت انسان است. مي توان گفت كه بشر در ساخت ابزاري كه نياز وي به فعاليت فيزيكي را بر طرف كرده اند، موفق بوده است. با اينحال، تمام ابداعات او در يك نقطه ضعف مشترك بوده و آن انفعالي بودن اين ابزار بوده است. نياز به نيروي فكر و محاسبه و تصميم گيري بشر كماكان وجود داشت. اين نياز در اوايل قرن گذشته به اوج خود رسيد. افزايش جمعيت، بالا گرفتن فعاليتهاي توليدي، توليد انبوه صنعتي، پيشرفت ساير ابعاد فن آوري بشر، بهبود سطح زندگي و عواملي از اين دست، اين نياز را جديتر مي كرد.مثال خوبي از اين نياز در مراكز تلفن قديم روي داد. اين مراكز در ابتدا در شهرهاي كوچك به كمك يك منشي تمام وقت اداره مي شدند. اما با افزايش جمعيت شهرها و فراگير شدن تلفن، تعداد منشيهاي مورد نياز از حد معقول فراتر رفت. وقت آن بود كه انسان براي پيكرة اختراعات خود مغزي نيز اختراع كند. ماشين حافظه دار، متفكر، تصميم گير و خلاقي (دامنة تخيل بشر نامحدود است!) كه جاي بشر را، حتي در حد يك منشي تلفن، بگيرد.

 

پيشرفت سريع در الكترونيك پيام آور افقهاي روشن در زمينة ساخت چنين ماشيني بود.  بشر با الهام از ساختمان مغز، مي دانست كه مدارات الكترونيك تنها زيرساخت مناسب براي ماشين هوشمند خواهند بود. نخستين مراكز تلفني خودكار با سيستمهاي رلة الكتريكي بسيار ساده اي ساخته شدند. از طرف ديگر، پيشرفت در ساخت ترانزيستور و مدارات مجتمع امكان طراحي مدارات كاراتر را در ابعاد عملي مقدور كرد. در همين احوال ايده هاي مدارات منطقي هم كما بيش جا افتاده بودند. مشكل اصلي باقيمانده، همان رفتار انفعالي اين مدارات بود. بزرگترين هنر يك مدار منطقي آن بود كه با اعمال يك ورودي به آن، يك خروجي از پيش تعيين شده به ما بدهد.(شكل 1) ورودي و خروجي اي كه در غالب سطوح ولتاژ اعمال مي شد و جعبة سياهي كه با كمك مدارات الكترونيك (ترانزيستور و مقاومت) سطوح مطلوب خرو جي را ايجاد مىكرد. اما توانايي بشر بيش از اين بود كه در اينجا متوقف شود. ساخت مدارات حافظه دار و ابداع چند ايدة ديگر كافي بود تا اين جعبة سياه تا حدود زيادي از انفعالي بودن خارج شود.




شكل 1

 

يك مدار حافظه دار مداري است كه وضعيت كنوني اش متاثر از

 گذشته اش است. ساده ترين نوع اين مدارات Flip-Flop ها هستند كه پاية

 حافظه  هاي اوليه   بوده اند. به عنوان مثال   يك D Flip-Flop،   حافظه اي

 يك  بيتي  است  كه  مي تواند  از  وضعيت  ورودي اش  در  يك  لحظه

نمونه برداري كرده و آن را در دل خود نگهداري كند.                                          شكل 2

 

 

 


به سادگي مي توان با قرار دادن 8 عدد از اين حافظه هاي يك بيتي در كنار هم يك بايت حافظه داشت.(شكل 3) پس مي توانيم اين بلوك حافظة خود را در كنار جعبة سياهمان كه از اين پس آنرا *ALU مي ناميم قرار دهيم تا

شكل 3

 

قادر باشيم خروجي خود را، هر وقت كه تهيه كرديم، در آن بريزيم و كاربر در هنگامي كه به آن نياز دارد از آن استفاده كند. به اين ترتيب مي توان اين حافظه ها را در ورودي ALU هم قرار داد. خصوصا كه معمولا اَعمال جمع يا ضرب اعمالي با دو ورودي هستند و كاربر معمولا وروديهاي خود را يكي يكي وارد سيستم مىكند.

 

معمولا ساختمان مقابل (شكل 4) براي ALU ها رسم مي شود. سوال اصلي كه با ديدن شكل مقابل پديد مي آيد آن است كه فايدة اين حافظه ها در

چيست؟ اگر قرار باشد ما از يك بايت حافظه فقط براي

خروجي يك ALU استفاده كنيم، ديگر قرار دادن آن

بعنوان بلوكي مجزا در خارج از ALU چه فايده اي دارد؟

ايراد به جايي است! اصولا هنر اصلي حافظه در آن است

كه همه منظوره باشد.يعني وقتي ما 8 بيت حافظه داريم،

هم بتوانيم در آنها بنويسيم و هم بتوانيم مقدار آنها را

بخوانيم و آن را در عدد ديگري ضرب كنيم. ضمن آنكه                        شكل 4

خروجي هر محاسبه اي را در آن قرار دهيم. يعني حداقل كاري كه مي توانيم انجام دهيم آن است كه يك بايت حافظه را هم به ورودي و هم به خروجي ALU وصل كنيم. اتصال تمام بايتهاي حافظه و




ورودي و خروجي ALU به هم، موجب پديد آمدن يك اتصال فيزيكي سرتاسري 8 بيتي در مدار سيستم مي شود. اين اتصال را BUS مي ناميم.(شكل 5) در مجموعة ALU ها و حافظه ها، BUS در واقع راهروي عبور بيتهاي اطلاعات است. حافظه ها و ALU ها اطاقهاي مختلف متصل به اين راهرو هستند. با اينكه راهرو عنوان جالبي براي BUS است، تفاوتهايي نيز از نظر كاركرد بين اين دو وجود

شكل 5

 

 

 

دارد! در راهرويي كه به چندين اطاق متصل است، در هر لحظه چندين نفر مي توانند از اطاقهاي مختلف خارج شوند، در جهات مختلف در آن حركت كنند و به نقاط مختلف بروند. روي BUS، كه يك اتصال فيزيكي است، در هر لحظه يك مقدار‌(ولتاژ) مي تواند قرار گيرد. و اين مقدار مي تواند فقط در يك جهت حركت كند. به هر حال BUS نقطة مشترك تمام اجزاي مدار ماست و تمام نقل و انتقالات اطلاعات روي آن صورت مي گيرد. ايدة BUS از ايده هاي اساسي در پديد آمدن مدارات محاسبه گر است.

 




همانگونه كه حدس زده ايد، در فرايند تشكيل BUS و ساختمان مدار قبل(شكل 5) اشكالاتي ديده مي شود. مسالة اول مرتبط با ALU است. گفتيم كه براي انجام عمليات رياضي يا منطقي، ALU داراي دو ورودي است. اگر ما هر دوي اين وروديها را به باس متصل كنيم (فلسفة BUS هم همين است) در اين صورت عملا دو ورودي BUS را به هم وصل كرده ايم و تنها مي توانيم اعمال رياضي و منطقي را روي وروديهاي مساوي با هم انجام دهيم! لذا ناچاريم كه يكي از وروديهاي ALU را از طريق يك حافظة كمكي به BUS وصل كنيم.(شكل 6) پس براي انجام هر عملياتي، ابتدا ورودي اول را از طريق BUS در *A قرار مي دهيم و آنگاه ورودي دوم را روي باس قرار داده و خروجي مطلوب

شكل 6

را بدست مي آوريم. با اينكه واحد A در اينجا به عنوان يك واحد اضطراري مطرح شد، همانطور كه در آينده خواهيم ديد، مهمترين واحد يك سيستم خصوصا هنگام برنامه نويسي، همين واحد است!

 

نكتة اساسي دوم مربوط به واحدهاي حافظه است. سوال اينجاست كه چگونه در ساختمان بالا ورودي و خروجي حافظه ها هر دو به BUS و لذا به هم متصل هستند؟ بله در

واقع همينطور است و در سيستمهاي واقعي ساختمان واحد حافظه به شكل

مقابل(شكل 7) است.نكتة اصلي كه ما را مجاز به اتصال ورودي و خروجي

حافظه به هم مي كند، آن است كه ما هيچگاه نياز نداريم( و معقول هم

نيست) كه به طور همزمان از ورودي و خروجي يك بلوك حاقظه استفاده

كنيم. در واقع، در لحظه اي كه در حال اعمال ورودي به حافظه هستيم،                   شكل 7

خروجي آن قابل پيش بيني نيست. (مقدار قبلي، مقدار جديد يا احتمالا هيچيك!) به هر حال مهمترين مساله اي كه بايد در اين بين رعايت شود آن است كه هر دو ورودي Clock و OE كه در واقع Read و Write حافظة ما هستند، همزمان فعال نشوند.

 




نكتة سوم مربوط به BUS است كه البته قبلا به طور غير مستقيم به آن اشاره شد. ما مجاز نيستيم كه در يك لحظه دو ورودي را به BUS اعمال كنيم. (در حاليكه خواندن چند خروجي همزمان ايرادي ندارد) بعنوان مثال فرض كنيد كه خروجيهاي دو Gate را به هم وصل كنيم. اگر خروجي يكي از Gate ها “0” و ديگري “1” باشد، فقط خدا مي داند كه اين خروجي مشترك چه چيزي مي شود. البته اگر چيزي از آن Gate ها باقي بماند! اينجاست كه مسالة مهم Tri-State كه در واقع پيش نياز اصلي عملكرد BUS است مطرح مي شود. هر سيم يا پاية IC در الكترونيك ديجيتال مي تواند داراي سه حالت‌ (به جاي دو حالت) باشد. “0” ، “1” و “Float”.(شكل 8) از نظر فيزيكي خروجي

شكل 8


Tri-State يعني حالتي كه خروجي در امپدانس بالا قرار دارد. از نظر مفهومي Tri-State يعني خروجي ندادن يا خروجي را رها كردن. در واقع هر واحد فقط وقتي خروجي “0” يا “1” اعمال مي كند كه از او بخواهيم. در غير اين صورت خروجي Tri-State است. معمولا در IC  ها پايه هاي OE يا CS ، Tri-State بودن خروجي را كنترل مىكنند. با توجه به آنكه خروجي ALU لزوما Tri-State نيست، خروجي آنرا به يك Register وصل مي كنند كه اين قابليت را دارد. البته اين Register چيزي جز                 شكل 9

همان A نيست. (شكل 9)

 

تكليف ورودي و خروجي سيستم چه مي شود؟ در تفاسير بالا BUS يك عضو داخلي است. قوي ترين ماشيني كه قابليت ارتباط با محيط خارج را نداشته باشد دردي را از ما دوا نخواهد كرد. هدف آن است كه اين ماشين در اختيار ما در آيد. لذا ما بايد بتوانيم امكان ارتباط با دنياي خارج را براي آن فراهم كنيم. در ساختار بالا روشهاي گوناگوني را مي توان براي اين مهم اتخاذ كرد. يك روش آن است كه به مقادير حافظه ها يا Register ها دسترسي پيدا كنيم. به اين ترتيب مي توانيم داده اي را كه مي خواهيم رويش پردازش انجام شود، در يكي از آنها قرار دهيم. پس از انجام پردازش هم مي توانيم دادة مطلوب را از همان حافظه يا Register برداشت كنيم.اما با توجه به آنكه علاقه داريم عمليات واحدهاي مختلف را اختصاصي كنيم، Regsiter هاي جديدي را فقط براي اين امر اختصاص مي دهيم. اسم اين Regsiter ها را، كه دريچه هاي ارتبط سيستم با دنياي خارج هستند، Port مي گذاريم.(شكل 9)

 

همانگونه كه توجه كرديد،پس از مراحل بالا، ما در سيستم خود يك ALU داريم كه عمليات مختلف را انجام مي دهد، يك BUS داريم، چند Register داريم كه مي توانيم عمليات داخلي خود را رويشان انجام دهيم و چند Port براي ورودي و خروجي از مدار داريم. بسيار خوب اما آيا اگر اين واحد ها را در كنار هم قرار دهيم، مدار شروع به كار مي كند؟ اصولا چه كسي بايد اعمال اين واحدها را اجرا و كنترل كند؟ چه كسي بايد به Register ها فرمان اعمال خروجي بدهد يا به ALU بگويد كه از بين اعمال ممكن، يكي را (مثلا تفريق) انجام دهد؟ به نظر مي آيد كه هنوز سر جاي اول هستيم. اما براستي اينطور نيست. اين اَعمال، وظيفة واحد بسيار مهمي در سيستم بنام Sequencer مي باشد. وظيفة Sequencer ، همانگونه كه از نامش پيداست، ايجاد توالي مناسب بين اعمال اين واحدها براي حصول نتيجة مناسب است. به عنوان مثال ما مي خواهيم كه دو عدد را با يكديگر جمع كنيم. كافي است كه به Sequencer عمليات جمع را اعلام كنيم. حال اين Sequencer است كه مقدار ورودي را از Port هاي ورودي مي خواند، آن را روي BUS قرار مي دهد، به ALU فرمان جمع مي دهد و خروجي را روي Port مورد نظر قرار مي دهد.(شكل0 1) ماهيت Sequencer نوعي مدار ترتيبي (از نوعي كه در مدارات منطقي داشتيم) است. مدارات ترتيبي اين قابليت را دارند كه براي يك رشتة خاص صفر و يك ورودي، مي توانند رشته اي در خروجي تهيه كنند. اين طراح مدار است كه ترتيبي از Flip-Flop ها را براي حصول اين نتايج و بدست آوردن خروجي مناسب در نظر مي گيرد.(شكل 11) پس طراح Sequencer (كه بي اغراق طراح اصلي سيستم است) ابتدا رشتة صفر و يك هاي مطلوب را براي انجام يك عمليات، با لحاظ كردن توالي زماني و طول بازه ها، بدست مي آورد. اين رشته تابعي از سرعت مدارات، رفتار Register ها، نحوه كار ALU و ساختمان نيمه هادي سيستم است. سپس، عملياتهاي مختلف را با هم تركيب و مدار ترتيبي مناسب را طراحي مي كند. واضح است كه مدارات
Sequencer بايد به كلية واحدهاي سيستم دسترسي داشته باشند.

       شكل 11                                                           شكل 10

 

در اين مرحله مي توانيم ادعا كنيم كه يك *CPU ساده ساخته ايم. با اندكي تغيير مي توان يك ماشين حساب ساده با اين ساختمان ساخت. اما اين CPU هنوز كامل نيست. معمولا تعداد Register هايي را كه مي توان در دل CPU قرار داد محدودند. اين محدوديت از طرفي به تكنولوژي ساخت نيمه هادي باز مي گردد. يك مهندس طراح به خوبي مي داند كه در طراحي CPU تعيين كننده ترين عامل بستر فيزيكي طراحي است. تعداد واحدهاي ممكن سيستم را حجم بستر و فشردگي مدارات تعيين مي كند در حالي كه سرعت سيستم را فيزيك نيمه هادي مشخص مي كند. در سير تاريخي تحولات CPU عاملي كه كيفيت عملكرد CPU را محدود كرده، تكنولوژي ساخت بوده نه طراحي. از طرف ديگر، اصولا حكمت ساخت Register براي كاربردهاي با حجم بالا نبوده است. امروزه اكثرا كاربردهايي با حجم اطلاعات بالا داريم كه پردازش روي آنها جز با ذخيره سازي انبوه اطلاعات ميسر نيست. لذا حافظه با حجم بالا اجتناب ناپذير است. تنها راه ممكن قرار دادن اين حافظه در خارج از CPU و تهيه لوازم ارتباط با اين حافظه (Interface) در CPU است. اصولا هيچ اشكالي ندارد كه از همين BUS براي اتصال حافظة خارجي هم استفاده كرد. اما مساله اساسي آن است كه چونRegister ها در دسترس Sequencer هستند، كنترل آنها مستقيما توسط Sequencer امكان پذير است. ولي براي حافظة خارجي، آنهم در حجم بالا، تنها راه ممكن آدرس دهي به حافظه است. يعني بايد به هر بايت از حافظة خارجي شماره اي نسبت دهيم تا هنگام نياز به آن از شماره اش كه در واقع آدرسش است استفاده كنيم. براي اين عمل كافي است كه مجموعه CS هاي بايتهاي حافظة خارجي را، براي صرفه جويي در تعداد سيم، در دهانة CPU كد كنيم و مجددا در دهانة حافظه دكد كنيم(شكل 12). با توجه به آنكه در هر لحظه فقط به يكي از آدرسها اشاره مي كنيم، اين عمل(كدينگ) مجاز است. از آنجا كه اين كدينگ در مبناي دو انجام مي شود، حجم حافظه ها توانهاي صحيح دو هستند (256و 1024). مجموعة سيمهايي كه آدرس حافظه را از Sequencer به حافظة خارجي حمل مي كند نيز در واقع نوعي BUS است كه به آن Address-Bus گفته مي شود. به BUS پيشين كه حامل اطلاعات بود،از اين پس Data-Bus مي گوييم. واضحا براي ارتباط با حافظة خارجي، بجز Address-Bus پايه هاي ديگري نيز لازم است(مثلا براي تمايز قائل شدن بين عمليات Read و Write )به مجموعة اين پايه ها، باضافة بعضي سيمهاي ديگر كه توسط Sequencer در ارتباطات با خارج از CPU استفاده مي شود، عنوان كلي Control-Bus داده مي شود. بدين ترتيب مشكل دسترسي به حجم بالاي حافظه را با قرار دادن آن در خارج CPU و وضع قوانين لازم براي دسترسي به آن، حل كرديم. لازم به ذكر است كه قرار دادن حافظه در خارج از CPU موجب كاهش ميزان دم دست بودن آن براي Sequencer و لذا كاهش سرعت  نسبت به Register ها مي شود. در CPU هاي جديد كه تكنولوژي نيمه هادي حجم بالاتري را در اختيار مي گذارد، طراحان براي افزايش سرعت قسمتي از حافظه را درون CPU تحت عنوان حافظة كاشه قرار مي دهند.


شكل 12

 

مسالة دادن دستورالعمل به CPU ، با توجه به ديد ماشين حسابي كه در طول اين فصل وجود داشت، با ايدة اعمال فيزيكي آن از خارج (شكل 10) مطرح شد. يعني كه User با فشار هر كليد Sequencer ، به آن فرمان توليد رشتة صفر و يك مناسب و لذا اجراي دستورالعمل مورد نظر را مي داد. تقريبا واضح است كه اين روش در صورت تمايل به ارتقاع سطح عملكرد CPU، نمي تواند روش پايايي باشد. دليل آن هم اين است كه هر چه توانايي هاي CPU را ارتقاع دهيم، به همان نسبت انتظاراتمان هم از آن افزايش مي يابد. يعني گسترة دستورالعملهاي CPU، چه از نظر كيفيت و چه از نظر كميت، توسعه مي يابد. لذا قرار دادن يك كليد براي هر دستورالعمل به سرعت غير عملي مي شود. اين مساله به اضافة كشف الفبا توسط بشر (كه مدتها پيش رخ داده است! و ما براي رسم هر لغت از شكلي مخصوص آن استفاده نمي كنيم بلكه از تركيب يكسري الفباي محدود استفاده مي كنيم) موجب شد كه صفحه كليد ها از صفحة دستورالعمل به صفحة حروف تبديل شوند.بر اثر اين تحول، طراحان سيستمهاي اوليه، براي پردازش و عيب يابي دستورالعملهاي ورودي ناچار شدند كه كليدهاي ورودي را ابتدا در محلي از حافظه، به شكل موقت نگهداري كنند و پس از تكميل، آن را به اجرا در آورند. كم كم اين حافظه با حافظة Data كه قبلا مطرح شد تركيب گشت و در اين بين اين Sequencer بود كه مجددا بر حيطة وظايفش افزوده شد! اين ايدة زيبا بدين شكل مطرح شد كه Sequencer دستورالعملها را (كه قبلا به نحوي به قسمتي از حافظه منتقل شده است) خود مستقيما از حافظه بخواند. با اين ايده بشر از حلقة عملكرد CPU خارج شد و گام نهايي در استقلال CPU ها برداشته شد. احتمالا بسته شدن اين حلقه در اين مقطع قدري غير منتظره است ولي خواهيم ديد كه اين ايده عملي و بسيار ساده است.

 

همانگونه كه گفتيم، هر دستورالعمل در واقع كدي است كه بعنوان ورودي مدارات ترتيبي Sequencer به آن اعمال مي شود. و گفتيم كه اين كد نخست به شكل فيزيكي از خارج اعمال مي شد. اما هيچ مانع منطقي اي وجود ندارد كه Sequencer بتواند اين كد (يا چيزي كه معادل واقعي اين كد است) را خود از حافظه بخواند. پس اجراي هر دستورالعملي به دو مرحله تبديل مي شود:

1-  ابتدا در طي فرايندي خودكار، Sequencer كد دستورالعمل را از محل مقرر در حافظه مي خواند. نحوة اين خواندن كه در هر مرحلة كار CPU تكرار مي شود، براي Sequencer به شكل سخت افزاري در مراحل طراحي CPU تعيين شده است. سپس، زنجيرة صفر و


:: برچسب‌ها: cpu ,
:: بازدید از این مطلب : 148

|
امتیاز مطلب : 0
|
تعداد امتیازدهندگان : 0
|
مجموع امتیاز : 0
ن : محمد خلفوندی
ت : شنبه 9 دی 1391
.
مطالب مرتبط با این پست
می توانید دیدگاه خود را بنویسید


نام
آدرس ایمیل
وب سایت/بلاگ
:) :( ;) :D
;)) :X :? :P
:* =(( :O };-
:B /:) =DD :S
-) :-(( :-| :-))
نظر خصوصی

 کد را وارد نمایید:

آپلود عکس دلخواه:








موضوعات
نویسندگان
آرشیو مطالب
مطالب تصادفی
مطالب پربازدید
چت باکس
تبادل لینک هوشمند
پشتیبانی