ذخیره و بازیابی اطلاعات  جلسه ششم

ادامه مبحث شاخص بندي چند سطحي و درختهايB

  

جستجو در درخت B :

 

 ۱) به صورت تکراري عمل مي کنند.

 

 ۲) در دو مرحله عمل مي کنند :

 

 

 الف) به صورت يک درميان روي کل صفحات

 

 ب) در داخل صفحات

 در مورد فرايند درج کردن ،تقسيم کردن و ارتقاء ملاحظات زير را در نظر مي گيريم :

 

 ۱) با جستجويي که تا سطح برگ پيش مي رود شروع مي شود.

 

 ۲) بعد از پيدا کردن محل درج در سطح برگ ،کار درج ،تشخيص سر ريز و تقسيم کردن از پايين به سمت بالا پيش مي رود. 

 .....

ادامه نوشته

طراحی الگوریتم ها جلسه ششم

 

 

فصل ششم:

راهبرد شاخه و حد

 

 

- راهبرد شاخه و حد ازآن لحاظ به عقبگرد شبا هت دارد که

 درآن، بریا حل مسئله از درخت فضای حالت استفاده می شود.

 

- تفاوت این روش با عقبگرد، اولا ما را به پیمایش خاصی ازدرخت محدود نمی کندوثانیا فقط برای مسائل بهینه سازی به کار می رود.

 

- الگوریتم شاخه و حد ، در هر گره عددی را ( حدی ) رامحاسبه می کند تاتعیین شود که آیا این گره امید بخش هست یا خیر.

 

- اگر آن حد بهتر از مقدار بهترین حلی که تاکنون یافته شده ، نباشد، گره غیر امید بخش است. در غیر این صورت ، امید بخش است.

        ......

 

 

ادامه نوشته

برنامه نویسی C  جلسه ششم

فصل 5

دستورهای كنترلي

هدف کلی

آشنایی با مهم‌ترین دستورهای کنترلی در زبان C و کاربرد آنها

هدفهای رفتاری

از دانشجو انتظار مي‌رود پس از خواند این فصل،

1. با کاربرد دستورهای کنترلی آشنا شود.

2. شکل کلی و کاربرد دستور while را بداند.

3. شکل کلی و کاربرد دستور whiledo- را بداند و تفاوت آن را با while بیان کند.

4. شکل کلی و کاربرد دستور for را بداند.

5. شکل کلی و کاربرد دستور عملگر کاما را بداند.

6. شکل کلی و کاربرد دستورهای ‌if و if-else را بداند.

7. شکل کلی و کاربرد دستور switch را بداند.

8. شکل کلی و کاربرد دستور break را بداند.

9. شکل کلی و کاربرد دستور continue را بداند.

10. شکل کلی و کاربرد دستور goto را بداند.

11. شکل کلی و کاربرد تابع exit را بداند.

مقدمه

يکي از امکانات زبانهاي برنامه‌نویسی جدید، استفاده از دستورها و ساختارهاي كنترلي است و در نتيجه ‌اين امكان را فراهم مي‌‌سازند كه قطعه‌ای از برنامه تا موقعي كه شرط ويژه‌اي برقرار است چندين بار اجرا شود.

.......

ادامه نوشته

برنامه نویسی ++C  جلسه ششم

6- كامپايل جداگانۀ توابع

 توابع کتابخانۀ C++ استاندارد به همين شکل پياده‌سازي شده‌اند و هنگامي که يکي از آن توابع را در برنامه‌هايتان به کار مي‌بريد بايد با دستور راهنماي پيش‌پردازنده، فايل آن توابع را به برنامه‌تان ضميمه کنيد.

اين کار چند مزيت دارد:

1- اولين مزيت «مخفي‌سازي اطلاعات» است.

2-مزيت ديگر اين است که توابع مورد نياز را مي‌توان قبل از اين که برنامۀ اصلي نوشته شود، جداگانه آزمايش نمود.

3-سومين مزيت اين است که در هر زماني به راحتي مي‌توان تعريف توابع را عوض کرد بدون اين که لازم باشد برنامۀ اصلي تغيير يابد.

4-چهارمين مزيت هم اين است که مي‌توانيد يک بار يک تابع را کامپايل و ذخيره کنيد و از آن پس در برنامه‌هاي مختلفي از همان تابع استفاده ببريد.

تابع max() را به خاطر بياوريد. براي اين که اين تابع را در فايل جداگانه‌اي قرار دهيم، تعريف آن را در فايلي به نام max.cpp ذخيره مي‌کنيم. فايل max.cpp شامل کد زير است:

......

ادامه نوشته

معماری کامپیوتر جلسه چهارم

روشهای آدرس دهی

یک روش آدرس دهی ISA’S این سوال را جواب می دهد :عملوندها کجا میتوانند ذخیره شوند؟

ما دو نوع ذخیره سازی در MIPSداریم( وبیشتر ماشینهای دیگر) :ثباتها و حافظه اصلی.ما می توانیم به هریک از این دو یا هردو عملوندها برویم . یک تک عملوند می تواند با هر یک از این دو بیاید یک ثبات یا یک مکان حافظه ، و روشهای آدرس دهی راه های گوناگون تشخیص این مکانها را ارائه می کند.

 

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

Mode name

Example

Meaning

Register

mov $1, $2

R2 R1

Direct (or absolute)

mov $1, (40)

M[40] R1

Immediate

mov $1, #40

40 R1

 

روشهای آدرس دهی غیر مستقیم

در تولید یک آدرس حافظه یکی یا بیشترثباتها استفاده می شوند

....

ادامه نوشته

برنامه نویسی C  جلسه پنجم

عملگرهاي رابطه‌اي (مقايسه‌اي)

 عملگرهاي رابطه‌اي، همان طور كه از نامشان پيداست، رابطة بين دو مقدار را تعيين مي‌كنند. اين عملگرها در جدول 4ـ12 نشان داده شده‌اند.

 

جدول 4ـ12 عملگرهاي رابطه‌اي

نام عملگر

نشانه

شکل

نتيجه

بزرگ‌تر از

> 

a > b

اگر a بزرگ‌تر از b باشد، نتيجه 1 وگرنه 0 است.

كوچك‌تر از

< 

a < b

اگر a كوچك‌تر از b باشد، نتيجه 1 وگرنه 0 است.

مساوي يا بزرگ‌تر از

>=

a >= b

اگر a مساوي يا بزرگ‌تر از b باشد، نتيجه 1 وگرنه 0 است.

مساوي يا كوچك‌تر از

=<

a<=b

اگر a مساوي يا كوچك‌تر از b باشد، نتيجه 1 وگرنه 0 است.

مساوي

= =

a = =b

اگر a مساوي b باشد، نتيجه 1 وگرنه 0 است.

مخالف

!=

a!=b

اگر a مخالف b باشد، نتيجه 1 وگرنه 0 است.

 

ايده و مفهوم اصلي در مورد عملگرهاي رابطه‌اي وابسته به مفهوم مقدار true و false است. در زبان C، true هر مقدار غير از صفر و false مقدار صفر است. عباراتي كه عملگرهاي رابطه‌اي يا منطقي را به كار مي‌برند براي حالت نادرست يا false مقدار صفر و براي حالت درست يا true مقدار يك برمي‌گردانند.

....

ادامه نوشته

شیوه ارائه مطالب علمی و فنی   جلسه پنجم

  اجزاء سه بخشي يك ارائه كتبي

 

   بند یا متن پار ( clause) :

- به تعدادی نوشتپار ذیل داخلی ترین عنوان در یک شاخه از طرح اولیه بند یا متن پار گوییم . متن پار کمیتی از متن است که خود یک عنوان دارد ودر درونش دیگر عنوانی وجود ندارد و از تعدادی نوشتپار تشکیل شده است .

Image and video hosting by TinyPic

 

متن پار مرکب یا متن بخش :

متن پار ممکن است مرکب باشد یعنی چند متن پار در درون خود داشته باشد . در شکل زیر ساختار متن پار مرکب نشان داده شده است . می توان متن پار مرکب را متن بخش نامید .

 .....

ادامه نوشته

طراحی الگوریتم ها جلسه پنجم

 

 

فصل پنجم:

 

راهبرد عقبگرد

 

- از تکنیک عقبگرد برای حل مسائلی استفاده می شود که در آن ها دنباله ای از اشیاء از یک مجموعه مشخص انتخاب می شود، به طوری که این دنباله ، ملا کی را در بر می گیرد.

 

- یک مثال کلاسیک از عقبگرد، مسئله n وزیر است.

 

 

- هدف از مسئله n وزیر ، چیدن n مهره وزیر در یک صفحه شطرنج است ، به طوری که هیچ دو وزیری یکدیگر را گارد ندهند. یعنی هیچ دو مهره ای نباید در یک سطر، ستون یا قطر یکسان باشند.

 

- عقبگرد حالت اصلاح شده ی جست و جوی عمقی یک درخت است.

 

- الگوریتم عقبگرد همانند جست و جوی عمقی است، با این تفاوت که فرزندان یک گره فقط هنگامی ملاقات می شوند که گره امید بخش باشدو در آن گره حلی وجود نداشته باشد.

 .......

ادامه نوشته

زبان ماشین و اسمبلی  جلسه پنجم

فصل پنجم

انشعاب و حلقه

پرش‌هاي غير شرطي

 

Jmp statement_label

که در آن statemaet_label متناظر با فيلد اسم دستور اسمبلي ديگري مي‌باشد.

دستور JMP شبيه به goto در پاسکال يا بيسيک است.

اگر شرايط مختلفي وجود داشته باشد که تحت آن شرايط برنامه بايد خاتمه پيدا کند، مي‌توان به يک دستور اجرايي که به وسيله برچسب quit: مشخص شده است و محل اختتام برنامه مي‌باشد، پرش نمود.

فرم‌هاي درون سگمنتي وقتي توليد مي‌شوند که مقصد در درون سگمنت جاري قرار داشته باشد، اين فرم‌ها در بين انواع ديگر از همه رايج‌تر مي‌باشند.

پرش‌هاي بين سگمنتي که به عبارتي به يک سگمنت کد ديگر پرش مي‌کنند، به ندرت مورد نياز مي‌باشند.

پرش‌هاي غيرمستقيم مقدار جابجايي خود از دستورالعمل مقصد را، از يک ثبات يا از يک کلمه در حافظه به دست مي‌آورند.

پرش‌هاي درون سگمنتي نسبي، از انواع ديگر معمول‌تر بوده و بيشتر مورد استفاده قرار مي‌گيرند.

 .....

ادامه نوشته

ذخیره و بازیابی اطلاعات  جلسه پنجم

جلسه پنجم - ادامه شاخص ها

 يک اختلاف عمده ميان مرحله مرتب سازي و مرحله ادغام ،در تعداد دستيابي ترتيبي (در مقابل دستيابي مستقيم) است.

 با استفاده از مرتب سازي هرمي براي ايجاد رانش هايي در مرحله مرتب سازي ،مي توان تضمين نمود که همه I/O ها از يک لحاظ ترتيبي است.

 به طور خلاصه چون مرحله ادغام تنها مرحله اي است که در آن مي توان بازدهي را با بهبود بخشيدن به روش کار ،افزايش داد بنابر اين بر آن بيشتر تأکيد داريم.

 با بزرگ شدن فايل ها زمان لازم براي مرتب سازي ادغامي به سرعت افزايش مي يابد. براي کاهش اين زمان چند راه وجود دارد :

 

 ۱) تخصيص سخت افزار بيشتر نظير ديسک گردان ،حافظه و کانال هاي I/O

 

 ۲) اجراي ادغام در بيش از يک مرحله ،کاهش دادن مرتبه هر ادغام و افزايش دادن اندازه بافر براي هر رانش

 

 ۳) افزايش طول رانش هاي مرتب شده از لحاظ الگوريتمي

 

 ۴) يافتن راههايي براي همپوشاني عمليات I/O

 در اين بخش سه تغيير ممکن در پيکربندي سيستم را در نظر مي گيريم که مي تواند زمان مرتب سازي را به طور چشمگيري کاهش دهد :

 

 ۱) افزايش مقدار حافظه

 

 ۲) افزايش تعداد ديسک گردان ها

 

 ۳) افزايش تعداد کانال هاي I/O

 

Image and video hosting by TinyPic

 

 هدف اصلي اين مرتب سازي ادغامي آن است که قادر باشيم فايلهايي را مرتب سازي کنيم که در حافظه جا نمي شوند.

 در ادغام چند مرحله اي، سعي نمي کنيم همه رانش ها را به يکباره ادغام کنيم. بلکه رانش هاي اوليه را به گروههاي کوچک تقسيم کرده ،رانش هاي موجود در اين گروه ها را جداگانه ادغام مي کنيم.

اساس انتخاب جايگزيني ،اين ايده است :

 

 انتخاب هميشگي کليدي از حافظه که داراي کمترين مقدار باشد ،قرار دادن آن کليد در خروجي ،و سپس تعويض آن با يک کليد جديد از ليست ورودي.

الگوريتم انتخاب جايگزيني را مي توان به طريق زير پياده سازي نمود :

 

 ۱) خواندن مجموعه اي از رکوردها و مرتب سازي آنها با استفاده از مرتب سازي هرمي

 

 ۲) به جاي نوشتن کل هرم اوليه به شکل مرتب شده فقط رکوردي را مي نويسيم که کليد آن داراي کمترين مقدار است.

۳) آوردن يک رکورد جديد و مقايسه مقدار کليد آن با مقدار کليدي که به تازگي در خروجي قرار گفته است.

 

 الف) اگر مقدار کليد جديد بزرگتر باشد رکورد جديد را در محل مناسب آن در هرم اوليه ،به همراه رکوردهايي قرار مي دهيم که از خروجي گزينش مي شوند.

 

 ب) اگر مقدار کليد رکورد جديد کمتر باشد ،رکورد را در يک هرم ثانويه از رکوردها با مقادير کليدي کمتر از آنهايي که پيش از اين نوشته شده اند قرار مي دهيم.

 

۴) تا هنگاميکه رکوردي در هرم اوليه باقي باشد و رکوردهايي براي خواندن وجود داشته باشد مرحله ۳ را تکرار مي کنيم.

 گزينش جايگزيني ابزاري سودمند براي فايل هاي ورودي است که قدري مرتب هستند و اين گزينش فرصتي براي صرفه جويي در زمانهاي انتقال و پيگرد فراهم مي آورد که روشهاي مرتب سازي حافظه اي فاقد آن است.

 در گزينش جايگزيني اگر دو ديسک در اختيار داشته باشيم ،بايد حافظه را نيز طوري پيکربندي کنيم که از آنها بهره برداري شود. حافظه را چنين پيکربندي مي کنيم :

 

 يک بافر ورودي و يک بافر خروجي اختصاص مي دهيم تا بافردهي دوگانه امکان پذير گردد و بقيه حافظه را به تشکيل درخت انتخاب اختصاص دهيم.

 اختصاص دادن بيش از يک پردازنده به يک کار امري است متداول که به حالات زير امکان پذير است :

 

 ۱) کامپيوترهاي بزرگ که بسياري از آنها مقدار زيادي از وقت خود را صرف مرتب سازي مي کنند ،معمولاً داراي دو يا چند پردازنده هستند که همزمان روي بخش هاي متفاوت يک مسئله کار مي کنند.

 

 ۲) پردازنده هاي برداري و آرايه اي را مي توان طوري برنامه ريزي کرد که انواع گوناگون الگوريتم مرتب سازي را سريعتر از پردازنده هاي اسکالر اجرا کند.

 

 ۳) ماشين هاي موازي انبوه ،هزاران و شايد ميليونها پردازنده دارند که مي توانند مستقل از هم کار کنند و در عين حال به شيوه هاي پيچيده با هم ارتباط برقرار کنند.

 

 ۴) شبکه هاي محلي بسيار سريع و نرم افزارهاي ارتباطي ،ارسال بخش هاي متفاوتي از يک فرايند به چند ماشين متفاوت را امکان پذير مي سازد.

 اگر در سيستمي برنامه نويسي چندگانه امکان پذير باشد زمان کل براي I/O ممکن است طولاني تر باشد ،زيرا کارما بايد منتظر بماند تا کارهاي ديگر نيز I/O خود را انجام دهند.

 

 يکي از دلايل برنامه ريزي چندگانه آن است که به سيستم عامل امکان دهيم تا راههايي براي افزايش بازدهي کل سيستم ،با هم پوشاني پردازش و I/O در ميان امور متفاوت بيابد.

 ليست کاملي از مجموعه جديد ابزاهايي که کارايي مرتب سازي خارجي را بهبود مي بخشند شامل موارد زيراست :

 

 ۱) براي مرتب سازي درون حافظه اي ،از مرتب سازي هرمي براي تشکيل ليست اوليه عناصر مرتب شده در يک رانش استفاده مي کنيم.

 

 ۲) استفاده از حداکثر حافظه ممکن

 

 ۳) اگر تعداد رانش هاي اوليه چنان بزرگ باشد که زمان کل پيگرد و چرخش ،بسيار بزگتر از زمان انتقال کل باشد از ادغام چندمرحله اي استفاده مي کنيم.

 

 ۴) استفاده از گزينش جايگزيني براي تشکيل رانش هاي اوليه را در نظر بگيريم.

 

 ۵) از بيش از يک ديسک گردان و کانال I/O استفاده مي کنيم.

 

 ۶) عناصر بنيادي مرتب سازي خارجي و هزينه هاي نسبي آنها را به خاطر مي سپاريم و به دنبال راه هايي براي بهره بردن از معماري ها و سيستمهاي جديد ،نظير پردازش موازي مي گرديم.

 درادغام موازنه شده دوجانبه ،توزيع اوليه بايد روي دو نوارگردان صورت پذيرد و در هر مرحله از ادغام ،به جز آخري خروجي بايد روي دو نوارگردان صورت گيرد.

 

 

 

 اين ادغام ساده ترين الگوريتم ادغام نواري است.

 

 ايده هاي استفاده از الگوريتم هاي ادغام مرتبه بالاتر و ادغام رانش ها از روي يک نوار در چند مرحله مبناي دو روش معروف براي ادغام ،موسوم به ادغام چند مرحله اي يا ادغام آبشاري است.

 

 

به طور کلي اين ادغام ها در ويژگي هاي زير با هم مشترکند :

 

 ۱) توزيع اوليه رانش ها چنان است حداقل ادغام اوليه يک ادغام 1- j جانبه است که در آن j تعداد نوارگردان ها است.

 

 ۲) توزيع رانش ها در ميان نوارها چنان است که نوارها غالباً حاوي تعداد متفاوتي از رانش ها هستند.

 

 چون ديسک ها دستگاههاي دستيابي مستقيم هستند ادغام هاي با مرتبه بسيار بزرگ را مي توان انجام داد ،حتي اگر فقط يک ديسک گردان وجود داشته باشد.

 

 

 

 چون نوارها دستگاه هاي دستيابي مستقيم نيستند براي هر رانش اضافي که بخواهيم ادغام کنيم به يک نوارگردان اضافي نياز داريم.

 

 بنابر اين ديسک ها بهترند.

 

شاخص بندي چند سطحي و درختهاي B

 مشکل اصلي نگهداشتن شاخص در حافظه جانبي اين است که دستيابي به حافظه جانبي کند است.

 

 

 

 اين مشکل مي تواند به دو مشکل ويژه تقسيم شود :

 

 ۱) جستجو بر حسب شاخص بايد سريعتر از جستجوي دودويي باشد.

 ۲) درج وحذف بايد با سرعت جستجو کردن انجام شود.

 

درخت جستجوي دودويي چه اشکالي دارد؟

 

 ۱) براي شاخص بندي روي ديسک سرعت لازم را ندارد.

 

 ۲) يک راهبرد مؤثر براي موازنه کردن درخت وجود ندارد.

 

 تلاشهايي براي حل مشکلات درخت جستجوي دودويي انجام گرفت که دو تا از آنها عبارتند از :

 

 ۱) درخت هاي AVL

 

 ۲) درخت هاي دودويي صفحه صفحه

 

 درخت AVL درختي با ارتفاع موازنه شده است.

 

 يعني اينکه ،اختلاف مجاز ميان هر دو زيردرخت که ريشه مشترکي دارند محدوديت دارد و حداکثر تفاوت مجاز ۱ است.

 

Image and video hosting by TinyPic

دو مزيت که درخت هاي AVL را با اهميت مي کنند عبارتند از :

 

 ۱) با تعيين کردن حداکثر تفاوت مجاز در ارتفاع هر دو زيردرخت ،درخت هاي AVL حداقل کارايي را در جستجو تضمين مي کنند.

 

 ۲) براي اينکه هنگام درج در درخت AVL ،ويژگي خود را حفظ کند ،مستلزم چهار نوع چرخش است.

 درخت دودويي صفحه اي ،سعي مي کند با قرار دادن چندين گره دودويي در يک صفحه ديسک ،مشکل را حل کند.

Image and video hosting by TinyPic

 

 واضح است که تقسيم کردن درخت به چندين صفحه امکان جستجوي سريعتر در حافظه جانبي را فراهم مي کند وبه دست آوردن اطلاعات را سريعتر از هر روش ديگر دستيابي با استفاده از کليد امکان پذير مي کند.

 مشکل اصلي درخت هاي صفحه اي هنوز هم استفاده از ديسک است.

 

 درخت هاي B شاخص هاي چند سطحي هستندکه مشکل هزينه خطي درج و حذف کردن را حل مي کنند.

 

 اين ويژگي باعث جذابيت درخت B مي شود ،زيرا اکنون درخت هاي B روش استاندارد شاخص سازي هستند و از پايين به بالا ساخته مي شوند و عملياتي نظي درج و حذف ،در حافظه روي گره هاي درخت B اعمال مي شود.

 

برنامه نویسی ++C  جلسه پنجم

جلسه پنجم

« توابع»

1-مقدمه

برنامه‌هاي واقعي و تجاري بسيار بزرگ‌تر از برنامه‌هايي هستند که تاکنون بررسي کرديم. براي اين که برنامه‌هاي بزرگ قابل مديريت باشند، برنامه‌نويسان اين برنامه‌ها را به زيربرنامه‌هايي بخش‌بندي مي‌کنند. اين زيربرنامه‌ها «تابع» ناميده مي‌شوند. توابع را مي‌توان به طور جداگانه کامپايل و آزمايش نمود و در برنامه‌هاي مختلف دوباره از آن‌ها استفاده کرد. 

2- توابع كتابخانه‌اي C++ استاندارد

«كتابخانۀ C++ استاندارد» مجموعه‌اي است که شامل توابع‌ از پيش تعريف شده و ساير عناصر برنامه است‌. اين توابع و عناصر از طريق «سرفايل‌ها» قابل دستيابي‌اند.

قبلا برخي از آن‌ها را استفاده كرده‌ايم‌: ثابت INT_MAX که در <climits> تعريف شده ، تابع ()sqrt که در <cmath> تعريف شده است و... .

 .....

ادامه نوشته

برنامه نویسی C جلسه چهارم

فصل 4

 عبارت، دستور، عملگر

هدف کلی

آشنایی با عبارتها، دستورهای ساده و ساخت‌یافته، و عملگرهای مختلف

هدفهای رفتاری

انتظار می‌رود پس از خواندن این فصل دانشجو بتواند،

1. مفهوم عبارت را تعریف کند.

2. عبارتهای محاسباتی، قیاسی، و منطقی را بشناسد.

3. مفهوم دستور را تعریف کند.

4. انواع دستورهای ساده را بشناسد.

5. انواع دستورهای ساخت‌یافته را بشناسد.

6. مفهوم عملگر را تعریف کند.

7. عملگرهای محاسباتی را بشناسد.

8. عملگرهای انتساب را بشناسد.

9. عملگرهای یکانی را بشناسد.

10. چند عملگر تک‌عملوندی را نام ببرد.

11. عملگرهای رابطه‌ای (مقایسه‌ای) را بشناسد.

12. عملگر منطقی را بشناسد.

13. عملگر شرطی را بشناسد.

14. عملگر کاما را بشناسد.

15. عملگرهای حافظه را بشناسد.

عبارت

 در زبان برنامه‌نويسي، عبارت مجموعه‌اي معني‌دار از داده‌ها (مقادير عددي و متغيرها) است كه با استفاده از نشانه‌‌ها يا عملگرهاي محاسباتي، قياسي و منطقي با يكديگر تركيب شده‌اند. در زبان C عبارات را به‌ شکل زير دسته‌بندي می‌کنند.

عبارت محاسباتي

 تركيبي از مقادير ثابت، متغيرهاي صحيح و اعشاري با استفاده از مجموعه عملگرهاي محاسباتي است كه با قاعدة خاصي تشكيل مي‌شود، مانند مثالهاي زير.

1. a * x + b

2. (a + b) / c

در مثال اول مقدار a در مقدار x ضرب و نتيجه با مقدار b جمع مي‌شود.

در مثال دوم ابتدا مقدار b با مقدار a جمع و سپس بر مقدار c تقسيم مي‌شود.

مثال 4ـ1 جدول 4ـ1 نمونه‌‌هايي از عبارات محاسباتي را نشان می‌دهد.

 

جدول 4ـ1 چند عبارت محاسباتی

Image and video hosting by TinyPic

عبارات قياسي

 عبارات قياسي تركيبي است از عبارات محاسباتي با استفاده از عملگرهاي قياسي و با رعايت قوانين مربوط به نحوة به كار بردن عملگرها. نتيجة حاصل از اجراي عبارت قياسي هميشه درست يا نادرست است؛ يعني، اگر شرط يا شرطهاي به كار رفته در عبارت قياسي برقرار باشد، نتيجة عبارت مزبور درست است وگرنه نادرست می‌شود، كه در اغلب زبانها (مانند پاسكال) آنها را به ‌ترتيب true يا false نامند. ولي، در زبان C مقدار true برابر يك و مقدار false برابر صفر است. در عبارات قياسي حق تقدم اجرا، اول با عبارات محاسباتي است و سپس عمل مقايسة مورد نظر انجام مي‌گيرد.

مثال 4ـ2 نمونه‌‌هايي از عبارات قياسي در جدول 4ـ2 نشان داده شده است.

 

جدول 4ـ2 چند عبارت قیاسی

معادل در زبان C

عبارت رياضي

 

a >15

a > 15

a+ b - c <= 3.14

a + b - c ≤ 3.14

 

3*a + b != 2

3a + b ≠ 2

 

 

عبارت منطقي

 عبارت منطقي مجموعه‌اي از عبارات محاسباتي و قياسي است كه در آن حداقل يك عملگر منطقي نيز به كار رفته است. معمولاً اين گونه عبارات از دو گروه قبلي پيچيده‌ترند. در اغلب زبانها، عبارات قياسي كه در طرفين عملگر منطقي قرار مي‌گيرند بايد در داخل پرانتز محصور شوند.

مثال 4ـ3 نمونه‌‌هايي از عبارات منطقي در جدول 4ـ3 نشان داده شده است.

 

جدول 4ـ3 چند عبارت منطقی

معادل در زبان C

عبارت رياضي

(a<5) && (a>3) يا (a>3) && (a<5)

5 > a > 3

(a <= 3.14) | | (a>=15)

(a ≤ 3.14)

a ≥ 15

 

 

دستور

 دستور حكمي است كه سبب مي‌شود كامپيوتر عملي انجام دهد. دو گروه دستور داریم: دستورهاي ساده و دستورهاي ساخت‌يافته.

دستورهاي ساده

 دستورهاي ساده دستورهاي غيرشرطي‌اند كه متداول‌ترين آنها عبارت‌اند از:

- جايگزين كردن مقداري معين به يك متغير كه به آن دستور انتساب مي‌گويند.

- خواندن و نوشتن

- فراخواني تابع

- انتقال كنترل به نقطه‌اي از برنامه

 مثال 4ـ4 نمونه‌‌هايي از دستورهای ساده در زير نشان داده شده است.

A = B * C ;

scanf("%d%d ", &a , &b) ;

printf("%d%f",a , b) ;

fact(b) ;

goto a ;

 

دستورهاي ساخت‌يافته

دستورهاي ساخت‌يافته دستورهايي‌اند كه از انواع ساختارهاي الگوريتمي ساخته شده‌اند و متداول‌ترين آنها عبارت‌اند از:

- دستور مركب كه شامل دو يا چند دستور متوالي است و در داخل يك زوج آكولاد محصور است. در زبان C هر دستور ساده به يك سميكولون ختم مي‌شود.

{

  scanf("%d %d" , &a , &b) ;

 s = a * b ;

 p = 2 * (a+b) ;

 printf("%d %d", s , p) ;

}

- دستور حلقة تكرار

for (i =0 ; i<=10 ; i++)

  sum = sum + i ;

- دستور شرطي.

if (a>b)

  c = a + b ;

else

  c = a – b ;

عملگر

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

عملگرهای محاسباتی

 فهرست عملگرهاي محاسباتي در جدول 4ـ4 نشان داده شده است.

 

جدول 4ـ4 عملگرهاي محاسباتي

نام عملگر

نشانه

شکل

نوع عمل

جمع

+

a + b

a جمع با b

تفريق

ـ

a - b

a منهاي b

منهاي يكاني

ـ

-a

منهاي a

جمع يكاني

+

+a

مقدار عملوند a

ضرب

*

a * b

a ضرب در b

تقسيم

/

a / b

a تقسيم بر b

باقيماندة تقسيم

%

a % b

باقيماندة تقسيم a بر b

يك واحد افزايش

++

a++ , ++a

افزايش يك واحد به مقدار a

يك واحد كاهش

--

a-- , --a

كاهش يك واحد از مقدار a

 

چهار عملگر / , * , - , + تقريباً روي همه نوع داده‌هاي استاندارد موجود در زبان C به كار می‌رود. در صورتي که عملگر "/" روي مقادير صحيح يا كاراكتر به كار رود، جزء اعشار حذف مي‌شود. مثلاً مقدار 10/3برابر 3 خواهد بود يعني فقط جزء صحيح آن درنظر گرفته خواهد شد و قسمت اعشار بريده مي‌شود.

عملگر % باقيماندة تقسيم را به دست مي‌آورد و هر دو عملوند آن بايد مقدار صحيح باشد. مثلاً مقدار 10%3 برابر يك خواهد بود. يعني باقيماندة تقسيم 10 بر 3 مساوي يك است.

دو عملگر ++ و -- در ساير زبانهاي برنامه‌نويسي وجود ندارند. عملگر ++ يك واحد به عملوند خود اضافه مي‌كند و عملگر -- يك واحد از عملوند خود كم مي‌كند. هر دو عملگر تك‌عملوندي‌اند. درواقع دو دستور+ +a ;  و  a+ + ;معادل اين دستورند: a = a + 1 ;.همچنين دو دستور – –a ;  و  a– – ;معادل اين دستورند a = a – 1 ; .

توجه داشته باشيد سرعت عمل دو عملگريکاني ++ و -- از سرعت عمل عملگر انتساب (يعني عملگر =) بالاتر است.

مثال 4ـ5 به خروجي قطعه برنامة زير توجه کنيد.

a = 5 ;

printf ("%d %d\n", a , a+ +) ;

printf ("%d", a) ;

خروجی برنامه

5

5

 

6

 

مثال 4ـ6 به خروجي قطعه برنامة زير توجه کنيد.

a = 5 ;

printf ("%d %d\n", a , + +a) ;

printf ("%d", a) ;

خروجي برنامه

6

5

 

6

 

با توجه به دو مثال بالا ملاحظه مي‌‌کنيد که از نظر کاربرد دو دستور + +a ; و a+ + ; با يکديگر تفاوت دارند؛ يعني، در مثال اول با اجراي دستور printf اولي مقدار a (كه مساوي 5 است) چاپ مي‌شود و سپس دوباره همان مقدار a چاپ مي‌گردد و پس از انجام عمل چاپ مقدار آن يك واحد افزايش مي‌يابد. با اجراي دستور printf دوم كنترل به آغاز خط جديد انتقال مي‌يابد، سپس مقدار a كه اكنون برابر 6 است چاپ مي‌شود. در مثال دوم با اجراي دستور printf اولي مقدار a (كه مساوي 5 است) چاپ و سپس دستور + +a اجرا مي‌شود؛ يعني، به a يك واحد افزوده مي‌شود بعد مقدار آن كه برابر 6 شده است چاپ مي‌شود. دستور printf دوم در اينجا نيز مشابه مثال اول عمل مي‌كند. عملكرد دو دستور --a و a-- نيز به همين روش است.

 

ترتيب تقدم اين گروه از عملگرها در جدول 4ـ5 نشان داده شده است.

 

جدول 4ـ5 ترتیب تقدم عملگرها

 -- ++ 

بالاترين تقدم

 ـ

 

* / %

 

- +

 پايين ترين تقدم

 

در مورد عملگرهاي هم‌تقدم ترتيب تقدم از چپ به راست است. درصورت وجود پرانتز، تقدم پرانتز از تقدم همة عملگرها بالاتر است.

مثال 4ـ7‍ با توجه به مقادير داده شده، چند عبارت محاسباتي همراه با مقادير آنها در جدول 4ـ6 نشان داده شده است.

int a = 10 , b = 3 ;

float C = 12.5 , d = 2.0 ;

جدول 4ـ6

مقدار

عبارت محاسباتي

مقدار

عبارت محاسباتي

14.5

C + d

13

a + b

10.5

C - d

7

a - b

25.0

C * d

30

a * b

6.25

C / d

3

a / b

error

C % d

1

a % b

 

مثال 4ـ8 با توجه به اعلان داده شده، چند عبارت محاسباتي همراه با مقادير آنها در جدول 4ـ7 نشان داده شده است.

char c1 = 'A' , c2 = 'E' ;

جدول 4ـ7

مقدار

عبارت محاسباتي

65

c1

134

c1 + c2

139

c1 + c2 + 5

187

5c1 + c2 +

 

در عبارات مورد نظر هر كجا c1 و c2 به كار رفته، به جاي آنها کد اسكي‌ معرف كاراكتر مربوط به آنها به كار برده شده است؛ يعني، در مورد متغير c1 كه معرف كاراكتر A است عدد 65 (کد اسكي‌ حرف A) و در مورد متغير c2 نيز كه معرف كاراكتر E است عدد 69 (کد اسكي‌ حرف E) به كار برده شده است. همچنين ملاحظه مي‌‌کنيد كه عدد 5، با کاراکتر 5 که کد اسكي آن 53 است تفاوت دارد.

 

مثال 4ـ9 با توجه به اعلان داده شده چند عبارت محاسباتي همراه با مقادير آنها در جدول 4ـ8 نشان داده شده است.

int a = 11 , b = -3 ;

جدول 4ـ8

مقدار

عبارت محاسباتي

8

a + b

14

a - b

-33

a * b

-3

a / b

2

a % b

 

در مثال بالا اگر مقدار a برابر -11 و مقدار b برابر 3 باشد، مقدار a / b باز هم برابر -3 مي‌شود، اما مقدار a % b برابر -2 خواهد شد. به طريق مشابه اگر a و b هر دو مقدار منفي (متناظراً -11 و -3) داشتند، مقدار a / b برابر 3 مي‌شد، ولي مقدار a % b باز هم برابر -2 باقي مي‌ماند.

 

عملگرهاي انتساب 

 در زبان C علامت ’=’ به مفهوم مساوي نيست، بلكه عملگر جايگذاري يا عملگر انتساب است. اين عملگر موجب مي‌گردد كه مقدار عملوند سمت راست آن در محل حافظه‌اي كه با عملوند سمت چپ مشخص شده است قرار گيرد. براي مثال دستور K = 123 ; مقدار 123 را به متغير k اختصاص مي‌دهد؛ يعني، آنچه در سمت چپ علامت قرار دارد، نام يك شناسه يا متغير و آنچه در سمت راست آن قرار دارد، مقدار يا value متغير مزبور است. پس دستور بالا به مفهوم k " مساوي 123 " نیست بلکه یعنی "مقدار 123 به k اختصاص داده شود". پس بايد به تمايز بين نام متغير و مقدار متغير توجه كرد.

 حال دستور متعارف K = K+1 ; را درنظر بگيريد. از نظر رياضي اين دستور مفهوم نيست. اما از ديدگاه برنامه‌سازي، دستور مزبور دستور جايگذاري و بدين مفهوم است كه متغيري را كه نام آن K است پيدا كنيد. سپس به مقدار آن يك واحد اضافه کنید و مقدار جديد را به متغيري كه نام آن K است (درواقع به همان متغير) اختصاص دهيد.

به طور كلي در زبان C چندين عملگر مختلف انتساب يا جايگذاري وجود دارد كه همة آنها براي تشكيل يك عبارت انتساب يا عبارت جايگذاري به كار می‌روند و مقدار يك عبارت را به يك شناسه يا متغير اختصاص يا نسبت مي‌دهند. متداول‌ترين عملگر انتساب عملگر ’=’ است. فرم كلي دستور انتساب به صورت زير است.

identifier = expression ;

variable = expression ;

توجه داشته باشيد كه عملگر انتساب، يعني ’=’، كاملاً با عملگر مساوي كه علامت ’= =’ است فرق دارد. عملگر انتساب براي اختصاص و نسبت دادن يك مقدار به يك شناسه يا متغير به كار می‌رود، درحالي كه عملگر تساوي يا برابري، براي تعيين اينكه آيا دو عبارت مقدار يكسان دارند يا نه به كار مي‌رود. پس اين دو عملگر نمي‌توانند به جاي يكديگر به كار روند.

اگر دو عملوند عملگر انتساب از نظر نوع يكسان نباشند، مقدار عبارت يا عملوند طرف راست به طور خودكار به نوع شناسه يا متغير طرف چپ عملگر تغيير مي‌يابد. بنابراين اگر نتيجة عبارت سمت راست عملگر مزبور از نوع float و عملوند سمت چپ آن از نوع int باشد، جزء اعشاري آن حذف خواهد شد.

مثال 4ـ10 با توجه به اعلان داده شده، نمونه‌‌هايي از دستور انتساب در جدول 4ـ9 نشان داده شده است.

int a , b = 5 ;

 

جدول 4ـ9

مقدار

عبارت

مقدار

عبارت

-25

a = -25.9 ;

5

a = 5.56 ;

5

a = 2*b /2 ;

2

a = b/2 ;

4

a = 2*(b/2) ;

120

 ;xa =

-3

-520-aa =

48

;0a =

47

3/’B-Ea =

32

 a =

 

ملاحظه مي‌کنید كه در عبارات بالا در مورد كاراكترها، کد اسكي آنها جايگزين مي‌شود. مثلاً در آخرين عبارت، به جاي E و B به ترتيب مقادير 69 و 66 قرار مي‌گيرد و در نتيجه

69 - 66/3 = 69-22 = 47.

همچنين در عبارت a = 2 * (b/2) ; از آنجايي که پرانتز تقدم بالاتري دارد، اول مقدار b/2 محاسبه مي‌شود كه نتيجة آن برابر 2 خواهد شد و سپس نتيجة حاصل در 2 ضرب مي‌شود و بنابراين نتيجة نهايي برابر 4 خواهد شد.

 

در زبان C مي‌توان دستورهاي انتساب چندگانه به كار برد مانند a = b = 5 ;. شکل كلي اين گونه دستورهاي انتساب به صورت زير است.

V1 = V2 =... = Vn = expression ;

 در چنين حالتي، تقدم عمل انتساب از راست به چپ است. بنابراين دستور a = b = c = 5 ; معادل
a = (b = (c = 5)) ; است.

در زبان C، مي‌توان عملگر انتساب را با عملگرهاي محاسباتي تركيب كرد و عملگرهاي+ = ، -، = ، *= ، /= ،  %= را به دست آورد که آنها را عملگرهاي محاسباتي انتساب  نامند و در جدول 4ـ10 نشان داده شده‌‌اند.

 

جدول 4ـ10 عملگرهاي محاسباتي انتساب

عملگر

نام عملگر

دستور انتساب

معادل

+ =

انتساب جمع

a += b ;

a = a+b ;

 -=

انتساب تفريق

a -= b ;

a = a-b ;

*=

انتساب ضرب

a *= b ;

a = a*b ;

/=

انتساب تقسيم

a /= b ;

a = a/b ;

%=

انتساب باقيماندة تقسيم

a %b ;

a = a%b ;

 

مثال 4ـ11 اگر متغيرهاي a و b از نوع int باشند و مقدار آنها به ترتيب برابر 10 و 5 باشد، دستور a += b ; معادل دستور a = a + b ; است؛ يعني، a = 15.

 

عملگرهاي يكاني

 زبان C مجموعه‌ای عملگر دارد كه فقط روي يك عملوند عمل مي‌كنند و آنها را عملگرهاي يكاني يا تك‌عملوند ‌نامند. اين عملگرها اغلب در جلوي عملوند خود قرار مي‌گيرند. متداول‌ترين عملگر تك‌عملوندي علامت منفي است كه در جلوي يك مقدار ثابت عددي، يا يك متغير و يا يك عبارت قرار مي‌گيرد.

مثال 4ـ12 در زير نمونه‌‌هايي از عملگر منهاي يکاني نشان داده شده است.

–915 – 3.1415 – 10.25 –2e –4

–sum – (x+y) –3 * (x + y)

اگر جلوي مقادير علامتي قرار نگيرد، علامت آنها مثبت در نظر گرفته مي‌شود، ولي به هرحال مي‌توان جلوي آنها يك علامت "+" قرار داد كه در اين صورت "+" را كه فقط داراي يك عملوند است جمع يكاني نامند.

 

مثال 4ـ13 در زير نمونه‌‌هايي از عملگر جمع يکاني نشان داده شده است.

+915 +3.1415 +10.25 +2e – 4

+sum +(x+y) +3 * (x + y)

اگر عملگر مزبور به كار نمی‌رفت، مقدار اقلام بالا باز هم تغيير پيدا نمي‌كرد و به همين دليل كاربرد اين عملگر متداول نيست.

از عملگرهاي تك‌عملوندي ديگر عملگر "cast" است كه آن را عملگر تبديل نوع نيز گويند و در خودآزمایی 2 فصل 3 بررسي کردیم.

يكي ديگر از عملگرهاي تك‌علموندي عملگر sizeof است كه بزرگي عملوند خود را برحسب بايت برمي‌گرداند. عملوند اين عملگر معمولاً با نوع داده همراه است، مانند

int , unsignded int , long , float , unsigned

 و مشابه آنها، كه در اين صورت عملگر مزبور بزرگي اين نوع ساختمان داده‌هاي استاندارد را برمي‌گرداند، يا اينكه عملوند آن عبارت است كه در اين صورت بزرگي آن عبارت را برحسب بايت برمي‌گرداند. جدول 4ـ11 نحوة كاربرد اين عملگر را نشان مي‌دهد.

 

جدول 4ـ11 کاربرد عملگر sizeof

نام عملگر

نشانه 

شکل

نوع عمل

بزرگي (sizeof)

sizeof

sizeof (t)

sizeof x

بزرگي نوع داده t يا عبارت

x را برحسب بايت برمي‌گرداند.

 

مثال 4ـ14 به دستورهای زير توجه کنید.

k1 = sizeof (char) ;

k2 = sizeof (short) ;

k3 = sizeof (float) ;

k4 = sizeof (int);

k5 = sizeof (int *) ;

k6 = sizeof (double) ;

با اجراي دستورهاي بالا مقادير k3 , k2 , k1 به‌ترتيب برابر 4 , 2 , 1 خواهد بود كه به‌ترتيب معرف طول نوع داده char و short و float است. در مورد k4 نيز اگر نوع int گونه‌اي از زبان C به‌ طول 2 بايت باشد، مقدار k4 برابر 2 خواهد بود و اگر به طول 4 بايت باشد، مقدار آن 4 خواهد بود. k5 نيز بزرگي يك اشاره‌گر به يك داده از نوع integer است كه برحسب ماشين مورد نظر ممكن است 4 بايت و يا عدد ديگري باشد.

 

مثال 4ـ15 درنتيجة اجراي دو دستور زير

float a ;

printf ("%d%d", sizeof a , sizeof (float)) ;

مقادير 44 نمايش داده خواهد شد، كه 4 اول معرف طول متغير a است (كه از نوع float است) و 4 دوم معرف طول نوع داده float است. درضمن ملاحظه مي‌گردد كه اگر عملوند اين عملگر معرف نوع داده مانند int، float باشد، عملوند در داخل پرانتز محصور مي‌گردد و اگر معرف متغير (مانند a در مثال بالا) باشد، نياز نيست كه در درون زوج پرانتز قرار داده شود.

 

يكي ديگر از عملگرهاي متداول تك‌عملوندي عملگر منطقي "!" به مفهوم نقيض است كه در عملگرهاي منطقي توضيح می‌دهیم.

 

 

سیستم هاي عامل  جلسه چهارم

فصل چهارم

نخها، چندپردازشی متقارن و ریز هسته ها

فرآیندها و نخ ها:

فرآیند دو خصوصیت زیر را دارد:

 

- تملک منبع: ( فرآیند یا وظیفه )

به هر فرآیند یک آدرس مجازی برای نگهداری تصویر فرآیند می دهد.

 

- توزیع وقت فرآیند: ( نخ یا فرآیند سبک وزن )

فرآیند مسیر اجرای یک یا چند برنامه است و توسط سیستم عامل مورد زمان بندی و توزیع قرار می گیرد.

 

چند نخی:

به قابلیتی از سیستم که امکان اجرای چند نخ را حمایت می کند.

 

تک نخی: به رویکرد سنتی یک نخ اجرا در هر فرآیند .

 

مانند MS-DOS از فرآیند تک کاربره و از یک نخ حمایت می کند.

 

UNIX از چند کاربر ولی تنها از یک نخ حمایت می کند.

 

موتور زمان اجرا یjava نمونه سیستمی از یک فرآیند چند نخی است.

در سيستمهاي عامل هاي زیرازسيستم جند نخي استفاده شده است

  Windows NT ; solaris ; Mach ; os/2

موارد همراه فرآیند:

فضای آدرس مجازی که تصویر فرآیند را در بر دارد.

دسترسی حفاظت شده به فرآیند.

حالت اجرای نخ.

متن ذخیره شده.

پشته اجرا.

مقداری حافظه ایستا برای متغییرهای محلی هر نخ.

دسترسی به منابع و حافظه فرآیند.

مقاسیه فرآیند تک نخی و چند نخی:

فرآیند چند نخی:

یک بلوک کنترل فرآیند،فضای آدرس فرآیند،برای هر نخ پسته جدا گانه و بلوک کنترل جدا گانه و ... وجود دارد.

تمام نخ های فرآیند ،در حالت و منابع آن فرآیند شریک هستند.

در یک فضای آدرس هستندوبه داده های یکسانی دسترسی دارند.

فرآیند تک نخی:

شامل بلوک کنترل ،فضای آدرس فرآیند،فضای آدرس فرآیند،پشته کاربر،هسته یرای مدیریت و ... است.

حالات نخ :

ایجاد (زایش):

با ایجاد یک فرآیند ،نخ هم ایجاد می شود.

مسدود شدن:

تا بروز حادثه نخ مسدود می شود.

رفع مسدود بودن:

اتفاق حادثه لازم.

پایان:

با تکمیل یک نخ ،متن ثبات و پشته هایش آزاد می شود.

همگام سازی نخ ها

تمام نخ ها یک فرآیند در فضای آدرس و در منابع دیگر شریک هستند به همین تغییر در هر یک از منابع توسط یک نخ در محیط سایرین تغییر ایجاد می کند لذا همگام سازی فرآیند ها ضروری است.

 

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

 

1-page maker تعدادشیء هایی که در روی یک صفحه است را محدود نکند.

 

2-استفاده از نخ جداگانه،امکان قطع کردن رسم را در اختیار می گذارد.

 

نخهای سطح کاربر

کار مدیریت توسط کاربر انجام می شود.

هسته از وجود این نخ ها بی اطلاع است.

از کتابخانه ها برای مدیریت نخها استفا ده می کنند.

هر کاربردی با یک نخ شروع می شود و شروع اجرایش از همان نخ است.

هرگاه این نخ در حال اجرا باشد می توان نخ جدیدی را ایجاد کرد که به احضار کتابخانه منجر می شود.

الگوریتم زمانبندی آن ایجاد می شود تا آماده اجرا می شود.

نخهای سطح هسته

تمام کار مدیریت نخ توسط هسته انجام می شود.

 

کد مدیریت در ناحیه کاربرد وجود ندارد.

 

یک نخ واسط برنامه سازی کاربردی به نخ هسته وجود دارد.

امتیاز نخ سطح کاربر به سطح هسته:

تعویض نخ به حالت ممتاز نیاز ندارد.

 

کاربرد می تواند زمانبندی خاص داشته باشد

 

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

 

اشکال نخ های سطح کاربر به سطح هسته:

اکثر فراخوانی های سیستم مسدود کننده هستند.

 

کاربرد چند نخی نمی تواند از امتیازات چند پردازشی استفاده کند.

رفع اشکال نخ های سطح کاربر به سطح هسته

نوشتن کاربردها به صورت فرآیندهای متعدد به جای نخ های متعدد که امتیاز اصلی نخ ها را از بین می برد.

 

راه حل غلبه بر نخ های مسدود کننده : استفاده از روشی به نام جلد کردن که هدف آن تبدیل فراخوانی سیستم از مسدود کننده به غیر مسدود کننده.

امتیاز نخ های سطح هسته:

 (تمام کارمدیریت نخ توسط هسته انجام می شود.)

 

هسته می تواند به صورت هم زمان،نخ های چند گانه یک فرآند واحد را روی پردازنده های متعدد زمانبندی کند.

 

اگر نخی در یک فرآیند مسدود شد ،هسته می تواند نخ دیگری از آن فرآیند را بار گئاری کند.

 

<خود روالهای هسته نیز می تواند چند نخی باشد.

 

عیب اصلی نخ های سطح هسته:

انتقال کنترل از یک نخ به نخ دیگر در داخل یک فرآیند واحد نیز نیازمند تغییر به حالت هسته است.

 

رویکردهای ترکیبی:

ترکیبی از امکانات نخ سطح کاربر و نخ سطح هسته را فراهم می کند. مانند solaris .

ایجاد نخ به طور کامل در فضای کاربرد در داخل یک کاربرد صورت می گیرد.

به تعداد (کمتر یا مساوی) از نخ های سطح هسته نگاشته می شود.

نخ ها به موازات هم روی پردازنده های متعدد اجرا می شود.

یک فراخوان مسدود کننده کل سیستم را مسدود نمی کند.

رابط بین نخ ها و فرآیندها:

نخها:فرآیندها                   شرح             مثال سیستم های عامل

یک به یک        هر نخ اجرا یک فرآیند                 unix

چند به یک        یک فرآیند یک فضای آدرس     Windows NT

     

یک به چند       یک نخ از یک محیط به دیگر رود       ) Ra(clouds

چند به چند      ترکیب چند به یک ویک به چند TRIX          

 

روش های پیاده سازی رابط چند به چند:

تمام برنامه به صورت یک فرآیند واحد پیاده سازی شود.

 از نظر مدیریت حافظه اشکالاتی دارد.

برنامه اصلی و زیر برنامه ورودی /خروجی به صورت دو فرآیند جداگانه پیاده سازی شوند. مستلزم سر بار اضافی است.

برنامه اصلی و زیر برنامه ورودی / خروجی به عنوان یک فعالیت و به صورت یک نخ پیاده سازی شود. ولی یک فضای آدرس ویکی برای زیربرنامه ورودی/خروجی ایجاد گردد.  (بهترین روش است.)

معماری چند پردازشی متقارن:

FLYNN گروههای زیر را پیشنهاد کرده است:

 

جریان دستورالعمل واحد و داده های واحد: یک پردازنده دستورات واحدی را برای داده ها دریافت می کند.

 

جریان دستورالعمل چند گانه و داده های واحد: اجرای هم زمان تعدادی از دستورات پردازشی.

جریان دستورالعمل چند گانه و داده های چند گانه: اجرای هم زمان چنددستور بر روی چند داده.

 

جریان دستورالعمل واحد و داده های چند گانه: اجرای هم زمان چنددستور بر روی داده.

 

سازمان چند پردازنده متقارن:

هر یک واحد کنترل ،واحد حساب و منطق و ثباتهای خاص خود را دارند.

 

به یک حافظه اصلی مشترک دسترسی دارد.

 

پردازنده ها از طریق حافظه با یکدیگر در ارتباط هستند.

 

امکان تبادل مستقیم وجود دارد.

هر پردازنده از طریق یک گذرگاه مشترک به یک حافظه اصلی متصل است.

امکان دسترسی به بلوک ها مهیا است.

 

تغییر در یک حافظه پنهان سبب تغییر در حافظه پنهان دیگر می شود.(وابستگی حافظه پنهان)

 

با آن در سخت افزار بر خورد می شود.

ملاحظات طراحی سیستم عامل چند پردازنده ای:

هم زمانی فرآیند ها یا نخ ها: توسط هر یک از پردازنده ها انجام شود .

 

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

همگام سازی:: ابزاری است برای تنظیم انحصار متقابل و تنظیم حادثه ها.

 

مدیریت حافظه: باید سخت افزار مناسب را بهره جوید.

 

قابلیت اطمینان و تحمل خرابی: در برخورد با خرابی با ید اقدام کند.

 

ریز هسته ها:

ریز هسته سیستم عامل کوچکی است که بنیان لازم برای گسترشهای مولفه ای را به وجود می آورد.

 

رویکرد ریز هسته با به کارگیری آن در سیستم عامل Mach مورد توجه عمومی قرار گرفت.

 

سیستم عامل windows NT  نیز داردای ریز هسته است که مدعی قابلیت حمل و مولفه ای بودن است.

 

معماری ریز هسته:

در این سیستم های عامل یکپارچه، مجازا هر رویه ای می توانست هر رویه دیگری را فراخوانی کنند.

 

در سیستم عامل های لایه ای،عمل ها به صورت سلسله مراتبی طراحی شده است و تنها سطوح مجاوربا یکدیگر محاوره داشته باشند.

 

فلسفه ریز هسته این است که تنها اعمال کاملا اصلی سیستم عامل باید در هسته باشد.

 

کاربردها روی ریز هسته ساخته شده.

 

بخشهایی از سیستم عامل که درخارج ریز هسته قرار دارند به صورت فرآیند خدمتگذار پیاده سازی می شوند.

بر مبنای برابری و از طریق ریز هسته با هم ارتباط برقرار می کنند.

 

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

مزایای ریز هسته:

واسط یکنواخت. (برای درخواستهای فرآیند)

 

قابلیت گسترش. (مجاز دانستن افزایش خدمات)

 

قابلیت انعطاف. (به قابلیت گسترش مربوط است)

 

قابلیت حمل. (تمام کد مربوط به ویژگی های خاص پردازنده در هسته وجود دارد)

قابلیت اطمینان.

 

حمایت سیستم توزیعی: (توسط سیستم عامل توزیعی)

 

سیستم عامل شیء گرا.

کارایی ریز هسته:

ریز هسته خیلی کوچک سبب شده که کاهش کارایی را حذف و انعطاف و فابلیت اطمینان را بهتر کند.

 

به دلیل اینکه ریز هسته های مختلف طیفی از اعمال و اندازه را نشان می دهند، نمی توان هیچ قاعده محکم و سریعی در مورد اعمالی که ریز هسته باید ارائه کند و ساختار پیاده سازی آن اظهار داشت.

طرح ریز هسته:

ریز هسته مستقیما به سخت افزار بستگی دارد و اعمال زیر را حمایت می کند:

 

 1- مدیریت حافظه اولیه.

 2- ارتباط بین فرآیندها.

 3- ورودی / خروجی.

 4- مدیریت وقفه.

سه روش زیر برای حمایت مدیریت حافظه مجازی و صفحه بندی خارجی:

اهدا: هر فرآیند می تواند تعدادی از صفحات خود را به دیگری دهد.

نگاشت: یک فرآیند می تواند هر یک از صفحات خود را به فضای دیگری بنگارد.

مطالبه: هر صفحه که قبلا استفاده شده را مطالبه کند.

 

ارتباط داخلی فرآیند:

پیام شکل اصلی ارتباط بین فرایندها یا نخهاست.

 

 1-سرآمد => فرآیندهای گیرنده –فرستنده

    را مشخص می کند.

پیام=>

  2-بدنه => اشاره گری به بلوک داده ها

   یا بعضی اطلاعات کنترلی

 

مدیریت ورودی و خروجی و وقفه ها:

اداره وقفه های سخت افزاری به صورت پیام و درگاه های ورودی و خروجی در فضاهای آدرس میسر می شود.

 

ریز هسته وقفه را تشخیص می دهد ولی آنها را اداره نمی کند.

 

پیامی را برای فرآیند سطح کاربر مربوط به آن وقفه تولید می کند.

 

مدیریت نخ و چند پر دازشی متقارن در Windows NT
ویژگیهای فرآیندهای NT عبارتند از:

 

فرآیند NT به صورت شیءپیاده سازی شده اند.

 

هر فرآیند قابل اجرا،می تواند حاوی یک نخ یا بیشتر یاشد.

 

هم شیء های فرآیند و هم شیء های نخ ،دارای راهکارهای پیش ساخته همگام سازی هستند.

به هر فرآیند مجموعه بلوک های حافظه مربوط است.

 

به هر فرآیند یک نشانه امنیتی دست یابی نسبت داده می شود.

 

فرآیند شامل یک جدول شیء هم هست که دستگیره های به دیگرشیءهای شناخته شده این فرایند دارد. برای هر یک از نخهای که در این شیء هست یک دستگیره وجود دارد.

اگر فرآیندی برای باز کردن چنین دستگیرهای تلاش کند، سیستم امنیتی مجاز بودن آن ودر نتیجه امکان تغییر خصوصیا تش را تعیین می کند.

 

فرآیند نمی تواند مستقیما ساختار ها را تغییر دهد.

 

فرایند شامل یک جدول شیء است .

 

خصوصیات شیء فرایند

مقدار یکتای فرآیند

توصیف چه کسی به این فرآیند....

برای نخ های این فرآیند

مجموعه پردازنده های پیش فرض

حداکثر منابع

مجموع زمان اجرا نخ

متغییر و... ثبت شده توسط فرآیند

تعداد و نوع عملیات انجام شده

کانالهای ارتباطی بین فرایندها

دلیل پایان یافتن یک فرآیند

شناسه فرآیند

توصیف امنیت

اولویت پایه

وابستگی فرآیند به پردازنده

حداکثر سهم

زمان اجرا

شمارنده های I/O

شمارنده عملیات حافظه مجازی

درگاههای استثنا/اشکالزدایی

وضعیت خروج

 

خصوصیت شیء نخ :

شناسه نخ: مقدار یکتای نخ.

متن نخ: مجموع مقادیر نخ و....

اولویت پویا: اولویت اجرای نخ در هر لحظه.

اولویت پایه: کمترین اولویت نخ.

وابستگی نخ به پردازنده: پردازتده هایی که می توان در روی نخ انجام شود.

زمان اجرای نخ:  زمان اجرای آن در هسته و در حالت کاربرد.

وضعیت هشدار:  فراخوانی رویه نا همگام .

شماره تعلیق :  تعداد دفعات تعلیق اجرای نخ.

نشانه جعل هویت:  دستیابی موقت .

درگاه پایان: یک کانال ارتباطی بین فرآیندها.

وضعیت خروجی نخ: دلیل پایان یافتن نخ.

 

حالت های نخ:

آماده: برای اجرا زمانبندی گردیده.

جانشین: برای هر پردازنده خاص ،یک نخ جانشین

اجرا: با تعویض به مرحله اجرا می رود.

انتظار: یک نخ موقعی به حالت اجرا می رود که:

  1- روی حادثه مسدود کردد.

  2- به منظور همگام سازی ،داوطلبانه منتظر شود.

  3- توسط یک زیر سیستم محیط وادار به تعلیق گردد.

 

انتقال: منابع فراهم نیست.

 

پایان: توسط خودش یا پدر.

مدیریت نخ و جند پردازشی متقارن در Solaris

فرآیند: همان فرآیند معمولی

 

نخ های سطح کاربر: به وسیله کتابخانه ای ار نخها در فضای آدرس یک فرآیند پیاده سازی می شوند.

 

فرآیند سبک وزن: نگاشتی بین نخ های سطح کاربر و نخ های هسته در نظر گرفت.

 

نخ های هسته: موجودیتهای بنیادی.

اجرای نخ:

همگام سازی: جهت هما هنگ کردن فعالیت.

تعلیق : معلق شدن و منتظر درخواست.

قبضه : عملی که موجب به اجرا در آمدن فعالیت اولویت دار شود.

واگذاری.

راه حل solaris برای اداره وقفه

برای اداره وقفه ها solaris مجموعه ای نخ های هسته را به کارگرفته است.

 

با استفاده از اولیه های انحصار متقابل ،هسته دسترسی به ساختمان داده ها را کنترل می کند.

 

اولویت وقفه ها ،از اولویت دیگر نخ های هسته بیشتر است.

 

 

معماری کامپیوتر جلسه سوم

فصل دوم
معماری مجموعه دستورالعملها

مراحل اجرای یک دستورالعمل

واکشی دستورالعمل: برداشت دستورالعمل بعدی از حافظه

کدبرداری از دستورالعمل: بررسی دستورالعمل برای مشخص شدن اینکه:

  چه عملی باید توسط دستورالعمل انجام گیرد (به عنوان مثال جمع)

  چه عملوندهایی مورد نیازند، و نتایج باید کجا قرار گیرند.

واکشی عملوندها: عملوندها برداشت می شوند.

اجرا: اجرای عملیات بر روی عملوندها

بازنویسی نتیجه: نوشتن نتیجه در محل مخصوص

دستورالعمل بعدی: تعیین اینکه دستورالعمل بعدی از کجا گرفته شود.

 

چه چیزی در یک ISA(معماری مجموعه دستورالعمل) مشخص می شود؟

کدبرداری از دستورالعمل: اعمال و عملوندها چگونه تعیین می گردند؟

واکشی عملوندها: عملوندها ممکن است کجا باشند؟ چه تعداد؟

اجرا: چه اعمالی می تواند انجام گیرد؟ چه نوع داده و چه اندازه هایی؟

بازنویسی نتایج: نتایج کجا نوشته می شوند؟ چه تعداد؟

دستورالعمل بعدی: دستورالعمل بعدی را چگونه می توان انتخاب نمود؟

 

یک ISA ساده:حافظه به حافظه

چه عملیاتی می تواند اجرا شود؟ عملیات پایه ریاضی (برای این لحظه)

چه نوع داده و چه اندازه ای؟ نوع داده صحیح 32 بیتی (integer 32)

عملوندها و نتایج کجا می توانند قرار گیرند؟ حافظه

چه تعداد عملوند و نتیجه؟ 2 عملوند، 1 نتیجه

اعمال و عملوندها چگونه مشخص می شوند؟

OP DEST,SRC1,SRC2  عمل مقصد,منبع1,منبع2

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

 

مدل حافظه

حافظه را به عنوان یک آرایه بزرگ از n عدد صحیح در نظر بگیرید، که بوسیله اندیس قابل دستیابی است.(حافظه با دستیابی تصادفی موسوم به ram)

به عنوان نمونه ، M[1] شامل مقدار 3 است. ما می توانیم در این مکانها نوشتن و خواندن را انجام دهیم. این مکانها صرفا در دسترس ماست. تمام مکانهای “مجرد” (از قبیل متغیرها در C) باید مکانهایی را در M تعیین کنند.

 

Address    Contents

14

13

99

.

.

.

0

 

0

 

1

 

2

.

.

.

N - 1

 


ترجمه کد ساده

 کد C مفروض

 

  A = B + C;

 

ما می توانیم تصمیم بگیریم که متغیر A مکان 100 ، B مکان 48 و C مکان 76 را

 

 اشغال می کند. کد بالا را به معادل کد اسمبلی آن تبدیل می کنیم:

 

 ADD M[100], M[48], M[76]

 

چگونه می توانیم عبارت زیر را تبدیل کنیم  

 A = (B + C) * (D + E);

 

استفاده از یک مکان موقتی

فرض کنید ما A را در 100، B را در 48 ، C را در 76، D را در 20 و E را

 در32 قرار می دهیم.

 

 اکنون یک مکان بدون استفاده را انتخاب می کنیم (مثلا 84)

 

 

 ADD M[100], M[48], M[76] # A = B + C

 ADD M[84], M[20], M[32] # temp = D + E

 MUL M[100], M[100], M[84] # A = A * temp

 

 

مشکلات در معماری حافظه به حافظه

حافظه اصلی خیلی کندتر از مدارات محاسباتی است

 - این مطلب از سال 1950 تا 2003 درست است!

خانه های زیادی برای مشخص نمودن آدرسهای حافظه گرفته می شوند.

معمولا نتایج یک یا دو دستورالعمل بعد مورد استفاده قرار می گیرند.

 

به خاطر داشته باشید: بخشهای اشتراکی را سریعتر نمائید!

راه حل: نتایج میانی یا موقتی را در حافظه های سریع و نزدیک به واحد محاسبه ذخیره نمائید.

 

ماشینهای مبتنی بر انباشتگر(Accumulator)

یک ماشین انباشتگر، یک بافر پرسرعت واحد (مانند یک مجموعه از D latchها یا فلیپ فلاپها ، هر کدام برای یک بیت داده) را نزدیک واحد محاسبه منطق نگهداری می کند.

در ساده ترین حالت، فقط یک عملوند می تواند مشخص گردد; انباشتگر به صورت مجازی به مفهوم “OP Operand” می باشد یعنی:

   acc. = acc. OP operand

 

 Example:

 LOAD M[48]   # Load B into acc.

 ADD M[76]  # Add C to acc. (now has B+C)

 STORE M[100] # Write acc. To A

 

 LOAD M[20]   # Load D into acc.

بارگذاری D در انباشتگر

 ADD M[32] # Add E to acc. (now has D+E)

جمع E با انباشتگر.(اکنون داریم D+E)

 STORE M[100] # Write acc. To A

نوشتن محتوای انباشتگر در A.

 LOAD M[48]  # Load B into acc.

بارگذاری Bدر انباشتگر.

 ADD M[76]  # Add C to acc. (now has B+C)

جمع نمودن Cبا انباشتگر.(اکنون داریم B+C)

 MUL M[100] # Multiply A to acc.

ضرب کردن A در انباشتگر.

 STORE M[100] # Write (B+C) * (D+E) to A

نوشتن نتیجه در A

 

ضعف ماشینهای مبتنی بر انباشتگر

هنوز نیازمند ذخیره سازی بسیاری مقادیر موقتی و میانی در حافظه می باشیم

 

در واقع انباشتگر فقط برای یک ترتیب از محاسبات که در آن نتیجه یکی، ورودی برای بعدی است، مفید می باشد.

 

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

یک طراحی ساده، و بنابراین محبوب ، مخصوص برای

 - کامپیوترهای اولیه

 - میکروپروسسرهای اولیه (4004 ، 8008)

 - مدلهای Low-end (ارزان)

پیشنهادات برای ماشینهای مبتنی بر انباشتگر

اگر منابع سخت افزاری بیشتری در دسترس است، مکانهای ذخیره سازی سریع را در کنار انباشتگر قرار دهید:

ماشینهای مبتنی بر پشته

ماشینهای مبتنی بر ثبات

 - خاص منظوره

 - عام منظوره

 

ماشینهای مبتنی بر پشته

ایده: یک ستون از مکانهای ذخیره سازی سریع دارای یک بالا(top) و یک پایین (bottom)

یک دستورالعمل فقط از مقدار بالای پشته(top) قابلیت برداشت دارد، یا شاید دو یا سه مقدار به عنوان بالای پشته در نظر گرفته شوند.

ما می توانیم مقادیر جدید را در بالای پشته قرار دهیم (“push”) یا از بالای پشته برداریم (“pop”) اما فقط همین. ما نمی توانیم به مکانهایی در زیر پشته دسترسی داشته باشیم مگر اینکه هر چیز بالای آن را خارج کنیم.

  

Address Contents

14

3

99

.

.

.

0

Top

 

2nd from top

 

3rd from top

.

.

.


bottom


 

 

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

اعمال اصلی شامل:

بارگذاری: برداشت مقدار از حافظه و قرار دادن آن بر روی پشته

 

ذخیره سازی: برداشت مقدار از پشته و ذخیره آن در حافظه

 

حسابی: خارج کردن یک یا دو مقدار از پشته؛ قرار دادن نتیجه روی پشته

 

دونسخه ای (Dup): گرفتن مقدار از بالای پشته بدون حذف آن؛ قرار دادن یک کپی جدید از آن در روی پشته (چرا این عمل کاربردی است؟)

 

 

ماشین مبتنی بر پشته که  A=(B+C)*(D+E) را انجام می دهد

Image and video hosting by TinyPic

 

ماشین مبتنی بر پشته

Image and video hosting by TinyPic

کاربرد ماشینهای مبتنی برپشته

بسیاری از کامپیوترهای اولیه

واحد ممیز شناور در 8086 (تقریبا)

ماشین مجازی جاوا

 

ماشینهای مبتنی بر ثبات

ایده:به کار بردن مکانهای ذخیره سازی زیاد(”ثباتها“)نزدیک انباشتگر

 ثبات ها نام / شماره های مشخصی دارند که می توانند به جای حافظه استفاده می شوند

دستیابی نسبت به حافظه اصلی

  خیلی سریعتر است

(1-2 CPU cycles vs. ~ 100 CPU cycles on PC)_ 

 

ثبات ها نسبت به مکان های حافظه خیلی نزدیک ترند

MIPS_  32 تا ثبات 32 بیتی دارد

_ثبات های کمتر آدرس های کوچکتر وتعداد بیتهای کمتر برای نام گذاری آنها

_منابع استفاده کمتر است و باید با دقت ار آنها استفاده شود!

 

ثباتهای عام منظوره_خاص منظوره

یک ثبات خاص_ منظوره برای اهداف مشخص استفاده می شود و ممکن است عملیاتی را که استفاده می شود را محدودکند

طراحی آسانتر سخت افزار: ثبات را در جایی که دقیقا نیازاست قرار بده

به منظور استفاده موثر برای کامپایلر خیلی سخت تر است.

یک ثبات عام منظوره می تواند دربیشتر مسیرهای عملیاتی استفاده شود بنابراین مسیریابی خیلی مشکل است

 

ثبات های خاص منظوره The z_80 cpu 

هفت تا ثبات 8 بیتی: (می توانند جفت شوند A,B,C,D,E,H,LBC,DE,HL).

سه تا ثبات 16 بیتی:62 PC (شمارنده برنامه).

جمع ,تفریق, شیفت تنها با A می تواند انجام شود (شمارنده 8 بیتی ).

افزایش و کاهش می تواند با تمام ثبات ها وجفتهای ثبات انجام شود .

می توانند از حافظه  آدرس (HL)را واکشی کنند و در هر8بیت ثبات قرار دهند.

یک واکشی از آدرس(BC)یا(DE)تنها می تواند به Aبرود.

واکشی ها از (BC),(HL)و (IX) تعداد چرخه های متفاوتی می گیرد

چه کسی می خواهد برای این یک کامپایلر بنویسد؟

 

 

ثبات عام منظوره ماشین های (GPR)

 MIPS(وپردازشگرهای مشابه)32تا ثبات عمومی دارند (GPRs)هر32بیتlongهستند.همه می توانند نوشته یا خوانده شوند به جز ثبات صفر که همیشه صفراست ونمی تواند تغییر کند.زمان دستیابی به ثبات ثابت است.

 

Address Contents

0

3

99

.

.

.

14

$0

 

$1

 

$2

 

 

 

$31


ماشین GPR A=(B+C)*(D+E) راانجام می دهد

ADD  $1 M[48], M[76] #R1 = B + C

 

ADD $2 M[20], M[32] #R2 = D + E

 

MUL  M[100], $1, $2 #A = R1 * R2

 

اندازه های داده های متفاوت

چطورباید با اندازه های داده های متفاوت رفتارکنیم؟

انتخاب یک اندازه برای یک واحد ذخیره شده در یک آدرس تنها

 

ذخیره کردن داده بزرگ در یک مجموعه از مکانهای همجوارحافظه

ذخیره کردن داده کوچک در یک مکان:

use shift & mask ops

امروزه تقریبا همه ماشینها(شاملMIPS)دارای آدرس دهی بایتی

 “Byte_Adressable”هستند هر مکان آدرس دهی ،  در حافظه 8بیتی نگهداری می شود.

 

حافظهMIPS

روی یک ماشین قابل آدرس دهی بایتی ازقبیلMIPS اگرما بگوییم یک کلمه (32بیت) درآدرس80 ذخیره شده به این معنااست که مکانهای 80تا83را اشغال کرده.(کلمه بعدی از84 شروع می شود).

 

به طور نرمال بارگذاری وذخیره چندین بیت باید ”تنظیم“ شود.آدرس nبایتی بارگذاری یا ذخیره باید مضربی ازnباشد.برای نمونه نیم کلمه تنها در آدرسهای زوج ذخیره میشود.

 

MIPS اجازه بارگذاری شدن و ذخیره شدن برای استفاده مخصوص دستورالعمل ها را نمی دهند اما آنها ممکن است کندترشوند(بیشتر پردازشگرها این را برای همیشه اجازه نمی دهند!).

 

Byte-Order (“Endianness”)

برای یک داده چند بایتی کدام قسمت به کدام بایت می رود؟

اگر$1محتوی1000000(F4240H )و ما آن را در آدرس 80 ذخیره کنیم :

در یک ماشین “Big Endian” “Big End” به آدرس 80 می رود

در یک ماشین “Little Endian” از سوی دیگر است.

Image and video hosting by TinyPic

 

Big-Endian vs. Little-Endian

ماشینهای Big Endian:MIPS,SPARC,68000

ماشینهای :Little Endianبیشتر پردازشگر های intel,Alpha,Vax

سازگاری مشکلات انتقال چندین بایت داده بین ماشینهای Big Endian,Little Endian

 

 


 

فقط نخونینو برین.یه نظری هم بدین ما به ادامه کار یکم دلگرم بشیم.این همه بازدید کننده میان و میرن هیشکی نظر نمیده ):