PDA

View Full Version : سوال: وظیفه تجزیه و تحلیل کد ها (اسکی - دو دویی - یونیکد و ...) در کامپیوتر به عهده چه کسی است ؟



tajerman
یک شنبه 07 آبان 1391, 12:23 عصر
با سلام
همه داده ها در کامپیوتر به صورت دو دویی ذخیره و خوانده می شوند .
حالا سوال من این است که همه داده ها به صورت اعداد دو دویی عادی ذخیره میشوند ؟
برای ایجاد حروف چه کار میکنند ؟
وظیفه تجزیه و تحلیل کد ها با کیست ؟ (سی پی یو یا سیستم عامل)
از کجا بین کد و یا عدد باینری تفاوت ایجاد میشود و این تفاوت را سی پی یو از کجا میفهمد ؟

IamOverlord
یک شنبه 07 آبان 1391, 15:22 عصر
سلام.

حالا سوال من این است که همه داده ها به صورت اعداد دو دویی عادی ذخیره میشوند ؟
بله... فقط روشن یا خاموش! ولی واحد حافظه بیت نیست، بایت هست.

برای ایجاد حروف چه کار میکنند ؟
بستگی داره! مثلا برای ۲۵۶ کاراکتر اسکی (البته یکیش null هست) از ۸ بیت استفاده می کنن یعنی ۱ بایت. ۱ بایت هم ۲۵۶ حالت داره. هر حالت یه کاراکتر رو مشخص می کنه. در مورد شکلشون هم این به عهده ی برنامه هاست که مثلا روی مانیتورها چه طوری نمایششون بدن.

وظیفه تجزیه و تحلیل کد ها با کیست ؟ (سی پی یو یا سیستم عامل)
CPU کد ها رو اجرا می کنه. سیستم عامل خودش برنامه ایه که اجرا می شه ولی می تونه در اجرای کد های دیگه تاثیر بذاره. در Protected Mode (http://en.wikipedia.org/wiki/Protected_mode) چهار Ring (http://en.wikipedia.org/wiki/Ring_(computer_security)) وجود داره و CPU امکان Multitasking رو مهیا می کنه که در حالت Real Mode نبود. سیستم عامل از این امکانات استفاده می کنه. مثلا Kernel خودش در Ring 0 اجرا می شه ولی برنامه های کاربردی رو در Ring 3 اجرا می کنه و Driver ها رو در دو Ring دیگر.

از کجا بین کد و یا عدد باینری تفاوت ایجاد میشود و این تفاوت را سی پی یو از کجا میفهمد ؟
یه جورایی می شه گفت هیچ تفاوتی نیست!
این تفاوت رو برنامه نویس با نحوه ی تولید برنامش مشخص می کنه.
یعنی CPU از یه جایی شروع می کنه به خوندن دستورات و عملوند هاشون و کارش رو انجام می ده براش مهم نیست این از نظر تو Data بود یا دستور! مثلا اگه شما آدرس جایی از حافظه رو دادی برای انتقال اطلاعات می فهمیم که اون جا Data هست. ولی ممکنه اون جا دستور باشه نه Data. این تفاوتیه که خود به خود حین اجرای کد مشخص می شه. شاید بپرسی پس Code Section و Data Section چی هست که طراحی می کنیم. این ها به سیستم عامل می گه که وقتی می خوای برنامه رو بدی CPU اجرا کنه Code ها رو یه قسمت حافظه بذار و Data ها رو یه قسمت دیگه. اما CPU فقط با دنباله ای از بایت ها طرفه!

tajerman
چهارشنبه 24 آبان 1391, 09:56 صبح
با سلام
همه داده ها در کامپیوتر به صورت دو دویی ذخیره و خوانده می شوند .
حالا سوال من این است که همه داده ها به صورت اعداد دو دویی عادی ذخیره میشوند ؟
برای ایجاد حروف چه کار میکنند ؟
وظیفه تجزیه و تحلیل کد ها با کیست ؟ (سی پی یو یا سیستم عامل)
از کجا بین کد و یا عدد باینری تفاوت ایجاد میشود و این تفاوت را سی پی یو از کجا میفهمد ؟
من جواب سوالم رو هنوز نگرفتم .
بذارین سوالم و یه جور دیگه مطرح کنم
در واقع من میخوام بفهمم که کامپیوتر یا بهتر بگم سی پی یو از کجا بین اعداد و استاندارد اسکی و یا یونیکد تفاوت قائل میشه ؟
چون همه این اعداد و استانداردها به صورت باینری در کامپیوتر ذخیره و نمایش داده میشن من متوجه نمیشم که چه طوری بین اینا تفاوت قائل میشه سی پی یو ؟
در مواقعی حتی یک کد اسکی و یک عدد به صورت اعداد باینری یکسان میباشند !

IamOverlord
دوشنبه 27 آذر 1391, 00:11 صبح
سلام دوست عزیز.
CPU هیچ تفاوتی رو در این زمینه نمی فهمه... این کد برنامه نویس هست که در روند کار تفاوت ایجاد می کنه. این برنامه نویس هست که اون داده رو یونیکد یا غیر یونیکد در نظر می گیره...

tajerman
دوشنبه 27 آذر 1391, 09:04 صبح
سلام دوست عزیز.
CPU هیچ تفاوتی رو در این زمینه نمی فهمه... این کد برنامه نویس هست که در روند کار تفاوت ایجاد می کنه. این برنامه نویس هست که اون داده رو یونیکد یا غیر یونیکد در نظر می گیره...

تا اینجاش درست
حالا برنامه نویس این تفاوت رو چطوری ایجاد میکنه و میفهمه ؟

mahak006
دوشنبه 27 آذر 1391, 11:40 صبح
تا اینجاش درست
حالا برنامه نویس این تفاوت رو چطوری ایجاد میکنه و میفهمه ؟


تو وقتی تو برنامه داده ای رو از نوع char در نظر می گیری در واقع داری تو برنامه تفاوت رو نسبت به داده ای از نوع int یا float و double ایجاد می کنی و کامپیلر اون فضایی که مناسب نوع نوع داده هست ( sizeof ) بره اون داده در نظر می گیره و از این به بعد بایت های موجود در اون فضا رو به نسبت نوع داده بره برنامه تفسیر می کنه ( نه بره CPU ) . البته ممکنه یه چیزایی رو کامل ننوشته باشم .

tajerman
چهارشنبه 29 آذر 1391, 09:08 صبح
تو وقتی تو برنامه داده ای رو از نوع char در نظر می گیری در واقع داری تو برنامه تفاوت رو نسبت به داده ای از نوع int یا float و double ایجاد می کنی و کامپیلر اون فضایی که مناسب نوع نوع داده هست ( sizeof ) بره اون داده در نظر می گیره و از این به بعد بایت های موجود در اون فضا رو به نسبت نوع داده بره برنامه تفسیر می کنه ( نه بره CPU ) . البته ممکنه یه چیزایی رو کامل ننوشته باشم .
دوست من فک نمیکنم این گفته شما منطقی باشه چون اونوقت هم باید روی حافظه یه فضایی برای خود داده کنار بذاریم و هم یه فضای دیگه برای نوع داده و توش مشخص کنیم این آدرس ها کاراکتر هستن و اینا عدد .

mahak006
پنج شنبه 30 آذر 1391, 19:47 عصر
تو داری می پرسی برنامه نویس این تفاوت رو چجور ایجاد می کنه . خب اینجوری دیگه .
ولی در کل این کامپایلره که نوع داده ها رو تشخیص می ده و بر اساس کد برنامه نویس اون داده رو استفاده می کنه . اینجاش دیگه بستگی داره به کامپایلر که چجوری این تفاوت رو ایجاد کنه . ممکنه با چند تا لیست مختلف که اشاره گر به داده هایی از یک نوع هستن ، این تفاوت رو ایجاد کنه یه جور دیگه . من در این زمینش زیاد چیزی نمی دونم .
اما این تفسیری که شما دارین اشباهه . چون در اون صورت اسم گذاری متغیر ها هم نباید از طریق کامپایلر صورت بگیره . چون باز هم فضای اضافی نیاز هست که اسم متغیر ها رو به همراه آدرس حافظشون توش ذخیره کنیم .