ورودی/خروجی
بخش ورودی/خروجی (I/O) این امکان را به رایانه میدهد تا اطلاعات را از جهان بیرون تهیه و نتایج آنها را به همان جا برگرداند. محدوده فوق العاده وسیعی از دستگاههای ورودی/خروجی وجود دارد، از خانواده آشنای صفحهکلیدها، نمایشگرها، نَرمدیسک گرفته تا دستگاههای کمی غریب مانند رایابینها (webcams). (از سایر ورودی/خروجیها میتوان موشواره mouse، قلم نوری، چاپگرها (printer)، اسکنرها، انواع لوحهای فشرده(CD, DVD) را نام برد).

چیزی که تمامی دستگاههای عمومی در آن اشتراک دارند این است که آنها رمزکننده اطلاعات از نوعی به نوع دیگر که بتواند مورد استفاده سیستمهای رایانه دیجیتالی قرار گیرد، هستند. از سوی دیگر، دستگاههای خروجی آن اطلاعات به رمز شده را رمزگشایی میکنند تا کاربران آنها را دریافت نمایند. از این رو یک سیستم رایانه دیجیتالی یک نمونه از یک سامانه دادهپردازی میباشد.
دستورالعملها
هر رایانه تنها دارای یک مجموعه کم تعداد از دستورالعملهای ساده و تعریف شده میباشد. از انواع پرکاربردشان میتوان به دستورالعمل «محتوای خانه ۱۲۳ را در خانه ۴۵۶ کپی کن!»، «محتوای خانه ۶۶۶ را با محتوای خانه ۰۴۲ جمع کن، نتایج را در خانه ۰۱۳ کن!»، «اگر محتوای خانه ۹۹۹ برابر با صفر است، به دستورالعمل واقع در خانه ۳۴۵ رجوع کن!».
دستورالعملها در داخل رایانه بصورت اعداد مشخص شدهاند - مثلاً کد دستور العمل (copy instruction) برابر ۰۰۱ میتواند باشد. مجموعه معین دستورالعملهای تعریف شده که توسط یک رایانه ویژه پشتیبانی میشود را زبان ماشین مینامند. در واقعیت، اشخاص معمولاً به زبان ماشین دستورالعمل نمینویسند بلکه بیشتر به نوعی از انواع سطح بالای زبانهای برنامهنویسی، برنامهنویسی میکنند تا سپس توسط برنامه ویژهای (تفسیرگرها (interpreters) یا همگردانها (compilers) به دستورالعمل ویژه ماشین تبدیل گردد. برخی زبانهای برنامهنویسی از نوع بسیار شبیه و نزدیک به زبان ماشین که اسمبلر (یک زبان سطح پایین) نامیده میشود، استفاده میکنند؛ همچنین زبانهای سطح بالای دیگری نیز مانند پرولوگ نیز از یک زبان انتزاعی و چکیده که با زبان ماشین تفاوت دارد بجای دستورالعملهای ویژه ماشین استفاده میکنند.
معماریها
در رایانههای معاصر واحد محاسبه و منطق را به همراه واحد کنترل در یک مدار مجتمع که واحد پردازشی مرکزی (CPU) نامیده میشود، جمع نمودهاند. عموما، حافظه رایانه روی یک مدار مجتمع کوچک نزدیک CPU قرار گرفته. اکثریت قاطع بخشهای رایانه تشکیل شدهاند از سامانههای فرعی (به عنوان نمونه، منبع تغذیه رایانه) و یا دستگاههای ورودی/خروجی.
برخی رایانههای بزرگتر چندین CPU و واحد کنترل دارند که بصورت همزمان با یکدیگر درحال کارند. اینگونه رایانهها بیشتر برای کاربردهای پژوهشی و محاسبات علمی بکار میروند.
کارایی رایانهها بنا به تئوری کاملاً درست است. رایانه دادهها و دستورالعملها را از حافظهاش واکشی (fetch) میکند. دستورالعملها اجرا میشوند، نتایج ذخیره میشوند، دستورالعمل بعدی واکشی میشود. این رویه تا زمانی که رایانه خاموش شود ادامه پیدا میکند. واحد پردازنده مرکزی در رایانههای شخصی امروزی مانند پردازندههای شرکت ای-ام-دی و شرکت اینتل از معماری موسوم به خط لوله استفاده میشود و در زمانی که پردازنده در حال ذخیره نتیجه یک دستور است مرحله اجرای دستور قبلی و مرحله واکشی دستور قبل از آن را آغاز میکند. همچنین این رایانهها از سطوح مختلف حافظه نهانگاهی استفاده میکنند که در زمان دسترسی به حافظه اصلی صرفهجویی کنند.
برنامهها
برنامه رایانهای فهرستهای بزرگی از دستورالعملها (احتمالاً به همراه جدولهائی از داده) برای اجرا روی رایانه هستند. خیلی از رایانهها حاوی میلیونها دستورالعمل هستند، و بسیاری از این دستورها به تکرار اجرا میشوند. یک رایانه شخصی نوین نوعی (درسال ۲۰۰۳) میتواند در ثانیه میان ۲ تا ۳ میلیارد دستورالعمل را پیاده نماید. رایانهها این مقدار محاسبه را صرف انجام دستورالعملهای پیچیده نمیکنند. بیشتر میلیونها دستورالعمل ساده را که توسط اشخاص باهوشی «برنامه نویسان» در کنار یکدیگر چیده شدهاند را اجرا میکنند. برنامهنویسان خوب مجموعههایی از دستورالعملها را توسعه میدهند تا یکسری از وظایف عمومی را انجام دهند (برای نمونه، رسم یک نقطه روی صفحه) و سپس آن مجموعه دستورالعملها را برای دیگر برنامهنویسان در دسترس قرار میدهند. (اگر مایلید «یک برنامهنویس خوب» باشید به این مطلب مراجعه نمایید.)
رایانههای امروزه، قادرند چندین برنامه را در آن واحد اجرا نمایند. از این قابلیت به عنوان چندکارگی (multitasking) نام برده میشود. در واقع، CPU یک رشته دستورالعملها را از یک برنامه اجرا میکند، سپس پس از یک مقطع ویژه زمانی دستورالعملهایی از یک برنامه دیگر را اجرا میکند. این فاصله زمانی اکثرا بهعنوان یک برش زمانی (time slice) نام برده میشود. این ویژگی که CPU زمان اجرا را بین برنامهها تقسیم میکند، این توهم را بوجود میآورد که رایانه همزمان مشغول اجرای چند برنامهاست. این شبیه به چگونگی نمایش فریمهای یک فیلم است، که فریمها با سرعت بالا در حال حرکت هستند و به نظر میرسد که صفحه ثابتی تصاویر را نمایش میدهد. سیستمعامل همان برنامهای است که این اشتراک زمانی را بین برنامههای دیگر تعیین میکند.
سیستمعامل
کامپیوتر همیشه نیاز دارد تا برای بکار انداختنش حداقل یک برنامه روی آن در حال اجرا باشد. تحت عملکردهای عادی این برنامه همان سیستمعامل یا OS که مخفف واژههای Operating System است. سیستم یا سامانه عامل بر اساس پیشفرضها تصمیم میگیرد که کدام برنامه برای انجام چه وظیفهای اجرا شود، چه زمان، از کدام منابع (مثل حافظه، ورودی/خروجی و...) استفاده شود. همچنین سیستمعامل یک لایه انتزاعی بین سختافزار و برنامههای دیگر که میخواهند از سختافزار استفاده کنند، میباشد، که این امکان را به برنامه نویسان میدهد تا بدون اینکه جزئیات ریز هر قطعه الکترونیکی از سختافزار را بدانند بتوانند برای آن قطعه برنامهنویسی نمایند. در گذشته یک اصطلاح متداول بود که گفته میشد با تمام این وجود کامپیوترها نمیتوانند برخی از مسائل را حل کنند که به این مسائل حل نشدنی گفته میشود مانند مسائلی که در مسیر حلشان در حلقه بینهایت میافتند. به همین دلیل نیاز است که با کمک روشهای خاص بطور مثال به چند بخش تقسیم نمودن مساله یا روشهای متداول دیگر از رخ دادن این خطا تا حد امکان جلوگیری نمود. از جمله سیستم عاملهای امروزی میتوان به مایروسافت ویندوز، مکینتاش اپل و لینوکس و بی اس دی اشاره کرد.
کاربردهای رایانه
نخستین رایانههای رقمی، با قیمتهای زیاد و حجم بزرگشان، در اصل محاسبات علمی را انجام میدادند، انیاک یک رایانهٔ قدیمی ایالات متحده اصولاً طراحی شده تا محاسبات پرتابهای توپخانه و محاسبات مربوط به جدول چگالی نوترونی را انجام دهد. (این محاسبات بین دسامبر ۱۹۴۱ تا ژانویه ۱۹۴۶ روی حجمی بالغ بر یک میلیون کارت پانچ انجام پذیرفت! که این خود طراحی و سپس تصمیم نادرست بکارگرفته شده را نشان میدهد) بسیاری از ابررایانههای امروزی صرفاً برای کارهای ویژهٔ محاسبات جنگافزار هستهای استفاده میگردد.
CSIR Mk I نیز که نخستین رایانه استرالیایی بود برای ارزیابی میزان بارندگی در کوههای اسنوئی (Snowy)این کشور بکاررفت، این محاسبات در چارچوب یک پروژه عظیم تولید برقابی انجام گرفت.
برخی رایانهها نیز برای انجام رمزگشایی بکارگرفته میشد، برای مثال Colossus که در جریان جنگ جهانی دوم ساخته شد، جزو اولین کامپیوترهای برنامهپذیر بود (البته ماشین تورینگ کامل نبود). هرچند رایانههای بعدی میتوانستند برنامهریزی شوند تا شطرنج بازی کنند یا تصویر نمایش دهند و سایر کاربردها را نشان دهد.
سیاستمداران و شرکتهای بزرگ نیز رایانههای اولیه را برای خودکارسازی بسیاری از مجموعههای داده و پردازش کارهایی که قبلا توسط انسانها انجام میگرفت، بکار بستند - برای مثال، نگهداری و بروزرسانی حسابها و داراییها. در موسسات پژوهشی نیز دانشمندان رشتههای مختلف شروع به استفاده از رایانه برای مقاصدشان نمودند.
کاهش پیوسته قیمتهای رایانه باعث شد تا سازمانهای کوچکتر نیز بتوانند آنها را در اختیار بگیرند. بازرگانان، سازمانها، و سیاستمداران اغلب تعداد زیادی از کامپیوترهای کوچک را برای تکمیل وظایفی که قبلا برای تکمیلشان نیاز به رایانه بزرگ (mainframe) گرانقیمت و بزرگ بود، به کار بگیرند. مجموعههایی از رایانههای کوچکتر در یک محل اغلب بهعنوان خادم سر (server farm) نام برده میشود.
با اختراع ریزپردازندهها در دههٔ ۱۹۷۰ این امکان که بتوان رایانههایی بسیار ارزان قیمت را تولید نمود بوجود آمد. رایانههای شخصی برای انجام وظایف بسیاری محبوب گشتند، از جمله کتابداری، نوشتن و چاپ مستندات. محاسبات پیش بینیها و کارهای تکراری ریاضی توسط صفحات گسترده (spreadsheet)، ارتباطات توسط پست الکترونیک، و اینترنت. حضور گسترده رایانهها و سفارشی کردن آسانشان باعث شد تا در امورات بسیار دیگری بکارگرفته شوند.
در همان زمان، رایانههای کوچک، که معمولاً با یک برنامه ثابت ارائه میشدند، راهشان را بسوی کاربردهای دیگری باز مینمودند، کاربردهایی چون لوازم خانگی، خودروها، هواپیماها، و ابزار صنعتی. این پردازشگرهای جاسازی شده کنترل رفتارهای آن لوازم را سادهتر کردند، همچنین امکان انجام رفتارهای پیچیده را نیز فراهم نمودند (برای نمونه، ترمزهای ضدقفل در خودروه). با شروع قرن بیست و یکم، اغلب دستگاههای الکتریکی، اغلب حالتهای انتقال نیرو، اغلب خطوط تولید کارخانهها توسط رایانهها کنترل میشوند. اکثر مهندسان پیش بینی میکنند که این روند همچنان به پیش برود... یکی از کارهایی که میتوان بهوسیله رایانه انجام داد برنامه گیرنده ماهوارهاست.
نیز تنها ۴۹۵ دلار قیمت داشت! قیمت آن کامپیوتر نیز ۳٬۰۰۵ دلار بود و IBM در آن زمان توانست ۶۷۱٬۵۳۷ دستگاه از آن را بفروشد.
انواع رایانه
رایانههای توکار (جاسازی شده)
رایانههایی هم وجود دارند که تنها برای کاربردهایی ویژه طراحی میشوند. در ۲۰ سال گذشته، هرچند برخی ابزارهای خانگی که از نمونههای قابل ذکر آن میتوان جعبههای بازیهای ویدئویی را که بعدها در دستگاههای دیگری از جمله تلفن همراه، دوربینهای ضبط ویدئویی، و PDAها و دهها هزار وسیله خانگی، صنعتی، خودروسازی و تمام ابزاری که در درون آنها مدارهایی که نیازهای ماشین تورینگ را مهیا ساختهاند، گسترش یافت، را نام برد (اغلب این لوازم برنامههایی را در خود دارند که بصورت ثابت روی ROM تراشههایی که برای تغییر نیاز به تعویض دارند، نگاشته شدهاند). این رایانهها که در درون ابزارهای با کاربرد ویژه گنجانیده شدهاند «ریزکنترلگرها» یا رایانههای توکار" (Embedded Computers) نامیده میشوند. بنا بر این تعریف این رایانهها به عنوان ابزاری که با هدف پردازش اطّلاعات طراحی گردیده محدودیتهایی دارد. بیشتر میتوان آنها را به ماشینهایی تشبیه کرد که در یک مجموعه بزرگتر به عنوان یک بخش حضور دارند مانند دستگاههای تلفن، ماکروفرها و یا هواپیما که این رایانهها بدون تغییری فیزیکی به دست کاربر میتوانند برای هدفهای گونهگونی به کارگرفته شوند.
رایانههای شخصی
اشخاصی که با انواع دیگری از رایانهها ناآشنا هستند از عبارت رایانه برای رجوع به نوع خاصی استفاده میکنند که رایانه شخصی (PC) نامیده میشوند. رایانهای است که از اجزای الکترونیکی میکرو (ریز) تشکیل شده که جزو کوچکترین و ارزانترین رایانهها به شمار میروند و کاربردهای خانگی و اداری دارند. شرکت آیبیام رایانه شخصی را در سال ۱۹۸۱ میلادی به جهان معرفی کرد.
نخستین رایانه آیبیام از برخی از ماشین حسابهای امروزی نیز ضعیفتر است ولی در آن زمان شگفت انگیز بود. رایانه شخصی سی سال پیش دارای حافظه ROM با ظرفیت 40K و حافظه RAM با ظرفیت 64K بود. البته کاربر میتوانست حافظه RAM را تا 256K افزایش دهد. قیمت هر ماژول 64K حافظه والانیوز
سرمایهگذاری
صنعت رایانه همواره صنعتی رو به رشد، چه در حوزهٔ سختافزارى و چه در حوزهٔ نرمافزارى بوده است، این صنعت پیوسته مورد توجه سرمایه گذاران بوده و سرمایهها را به خود جذب کرده است. آیندهٔ روشن این فنّاوری همواره سرمایه داران را ترغیب میکند تا روی این صنعت سرمایهگذاری کنند.
نرمافزار
نرمافزار (به انگلیسی: Software) یا برنامه، مجموعهای از دستورالعملهای دقیق و مرحله به مرحله است که هدف خاصی را دنبال میکنند.
ظاهراً، اولین بار جان توکی در سال ۱۹۵۸ این واژه را بهاین معنا بهکار بردهاست. احتمالاً این واژه در مقابل سختافزار (به انگلیسی: Hardware) به کار بردهاند که بسیار پیش از پیدایش رایانه (به معنای اسباب و اشیاء) بهکار میرفتهاست.
دو گروه کلی نرمافزارها
نرمافزارهای رایانه را میتوان به دو دسته بزرگ تقسیم کرد:
نرمافزار سیستم (به انگلیسی: System software)
نرمافزار کاربردی (به انگلیسی: Application software)
میتوان گفت نرمافزارهای کاربردی، برنامههای مورد استفاده کاربرند و نرمافزارهای سیستمی، مدیریت رایانه را برعهده دارند. مهمترین نرمافزار سیستم، سیستمعامل است.
سیستم عامل
وقتی برنامهای را روی رایانه خود نصب میکنید، اجزای سختافزاری آن به فرمان آن برنامه در میآیند. برای نمونه هنگامی که با یک برنامه اجرای موسیقی کار میکنید، کارت صدای رایانه تان با برنامه پخش موسیقی همکاری میکند و یک آهنگ یا پرونده (فایل) صوتی را از طریق بلندگوی رایانه تان پخش میکند.
این ارتباط میان نرمافزار و سختافزار توسط سیستم عامل انجام میشود. این تنها قسمتی از کار سیستم عامل است.
سیستم عامل خود یک برنامه نرم افزاری است با این تفاوت که چون تمام منابع و امکانات سخت افزاری در اختیار وی می باشد دارای ویژگی منحصر به فرد می باشد بنابراین آن را در رده نرم افزارها می خوانیم با این ویژگی که از اهمیت خاصی برخوردار است. به بیان دیگر سیستم عامل یک برنامه جامع است که اجازه در اختیار قراردادن منابع و امکانات سخت افزاری را برای نرم افزارها صادر می کند و این سیستم عامل است که مسئول صحت عملکرد سیستم و منابع آن است.
سیستم عامل شامل 4 بخش مهم است
1- مدیریت پردازش و پردازشگر
2- مدیریت حافظه
3- مدیریت دستگاههای ورودی و خروجی (I/O)
4- مدیریت فایل
سه گروه کلی نرمافزارهای معماری
از دیدگاه ساختاری (معماری) (architecture)، نرمافزارها به دستههای زیر تقسیم میشوند:
کاربر-بنیان یا Client Base
کارگزار-بنیان یا Server Base
کاربر کارگزار بنیان یا Client-Server Base
امروزه واژه نرمافزار را در معناهایی به جز معنی برنامه رایانهای نیز بهکار میبرند. مثلاً در دانش مدیریت برای اشاره به روشها و دانش فنی (در برابر وسایل و تجهیزات و نیروی انسانی). نرمافزارها انواع گوناگونی دارند که مهم ترین دسته بندی آنها دستهٔ تجاری و آزاد است. به ویژه با رویکردهای طرحهای گنو و لینوکس معنای ژرف تری به نرمافزارهای آزاد داده شده تا آنجا که برخی نرمافزارها را نماد فرهنگ می دانند. نرمافزارها را برنامه نویسان تدوین کرده و انتشار میدهند. این برنامه نویسان ممکن است در یک شرکت مشغول کار باشند یا در خانه برنامه نویسی کنند مانند برنامه نویسان برخی نرمافزارهای لینوکس. امروزه بیشتر کاربران تنها با ظاهر گرافیکی این برنامهها کار میکنند و اقدامات بسیاری از آنها از دید کاربر پنهان میماند به عبارتی هر نرمافزار مجموعهای از رمزها است که از الگوریتمی خاص پشتیبانی میکنند این رمزها خود با رمزهای گرافیکی آمیخته شده و بسیاری از اقدامات برنامه به دور از چشم کاربر عادی رخ میدهد. برنامهها با رمزهایی نوشته میشوند که بعداً یک رمزخوان آن را در رایانه کاربر اجرا میکند.
رقابت نرمافزاری
در حال حاضر نرمافزارهای کامپیوتری فراوان را میتوان در بازار یافت که به طور جدی به رقابت خود برای بقا ادامه میدهند. از مسائل قابل ذکر در این مورد میتوان به خرید سهام شرکتهای نرمافزاری کوچک و بزرگ توسط شرکتهای دیگر اشاره نمود. همچنان که شرکت بزرگ گوگل به خرید سهام شرکتهای بزرگ همچنان ادامه میدهد، در مدت کمی توانسته بسیاری از شرکتها را تحت سلطه خود درآورد.
نرمافزار سیستم
نرمافزار سیستم به نرمافزاری در رایانه گفته میشود که به کارکرد سیستم رایانه یا کاربردهای سطح پایین (یا Low Level) رایانه مربوط باشد. این نرمافزارها به ساختار فیزیکی سختافزار رایانه وابسته هستند و در نوشتن آنها از زبانهای سطح پائین مانند زبان اسمبلی استفاده میشود. سیستمعامل و درایورها از نرمافزارهای سیستم هستند. از جمله زبان هایی که برای نگارش نرمافزارهای سیستمی استفاده میشود، زبان برنامه نویسی C میباشد. کار کردن با سی برای برنامه نویسان راحت تر است و آنان این زبان را به اسمبلی ترجیح میدهند. اگر برای نگارش نرمافزار سیستمی مشکل محدودیت فضای سختافزاری داشته باشیم بهتر است با زبان اسمبلی کار کنیم که حجم آن پایین تر است. نرمافزارهای سیستمی به سختافزار وابسته اند.
در برابر نرمافزار سیستم، نرمافزار کاربردی قرار دارد که برای کاربردهای سطح بالا و غیرسیستمی رایانه است و معمولاً به زبانهای سطح بالا نوشته میشود که از جزئیات سختافزاری سیستم مستقل است.
نرمافزار کاربردی
نرمافزار کاربردی (به انگلیسی: Application software) عبارت است از نرمافزاری که با استفادهٔ مستقیم از منابع و قابلیتهای رایانه کاری را مستقیماً برای کاربر انجام میدهد. باید توجه داشت که این عبارت در مقابل عبارت نرمافزار سیستمی معنی پیدا میکند.
نرمافزار سیستمی در مقابل در پسزمینه عمل میکند و خدماتی را فراهم میکند که دیگر نرمافزارها و یا سیستمعامل میتوانند برای انجام کارهای خود از آن استفاده کنند. اما در عوض معمولاً مستقیماً با کاربر عادی در تماس نیست و خدماتی را به او ارایه نمیدهد.
در عمل بیشتر نرمافزارهایی که کاربران با آنها سر و کار دارند از این دسته محسوب میشوند. برای مثال میتوان به نرمافزارهای رومیزی یعنی واژهپردازها، صفحه گستردهها، نرمافزارهای طراحی گرافیکی، بازیهای رایانهای و امثال آنها اشاره کرد.
بسیاری نرمافزارهای کاربردی، برای توسعهدهندگان ابزار رابط برنامهنویسی کاربردی هم فراهم میکنند تا بتوان از قابلیتهای نرمافزار در نرمافزارهای جدید استفاده کرد. برای مثال نرمافزار ادوبی آکروبات هنگام نصب ایپیآی فراهم میکند که برنامهنویس میتواند با استفاده از آن تواناییهای آکروبات را در برنامهٔ خود به کار گیرد.
برای عنوان نمونههای دیگر میتوان به نرمافزارهای پردازش متن، برگههای گسترده (صفحات گسترده) و نرمافزارهای پخش نوا و نما اشاره کرد.
شبکه
شبکه عبارتست از مجموعه یا سیستم درون پیوندی(interconnected) انسانی یا فیزیکی که دسترسی به قابلیت یا توانایی خاصی را در محدوده ای از مکان و زمان فراهم می کند و در حالت مطلوب محدودیت مکانی و زمانی ندارد.
موارد زیر نمونههای انواع شبکه میباشند:
شبکههای فناوری:
شبکههای آبرسانی← قابلیت و توانایی " آبرسانی "
شبکه الکتریکی← قابلیت و توانایی " برق رسانی "
شبکه گازرسانی← قابلیت و توانایی " گاز رسانی "
شبکه مخابراتی← قابلیت و توانایی " گفتگو "
شبکه حمل و نقل← قابلیت و توانایی " جابجایی "
شبکه داده یا data ← قابلیت و توانایی " انتقال داده یا data "
شبکه رایانهای
شبکههای رسانهای:
شبکه رادیویی← قابلیت و توانایی " صوت "
شبکه تلویزیونی← قابلیت و توانایی " صوت و تصویر"
شبکههای انسانی:
شبکه اقتصادی← قابلیت و توانایی " درآمد "
شبکه اجتماعی← قابلیت و توانایی " همزیستی "
دیگر شبکهها:
شبکه فضایی
شبکه عصبی
بدیهی است بهره برداری از قابلیت و توانایی شبکه ها در مکانهای خاصی امکان دارد که گره (Node) نام دارند و مستلزم تجهیزات خاصی میباشند.
حافظه مجازی
حافظه مجازی یکی ازبخشهای متداول در اکثر سیستمهای عامل کامپیوترهای شخصی است. سیستم فوق با توجه به مزایای عمده، بسرعت متداول و با استقبال کاربران کامپیوتر مواجه شدهاست.
در حقیقت حافظه مجازی دارای دو وظیفه اصلی میباشد:
به پزدازشها اجازه میدهد بدون نگرانی از دیگر کدهای در حال اجرا از حافظه استفاده نمایند.
محدود کردن پردازشها از دخالت کردن در استفاده حافظه توسط سیستمعامل و دیگر پردازشها. به نوعی تامین امنیت محدوده اشغال شده توسط پردازشهای دیگر
دیسک سخت بجای حافظه اصلی
اکثر کامپیوترها در حال حاضر از حافظههای محدود با ظرفیت ۶۴، ۱۲۸ و یا ۲۵۶ مگابایت استفاده مینمایند. حافظه موجود در اکثر کامپیوترها بمنظور اجرای چندین برنامه بصورت همزمان توسط کاربر، پاسخگو نبوده و با کمبود حافظه مواجه خواهیم شد. مثلاً در صورتیکه کاربری بطور همزمان، سیستمعامل، یک واژه پرداز، مرورگر وب و یک برنامه برای ارسال نامه الکترونیکی را فعال نماید، ۳۲ و یا ۶۴ مگابایت حافظه، ظرفیت قابل قبولی نبوده و کاربران قادر به استفاده از خدمات ارائه شده توسط هر یک از نرمافزارهای فوق نخواهند بود. یکی از راهکارهای غلبه بر مشکل فوق افزایش و ارتقای حافظه موجود به صورت فیزیکی است. با ارتقای حافظه و افزایش آن ممکن است مشکل فوق در محدودهای دیگر مجدداً بروز نماید. یکی دیگر از راهکارهای موجود در این زمینه، استفاده از حافظه مجازی است .
در تکنولوژی حافظه مجازی از حافظههای جانبی ارزان قیمت نظیر هارد دیسک استفاده میگردد. در چنین حالتی اطلاعات موجود در حافظه اصلی که کمتر مورد استفاده قرار گرفتهاند، از حافظه خارج و در محلی خاص بر روی هارد دیسک ذخیره میگردند. بدین ترتیب بخش ی از حافظه اصلی آزاد و زمینه استقرار یک برنامه جدید در حافظه فراهم خواهد شد. عملیات ارسال اطلاعات از حافظه اصلی بر روی هارد دیسک بصورت خودکار انجام میگیرد.
ایجاد امنیت دسترسی به حافظه
قبل از آنکه سیستمعامل، پردازنده را به یک فرایند یا پردازش تحویل دهد، یک جدول حافظه را تنظیم مینماید بصورتیکه آن پردازش در سطح دسترسی پایینتری به حافظه قرار داده میشود و آدرس حافظهای که در کد پردازش مورد نظر قرار میگیرد بعداً توسط پردازنده به آدرس اصلی و فیزیکی حافظه RAM که در جدول حافظه تنظیم شده در قبل، دکر شده است ترجمه گردد. بنابراین آدرسهای حافظهای که در هر یک از کدهای پردازش توسط سیستمعامل قرار میگیرند آدرسهای مجازی هستند نه آدرسهای حقیقی.
این تطابق آدرسهای مجازی به آدرسهای حقیقی در قطعاتی که به آنها صفحه یا Page گفته میشوند انجام میشود. در معماری سیستمهای x86 امروزی معمولاً اندازه این صفحه ۴کیلوبایت میباشد.
زمانی که یک پردازش از آدرسی در یک صفحه که به آن پردازش تطابق داده نشده است استفاده نماید، باعث ایجاد یک خطای استثناء سختافزاری میگردد که به آن Pagefault گفته میشود.
وقتی که یک صفحه مورد استفاده قرار نگیرد، سیستمعامل میتواند آنرا به دیسک سخت انتقال دهد. و وقتی که آن صفحه توسط یک پردازش مورد تقاضا قرار گرفت دوباره به حافظه اصلی RAM بازخواهد گشت.
مسئله سرعت
سرعت خواندن و نوشتن اطلاعات بر روی هارد دیسک بمراتب کندتر از حافظه اصلی کامپیوتر است. در صورتیکه سیستم مورد نظر دارای عملیاتی حجیم در رابطه با حافظه مجازی باشد، کارآئی سیستم بشدت تحت تأثیر قرار خواهد گرفت. در چنین مواردی لازم است که نسبت به افزایش حافظه موجود در سیستم، اقدام گردد. در مواردی که سیستمعامل مجبور به جابجائی اطلاعات موجود بین حافظه اصلی و حافظه مجازی باشد (هارد دیسک)، باتوجه به تفاوت محسوس سرعت بین آنها، مدت زمان زیادی صرف عملیات جایگزینی میگردد. در چنین حالتی سرعت سیستم بشدت افت کرده و عملاً در برخی حالات غیرقابل استفاده میگردد.
محل نگهداری اطلاعات بر روی هارد دیسک را یک Page file میگویند. در فایل فوق، صفحات مربوط به حافظه اصلی ذخیره و سیستمعامل در زمان مورد نظر اطلاعات فوق را مجدداً به حافظه اصلی منتقل خواهد کرد. در ماشین هائی که از سیستمعامل ویندوز استفاده مینمایند، فایل فوق دارای انشعاب swp است.
پیکربندی حافظه مجازی
ویندوز ۹۸ دارای یک برنامه هوشمند برای مدیریت حافظه مجازی است. در زمان نصب ویندوز، پیکربندی و تنظیمات پیش فرض برای مدیریت حافظه مجازی انجام خواهد شد. تنظیمات انجام شده در اغلب موارد پاسخگو بوده و نیازی به تغییر آنها وجود نخواهد داشت. در برخی موارد لازم است که پیکربندی مدیریت حافظه مجازی بصورت دستی انجام گیرد. برای انجام این کار در ویندوز ۹۸، گزینه System را از طریق Control panel انتخاب و در ادامه گزینه Performance را فعال نمائید. در بخش Advanced setting، گزینه Virtual memory را انتخاب نمائید.
با نمایش پنجره مربوط به Virtual Memory، گزینه «Let me specify my own virtual memory setting» را انتخاب تا زمینه مشخص نمودن مکان و طرفیت حداقل و حداکثر فایل مربوط به حافظه مجازی فراهم گردد..در فیلد Hard disk محل ذخیره نمودن فایل و درفیلدهای دیگر حداقل و حداکثر ظرفیت فایل را بر حسب مگابایت مشخص نمائید. برای مشخص نمودن حداکثر فضای مورد نیاز حافظه مجازی میتوان هر اندازهای را مشخص نمود. تعریف اندازه ائی به میزان دو برابر حافظه اصلی کامپیوتر برای حداکثر میزان حافظه مجازی توصیه میگردد.
میزان حافظه موجود هارد دیسک که برای حافظه مجازی در نظر گرفته خواهد شد بسیار حائر اهمیت است. در صورتیکه فضای فوق بسیار ناچیز انتخاب گردد، همواره با پیام خطائی مطابق «Out of Memory»، مواجه خواهیم شد. پیشنهاد میگردد نسبت حافظه مجازی به حافظه اصلی دو به یک باشد. یعنی در صورتیکه حافظه اصلی موجود ۱۶ مگابایت باشد، حداکثر حافظه مجازی را ۳۲ مگابایت در نظر گرفت.
یکی از روش هائی که بمنظور بهبود کارائی حافظه مجاری پیشنهاد شدهاست، (مخصوصاً در مواردیکه حجم بالائی از حافظه مجازی مورد نیاز باشد) در نظر گرفتن ظرفیت یکسان برای حداقل و حداکثر انداره حافظه مجازی است. در چنین حالتی در زمان راه اندازی کامپیوتر، سیستمعامل تمام فضای مورد نیاز را اختصاص و در ادامه نیازی با افزایش آن همزمان با اجرای سایر برنامهها نخواهد بود. در چنین حالتی کارآئی سیستم بهبود پیدا خواهد کرد.
یکی دیگر از فاکتورهای مهم در کارآئی حافظه مجازی، محل فایل مربوط به حافظه مجازی است. در صورتیکه سیستم کامپیوتری دارای چندین هارد دیسک فیزیکی باشد، (منظور چندین درایو منظقی نیست) میتوان حجم عملیات مربوط به حافظه مجازی را بین هر یک از درایوهای فیزیکی موجود توزیع کرد. روش فوق در مواردیکه از حافظه مجازی در مقیاس بالائی استفاده میگردد، کارآئی مطلوبی را بهدنبال خواهد داشت.
سیستمعامل
سیستمعامل یا سامانهٔ عامل (به انگلیسی: Operating System) نرمافزاری است که مدیریت منابع رایانه را به عهده گرفته و بستری را فراهم میسازد که نرمافزار کاربردی اجرا شده و از خدمات آن استفاده کنند. سیستمعامل جزء ضروریترین نرمافزارهای یک سیستم کامپیوتری است. سیستمعامل خدماتی به برنامههای کاربردی و کاربر ارائه میدهد. برنامههای کاربردی یا از طریق واسطهای برنامه نویسی کاربردی (به انگلیسی: Application User Interface-APIs) و یا از طرق فراخوانیهای سیستم به این خدمات دسترسی دارند. با فراخوانی این واسطها، برنامههای کاربردی میتوانند سرویسی را از سیستمعامل درخواست کنند، پارامترها را انتقال دهند، و پاسخ عملیات را دریافت کنند. ممکن است کاربران با بعضی انواع واسط کاربری نرمافزار مثل واسط خط فرمان یا یک واسط گرافیکی کاربر با سیستمعامل تعامل کنند. برای کامپیوترهای دستی و رومیزی، عموما واسط کاربری به عنوان بخشی از سیستمعامل در نظر گرفته میشود. در سیستمهای بزرگ و چند کاربره مثل یونیکس و سیستمهای شبیه یونیکس، واسط کاربری معمولاً به عنوان یک برنامه کاربردی که خارج از سیستمعامل اجرا میشود پیادهسازی میشود. نمونههایی از محبوبترین سیستمعاملهای نوین شامل: اندروید، بیاسدی، آیاواس، لینوکس، اواس ده، کیواناکس، مایکروسافت ویندوز، ویندوز فون و زد/اواس میباشند.
انواع سیستمعامل
سیستمهای بیدرنگ
سیستمهای بیدرنگ یا زمان واقعی یک سیستم عامل چند وظیفهای است که معمولا بعنوان یک کنترل کننده در یک کاربرد خاص استفاده میشوند. سیستم در این حالت میبایست در زمانی مشخص و معین حتما جواب مورد نظر را بدهد. سیستمهای کنترل آزمایشهای علمی، تصویربرداری پزشکی، کنترل صنعتی و برخی از سیستمهای نمایش از این دستهاند. هدف اصلی استفاده از سیستمهای بیدرنگ واکنش سریع و تضمین شده در برابر یک رویداد خارجی میباشد. در سیستمهای بیدرنگ معمولا وسایل ذخیرهسازی ثانویه وجود ندارد و به جای آن از حافظههای ROM استفاده میشود. سیستمعاملهای پیشرفته نیز در این سیستمها وجود ندارند چرا که سیستمعامل کاربر را از سختافزار جدا میکند و این جداسازی باعث عدم قطعیت در زمان پاسخگویی میشود. سیستمهایی که در آن مهلت زمانی(به انگلیسی: Deadline) باید پاسخ داده شود را بیدرنگ سخت و سیستمهایی که مهلت زمانی را پشتیبانی نمیکنند بیدرنگ نرم مینامند. از کاربرد سیستمهای بیدرنگ سخت میتوان به کنترل موتور یک خودرو(پاسخ با تاخیر میتواند نتایج فاجعهباری را به همراه داشته باشد) و در سیستمهای بیدرنگ نرم میتوان به اسکن بارکد در پایانه فروشگاه(با اینکه سرعت پاسخدهی باید سریع باشد اما به حادّی سیستمهای سخت نمیباشد) اشاره کرد.
سیستمهای چند کاربره
سیستمهای چند کاربره اجازه میدهند تا کاربران متعدد بصورت همزمان به یک سیستم کامپیوتری دسترسی داشته باشند. سیستمهای اشتراک زمانی و کارساز وب را میتوان بعنوان سیستمهای چند کاربره طبقهبندی کرد. در سیستمهای اشتراک زمانی تنها یک پردازنده قرار دارد که توسط مکانیزمهای زمانبندی بین برنامههای مختلف کاربرها با سرعت زیاد سوئیچ میشود و بنابراین هر کاربر تصور میکند کل کامپیوتر در اختیار اوست.
سیستمعامل تک پردازنده
این نوع سیستمعاملها، سیستمعاملهای نسل چهارم (نسل فعلی) هستند که بر روی یک پردازنده اجرا میشوند.از قبیل XP,Vista,۹۸,Me که بیشتر محصول شرکت مایکرو سافت میباشند.
سیستمعامل شبکهای
سیستم عاملهایی مثل ناول نت که بیشترین استفاده و ا مکانات این سیستم عامل برای شبکه می باشد
سیستمعامل توزیع شده
این سیستمعاملها خود را مانند سیستمعاملهای تک پردازنده به کاربر معرفی میکنند، اما در عمل از چندین پردازنده استفاده میکنند. این نوع سیستمعامل در یک محیط شبکهای اجرا میشود در این نوع سیستم یک برنامه پس از اجرا در کامپوترهای مختلف جواب نهایی به سیستم اصلی کاربر بر میگردد سرعت پردازش در این نوع سیستم بسیار بالاست.
دلایل ایجاد سیستمعامل
یک سیستم کامپیوتری پیشرفته از یک یا چند پردازنده، مقداری حافظه اصلی، دیسکها، چاپگرها، صفحهکلید، صفحهنمایش، واسطهای شبکهای و دیگر دستگاههای ورودی و خروجی تشکیل شدهاست. اگر سیستم یکپارچهای برای مدیریت این منابع وجود نداشته باشد، هر برنامه باید به تنهایی این کار را انجام دهد. سیستمعامل یک لایه نرمافزاری فراهم میکند که وظیفه مدیریت منابع سیستم را از دوش برنامههای کاربردی رهانیده و کار برنامهنویسی را سادهتر مینماید. که با توجه به نسخههای جدید سیستم عاملها که به دلیل بهرهمندی از تکنولوژی گرافیک و امکان استفاده از ماوس، امکان استفاده ساده و آسان را برای کاربران مبتدی فراهم نمودهاست. در حقیقت سیستمعامل واسط بین سختافزار رایانه و کاربر میباشد.
وظایف سیستمعامل
سیستمعامل دو کار عمده انجام میدهد:
در نگرش پایین به بالا، منابع منطقی (مانند فایلها) و منابع فیزیکی (مانند دستگاههای سختافزاری) رایانه را مدیریت و کنترل میکند.
در نگرش بالا به پایین، وظیفه سیستمعامل این است که یک ماشین توسعه یافته (Extended Machine) یا ماشین مجازی را به کاربران ارائه کند تا آنها بتوانند آسانتر برنامهنویسی نمایند و درگیر پیچیدگیهای سختافزاری رایانه نشوند.
به طور کلی، وظایف سیستمعامل شامل موارد زیر است:
استفاده بهینهتر از منابع و جلوگیری از به هدر رفتن آنها
تخصیص و آزاد سازی منابع
اداره صفها و زمانبندی استفاده از منابع
حسابداری میزان استفاده از منابع
ایجاد امنیت
ایجاد، حذف و اداره فرایندها
ایجاد مکانیسمهای ارتباط بین فرایندها و همگامسازی آنها
مدیریت فایلها و پوشهها
مدیریت حافظههای اصلی و جانبی
برقراری امکان دسترسی چندتایی (Multiaccess) و اجرای هم روند (Concurrent) فرایندها
به اشتراک گذاری منابع (Resource Sharing)
تعیین راهکارهایی برای اداره بنبست (Deadlock)
جلوگیری از وضعیت رقابتی (Race Condition) و تداخل یا در هم قفل شدن (Interlock) فرایندها
جلوگیری از گرسنگی (Starvation)
سیستمعاملهای فعلی
در سالهای اخیر رقابت بیشتر بین سیستمعاملهای مایکروسافت ویندوز، اپل مک اواس و لینوکس جریان دارد که آماری که در ماه ژوییه ۲۰۱۱ توسط وبگاه W3Schools به ثبت رسیده حاکی از آن است که هم اکنون بیش از ۸۰ درصد کاربران اینترنت از سیستمعامل ویندوز استفاده میکنند.
آمار موجود که مربوط به اوت ۲۰۱۰ میباشد به شرح زیر است:
ویندوز ۷: ۳۷٫۸٪
ویندوز ویستا: ۶٫۷٪
ویندوز اکس پی: ۳۹٫۷٪
ویندوز ۲۰۰۳: ۰٫۹٪
مک اواس: ۸٫۱٪
توزیعهای گنو/لینوکس: ۵٫۲٪
از سیستمعاملهای مشهور کامپیوترهای شخصی میتوان به اسامی زیر اشاره کرد:
یونیکس
گنو/لینوکس
مک اواس
ویندوز اکسپی
ویندوز ویستا
ویندوز انتی
ویندوز ۷
ویندوز ۸
ویندوز سیای
سولاریس
بی اس دی
داس
ام وی اس
ویلز
پالم
همچنین از سیستمعاملهای موجود روی گوشیهای تلفن همراه نسل جدید میتوان به اسامی زیر اشاره کرد:
اندروید
iOS
ویندوز موبایل
ویندوز فون
سیمبین
یوآیکیو
بادا
بلک بری
میگو
پالم
تاریخچه
در آغاز
اولین کامپیوترها فاقد سیستمعامل بودند. در اوایل سال ۱۹۶۴ فروشندگان کامپیوترهای تجاری ابزار کاملا گستردهای را برای تسهیل توسعه، زمانبندی، و اجرای کارها روی یک سیستم پردازش دستهای فراهم میکردند. برای مثال کامپیوتر تولید شده توسط UNI VAC.
در ابتدا سیستمعامل روی مین فریمها مستقر میشد و کمی بعد سیستمعامل میکروکامپیوترهای ابتدایی که فقط از یک برنامه در هر زمان پشتیبانی میکردند و به یک زمانبند بسیار ابتدایی نیاز داشتند. هر برنامه زمانی که در حال اجرا بود تحت کنترل کامل ماشین قرار داشت. چند وظیفهای (اشتراک زمانی) اولین بار در مین فریمها و در ۱۹۶۰ عرضه شد. ابتدا کامپیوترها بسیار بزرگ و جاگیر بودند اما امروزه در کف یک دست جا میگیرند.
مین فریمها
میکرو کامپیوترها
میکروکامپیوترهای اولیه نیاز یا ظرفیت داشتن یک سیستمعامل پیچیده که روی مین فریمها توسعه یافته بود نداشتند.
ویژگیها
وقفهها
دستهبندی وقفهها
برنامه وقفههایی که به دلیل بعضی شرایظ حاصل از یک دستورالعمل بروز میکند. شامل سریز شدن محاسباتی، تقسیم بر صفر، تلاش برای اجرای یک دستورالعمل ماشین غیر مجاز و مراجعه به آدرسی خارج از فضای مجاز کاربر.
زمانسنج وقفهای که توسط زمانسنج داخلی تولید میشود. این وقفه به سیستمعامل اجازه میدهد، بعضی اعمال را به طور مرتب انجام دهد.
ورودی/خروجیوقفههایی که به وسیله کنترل کننده ورودی/خروجی تولید میشود، تا کامل شدن طبیعی یک عمل یا شرایط خطا را اعلام نماید.
نقص سختافزار وقفههایی که با نقص سختافزاری تولید میشود، مثل نقص برق یا خطای توازن حافظه.
یونیکس
یونیکس یک سیستمعامل چندوظیفهای و چندکاربره است که در سال ۱۹۶۹ به دست گروهی از کارمندان آزمایشگاههای بل متعلق به شرکت ایتیاندتی (AT&T Bell Labs) نوشته شد. این گروه را کنت تامسون، دنیس ریچی، برایان کرنیگان، داگلاس مکیلروی مایکل لسک و جو اوسانا شکل میدادند. یونیکس در آغاز به زبان اسمبلی نوشته شد اما در سال ۱۹۷۳ به طور کلی به زبان سی بازنوشته شد، که این کار توسعه یونیکس را در آینده آسانتر میکرد و هم پورت کردن آن به دیگر سکوها را سادهتر. در سال ۱۹۷۴، یونیکس در ابتدا توسط گرگ چسون و دونالد گیلیس تحت مجوز دانشگاه ایلینوی در اربانا-شمپین درآمد. توسعه و تکامل یونیکس امروزی به شاخههای مختلفی تقسیم شده که توسط ایتیاندتی و همچنین دیگر فروشندگان تجاری، دانشگاهها (مانند نسخه بیاسدی از دانشگاه برکلی) و سازمانهای غیر انتفاعی توسعه مییابند.
امروزه نشان تجاری یونیکس در اختیار موسسه اپن گروپ قرار دارد و این گروه این نشان را به نام خود ثبت کرده است. تنها سیستمهایی که به صورت کامل با مشخصات یونیکس یکتا سازگار باشند، و مبلغی پول به موسسه اپن گروپ بپردازند، واجد شرایط استفاده از نام یونیکس اند. دیگر سیستمها میتوانند شبه یونیکس نامیده شوند، هرچند که موسسه اپن گروپ این نام را رد کرده است.
در اواخر دهه ۱۹۷۰ و اوایل دهه ۱۹۸۰، نفوذ یونیکس در محافل دانشگاهی (خصوصا ویرایش بیاسدی که از دانشگاه برکلی سرچشمه گرفته) باعث پذیرش گسترده یونیکس توسط بازرگانان نوپا شد و نسخههایی تجاری از یونیکس بوجود آمد که مهمترین این یونیکسها سولاریس، اسکوئنت, اچپی-یواکس, ایآیاکس هستند.
علاوه بر یونیکسهای تایید شده که اسامی آنها در بالا ذکر شد، سیستمعاملهایی هم وجود دارند که شبه یونیکس نامیده میشوند مانند مینیکس، نوادگان بیاسدی مانند فریبیاسدی, نتبیاسدی, اپنبیاسدی, دراگونفلیبیاسدی و لینوکس. این سیستمها با آنکه با استانداردها سازگار هستند، اما توسط موسسه اپن گروپ تایید نشدهاند و حق استفاده از نام Unix را ندارند. اصطلاح یونیکس سنتی ممکن است برای توصیف سیستمعاملهایی که مشخصات و ویژگیهای نسخه ۷ یونیکس یا نسخه ۵ یونیکس را دارند، استفاده شود. هنگامی که کن تامسون هنوز به مولتیکس دسترسی داشت، شبیهسازهایی برای سیستم صفحهبندی و سیستم فایل نوشت. او همینطور یک بازی رایانهای به نام سفر فضایی نوشت، اما این بازی برای اجرا شدن به یک ماشین کارامدتر و ارزانتر احتیاج داشت و سرانجام او یک پیدیپی-۷ کم استفاده در آزمایشگاههای بل پیدا کرد. در سال ۱۹۶۹ تیمی به رهبری تامسون و ریچی، بر روی این ماشین پیدیپی-۷ یک سیستم فایل سلسله مراتبی، مفاهیم فرایند رایانه و فایل دستگاه، یک مفسر خط فرمان و تعدادی برنامه کوچک دیگر نوشتند.
اگر گفته شود یونیکس آغازگر «دوره اطلاعات» و در امتداد آن «عصر اینترنت» است، کوچکترین سخنی به گزافه گفته نشدهاست. در واقع تا همین امروز هم، تقریباً ٪۱۰۰ پیمانهای مهم و باز که جنبش اینترنت را پدید آوردهاند، مانند وب، از خانوادهٔ یونیکس آمده و میآیند. اینترنت در آغاز در یونیکس گسترش یافت و تا سالها، واژهٔ «اینترنت» در میان کاربران یونیکس واژهای کاملاً عادی و روزمره بود، درحالی که دیگران حتی این واژه را نشنیده بودند و یا با اکراه تمام به آن بی اعتنائی و حتی آن را مسخره میکردند.
سیستمهای یونیکس امروزی به شاخههای مختلفی تبدیل شده است که در مرور زمان به دست ایتیاندتی توسعه داده شده. یونیکس طوری طراحی شده است تا قابل انتقال به هر سیستمی، چند کاره و همچنین چند کاربره باشد. سیستمهای یونیکس با ایدههای جدیدی که مطرح کردهاند، شناخته میشوند: پروندههای متنی ساده، مترجمهای خط فرمان و سامانه پروندهگردانی (File System) سلسله مراتبی و غیره. در مهندسی نرمافزار، یونیکس به خاطر زبان برنامهنویسی سی و فلسفه یونیکس ذکر میشود.
صاحب علامت تجاری یونیکس در حال حاضر open group است. در حالی که مدعی در حال حاضر متن برنامههای یونیکس The sco group و Novell است.
پیشینه
از آغاز تا عرضه
داستان از سال ۱۹۶۰ آغاز میشود. در این زمان فکر سامانههای اشتراک زمان مطرح بود و نخستین سیستمعامل چند کاربره طراحی شد که به عنوان کارگزار(Server) میتوانست با نصب شدن بر روی یک رایانه به چند رایانه دیگر سرویس دهد. این سیستمعامل که CTSS نام داشت و میتوانست ۲۰ کاربر را با یک رایانه IBM ۷۰۹۰ به خوبی اداره کند به شدت مورد توجه و مفید واقع شد و همه دریافتند که بخش عظیمی از رایانههای آینده از این فناوری بهره خواهند گرفت. به طوری که در سال ۱۹۶۵ سه شرکت از برجستهترین نقش آفرینان رایانه در جهان، مؤسسه فناوری ماساچوست، آزمایشگاههای بل و جنرال الکتریک، یک سیستمعامل اشتراک زمان آزمایشی برای مینفریم جیای-۶۴۵ طراحی کردند که مولتیکس نامیده میشد.
مولتیکس نوآوریهای بسیاری را پیش روی نهاد، اما در عوض مشکلات فراوانی هم داشت. این سیستم اجزای زیادی داشت و از حد معین بزرگتر شد. آزمایشگاههای بل که از پیچیدگی زیاد مولتیکس ناامید شده بود، به آهستگی از پروژه کناره گرفت. آخرین محققان آنها، کن تامسون, دنیس ریچی, داگلاس مکیلروی و جو اوسانا تصمیم گرفتند کار را از آغاز اما در مقیاسی کوچکتر از سر بگیرند. ریچی گفت «چیزی که ما میخواستیم، تنها یک محیط خوب برای برنامهنویسی نبود، بلکه سامانهای بود که بتوان گرد آن دوستی را شکل داد.»
در ۱۹۷۰، پیتر نیومن نام Unics را برای پروژه ابداع کرد. این نام در حقیقت یک جور بازی با نام مولتیکس (Multics) بود. دنیس ریچی، کن تامسون و برین کرنیگان، یونیکس (Unics) را بر اساس مولتیکس در آزمایشگاه بل پدید آوردند. بعدها که Unics توانست همزمان به چند کاربر سرویس دهد، به Unix آوازه یافت.
تا آن زمان، هیچ حمایت مالی از طرف آزمایشگاههای بل وجود نداشت. وقتی که گروه تحقیقات علوم رایانه میخواست از یونیکس بر روی یک رایانه بزرگتر از پیدیپی-۷ استفاده کند، تامسون و ریچی قول دادند که برای ماشین پیدیپی۱۱/۲۰، قابلیتهای پردازش متن را به یونیکس اضافه کنند. این کار باعث حمایت مالی آزمایشگاه بل شد. برای اولین بار در سال ۱۹۷۰، سیستمعامل یونیکس رسما نامگذاری و بر روی یک پیدیپی۱۱/۲۰ اجرا شد. یک برنامه قالببندی متن به نام roff و یک ویرایشگر متن هم اضافه شدند. تمام این سه جزء (یونیکس، roff و ویرایشگر متن) به زبان اسمبلی ماشین پیدیپی۱۱/۲۰ نوشته شده بودند. آزمایشگاههای بل از این سیستمِ پردازش متن اولیه که از یونیکس، roff و ویرایشگر تشکیل شده بود، برای پردازش متن برنامههای پتنت شده استفاده کرد. roff به زودی به troff، اولین برنامه چاپ و نشر الکترونیکی با قابلیت کامل حروفچینی تبدیل شد. کتاب راهنمای برنامهنویسان یونیکس هم در سوم نوامبر ۱۹۷۱ چاپ شد.
از آن جا که ایتیاندتی، یکی از شرکتهای دست اندرکار، از پروژه کنار گرفته بود، بنا بر قوانین آمریکا نمیتوانست از یونیکس استفادهٔ بازرگانی کند؛ به این ترتیب یونیکس رایگان به بازار عرضه شد. ایتیاندتی نیز یونیکس را برای دانشگاههای مختلف فرستاد و یونیکس کمکم در محافل علمی محبوب شد.
بازنوشتن به زبان سی
در ۱۹۷۲، یونیکس به زبان سی بازنوشته شد. این برخلاف پندار همگانی آن زمان بود که میگفت «هر چیز پیچیدهای مثل یک سیستمعامل که باید با رویدادهای حساس به زمان سر و کار داشته باشد، باید منحصرا به زبان اسمبلی نوشته شود.» نتیجه مهاجرت از زبان اسمبلی به زبان سطح بالاتر سی این بود که کد یونیکس پرتابلتر و قابل حملتر شد و برای اجرا بر روی ماشینهای دیگر تنها کافی بود قسمتهای کوچکی از آن به زبان اسمبلی مخصوص همان ماشین نوشته شوند.
ایتیاندتی کد منبع یونیکس را تحت مجوزهایی در دسترس دانشگاهها، شرکتهای تجاری و دولت ایالات متحده قرار دارد. مجوزها در همه جای کد منبع قرار داده شده بودند، حتی کدهای وابسته به ماشین در داخل هسته سیستمعامل، که به زبان اسمبلی پیدیپی-۱۱ نوشته شده بودند. در اواخر دهه ۱۹۷۰، کدهای منبع یونیکس در کتابی به نام «نسخه ۶ یونیکس به روایت لیونز، به همراه کد منبع» که توسط جان لینوز نوشته شده بود، به صورت گسترده منتشر شد. این کار باعث شد یونیکس به شکل قابل توجهی برای مقاصد آموزشی استفاده گردد.
ویرایشهای گوناگون
نسخههای سیستمعامل یونیکس، توسط ویرایشهای کتاب راهنمای کاربرانش مشخص میشدند. برای مثال «پنجمین ویرایش یونیکس» و «نسخه ۵ یونیکس» هر دو برای اشاره به یک نسخه استفاده میشدند. توسعه یونیکس با انتشار نسخههای ۴، ۵ و ۶ که در سال ۱۹۷۵ ادامه یافت. در این نسخهها مفهوم تازه ی لولهها اضافه شده بود که به طراحی ماژولار یونیکس و چرخه توسعه سریعتر آن کمک کرد. نسخه ی ۵ و به ویژه نسخه ی ۶، به پیدابش نسخههای مختلفی از یونیکس، چه در داخل آزمایشگاههای بل و چه در خارج از آن انجامید. مانند پیدبلیوبی/یونیکس و همچنین اولین نسخه تجاری یونیکس یعنی آیاس/۱. همان طور که قسمتهای بیشتری از یونیکس به زبان سی بازنویسی میشد، پورتابل بودن آن هم افزایش مییافت و آسانتر میشد آن را به دیگر سکوها انتقال داد. یونیکس توسط گروهی در دانشگاه ولونگوگ به اینتردیتا ۷/۳۲ پورت شد. آزمایشگاههای بل هم چند نسخه مختلف برای اهداف تحقیقاتی و استفاده داخلی در همان جا توسعه داد.
در سال ۱۹۷۴ دانشجویان دانشگاه برکلی آغاز به برنامهنویسی برای یونیکس میکردند و آن را برای دانشگاههای دیگر و ایتیاندتی فرستادند وبا ادامهٔ این کار یونیکس در سال ۱۹۷۷ به یک سیستمعامل کامل تبدیل میشود. در می ۱۹۷۵، دارپا مزایای سیستم اشتراک زمانی یونیکس که «چند قابلیت جالب ارائه کرده بود» را در RFC 681 مستند کرد. در ۱۹۷۸، یونیکس/۳۲وی برای ویایاکس، سیستم جدید DEC عرضه شد. در آن هنگام، یونیکس به اَشکال مختلفی بر روی ۶۰۰ ماشین اجرا میشد. آخرین نسخه تحقیقاتی از یونیکس، یعنی نسخه ۷ یونیکس، در سال ۱۹۷۹ منشتر شد. نسخههای ۸، ۹ و ۱۰ هم در دهه ۱۹۸۰ نوشته شدند اما فقط در بین چند دانشگاه منتشر شدند. دانشگاههای دیگر نیز مانند امآیتی، Purdue، استنفورد و... کارهای بسیاری برای یونیکس کردند. با نوشتن برنامههای اینترنتی برای یونیکس در سال ۱۹۸۰ به وسیلهٔ دانشگاه برکلی یونیکس در سازمانهای دولتی و شرکتهای شبکه و کارگزارها(Servers) به گستردگی به کار گرفته شد.
سیستم عاملهای یونیکس مانند
از این زمان شمار فراوانی از شرکتهای بازرگانی نیز از یونیکس برای کارهای بازرگانی خود بهره میجویند و نسخههای بازرگانی یونیکس هم به بازار میآیند که از این گروه میتوان پخشهای زیر را نام برد.
Xenix by Microsoft
AIX by IBM
HP-UX by HP
ULTRIX by Digital
SunOS by Sun
گذشته از سیستم عاملهایی که موسسه ی اپن گروپ، آنها را کاملا سازگار با مشخصات یونیکس یکتا دانسته، سیستم عاملهای فراوانی در عرضه شده اند که اگرچه استانداردهای لازم را فراهم آورده اند اما با نام شبه یونیکس آوازه دارند. ویرایشهای پرشمار سیستم عامل متن باز لینوکس از این دسته اند. همچنین سیستم عامل نکستستپ (NextStep) که بر مبنای بیاسدی دانشگاه برکلی پدید آمد، خود پایه ی سیستم عامل مک اُ.اس (Mac OS X) شرکت اپل شد. اپل آی.اُ.اس (iOS) را نیز بر پایه ی مک اُ.اس گسترش داد. بسیاری از سیستمعاملهای دیگر مانند اُربیت (Orbis) که بر روی پلی استیشن چهار ارائه میشود نیز بر مبنای یکی از انواع سیستم عامل بیاسدی گسترش یافته اند.
لینوکس
لینوکس (به انگلیسی: Linux) به هسته ی سیستمعاملهای شبه یونیکس میگویند که که در سال ۱۹۹۱ توسط لینوس تروالدز توسعه یافت. برخی به سیستم عاملهایی که از هستهٔ لینوکس استفاده میکنند (به این خاطر که نام لینوکس به طور گسترده در رسانهها استفاده میشود و نامی رایج تر است) نیز لینوکس میگویند (در این مقاله هم منظور از لینوکس، سیستم عاملهایی است که از هستهٔ لینوکس استفاده میکنند).
لینوکس قابل نصب بر روی انواع سختافزارهاست، از ساعت (Linux Watch)، تلفنهای همراه، تبلتها، مسیریابها، و کنسولهای بازی گرفته تا رایانههای رومیزی، رایانههای بزرگ و ابررایانهها.
به مجموعهای از نرمافزارهای بنا شده بر اجزای گفته شده توزیع لینوکس (linux distribution) میگویند که به طور معمول شامل ابزارهای گسترش نرمافزار، پایگاههای داده، سرویس دهندههای وب مثل آپاچی، محیطهای رومیزی مانند گنوم و کیدیای و اکسافسیای و مجموعههای اداری مانند اُپن آفیس هستند.
در ابتدا لینوکس برای استفادهٔ ریزپردازندهها با معماری ۸۰۳۸۶ اینتل طراحی شده بود؛ اما امروزه انواع گوناگون معماریها را پشتیبانی میکند و در انواع و اقسام وسایل از کامپیوترهای شخصی گرفته تا ابررایانهها و تلفنهای همراه به کار میرود. این سیستمعامل که در ابتدا بیشتر توسط افراد مشتاق گسترش پیدا میکرد و به کار گرفته میشد، توانسته است پشتیبانی شرکتهای سرشناسی چون آیبیام و هیولت-پاکارد را به دست آورد و با بسیاری از نسخههای خصوصی یونیکس رقابت کند. طرفداران لینوکس و بسیاری از تحلیلگران این موفقیت را ناشی از استقلال از فروشنده، کمهزینه بودن پیادهسازی، سرعت بالا، امنیت و قابلیت اطمینان آن میدانند.
پیشینه
در سال ۱۹۸۳ میلادی ریچارد استالمن که رئیس بنیاد نرمافزارهای آزاد بود پروژه گنو (GNU) را آغاز کرد. در این پروژه که یک جنبش نرمافزاری محسوب میشد برنامهنویسان با یکدیگر همکاری میکردند که این همکاری تا به حال نیز ادامه دارد.
آن زمان بیشتر ابزارهای پروژه گنو که با زبان برنامهنویسی سی و اسمبلی نوشته شده بود آماده کار بود و تنها یک هستهٔ مناسب و آزاد کم بود. حتی سیستمعامل مینیکس نیز با وجود در دسترس بودن کد منبع آن، آزاد نبود و حق نشر مخصوص داشت. کار در پروژه گنو به سمت طراحی یک هسته مناسب متمرکز میشد اما به نظر میرسید که برای ایجاد این هسته حداقل چند سال دیگر زمان نیاز است.
این تأخیر برای لینوس توروالدز قابل تحمل نبود. بنابراین خودش دست به کار شد و با الهام از کد مینیکس کار را آغاز کرد. سرانجام در ۲۵ اوت سال ۱۹۹۱ در ساعت ۲۰:۵۷ (به وقت گرینویچ) پیامی تاریخی به گروه خبری comp.os.minix از طرف لینوس توروالدز ارسال شد. او یک دانشجوی فنلاندی بود که آن زمان در دانشگاه هلسینکی درس میخواند.
متن پیام او چنین بود:
درود به هر کس که آن بیرون از مینیکس استفاده میکند. من هماکنون روی سیستمعاملی آزاد برای رایانههای AT ۳۸۶(۴۸۶) کار میکنم (فقط برای سرگرمی؛ مانند پروژهٔ گنو بزرگ و حرفهای نیست). از ماه آوریل کار را آغاز کردهام و هماکنون این سیستمعامل آمادهاست و کار میکند. دوست دارم از دیدگاه دیگران در مورد سیستمعاملم با خبر شوم. چه آنان که مینیکس را دوست دارند و چه آنان که دوست ندارند. چرا که سیستمعامل من تا حدی شبیه به مینیکس است.
در حال حاضر (۱٫۰۸)bash و(۱٫۴۰) gcc را بر روی آن دارم و چیزهای دیگری که به نظر میرسد همه درست کار میکنند. این بدان معناست که طی چند ماه آینده چیز بهدردبخوری فراهم خواهم کرد و دوست دارم بدانم مردم بیشتر چه امکاناتی لازم دارند. به هر پیشنهاد و نظری خوشآمد میگویم اما قول نمیدهم که آن را انجام دهم!
لینوس (torvalds@kruuna.helsinki.fi).
پ. ن: بله این نرمافزار آزاد است. البته قابل انتقال بر روی انواع دیگر رایانه نیست (چرا که دستورات AT۳۸۶ را به کار میبرد) و ممکن است غیر از سختدیسک AT چیز دیگری را پشتیبانی نکند. این همه چیزی است که من دارم!
لینوکس برخلاف مینیکس (یک سیستمعامل ساده نوشته شده توسط پروفسور اندرو تننبام که برای آموزش طراحی سیستمعامل به کار میرفت) که از معماری ریزهسته استفاده میکرد، با ایده هستههای یکپارچه طراحی شده بود. اولین نسخهٔ لینوکس در سپتامبر ۱۹۹۱ در اینترنت منتشر شد. دومین نسخهٔ آن به فاصلهٔ کمی در اکتبر همان سال منتشر شد. از آن پس هزاران برنامهنویس و هکر در سراسر دنیا در این پروژه شرکت کردند. مقالهٔ «کلیسای جامع و بازار» اثر اریک ریموند مدل گسترش هسته لینوکس و نرمافزارهای مشابه را تشریح میکند.
پنگوئن تاکس نشانه و مایه خوش شانسی هستهٔ لینوکس است. لینوس توروالدز مالک علامت تجاری لینوکس است که به عنوان «نرمافزار سیستمعامل رایانه برای تسهیل در استفاده و عملیات رایانه» به ثبت رسیدهاست.
مجوز
هستهٔ لینوکس و بیشتر بخشهای گنو تحت اجازهنامه عمومی همگانی گنو (جیپیاِل) منتشر میشوند. جیپیال لازم میداند که تغییرات کد منبع و کارهای مشتق شده نیز تحت مجوز جیپیال منتشر شوند.
گنو/لینوکس
از آنجایی که ابزارهای گنو که بخش عمدهٔ توزیعهای لینوکس را تشکیل میدهند از پروژه سیستمعامل آزاد گنو (که بسیار سابقهدارتر از هستهٔ لینوکس است) ریشه گرفتهاند، ریچارد استالمن و بنیاد نرمافزار آزاد درخواست کردهاند که سیستم ترکیب شده (از هستهٔ لینوکس و ابزارهای گنو) بدون توجه به نام توزیعاش، «گنو/لینوکس» خوانده شود.
برخلاف این که بعضی از توزیعها (مانند «گنو/لینوکس دبیان») از این نام استفاده میکنند، بسیاری تنها به گفتن «لینوکس» اکتفا میکنند. تفاوت بین هستهٔ توروالدز و سیستمی که شامل این هسته است، همیشه باعث سردرگمی میشود و نامگذاری همچنان بحثانگیز باقی ماندهاست.
توزیعهای لینوکس
لینوکس تقریباً همیشه یکی از اجزاء یک توزیع لینوکس (به انگلیسی: Distro) است. توزیعهای لینوکس توسط افراد، گروههای نه چندان متشکل و سازمانهای حرفهای گوناگون ایجاد میشوند. این توزیعها شامل تعدادی نرمافزار سیستم و برنامههای کاربردی به همراه روالی مشخص برای نصب آنها بر رایانه هستند. توزیعها معمولاً برای منظورهای مختلفی از جمله محلیسازی، پشتیبانی از یک معماری خاص، کاربردهای بیدرنگ (real-time applications) و سامانههای توکار (embedded systems) به وجود میآیند و برخی از آنها آگاهانه تنها از نرمافزارهای آزاد استفاده میکنند.
یک توزیع همه-منظورهٔ معمولی شامل هسته لینوکس، کتابخانهها و ابزارهای گنو، پوستههای خط فرمان و انبوه بیشماری از نرمافزارهای کاربردی از مجموعههای اداری و سیستم پنجرهای اِکس گرفته تا مفسرها، ویرایشگرهای متن و ابزارهای علمی است.
گستره
در بیش از یک میلیارد دلار: برآورد اندازه گنو/لینوکس که مقاله تحقیقی است بر روی توزیع رِدهت ۷٫۱، تعداد خطوط کد منبع ۳۰ میلیون عنوان شدهاست. در این تحقیق با استفاده از روش (Constructive Cost Model – COCOMO) برآورد شدهاست که بر روی این توزیع نزدیک به ۸ هزار نفر-سال کار گسترش انجام گرفتهاست. چنانکه این نرمافزار با روشهای متعارف خصوصی گسترش مییافت، هزینه گسترشاش در ایالات متحده با روشهای گسترش متعارف خصوصی بالغ بر ۱/۰۸ میلیارد دلار (با قیمت دلار سال ۲۰۰۰) میشد.
بخش بزرگی از کد (۷۱٪) با زبان برنامهنویسی C نوشته شدهاست اما از بسیاری از زبانهای دیگر همچون ++C، لیسپ، اسمبلی، پرل، فرترن، پایتون و زبانهای اسکریپتنویسی گوناگون استفاده شدهاست. اندکی بیش از نیمی از خطوط کد، تحت مجوز عمومی گنو (جیپیاِل) هستند. هسته لینوکس ۲٫۴ میلیون خط کد است و ۸٪ کل کد را تشکیل میدهد.
در پژوهشی جدید که بر روی توزیع لینوکس دبیان نسخه ۴٫۰ که در سال ۲۰۰۷ عرضه شده صورت گرفت، مشخص شد این توزیع دارای نزدیک به ۲۸۳ میلیون خط کد بود که تخمین زده میشود هزینه گسترشاش با روشهای گسترش متعارف خصوصی بالغ بر ۸٫۰۷ میلیارد دلار (با قیمت دلار سال ۲۰۱۳) و زمان مورد نیاز حدود هفتاد و سه هزار نفر-سال میشود.
کاربردهای سیستمعاملهای شکل گرفته بر پایه لینوکس
در گذشته یک کاربر لینوکس برای پیکربندی و نصب سیستم خود، نیازمند دانش بالایی از رایانه بود. این دلیل به علاوه جذاب بودن دسترسی به درون سیستم، باعث شده بود که به طور سنتی کاربران لینوکس را (بر خلاف کاربران ویندوز یا مَکاواِس) کسانی شکل بدهند که با تکنولوژی بیشتر دمخور هستند. افرادی که معمولاً با القاب «هَکِر» و «گیک» شناخته میشوند. این نگرش در سالهای اخیر با افزایش راحتی کار در لینوکس و گسترده شدن استفاده از بسیاری از توزیعها، اعتبار خود را از دست دادهاست. لینوکس در بازار سرورها و کاربردهای ویژه (مانند پردازش تصویر و سرویسهای وِب) پیشرفت قابل ملاحظهای کرده و در حال ورود به بازار بزرگ رایانههای رومیزی است.
لینوکس اساس مجموعه نرمافزار سرور موسوم به ل. آ. م. پ ((ل) ینوکس، (آ) پاچی، (م) ایاسکیوال, (پ) رل/(پ) یاچپی/(پ) ایتون) را تشکیل میدهد که میان گسترشدهندگان وب محبوبیت گستردهای کسب کردهاست. بدلیل پایداری و انعطاف لینوکس، این سیستمعامل حضور پررنگی به عنوان سیستمعاملی برای کامپیوترهای کارساز دارد. بر اساس آمار در سال ۲۰۰۸، از میان ۱۰ تا از معتبرترین شرکت هاستینگ دنیا، ۵ شرکت سیستمعامل لینوکس را در کارسازهای وب خود بکار میگیرند. توزیعهای لینوکس به طور گستردهای به عنوان سیستم عامل در ابر رایانهها استفاده میشود: از نوامبر سال ۲۰۱۰، از ۵۰۰ سیستم برتر، ۴۵۹ مورد (۹۱٫۸ ٪)تحت اجرای توزیعهای لینوکس هستند. لینوکس همچنین به عنوان سیستم عامل برای سکویا آی بی ام قوی ترین ابر رایانه جهان که در سال ۲۰۱۱ به بهرهبرداری میرسد، به کار خواهد رفت.
از لینوکس همچنین بیشتر در سیستمهای کارگذاشته استفاده میشود. رایگان، متن باز و آزاد بودن آن باعث میشود انتخابی ایدهآل برای ابزارهایی مانند سیمپیوتر (رایانهای که برای جمعیت کم درآمد کشورهای در حال گسترش طراحی شده) باشد.
لینوکس با داشتن محیطهای رومیزی مانند گنوم و کیدیای، رابط کاربری همچون اپل مکینتاش و مایکروسافت ویندوز را در کنار دیگر محیطهای گرافیکی و رابط خط فرمان یونیکس-مانند سنتیاش، عرضه میکند. هرچند نرمافزارهای گرافیکی لینوکس برای بسیاری از مصارف وجود دارند، در بسیاری زمینهها نرمافزارهای خصوصی هنوز از گستره و میزان محبوبیت بیشتری برخوردارند.
نرمافزارهای کارسازِ تحت لینوکس
کارساز (به انگلیسی: Server) به سیستم رایانهای پرتوانی گفته میشود که در یک شبکه برای وظیفهای خاص، نقشی را بر عهده میگیرد. سیستمهای کامپیوتری کارساز معمولاً از سختافزاری پرقدرت و نرمافزاری منعطف و پایدار برای ارائهٔ خدمت مورد نظر به مشتریان زیاد استفاده میکنند. سیستمعاملهای شکل گرفته بر پایه لینوکس، به دلیل پایداری و انعطاف، گزینههای خوبی برای نصب بر روی سیستمهای کارساز هستند.
نمونه نرمافزارهای مشهوری که معمولاً تحت لینوکس به عنوان نرمافزار کارساز استفاده میشوند:
اسکوئید (SQUID)
کارساز پروکسی-کش (Proxy-Cache)
بایند (بایند)
کارساز سامانه نام دامنه (DNS)
آپاچی (APACHE)
کارساز وب
پستفیکس(Postfix)
کارساز پست الکترونیکی
مایاسکیوال (MySQL)
کارساز پایگاه داده
نصب
در ابتدا مشکل بودن نصب سیستمهای بر پایه لینوکس مانعی برای پذیرش آن بود؛ اما در سالهای اخیر نصب لینوکس بسیار آسان شدهاست. بسیاری از توزیعها دارای نصبی آسان و قابل مقایسه با نسخههای ویندوز هستند؛ بهگونهای که توزیع اوبونتو با چند کلیک نصب میشود. علاوه بر این، رایانههای شخصی که با توزیعهای لینوکس وارد بازار شدهاند و به آسانی از بسیاری از فروشندههای اصلی، همچون دل، هیولت-پاکارد و وال-مارت قابل تهیه است.
بیشتر شیوههای عمومی نصب لینوکس، توسط همه توزیعهای مهم پشتیبانی میشود که شامل اجرا از طریق لوح فشرده، حاوی برنامههای نصب و راهاندازی نرمافزارهاست. این لوح فشرده میتواند از طریق تصویر استاندارد (ISO image) بارگذاری شده باشد، به تنهایی و به قیمت بسیار پایین خریداری شود، یا میتواند در مجموعه نرمافزارهای تجاری اضافی ارائه شود.
برخی توزیعها همچون دبیان (Debian) با فلاپی دیسک نیز قابل نصب هستند. پس از نصب ابتدایی، بیشتر نرمافزارها از طریق اینترنت و لوح فشرده قابل بارگذاری و نصب هستند.
بسیاری از توزیعها میتوانند بیدرنگ از طریق دیسکهای زنده بسیار سریعتر از نصب بر روی دیسک سخت اجرا شوند. به این صورت که یکبار از لوح فشرده راهاندازی میشود و میتوان از لینوکس بدون هیچگونه تغییری در محتویات دیسک سخت استفاده کرد. به همین نحو برخی توزیعهای حداقل، همچون تامزروتبوت (Tomsrtbt)، بدون نیاز به تغییر محتویات دیسک سخت از طریق فلاپی دیسک قابل اجرا هستند.
همچنین بسیاری توزیعها از راه انداری بر روی شبکه پشتیبانی میکنند، پس همه مراحل نصب و پیکربندی دستگاه میتواند بر روی شبکه انجام شود.
پیکربندی
بیشتر فایلهای پیکربندی در پوشهای با نام «etc/» ذخیره شدهاست. اگر کاربر مخصوص باشد، فایلهای پنهان در پوشه خانه کاربر قرار دارد. تعدادی از برنامهها از پایگاه داده پیکربندی به عوض فایل استفاده میکنند.
راههای بسیاری برای ایجاد تغییرات وجود دارد. آسانترین راه، استفاده از ابزارهای آماده همچون یاست (YaST) در توزیع SUSE یا مرکز کنترل در مندریک (Mandrake) استفاده کرد. انواع دیگر آن، مانند لینوکسکانف (Linuxconf)، ابزارهای سیستم گنوم، و وبمین (Webmin) برای توزیعهای ویژه نیستند. آنها شامل بسیاری از امکانات پیکربندی توسط خط فرمان هستند. از آنجا که به طور متداول بیشتر تنظیمات در فایلهای متنی ذخیره شدهاند، آنها را میتوان با هر ویرایشگر متنی پیکر بندی نمود.
پشتیبانی
فروشندگان تجاری و دیگر کاربران گنو/لینوکس در اجتماعات آنلاین (کانالهای آیآرسی)، گروههای خبری، فهرستهای پستی و انجمنهای اینترنتی پشتیبانی فنی ارائه میکنند. گروه کاربران لینوکس (LUGs) در همه جهان به کاربران بسیاری به رایگان یاری میرساند.
مدل کسب و کار بیشتر فروشندگان تجاری لینوکس (بمانند ردهت و ناول) بر پایه دریافت حقالزحمه جهت پشتیبانی است. اینگونه دریافت پشتیبانی در برابر پرداخت پول برای کاربران تجاری لینوکس حایز اهمیت است.
مک اواس
مک او اس (MAC OS) یک نوع سیستمعامل دارای رابط کاربری است که شرکت اپل آن را توسعه داده است. این سیستمعامل که همراه با ارائه اولین مدل مکینتاش عرضه شد تا قبل از نسخه ۷٫۶ با نام «نرمافزار سیستم» شناخته میشد و از نسخه ۷٫۶ به بعد مک اواس نام گرفت.
طراحی
از همان ابتدا، اپل با استفاده از طراحی به عمد به دنبال به حداقل رساندن نیاز به فهم کامل سیستم عامل توسط کاربر بود به عنوان مثل. کارهایی که بر روی محصولات دیگر نیاز به دانش صریح و آشکاری در کار سیستم عامل را میطلبید بر روی مکینتاش توسط حرکات موس و استفاده از پانل کنترل گرافیکی انجام می گرفته است. در نتیجه مقصود این بود که محصولی کاربر پسند تر و قابل تسلط به راحتی تولید شود. و این عامل تمایز آن از دستگاههایی بود که از محیط عاملهای دیگر، مانند ماشینهای MS - DOS استفاده میکردند، که به اصطلاح بسیار فنی بودند.
در ابتدا هسته اصلی "نرمافزار سیستم" در ROM بود، که بعدها با به روز رسانی به طور معمول به رایگان بر روی فلاپی در اختیار نمایندگیهای اپل قرار گرفت تا دخالت کاربر در هنگام ارتقاء سیستم عامل نیز تنها به اجرای یک فایل نصبی به حداقل برسد، و یا به سادگی جایگزین کردن فایلهای سیستم باشد، سادگی که دوباره محصول این شرکت را از دیگر محصولات متفاوت کرد.
نسخهها
نسخههای اولیه سیستم عامل مک تنها با مکینتاش موتورولا ۶۸۰۰۰ سازگار بودند. و رایانههای اپل با عنوان PowerPC معرفی شدند و درست از زمانی که رایانههای PowerPC معرفی شدند سیستم عامل را نیز برای حمایت از این معماری توسعه دادند. سیستم عامل Mac OS ۸٫۱ آخرین نسخه از برنامه است که میتواند بر روی پردازنده "۶۸K" یا (۶۸۰۴۰) اجرا شود. سیستم عامل Mac OS X، که جایگزین نسخه "کلاسیک" سیستم عامل مک است، از نسخه ۱۰٫۰ ("یوز پلنگ") به نسخه ۱۰٫۳ ("پلنگ") تنها با پردازشگرهای PowerPC سازگار است. و در نسخه ۱۰٫۴ ("ببر"، اینتل تنها پس از بروز رسانی) و نسخه ۱۰٫۵ ("پلنگ") پردازندههای اینتل و PowerPC را پشتیبانی میکند. و بعد از نسخه ۱۰٫۶ ("پلنگ برفی") تنها از پردازندههای اینتل پشتیبانی میکند.
سیستم عامل مکینتاش اولیه در ابتدا از دو بخش نرمافزاری، به نام "سیستم" و "فایندر (finder)"، که هر کدام با شماره نسخه خود را شامل است عرضه شد. سیستم ۷٫۵٫۱ اولین سیستم عامل مک شامل آرم (تغییر در آیکون اصلی که در شروع مک نمایش داده میشود) و Mac OS ۷٫۶ اولین بار به نام "سیستم عامل مک" نام گذاری شد.
ویندوز اکسپی
ویندوز اکسپی (به انگلیسی: Windows XP) یکی از سیستمعاملهایی است که اسم رمز «ویسلر» (Whistler) را بر خود داشت، چرا که در طول توسعهٔ ویندوز ایکسپی بسیاری از کارکنان مایکروسافت در تفریحگاه ویسلر کانادا مشغول اسکی بودند. ویندوز ایکس پی بر روی هسته ویندوز انتی و ۲۰۰۰ پایهگذاری شد و جانشین دو ویندوز ۲۰۰۰ و امیی گردید.
شرکت مایکروسافت ویندورز اکسپی را به منظور بهروزکردن رابط کاربر (شکل ظاهری برنامه)، افزودن ویژگیهای تازه، یکدستکردن «مبنای کد» بین اعضای مختلف خانواده مایکروسافت ویندوز و فراهم آوردن یک پلتفرم باثباتتر، پایهگذاری و در سال ۲۰۰۱ روانه بازار کرد.
ویندوز اکس پی که در اکتبر ۲۰۰۱ عرضه شد، یکی از محبوبترین سیستمهای عامل کامپیوتر در جهان به شمار میرود که گفته میشود بیش از چهارصد میلیون نسخه از آن در حال استفاده است. با این حال مایکروسافت اعلام کرده دیگر به شرکتهای عمده سازنده کامپیوتر نظیر دل، اچ پی و توشیبا مجوز نصب سیستمعامل قبلی را بر روی کامپیوترهای تولیدی نخواهد داد، و از ژانویه ۲۰۰۸ ویندوز اکس پی بر روی کامپیوترهای جدید عرضه نخواهد شد.
ویندوز اکسپی در ابتدا در دو نسخه خانگی و حرفهای عرضه شدهبود. ویندوز اکسپی از چندین زبان مختلف پشتیبانی میکند.
سختافزار لازم
ویرایشها
ویندوز XP در ویراشهای مختلفی ارائه شدهاست که از رایجترین آنها میتوان به ویندوز XP ویرایش خانگی برای کاربران خانگی ویندوز XP حرفهای که قابلیتهای دیگری همچون پشتیبانی از دامنه ویندوز سرور را دارد مناسب کاربران حرفهای و تجاری است، اشاره کرد. ویندوز XP ویرایش Media Center نیز در حقیقت همان ویندوز XP حرفهای است که قابلیتهای اضافی در مورد سیستمهای چند رسانهای همچون تماشای TV، مشاهده DVD و شنیدن موزیک دارد. ویندوز XP ویرایش Tablet PC برای اجرا در پلت فرمهای Table PC طراحی شدهاست. همچنین دو ویرایش ۶۴ بیتی از ویندوز XP وجود دارد: ویندوز XP ویرایش ۶۴ بیتی برای پردازندههای تیانیوم و ویندوز XP ویرایش حرفهای x۶۴ برای پردازندههای x۸۶-۶۴
ویندوز XP به خاطر بهبود کارایی و پایداری نسخههای قبلی ویندوز، مورد توجه قرار گرفتهاست. در ویندوز XP، واسط گرافیکی کاربر کاملاً از نو طراحی شدهاست و بسیار کاربرپسندتر از نسخههای قبلی ویندوز مایکروسافت است. قابلیتهای مدیریت نرمافزاری جدیدی در XP معرفی شدهاند که کاربران را از جهنم DLLها که در نسخههای قبلی همه را به ستوه درمی آورد، رهایی میبخشد. XP اولین نسخه از ویندوز است که از فعال سازی محصول برای مقابله با قوانین تخلف نرمافزاری استفاده میکند. با وجود تمام قابلیتهای موجود، XP به خاطر آسیب پذیریهای امنیتی، وجود برنامههای جانبی مایکروسافت همچون اینترنت اکسپلورر و ویندوز مدیا پلیر در ویندوز به صورت پیش فرض و برخی زمینههای واسط کاربر، مورد انتقاد کاربران قرار گرفتهاست. در ویرایش اصلی ویندوز، ویرایش خانگی برای کاربران خانگی و ویرایش حرفهای، برای کاربران حرفهای و تجاری است. علاوه بر این ویرایش Media Center نیز موجود میباشد.
در زیر برخی از قابلیتهای اضافی ویندوز XP نسخه حرفهای نسبت به نسخه خانگی آمدهاست:
توانایی پیوستن به دامنه ویندوز سرور، گروهی از کامپیوترها که از راه دور به وسیله یک یا چند سرور مرکزی مدیریت میشوند (اکثر کسب و کارهایی که از ویندوز استفاده میکنند دامنه و ویندوز سرور دارند).
استفاده از طرحهای لیست کنترل دسترسی برای تعیین اجازه دسترسی به فایلها به کاربران خاص، البته کاربران میتوانند از ابزارهایی برای از بین بردن این اجازه دسترسیها استفاده کنند. رفتن به Safe Mode یکی از راههای اصلاح لیست کنترل دسترسیها است.
سرور سرویسهای ترمینال که امکان استفاده از ویندوز را به کاربران کامپیوترهای دیگر از طریق شبکهٔ محلی یا اینترنت میدهد.
فولدر و فایلهای offline که به PC امکان ذخیره و اجرای یک کپی از فایلهای کامپیوترهای دیگر موجود در شبکه در حالت قطع بودن اتصال را میدهد.
سیستم فایل رمزنگاری شده، که فایلهای ذخیره شده در هارد دیسک را رمزنگاری میکند و در نتیجه به کاربران غیرمجاز دیگر اجازه خواندن آنها را نخواهد داد.
قابلیتهای مدیریتی متمرکز شده، شامل سیاستهای گروهی، نصب و نگهداری خودکار نرمافزار، سرویسهای نصب از راه دور (RIS)
پشتیبانی از دو واحد پردازش مرکزی و تواناییهای هایپر تردینگ که در پردازندههای مدرن به عنوان بخشی از یک پردازنده فیزیکی در نظر گرفته میشود.
ویندوز XP برای سختافزارهای خاص
مایکروسافت نسخههای سفارشی از ویندوز XP برای بازار سختافزارهای خاص را نیز عرضه کردهاست. پنج نسخه از XP برای سختافزارهای خاص است که دوتای آنها مخصوص پردازندههای ۶۴ بیتی است.
ویرایش ۶۴ بیتی ویندوز اکسپی
«ویرایش ۶۴ بیتی ویندوز XP» برای کامپیوترهای با پردازنده اتیانیوم طراحی شدهاست. عرضه این نسخه در سال ۲۰۰۵ پس از اتمام تولید سیستمهای ایتانیوم، توسط کمپانی Hewlett Packard آخرین کمپانی عرضه کننده سیستمهای ایتانیوم متوقف شد. البته در نسخههای سرور ویندوز همچنان از پردازندههای ایتانیوم پشتیبانی میشود.
ویرایش x۶۴ ویندوز XP حرفهای
«ویرایش x۶۴ ویندوز حرفهای» بر اساس ویندوز سرور ۲۰۰۳ طراحی شدهاست و پردازندههای AMD ۶۴ و نسخه توسعه یافته معماری IA-۳۲ اینتل را پشتیبانی میکند. این معماری در چیپهای اوپترون و Athlon ۶۴ شرکت AMD و نسخههای توسعه یافته اکس۸۶-۶۴ با سازگاری گسترده چیپهای اینتل یافت میشود. مایکروسافت در نسخههای قبلی ویندوز نیز میکروپروسسورهای خاص را پشتیبانی میکرد. البته ویندوز NT پردازندههای ۶۴ بیتی را به عنوان ۳۲ بیتی در نظر میگرفت. فایلهای لازم برای تمام معماریهای مختلف پردازندهها در CD نصب XP موجود است و نیازی به خرید نسخههای مجزا نمیباشد.
ویرایش Media Center ویندوز اکسپی
«ویرایش Media Center ویندوز XP» برای کامپیوترهای media center پیادهسازی شدهاست. این نسخه تنها در همان کامپیوترها موجود است و به صورت مجزا به فروش نمیرسد. در سال ۲۰۰۳ این نسخه تحت عنوان «ویندوز XP ویرایش Media center ۲۰۰۳» به هنگام شد که قابلیتهای جدیدی همچون امکان استفاده از رادیو FM به آن اضافه شده بود. در سالهای ۲۰۰۴ و ۲۰۰۵ نیز این ویرایش ارتقاء داده شد.
ویرایش Tablet PC ویندوز اکسپی
مایکروسافت این نسخه را به طور خاص برای کامپیوترهای لپ تاپ/نت بوک که به آنها اصطلاحاً Tablet PC میگویند، طراحی کردهاست. این ویرایش یادداشتهای دست نوشته، صفحات نمایش تصویر-گرا و صفحات نمایش حساس به قلم را پشتیبانی میکنند. این ویرایش نیز به همراه کامپیوتر Tablet به فروش میرسد و امکان خرید مجزای آن وجود ندارد.
ویندوز XP نهفته
این ویرایش برای کاربرد در وسایل الکترونیکی خاصی همچون بستههای Set-top، کیوسکها، دستگاههای خودپرداز، وسایل پزشکی، دستگاههای POS و مولفههای پروتکل صدا روی اینترنت (VOIP) پیادهسازی شدهاست.
ویندوز پایه برای کامپیوترهای شخصی قدیمی
در ژوئیه ۲۰۰۶ مایکروسافت یک نسخه محدود شده(thin-client) از ویندوز XP برای PCهای قدیمی ارائه کرد که تنها برای مشتریان بیمه نرمافزاری مایکروسافت مایکروسافت که میخواهند سیستم عامل خود را به XP ارتقا دهند ولی به هر دلیل تمایلی به خرید سختافزارهای مورد نیاز برای XP ندارند، عرضه میشود.
ویرایش مبتدی ویندوز XP
این ویرایش ویندوز XP نسخه ارزان قیمتی است که در کشورهای تایلند، ترکیه، مالزی، اندونزی، روسیه، هند، برزیل، آرژانتین، شیلی، مکزیک، اکوادور، اروگوئه و ونزوئلا موجود است. این ویرایش شبیه ویرایش خانگی است ولی محدودیتهای خاصی همچون اجازه اجرای تنها سه برنامه به طور همزمان را دارد. بر طبق گفته انتشارات مایکروسافت، ویرایش مبتدی ویندوز XP، «یک ویرایش ارزان قیمت مایکروسافت ویندوز XP است که برای کاربران مبتدی PC در کشورهای در حال توسعه طراحی شدهاست.»
ویرایش مبتدی امکانات خاصی برای بازارهای غیرآمریکایی، جایی که مشتریان ممکن است سواد کامپیوتری نداشته باشند، دارد. به عنوان مثال امکانات راهنمای محلی شده برای آنهایی که به زبان انگلیسی صحبت نمیکنند، تصاویر پس زمینه مخصوص هر کشور و محافظ صفحه نمایشهایی مخصوص و تنظیمات پیش فرض دیگری که برای استفاده راحتتر از ویندوز XP طراحی شدهاست، برخی از امکانات مخصوص این ویرایش است. به علاوه این ویرایش محدودیتهایی دارد که اعمال آنها باعث ارزانتر شدن آن نسبت به نسخههای دیگر ویندوز XP شدهاست.
در این ویرایش تنها سه برنامه به طور همزمان اجازه اجرا دارند و هر برنامه نیز حداکثر میتواند سه پنجره باز داشته باشد. بیشترین رزولوشن به ۷۶۸×۱۰۲۴ محدود شدهاست و هیچ پشتیبانی از دامنه و شبکههای کارگروهی نمیشود. همچنین این ویرایش برای پردازندههای کم توانی همچون سلرون اینتل و Duron کمپانی AMD ساخته شدهاست. در این ویرایش حداکثر حافظه اصلی ۲۵۶ مگابایت و ۸۰ گیگا بایت هارد دیسک را پشتیبانی میکند. (البته مایکروسافت به صورت واضح اعلام نکردهاست که این محدودیت برای اندازه کل دیسک است با برای هر پارتیشن) و بالاخره اینکه گزینههای محدودی برای سفارشی سازی تمها، دسک تاپ و نوار ابزار موجود است.
در ۱۹ اکتبر ۲۰۰۶ مایکروسافت اعلام کرد که ۱٫۰۰۰٫۰۰۰ نسخه از ویرایش مبتدی ویندوز XP را به فروش رساندهاست. اما در تولید انبوه این ویرایش توفیق چندانی نداشتهاست. نسخههای کرک شده و استفاده بدون مجوز از این ویرایش نیز بسیار موجود است.
بخش ورودی/خروجی (I/O) این امکان را به رایانه میدهد تا اطلاعات را از جهان بیرون تهیه و نتایج آنها را به همان جا برگرداند. محدوده فوق العاده وسیعی از دستگاههای ورودی/خروجی وجود دارد، از خانواده آشنای صفحهکلیدها، نمایشگرها، نَرمدیسک گرفته تا دستگاههای کمی غریب مانند رایابینها (webcams). (از سایر ورودی/خروجیها میتوان موشواره mouse، قلم نوری، چاپگرها (printer)، اسکنرها، انواع لوحهای فشرده(CD, DVD) را نام برد).

چیزی که تمامی دستگاههای عمومی در آن اشتراک دارند این است که آنها رمزکننده اطلاعات از نوعی به نوع دیگر که بتواند مورد استفاده سیستمهای رایانه دیجیتالی قرار گیرد، هستند. از سوی دیگر، دستگاههای خروجی آن اطلاعات به رمز شده را رمزگشایی میکنند تا کاربران آنها را دریافت نمایند. از این رو یک سیستم رایانه دیجیتالی یک نمونه از یک سامانه دادهپردازی میباشد.
دستورالعملها
هر رایانه تنها دارای یک مجموعه کم تعداد از دستورالعملهای ساده و تعریف شده میباشد. از انواع پرکاربردشان میتوان به دستورالعمل «محتوای خانه ۱۲۳ را در خانه ۴۵۶ کپی کن!»، «محتوای خانه ۶۶۶ را با محتوای خانه ۰۴۲ جمع کن، نتایج را در خانه ۰۱۳ کن!»، «اگر محتوای خانه ۹۹۹ برابر با صفر است، به دستورالعمل واقع در خانه ۳۴۵ رجوع کن!».
دستورالعملها در داخل رایانه بصورت اعداد مشخص شدهاند - مثلاً کد دستور العمل (copy instruction) برابر ۰۰۱ میتواند باشد. مجموعه معین دستورالعملهای تعریف شده که توسط یک رایانه ویژه پشتیبانی میشود را زبان ماشین مینامند. در واقعیت، اشخاص معمولاً به زبان ماشین دستورالعمل نمینویسند بلکه بیشتر به نوعی از انواع سطح بالای زبانهای برنامهنویسی، برنامهنویسی میکنند تا سپس توسط برنامه ویژهای (تفسیرگرها (interpreters) یا همگردانها (compilers) به دستورالعمل ویژه ماشین تبدیل گردد. برخی زبانهای برنامهنویسی از نوع بسیار شبیه و نزدیک به زبان ماشین که اسمبلر (یک زبان سطح پایین) نامیده میشود، استفاده میکنند؛ همچنین زبانهای سطح بالای دیگری نیز مانند پرولوگ نیز از یک زبان انتزاعی و چکیده که با زبان ماشین تفاوت دارد بجای دستورالعملهای ویژه ماشین استفاده میکنند.
معماریها
در رایانههای معاصر واحد محاسبه و منطق را به همراه واحد کنترل در یک مدار مجتمع که واحد پردازشی مرکزی (CPU) نامیده میشود، جمع نمودهاند. عموما، حافظه رایانه روی یک مدار مجتمع کوچک نزدیک CPU قرار گرفته. اکثریت قاطع بخشهای رایانه تشکیل شدهاند از سامانههای فرعی (به عنوان نمونه، منبع تغذیه رایانه) و یا دستگاههای ورودی/خروجی.
برخی رایانههای بزرگتر چندین CPU و واحد کنترل دارند که بصورت همزمان با یکدیگر درحال کارند. اینگونه رایانهها بیشتر برای کاربردهای پژوهشی و محاسبات علمی بکار میروند.
کارایی رایانهها بنا به تئوری کاملاً درست است. رایانه دادهها و دستورالعملها را از حافظهاش واکشی (fetch) میکند. دستورالعملها اجرا میشوند، نتایج ذخیره میشوند، دستورالعمل بعدی واکشی میشود. این رویه تا زمانی که رایانه خاموش شود ادامه پیدا میکند. واحد پردازنده مرکزی در رایانههای شخصی امروزی مانند پردازندههای شرکت ای-ام-دی و شرکت اینتل از معماری موسوم به خط لوله استفاده میشود و در زمانی که پردازنده در حال ذخیره نتیجه یک دستور است مرحله اجرای دستور قبلی و مرحله واکشی دستور قبل از آن را آغاز میکند. همچنین این رایانهها از سطوح مختلف حافظه نهانگاهی استفاده میکنند که در زمان دسترسی به حافظه اصلی صرفهجویی کنند.
برنامهها
برنامه رایانهای فهرستهای بزرگی از دستورالعملها (احتمالاً به همراه جدولهائی از داده) برای اجرا روی رایانه هستند. خیلی از رایانهها حاوی میلیونها دستورالعمل هستند، و بسیاری از این دستورها به تکرار اجرا میشوند. یک رایانه شخصی نوین نوعی (درسال ۲۰۰۳) میتواند در ثانیه میان ۲ تا ۳ میلیارد دستورالعمل را پیاده نماید. رایانهها این مقدار محاسبه را صرف انجام دستورالعملهای پیچیده نمیکنند. بیشتر میلیونها دستورالعمل ساده را که توسط اشخاص باهوشی «برنامه نویسان» در کنار یکدیگر چیده شدهاند را اجرا میکنند. برنامهنویسان خوب مجموعههایی از دستورالعملها را توسعه میدهند تا یکسری از وظایف عمومی را انجام دهند (برای نمونه، رسم یک نقطه روی صفحه) و سپس آن مجموعه دستورالعملها را برای دیگر برنامهنویسان در دسترس قرار میدهند. (اگر مایلید «یک برنامهنویس خوب» باشید به این مطلب مراجعه نمایید.)
رایانههای امروزه، قادرند چندین برنامه را در آن واحد اجرا نمایند. از این قابلیت به عنوان چندکارگی (multitasking) نام برده میشود. در واقع، CPU یک رشته دستورالعملها را از یک برنامه اجرا میکند، سپس پس از یک مقطع ویژه زمانی دستورالعملهایی از یک برنامه دیگر را اجرا میکند. این فاصله زمانی اکثرا بهعنوان یک برش زمانی (time slice) نام برده میشود. این ویژگی که CPU زمان اجرا را بین برنامهها تقسیم میکند، این توهم را بوجود میآورد که رایانه همزمان مشغول اجرای چند برنامهاست. این شبیه به چگونگی نمایش فریمهای یک فیلم است، که فریمها با سرعت بالا در حال حرکت هستند و به نظر میرسد که صفحه ثابتی تصاویر را نمایش میدهد. سیستمعامل همان برنامهای است که این اشتراک زمانی را بین برنامههای دیگر تعیین میکند.
سیستمعامل
کامپیوتر همیشه نیاز دارد تا برای بکار انداختنش حداقل یک برنامه روی آن در حال اجرا باشد. تحت عملکردهای عادی این برنامه همان سیستمعامل یا OS که مخفف واژههای Operating System است. سیستم یا سامانه عامل بر اساس پیشفرضها تصمیم میگیرد که کدام برنامه برای انجام چه وظیفهای اجرا شود، چه زمان، از کدام منابع (مثل حافظه، ورودی/خروجی و...) استفاده شود. همچنین سیستمعامل یک لایه انتزاعی بین سختافزار و برنامههای دیگر که میخواهند از سختافزار استفاده کنند، میباشد، که این امکان را به برنامه نویسان میدهد تا بدون اینکه جزئیات ریز هر قطعه الکترونیکی از سختافزار را بدانند بتوانند برای آن قطعه برنامهنویسی نمایند. در گذشته یک اصطلاح متداول بود که گفته میشد با تمام این وجود کامپیوترها نمیتوانند برخی از مسائل را حل کنند که به این مسائل حل نشدنی گفته میشود مانند مسائلی که در مسیر حلشان در حلقه بینهایت میافتند. به همین دلیل نیاز است که با کمک روشهای خاص بطور مثال به چند بخش تقسیم نمودن مساله یا روشهای متداول دیگر از رخ دادن این خطا تا حد امکان جلوگیری نمود. از جمله سیستم عاملهای امروزی میتوان به مایروسافت ویندوز، مکینتاش اپل و لینوکس و بی اس دی اشاره کرد.
کاربردهای رایانه
نخستین رایانههای رقمی، با قیمتهای زیاد و حجم بزرگشان، در اصل محاسبات علمی را انجام میدادند، انیاک یک رایانهٔ قدیمی ایالات متحده اصولاً طراحی شده تا محاسبات پرتابهای توپخانه و محاسبات مربوط به جدول چگالی نوترونی را انجام دهد. (این محاسبات بین دسامبر ۱۹۴۱ تا ژانویه ۱۹۴۶ روی حجمی بالغ بر یک میلیون کارت پانچ انجام پذیرفت! که این خود طراحی و سپس تصمیم نادرست بکارگرفته شده را نشان میدهد) بسیاری از ابررایانههای امروزی صرفاً برای کارهای ویژهٔ محاسبات جنگافزار هستهای استفاده میگردد.
CSIR Mk I نیز که نخستین رایانه استرالیایی بود برای ارزیابی میزان بارندگی در کوههای اسنوئی (Snowy)این کشور بکاررفت، این محاسبات در چارچوب یک پروژه عظیم تولید برقابی انجام گرفت.
برخی رایانهها نیز برای انجام رمزگشایی بکارگرفته میشد، برای مثال Colossus که در جریان جنگ جهانی دوم ساخته شد، جزو اولین کامپیوترهای برنامهپذیر بود (البته ماشین تورینگ کامل نبود). هرچند رایانههای بعدی میتوانستند برنامهریزی شوند تا شطرنج بازی کنند یا تصویر نمایش دهند و سایر کاربردها را نشان دهد.
سیاستمداران و شرکتهای بزرگ نیز رایانههای اولیه را برای خودکارسازی بسیاری از مجموعههای داده و پردازش کارهایی که قبلا توسط انسانها انجام میگرفت، بکار بستند - برای مثال، نگهداری و بروزرسانی حسابها و داراییها. در موسسات پژوهشی نیز دانشمندان رشتههای مختلف شروع به استفاده از رایانه برای مقاصدشان نمودند.
کاهش پیوسته قیمتهای رایانه باعث شد تا سازمانهای کوچکتر نیز بتوانند آنها را در اختیار بگیرند. بازرگانان، سازمانها، و سیاستمداران اغلب تعداد زیادی از کامپیوترهای کوچک را برای تکمیل وظایفی که قبلا برای تکمیلشان نیاز به رایانه بزرگ (mainframe) گرانقیمت و بزرگ بود، به کار بگیرند. مجموعههایی از رایانههای کوچکتر در یک محل اغلب بهعنوان خادم سر (server farm) نام برده میشود.
با اختراع ریزپردازندهها در دههٔ ۱۹۷۰ این امکان که بتوان رایانههایی بسیار ارزان قیمت را تولید نمود بوجود آمد. رایانههای شخصی برای انجام وظایف بسیاری محبوب گشتند، از جمله کتابداری، نوشتن و چاپ مستندات. محاسبات پیش بینیها و کارهای تکراری ریاضی توسط صفحات گسترده (spreadsheet)، ارتباطات توسط پست الکترونیک، و اینترنت. حضور گسترده رایانهها و سفارشی کردن آسانشان باعث شد تا در امورات بسیار دیگری بکارگرفته شوند.
در همان زمان، رایانههای کوچک، که معمولاً با یک برنامه ثابت ارائه میشدند، راهشان را بسوی کاربردهای دیگری باز مینمودند، کاربردهایی چون لوازم خانگی، خودروها، هواپیماها، و ابزار صنعتی. این پردازشگرهای جاسازی شده کنترل رفتارهای آن لوازم را سادهتر کردند، همچنین امکان انجام رفتارهای پیچیده را نیز فراهم نمودند (برای نمونه، ترمزهای ضدقفل در خودروه). با شروع قرن بیست و یکم، اغلب دستگاههای الکتریکی، اغلب حالتهای انتقال نیرو، اغلب خطوط تولید کارخانهها توسط رایانهها کنترل میشوند. اکثر مهندسان پیش بینی میکنند که این روند همچنان به پیش برود... یکی از کارهایی که میتوان بهوسیله رایانه انجام داد برنامه گیرنده ماهوارهاست.
نیز تنها ۴۹۵ دلار قیمت داشت! قیمت آن کامپیوتر نیز ۳٬۰۰۵ دلار بود و IBM در آن زمان توانست ۶۷۱٬۵۳۷ دستگاه از آن را بفروشد.
انواع رایانه
رایانههای توکار (جاسازی شده)
رایانههایی هم وجود دارند که تنها برای کاربردهایی ویژه طراحی میشوند. در ۲۰ سال گذشته، هرچند برخی ابزارهای خانگی که از نمونههای قابل ذکر آن میتوان جعبههای بازیهای ویدئویی را که بعدها در دستگاههای دیگری از جمله تلفن همراه، دوربینهای ضبط ویدئویی، و PDAها و دهها هزار وسیله خانگی، صنعتی، خودروسازی و تمام ابزاری که در درون آنها مدارهایی که نیازهای ماشین تورینگ را مهیا ساختهاند، گسترش یافت، را نام برد (اغلب این لوازم برنامههایی را در خود دارند که بصورت ثابت روی ROM تراشههایی که برای تغییر نیاز به تعویض دارند، نگاشته شدهاند). این رایانهها که در درون ابزارهای با کاربرد ویژه گنجانیده شدهاند «ریزکنترلگرها» یا رایانههای توکار" (Embedded Computers) نامیده میشوند. بنا بر این تعریف این رایانهها به عنوان ابزاری که با هدف پردازش اطّلاعات طراحی گردیده محدودیتهایی دارد. بیشتر میتوان آنها را به ماشینهایی تشبیه کرد که در یک مجموعه بزرگتر به عنوان یک بخش حضور دارند مانند دستگاههای تلفن، ماکروفرها و یا هواپیما که این رایانهها بدون تغییری فیزیکی به دست کاربر میتوانند برای هدفهای گونهگونی به کارگرفته شوند.
رایانههای شخصی
اشخاصی که با انواع دیگری از رایانهها ناآشنا هستند از عبارت رایانه برای رجوع به نوع خاصی استفاده میکنند که رایانه شخصی (PC) نامیده میشوند. رایانهای است که از اجزای الکترونیکی میکرو (ریز) تشکیل شده که جزو کوچکترین و ارزانترین رایانهها به شمار میروند و کاربردهای خانگی و اداری دارند. شرکت آیبیام رایانه شخصی را در سال ۱۹۸۱ میلادی به جهان معرفی کرد.
نخستین رایانه آیبیام از برخی از ماشین حسابهای امروزی نیز ضعیفتر است ولی در آن زمان شگفت انگیز بود. رایانه شخصی سی سال پیش دارای حافظه ROM با ظرفیت 40K و حافظه RAM با ظرفیت 64K بود. البته کاربر میتوانست حافظه RAM را تا 256K افزایش دهد. قیمت هر ماژول 64K حافظه والانیوز
سرمایهگذاری
صنعت رایانه همواره صنعتی رو به رشد، چه در حوزهٔ سختافزارى و چه در حوزهٔ نرمافزارى بوده است، این صنعت پیوسته مورد توجه سرمایه گذاران بوده و سرمایهها را به خود جذب کرده است. آیندهٔ روشن این فنّاوری همواره سرمایه داران را ترغیب میکند تا روی این صنعت سرمایهگذاری کنند.
نرمافزار
نرمافزار (به انگلیسی: Software) یا برنامه، مجموعهای از دستورالعملهای دقیق و مرحله به مرحله است که هدف خاصی را دنبال میکنند.
ظاهراً، اولین بار جان توکی در سال ۱۹۵۸ این واژه را بهاین معنا بهکار بردهاست. احتمالاً این واژه در مقابل سختافزار (به انگلیسی: Hardware) به کار بردهاند که بسیار پیش از پیدایش رایانه (به معنای اسباب و اشیاء) بهکار میرفتهاست.
دو گروه کلی نرمافزارها
نرمافزارهای رایانه را میتوان به دو دسته بزرگ تقسیم کرد:
نرمافزار سیستم (به انگلیسی: System software)
نرمافزار کاربردی (به انگلیسی: Application software)
میتوان گفت نرمافزارهای کاربردی، برنامههای مورد استفاده کاربرند و نرمافزارهای سیستمی، مدیریت رایانه را برعهده دارند. مهمترین نرمافزار سیستم، سیستمعامل است.
سیستم عامل
وقتی برنامهای را روی رایانه خود نصب میکنید، اجزای سختافزاری آن به فرمان آن برنامه در میآیند. برای نمونه هنگامی که با یک برنامه اجرای موسیقی کار میکنید، کارت صدای رایانه تان با برنامه پخش موسیقی همکاری میکند و یک آهنگ یا پرونده (فایل) صوتی را از طریق بلندگوی رایانه تان پخش میکند.
این ارتباط میان نرمافزار و سختافزار توسط سیستم عامل انجام میشود. این تنها قسمتی از کار سیستم عامل است.
سیستم عامل خود یک برنامه نرم افزاری است با این تفاوت که چون تمام منابع و امکانات سخت افزاری در اختیار وی می باشد دارای ویژگی منحصر به فرد می باشد بنابراین آن را در رده نرم افزارها می خوانیم با این ویژگی که از اهمیت خاصی برخوردار است. به بیان دیگر سیستم عامل یک برنامه جامع است که اجازه در اختیار قراردادن منابع و امکانات سخت افزاری را برای نرم افزارها صادر می کند و این سیستم عامل است که مسئول صحت عملکرد سیستم و منابع آن است.
سیستم عامل شامل 4 بخش مهم است
1- مدیریت پردازش و پردازشگر
2- مدیریت حافظه
3- مدیریت دستگاههای ورودی و خروجی (I/O)
4- مدیریت فایل
سه گروه کلی نرمافزارهای معماری
از دیدگاه ساختاری (معماری) (architecture)، نرمافزارها به دستههای زیر تقسیم میشوند:
کاربر-بنیان یا Client Base
کارگزار-بنیان یا Server Base
کاربر کارگزار بنیان یا Client-Server Base
امروزه واژه نرمافزار را در معناهایی به جز معنی برنامه رایانهای نیز بهکار میبرند. مثلاً در دانش مدیریت برای اشاره به روشها و دانش فنی (در برابر وسایل و تجهیزات و نیروی انسانی). نرمافزارها انواع گوناگونی دارند که مهم ترین دسته بندی آنها دستهٔ تجاری و آزاد است. به ویژه با رویکردهای طرحهای گنو و لینوکس معنای ژرف تری به نرمافزارهای آزاد داده شده تا آنجا که برخی نرمافزارها را نماد فرهنگ می دانند. نرمافزارها را برنامه نویسان تدوین کرده و انتشار میدهند. این برنامه نویسان ممکن است در یک شرکت مشغول کار باشند یا در خانه برنامه نویسی کنند مانند برنامه نویسان برخی نرمافزارهای لینوکس. امروزه بیشتر کاربران تنها با ظاهر گرافیکی این برنامهها کار میکنند و اقدامات بسیاری از آنها از دید کاربر پنهان میماند به عبارتی هر نرمافزار مجموعهای از رمزها است که از الگوریتمی خاص پشتیبانی میکنند این رمزها خود با رمزهای گرافیکی آمیخته شده و بسیاری از اقدامات برنامه به دور از چشم کاربر عادی رخ میدهد. برنامهها با رمزهایی نوشته میشوند که بعداً یک رمزخوان آن را در رایانه کاربر اجرا میکند.
رقابت نرمافزاری
در حال حاضر نرمافزارهای کامپیوتری فراوان را میتوان در بازار یافت که به طور جدی به رقابت خود برای بقا ادامه میدهند. از مسائل قابل ذکر در این مورد میتوان به خرید سهام شرکتهای نرمافزاری کوچک و بزرگ توسط شرکتهای دیگر اشاره نمود. همچنان که شرکت بزرگ گوگل به خرید سهام شرکتهای بزرگ همچنان ادامه میدهد، در مدت کمی توانسته بسیاری از شرکتها را تحت سلطه خود درآورد.
نرمافزار سیستم
نرمافزار سیستم به نرمافزاری در رایانه گفته میشود که به کارکرد سیستم رایانه یا کاربردهای سطح پایین (یا Low Level) رایانه مربوط باشد. این نرمافزارها به ساختار فیزیکی سختافزار رایانه وابسته هستند و در نوشتن آنها از زبانهای سطح پائین مانند زبان اسمبلی استفاده میشود. سیستمعامل و درایورها از نرمافزارهای سیستم هستند. از جمله زبان هایی که برای نگارش نرمافزارهای سیستمی استفاده میشود، زبان برنامه نویسی C میباشد. کار کردن با سی برای برنامه نویسان راحت تر است و آنان این زبان را به اسمبلی ترجیح میدهند. اگر برای نگارش نرمافزار سیستمی مشکل محدودیت فضای سختافزاری داشته باشیم بهتر است با زبان اسمبلی کار کنیم که حجم آن پایین تر است. نرمافزارهای سیستمی به سختافزار وابسته اند.
در برابر نرمافزار سیستم، نرمافزار کاربردی قرار دارد که برای کاربردهای سطح بالا و غیرسیستمی رایانه است و معمولاً به زبانهای سطح بالا نوشته میشود که از جزئیات سختافزاری سیستم مستقل است.
نرمافزار کاربردی
نرمافزار کاربردی (به انگلیسی: Application software) عبارت است از نرمافزاری که با استفادهٔ مستقیم از منابع و قابلیتهای رایانه کاری را مستقیماً برای کاربر انجام میدهد. باید توجه داشت که این عبارت در مقابل عبارت نرمافزار سیستمی معنی پیدا میکند.
نرمافزار سیستمی در مقابل در پسزمینه عمل میکند و خدماتی را فراهم میکند که دیگر نرمافزارها و یا سیستمعامل میتوانند برای انجام کارهای خود از آن استفاده کنند. اما در عوض معمولاً مستقیماً با کاربر عادی در تماس نیست و خدماتی را به او ارایه نمیدهد.
در عمل بیشتر نرمافزارهایی که کاربران با آنها سر و کار دارند از این دسته محسوب میشوند. برای مثال میتوان به نرمافزارهای رومیزی یعنی واژهپردازها، صفحه گستردهها، نرمافزارهای طراحی گرافیکی، بازیهای رایانهای و امثال آنها اشاره کرد.
بسیاری نرمافزارهای کاربردی، برای توسعهدهندگان ابزار رابط برنامهنویسی کاربردی هم فراهم میکنند تا بتوان از قابلیتهای نرمافزار در نرمافزارهای جدید استفاده کرد. برای مثال نرمافزار ادوبی آکروبات هنگام نصب ایپیآی فراهم میکند که برنامهنویس میتواند با استفاده از آن تواناییهای آکروبات را در برنامهٔ خود به کار گیرد.
برای عنوان نمونههای دیگر میتوان به نرمافزارهای پردازش متن، برگههای گسترده (صفحات گسترده) و نرمافزارهای پخش نوا و نما اشاره کرد.
شبکه
شبکه عبارتست از مجموعه یا سیستم درون پیوندی(interconnected) انسانی یا فیزیکی که دسترسی به قابلیت یا توانایی خاصی را در محدوده ای از مکان و زمان فراهم می کند و در حالت مطلوب محدودیت مکانی و زمانی ندارد.
موارد زیر نمونههای انواع شبکه میباشند:
شبکههای فناوری:
شبکههای آبرسانی← قابلیت و توانایی " آبرسانی "
شبکه الکتریکی← قابلیت و توانایی " برق رسانی "
شبکه گازرسانی← قابلیت و توانایی " گاز رسانی "
شبکه مخابراتی← قابلیت و توانایی " گفتگو "
شبکه حمل و نقل← قابلیت و توانایی " جابجایی "
شبکه داده یا data ← قابلیت و توانایی " انتقال داده یا data "
شبکه رایانهای
شبکههای رسانهای:
شبکه رادیویی← قابلیت و توانایی " صوت "
شبکه تلویزیونی← قابلیت و توانایی " صوت و تصویر"
شبکههای انسانی:
شبکه اقتصادی← قابلیت و توانایی " درآمد "
شبکه اجتماعی← قابلیت و توانایی " همزیستی "
دیگر شبکهها:
شبکه فضایی
شبکه عصبی
بدیهی است بهره برداری از قابلیت و توانایی شبکه ها در مکانهای خاصی امکان دارد که گره (Node) نام دارند و مستلزم تجهیزات خاصی میباشند.
حافظه مجازی
حافظه مجازی یکی ازبخشهای متداول در اکثر سیستمهای عامل کامپیوترهای شخصی است. سیستم فوق با توجه به مزایای عمده، بسرعت متداول و با استقبال کاربران کامپیوتر مواجه شدهاست.
در حقیقت حافظه مجازی دارای دو وظیفه اصلی میباشد:
به پزدازشها اجازه میدهد بدون نگرانی از دیگر کدهای در حال اجرا از حافظه استفاده نمایند.
محدود کردن پردازشها از دخالت کردن در استفاده حافظه توسط سیستمعامل و دیگر پردازشها. به نوعی تامین امنیت محدوده اشغال شده توسط پردازشهای دیگر
دیسک سخت بجای حافظه اصلی
اکثر کامپیوترها در حال حاضر از حافظههای محدود با ظرفیت ۶۴، ۱۲۸ و یا ۲۵۶ مگابایت استفاده مینمایند. حافظه موجود در اکثر کامپیوترها بمنظور اجرای چندین برنامه بصورت همزمان توسط کاربر، پاسخگو نبوده و با کمبود حافظه مواجه خواهیم شد. مثلاً در صورتیکه کاربری بطور همزمان، سیستمعامل، یک واژه پرداز، مرورگر وب و یک برنامه برای ارسال نامه الکترونیکی را فعال نماید، ۳۲ و یا ۶۴ مگابایت حافظه، ظرفیت قابل قبولی نبوده و کاربران قادر به استفاده از خدمات ارائه شده توسط هر یک از نرمافزارهای فوق نخواهند بود. یکی از راهکارهای غلبه بر مشکل فوق افزایش و ارتقای حافظه موجود به صورت فیزیکی است. با ارتقای حافظه و افزایش آن ممکن است مشکل فوق در محدودهای دیگر مجدداً بروز نماید. یکی دیگر از راهکارهای موجود در این زمینه، استفاده از حافظه مجازی است .
در تکنولوژی حافظه مجازی از حافظههای جانبی ارزان قیمت نظیر هارد دیسک استفاده میگردد. در چنین حالتی اطلاعات موجود در حافظه اصلی که کمتر مورد استفاده قرار گرفتهاند، از حافظه خارج و در محلی خاص بر روی هارد دیسک ذخیره میگردند. بدین ترتیب بخش ی از حافظه اصلی آزاد و زمینه استقرار یک برنامه جدید در حافظه فراهم خواهد شد. عملیات ارسال اطلاعات از حافظه اصلی بر روی هارد دیسک بصورت خودکار انجام میگیرد.
ایجاد امنیت دسترسی به حافظه
قبل از آنکه سیستمعامل، پردازنده را به یک فرایند یا پردازش تحویل دهد، یک جدول حافظه را تنظیم مینماید بصورتیکه آن پردازش در سطح دسترسی پایینتری به حافظه قرار داده میشود و آدرس حافظهای که در کد پردازش مورد نظر قرار میگیرد بعداً توسط پردازنده به آدرس اصلی و فیزیکی حافظه RAM که در جدول حافظه تنظیم شده در قبل، دکر شده است ترجمه گردد. بنابراین آدرسهای حافظهای که در هر یک از کدهای پردازش توسط سیستمعامل قرار میگیرند آدرسهای مجازی هستند نه آدرسهای حقیقی.
این تطابق آدرسهای مجازی به آدرسهای حقیقی در قطعاتی که به آنها صفحه یا Page گفته میشوند انجام میشود. در معماری سیستمهای x86 امروزی معمولاً اندازه این صفحه ۴کیلوبایت میباشد.
زمانی که یک پردازش از آدرسی در یک صفحه که به آن پردازش تطابق داده نشده است استفاده نماید، باعث ایجاد یک خطای استثناء سختافزاری میگردد که به آن Pagefault گفته میشود.
وقتی که یک صفحه مورد استفاده قرار نگیرد، سیستمعامل میتواند آنرا به دیسک سخت انتقال دهد. و وقتی که آن صفحه توسط یک پردازش مورد تقاضا قرار گرفت دوباره به حافظه اصلی RAM بازخواهد گشت.
مسئله سرعت
سرعت خواندن و نوشتن اطلاعات بر روی هارد دیسک بمراتب کندتر از حافظه اصلی کامپیوتر است. در صورتیکه سیستم مورد نظر دارای عملیاتی حجیم در رابطه با حافظه مجازی باشد، کارآئی سیستم بشدت تحت تأثیر قرار خواهد گرفت. در چنین مواردی لازم است که نسبت به افزایش حافظه موجود در سیستم، اقدام گردد. در مواردی که سیستمعامل مجبور به جابجائی اطلاعات موجود بین حافظه اصلی و حافظه مجازی باشد (هارد دیسک)، باتوجه به تفاوت محسوس سرعت بین آنها، مدت زمان زیادی صرف عملیات جایگزینی میگردد. در چنین حالتی سرعت سیستم بشدت افت کرده و عملاً در برخی حالات غیرقابل استفاده میگردد.
محل نگهداری اطلاعات بر روی هارد دیسک را یک Page file میگویند. در فایل فوق، صفحات مربوط به حافظه اصلی ذخیره و سیستمعامل در زمان مورد نظر اطلاعات فوق را مجدداً به حافظه اصلی منتقل خواهد کرد. در ماشین هائی که از سیستمعامل ویندوز استفاده مینمایند، فایل فوق دارای انشعاب swp است.
پیکربندی حافظه مجازی
ویندوز ۹۸ دارای یک برنامه هوشمند برای مدیریت حافظه مجازی است. در زمان نصب ویندوز، پیکربندی و تنظیمات پیش فرض برای مدیریت حافظه مجازی انجام خواهد شد. تنظیمات انجام شده در اغلب موارد پاسخگو بوده و نیازی به تغییر آنها وجود نخواهد داشت. در برخی موارد لازم است که پیکربندی مدیریت حافظه مجازی بصورت دستی انجام گیرد. برای انجام این کار در ویندوز ۹۸، گزینه System را از طریق Control panel انتخاب و در ادامه گزینه Performance را فعال نمائید. در بخش Advanced setting، گزینه Virtual memory را انتخاب نمائید.
با نمایش پنجره مربوط به Virtual Memory، گزینه «Let me specify my own virtual memory setting» را انتخاب تا زمینه مشخص نمودن مکان و طرفیت حداقل و حداکثر فایل مربوط به حافظه مجازی فراهم گردد..در فیلد Hard disk محل ذخیره نمودن فایل و درفیلدهای دیگر حداقل و حداکثر ظرفیت فایل را بر حسب مگابایت مشخص نمائید. برای مشخص نمودن حداکثر فضای مورد نیاز حافظه مجازی میتوان هر اندازهای را مشخص نمود. تعریف اندازه ائی به میزان دو برابر حافظه اصلی کامپیوتر برای حداکثر میزان حافظه مجازی توصیه میگردد.
میزان حافظه موجود هارد دیسک که برای حافظه مجازی در نظر گرفته خواهد شد بسیار حائر اهمیت است. در صورتیکه فضای فوق بسیار ناچیز انتخاب گردد، همواره با پیام خطائی مطابق «Out of Memory»، مواجه خواهیم شد. پیشنهاد میگردد نسبت حافظه مجازی به حافظه اصلی دو به یک باشد. یعنی در صورتیکه حافظه اصلی موجود ۱۶ مگابایت باشد، حداکثر حافظه مجازی را ۳۲ مگابایت در نظر گرفت.
یکی از روش هائی که بمنظور بهبود کارائی حافظه مجاری پیشنهاد شدهاست، (مخصوصاً در مواردیکه حجم بالائی از حافظه مجازی مورد نیاز باشد) در نظر گرفتن ظرفیت یکسان برای حداقل و حداکثر انداره حافظه مجازی است. در چنین حالتی در زمان راه اندازی کامپیوتر، سیستمعامل تمام فضای مورد نیاز را اختصاص و در ادامه نیازی با افزایش آن همزمان با اجرای سایر برنامهها نخواهد بود. در چنین حالتی کارآئی سیستم بهبود پیدا خواهد کرد.
یکی دیگر از فاکتورهای مهم در کارآئی حافظه مجازی، محل فایل مربوط به حافظه مجازی است. در صورتیکه سیستم کامپیوتری دارای چندین هارد دیسک فیزیکی باشد، (منظور چندین درایو منظقی نیست) میتوان حجم عملیات مربوط به حافظه مجازی را بین هر یک از درایوهای فیزیکی موجود توزیع کرد. روش فوق در مواردیکه از حافظه مجازی در مقیاس بالائی استفاده میگردد، کارآئی مطلوبی را بهدنبال خواهد داشت.
سیستمعامل
سیستمعامل یا سامانهٔ عامل (به انگلیسی: Operating System) نرمافزاری است که مدیریت منابع رایانه را به عهده گرفته و بستری را فراهم میسازد که نرمافزار کاربردی اجرا شده و از خدمات آن استفاده کنند. سیستمعامل جزء ضروریترین نرمافزارهای یک سیستم کامپیوتری است. سیستمعامل خدماتی به برنامههای کاربردی و کاربر ارائه میدهد. برنامههای کاربردی یا از طریق واسطهای برنامه نویسی کاربردی (به انگلیسی: Application User Interface-APIs) و یا از طرق فراخوانیهای سیستم به این خدمات دسترسی دارند. با فراخوانی این واسطها، برنامههای کاربردی میتوانند سرویسی را از سیستمعامل درخواست کنند، پارامترها را انتقال دهند، و پاسخ عملیات را دریافت کنند. ممکن است کاربران با بعضی انواع واسط کاربری نرمافزار مثل واسط خط فرمان یا یک واسط گرافیکی کاربر با سیستمعامل تعامل کنند. برای کامپیوترهای دستی و رومیزی، عموما واسط کاربری به عنوان بخشی از سیستمعامل در نظر گرفته میشود. در سیستمهای بزرگ و چند کاربره مثل یونیکس و سیستمهای شبیه یونیکس، واسط کاربری معمولاً به عنوان یک برنامه کاربردی که خارج از سیستمعامل اجرا میشود پیادهسازی میشود. نمونههایی از محبوبترین سیستمعاملهای نوین شامل: اندروید، بیاسدی، آیاواس، لینوکس، اواس ده، کیواناکس، مایکروسافت ویندوز، ویندوز فون و زد/اواس میباشند.
انواع سیستمعامل
سیستمهای بیدرنگ
سیستمهای بیدرنگ یا زمان واقعی یک سیستم عامل چند وظیفهای است که معمولا بعنوان یک کنترل کننده در یک کاربرد خاص استفاده میشوند. سیستم در این حالت میبایست در زمانی مشخص و معین حتما جواب مورد نظر را بدهد. سیستمهای کنترل آزمایشهای علمی، تصویربرداری پزشکی، کنترل صنعتی و برخی از سیستمهای نمایش از این دستهاند. هدف اصلی استفاده از سیستمهای بیدرنگ واکنش سریع و تضمین شده در برابر یک رویداد خارجی میباشد. در سیستمهای بیدرنگ معمولا وسایل ذخیرهسازی ثانویه وجود ندارد و به جای آن از حافظههای ROM استفاده میشود. سیستمعاملهای پیشرفته نیز در این سیستمها وجود ندارند چرا که سیستمعامل کاربر را از سختافزار جدا میکند و این جداسازی باعث عدم قطعیت در زمان پاسخگویی میشود. سیستمهایی که در آن مهلت زمانی(به انگلیسی: Deadline) باید پاسخ داده شود را بیدرنگ سخت و سیستمهایی که مهلت زمانی را پشتیبانی نمیکنند بیدرنگ نرم مینامند. از کاربرد سیستمهای بیدرنگ سخت میتوان به کنترل موتور یک خودرو(پاسخ با تاخیر میتواند نتایج فاجعهباری را به همراه داشته باشد) و در سیستمهای بیدرنگ نرم میتوان به اسکن بارکد در پایانه فروشگاه(با اینکه سرعت پاسخدهی باید سریع باشد اما به حادّی سیستمهای سخت نمیباشد) اشاره کرد.
سیستمهای چند کاربره
سیستمهای چند کاربره اجازه میدهند تا کاربران متعدد بصورت همزمان به یک سیستم کامپیوتری دسترسی داشته باشند. سیستمهای اشتراک زمانی و کارساز وب را میتوان بعنوان سیستمهای چند کاربره طبقهبندی کرد. در سیستمهای اشتراک زمانی تنها یک پردازنده قرار دارد که توسط مکانیزمهای زمانبندی بین برنامههای مختلف کاربرها با سرعت زیاد سوئیچ میشود و بنابراین هر کاربر تصور میکند کل کامپیوتر در اختیار اوست.
سیستمعامل تک پردازنده
این نوع سیستمعاملها، سیستمعاملهای نسل چهارم (نسل فعلی) هستند که بر روی یک پردازنده اجرا میشوند.از قبیل XP,Vista,۹۸,Me که بیشتر محصول شرکت مایکرو سافت میباشند.
سیستمعامل شبکهای
سیستم عاملهایی مثل ناول نت که بیشترین استفاده و ا مکانات این سیستم عامل برای شبکه می باشد
سیستمعامل توزیع شده
این سیستمعاملها خود را مانند سیستمعاملهای تک پردازنده به کاربر معرفی میکنند، اما در عمل از چندین پردازنده استفاده میکنند. این نوع سیستمعامل در یک محیط شبکهای اجرا میشود در این نوع سیستم یک برنامه پس از اجرا در کامپوترهای مختلف جواب نهایی به سیستم اصلی کاربر بر میگردد سرعت پردازش در این نوع سیستم بسیار بالاست.
دلایل ایجاد سیستمعامل
یک سیستم کامپیوتری پیشرفته از یک یا چند پردازنده، مقداری حافظه اصلی، دیسکها، چاپگرها، صفحهکلید، صفحهنمایش، واسطهای شبکهای و دیگر دستگاههای ورودی و خروجی تشکیل شدهاست. اگر سیستم یکپارچهای برای مدیریت این منابع وجود نداشته باشد، هر برنامه باید به تنهایی این کار را انجام دهد. سیستمعامل یک لایه نرمافزاری فراهم میکند که وظیفه مدیریت منابع سیستم را از دوش برنامههای کاربردی رهانیده و کار برنامهنویسی را سادهتر مینماید. که با توجه به نسخههای جدید سیستم عاملها که به دلیل بهرهمندی از تکنولوژی گرافیک و امکان استفاده از ماوس، امکان استفاده ساده و آسان را برای کاربران مبتدی فراهم نمودهاست. در حقیقت سیستمعامل واسط بین سختافزار رایانه و کاربر میباشد.
وظایف سیستمعامل
سیستمعامل دو کار عمده انجام میدهد:
در نگرش پایین به بالا، منابع منطقی (مانند فایلها) و منابع فیزیکی (مانند دستگاههای سختافزاری) رایانه را مدیریت و کنترل میکند.
در نگرش بالا به پایین، وظیفه سیستمعامل این است که یک ماشین توسعه یافته (Extended Machine) یا ماشین مجازی را به کاربران ارائه کند تا آنها بتوانند آسانتر برنامهنویسی نمایند و درگیر پیچیدگیهای سختافزاری رایانه نشوند.
به طور کلی، وظایف سیستمعامل شامل موارد زیر است:
استفاده بهینهتر از منابع و جلوگیری از به هدر رفتن آنها
تخصیص و آزاد سازی منابع
اداره صفها و زمانبندی استفاده از منابع
حسابداری میزان استفاده از منابع
ایجاد امنیت
ایجاد، حذف و اداره فرایندها
ایجاد مکانیسمهای ارتباط بین فرایندها و همگامسازی آنها
مدیریت فایلها و پوشهها
مدیریت حافظههای اصلی و جانبی
برقراری امکان دسترسی چندتایی (Multiaccess) و اجرای هم روند (Concurrent) فرایندها
به اشتراک گذاری منابع (Resource Sharing)
تعیین راهکارهایی برای اداره بنبست (Deadlock)
جلوگیری از وضعیت رقابتی (Race Condition) و تداخل یا در هم قفل شدن (Interlock) فرایندها
جلوگیری از گرسنگی (Starvation)
سیستمعاملهای فعلی
در سالهای اخیر رقابت بیشتر بین سیستمعاملهای مایکروسافت ویندوز، اپل مک اواس و لینوکس جریان دارد که آماری که در ماه ژوییه ۲۰۱۱ توسط وبگاه W3Schools به ثبت رسیده حاکی از آن است که هم اکنون بیش از ۸۰ درصد کاربران اینترنت از سیستمعامل ویندوز استفاده میکنند.
آمار موجود که مربوط به اوت ۲۰۱۰ میباشد به شرح زیر است:
ویندوز ۷: ۳۷٫۸٪
ویندوز ویستا: ۶٫۷٪
ویندوز اکس پی: ۳۹٫۷٪
ویندوز ۲۰۰۳: ۰٫۹٪
مک اواس: ۸٫۱٪
توزیعهای گنو/لینوکس: ۵٫۲٪
از سیستمعاملهای مشهور کامپیوترهای شخصی میتوان به اسامی زیر اشاره کرد:
یونیکس
گنو/لینوکس
مک اواس
ویندوز اکسپی
ویندوز ویستا
ویندوز انتی
ویندوز ۷
ویندوز ۸
ویندوز سیای
سولاریس
بی اس دی
داس
ام وی اس
ویلز
پالم
همچنین از سیستمعاملهای موجود روی گوشیهای تلفن همراه نسل جدید میتوان به اسامی زیر اشاره کرد:
اندروید
iOS
ویندوز موبایل
ویندوز فون
سیمبین
یوآیکیو
بادا
بلک بری
میگو
پالم
تاریخچه
در آغاز
اولین کامپیوترها فاقد سیستمعامل بودند. در اوایل سال ۱۹۶۴ فروشندگان کامپیوترهای تجاری ابزار کاملا گستردهای را برای تسهیل توسعه، زمانبندی، و اجرای کارها روی یک سیستم پردازش دستهای فراهم میکردند. برای مثال کامپیوتر تولید شده توسط UNI VAC.
در ابتدا سیستمعامل روی مین فریمها مستقر میشد و کمی بعد سیستمعامل میکروکامپیوترهای ابتدایی که فقط از یک برنامه در هر زمان پشتیبانی میکردند و به یک زمانبند بسیار ابتدایی نیاز داشتند. هر برنامه زمانی که در حال اجرا بود تحت کنترل کامل ماشین قرار داشت. چند وظیفهای (اشتراک زمانی) اولین بار در مین فریمها و در ۱۹۶۰ عرضه شد. ابتدا کامپیوترها بسیار بزرگ و جاگیر بودند اما امروزه در کف یک دست جا میگیرند.
مین فریمها
میکرو کامپیوترها
میکروکامپیوترهای اولیه نیاز یا ظرفیت داشتن یک سیستمعامل پیچیده که روی مین فریمها توسعه یافته بود نداشتند.
ویژگیها
وقفهها
دستهبندی وقفهها
برنامه وقفههایی که به دلیل بعضی شرایظ حاصل از یک دستورالعمل بروز میکند. شامل سریز شدن محاسباتی، تقسیم بر صفر، تلاش برای اجرای یک دستورالعمل ماشین غیر مجاز و مراجعه به آدرسی خارج از فضای مجاز کاربر.
زمانسنج وقفهای که توسط زمانسنج داخلی تولید میشود. این وقفه به سیستمعامل اجازه میدهد، بعضی اعمال را به طور مرتب انجام دهد.
ورودی/خروجیوقفههایی که به وسیله کنترل کننده ورودی/خروجی تولید میشود، تا کامل شدن طبیعی یک عمل یا شرایط خطا را اعلام نماید.
نقص سختافزار وقفههایی که با نقص سختافزاری تولید میشود، مثل نقص برق یا خطای توازن حافظه.
یونیکس
یونیکس یک سیستمعامل چندوظیفهای و چندکاربره است که در سال ۱۹۶۹ به دست گروهی از کارمندان آزمایشگاههای بل متعلق به شرکت ایتیاندتی (AT&T Bell Labs) نوشته شد. این گروه را کنت تامسون، دنیس ریچی، برایان کرنیگان، داگلاس مکیلروی مایکل لسک و جو اوسانا شکل میدادند. یونیکس در آغاز به زبان اسمبلی نوشته شد اما در سال ۱۹۷۳ به طور کلی به زبان سی بازنوشته شد، که این کار توسعه یونیکس را در آینده آسانتر میکرد و هم پورت کردن آن به دیگر سکوها را سادهتر. در سال ۱۹۷۴، یونیکس در ابتدا توسط گرگ چسون و دونالد گیلیس تحت مجوز دانشگاه ایلینوی در اربانا-شمپین درآمد. توسعه و تکامل یونیکس امروزی به شاخههای مختلفی تقسیم شده که توسط ایتیاندتی و همچنین دیگر فروشندگان تجاری، دانشگاهها (مانند نسخه بیاسدی از دانشگاه برکلی) و سازمانهای غیر انتفاعی توسعه مییابند.
امروزه نشان تجاری یونیکس در اختیار موسسه اپن گروپ قرار دارد و این گروه این نشان را به نام خود ثبت کرده است. تنها سیستمهایی که به صورت کامل با مشخصات یونیکس یکتا سازگار باشند، و مبلغی پول به موسسه اپن گروپ بپردازند، واجد شرایط استفاده از نام یونیکس اند. دیگر سیستمها میتوانند شبه یونیکس نامیده شوند، هرچند که موسسه اپن گروپ این نام را رد کرده است.
در اواخر دهه ۱۹۷۰ و اوایل دهه ۱۹۸۰، نفوذ یونیکس در محافل دانشگاهی (خصوصا ویرایش بیاسدی که از دانشگاه برکلی سرچشمه گرفته) باعث پذیرش گسترده یونیکس توسط بازرگانان نوپا شد و نسخههایی تجاری از یونیکس بوجود آمد که مهمترین این یونیکسها سولاریس، اسکوئنت, اچپی-یواکس, ایآیاکس هستند.
علاوه بر یونیکسهای تایید شده که اسامی آنها در بالا ذکر شد، سیستمعاملهایی هم وجود دارند که شبه یونیکس نامیده میشوند مانند مینیکس، نوادگان بیاسدی مانند فریبیاسدی, نتبیاسدی, اپنبیاسدی, دراگونفلیبیاسدی و لینوکس. این سیستمها با آنکه با استانداردها سازگار هستند، اما توسط موسسه اپن گروپ تایید نشدهاند و حق استفاده از نام Unix را ندارند. اصطلاح یونیکس سنتی ممکن است برای توصیف سیستمعاملهایی که مشخصات و ویژگیهای نسخه ۷ یونیکس یا نسخه ۵ یونیکس را دارند، استفاده شود. هنگامی که کن تامسون هنوز به مولتیکس دسترسی داشت، شبیهسازهایی برای سیستم صفحهبندی و سیستم فایل نوشت. او همینطور یک بازی رایانهای به نام سفر فضایی نوشت، اما این بازی برای اجرا شدن به یک ماشین کارامدتر و ارزانتر احتیاج داشت و سرانجام او یک پیدیپی-۷ کم استفاده در آزمایشگاههای بل پیدا کرد. در سال ۱۹۶۹ تیمی به رهبری تامسون و ریچی، بر روی این ماشین پیدیپی-۷ یک سیستم فایل سلسله مراتبی، مفاهیم فرایند رایانه و فایل دستگاه، یک مفسر خط فرمان و تعدادی برنامه کوچک دیگر نوشتند.
اگر گفته شود یونیکس آغازگر «دوره اطلاعات» و در امتداد آن «عصر اینترنت» است، کوچکترین سخنی به گزافه گفته نشدهاست. در واقع تا همین امروز هم، تقریباً ٪۱۰۰ پیمانهای مهم و باز که جنبش اینترنت را پدید آوردهاند، مانند وب، از خانوادهٔ یونیکس آمده و میآیند. اینترنت در آغاز در یونیکس گسترش یافت و تا سالها، واژهٔ «اینترنت» در میان کاربران یونیکس واژهای کاملاً عادی و روزمره بود، درحالی که دیگران حتی این واژه را نشنیده بودند و یا با اکراه تمام به آن بی اعتنائی و حتی آن را مسخره میکردند.
سیستمهای یونیکس امروزی به شاخههای مختلفی تبدیل شده است که در مرور زمان به دست ایتیاندتی توسعه داده شده. یونیکس طوری طراحی شده است تا قابل انتقال به هر سیستمی، چند کاره و همچنین چند کاربره باشد. سیستمهای یونیکس با ایدههای جدیدی که مطرح کردهاند، شناخته میشوند: پروندههای متنی ساده، مترجمهای خط فرمان و سامانه پروندهگردانی (File System) سلسله مراتبی و غیره. در مهندسی نرمافزار، یونیکس به خاطر زبان برنامهنویسی سی و فلسفه یونیکس ذکر میشود.
صاحب علامت تجاری یونیکس در حال حاضر open group است. در حالی که مدعی در حال حاضر متن برنامههای یونیکس The sco group و Novell است.
پیشینه
از آغاز تا عرضه
داستان از سال ۱۹۶۰ آغاز میشود. در این زمان فکر سامانههای اشتراک زمان مطرح بود و نخستین سیستمعامل چند کاربره طراحی شد که به عنوان کارگزار(Server) میتوانست با نصب شدن بر روی یک رایانه به چند رایانه دیگر سرویس دهد. این سیستمعامل که CTSS نام داشت و میتوانست ۲۰ کاربر را با یک رایانه IBM ۷۰۹۰ به خوبی اداره کند به شدت مورد توجه و مفید واقع شد و همه دریافتند که بخش عظیمی از رایانههای آینده از این فناوری بهره خواهند گرفت. به طوری که در سال ۱۹۶۵ سه شرکت از برجستهترین نقش آفرینان رایانه در جهان، مؤسسه فناوری ماساچوست، آزمایشگاههای بل و جنرال الکتریک، یک سیستمعامل اشتراک زمان آزمایشی برای مینفریم جیای-۶۴۵ طراحی کردند که مولتیکس نامیده میشد.
مولتیکس نوآوریهای بسیاری را پیش روی نهاد، اما در عوض مشکلات فراوانی هم داشت. این سیستم اجزای زیادی داشت و از حد معین بزرگتر شد. آزمایشگاههای بل که از پیچیدگی زیاد مولتیکس ناامید شده بود، به آهستگی از پروژه کناره گرفت. آخرین محققان آنها، کن تامسون, دنیس ریچی, داگلاس مکیلروی و جو اوسانا تصمیم گرفتند کار را از آغاز اما در مقیاسی کوچکتر از سر بگیرند. ریچی گفت «چیزی که ما میخواستیم، تنها یک محیط خوب برای برنامهنویسی نبود، بلکه سامانهای بود که بتوان گرد آن دوستی را شکل داد.»
در ۱۹۷۰، پیتر نیومن نام Unics را برای پروژه ابداع کرد. این نام در حقیقت یک جور بازی با نام مولتیکس (Multics) بود. دنیس ریچی، کن تامسون و برین کرنیگان، یونیکس (Unics) را بر اساس مولتیکس در آزمایشگاه بل پدید آوردند. بعدها که Unics توانست همزمان به چند کاربر سرویس دهد، به Unix آوازه یافت.
تا آن زمان، هیچ حمایت مالی از طرف آزمایشگاههای بل وجود نداشت. وقتی که گروه تحقیقات علوم رایانه میخواست از یونیکس بر روی یک رایانه بزرگتر از پیدیپی-۷ استفاده کند، تامسون و ریچی قول دادند که برای ماشین پیدیپی۱۱/۲۰، قابلیتهای پردازش متن را به یونیکس اضافه کنند. این کار باعث حمایت مالی آزمایشگاه بل شد. برای اولین بار در سال ۱۹۷۰، سیستمعامل یونیکس رسما نامگذاری و بر روی یک پیدیپی۱۱/۲۰ اجرا شد. یک برنامه قالببندی متن به نام roff و یک ویرایشگر متن هم اضافه شدند. تمام این سه جزء (یونیکس، roff و ویرایشگر متن) به زبان اسمبلی ماشین پیدیپی۱۱/۲۰ نوشته شده بودند. آزمایشگاههای بل از این سیستمِ پردازش متن اولیه که از یونیکس، roff و ویرایشگر تشکیل شده بود، برای پردازش متن برنامههای پتنت شده استفاده کرد. roff به زودی به troff، اولین برنامه چاپ و نشر الکترونیکی با قابلیت کامل حروفچینی تبدیل شد. کتاب راهنمای برنامهنویسان یونیکس هم در سوم نوامبر ۱۹۷۱ چاپ شد.
از آن جا که ایتیاندتی، یکی از شرکتهای دست اندرکار، از پروژه کنار گرفته بود، بنا بر قوانین آمریکا نمیتوانست از یونیکس استفادهٔ بازرگانی کند؛ به این ترتیب یونیکس رایگان به بازار عرضه شد. ایتیاندتی نیز یونیکس را برای دانشگاههای مختلف فرستاد و یونیکس کمکم در محافل علمی محبوب شد.
بازنوشتن به زبان سی
در ۱۹۷۲، یونیکس به زبان سی بازنوشته شد. این برخلاف پندار همگانی آن زمان بود که میگفت «هر چیز پیچیدهای مثل یک سیستمعامل که باید با رویدادهای حساس به زمان سر و کار داشته باشد، باید منحصرا به زبان اسمبلی نوشته شود.» نتیجه مهاجرت از زبان اسمبلی به زبان سطح بالاتر سی این بود که کد یونیکس پرتابلتر و قابل حملتر شد و برای اجرا بر روی ماشینهای دیگر تنها کافی بود قسمتهای کوچکی از آن به زبان اسمبلی مخصوص همان ماشین نوشته شوند.
ایتیاندتی کد منبع یونیکس را تحت مجوزهایی در دسترس دانشگاهها، شرکتهای تجاری و دولت ایالات متحده قرار دارد. مجوزها در همه جای کد منبع قرار داده شده بودند، حتی کدهای وابسته به ماشین در داخل هسته سیستمعامل، که به زبان اسمبلی پیدیپی-۱۱ نوشته شده بودند. در اواخر دهه ۱۹۷۰، کدهای منبع یونیکس در کتابی به نام «نسخه ۶ یونیکس به روایت لیونز، به همراه کد منبع» که توسط جان لینوز نوشته شده بود، به صورت گسترده منتشر شد. این کار باعث شد یونیکس به شکل قابل توجهی برای مقاصد آموزشی استفاده گردد.
ویرایشهای گوناگون
نسخههای سیستمعامل یونیکس، توسط ویرایشهای کتاب راهنمای کاربرانش مشخص میشدند. برای مثال «پنجمین ویرایش یونیکس» و «نسخه ۵ یونیکس» هر دو برای اشاره به یک نسخه استفاده میشدند. توسعه یونیکس با انتشار نسخههای ۴، ۵ و ۶ که در سال ۱۹۷۵ ادامه یافت. در این نسخهها مفهوم تازه ی لولهها اضافه شده بود که به طراحی ماژولار یونیکس و چرخه توسعه سریعتر آن کمک کرد. نسخه ی ۵ و به ویژه نسخه ی ۶، به پیدابش نسخههای مختلفی از یونیکس، چه در داخل آزمایشگاههای بل و چه در خارج از آن انجامید. مانند پیدبلیوبی/یونیکس و همچنین اولین نسخه تجاری یونیکس یعنی آیاس/۱. همان طور که قسمتهای بیشتری از یونیکس به زبان سی بازنویسی میشد، پورتابل بودن آن هم افزایش مییافت و آسانتر میشد آن را به دیگر سکوها انتقال داد. یونیکس توسط گروهی در دانشگاه ولونگوگ به اینتردیتا ۷/۳۲ پورت شد. آزمایشگاههای بل هم چند نسخه مختلف برای اهداف تحقیقاتی و استفاده داخلی در همان جا توسعه داد.
در سال ۱۹۷۴ دانشجویان دانشگاه برکلی آغاز به برنامهنویسی برای یونیکس میکردند و آن را برای دانشگاههای دیگر و ایتیاندتی فرستادند وبا ادامهٔ این کار یونیکس در سال ۱۹۷۷ به یک سیستمعامل کامل تبدیل میشود. در می ۱۹۷۵، دارپا مزایای سیستم اشتراک زمانی یونیکس که «چند قابلیت جالب ارائه کرده بود» را در RFC 681 مستند کرد. در ۱۹۷۸، یونیکس/۳۲وی برای ویایاکس، سیستم جدید DEC عرضه شد. در آن هنگام، یونیکس به اَشکال مختلفی بر روی ۶۰۰ ماشین اجرا میشد. آخرین نسخه تحقیقاتی از یونیکس، یعنی نسخه ۷ یونیکس، در سال ۱۹۷۹ منشتر شد. نسخههای ۸، ۹ و ۱۰ هم در دهه ۱۹۸۰ نوشته شدند اما فقط در بین چند دانشگاه منتشر شدند. دانشگاههای دیگر نیز مانند امآیتی، Purdue، استنفورد و... کارهای بسیاری برای یونیکس کردند. با نوشتن برنامههای اینترنتی برای یونیکس در سال ۱۹۸۰ به وسیلهٔ دانشگاه برکلی یونیکس در سازمانهای دولتی و شرکتهای شبکه و کارگزارها(Servers) به گستردگی به کار گرفته شد.
سیستم عاملهای یونیکس مانند
از این زمان شمار فراوانی از شرکتهای بازرگانی نیز از یونیکس برای کارهای بازرگانی خود بهره میجویند و نسخههای بازرگانی یونیکس هم به بازار میآیند که از این گروه میتوان پخشهای زیر را نام برد.
Xenix by Microsoft
AIX by IBM
HP-UX by HP
ULTRIX by Digital
SunOS by Sun
گذشته از سیستم عاملهایی که موسسه ی اپن گروپ، آنها را کاملا سازگار با مشخصات یونیکس یکتا دانسته، سیستم عاملهای فراوانی در عرضه شده اند که اگرچه استانداردهای لازم را فراهم آورده اند اما با نام شبه یونیکس آوازه دارند. ویرایشهای پرشمار سیستم عامل متن باز لینوکس از این دسته اند. همچنین سیستم عامل نکستستپ (NextStep) که بر مبنای بیاسدی دانشگاه برکلی پدید آمد، خود پایه ی سیستم عامل مک اُ.اس (Mac OS X) شرکت اپل شد. اپل آی.اُ.اس (iOS) را نیز بر پایه ی مک اُ.اس گسترش داد. بسیاری از سیستمعاملهای دیگر مانند اُربیت (Orbis) که بر روی پلی استیشن چهار ارائه میشود نیز بر مبنای یکی از انواع سیستم عامل بیاسدی گسترش یافته اند.
لینوکس
لینوکس (به انگلیسی: Linux) به هسته ی سیستمعاملهای شبه یونیکس میگویند که که در سال ۱۹۹۱ توسط لینوس تروالدز توسعه یافت. برخی به سیستم عاملهایی که از هستهٔ لینوکس استفاده میکنند (به این خاطر که نام لینوکس به طور گسترده در رسانهها استفاده میشود و نامی رایج تر است) نیز لینوکس میگویند (در این مقاله هم منظور از لینوکس، سیستم عاملهایی است که از هستهٔ لینوکس استفاده میکنند).
لینوکس قابل نصب بر روی انواع سختافزارهاست، از ساعت (Linux Watch)، تلفنهای همراه، تبلتها، مسیریابها، و کنسولهای بازی گرفته تا رایانههای رومیزی، رایانههای بزرگ و ابررایانهها.
به مجموعهای از نرمافزارهای بنا شده بر اجزای گفته شده توزیع لینوکس (linux distribution) میگویند که به طور معمول شامل ابزارهای گسترش نرمافزار، پایگاههای داده، سرویس دهندههای وب مثل آپاچی، محیطهای رومیزی مانند گنوم و کیدیای و اکسافسیای و مجموعههای اداری مانند اُپن آفیس هستند.
در ابتدا لینوکس برای استفادهٔ ریزپردازندهها با معماری ۸۰۳۸۶ اینتل طراحی شده بود؛ اما امروزه انواع گوناگون معماریها را پشتیبانی میکند و در انواع و اقسام وسایل از کامپیوترهای شخصی گرفته تا ابررایانهها و تلفنهای همراه به کار میرود. این سیستمعامل که در ابتدا بیشتر توسط افراد مشتاق گسترش پیدا میکرد و به کار گرفته میشد، توانسته است پشتیبانی شرکتهای سرشناسی چون آیبیام و هیولت-پاکارد را به دست آورد و با بسیاری از نسخههای خصوصی یونیکس رقابت کند. طرفداران لینوکس و بسیاری از تحلیلگران این موفقیت را ناشی از استقلال از فروشنده، کمهزینه بودن پیادهسازی، سرعت بالا، امنیت و قابلیت اطمینان آن میدانند.
پیشینه
در سال ۱۹۸۳ میلادی ریچارد استالمن که رئیس بنیاد نرمافزارهای آزاد بود پروژه گنو (GNU) را آغاز کرد. در این پروژه که یک جنبش نرمافزاری محسوب میشد برنامهنویسان با یکدیگر همکاری میکردند که این همکاری تا به حال نیز ادامه دارد.
آن زمان بیشتر ابزارهای پروژه گنو که با زبان برنامهنویسی سی و اسمبلی نوشته شده بود آماده کار بود و تنها یک هستهٔ مناسب و آزاد کم بود. حتی سیستمعامل مینیکس نیز با وجود در دسترس بودن کد منبع آن، آزاد نبود و حق نشر مخصوص داشت. کار در پروژه گنو به سمت طراحی یک هسته مناسب متمرکز میشد اما به نظر میرسید که برای ایجاد این هسته حداقل چند سال دیگر زمان نیاز است.
این تأخیر برای لینوس توروالدز قابل تحمل نبود. بنابراین خودش دست به کار شد و با الهام از کد مینیکس کار را آغاز کرد. سرانجام در ۲۵ اوت سال ۱۹۹۱ در ساعت ۲۰:۵۷ (به وقت گرینویچ) پیامی تاریخی به گروه خبری comp.os.minix از طرف لینوس توروالدز ارسال شد. او یک دانشجوی فنلاندی بود که آن زمان در دانشگاه هلسینکی درس میخواند.
متن پیام او چنین بود:
درود به هر کس که آن بیرون از مینیکس استفاده میکند. من هماکنون روی سیستمعاملی آزاد برای رایانههای AT ۳۸۶(۴۸۶) کار میکنم (فقط برای سرگرمی؛ مانند پروژهٔ گنو بزرگ و حرفهای نیست). از ماه آوریل کار را آغاز کردهام و هماکنون این سیستمعامل آمادهاست و کار میکند. دوست دارم از دیدگاه دیگران در مورد سیستمعاملم با خبر شوم. چه آنان که مینیکس را دوست دارند و چه آنان که دوست ندارند. چرا که سیستمعامل من تا حدی شبیه به مینیکس است.
در حال حاضر (۱٫۰۸)bash و(۱٫۴۰) gcc را بر روی آن دارم و چیزهای دیگری که به نظر میرسد همه درست کار میکنند. این بدان معناست که طی چند ماه آینده چیز بهدردبخوری فراهم خواهم کرد و دوست دارم بدانم مردم بیشتر چه امکاناتی لازم دارند. به هر پیشنهاد و نظری خوشآمد میگویم اما قول نمیدهم که آن را انجام دهم!
لینوس (torvalds@kruuna.helsinki.fi).
پ. ن: بله این نرمافزار آزاد است. البته قابل انتقال بر روی انواع دیگر رایانه نیست (چرا که دستورات AT۳۸۶ را به کار میبرد) و ممکن است غیر از سختدیسک AT چیز دیگری را پشتیبانی نکند. این همه چیزی است که من دارم!
لینوکس برخلاف مینیکس (یک سیستمعامل ساده نوشته شده توسط پروفسور اندرو تننبام که برای آموزش طراحی سیستمعامل به کار میرفت) که از معماری ریزهسته استفاده میکرد، با ایده هستههای یکپارچه طراحی شده بود. اولین نسخهٔ لینوکس در سپتامبر ۱۹۹۱ در اینترنت منتشر شد. دومین نسخهٔ آن به فاصلهٔ کمی در اکتبر همان سال منتشر شد. از آن پس هزاران برنامهنویس و هکر در سراسر دنیا در این پروژه شرکت کردند. مقالهٔ «کلیسای جامع و بازار» اثر اریک ریموند مدل گسترش هسته لینوکس و نرمافزارهای مشابه را تشریح میکند.
پنگوئن تاکس نشانه و مایه خوش شانسی هستهٔ لینوکس است. لینوس توروالدز مالک علامت تجاری لینوکس است که به عنوان «نرمافزار سیستمعامل رایانه برای تسهیل در استفاده و عملیات رایانه» به ثبت رسیدهاست.
مجوز
هستهٔ لینوکس و بیشتر بخشهای گنو تحت اجازهنامه عمومی همگانی گنو (جیپیاِل) منتشر میشوند. جیپیال لازم میداند که تغییرات کد منبع و کارهای مشتق شده نیز تحت مجوز جیپیال منتشر شوند.
گنو/لینوکس
از آنجایی که ابزارهای گنو که بخش عمدهٔ توزیعهای لینوکس را تشکیل میدهند از پروژه سیستمعامل آزاد گنو (که بسیار سابقهدارتر از هستهٔ لینوکس است) ریشه گرفتهاند، ریچارد استالمن و بنیاد نرمافزار آزاد درخواست کردهاند که سیستم ترکیب شده (از هستهٔ لینوکس و ابزارهای گنو) بدون توجه به نام توزیعاش، «گنو/لینوکس» خوانده شود.
برخلاف این که بعضی از توزیعها (مانند «گنو/لینوکس دبیان») از این نام استفاده میکنند، بسیاری تنها به گفتن «لینوکس» اکتفا میکنند. تفاوت بین هستهٔ توروالدز و سیستمی که شامل این هسته است، همیشه باعث سردرگمی میشود و نامگذاری همچنان بحثانگیز باقی ماندهاست.
توزیعهای لینوکس
لینوکس تقریباً همیشه یکی از اجزاء یک توزیع لینوکس (به انگلیسی: Distro) است. توزیعهای لینوکس توسط افراد، گروههای نه چندان متشکل و سازمانهای حرفهای گوناگون ایجاد میشوند. این توزیعها شامل تعدادی نرمافزار سیستم و برنامههای کاربردی به همراه روالی مشخص برای نصب آنها بر رایانه هستند. توزیعها معمولاً برای منظورهای مختلفی از جمله محلیسازی، پشتیبانی از یک معماری خاص، کاربردهای بیدرنگ (real-time applications) و سامانههای توکار (embedded systems) به وجود میآیند و برخی از آنها آگاهانه تنها از نرمافزارهای آزاد استفاده میکنند.
یک توزیع همه-منظورهٔ معمولی شامل هسته لینوکس، کتابخانهها و ابزارهای گنو، پوستههای خط فرمان و انبوه بیشماری از نرمافزارهای کاربردی از مجموعههای اداری و سیستم پنجرهای اِکس گرفته تا مفسرها، ویرایشگرهای متن و ابزارهای علمی است.
گستره
در بیش از یک میلیارد دلار: برآورد اندازه گنو/لینوکس که مقاله تحقیقی است بر روی توزیع رِدهت ۷٫۱، تعداد خطوط کد منبع ۳۰ میلیون عنوان شدهاست. در این تحقیق با استفاده از روش (Constructive Cost Model – COCOMO) برآورد شدهاست که بر روی این توزیع نزدیک به ۸ هزار نفر-سال کار گسترش انجام گرفتهاست. چنانکه این نرمافزار با روشهای متعارف خصوصی گسترش مییافت، هزینه گسترشاش در ایالات متحده با روشهای گسترش متعارف خصوصی بالغ بر ۱/۰۸ میلیارد دلار (با قیمت دلار سال ۲۰۰۰) میشد.
بخش بزرگی از کد (۷۱٪) با زبان برنامهنویسی C نوشته شدهاست اما از بسیاری از زبانهای دیگر همچون ++C، لیسپ، اسمبلی، پرل، فرترن، پایتون و زبانهای اسکریپتنویسی گوناگون استفاده شدهاست. اندکی بیش از نیمی از خطوط کد، تحت مجوز عمومی گنو (جیپیاِل) هستند. هسته لینوکس ۲٫۴ میلیون خط کد است و ۸٪ کل کد را تشکیل میدهد.
در پژوهشی جدید که بر روی توزیع لینوکس دبیان نسخه ۴٫۰ که در سال ۲۰۰۷ عرضه شده صورت گرفت، مشخص شد این توزیع دارای نزدیک به ۲۸۳ میلیون خط کد بود که تخمین زده میشود هزینه گسترشاش با روشهای گسترش متعارف خصوصی بالغ بر ۸٫۰۷ میلیارد دلار (با قیمت دلار سال ۲۰۱۳) و زمان مورد نیاز حدود هفتاد و سه هزار نفر-سال میشود.
کاربردهای سیستمعاملهای شکل گرفته بر پایه لینوکس
در گذشته یک کاربر لینوکس برای پیکربندی و نصب سیستم خود، نیازمند دانش بالایی از رایانه بود. این دلیل به علاوه جذاب بودن دسترسی به درون سیستم، باعث شده بود که به طور سنتی کاربران لینوکس را (بر خلاف کاربران ویندوز یا مَکاواِس) کسانی شکل بدهند که با تکنولوژی بیشتر دمخور هستند. افرادی که معمولاً با القاب «هَکِر» و «گیک» شناخته میشوند. این نگرش در سالهای اخیر با افزایش راحتی کار در لینوکس و گسترده شدن استفاده از بسیاری از توزیعها، اعتبار خود را از دست دادهاست. لینوکس در بازار سرورها و کاربردهای ویژه (مانند پردازش تصویر و سرویسهای وِب) پیشرفت قابل ملاحظهای کرده و در حال ورود به بازار بزرگ رایانههای رومیزی است.
لینوکس اساس مجموعه نرمافزار سرور موسوم به ل. آ. م. پ ((ل) ینوکس، (آ) پاچی، (م) ایاسکیوال, (پ) رل/(پ) یاچپی/(پ) ایتون) را تشکیل میدهد که میان گسترشدهندگان وب محبوبیت گستردهای کسب کردهاست. بدلیل پایداری و انعطاف لینوکس، این سیستمعامل حضور پررنگی به عنوان سیستمعاملی برای کامپیوترهای کارساز دارد. بر اساس آمار در سال ۲۰۰۸، از میان ۱۰ تا از معتبرترین شرکت هاستینگ دنیا، ۵ شرکت سیستمعامل لینوکس را در کارسازهای وب خود بکار میگیرند. توزیعهای لینوکس به طور گستردهای به عنوان سیستم عامل در ابر رایانهها استفاده میشود: از نوامبر سال ۲۰۱۰، از ۵۰۰ سیستم برتر، ۴۵۹ مورد (۹۱٫۸ ٪)تحت اجرای توزیعهای لینوکس هستند. لینوکس همچنین به عنوان سیستم عامل برای سکویا آی بی ام قوی ترین ابر رایانه جهان که در سال ۲۰۱۱ به بهرهبرداری میرسد، به کار خواهد رفت.
از لینوکس همچنین بیشتر در سیستمهای کارگذاشته استفاده میشود. رایگان، متن باز و آزاد بودن آن باعث میشود انتخابی ایدهآل برای ابزارهایی مانند سیمپیوتر (رایانهای که برای جمعیت کم درآمد کشورهای در حال گسترش طراحی شده) باشد.
لینوکس با داشتن محیطهای رومیزی مانند گنوم و کیدیای، رابط کاربری همچون اپل مکینتاش و مایکروسافت ویندوز را در کنار دیگر محیطهای گرافیکی و رابط خط فرمان یونیکس-مانند سنتیاش، عرضه میکند. هرچند نرمافزارهای گرافیکی لینوکس برای بسیاری از مصارف وجود دارند، در بسیاری زمینهها نرمافزارهای خصوصی هنوز از گستره و میزان محبوبیت بیشتری برخوردارند.
نرمافزارهای کارسازِ تحت لینوکس
کارساز (به انگلیسی: Server) به سیستم رایانهای پرتوانی گفته میشود که در یک شبکه برای وظیفهای خاص، نقشی را بر عهده میگیرد. سیستمهای کامپیوتری کارساز معمولاً از سختافزاری پرقدرت و نرمافزاری منعطف و پایدار برای ارائهٔ خدمت مورد نظر به مشتریان زیاد استفاده میکنند. سیستمعاملهای شکل گرفته بر پایه لینوکس، به دلیل پایداری و انعطاف، گزینههای خوبی برای نصب بر روی سیستمهای کارساز هستند.
نمونه نرمافزارهای مشهوری که معمولاً تحت لینوکس به عنوان نرمافزار کارساز استفاده میشوند:
اسکوئید (SQUID)
کارساز پروکسی-کش (Proxy-Cache)
بایند (بایند)
کارساز سامانه نام دامنه (DNS)
آپاچی (APACHE)
کارساز وب
پستفیکس(Postfix)
کارساز پست الکترونیکی
مایاسکیوال (MySQL)
کارساز پایگاه داده
نصب
در ابتدا مشکل بودن نصب سیستمهای بر پایه لینوکس مانعی برای پذیرش آن بود؛ اما در سالهای اخیر نصب لینوکس بسیار آسان شدهاست. بسیاری از توزیعها دارای نصبی آسان و قابل مقایسه با نسخههای ویندوز هستند؛ بهگونهای که توزیع اوبونتو با چند کلیک نصب میشود. علاوه بر این، رایانههای شخصی که با توزیعهای لینوکس وارد بازار شدهاند و به آسانی از بسیاری از فروشندههای اصلی، همچون دل، هیولت-پاکارد و وال-مارت قابل تهیه است.
بیشتر شیوههای عمومی نصب لینوکس، توسط همه توزیعهای مهم پشتیبانی میشود که شامل اجرا از طریق لوح فشرده، حاوی برنامههای نصب و راهاندازی نرمافزارهاست. این لوح فشرده میتواند از طریق تصویر استاندارد (ISO image) بارگذاری شده باشد، به تنهایی و به قیمت بسیار پایین خریداری شود، یا میتواند در مجموعه نرمافزارهای تجاری اضافی ارائه شود.
برخی توزیعها همچون دبیان (Debian) با فلاپی دیسک نیز قابل نصب هستند. پس از نصب ابتدایی، بیشتر نرمافزارها از طریق اینترنت و لوح فشرده قابل بارگذاری و نصب هستند.
بسیاری از توزیعها میتوانند بیدرنگ از طریق دیسکهای زنده بسیار سریعتر از نصب بر روی دیسک سخت اجرا شوند. به این صورت که یکبار از لوح فشرده راهاندازی میشود و میتوان از لینوکس بدون هیچگونه تغییری در محتویات دیسک سخت استفاده کرد. به همین نحو برخی توزیعهای حداقل، همچون تامزروتبوت (Tomsrtbt)، بدون نیاز به تغییر محتویات دیسک سخت از طریق فلاپی دیسک قابل اجرا هستند.
همچنین بسیاری توزیعها از راه انداری بر روی شبکه پشتیبانی میکنند، پس همه مراحل نصب و پیکربندی دستگاه میتواند بر روی شبکه انجام شود.
پیکربندی
بیشتر فایلهای پیکربندی در پوشهای با نام «etc/» ذخیره شدهاست. اگر کاربر مخصوص باشد، فایلهای پنهان در پوشه خانه کاربر قرار دارد. تعدادی از برنامهها از پایگاه داده پیکربندی به عوض فایل استفاده میکنند.
راههای بسیاری برای ایجاد تغییرات وجود دارد. آسانترین راه، استفاده از ابزارهای آماده همچون یاست (YaST) در توزیع SUSE یا مرکز کنترل در مندریک (Mandrake) استفاده کرد. انواع دیگر آن، مانند لینوکسکانف (Linuxconf)، ابزارهای سیستم گنوم، و وبمین (Webmin) برای توزیعهای ویژه نیستند. آنها شامل بسیاری از امکانات پیکربندی توسط خط فرمان هستند. از آنجا که به طور متداول بیشتر تنظیمات در فایلهای متنی ذخیره شدهاند، آنها را میتوان با هر ویرایشگر متنی پیکر بندی نمود.
پشتیبانی
فروشندگان تجاری و دیگر کاربران گنو/لینوکس در اجتماعات آنلاین (کانالهای آیآرسی)، گروههای خبری، فهرستهای پستی و انجمنهای اینترنتی پشتیبانی فنی ارائه میکنند. گروه کاربران لینوکس (LUGs) در همه جهان به کاربران بسیاری به رایگان یاری میرساند.
مدل کسب و کار بیشتر فروشندگان تجاری لینوکس (بمانند ردهت و ناول) بر پایه دریافت حقالزحمه جهت پشتیبانی است. اینگونه دریافت پشتیبانی در برابر پرداخت پول برای کاربران تجاری لینوکس حایز اهمیت است.
مک اواس
مک او اس (MAC OS) یک نوع سیستمعامل دارای رابط کاربری است که شرکت اپل آن را توسعه داده است. این سیستمعامل که همراه با ارائه اولین مدل مکینتاش عرضه شد تا قبل از نسخه ۷٫۶ با نام «نرمافزار سیستم» شناخته میشد و از نسخه ۷٫۶ به بعد مک اواس نام گرفت.
طراحی
از همان ابتدا، اپل با استفاده از طراحی به عمد به دنبال به حداقل رساندن نیاز به فهم کامل سیستم عامل توسط کاربر بود به عنوان مثل. کارهایی که بر روی محصولات دیگر نیاز به دانش صریح و آشکاری در کار سیستم عامل را میطلبید بر روی مکینتاش توسط حرکات موس و استفاده از پانل کنترل گرافیکی انجام می گرفته است. در نتیجه مقصود این بود که محصولی کاربر پسند تر و قابل تسلط به راحتی تولید شود. و این عامل تمایز آن از دستگاههایی بود که از محیط عاملهای دیگر، مانند ماشینهای MS - DOS استفاده میکردند، که به اصطلاح بسیار فنی بودند.
در ابتدا هسته اصلی "نرمافزار سیستم" در ROM بود، که بعدها با به روز رسانی به طور معمول به رایگان بر روی فلاپی در اختیار نمایندگیهای اپل قرار گرفت تا دخالت کاربر در هنگام ارتقاء سیستم عامل نیز تنها به اجرای یک فایل نصبی به حداقل برسد، و یا به سادگی جایگزین کردن فایلهای سیستم باشد، سادگی که دوباره محصول این شرکت را از دیگر محصولات متفاوت کرد.
نسخهها
نسخههای اولیه سیستم عامل مک تنها با مکینتاش موتورولا ۶۸۰۰۰ سازگار بودند. و رایانههای اپل با عنوان PowerPC معرفی شدند و درست از زمانی که رایانههای PowerPC معرفی شدند سیستم عامل را نیز برای حمایت از این معماری توسعه دادند. سیستم عامل Mac OS ۸٫۱ آخرین نسخه از برنامه است که میتواند بر روی پردازنده "۶۸K" یا (۶۸۰۴۰) اجرا شود. سیستم عامل Mac OS X، که جایگزین نسخه "کلاسیک" سیستم عامل مک است، از نسخه ۱۰٫۰ ("یوز پلنگ") به نسخه ۱۰٫۳ ("پلنگ") تنها با پردازشگرهای PowerPC سازگار است. و در نسخه ۱۰٫۴ ("ببر"، اینتل تنها پس از بروز رسانی) و نسخه ۱۰٫۵ ("پلنگ") پردازندههای اینتل و PowerPC را پشتیبانی میکند. و بعد از نسخه ۱۰٫۶ ("پلنگ برفی") تنها از پردازندههای اینتل پشتیبانی میکند.
سیستم عامل مکینتاش اولیه در ابتدا از دو بخش نرمافزاری، به نام "سیستم" و "فایندر (finder)"، که هر کدام با شماره نسخه خود را شامل است عرضه شد. سیستم ۷٫۵٫۱ اولین سیستم عامل مک شامل آرم (تغییر در آیکون اصلی که در شروع مک نمایش داده میشود) و Mac OS ۷٫۶ اولین بار به نام "سیستم عامل مک" نام گذاری شد.
ویندوز اکسپی
ویندوز اکسپی (به انگلیسی: Windows XP) یکی از سیستمعاملهایی است که اسم رمز «ویسلر» (Whistler) را بر خود داشت، چرا که در طول توسعهٔ ویندوز ایکسپی بسیاری از کارکنان مایکروسافت در تفریحگاه ویسلر کانادا مشغول اسکی بودند. ویندوز ایکس پی بر روی هسته ویندوز انتی و ۲۰۰۰ پایهگذاری شد و جانشین دو ویندوز ۲۰۰۰ و امیی گردید.
شرکت مایکروسافت ویندورز اکسپی را به منظور بهروزکردن رابط کاربر (شکل ظاهری برنامه)، افزودن ویژگیهای تازه، یکدستکردن «مبنای کد» بین اعضای مختلف خانواده مایکروسافت ویندوز و فراهم آوردن یک پلتفرم باثباتتر، پایهگذاری و در سال ۲۰۰۱ روانه بازار کرد.
ویندوز اکس پی که در اکتبر ۲۰۰۱ عرضه شد، یکی از محبوبترین سیستمهای عامل کامپیوتر در جهان به شمار میرود که گفته میشود بیش از چهارصد میلیون نسخه از آن در حال استفاده است. با این حال مایکروسافت اعلام کرده دیگر به شرکتهای عمده سازنده کامپیوتر نظیر دل، اچ پی و توشیبا مجوز نصب سیستمعامل قبلی را بر روی کامپیوترهای تولیدی نخواهد داد، و از ژانویه ۲۰۰۸ ویندوز اکس پی بر روی کامپیوترهای جدید عرضه نخواهد شد.
ویندوز اکسپی در ابتدا در دو نسخه خانگی و حرفهای عرضه شدهبود. ویندوز اکسپی از چندین زبان مختلف پشتیبانی میکند.
سختافزار لازم
ویرایشها
ویندوز XP در ویراشهای مختلفی ارائه شدهاست که از رایجترین آنها میتوان به ویندوز XP ویرایش خانگی برای کاربران خانگی ویندوز XP حرفهای که قابلیتهای دیگری همچون پشتیبانی از دامنه ویندوز سرور را دارد مناسب کاربران حرفهای و تجاری است، اشاره کرد. ویندوز XP ویرایش Media Center نیز در حقیقت همان ویندوز XP حرفهای است که قابلیتهای اضافی در مورد سیستمهای چند رسانهای همچون تماشای TV، مشاهده DVD و شنیدن موزیک دارد. ویندوز XP ویرایش Tablet PC برای اجرا در پلت فرمهای Table PC طراحی شدهاست. همچنین دو ویرایش ۶۴ بیتی از ویندوز XP وجود دارد: ویندوز XP ویرایش ۶۴ بیتی برای پردازندههای تیانیوم و ویندوز XP ویرایش حرفهای x۶۴ برای پردازندههای x۸۶-۶۴
ویندوز XP به خاطر بهبود کارایی و پایداری نسخههای قبلی ویندوز، مورد توجه قرار گرفتهاست. در ویندوز XP، واسط گرافیکی کاربر کاملاً از نو طراحی شدهاست و بسیار کاربرپسندتر از نسخههای قبلی ویندوز مایکروسافت است. قابلیتهای مدیریت نرمافزاری جدیدی در XP معرفی شدهاند که کاربران را از جهنم DLLها که در نسخههای قبلی همه را به ستوه درمی آورد، رهایی میبخشد. XP اولین نسخه از ویندوز است که از فعال سازی محصول برای مقابله با قوانین تخلف نرمافزاری استفاده میکند. با وجود تمام قابلیتهای موجود، XP به خاطر آسیب پذیریهای امنیتی، وجود برنامههای جانبی مایکروسافت همچون اینترنت اکسپلورر و ویندوز مدیا پلیر در ویندوز به صورت پیش فرض و برخی زمینههای واسط کاربر، مورد انتقاد کاربران قرار گرفتهاست. در ویرایش اصلی ویندوز، ویرایش خانگی برای کاربران خانگی و ویرایش حرفهای، برای کاربران حرفهای و تجاری است. علاوه بر این ویرایش Media Center نیز موجود میباشد.
در زیر برخی از قابلیتهای اضافی ویندوز XP نسخه حرفهای نسبت به نسخه خانگی آمدهاست:
توانایی پیوستن به دامنه ویندوز سرور، گروهی از کامپیوترها که از راه دور به وسیله یک یا چند سرور مرکزی مدیریت میشوند (اکثر کسب و کارهایی که از ویندوز استفاده میکنند دامنه و ویندوز سرور دارند).
استفاده از طرحهای لیست کنترل دسترسی برای تعیین اجازه دسترسی به فایلها به کاربران خاص، البته کاربران میتوانند از ابزارهایی برای از بین بردن این اجازه دسترسیها استفاده کنند. رفتن به Safe Mode یکی از راههای اصلاح لیست کنترل دسترسیها است.
سرور سرویسهای ترمینال که امکان استفاده از ویندوز را به کاربران کامپیوترهای دیگر از طریق شبکهٔ محلی یا اینترنت میدهد.
فولدر و فایلهای offline که به PC امکان ذخیره و اجرای یک کپی از فایلهای کامپیوترهای دیگر موجود در شبکه در حالت قطع بودن اتصال را میدهد.
سیستم فایل رمزنگاری شده، که فایلهای ذخیره شده در هارد دیسک را رمزنگاری میکند و در نتیجه به کاربران غیرمجاز دیگر اجازه خواندن آنها را نخواهد داد.
قابلیتهای مدیریتی متمرکز شده، شامل سیاستهای گروهی، نصب و نگهداری خودکار نرمافزار، سرویسهای نصب از راه دور (RIS)
پشتیبانی از دو واحد پردازش مرکزی و تواناییهای هایپر تردینگ که در پردازندههای مدرن به عنوان بخشی از یک پردازنده فیزیکی در نظر گرفته میشود.
ویندوز XP برای سختافزارهای خاص
مایکروسافت نسخههای سفارشی از ویندوز XP برای بازار سختافزارهای خاص را نیز عرضه کردهاست. پنج نسخه از XP برای سختافزارهای خاص است که دوتای آنها مخصوص پردازندههای ۶۴ بیتی است.
ویرایش ۶۴ بیتی ویندوز اکسپی
«ویرایش ۶۴ بیتی ویندوز XP» برای کامپیوترهای با پردازنده اتیانیوم طراحی شدهاست. عرضه این نسخه در سال ۲۰۰۵ پس از اتمام تولید سیستمهای ایتانیوم، توسط کمپانی Hewlett Packard آخرین کمپانی عرضه کننده سیستمهای ایتانیوم متوقف شد. البته در نسخههای سرور ویندوز همچنان از پردازندههای ایتانیوم پشتیبانی میشود.
ویرایش x۶۴ ویندوز XP حرفهای
«ویرایش x۶۴ ویندوز حرفهای» بر اساس ویندوز سرور ۲۰۰۳ طراحی شدهاست و پردازندههای AMD ۶۴ و نسخه توسعه یافته معماری IA-۳۲ اینتل را پشتیبانی میکند. این معماری در چیپهای اوپترون و Athlon ۶۴ شرکت AMD و نسخههای توسعه یافته اکس۸۶-۶۴ با سازگاری گسترده چیپهای اینتل یافت میشود. مایکروسافت در نسخههای قبلی ویندوز نیز میکروپروسسورهای خاص را پشتیبانی میکرد. البته ویندوز NT پردازندههای ۶۴ بیتی را به عنوان ۳۲ بیتی در نظر میگرفت. فایلهای لازم برای تمام معماریهای مختلف پردازندهها در CD نصب XP موجود است و نیازی به خرید نسخههای مجزا نمیباشد.
ویرایش Media Center ویندوز اکسپی
«ویرایش Media Center ویندوز XP» برای کامپیوترهای media center پیادهسازی شدهاست. این نسخه تنها در همان کامپیوترها موجود است و به صورت مجزا به فروش نمیرسد. در سال ۲۰۰۳ این نسخه تحت عنوان «ویندوز XP ویرایش Media center ۲۰۰۳» به هنگام شد که قابلیتهای جدیدی همچون امکان استفاده از رادیو FM به آن اضافه شده بود. در سالهای ۲۰۰۴ و ۲۰۰۵ نیز این ویرایش ارتقاء داده شد.
ویرایش Tablet PC ویندوز اکسپی
مایکروسافت این نسخه را به طور خاص برای کامپیوترهای لپ تاپ/نت بوک که به آنها اصطلاحاً Tablet PC میگویند، طراحی کردهاست. این ویرایش یادداشتهای دست نوشته، صفحات نمایش تصویر-گرا و صفحات نمایش حساس به قلم را پشتیبانی میکنند. این ویرایش نیز به همراه کامپیوتر Tablet به فروش میرسد و امکان خرید مجزای آن وجود ندارد.
ویندوز XP نهفته
این ویرایش برای کاربرد در وسایل الکترونیکی خاصی همچون بستههای Set-top، کیوسکها، دستگاههای خودپرداز، وسایل پزشکی، دستگاههای POS و مولفههای پروتکل صدا روی اینترنت (VOIP) پیادهسازی شدهاست.
ویندوز پایه برای کامپیوترهای شخصی قدیمی
در ژوئیه ۲۰۰۶ مایکروسافت یک نسخه محدود شده(thin-client) از ویندوز XP برای PCهای قدیمی ارائه کرد که تنها برای مشتریان بیمه نرمافزاری مایکروسافت مایکروسافت که میخواهند سیستم عامل خود را به XP ارتقا دهند ولی به هر دلیل تمایلی به خرید سختافزارهای مورد نیاز برای XP ندارند، عرضه میشود.
ویرایش مبتدی ویندوز XP
این ویرایش ویندوز XP نسخه ارزان قیمتی است که در کشورهای تایلند، ترکیه، مالزی، اندونزی، روسیه، هند، برزیل، آرژانتین، شیلی، مکزیک، اکوادور، اروگوئه و ونزوئلا موجود است. این ویرایش شبیه ویرایش خانگی است ولی محدودیتهای خاصی همچون اجازه اجرای تنها سه برنامه به طور همزمان را دارد. بر طبق گفته انتشارات مایکروسافت، ویرایش مبتدی ویندوز XP، «یک ویرایش ارزان قیمت مایکروسافت ویندوز XP است که برای کاربران مبتدی PC در کشورهای در حال توسعه طراحی شدهاست.»
ویرایش مبتدی امکانات خاصی برای بازارهای غیرآمریکایی، جایی که مشتریان ممکن است سواد کامپیوتری نداشته باشند، دارد. به عنوان مثال امکانات راهنمای محلی شده برای آنهایی که به زبان انگلیسی صحبت نمیکنند، تصاویر پس زمینه مخصوص هر کشور و محافظ صفحه نمایشهایی مخصوص و تنظیمات پیش فرض دیگری که برای استفاده راحتتر از ویندوز XP طراحی شدهاست، برخی از امکانات مخصوص این ویرایش است. به علاوه این ویرایش محدودیتهایی دارد که اعمال آنها باعث ارزانتر شدن آن نسبت به نسخههای دیگر ویندوز XP شدهاست.
در این ویرایش تنها سه برنامه به طور همزمان اجازه اجرا دارند و هر برنامه نیز حداکثر میتواند سه پنجره باز داشته باشد. بیشترین رزولوشن به ۷۶۸×۱۰۲۴ محدود شدهاست و هیچ پشتیبانی از دامنه و شبکههای کارگروهی نمیشود. همچنین این ویرایش برای پردازندههای کم توانی همچون سلرون اینتل و Duron کمپانی AMD ساخته شدهاست. در این ویرایش حداکثر حافظه اصلی ۲۵۶ مگابایت و ۸۰ گیگا بایت هارد دیسک را پشتیبانی میکند. (البته مایکروسافت به صورت واضح اعلام نکردهاست که این محدودیت برای اندازه کل دیسک است با برای هر پارتیشن) و بالاخره اینکه گزینههای محدودی برای سفارشی سازی تمها، دسک تاپ و نوار ابزار موجود است.
در ۱۹ اکتبر ۲۰۰۶ مایکروسافت اعلام کرد که ۱٫۰۰۰٫۰۰۰ نسخه از ویرایش مبتدی ویندوز XP را به فروش رساندهاست. اما در تولید انبوه این ویرایش توفیق چندانی نداشتهاست. نسخههای کرک شده و استفاده بدون مجوز از این ویرایش نیز بسیار موجود است.
7:46 pm
کاربرد برنامه نویسی
زبان برنامه نویسی یک مکانیزم ساخت یافته برای تعریف دادهها، و عملیات یا تبدیلهایی که ممکن است بطور اتوماتیک روی آن داده انجام شوند، فراهم میکند. یک برنامه نویس از انتزاعات آماده در زبان استفاده میکند تا مفاهیم به کار رفته در محاسبات را بیان کند. این مفاهیم به عنوان یک مجموعه از سادهترین عناصر موجود بیان میشوند(مفاهیم ابتدایی نامیده میشوند).

زبانهای برنامه نویسی با غالب زبانهای انسانی تفاوتی دارد و آن این است که نیاز به بیان دقیق تر و کامل تری دارد. هنگام استفاده از زبانهای طبیعی برای ارتباط با دیگر انسانها، نویسندگان و گویندگان میتوانند مبهم باشند و اشتباهات کوچک داشته باشند، و همچنان انتظار داشته باشند که مخاطب آنها متوجه شده باشد. اگرچه، مجازا، رایانهها "دقیقاً آنچه که به آنها گفته شده را انجام میدهند." و نمیتوانند "بفهمند" که نویسنده دقیقاً چه کدی مد نظر نویسنده بودهاست] البته امروزه برنامههایی برای انجام این کار تولید شدهاند و تلاشهای بسیاری در این زمینه انجام شده ولی هنوز به نتیجهٔ رضایت بخشی نرسیده است[. ترکیب تعریف زبان، یک برنامه، و ورودی برنامه بطور کامل رفتار خروجی را به هنگام اجرای برنامه (در محدوده کنترل آن برنامه) مشخص میکند. برنامههای یک رایانه ممکن است در یک فرایند ناپیوسته بدون دخالت انسان اجرا شوند، یا یک کاربر ممکن است دستورات را در یک مرحله فعل و انفعال مفسر تایپ کند.در این حالت "دستور"ها همان برنامهها هستند، که اجرای آنها زنجیروار به هم مرتبطند.به زبانی که برای دستور دادن به برنامهای استفاده میشود، زبان اسکریپت میگویند. بسیاری از زبانها کنار گذاشته شدهاند، برای رفع نیازهای جدید جایگزین شدهاند، با برنامههای دیگر ترکیب شدهاند و در نهایت استعمال آنها متوقف شدهاست. با وجود اینکه تلاشهایی برای طراحی یک زبان رایانه" کامل" شدهاست که تمام اهداف را تحت پوشش قرار دهد، هیچ یک نتوانستند بطور کلی این جایگاه را پر کنند. نیاز به زبانهای رایانهای گسترده از گستردگی زمینههایی که زبانها استفاده میشوند، ناشی میشود:
محدوده برنامهها از متون بسیار کوچک نوشته شده توسط افراد عادی تا سیستمهای بسیار بزرگ نوشته شده توسط صدها برنامه نویس است
توانایی برنامه نویسها: از تازه کارهایی که بیش از هر چیز به سادگی نیاز دارند تا حرفهایهایی که با پیچیدگی قابل توجهی کنار میآیند.
برنامهها باید سرعت، اندازه و سادگی را بسته به سیستمها از ریزپردازندها تا ابر رایانهها متناسب نگه دارند.
برنامهها ممکن است یک بار نوشته شوند و تا نسلها تغییر نکنند، و یا ممکن است پیوسته اصلاح شوند.
در نهایت، برنامه نویسها ممکن است در علایق متفاوت باشند: آنها ممکن است به بیان مسائل با زبانی خاص خو گرفته باشند.
یک سیر رایج در گسترش زبانهای برنامه نویسی این است که قابلیت حل مسائلی با درجات انتزاعی بالاتری را اضافه کنند. زبانهای برنامه نویسی اولیه به سختافزار رایانه گره خورده بودند. همانطور که زبانهای برنامه نویسی جدید گسترش پیدا کردهاند، ویژگیهایی به برنامهها افزوده شده که به برنامه نویس اجازه دهد که ایدههایی که از ترجمه ساده به دستورات سختافزار دورتر هستند نیز استفاده کند. چون برنامه نویسها کمتر به پیچیدگی رایانه محدود شدهاند، برنامههای آنها میتواند محاسبات بیشتری با تلاش کمتر از سوی برنامه نویس انجام دهند. این به آنها این امکان را میدهد که کارایی بیشتردر واحد زمان داشته باشند. "پردازندههای زبان طبیعی" به عنوان راهی برای ازبین بردن نیاز به زبانهای اختصاصی برنامه نویسی پیشنهاد شدهاند. هرچند، این هدف دور است و فواید آن قابل بحث است. "ادسگر دیجسترا" موافق بود که استفاده از یک زبان رسمی برای جلوگیری از مقدمه سازی ساختارهای بی معنی واجب است، و زبان برنامه نویسی طبیعی را با عنوان "احمقانه" رد کرد، "آلن پرلیس" نیز مشابها این ایده را رد کرد. مطابق با متدولوژی نامتجانس استفاده شده توسط langpop.com در سال ۲۰۰۸، ۱۲ زبان پرکاربرد عبارتند از: C, C++, C#, Java, JavaScript, Perl, PHP, Python, Ruby, Shell, SQL, and Visual Basic.
المانها
تمام زبانهای بزنامه نویسی تعدادی بلوکهای ابتدایی برای توضیح داده و پردازش یا تبدیل آنها(مانند جمع کردن دو عدد با انتخاب یک عضو از یک مجموعه)دارند. این " عناصرابتدایی" بوسیله قوانین معناشناسی و دستوری تعریف میشوند که ساختار و معنای مربوطه را توضیح میدهند.
دستور(
syntax)
فرم سطحی یک زبان برنامه نویسی دستور آن نامیده میشود. غالب زبانهای برنامه نویسی کاملاً متنی اند؛ و از دنبالهٔ متون شامل کلمات، اعداد، نشانگذاری، بسیار شبیه زبان نوشتاری طبیعی استفاده میکنند. از طرف دیگر، برنامههایی نیز وجود دارند که بیشتر گرافیکی اند، و از روابط بصری بین سمبلها برای مشخص کردن برنامه استفاده میکنند. دستور یک زبان ترکیبات ممکن سمبلها برای ایجاد یک برنامهٔ درست را از نظر دستوری مشخص میکند. معنایی که به یک ترکیب سمبلها داده میشود با معناشناسی اداره میشود(قراردادی یا نوشته شده در پیاده سازی منبع). از آنجا که اغلب زبانها متنی هستند، این مقاله دستور متنی را مورد بحث قرار میدهد.
دستور زبان برنامه نویسی معمولاً بوسیله ترکیب عبارات معین(برای ساختار لغوی) و فرم توضیح اعمال(برای ساختار گرامری) تعریف میشوند. متن زیر یک گرامر ساده، به زبان lisp است: expression ::= atom | list atom ::= number | symbol number ::= [+-]?['۰'-'۹']+ symbol ::= ['A'-'Za'-'z'].* list ::= '(' expression* ')' این گرامر موارد ذیل را مشخص میکند:
یک عبارت یا atom است و یا یک لیست
یک atom یا یک عدد است و یا یک سمبل
یک عدد دنباله ناشکستهای از یک یا تعداد بیشتری اعداد دهدهی است، که یک علامت مثبت و یا منفی میتواند پیش از آن بیاید.
یک سمبل حرفی است که بعد از هیچ یا تعدادی کاراکتر (جز فاصله) میآید.
یک لیست تعدادی پرانتز است که میتواند صفر یا چند عبارت در خود داشته باشد.
"۱۲۳۴۵"، "()"، "(a b c۲۳۲ (۱))" مثالهایی هستند از دنبالههای خوش فرم در این گرامر.
همه برنامههایی که از لحاظ دستوری درست هستند، از نظر معنا درست نیستند. بسیاری از برنامههای درست دستوری، بد فرم اند، با توجه به قوانین زبان؛ و ممکن است (بسته به خصوصیات زبان و درست بودن پیاده سازی) به خطای ترجمه و یا استثنا(exception) منتج شود. در برخی موارد، چنین برنامههایی ممکن است رفتار نامشخصی از خود نشان دهند. حتی اگر یک برنامه در یک زبان به خوبی بیان شده باشد، ممکن است دقیقاً مطلوب نویسنده آن نبوده باشد.
به عنوان مثال در زبان طبیعی، ممکن نیست به برخی از جملات درست از لحاظ گرامری، معنای خاصی اطلاق کرد و یا ممکن است جمله نادرست باشد:
"ایدههای بی رنگ سبز با خشم میخوابند."از نظر دستوری خوش فرم است ولی معنای مورد قبولی ندارد.
"جان یک مجرد متاهل است." از نظر دستوری درست است، ولی معنایی را بیان میکند که نمیتواند درست باشد.
این قسمت از زبان C از نظر دستوری درست است، اما دستوری را انجام میدهد که از نظرمعنایی تعریف نشده است(چون p یک اشاره گر خالی است، عمل p->real,p->im معنای خاصی ندارد.) complex *p = NULL; complex abs_p = sqrt (p->real * p->real + p->im * p->im);
گرامر مورد نیاز برای مشخص کردن یک زبان برنامه نویسی میتواند با جایگاهش در "سلسله مراتب چامسکی" طبقه بندی شود. دستور اغلب زبانهای برنامه نویسی میتواند بوسیله یک گرامر نوع ۲ مشخص گردد، برای مثال، گرامرهای مستقل از متن.
معناشناسی ایستا
معناشناسی ایستا محدودیتهایی بر روی ساختار مجاز متنها تعیین میکند که بیان آنها در فرمول دستوری استاندارد مشکل و یا غیر ممکن است. مهمترین این محدودیتها به وسیله سیستم نوع گذاری انجام میشود.
سیستم نوع گذاری
یک سیستم نوع گذاری مشخص میکند که یک زبان برنامه نویسی چگونه مقادیر و عبارات را در نوع(type) دسته بندی میکند، چگونه میتواند آن نوعها را تغییر دهد و رفتار متقابل آنها چگونهاست. این کارعموما توضیح داده ساختارهایی که میتوانند در آن زبان ایجاد شوند را شامل میشود. طراحی و مطالعه سیستمهای نوع گذاری بوسیله ریاضیات قراردادی را تئوری نوع گذاری گویند.
زبانهای نوع گذاری شده و بدون نوع گذاری
یک زبان نوع گذاری شدهاست اگر مشخصات هر عملیات، نوع دادههای قابل اجرا توسط آن را با نشان دادن نوعهایی که برای آنها قابل اجرا نیست، تعیین کند. برای مثال، "این متن درون گیومه قرار دارد" یک رشتهاست. در غالب زبانهای برنامه نویسی، تقسیم یک رشته با یک عدد معنایی ندارد. در نتیجه غالب زبانهای برنامه نویسی مدرن ممکن است اجرای این عملیات را توسط برنامهها رد کنند. در برخی زبانها، عبارات بی معنی ممکن است هنگام ترجمه(compile) پیدا شود(چک کننده نوع ایستا)، و توسط کامپایلر رد شود، در حالی که در سایر برنامهها، هنگام اجرا پیدا شود.(چک کننده نوع دینامیک) که به استثنای در حال اجرا منتج شود(runtime exception). حالت خاص زبانهای نوع دار زبانهای تک نوعند. این زبانها غالباً اسکریپتی و یا مارک آپ هستند، مانند rexx وSGML و فقط یک داده گونه دارند—غالباً رشتههای کاراکتری که هم برای دادههای عددی و هم برای دادههای سمبلی کاربرد دارند. در مقابل، یک زبان بدون نوع گذاری، مثل اکثر زبانهای اسمبلی، این امکان را میدهد که هر عملیاتی روی هر دادهای انجام شود، که معمولاً دنبالهای از بیتها با طولهای متفاوت در نظر گرفته میشوند. زبانهای سطح بالا که بی نوع هستند شامل زبانهای ساده رایانهای و برخی از انواع زبانهای نسل چهارم.
در عمل، در حالیکه تعداد بسیار کمی از دیدگاه نظریه نوع، نوع گذاری شده تلقی میشوند(چک کردن یا رد کردن تمام عملیاتها)، غالب زبانهای امروزی درجهای از نوع گذاری را فراهم میکنند. بسیاری از زبانهای تولیدکننده راهی را برای گذشتن یا موقوف کردن سیستم نوع فراهم میکنند.
نوع گذاری ایستا و متحرک
در نوع گذاری ایستا تمام عبارات نوعهای خود را قبل از اجرای برنامه تعیین میکنند(معمولاً در زمان کامپایل). برای مثال، ۱ و (۲+۲) عبارات عددی هستند؛ آنها نمیتوانند به تابعی که نیاز به یک رشته دارد داده شوند، یا در متغیری که تعریف شده تا تاریخ را نگه دارد، ذخیره شوند.
زبانهای نوع گذاری شده ایستا میتوانند با مانیفست نوع گذاری شوند یا با استفاده از نوع استنباط شوند. در حالت اول، برنامه نویس بیشتر صریحاً نوعها را در جایگاههای منتنی مشخص مینویسد(برای مثال، در تعریف متغیرها). در حالت دوم، کامپایلر نوع عبارات و تعریفها را بر اساس متن استنباط میکند. غالب زبانهای مسیر اصلی(mainstream) ایستا نوع گذاری شده، مانند C#,C++ و Java، با مانیفست نوع گذاری میشوند
نوع گذاری قوی و ضعیف
نوع گذاری ضعیف این امکان را ایجاد میکند که با متغیری به جای متغیری دیگر برخورد شود، برای مثال رفتار با یک رشته به عنوان یک عدد. این ویژگی بعضی اوقات ممکن است مفید باشد، اما ممکن است باعث ایجاد برخی مشکلات برنامه شود که موقع کامپایل و حتی اجرا پنهان بمانند.
نوع گذاری قوی مانع رخ دادن مشکل فوق میشود. تلاش برای انجام عملیات روی نوع نادرست متغیر منجر به رخ دادن خطا میشود. زبانهایی که نوع گذاری قوی دارند غالباً با نام "نوع-امن" و یا امن شناخته میشوند. تمام تعاریف جایگزین برای "ضعیف نوع گذاری شده" به زبانها اشاره میکند، مثل perl, JavaScript, C++، که اجازه تعداد زیادی تبدیل نوع داخلی را میدهند. در جاوااسکریپت، برای مثال، عبارت ۲*x به صورت ضمنی x را به عدد تبدیل میکند، و این تبدیل موفقیت آمیز خواهد بود حتی اگر x خالی، تعریف نشده، یک آرایه، و یا رشتهای از حروف باشد. چنین تبدیلات ضمنی غالباً مفیدند، اما خطاهای برنامه نویسی را پنهان میکنند.
قوی و ایستا در حال حاضر عموماً دو مفهوم متعامد فرض میشوند، اما استفاده در ادبیات تفاوت دارد، برخی عبارت "قوی نوع گذاری شده" را به کار میبرند و منظورشان قوی، ایستایی نوع گذاری شدهاست، و یا، حتی گیچ کننده تر، منظورشان همان ایستایی نوع گذاری شدهاست. بنابراین C هم قوی نوع گذاری شده و هم ضعیف و ایستایی نوع گذاری شده نامیده میشود.
معناشناسی اجرا
وقتی که داده مشخص شد، ماشین باید هدایت شود تا عملیاتها را روی داده انجام دهد. معناشناسی اجرا ی یک زبان تعیین میکند که چگونه و چه زمانی ساختارهای گوناگون یک زبان باید رفتار برنامه را ایجاد کنند.
برای مثال، معناشناسی ممکن است استراتژی را که بویسله آن عبارات ارزیابی میشوند را تعریف کند و یا حالتی را که ساختارهای کنترلی تحت شرایطی دستورها را اجرا میکنند.
کتابخانه هسته
اغلب زبانهای برنامه نویسی یک کتابخانه هسته مرتبط دارند(گاهی اوقات "کتابخانه استاندارد" نامیده میشوند، مخصوصا وقتی که به عنوان قسمتی از یک زبان استاندارد ارائه شده باشد)، که به طور قراردادی توسط تمام پیاده سازیهای زبان در دسترس قرار گرفته باشند. کتابخانه هسته معمولاً تعریف الگوریتمها، داده ساختارها و مکانیزمهای ورودی و خروجی پرکاربرد را در خود دارد. کاربران یک زبان، غالباً با کتابخانه هسته به عنوان قسمتی از آن رفتار میکنند، اگرچه طراحان ممکن است با آن به صورت یک مفهوم مجزا رفتار کرده باشند. بسیاری از خصوصیات زبان هستهای را مشخص میکنند که باید در تمام پیاده سازیها موجود باشند، و در زبانهای استاندارد شده این کتابخانه هسته ممکن است نیاز باشد. بنابراین خط بین زبان و کتابخانه هسته آن از زبانی به زبان دیگر متفاوت است. درواقع، برخی زبانها به گونهای تعریف شدهاند که برخی از ساختارهای دستوری بدون اشاره به کتابخانه هسته قابل استفاده نیستند. برای مثالف در جاوا، یک رشته به عنوان نمونهای از کلاس “java.lang.String” تعریف شده است؛ مشابها، در سمال تاک(smalltalk) یک تابع بی نام(یک "بلاک") نمونهای از کلاس BlockContext کتابخانه میسازد. بطور معکوس، Scheme دارای چندین زیرمجموعه مرتبط برای ایجاد سایر ماکروهای زبان میباشد، و در نتیجه طراحان زبان حتی این زحمت را نیز تحمل نمیکنند که بگویند کدام قسمت زبان به عنوان ساختارهای زبان باید پیاده سازی شوند، و کدام یک به عنوان بخشی ازکتابخانه.
عمل
طراحان زبان و کاربران باید مصنوعاتی ایجاد کنند تا برنامه نویسی را در عمل ممکن سازند و کنترل کنند. مهمترین این مصنوعات خصوصیات و پیاده سازیهای زبان هستند.
خصوصیات
یک زبان برنامه نویسی باید تعریفی فراهم کند که کاربران و پیاده کنندههای زبان میتوانند از آن استفاده کنند تا مشخص کنند که رفتار یک برنامه درست است. با داشتن کد منبع: خصوصیات یک زبان برنامه نویسی چندین قالب میتواند بگیرد، مانند مثالهای زیر:
تعریف صریح دستور، معناشناسی ایستا، ومعناشناسی اجرای زبان. درحالیکه دستور معمولاً با یک معناشناسی قراردادی مشخص میشود، تعاریف معناشناسی ممکن است در زبان طبیعی نوشته شده باشند (مثل زبان C)، یا معناشناسی قراردادی(مثل StandardML ,Scheme)
توضیح رفتار یک مترجم برای زبان(مثل C,fortran). دستور و معناشناسی یک زبان باید از این توضیح استنتاج شوند، که ممکن است به زبان طبیعی یا قراردادی نوشته شود.
پیاده سازی منبع یا مدل. گاهی اوقات در زبانهای مشخص شده(مثل: prolog,ANSI REXX).دستور و معناشناسی صریحاً در رفتار پیاده سازی مدل موجودند.
پیاده سازی
پیاده سازی یک زبان برنامه نویسی امکان اجرای آن برنامه را روی پیکربندی مشخصی از سختافزار و نرمافزار را فراهم میکند. بطور وسیع، دو راه رسیدن به پیاده سازی زبان برنامه نویسی وجود دارد. کامپایل کردن و تفسیر کردن. بطور کلی با هر بک از ابن دو روش میتوان یک زبان را پیاده سازی کرد.
خروجی یک کامپایلر ممکن است با سختافزار و یا برنامهای به نام مفسر اجرا شود. در برخی پیاده سازیها که از مفسر استفاده میشود، مرز مشخصی بین کامپایل و تفسیر وجود ندارد. برای مثال، برخی پیاده سازیهای زبان برنامه نویسی بیسیک کامپایل میکنند و سپس کد را خط به خط اجرا میکنند.
برنامههایی که مستقیماً روی سختافزار اجرا میشوند چندین برابر سریعتر از برنامههایی که با کمک نرمافزار اجرا میشوند، انجام میشوند.
یک تکنیک برای بهبود عملکرد برنامههای تفسیر شده کامپایل در لحظه آن است. در این روش ماشین مجازی، دقیقاً قبل از اجرا، بلوکهای کدهای بایتی که قرار است استفاده شوند را برای اجرای مستقیم روی سختافزار ترجمه میکند.
تاریخچه
پیشرفتهای اولیه
اولین زبان برنامه نویسی به قبل از رایانههای مدرن باز میگردد. قرن ۱۹ دستگاههای نساجی و متون نوازنده پیانو قابل برنامه نویسی داشت که امروزه به عنوان مثالهایی از زبانهای برنامه نویسی با حوزه مشخص شناخته میشوند. با شروع قرن بیستم، پانچ کارتها داده را کد گذاری کردند و پردازش مکانیکی را هدایت کردند. در دهه ۱۹۳۰ و ۱۹۴۰، صورت گرایی حساب لاندای آلونزو چرچ و ماشین تورینگ آلن تورینگ مفاهیم ریاضی بیان الگوریتمها را فراهم کردند؛ حساب لاندا همچنان در طراحی زبان موثر است.
در دهه ۴۰، اولین رایانههای دیجیتال که توسط برق تغذیه میشدند ایجاد شدند. اولین زبان برنامه نویسی سطح بالا طراحی شده برای کامپیوتر پلانکالکول بود، که بین سالهای ۱۹۴۵ و ۱۹۴۳ توسط کنراد زوس برای ز۳ آلمان طراحی شد.
کامپیوترهای اوایل ۱۹۵۰، بطور خاص ÜNIVAC ۱ و IBM ۷۰۱ از برنامههای زبان ماشین استفاده میکردند. برنامه نویسی زبان ماشین نسل اول توسط نسل دومی که زبان اسمبلی نامیده میشوند جایگزین شد. در سالهای بعد دهه ۵۰، زبان برنامه نویسی اسمبلی، که برای استفاده از دستورات ماکرو تکامل یافته بود، توسط سه زبان برنامه نویسی سطح بالا دیگر: FORTRAN,LISP , COBOL مورد استفاده قرار گرفت. نسخههای به روز شده این برنامهها همچنان مورد استفاده قرار میگیرند، و هر کدام قویا توسعه زبانهای بعد را تحت تاثیر قرار دادند. در پایان دهه ۵۰ زبان algol ۶۰ معرفی شد، و بسیاری از زبانهای برنامه نویسی بعد، با ملاحظه بسیار، از نسل algol هستند. قالب و استفاده از زبانهای برنامه نویسی به شدت متاثر از محدودیتهای رابط بودند.
پالایش
دوره دهه ۶۰ تا اواخر دهه ۷۰ گسترش مثالهای عمده زبان پرکاربرد امروز را به همراه داشت. با این حال بسیاری از جنبههای آن بهینه سازی ایدههای اولیه نسل سوم زبان برنامه نویسی بود:
APL برنامه نویسی آرایهای را معرفی کرد و برنامه نویسی کاربردی را تحت تاثیر قرار داد.
PL/i(NPL) دراوایل دهه ۶۰ طراحی شده بود تا ایدههای خوب فورترن و کوبول را بهم پیوند دهد.
در دهه ۶۰، Simula اولین زبانی بود که برنامه نویسی شئ گرا را پشتیبانی میکرد، در اواسط دهه۷۰. Smalltalk به دنبال آن به
عنوان اولین زبان کاملاً شئ گرا معرفی شد.
C بین سالهای ۱۹۶۹ تا ۱۹۷۳ به عنوان زبان برنامه نویسی سیستمی طراحی شد و همچنان محبوب است.
Prolog، طراحی شده در ۱۹۷۲، اولین زبان برنامه نویسی منطقی بود.
در ۱۹۷۸ ML سیستم نوع چند ریخت روی لیسپ ایجاد کرد، و در زبانهای برنامه نویسی کاربردی ایستا نوع گذاری شده پیشگام شد.
هر یک از این زبانها یک خانواده بزرگ از وارثین از خود به جای گذاشت، و مدرنترین زبانها از تبار حداقل یکی از زبانهای فوق به شمار میآیند.
دهههای ۶۰ و ۷۰ مناقشات بسیاری روی برنامه نویسی ساخت یافته به خود دیدند، و اینکه آیا زبانهای برنامه نویسی باید طوری طراحی شوند که آنها را پشتیبانی کنند.
"ادسگر دیکسترا" در نامهای معروف در ۱۹۶۸ که در ارتباطات ACM منتشر شد، استدلال کرد که دستورgoto باید از تمام زبانهای سطح بالا حذف شود.
در دهههای ۶۰ و ۷۰ توسعهٔ تکنیکهایی صورت گرفت که اثر یک برنامه را کاهش میداد و در عین حال بهره وری برنامه نویس و کاربر را بهبود بخشید. دسته کارت برای ۴GL اولیه بسیار کوچکتر از برنامهٔ هم سطح بود که با ۳GL deck نوشته شده بود.
یکپارچگی و رشد
دهه ۸۰ سالهای یکپارچگی نسبی بود. C++ برنامه نویسی شئ گرا و برنامه نویسی سیستمی را ترکیب کرده بود. ایالات متحده ایدا(زبان برنامه نویسی سیستمی که بیشتر برای استفاده توسط پیمان کاران دفاعی بود) را استاندارد سازی کرد. در ژاپن و جاهای دیگر، هزینههای گزافی صرف تحقیق در مورد زبان نسل پنجم میشد که دارای ساختارهای برنامه نویسی منطقی بود. انجمن زبان کاربردی به سمت استانداردسازی ML و Lisp حرکت کرد. به جای ایجاد مثالهای جدید، تمام این تلاشها ایدههایی که در دهههای قبل حلق شده بودند را بهتر کرد.
یک گرایش مهم در طراحی زبان در دهه ۸۰ تمرکز بیشتر روی برنامه نویسی برای سیستمهای بزرگ از طریق مدولها، و یا واحدهای کدهای سازمانی بزرگ مقیاس بود. مدول-۲، ایدا. و ML همگی سیستمهای مدولی برجستهای را در دهه ۸۰ توسعه دادند. با وجود اینکه زبانهای دیگر، مثل PL/i، پشتیبانی بسیار خوبی برای برنامه نویسی مدولی داشتند. سیستمهای مدولی غالباً با ساختارهای برنامه نویسی عام همراه شدهاند.
رشد سریع اینترنت در میانه دهه ۹۰ فرصتهای ایجاد زبانهای جدید را فراهم کرد. Perl، در اصل یک ابزار نوشتن یونیکس بود که اولین بار در سال ۱۹۸۷ منتشر شد، در وبگاههای دینامیک متداول شد. جاوا برای برنامه نویسی جنب سروری مورد استفاده قرار گرفت. این توسعهها اساساً نو نبودند، بلکه بیشتر بهینه سازی شده زبان و مثالهای موجود بودند، و بیشتر بر اساس خانواده زبان برنامه نویسی C بودند. پیشرفت زبان برنامه نویسی همچنان ادامه پیدا میکند، هم در تحقیقات و هم در صنعت. جهتهای فعلی شامل امنیت و وارسی قابلیت اعتماد است، گونههای جدید مدولی(mixin، نمایندهها، جنبهها) و تجمع پایگاه داده.
۴GLها نمونهای از زبانهایی هستند که محدوده استفاده آنها مشخص است، مثل SQL. که به جای اینکه دادههای اسکالر را برگردانند، مجموعههایی را تغییر داده و بر میگردانند که برای اکثر زبانها متعارفند. Perl برای مثال، با "مدرک اینجا" خود میتواند چندین برنامه ۴GL را نگه دارد، مانند چند برنامه جاوا سکریبت، در قسمتی از کد پرل خود و برای پشتیبانی از چندین زبان برنامه نویسی با تناسب متغیر در "مدرک اینجا" استفاده کند.
سنجش استفاده از زبان
مشکل است که مشخص کنیم کدام زبان برنامه نویسی بیشتر مورد استفادهاست، و اینکه کاربرد چه معنی میدهد با توجه به زمینه تغییر میکند. یک زبان ممکن است زمان بیشتری از برنامه نویس بگیرد، زبان دیگر ممکن است خطوط بیشتری داشته باشد، و دیگری ممکن است زمان بیشتری از پردازنده را مصرف کند. برخی زبانها برای کاربردهای خاص بسیار محبوبند. برای مثال: کوبول همچنان در مراکزداده متحد، غالباً روی کامپیوترهای بزرگ توانا است؛ fortran در مهندسی برنامههای کاربردی، C در برنامههای تعبیه شده و سیستمهای عامل؛ و بقیه برنامهها معمولاً برای نوشتن انواع دیگر برنامهها کاربرد دارند. روشهای مختلفی برای سنجش محبوبیت زبانها، هر یک متناسب یا یک ویژگی محوری متفاوت پیشنهاد شدهاست:
شمارش تعداد تبلیغات شغلی که از آن زبان نام میبرند.
تعداد کتابهای آموزشی و شرح دهندهٔ آن زبان که فروش رفتهاست.
تخمین تعداد خطوطی که در آن زبان نوشته شده اند- که ممکن است زبانهایی را که در جستجوها کمتر پیدا میشوند دست کم گرفته شوند.
شمارش ارجاعهای زبان(برای مثال، به اسم زبان) در موتورهای جستجوهای اینترنت.
طبقه بندیها هیچ برنامه غالبی برای دسته بندی زبانهای برنامه نویسی وجود ندارد. یک زبان مشخص معمولاً یک زبان اجدادی ندارد. زبانها معمولاً با ترکیب المانهای چند زبان پیشینه بوجود میآیند که هربار ایدههای جدید درگردشند. ایدههایی که در یک زبان ایجاد میشوند در یک خانواده از زبانهای مرتبط پخش میشوند، و سپس از بین خلاهای بین خانوادهها منتقل شده و در خانوادههای دیگر ظاهر میشوند.
این حقیقت که این دسته بندی ممکن است در راستای محورهای مختلف انجام شوند، این وظیفه را پیچیده تر میکند؛ برای مثال، جاوا هم یک زبان شیءگرا(چون به برنامه نویسی شیءگرا تشویق میکند) و زبان همزمان(چون ساختارهای داخلی برای اجرای چندین جریان موازی دارد) است. پایتون یک زبان اسکریپتی شیءگراست.
در نگاه کلی، زبانهای برنامه نویسی به مثالهای برنامه نویسی و یک دسته بندی بر اساس محدوده استفاده تقسیم میشوند. مثالها شامل برنامه نویسی رویهای، برنامه نویسی شیءگرا، برنامه نویسی کاربردی، وبرنامه نویسی منطقی؛ برخی زبانها ترکیب چند مثالند. یک زبان اسمبلی مثالی از یک مدل مستقیم متضمن معماری ماشین نیست. با توجه به هدف، زبانهای برنامه نویسی ممکن است همه منظوره باشند، زبانهای برنامه نویسی سیستمی، زبانهای اسکریپتی، زبانهای محدوده مشخص، زبانهای همزمان/ گسترده(و یا ترکیب اینها). برخی زبانهای همه منظوره تا حد زیادی برای اهداف آموزشی طراحی شدهاند.
یک زبان برنامه نویسی ممکن است با فاکتورهای غیر مرتبط به مثالهای برنامه نویسی دسته بندی شود. برای مثال، غالب زبانهای برنامه نویسی کلمات کلیدی زبان انگلیسی را استفاده میکنند، در حالیکه تعداد کمی این کار را نمیکنند. سایر زبانها ممکن است براساس داخلی بودن یا نبودن دسته بندی شوند.
زبان برنامه نویسی یک مکانیزم ساخت یافته برای تعریف دادهها، و عملیات یا تبدیلهایی که ممکن است بطور اتوماتیک روی آن داده انجام شوند، فراهم میکند. یک برنامه نویس از انتزاعات آماده در زبان استفاده میکند تا مفاهیم به کار رفته در محاسبات را بیان کند. این مفاهیم به عنوان یک مجموعه از سادهترین عناصر موجود بیان میشوند(مفاهیم ابتدایی نامیده میشوند).

زبانهای برنامه نویسی با غالب زبانهای انسانی تفاوتی دارد و آن این است که نیاز به بیان دقیق تر و کامل تری دارد. هنگام استفاده از زبانهای طبیعی برای ارتباط با دیگر انسانها، نویسندگان و گویندگان میتوانند مبهم باشند و اشتباهات کوچک داشته باشند، و همچنان انتظار داشته باشند که مخاطب آنها متوجه شده باشد. اگرچه، مجازا، رایانهها "دقیقاً آنچه که به آنها گفته شده را انجام میدهند." و نمیتوانند "بفهمند" که نویسنده دقیقاً چه کدی مد نظر نویسنده بودهاست] البته امروزه برنامههایی برای انجام این کار تولید شدهاند و تلاشهای بسیاری در این زمینه انجام شده ولی هنوز به نتیجهٔ رضایت بخشی نرسیده است[. ترکیب تعریف زبان، یک برنامه، و ورودی برنامه بطور کامل رفتار خروجی را به هنگام اجرای برنامه (در محدوده کنترل آن برنامه) مشخص میکند. برنامههای یک رایانه ممکن است در یک فرایند ناپیوسته بدون دخالت انسان اجرا شوند، یا یک کاربر ممکن است دستورات را در یک مرحله فعل و انفعال مفسر تایپ کند.در این حالت "دستور"ها همان برنامهها هستند، که اجرای آنها زنجیروار به هم مرتبطند.به زبانی که برای دستور دادن به برنامهای استفاده میشود، زبان اسکریپت میگویند. بسیاری از زبانها کنار گذاشته شدهاند، برای رفع نیازهای جدید جایگزین شدهاند، با برنامههای دیگر ترکیب شدهاند و در نهایت استعمال آنها متوقف شدهاست. با وجود اینکه تلاشهایی برای طراحی یک زبان رایانه" کامل" شدهاست که تمام اهداف را تحت پوشش قرار دهد، هیچ یک نتوانستند بطور کلی این جایگاه را پر کنند. نیاز به زبانهای رایانهای گسترده از گستردگی زمینههایی که زبانها استفاده میشوند، ناشی میشود:
محدوده برنامهها از متون بسیار کوچک نوشته شده توسط افراد عادی تا سیستمهای بسیار بزرگ نوشته شده توسط صدها برنامه نویس است
توانایی برنامه نویسها: از تازه کارهایی که بیش از هر چیز به سادگی نیاز دارند تا حرفهایهایی که با پیچیدگی قابل توجهی کنار میآیند.
برنامهها باید سرعت، اندازه و سادگی را بسته به سیستمها از ریزپردازندها تا ابر رایانهها متناسب نگه دارند.
برنامهها ممکن است یک بار نوشته شوند و تا نسلها تغییر نکنند، و یا ممکن است پیوسته اصلاح شوند.
در نهایت، برنامه نویسها ممکن است در علایق متفاوت باشند: آنها ممکن است به بیان مسائل با زبانی خاص خو گرفته باشند.
یک سیر رایج در گسترش زبانهای برنامه نویسی این است که قابلیت حل مسائلی با درجات انتزاعی بالاتری را اضافه کنند. زبانهای برنامه نویسی اولیه به سختافزار رایانه گره خورده بودند. همانطور که زبانهای برنامه نویسی جدید گسترش پیدا کردهاند، ویژگیهایی به برنامهها افزوده شده که به برنامه نویس اجازه دهد که ایدههایی که از ترجمه ساده به دستورات سختافزار دورتر هستند نیز استفاده کند. چون برنامه نویسها کمتر به پیچیدگی رایانه محدود شدهاند، برنامههای آنها میتواند محاسبات بیشتری با تلاش کمتر از سوی برنامه نویس انجام دهند. این به آنها این امکان را میدهد که کارایی بیشتردر واحد زمان داشته باشند. "پردازندههای زبان طبیعی" به عنوان راهی برای ازبین بردن نیاز به زبانهای اختصاصی برنامه نویسی پیشنهاد شدهاند. هرچند، این هدف دور است و فواید آن قابل بحث است. "ادسگر دیجسترا" موافق بود که استفاده از یک زبان رسمی برای جلوگیری از مقدمه سازی ساختارهای بی معنی واجب است، و زبان برنامه نویسی طبیعی را با عنوان "احمقانه" رد کرد، "آلن پرلیس" نیز مشابها این ایده را رد کرد. مطابق با متدولوژی نامتجانس استفاده شده توسط langpop.com در سال ۲۰۰۸، ۱۲ زبان پرکاربرد عبارتند از: C, C++, C#, Java, JavaScript, Perl, PHP, Python, Ruby, Shell, SQL, and Visual Basic.
المانها
تمام زبانهای بزنامه نویسی تعدادی بلوکهای ابتدایی برای توضیح داده و پردازش یا تبدیل آنها(مانند جمع کردن دو عدد با انتخاب یک عضو از یک مجموعه)دارند. این " عناصرابتدایی" بوسیله قوانین معناشناسی و دستوری تعریف میشوند که ساختار و معنای مربوطه را توضیح میدهند.
دستور(
syntax)
فرم سطحی یک زبان برنامه نویسی دستور آن نامیده میشود. غالب زبانهای برنامه نویسی کاملاً متنی اند؛ و از دنبالهٔ متون شامل کلمات، اعداد، نشانگذاری، بسیار شبیه زبان نوشتاری طبیعی استفاده میکنند. از طرف دیگر، برنامههایی نیز وجود دارند که بیشتر گرافیکی اند، و از روابط بصری بین سمبلها برای مشخص کردن برنامه استفاده میکنند. دستور یک زبان ترکیبات ممکن سمبلها برای ایجاد یک برنامهٔ درست را از نظر دستوری مشخص میکند. معنایی که به یک ترکیب سمبلها داده میشود با معناشناسی اداره میشود(قراردادی یا نوشته شده در پیاده سازی منبع). از آنجا که اغلب زبانها متنی هستند، این مقاله دستور متنی را مورد بحث قرار میدهد.
دستور زبان برنامه نویسی معمولاً بوسیله ترکیب عبارات معین(برای ساختار لغوی) و فرم توضیح اعمال(برای ساختار گرامری) تعریف میشوند. متن زیر یک گرامر ساده، به زبان lisp است: expression ::= atom | list atom ::= number | symbol number ::= [+-]?['۰'-'۹']+ symbol ::= ['A'-'Za'-'z'].* list ::= '(' expression* ')' این گرامر موارد ذیل را مشخص میکند:
یک عبارت یا atom است و یا یک لیست
یک atom یا یک عدد است و یا یک سمبل
یک عدد دنباله ناشکستهای از یک یا تعداد بیشتری اعداد دهدهی است، که یک علامت مثبت و یا منفی میتواند پیش از آن بیاید.
یک سمبل حرفی است که بعد از هیچ یا تعدادی کاراکتر (جز فاصله) میآید.
یک لیست تعدادی پرانتز است که میتواند صفر یا چند عبارت در خود داشته باشد.
"۱۲۳۴۵"، "()"، "(a b c۲۳۲ (۱))" مثالهایی هستند از دنبالههای خوش فرم در این گرامر.
همه برنامههایی که از لحاظ دستوری درست هستند، از نظر معنا درست نیستند. بسیاری از برنامههای درست دستوری، بد فرم اند، با توجه به قوانین زبان؛ و ممکن است (بسته به خصوصیات زبان و درست بودن پیاده سازی) به خطای ترجمه و یا استثنا(exception) منتج شود. در برخی موارد، چنین برنامههایی ممکن است رفتار نامشخصی از خود نشان دهند. حتی اگر یک برنامه در یک زبان به خوبی بیان شده باشد، ممکن است دقیقاً مطلوب نویسنده آن نبوده باشد.
به عنوان مثال در زبان طبیعی، ممکن نیست به برخی از جملات درست از لحاظ گرامری، معنای خاصی اطلاق کرد و یا ممکن است جمله نادرست باشد:
"ایدههای بی رنگ سبز با خشم میخوابند."از نظر دستوری خوش فرم است ولی معنای مورد قبولی ندارد.
"جان یک مجرد متاهل است." از نظر دستوری درست است، ولی معنایی را بیان میکند که نمیتواند درست باشد.
این قسمت از زبان C از نظر دستوری درست است، اما دستوری را انجام میدهد که از نظرمعنایی تعریف نشده است(چون p یک اشاره گر خالی است، عمل p->real,p->im معنای خاصی ندارد.) complex *p = NULL; complex abs_p = sqrt (p->real * p->real + p->im * p->im);
گرامر مورد نیاز برای مشخص کردن یک زبان برنامه نویسی میتواند با جایگاهش در "سلسله مراتب چامسکی" طبقه بندی شود. دستور اغلب زبانهای برنامه نویسی میتواند بوسیله یک گرامر نوع ۲ مشخص گردد، برای مثال، گرامرهای مستقل از متن.
معناشناسی ایستا
معناشناسی ایستا محدودیتهایی بر روی ساختار مجاز متنها تعیین میکند که بیان آنها در فرمول دستوری استاندارد مشکل و یا غیر ممکن است. مهمترین این محدودیتها به وسیله سیستم نوع گذاری انجام میشود.
سیستم نوع گذاری
یک سیستم نوع گذاری مشخص میکند که یک زبان برنامه نویسی چگونه مقادیر و عبارات را در نوع(type) دسته بندی میکند، چگونه میتواند آن نوعها را تغییر دهد و رفتار متقابل آنها چگونهاست. این کارعموما توضیح داده ساختارهایی که میتوانند در آن زبان ایجاد شوند را شامل میشود. طراحی و مطالعه سیستمهای نوع گذاری بوسیله ریاضیات قراردادی را تئوری نوع گذاری گویند.
زبانهای نوع گذاری شده و بدون نوع گذاری
یک زبان نوع گذاری شدهاست اگر مشخصات هر عملیات، نوع دادههای قابل اجرا توسط آن را با نشان دادن نوعهایی که برای آنها قابل اجرا نیست، تعیین کند. برای مثال، "این متن درون گیومه قرار دارد" یک رشتهاست. در غالب زبانهای برنامه نویسی، تقسیم یک رشته با یک عدد معنایی ندارد. در نتیجه غالب زبانهای برنامه نویسی مدرن ممکن است اجرای این عملیات را توسط برنامهها رد کنند. در برخی زبانها، عبارات بی معنی ممکن است هنگام ترجمه(compile) پیدا شود(چک کننده نوع ایستا)، و توسط کامپایلر رد شود، در حالی که در سایر برنامهها، هنگام اجرا پیدا شود.(چک کننده نوع دینامیک) که به استثنای در حال اجرا منتج شود(runtime exception). حالت خاص زبانهای نوع دار زبانهای تک نوعند. این زبانها غالباً اسکریپتی و یا مارک آپ هستند، مانند rexx وSGML و فقط یک داده گونه دارند—غالباً رشتههای کاراکتری که هم برای دادههای عددی و هم برای دادههای سمبلی کاربرد دارند. در مقابل، یک زبان بدون نوع گذاری، مثل اکثر زبانهای اسمبلی، این امکان را میدهد که هر عملیاتی روی هر دادهای انجام شود، که معمولاً دنبالهای از بیتها با طولهای متفاوت در نظر گرفته میشوند. زبانهای سطح بالا که بی نوع هستند شامل زبانهای ساده رایانهای و برخی از انواع زبانهای نسل چهارم.
در عمل، در حالیکه تعداد بسیار کمی از دیدگاه نظریه نوع، نوع گذاری شده تلقی میشوند(چک کردن یا رد کردن تمام عملیاتها)، غالب زبانهای امروزی درجهای از نوع گذاری را فراهم میکنند. بسیاری از زبانهای تولیدکننده راهی را برای گذشتن یا موقوف کردن سیستم نوع فراهم میکنند.
نوع گذاری ایستا و متحرک
در نوع گذاری ایستا تمام عبارات نوعهای خود را قبل از اجرای برنامه تعیین میکنند(معمولاً در زمان کامپایل). برای مثال، ۱ و (۲+۲) عبارات عددی هستند؛ آنها نمیتوانند به تابعی که نیاز به یک رشته دارد داده شوند، یا در متغیری که تعریف شده تا تاریخ را نگه دارد، ذخیره شوند.
زبانهای نوع گذاری شده ایستا میتوانند با مانیفست نوع گذاری شوند یا با استفاده از نوع استنباط شوند. در حالت اول، برنامه نویس بیشتر صریحاً نوعها را در جایگاههای منتنی مشخص مینویسد(برای مثال، در تعریف متغیرها). در حالت دوم، کامپایلر نوع عبارات و تعریفها را بر اساس متن استنباط میکند. غالب زبانهای مسیر اصلی(mainstream) ایستا نوع گذاری شده، مانند C#,C++ و Java، با مانیفست نوع گذاری میشوند
نوع گذاری قوی و ضعیف
نوع گذاری ضعیف این امکان را ایجاد میکند که با متغیری به جای متغیری دیگر برخورد شود، برای مثال رفتار با یک رشته به عنوان یک عدد. این ویژگی بعضی اوقات ممکن است مفید باشد، اما ممکن است باعث ایجاد برخی مشکلات برنامه شود که موقع کامپایل و حتی اجرا پنهان بمانند.
نوع گذاری قوی مانع رخ دادن مشکل فوق میشود. تلاش برای انجام عملیات روی نوع نادرست متغیر منجر به رخ دادن خطا میشود. زبانهایی که نوع گذاری قوی دارند غالباً با نام "نوع-امن" و یا امن شناخته میشوند. تمام تعاریف جایگزین برای "ضعیف نوع گذاری شده" به زبانها اشاره میکند، مثل perl, JavaScript, C++، که اجازه تعداد زیادی تبدیل نوع داخلی را میدهند. در جاوااسکریپت، برای مثال، عبارت ۲*x به صورت ضمنی x را به عدد تبدیل میکند، و این تبدیل موفقیت آمیز خواهد بود حتی اگر x خالی، تعریف نشده، یک آرایه، و یا رشتهای از حروف باشد. چنین تبدیلات ضمنی غالباً مفیدند، اما خطاهای برنامه نویسی را پنهان میکنند.
قوی و ایستا در حال حاضر عموماً دو مفهوم متعامد فرض میشوند، اما استفاده در ادبیات تفاوت دارد، برخی عبارت "قوی نوع گذاری شده" را به کار میبرند و منظورشان قوی، ایستایی نوع گذاری شدهاست، و یا، حتی گیچ کننده تر، منظورشان همان ایستایی نوع گذاری شدهاست. بنابراین C هم قوی نوع گذاری شده و هم ضعیف و ایستایی نوع گذاری شده نامیده میشود.
معناشناسی اجرا
وقتی که داده مشخص شد، ماشین باید هدایت شود تا عملیاتها را روی داده انجام دهد. معناشناسی اجرا ی یک زبان تعیین میکند که چگونه و چه زمانی ساختارهای گوناگون یک زبان باید رفتار برنامه را ایجاد کنند.
برای مثال، معناشناسی ممکن است استراتژی را که بویسله آن عبارات ارزیابی میشوند را تعریف کند و یا حالتی را که ساختارهای کنترلی تحت شرایطی دستورها را اجرا میکنند.
کتابخانه هسته
اغلب زبانهای برنامه نویسی یک کتابخانه هسته مرتبط دارند(گاهی اوقات "کتابخانه استاندارد" نامیده میشوند، مخصوصا وقتی که به عنوان قسمتی از یک زبان استاندارد ارائه شده باشد)، که به طور قراردادی توسط تمام پیاده سازیهای زبان در دسترس قرار گرفته باشند. کتابخانه هسته معمولاً تعریف الگوریتمها، داده ساختارها و مکانیزمهای ورودی و خروجی پرکاربرد را در خود دارد. کاربران یک زبان، غالباً با کتابخانه هسته به عنوان قسمتی از آن رفتار میکنند، اگرچه طراحان ممکن است با آن به صورت یک مفهوم مجزا رفتار کرده باشند. بسیاری از خصوصیات زبان هستهای را مشخص میکنند که باید در تمام پیاده سازیها موجود باشند، و در زبانهای استاندارد شده این کتابخانه هسته ممکن است نیاز باشد. بنابراین خط بین زبان و کتابخانه هسته آن از زبانی به زبان دیگر متفاوت است. درواقع، برخی زبانها به گونهای تعریف شدهاند که برخی از ساختارهای دستوری بدون اشاره به کتابخانه هسته قابل استفاده نیستند. برای مثالف در جاوا، یک رشته به عنوان نمونهای از کلاس “java.lang.String” تعریف شده است؛ مشابها، در سمال تاک(smalltalk) یک تابع بی نام(یک "بلاک") نمونهای از کلاس BlockContext کتابخانه میسازد. بطور معکوس، Scheme دارای چندین زیرمجموعه مرتبط برای ایجاد سایر ماکروهای زبان میباشد، و در نتیجه طراحان زبان حتی این زحمت را نیز تحمل نمیکنند که بگویند کدام قسمت زبان به عنوان ساختارهای زبان باید پیاده سازی شوند، و کدام یک به عنوان بخشی ازکتابخانه.
عمل
طراحان زبان و کاربران باید مصنوعاتی ایجاد کنند تا برنامه نویسی را در عمل ممکن سازند و کنترل کنند. مهمترین این مصنوعات خصوصیات و پیاده سازیهای زبان هستند.
خصوصیات
یک زبان برنامه نویسی باید تعریفی فراهم کند که کاربران و پیاده کنندههای زبان میتوانند از آن استفاده کنند تا مشخص کنند که رفتار یک برنامه درست است. با داشتن کد منبع: خصوصیات یک زبان برنامه نویسی چندین قالب میتواند بگیرد، مانند مثالهای زیر:
تعریف صریح دستور، معناشناسی ایستا، ومعناشناسی اجرای زبان. درحالیکه دستور معمولاً با یک معناشناسی قراردادی مشخص میشود، تعاریف معناشناسی ممکن است در زبان طبیعی نوشته شده باشند (مثل زبان C)، یا معناشناسی قراردادی(مثل StandardML ,Scheme)
توضیح رفتار یک مترجم برای زبان(مثل C,fortran). دستور و معناشناسی یک زبان باید از این توضیح استنتاج شوند، که ممکن است به زبان طبیعی یا قراردادی نوشته شود.
پیاده سازی منبع یا مدل. گاهی اوقات در زبانهای مشخص شده(مثل: prolog,ANSI REXX).دستور و معناشناسی صریحاً در رفتار پیاده سازی مدل موجودند.
پیاده سازی
پیاده سازی یک زبان برنامه نویسی امکان اجرای آن برنامه را روی پیکربندی مشخصی از سختافزار و نرمافزار را فراهم میکند. بطور وسیع، دو راه رسیدن به پیاده سازی زبان برنامه نویسی وجود دارد. کامپایل کردن و تفسیر کردن. بطور کلی با هر بک از ابن دو روش میتوان یک زبان را پیاده سازی کرد.
خروجی یک کامپایلر ممکن است با سختافزار و یا برنامهای به نام مفسر اجرا شود. در برخی پیاده سازیها که از مفسر استفاده میشود، مرز مشخصی بین کامپایل و تفسیر وجود ندارد. برای مثال، برخی پیاده سازیهای زبان برنامه نویسی بیسیک کامپایل میکنند و سپس کد را خط به خط اجرا میکنند.
برنامههایی که مستقیماً روی سختافزار اجرا میشوند چندین برابر سریعتر از برنامههایی که با کمک نرمافزار اجرا میشوند، انجام میشوند.
یک تکنیک برای بهبود عملکرد برنامههای تفسیر شده کامپایل در لحظه آن است. در این روش ماشین مجازی، دقیقاً قبل از اجرا، بلوکهای کدهای بایتی که قرار است استفاده شوند را برای اجرای مستقیم روی سختافزار ترجمه میکند.
تاریخچه
پیشرفتهای اولیه
اولین زبان برنامه نویسی به قبل از رایانههای مدرن باز میگردد. قرن ۱۹ دستگاههای نساجی و متون نوازنده پیانو قابل برنامه نویسی داشت که امروزه به عنوان مثالهایی از زبانهای برنامه نویسی با حوزه مشخص شناخته میشوند. با شروع قرن بیستم، پانچ کارتها داده را کد گذاری کردند و پردازش مکانیکی را هدایت کردند. در دهه ۱۹۳۰ و ۱۹۴۰، صورت گرایی حساب لاندای آلونزو چرچ و ماشین تورینگ آلن تورینگ مفاهیم ریاضی بیان الگوریتمها را فراهم کردند؛ حساب لاندا همچنان در طراحی زبان موثر است.
در دهه ۴۰، اولین رایانههای دیجیتال که توسط برق تغذیه میشدند ایجاد شدند. اولین زبان برنامه نویسی سطح بالا طراحی شده برای کامپیوتر پلانکالکول بود، که بین سالهای ۱۹۴۵ و ۱۹۴۳ توسط کنراد زوس برای ز۳ آلمان طراحی شد.
کامپیوترهای اوایل ۱۹۵۰، بطور خاص ÜNIVAC ۱ و IBM ۷۰۱ از برنامههای زبان ماشین استفاده میکردند. برنامه نویسی زبان ماشین نسل اول توسط نسل دومی که زبان اسمبلی نامیده میشوند جایگزین شد. در سالهای بعد دهه ۵۰، زبان برنامه نویسی اسمبلی، که برای استفاده از دستورات ماکرو تکامل یافته بود، توسط سه زبان برنامه نویسی سطح بالا دیگر: FORTRAN,LISP , COBOL مورد استفاده قرار گرفت. نسخههای به روز شده این برنامهها همچنان مورد استفاده قرار میگیرند، و هر کدام قویا توسعه زبانهای بعد را تحت تاثیر قرار دادند. در پایان دهه ۵۰ زبان algol ۶۰ معرفی شد، و بسیاری از زبانهای برنامه نویسی بعد، با ملاحظه بسیار، از نسل algol هستند. قالب و استفاده از زبانهای برنامه نویسی به شدت متاثر از محدودیتهای رابط بودند.
پالایش
دوره دهه ۶۰ تا اواخر دهه ۷۰ گسترش مثالهای عمده زبان پرکاربرد امروز را به همراه داشت. با این حال بسیاری از جنبههای آن بهینه سازی ایدههای اولیه نسل سوم زبان برنامه نویسی بود:
APL برنامه نویسی آرایهای را معرفی کرد و برنامه نویسی کاربردی را تحت تاثیر قرار داد.
PL/i(NPL) دراوایل دهه ۶۰ طراحی شده بود تا ایدههای خوب فورترن و کوبول را بهم پیوند دهد.
در دهه ۶۰، Simula اولین زبانی بود که برنامه نویسی شئ گرا را پشتیبانی میکرد، در اواسط دهه۷۰. Smalltalk به دنبال آن به
عنوان اولین زبان کاملاً شئ گرا معرفی شد.
C بین سالهای ۱۹۶۹ تا ۱۹۷۳ به عنوان زبان برنامه نویسی سیستمی طراحی شد و همچنان محبوب است.
Prolog، طراحی شده در ۱۹۷۲، اولین زبان برنامه نویسی منطقی بود.
در ۱۹۷۸ ML سیستم نوع چند ریخت روی لیسپ ایجاد کرد، و در زبانهای برنامه نویسی کاربردی ایستا نوع گذاری شده پیشگام شد.
هر یک از این زبانها یک خانواده بزرگ از وارثین از خود به جای گذاشت، و مدرنترین زبانها از تبار حداقل یکی از زبانهای فوق به شمار میآیند.
دهههای ۶۰ و ۷۰ مناقشات بسیاری روی برنامه نویسی ساخت یافته به خود دیدند، و اینکه آیا زبانهای برنامه نویسی باید طوری طراحی شوند که آنها را پشتیبانی کنند.
"ادسگر دیکسترا" در نامهای معروف در ۱۹۶۸ که در ارتباطات ACM منتشر شد، استدلال کرد که دستورgoto باید از تمام زبانهای سطح بالا حذف شود.
در دهههای ۶۰ و ۷۰ توسعهٔ تکنیکهایی صورت گرفت که اثر یک برنامه را کاهش میداد و در عین حال بهره وری برنامه نویس و کاربر را بهبود بخشید. دسته کارت برای ۴GL اولیه بسیار کوچکتر از برنامهٔ هم سطح بود که با ۳GL deck نوشته شده بود.
یکپارچگی و رشد
دهه ۸۰ سالهای یکپارچگی نسبی بود. C++ برنامه نویسی شئ گرا و برنامه نویسی سیستمی را ترکیب کرده بود. ایالات متحده ایدا(زبان برنامه نویسی سیستمی که بیشتر برای استفاده توسط پیمان کاران دفاعی بود) را استاندارد سازی کرد. در ژاپن و جاهای دیگر، هزینههای گزافی صرف تحقیق در مورد زبان نسل پنجم میشد که دارای ساختارهای برنامه نویسی منطقی بود. انجمن زبان کاربردی به سمت استانداردسازی ML و Lisp حرکت کرد. به جای ایجاد مثالهای جدید، تمام این تلاشها ایدههایی که در دهههای قبل حلق شده بودند را بهتر کرد.
یک گرایش مهم در طراحی زبان در دهه ۸۰ تمرکز بیشتر روی برنامه نویسی برای سیستمهای بزرگ از طریق مدولها، و یا واحدهای کدهای سازمانی بزرگ مقیاس بود. مدول-۲، ایدا. و ML همگی سیستمهای مدولی برجستهای را در دهه ۸۰ توسعه دادند. با وجود اینکه زبانهای دیگر، مثل PL/i، پشتیبانی بسیار خوبی برای برنامه نویسی مدولی داشتند. سیستمهای مدولی غالباً با ساختارهای برنامه نویسی عام همراه شدهاند.
رشد سریع اینترنت در میانه دهه ۹۰ فرصتهای ایجاد زبانهای جدید را فراهم کرد. Perl، در اصل یک ابزار نوشتن یونیکس بود که اولین بار در سال ۱۹۸۷ منتشر شد، در وبگاههای دینامیک متداول شد. جاوا برای برنامه نویسی جنب سروری مورد استفاده قرار گرفت. این توسعهها اساساً نو نبودند، بلکه بیشتر بهینه سازی شده زبان و مثالهای موجود بودند، و بیشتر بر اساس خانواده زبان برنامه نویسی C بودند. پیشرفت زبان برنامه نویسی همچنان ادامه پیدا میکند، هم در تحقیقات و هم در صنعت. جهتهای فعلی شامل امنیت و وارسی قابلیت اعتماد است، گونههای جدید مدولی(mixin، نمایندهها، جنبهها) و تجمع پایگاه داده.
۴GLها نمونهای از زبانهایی هستند که محدوده استفاده آنها مشخص است، مثل SQL. که به جای اینکه دادههای اسکالر را برگردانند، مجموعههایی را تغییر داده و بر میگردانند که برای اکثر زبانها متعارفند. Perl برای مثال، با "مدرک اینجا" خود میتواند چندین برنامه ۴GL را نگه دارد، مانند چند برنامه جاوا سکریبت، در قسمتی از کد پرل خود و برای پشتیبانی از چندین زبان برنامه نویسی با تناسب متغیر در "مدرک اینجا" استفاده کند.
سنجش استفاده از زبان
مشکل است که مشخص کنیم کدام زبان برنامه نویسی بیشتر مورد استفادهاست، و اینکه کاربرد چه معنی میدهد با توجه به زمینه تغییر میکند. یک زبان ممکن است زمان بیشتری از برنامه نویس بگیرد، زبان دیگر ممکن است خطوط بیشتری داشته باشد، و دیگری ممکن است زمان بیشتری از پردازنده را مصرف کند. برخی زبانها برای کاربردهای خاص بسیار محبوبند. برای مثال: کوبول همچنان در مراکزداده متحد، غالباً روی کامپیوترهای بزرگ توانا است؛ fortran در مهندسی برنامههای کاربردی، C در برنامههای تعبیه شده و سیستمهای عامل؛ و بقیه برنامهها معمولاً برای نوشتن انواع دیگر برنامهها کاربرد دارند. روشهای مختلفی برای سنجش محبوبیت زبانها، هر یک متناسب یا یک ویژگی محوری متفاوت پیشنهاد شدهاست:
شمارش تعداد تبلیغات شغلی که از آن زبان نام میبرند.
تعداد کتابهای آموزشی و شرح دهندهٔ آن زبان که فروش رفتهاست.
تخمین تعداد خطوطی که در آن زبان نوشته شده اند- که ممکن است زبانهایی را که در جستجوها کمتر پیدا میشوند دست کم گرفته شوند.
شمارش ارجاعهای زبان(برای مثال، به اسم زبان) در موتورهای جستجوهای اینترنت.
طبقه بندیها هیچ برنامه غالبی برای دسته بندی زبانهای برنامه نویسی وجود ندارد. یک زبان مشخص معمولاً یک زبان اجدادی ندارد. زبانها معمولاً با ترکیب المانهای چند زبان پیشینه بوجود میآیند که هربار ایدههای جدید درگردشند. ایدههایی که در یک زبان ایجاد میشوند در یک خانواده از زبانهای مرتبط پخش میشوند، و سپس از بین خلاهای بین خانوادهها منتقل شده و در خانوادههای دیگر ظاهر میشوند.
این حقیقت که این دسته بندی ممکن است در راستای محورهای مختلف انجام شوند، این وظیفه را پیچیده تر میکند؛ برای مثال، جاوا هم یک زبان شیءگرا(چون به برنامه نویسی شیءگرا تشویق میکند) و زبان همزمان(چون ساختارهای داخلی برای اجرای چندین جریان موازی دارد) است. پایتون یک زبان اسکریپتی شیءگراست.
در نگاه کلی، زبانهای برنامه نویسی به مثالهای برنامه نویسی و یک دسته بندی بر اساس محدوده استفاده تقسیم میشوند. مثالها شامل برنامه نویسی رویهای، برنامه نویسی شیءگرا، برنامه نویسی کاربردی، وبرنامه نویسی منطقی؛ برخی زبانها ترکیب چند مثالند. یک زبان اسمبلی مثالی از یک مدل مستقیم متضمن معماری ماشین نیست. با توجه به هدف، زبانهای برنامه نویسی ممکن است همه منظوره باشند، زبانهای برنامه نویسی سیستمی، زبانهای اسکریپتی، زبانهای محدوده مشخص، زبانهای همزمان/ گسترده(و یا ترکیب اینها). برخی زبانهای همه منظوره تا حد زیادی برای اهداف آموزشی طراحی شدهاند.
یک زبان برنامه نویسی ممکن است با فاکتورهای غیر مرتبط به مثالهای برنامه نویسی دسته بندی شود. برای مثال، غالب زبانهای برنامه نویسی کلمات کلیدی زبان انگلیسی را استفاده میکنند، در حالیکه تعداد کمی این کار را نمیکنند. سایر زبانها ممکن است براساس داخلی بودن یا نبودن دسته بندی شوند.
ساعت : 7:46 pm | نویسنده : admin
|
طراحی وب امیر |
مطلب قبلی