خروجی ورودی فایل ناهمزمان ج. شرایط: داده های ورودی-خروجی همزمان و ناهمزمان. مثال: استفاده از تایمر انتظار

یک برنامه نویس کاربردی مجبور نیست به مواردی مانند نحوه عملکرد برنامه های سیستم با ثبت دستگاه فکر کند. این سیستم جزئیات کار سطح پایین با دستگاه ها را از برنامه ها پنهان می کند. با این حال، تفاوت بین سازماندهی I/O با نظرسنجی و وقفه ها نیز در سطح عملکردهای سیستم، به شکل توابع برای I/O همزمان و ناهمزمان منعکس می شود.

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

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

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

به عنوان مثال، ورود داده های ناهمزمان را در نظر بگیرید. واضح است که برنامه تا زمانی که مطمئن نشود که ورودی آن کامل شده است نمی تواند به داده ها دسترسی داشته باشد. اما این کاملاً ممکن است که برنامه فعلاً بتواند کارهای دیگری انجام دهد، نه اینکه در انتظار بیکار بماند.

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

· در انتظار تکمیل عملیات. این مانند "نیمه دوم یک عملیات همزمان" است. برنامه ابتدا عملیات را شروع کرد، سپس برخی از اقدامات اضافی را انجام داد و اکنون منتظر می ماند تا عملیات تکمیل شود، مانند ورودی/خروجی همزمان.

· بررسی اتمام عملیات. در این حالت، برنامه منتظر نمی ماند، بلکه فقط وضعیت عملیات ناهمزمان را بررسی می کند. اگر ورودی/خروجی هنوز تکمیل نشده باشد، برنامه این فرصت را دارد که مدتی راه برود.

· واگذاری مراحل تکمیل. در این حالت، هنگام شروع یک عملیات ناهمزمان، برنامه کاربر آدرس رویه یا عملکرد کاربر را که باید پس از اتمام عملیات توسط سیستم فراخوانی شود، به سیستم نشان می دهد. خود برنامه ممکن است دیگر علاقه ای به پیشرفت ورودی/خروجی نداشته باشد؛ سیستم این موضوع را در زمان مناسب با تماس به آن یادآوری می کند. عملکرد مشخص شده. این روش منعطف ترین است، زیرا کاربر می تواند هر اقدامی را در روند تکمیل ارائه دهد.

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

ورودی/خروجی ناهمزمان می‌تواند عملکرد را در برخی موارد بهبود بخشد و موارد اضافی را ارائه دهد عملکرد. بدون چنین ساده ترین شکلورودی ناهمزمان، مانند "ورودی صفحه کلید بدون انتظار"، متعدد بازی های کامپیوتریو شبیه سازها در عین حال، منطق برنامه ای که از عملیات ناهمزمان استفاده می کند، پیچیده تر از عملیات همزمان است.

ارتباط ذکر شده در بالا بین عملیات همزمان/ناهمزمان و روشهای سازماندهی ورودی/خروجی که در پاراگراف قبل مورد بحث قرار گرفت چیست؟ خودت به این سوال جواب بده

I/O ناهمزمان با استفاده از رشته های متعدد

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

با این حال، ویندوز پشتیبانی چند رشته ای را فراهم می کند، بنابراین می توان با انجام عملیات ورودی/خروجی همزمان روی چندین رشته به طور مستقل به همان اثر دست یافت. این قابلیت ها قبلاً با استفاده از سرورهای چند رشته ای و برنامه grepMT نشان داده شده بود (فصل 7). علاوه بر این، thread ها یک روش مفهومی سازگار و احتمالاً بسیار ساده تر را برای انجام عملیات I/O ناهمزمان ارائه می دهند. یک جایگزین برای روش‌های مورد استفاده در برنامه‌های 14.1 و 14.2 این است که به هر رشته توصیف‌گر فایل خاص خود داده شود، به طوری که هر رشته بتواند هر چهارمین رکورد را به طور همزمان پردازش کند.

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

توجه داشته باشید

برنامه atouMT.c که در وب سایت قرار دارد حاوی نظراتی در مورد چندین مشکل احتمالی است که می تواند در هنگام اجازه دادن به چندین رشته برای دسترسی همزمان به یک فایل مشابه در انتظار شما باشد. به طور خاص، تمام دسته‌های فایل جداگانه باید با استفاده از تابع CreateHandle به جای تابع DuplicateHandle ایجاد شوند.

من شخصا ترجیح می دهم از پردازش فایل های چند رشته ای به جای ورودی/خروجی ناهمزمان استفاده کنم. برنامه نویسی Thread ها آسان تر است و در بیشتر موارد عملکرد بهتری ارائه می دهد.

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

از کتاب بیایید یک کامپایلر بسازیم! توسط کرنشاو جک

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

برگرفته از کتاب C# 2005 Programming Language and the .NET 2.0 Platform. توسط ترولسن اندرو

برگرفته از کتاب Informix Database Administrator's Guide. نویسنده کوستوف ویکتور

برگرفته از کتاب Microsoft Visual C++ and MFC. برنامه نویسی برای ویندوز 95 و ویندوز NT نویسنده فرولوف الکساندر ویاچسلاوویچ

2.2.3.2 ورودی/خروجی ناهمزمان برای سرعت بخشیدن به عملیات ورودی/خروجی، سرور از بسته I/O ناهمزمان (AIO) خود یا بسته I/O ناهمزمان هسته (KAIO) در صورت وجود استفاده می کند. درخواست های ورودی/خروجی کاربر به صورت ناهمزمان پردازش می شوند،

برگرفته از کتاب مبانی برنامه نویسی شی گرا توسط مایر برتراند

I/O همانطور که می دانید اپراتورها<< и >> انجام یک شیفت مقدار عددیچپ و راست با تعداد معینی بیت. برنامه های کتاب ما نیز از این عبارات برای وارد کردن اطلاعات از صفحه کلید و نمایش آن بر روی صفحه استفاده می کنند.اگر در سمت چپ باشد.

برگرفته از کتاب برنامه نویسی سیستم در محیط ویندوز توسط هارت جانسون ام

ورودی و خروجی دو کلاس کتابخانه KERNEL امکانات اولیه ورودی و خروجی را فراهم می کنند: FILE و STD_FILES. از جمله عملیات تعریف شده بر روی یک شی f از نوع FILE موارد زیر است: ایجاد f.make ("name") -- f را با فایلی به نام مرتبط می کند. f.open_write -- f را برای نوشتن f.open_read -- باز کردن f برای

برگرفته از کتاب برنامه نویسی در روبی [ایدئولوژی زبان، نظریه و عمل کاربرد] توسط فولتون هال

فصل 14 ورودی/خروجی ناهمزمان و درگاه‌های تکمیل عملیات ورودی/خروجی ذاتاً کندتر از سایر انواع پردازش هستند. دلایل این کندی عوامل زیر است: تأخیر به دلیل زمان صرف شده برای جستجو

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

10.1.7. I/O ساده شما قبلاً با برخی از روش های I/O ماژول Kernel آشنا هستید. ما بدون تعیین تماس گیرنده با آنها تماس گرفتیم. اینها شامل توابع gets و puts، و همچنین print، printf، و p هستند (مورد دوم متد inspect شی را فراخوانی می‌کند تا آن را به روشی که ما درک کنیم چاپ می‌کند).

برگرفته از کتاب زبان برنامه نویسی سی برای کامپیوتر شخصی نویسنده Bochkov S. O.

از کتاب برنامه نویسی لینوکس با مثال نویسنده رابینز آرنولد

فصل 6 ورودی و خروجی در این فصل، به برخی از امکانات داخلی برای نوشتن داده ها و خواندن داده ها از یک فایل می پردازیم. از چنین ابزارهایی نیز می توان برای قالب بندی اشیاء داده ای برنامه ریزی استفاده کرد تا شکل دلخواه نمایش خارجی آنها را به دست آورد.

برگرفته از کتاب مبانی برنامه نویسی جاوا نویسنده سوخوف S.A.

ورودی و خروجی عملکردهای ورودی و خروجی در کتابخانه استاندارد C به شما این امکان را می‌دهد که داده‌ها را از فایل‌ها بخوانید یا آن‌ها را از دستگاه‌های ورودی (مانند صفحه‌کلید) دریافت کنید و داده‌ها را روی فایل‌ها بنویسید یا آن‌ها را خروجی کنید. دستگاه های مختلف(به عنوان مثال، به یک چاپگر) توابع ورودی/خروجی

برگرفته از کتاب QT 4: GUI Programming in C++ توسط بلانشت یاسمین

4.4. ورودی و خروجی تمامی عملیات I/O لینوکس از طریق توصیفگرهای فایل انجام می شود. این بخش توصیفگرهای فایل را معرفی می کند، نحوه به دست آوردن و آزادسازی آنها را توضیح می دهد و نحوه اجرا با آنها را توضیح می دهد.

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

از کتاب نویسنده

فصل 12: I/O تقریباً هر برنامه ای نیاز به خواندن یا نوشتن فایل ها یا انجام سایر عملیات I/O دارد. Qt پشتیبانی عالی I/O را با QIODevice ارائه می‌کند، انتزاعی قدرتمند از «دستگاه‌هایی» که می‌توانند بخوانند و بنویسند.

از کتاب نویسنده

ورودی و خروجی من همچنین بسیار مهم می دانم که نتایج من با «ورودی» مناسب تغذیه شود. نوشتن کد برنامه- کار خلاقانه. زمانی که با چالش خلاقانه ای مواجه می شوم، معمولاً خلاقیت من در بهترین حالت است.

وظیفه ای که درخواست عملیات I/O را صادر کرده است توسط سرپرست در حالت انتظار برای تکمیل عملیات سفارش داده شده قرار می گیرد. وقتی سرپرست از قسمت تکمیل پیامی دریافت کرد که عملیات به پایان رسیده است، کار را در حالت آماده قرار می دهد و به کار خود ادامه می دهد. این وضعیت مربوط به I/O همزمان است. ورودی/خروجی همزمان در اکثر سیستم عامل ها استاندارد است. برای افزایش سرعت اجرای برنامه پیشنهاد شد در مواقع لزوم از I/O ناهمزمان استفاده شود.

ساده‌ترین نسخه خروجی ناهمزمان، خروجی بافر به یک دستگاه خارجی است که در آن داده‌های برنامه مستقیماً به دستگاه I/O منتقل نمی‌شود، بلکه به یک بافر سیستم خاص منتقل می‌شود. در این حالت، به طور منطقی، عملیات خروجی برای برنامه بلافاصله تکمیل شده در نظر گرفته می شود و ممکن است کار منتظر تکمیل فرآیند واقعی انتقال داده ها به دستگاه نباشد. روند خروجی واقعیداده های بافر سیستم توسط سرپرست I/O مدیریت می شود. به طور طبیعی، یک فرآیند سیستم خاص در جهت ناظر I/O مسئول تخصیص یک بافر از ناحیه حافظه سیستم است. بنابراین، برای مورد در نظر گرفته شده، خروجی ناهمزمان خواهد بود اگر اولاً درخواست I/O نیاز به بافر داده را نشان دهد و ثانیاً اگر دستگاه I/O اجازه چنین عملیات ناهمزمانی را بدهد و این در UCB ذکر شده باشد. همچنین می توانید ورود داده های ناهمزمان را سازماندهی کنید. با این حال، برای انجام این کار، نه تنها لازم است یک منطقه حافظه برای ذخیره موقت داده های خوانده شده از دستگاه اختصاص داده شود و بافر اختصاص داده شده را با وظیفه ای که دستور عملیات را صادر کرده است مرتبط کنیم، بلکه باید درخواست I/O را نیز تقسیم کنیم. عملیات به دو بخش (به دو درخواست). اولین درخواست عملیات خواندن داده ها را مشخص می کند، مشابه آنچه که با I/O همزمان انجام می شود. با این حال، نوع (کد) درخواست متفاوت است و درخواست حداقل یک پارامتر اضافی را مشخص می کند - نام (کد) شی سیستم که وظیفه در پاسخ به درخواست دریافت می کند و بافر اختصاص داده شده را مشخص می کند. پس از دریافت نام بافر (ما به طور معمول این شی سیستم را به این ترتیب می نامیم، اگرچه سیستم عامل های مختلف از عبارات دیگری نیز برای تعیین آن استفاده می کنند، به عنوان مثال، کلاس)، کار به کار خود ادامه می دهد. در اینجا بسیار مهم است که تاکید کنیم که در نتیجه یک درخواست ورودی داده ناهمزمان، وظیفه توسط سرپرست I/O در حالتی قرار نمی گیرد که منتظر تکمیل عملیات I/O باشد، بلکه در حالت اجرا یا در حال اجرا باقی می ماند. حالت آماده اجرا پس از مدتی، پس از اجرای کد لازم که توسط برنامه نویس تعریف شده بود، وظیفه درخواست دوم برای تکمیل عملیات I/O را صادر می کند. در این درخواست دوم به همان دستگاه که البته کد (یا نام درخواست) متفاوتی دارد، وظیفه نام شی سیستم (بافر برای ورودی داده ناهمزمان) را مشخص می کند و در صورت موفقیت آمیز بودن عملیات خواندن داده، بلافاصله آن را از بافر سیستم دریافت می کند. اگر داده ها هنوز به طور کامل از دستگاه خارجی به بافر سیستم منتقل نشده باشند، سرپرست I/O کار را به حالت انتظار برای تکمیل عملیات I/O تغییر می دهد و سپس همه چیز شبیه ورودی داده های همزمان معمولی می شود.

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

سخت افزار I/O را می توان به عنوان یک مجموعه در نظر گرفت پردازنده های سخت افزاری، که قابلیت کار موازی نسبت به یکدیگر و همچنین نسبت به پردازنده مرکزی (پردازنده ها) را دارند. در چنین "پردازنده" به اصطلاح فرآیندهای خارجیبه عنوان مثال، برای یک دستگاه خارجی (دستگاه ورودی/خروجی)، فرآیند خارجی ممکن است مجموعه‌ای از عملیات باشد که سر چاپ را ترجمه می‌کند، کاغذ را یک موقعیت پیش می‌برد، رنگ جوهر را تغییر می‌دهد یا برخی از کاراکترها را چاپ می‌کند. فرآیندهای خارجی، با استفاده از سخت افزار ورودی/خروجی، هم با یکدیگر و هم با فرآیندهای نرم افزاری معمولی در حال اجرا بر روی پردازنده مرکزی تعامل دارند. یک واقعیت مهم این است که سرعت اجرای فرآیندهای خارجی به طور قابل توجهی (گاهی اوقات به ترتیب بزرگی یا بیشتر) با سرعت اجرای فرآیندهای معمولی متفاوت است (" درونی؛ داخلی") فرآیندها. برای عملکرد عادی آنها، فرآیندهای خارجی و داخلی باید همگام شوند. برای هموار کردن اثر عدم تطابق شدید سرعت بین فرآیندهای داخلی و خارجی، از بافری که در بالا ذکر شد استفاده می شود. بنابراین، ما می توانیم در مورد سیستمی از فرآیندهای متقابل موازی صحبت کنیم (به فصل 6 مراجعه کنید).

بافرها یک منبع حیاتی در رابطه با فرآیندهای داخلی (نرم افزار) و خارجی هستند که در طول توسعه موازی خود، به صورت اطلاعاتی تعامل دارند. از طریق بافر(ها)، داده ها یا از یک فرآیند به یک خارجی آدرس پذیر ارسال می شوند (عملیات خروجی داده به یک دستگاه خارجی)، یا از یک فرآیند خارجی به برخی از فرآیندهای نرم افزاری (عملیات خواندن داده ها) منتقل می شوند. معرفی بافر به عنوان وسیله ای برای تعامل اطلاعات، مشکل مدیریت این بافرهای سیستم را مطرح می کند که با استفاده از بخش نظارتی سیستم عامل حل می شود. در این حالت، سرپرست نه تنها وظیفه دارد که بافرها را در ناحیه حافظه سیستم تخصیص داده و آزاد کند، بلکه فرآیندها را مطابق با وضعیت عملیات برای پر کردن یا آزاد کردن بافرها و همچنین در صورت وجود نداشتن بافرهای رایگان، همگام سازی می کند. بافرهای موجود است و درخواست ورودی/خروجی نیاز به بافر دارد. به طور معمول، ناظر I/O از ابزارهای همگام سازی استانداردی استفاده می کند که در یک سیستم عامل معین برای حل وظایف فهرست شده استفاده می شود. بنابراین، اگر سیستم عامل ابزارهایی را برای حل مشکلات اجرای موازی برنامه ها و وظایف متقابل ایجاد کرده باشد، به عنوان یک قاعده، ورودی / خروجی ناهمزمان را نیز پیاده سازی می کند.

مدل سنکرونورودی خروجی. سیستم read(2)، write(2) و آنالوگ های آنها کنترل را تنها پس از خواندن یا نوشتن داده ها برمی گرداند. این اغلب منجر به مسدود شدن نخ می شود.

توجه داشته باشید

در واقعیت، به این سادگی نیست. read(2) باید منتظر بماند تا داده ها بطور فیزیکی از دستگاه خوانده شوند، اما write(2) به طور پیش فرض در حالت نوشتن-تنبلی عمل می کند: پس از انتقال داده ها به بافر سیستم، اما معمولاً قبل از داده ها به صورت فیزیکی به دستگاه منتقل می شود. این معمولا به طور قابل توجهی عملکرد مشاهده شده برنامه را بهبود می بخشد و اجازه می دهد تا حافظه از داده ها بلافاصله پس از بازگشت نوشتن (2) برای اهداف دیگر استفاده شود. اما تاخیر در ضبط معایب قابل توجهی نیز دارد. نکته اصلی این است که شما در مورد نتیجه یک عملیات فیزیکی نه بلافاصله با کد بازگشتی write(2)، بلکه فقط مدتی پس از بازگشت، معمولاً با کد بازگشتی تماس بعدی Write(2) آشنا خواهید شد. برای برخی از برنامه ها - مانیتور تراکنش ها، بسیاری از برنامه های بلادرنگ و غیره - این غیرقابل قبول است و مجبور می شوند ضبط تنبل را خاموش کنند. این کار توسط پرچم O_SYNC انجام می شود، که می تواند هنگام باز کردن فایل و تغییر آن تنظیم شود باز کردن فایلبا فراخوانی fcntl(2) .

با فراخوانی fsync(2) می توان از همگام سازی نوشته های فردی اطمینان حاصل کرد. برای بسیاری از برنامه های کاربردی که شامل چندین دستگاه و/یا اتصالات شبکه هستند مدل سنکروننامناسب. کار در حالت نظرسنجی نیز همیشه قابل قبول نیست. واقعیت این است که select(3C) و poll(2) یک توصیفگر فایل را فقط پس از ظاهر شدن فیزیکی داده ها در بافر آن آماده برای خواندن در نظر می گیرند. اما برخی از دستگاه ها تنها پس از درخواست صریح از آنها شروع به ارسال داده می کنند.

همچنین، برای برخی از برنامه‌ها، به‌ویژه برنامه‌های بلادرنگ، دانستن لحظه‌ای که داده‌ها شروع به رسیدن می‌کنند، مهم است. برای چنین برنامه هایی نیز ممکن است انتخاب (3C) و نظرسنجی (2) غیر قابل قبول باشد فایل های معمولیهمیشه آماده خواندن و نوشتن واقعا، سیستم فایلخواندن از روی دیسک و اگرچه بسیار سریعتر از بقیه کار می کند اتصالات شبکه، اما همچنان دسترسی به آن با تاخیرهایی همراه است. برای برنامه‌های بلادرنگ سخت، این تاخیرها ممکن است غیرقابل قبول باشند - اما بدون درخواست خواندن صریح سیستم فایلداده نمی دهد!

برای کاربردهای بلادرنگ سخت، جنبه دیگری از مشکل I/O ممکن است قابل توجه باشد. واقعیت این است که برنامه های سخت RT اولویت بیشتری نسبت به هسته دارند، بنابراین فراخوانی های سیستمی را اجرا می کنند - حتی موارد غیر مسدود کننده! - میتواند منجر به .. شود وارونگی اولویت.

راه حل این مشکلات مدت هاست که شناخته شده است و ورودی/خروجی ناهمزمان نامیده می شود. در این حالت، سیستم ورودی/خروجی بلافاصله پس از درخواست به درایور دستگاه، کنترل بازگشت را فراخوانی می‌کند، معمولاً حتی قبل از کپی کردن داده‌ها در بافر سیستم. تشکیل یک درخواست شامل قرار دادن یک ورودی (IRP، بسته درخواست ورودی/خروجی، بسته درخواست ورودی/خروجی) در یک صف است. برای انجام این کار، فقط باید به طور خلاصه mutex را که از "دم" صف محافظت می کند، ضبط کنید، بنابراین می توان به راحتی بر مشکل وارونگی اولویت غلبه کرد. برای اینکه بفهمیم آیا تماس به پایان رسیده است، و اگر به پایان رسیده است، چگونه دقیقاً، و آیا می توان از حافظه ای که داده ها در آن ذخیره شده است استفاده کرد، یک API ویژه ارائه شده است (شکل 8.1 را ببینید).


برنج. 8.1.

مدل ناهمزمانمدل اصلی I/O در سیستم عامل هایی مانند DEC RT-11، DEC RSX-11، VAX/VMS، OpenVMS بود. تقریباً همه به یک شکل از این مدل پشتیبانی می کنند. سیستم عامل زمان واقعی. سیستم های یونیکس از اواخر دهه 1980 از چندین API ناسازگار برای I/O ناهمزمان استفاده کرده اند. در سال 1993، ANSI/IEEE POSIX 1003.1b را تصویب کرد که یک API استاندارد شده را توصیف می کند که در ادامه این بخش به بررسی آن خواهیم پرداخت.

در Solaris 10، عملکرد ورودی/خروجی ناهمزمان در کتابخانه libaio.so گنجانده شده است. برای ساخت برنامه هایی که از این توابع استفاده می کنند، باید از سوئیچ -laio استفاده کنید. برای ایجاد درخواست برای I/O ناهمزمان، از توابع aio_read(3AIO)، aio_write(3AIO) و lio_listio(3AIO) استفاده می شود.

توابع aio_read(3AIO) و aio_write(3AIO) یک پارامتر واحد دارند، structaiocb *aiocbp. ساختار aiocb در فایل تعریف شده است< aio.h>و شامل فیلدهای زیر است:

  • int aio_fildes - توصیفگر فایل
  • off_t aio_offset - آفست در فایلی که نوشتن یا خواندن از آن شروع می شود
  • volatile void* aio_buf - بافری که داده‌ها باید در آن خوانده شوند یا داده‌هایی که باید در آن نوشته شوند نهفته است.
  • size_t aio_nbytes - اندازه بافر. مانند read(2) سنتی، aio_read(3AIO) می‌تواند داده‌های کمتری را نسبت به آنچه خواسته شده بود بخواند، اما هرگز بیشتر نخواهد خواند.
  • int aio_reqprio - درخواست اولویت
  • struct sigevent aio_sigevent - روشی برای اطلاع از تکمیل درخواست (در ادامه این بخش بحث خواهد شد)
  • int aio_lio_opcode - برای aio_read (3AIO) و aio_write (3AIO) استفاده نمی شود، فقط توسط تابع lio_listio استفاده می شود.

تابع lio_listio (3AIO) به شما امکان می دهد چندین درخواست I/O را با یک تماس سیستمی ایجاد کنید. این تابع چهار پارامتر دارد:

  • حالت int - می تواند مقادیر LIO_WAIT (تابع منتظر می ماند تا تمام درخواست ها تکمیل شود) و LIO_NOWAIT (تابع کنترل را بلافاصله پس از ایجاد همه درخواست ها برمی گرداند) را دریافت کند.
  • struct aiocb *list - فهرستی از اشاره گرها به ساختارهای aiocb با توضیحات درخواست ها.

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

  • int nent - تعداد ورودی ها در آرایه لیست.
  • struct sigevent *sig - راهی برای اطلاع از تکمیل تمام درخواست ها. اگر mode==LIO_WAIT این پارامتر نادیده گرفته شود.

کتابخانه AIO POSIX دو راه برای اطلاع رسانی به برنامه ای که درخواست تکمیل شده است ارائه می دهد، همزمان و ناهمزمان. بیایید ابتدا روش همزمان را بررسی کنیم. تابع aio_return(3AIO) وضعیت درخواست را برمی گرداند. اگر درخواست قبلاً با موفقیت تکمیل و تکمیل شده باشد، اندازه داده های خوانده شده یا نوشته شده را در بایت برمی گرداند. مانند read (2) سنتی، aio_return (3AIO) در صورت پایان فایل 0 بایت برمی گرداند. اگر درخواست با شکست مواجه شد یا هنوز تکمیل نشده است، -1 برگردانده می شود و errno تنظیم می شود. اگر درخواست هنوز تکمیل نشده باشد، کد خطا EINPROGRESS است.

تابع aio_return(3AIO) مخرب است. اگر در یک درخواست تکمیل شده فراخوانی شود، شی سیستمی را که اطلاعات مربوط به وضعیت درخواست را ذخیره می کند، از بین می برد. فراخوانی aio_return(3AIO) چندین بار در یک درخواست ممکن نیست.

تابع aio_error(3AIO) کد خطای مرتبط با درخواست را برمی گرداند. اگر درخواست با موفقیت تکمیل شود، 0 برگردانده می شود، اگر خطایی رخ دهد - یک کد خطا، برای درخواست های ناقص - EINPROGRESS.

تابع aio_suspend(3AIO) یک رشته را تا زمانی که یکی از درخواست‌های ورودی/خروجی ناهمزمان مشخص شده آن تکمیل شود یا برای یک دوره زمانی مشخص، مسدود می‌کند. این تابع سه پارامتر دارد:

  • const struct aiocb *const list- آرایه ای از اشاره گرها به توصیفگرهای پرس و جو.
  • int nent - تعداد عناصر موجود در آرایه لیست.
  • const struct timespec *timeout- تایم اوت دقیق به نانوثانیه (در واقع دقیق به وضوح تایمر سیستم).

اگر حداقل یکی از عملیات لیست شده در لیست تکمیل شده باشد، تابع 0 را برمی گرداند. اگر تابع ناموفق باشد، -1 را برمی گرداند و errno را تنظیم می کند. اگر زمان عملکرد تمام شد، -1 را نیز برمی‌گرداند و errno==EINPROGRESS را برمی‌گرداند.

نمونه ای از استفاده از I/O ناهمزمان با بررسی وضعیت درخواست همزمان در مثال 8.3 آورده شده است.

Const char req="GET / HTTP/1.0\r\n\r\n"; int main() ( int s؛ استاتیک struct aiocb readrq؛ static const struct aiocb *readrqv=(&readrq, NULL); /* سوکت باز […] */ memset(&readrq, 0, sizeof readrq); readrq.aio_fildes=s ؛ readrq.aio_buf=buf; readrq.aio_nbytes=sizeof buf; if (aio_read(&readrq)) ( /* ... */) write(s, req, (sizeof req)-1)؛ while(1) (aio_suspend (readrqv , 1, NULL); size=aio_return(&readrq); if (size>0) (write(1, buf, size); aio_read(&readrq); ) other if (size==0) ( break; ) other if ( errno!=EINPROGRESS) ( خطا ("خواندن از سوکت")؛ ) ) 8.3. ورودی/خروجی ناهمزمان با بررسی همزمان وضعیت درخواست. کد کوتاه شده است، باز کردن سوکت و رسیدگی به خطا از آن مستثنی شده است.

اعلان ناهمزمان یک برنامه کاربردی در مورد تکمیل عملیات شامل تولید سیگنالزمانی که عملیات به پایان رسید. برای این کار باید تنظیمات مناسب را در قسمت aio_sigevent توصیفگر درخواست انجام دهید. فیلد aio_sigevent از نوع struct sigevent است. این ساختار در تعریف شده است و شامل فیلدهای زیر است:

  • int sigev_notify - حالت اطلاع رسانی. مقادیر معتبر عبارتند از SIGEV_NONE (تأیید نامه ارسال نکنید)، SIGEV_SIGNAL (در زمان تکمیل درخواست، سیگنال ایجاد می کند) و SIGEV_THREAD (عملکرد مشخص شده را در یک رشته جداگانه در صورت تکمیل درخواست اجرا کنید). سولاریس 10 از نوع هشدار SIGEV_PORT نیز پشتیبانی می کند که در پیوست این فصل مورد بحث قرار گرفته است.
  • int sigev_signo - تعداد سیگنالی که هنگام استفاده از SIGEV_SIGNAL تولید می شود.
  • union sigval sigev_value - پارامتری که به کنترل کننده سیگنال یا تابع پردازش ارسال می شود. وقتی برای ورودی/خروجی ناهمزمان استفاده می‌شود، معمولاً نشانگر درخواست است.

    هنگام استفاده از SIGEV_PORT، این باید یک ساختار اشاره گر port_event_t باشد که حاوی شماره پورت و احتمالاً داده های اضافی باشد.

  • void (*sigev_notify_function)(union sigval)تابعی است که هنگام استفاده از SIGEV_THREAD فراخوانی می شود.
  • pthread_attr_t *sigev_notify_attributes- ویژگی های رشته ای که در آن راه اندازی می شود
  • sigev_notify_function هنگام استفاده از SIGEV_THREAD.

همه پیاده سازی های libaio از اعلان SIGEV_THREAD پشتیبانی نمی کنند. برخی از سیستم های یونیکس به جای آن از هشدار غیر استاندارد SIGEV_CALLBACK استفاده می کنند. بعداً در این سخنرانی ما فقط اعلان سیگنال را مورد بحث قرار خواهیم داد.

برخی از برنامه ها از SIGIO یا SIGPOLL به عنوان شماره سیگنال استفاده می کنند (در Unix SVR4 این سیگنال ها یکسان هستند). SIGUSR1 یا SIGUSR2 نیز اغلب استفاده می شود. این راحت است زیرا تضمین می کند که سیگنال مشابهی به دلیل دیگری ایجاد نمی شود.

برنامه های بلادرنگ همچنین از شماره های سیگنالی از SIGRTMIN تا SIGRTMAX استفاده می کنند. برخی از پیاده سازی ها یک شماره سیگنال خاص SIGAIO یا SIGASYNCIO را برای این منظور اختصاص می دهند، اما چنین سیگنالی در Solaris 10 وجود ندارد.

البته قبل از اجرای درخواست های ناهمزمان که توسط یک سیگنال اطلاع رسانی می شود، باید یک هندلر برای این سیگنال نصب کنید. برای اطلاع رسانی، باید از سیگنال های پردازش شده در حالت SA_SIGINFO استفاده کنید. نصب چنین کنترل کننده ای با استفاده از فراخوانی سیستم سیگنال (2) و sigset (2) امکان پذیر نیست؛ باید از sigaction (2) استفاده کنید. نصب هندلرها با استفاده از sigaction

کنترل I/O

بلوک گرادستگاه ها و بایت گرا

ایده اصلی

کلیداصل این است استقلال دستگاه

· مدیریت وقفه،

· درایورهای دستگاه,

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

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

برخی از وقفه ها (پنج اول به ترتیب عددی) برای استفاده رزرو شده اند پردازنده مرکزیدر صورت وقوع هر رویداد خاص مانند تلاش برای تقسیم بر صفر، سرریز و غیره (اینها وقفه های داخلی واقعی J هستند).

وقفه های سخت افزاری همیشه با توجه به برنامه های در حال اجرا به صورت ناهمزمان رخ می دهند. علاوه بر این، چندین وقفه می تواند به طور همزمان رخ دهد!

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

سیستم اولویت بر روی دو تراشه اینتل 8259 (یا مشابه) پیاده سازی شده است. هر تراشه یک کنترل کننده وقفه است و تا هشت اولویت را ارائه می دهد. تراشه ها را می توان ترکیب کرد (آبشاری) برای افزایش تعداد سطوح اولویت در سیستم.

سطوح اولویت به اختصار IRQ0 - IRQ15 هستند.


24. کنترل I/O. ورودی/خروجی سنکرون و ناهمزمان.

یکی از وظایف اصلی سیستم عامل مدیریت تمام دستگاه های ورودی/خروجی کامپیوتر است. سیستم عامل باید دستورات را به دستگاه‌ها ارسال کند، وقفه‌ها را متوقف کند و خطاها را مدیریت کند. همچنین باید یک رابط بین دستگاه ها و بقیه سیستم فراهم کند. برای اهداف توسعه، رابط باید برای همه انواع دستگاه یکسان باشد (استقلال دستگاه). اطلاعات بیشتر در مورد کنترل IV، سوال 23.

اصول حفاظت

از آنجایی که سیستم عامل یونیکس از همان ابتدا به عنوان یک سیستم عامل چند کاربره تصور شد، مشکل مجوز دسترسی کاربران مختلف به فایل‌های موجود در سیستم فایل همیشه مطرح بوده است. منظور ما از مجوز دسترسی، اقدامات سیستمی است که دسترسی را مجاز یا رد می کند کاربر داده شدهبه این فایلبسته به حقوق دسترسی کاربر و محدودیت های دسترسی تعیین شده برای فایل. طرح مجوز دسترسی مورد استفاده در سیستم عامل یونیکس بسیار ساده و راحت و در عین حال آنقدر قدرتمند است که به استاندارد واقعی سیستم عامل های مدرن (که تظاهر به سیستم هایی با امنیت چند سطحی ندارند) تبدیل شده است.

حفاظت از فایل

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

محافظت از فایل ها از دسترسی غیرمجاز در یونیکس بر اساس سه واقعیت است. اولاً، هر فرآیندی که یک فایل (یا دایرکتوری) ایجاد می کند با یک شناسه کاربر منحصر به فرد در سیستم مرتبط است (UID - شناسه کاربر) که می تواند بیشتر به عنوان شناسه مالک فایل جدید ایجاد شده تعبیر شود. دوم، هر فرآیندی که تلاش می‌کند تا حدی به یک فایل دسترسی پیدا کند، یک جفت شناسه مرتبط با آن دارد - شناسه‌های کاربر فعلی و گروه. ثالثاً، هر فایل به طور منحصر به فرد با توصیفگر خود - i-node مرتبط است.

واقعیت آخر ارزش دارد که با جزئیات بیشتری در مورد آن صحبت کنیم. درک این نکته مهم است که نام فایل ها و فایل ها یکسان نیستند. به طور خاص، هنگامی که چندین لینک سخت به یک فایل وجود دارد، نام فایل های متعدد در واقع یک فایل را نشان می دهد و با همان i-node مرتبط است. هر i-node که در یک سیستم فایل استفاده می شود، همیشه به طور منحصر به فرد به یک و تنها یک فایل مربوط می شود. I-node حاوی اطلاعات مختلف زیادی است (بیشتر آنها از طریق تماس های سیستم stat و fstat در دسترس کاربران قرار می گیرند) و در میان این اطلاعات بخشی وجود دارد که به سیستم فایل اجازه می دهد تا حق یک فرآیند معین را برای دسترسی به یک مورد ارزیابی کند. فایل داده شده در حالت مورد نیاز

اصول کلیحفاظت ها برای همه نسخه های موجود سیستم یکسان است: اطلاعات i-node شامل UID و GID مالک فعلی فایل است (بلافاصله پس از ایجاد فایل، شناسه های مالک فعلی آن روی شناسه معتبر مربوطه تنظیم می شود. مربوط به فرآیند سازنده است، اما بعداً می توان با فراخوانی سیستم chown و chgrp تغییر داد). علاوه بر این، i-node فایل مقیاسی را ذخیره می‌کند که نشان می‌دهد کاربر - صاحب آن - چه کاری می‌تواند با فایل انجام دهد، کاربران متعلق به همان گروه کاربری که مالک می‌توانند با فایل انجام دهند، و کارهایی که دیگران می‌توانند انجام دهند. با فایل کاربران. جزئیات پیاده سازی کوچک در گزینه های مختلفسیستم ها متفاوت است

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

سیستم کنترل دسترسی در ویندوز NT با درجه بالایی از انعطاف پذیری مشخص می شود که به دلیل تنوع گسترده موضوعات و اشیاء دسترسی و همچنین جزئیات عملیات دسترسی به دست می آید.

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

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

اشیاء در ویندوز NT برای هر منبعی که به اشتراک گذاشته می شوند یا به اشتراک گذاشته می شوند ایجاد می شوند - فایل ها، دایرکتوری ها، دستگاه ها، بخش های حافظه، فرآیندها. ویژگی های اشیاء در ویندوز NT به دو بخش تقسیم می شود - یک بخش کلی که ترکیب آن به نوع شی بستگی ندارد و یک قسمت جداگانه که با نوع شی تعیین می شود.
تمام اشیاء در ساختارهای درختی ذخیره می شوند ساختارهای سلسله مراتبیکه عناصر آن اشیاء شاخه ای (دایرکتوری ها) و اشیاء برگ (فایل) هستند. برای اشیاء سیستم فایل، این طرح رابطه بازتاب مستقیمی از سلسله مراتب دایرکتوری ها و فایل ها است. برای اشیاء انواع دیگر، نمودار رابطه سلسله مراتبی محتوای خاص خود را دارد، به عنوان مثال، برای فرآیندها روابط والدین و فرزند را منعکس می کند، و برای دستگاه ها عضویت در نوع خاصی از دستگاه و اتصال دستگاه با دستگاه های دیگر را منعکس می کند. به عنوان مثال، یک کنترلر SCSI با دیسک.

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

برای سیستم امنیت ویندوزمشخصه NT وجود تعداد زیادی از موضوعات دسترسی از پیش تعریف شده (ساخته شده) - هم کاربران فردی و هم گروهی است. بنابراین، سیستم همیشه دارای کاربرانی مانند Adininistrator، System و Guest، و همچنین گروه های Users، Adiniiiistrators، Account Operators، Server Operators، Everyone و دیگران است. نکته این کاربران و گروه‌های داخلی این است که دارای حقوق خاصی هستند که ایجاد یک سیستم کنترل دسترسی مؤثر را برای مدیر آسان‌تر می‌کند. هنگام افزودن یک کاربر جدید، مدیر فقط می تواند تصمیم بگیرد که این کاربر را به کدام گروه یا گروه اختصاص دهد. البته، یک مدیر می‌تواند گروه‌های جدیدی ایجاد کند و همچنین حقوقی را به گروه‌های داخلی اضافه کند تا سیاست امنیتی خود را پیاده کند، اما در بسیاری از موارد، گروه‌های داخلی کاملاً کافی هستند.

ویندوز NT از سه کلاس عملیات دسترسی پشتیبانی می کند که در نوع سوژه ها و اشیاء درگیر در این عملیات ها متفاوت است.

□ مجوزها مجموعه ای از عملیات است که می تواند برای موضوعات مختلف در رابطه با اشیاء از هر نوع تعریف شود: فایل ها، دایرکتوری ها، چاپگرها، بخش های حافظه و غیره. مجوزها در هدف خود مطابق با حقوق دسترسی به فایل ها و دایرکتوری ها در QC UNIX هستند. .

□ حقوق (حقوق کاربر) - برای افراد از نوع گروه برای انجام برخی عملیات سیستم تعریف شده است: تنظیم زمان سیستم، بایگانی فایل ها، خاموش کردن رایانه و غیره. این عملیات شامل یک شی دسترسی ویژه است - سیستم عامل به عنوان یک کل. .

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

□ توانایی های کاربر برای تک تک کاربران تعیین می شود تا اقدامات مربوط به شکل گیری محیط عملیاتی خود را انجام دهند، به عنوان مثال، تغییر ترکیب منوی برنامه اصلی، امکان استفاده از آیتم منوی Run و غیره. با کاهش مجموعه قابلیت ها ( که به صورت پیش‌فرض در دسترس کاربر هستند، مدیر می‌تواند کاربر را مجبور به کار با محیط عملیاتی کند که مدیر آن را مناسب‌تر می‌داند و کاربر را در برابر خطاهای احتمالی محافظت می‌کند.

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

زمانی که کاربر وارد سیستم می شود، یک توکن به اصطلاح دسترسی برای او ایجاد می شود که شامل شناسه کاربری و شناسه تمام گروه هایی است که کاربر به آنها تعلق دارد. توکن همچنین شامل موارد زیر است: یک لیست کنترل دسترسی پیش فرض (ACL)، که از مجوزها تشکیل شده و برای اشیاء ایجاد شده توسط فرآیند اعمال می شود. لیستی از حقوق کاربر برای انجام اقدامات سیستم.

همه اشیا، از جمله فایل‌ها، رشته‌ها، رویدادها، حتی نشانه‌های دسترسی، هنگام ایجاد یک توصیفگر امنیتی ارائه می‌شوند. توصیفگر امنیتی حاوی یک لیست کنترل دسترسی - ACL است.

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

ACL(انگلیسی) لیست کنترل دسترسی- لیست کنترل دسترسی، که در انگلیسی "ekl" تلفظ می شود) - تعیین می کند که چه کسی یا چه چیزی می تواند به یک شی خاص دسترسی داشته باشد و این موضوع از انجام چه عملیاتی بر روی شی مجاز یا ممنوع است.

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

صاحب یک شی، معمولاً کاربری که آن را ایجاد کرده است، کنترل انتخابی بر دسترسی به شی دارد و می تواند ACL شی را تغییر دهد تا به دیگران اجازه دهد یا از دسترسی به شی جلوگیری کند. ساخته شده در مدیر ویندوز NT، بر خلاف ابرکاربر یونیکس، ممکن است برخی از مجوزها برای دسترسی به یک شی را نداشته باشد. برای پیاده سازی این ویژگی، شناسه های گروه مدیر و سرپرست را می توان مانند شناسه های کاربری معمولی در ACL قرار داد. با این حال، مدیر هنوز توانایی انجام هرگونه عملیات را با هر شیئی دارد، زیرا همیشه می تواند مالک شیء شود و سپس به عنوان مالک، مجموعه کامل مجوزها را دریافت کند. با این حال، مدیر نمی تواند مالکیت را به صاحب قبلی شیء برگرداند، بنابراین کاربر همیشه می تواند متوجه شود که سرپرست با فایل یا چاپگر خود کار کرده است.

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

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

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

در مواردی که یک فرآیند به صراحت یک ACL را برای شیء در حال ایجاد مشخص نکرده باشد، و شی دایرکتوری دارای ورودی های ACL قابل وراثت نباشد، ACL پیش فرض از توکن دسترسی فرآیند استفاده می شود.


29. زبان برنامه نویسی جاوا. ماشین مجازی جاوا. تکنولوژی جاوا

جاوایک زبان برنامه نویسی شی گرا است که توسط Sun Microsystems توسعه یافته است. برنامه های جاوا معمولاً به بایت کد سفارشی کامپایل می شوند تا بتوانند بدون توجه به معماری رایانه روی هر ماشین مجازی جاوا (JVM) اجرا شوند. برنامه های جاوا به بایت کدی که اجرا می شود ترجمه می شوند ماشین مجازیجاوا ( JVM) - برنامه ای که کد بایت را پردازش می کند و دستورالعمل ها را به عنوان مفسر به تجهیزات ارسال می کند، اما با این تفاوت که کد بایت برخلاف متن، بسیار سریعتر پردازش می شود.

مزیت این روش اجرای برنامه ها استقلال کامل بایت کد از سیستم عاملو سخت افزار، به شما امکان می دهد برنامه های جاوا را بر روی هر دستگاهی که ماشین مجازی مربوطه برای آن وجود دارد اجرا کنید. یکی دیگر از ویژگی های مهم فناوری جاوا، سیستم امنیتی منعطف آن به دلیل این واقعیت است که اجرای برنامه به طور کامل توسط ماشین مجازی کنترل می شود. هر عملیاتی که بیش از مجوزهای تعیین شده برنامه باشد (به عنوان مثال، تلاش برای دسترسی غیرمجاز به داده ها یا اتصال به رایانه دیگر) باعث وقفه فوری می شود.

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

ماشین مجازی جاوا(به اختصار Java VM، JVM) - ماشین مجازی جاوا بخش اصلی سیستم زمان اجرا جاوا است که اصطلاحاً محیط اجرای جاوا (JRE) نامیده می شود. ماشین مجازی جاوا بایت کد جاوا را از پیش تولید شده از کد منبع یک برنامه جاوا توسط کامپایلر جاوا (javac) تفسیر و اجرا می کند. JVM همچنین می تواند برای اجرای برنامه های نوشته شده به زبان های برنامه نویسی دیگر استفاده شود. به عنوان مثال، کد منبع Ada را می توان در بایت کد جاوا کامپایل کرد، که سپس می تواند توسط JVM اجرا شود.

JVM جزء کلیدی پلتفرم جاوا است. از آنجایی که ماشین های مجازی جاوا برای بسیاری از سخت افزارها و پلتفرم های نرم افزاریجاوا را می‌توان هم به‌عنوان میان‌افزار و هم به‌عنوان یک پلتفرم در نظر گرفت، از این رو اصل «یک بار بنویس، هر جا اجرا شود» است. استفاده از یک بایت کد در چندین پلتفرم به جاوا اجازه می دهد تا به عنوان "یک بار کامپایل، هر جا اجرا شود" توصیف شود.

محیط زمان اجرا

برنامه هایی که برای اجرا بر روی JVM در نظر گرفته شده اند باید در یک فرمت باینری قابل حمل استاندارد کامپایل شوند که معمولاً به صورت فایل های .class نمایش داده می شود. یک برنامه می تواند از کلاس های زیادی تشکیل شده باشد که در فایل های مختلف قرار دارند. برای آسان‌تر کردن میزبانی برنامه‌های بزرگ، برخی از فایل‌های .class را می‌توان با هم در یک فایل به اصطلاح jar (مخفف Java Archive) بسته‌بندی کرد.

JVM فایل های .class یا jar را با شبیه سازی دستورالعمل های نوشته شده برای JVM با تفسیر یا استفاده از یک کامپایلر به موقع (JIT) مانند HotSpot از Sun microsystems اجرا می کند. این روزها از کامپایل JIT در اکثر JVM ها برای دستیابی به سرعت بیشتر استفاده می شود.

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

JVM که نمونه ای از JRE (محیط زمان اجرای جاوا) است، زمانی که برنامه های جاوا اجرا می شوند، وارد عمل می شود. پس از اتمام اجرا، این نمونه توسط زباله جمع کن حذف می شود. JIT بخشی از ماشین مجازی جاوا است که برای سرعت بخشیدن به زمان اجرای برنامه ها استفاده می شود. JIT به طور همزمان بخش هایی از بایت کد را که عملکرد مشابهی دارند کامپایل می کند و بنابراین مدت زمان مورد نیاز برای کامپایل را کاهش می دهد.

j2se (نسخه استاندارد جاوا 2) – کتابخانه استاندارد شامل:

رابط کاربری گرافیکی، NET، پایگاه داده ...


30. پلتفرم دات نت. ایده ها و مفاد اصلی زبان های برنامه نویسی دات نت.

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

یکی از ایده های اصلی مایکروسافت دات نت، قابلیت همکاری سرویس های مختلف نوشته شده به زبان های مختلف است. به عنوان مثال، سرویسی که در C++ برای Microsoft .NET نوشته شده است، ممکن است یک متد کلاس را از یک کتابخانه نوشته شده در دلفی فراخوانی کند. در سی شارپ می توانید کلاسی بنویسید که از کلاس نوشته شده در آن به ارث رسیده است ویژوال بیسیکدات نت، و یک استثنا پرتاب شده توسط روشی که در سی شارپ نوشته شده است را می توان در دلفی گرفت و مدیریت کرد. هر کتابخانه (اسمبلی) در دات نت اطلاعاتی در مورد نسخه خود دارد که به شما امکان می دهد تضادهای احتمالی بین آنها را حذف کنید نسخه های مختلفمجامع

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

مانند فناوری جاوا، محیط توسعه دات نت بایت کد را برای اجرا توسط ماشین مجازی ایجاد می کند. زبان ورودی این دستگاه در دات نت MSIL (زبان میانی مایکروسافت) یا CIL (زبان متوسط ​​معمولی، نسخه بعدی) یا به سادگی IL نامیده می شود.

استفاده از بایت کد به شما این امکان را می دهد که به عملکرد چند پلتفرمی در سطح پروژه کامپایل شده دست یابید (در اصطلاح NET: مونتاژ) و نه تنها در سطح متن مبدا، به عنوان مثال، در C. قبل از شروع اسمبلی در زمان اجرا CLR، بایت کد توسط کامپایلر JIT ساخته شده در محیط تبدیل می شود (در زمان، در لحظه، در لحظه). کامپایل) به کدهای ماشین پردازنده هدف. همچنین امکان کامپایل اسمبلی به کد بومی برای پلتفرم انتخابی با استفاده از ابزار NGen.exe ارائه شده با .NET Framework وجود دارد.

در طول فرآیند ترجمه، کد منبع برنامه (نوشته شده در SML، C#، Visual Basic، C++ یا هر زبان برنامه نویسی دیگری که توسط دات نت پشتیبانی می شود) توسط کامپایلر به اسمبلی تبدیل می شود و به صورت پویا ذخیره می شود. فایل کتابخانه پیوندی (Dynamically Linked). Library، DLL) یا فایل اجرایی(قابل اجرا، EXE).

طبیعتاً، برای هر کامپایلر (خواه یک کامپایلر زبان سی شارپ، csc.exe یا ویژوال بیسیک، vbc.exe)، محیط زمان اجرا نگاشت لازم را از انواع استفاده شده در انواع CTS و کد برنامه را در کد " انجام می دهد. abstract machine” .NET - MSIL (Microsoft Intermediate Language).

در نهایت پروژه نرم افزاریبه شکل یک مونتاژ - یک جزء خودکفا برای استقرار، تکرار و استفاده مجدد تشکیل می شود. مجمع شناسایی شده است امضای دیجیتالینویسنده و شماره نسخه منحصر به فرد.

زبان های برنامه نویسی داخلی (شامل .NET Framework):

سی شارپ J#; VB.NET; JScript .NET; C++/CLI - یک نسخه جدید C++ (مدیریت شده).


31. اجزای عملکردی سیستم عامل. مدیریت فایل

اجزای سیستم عامل عملکردی:

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

مدیریت فایل:

توانایی سیستم عامل برای "حفاظت" از پیچیدگی های سخت افزار واقعی به وضوح در یکی از زیرسیستم های اصلی سیستم عامل - سیستم فایل آشکار می شود.

سیستم فایل از یک طرف رسانه های ذخیره سازی و از طرف دیگر یک API (رابط برنامه نویسی برنامه) را برای دسترسی به فایل ها پیوند می دهد. هنگامی که یک برنامه کاربردی به فایلی دسترسی پیدا می کند، نمی داند اطلاعات موجود در یک فایل خاص چگونه قرار گرفته است و همچنین نمی داند که چه نوع رسانه فیزیکی (سی دی، دیسک سخت، نوار مغناطیسی یا واحد حافظه فلش) روی آن ضبط شده است. تنها چیزی که برنامه می داند نام فایل، اندازه و ویژگی های آن است. این داده ها را از درایور سیستم فایل دریافت می کند. این سیستم فایل است که تعیین می کند فایل کجا و چگونه روی رسانه فیزیکی (مثلاً هارد دیسک) نوشته شود.

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

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

در ساده ترین حالت، تمام فایل های روی یک دیسک معین در یک دایرکتوری ذخیره می شوند. این طرح تک سطحی در CP/M و اولین نسخه MS-DOS 1.0 استفاده شد. سیستم فایل سلسله مراتبی با دایرکتوری های تودرتو ابتدا در Multics و سپس در یونیکس ظاهر شد.

کاتالوگ برای درایوهای مختلفمی تواند چندین درخت جداگانه تشکیل دهد، مانند DOS/Windows، یا در یک درخت مشترک برای همه دیسک ها ادغام شود، مانند سیستم های یونیکس ماننداوه

در واقع، در سیستم‌های DOS/Windows و همچنین در سیستم‌های یونیکس مانند، یک دایرکتوری ریشه با زیر شاخه‌هایی به نام‌های “c:”، “d:” و غیره وجود دارد. پارتیشن‌های هارد دیسک در این فهرست‌ها نصب می‌شوند. یعنی c:\ فقط یک پیوند به file:///c:/ است. با این حال، برخلاف سیستم‌های فایل مشابه یونیکس، در ویندوز، نوشتن در فهرست اصلی و همچنین مشاهده محتویات آن ممنوع است.

در یونیکس، تنها یک دایرکتوری ریشه وجود دارد و همه فایل ها و دایرکتوری های دیگر زیر آن قرار دارند. برای دسترسی به فایل ها و دایرکتوری های روی دیسک، باید دیسک را با استفاده از دستور mount مونت کنید. به عنوان مثال، برای باز کردن فایل‌های روی سی‌دی، به زبان ساده، باید به سیستم عامل بگویید: «سیستم فایل روی این سی‌دی را بگیرید و آن را در فهرست /mnt/cdrom نشان دهید.» تمام فایل ها و دایرکتوری های موجود در سی دی در این پوشه /mnt/cdrom ظاهر می شوند که به آن نقطه مونتاژ می گویند. در اکثر سیستم های یونیکس مانند دیسک های قابل جابجایی(فلاپی دیسک و سی دی)، درایوهای فلش و سایر دستگاه های ذخیره سازی خارجی در پوشه /mnt، /mount یا /media نصب شده اند. سیستم‌عامل‌های یونیکس و یونیکس‌مانند همچنین به دیسک‌ها اجازه می‌دهند که به‌طور خودکار هنگام بوت شدن سیستم عامل نصب شوند.

لطفا به استفاده از اسلش در فایل توجه کنید سیستم های ویندوز، سیستم عامل های یونیکس و یونیکس مانند (در ویندوز از علامت عقب "\" و در سیستم عامل های یونیکس و یونیکس مانند از اسلش ساده "/" استفاده می شود.

علاوه بر این، لازم به ذکر است که سیستم فوق به شما این امکان را می دهد که نه تنها سیستم های فایل دستگاه های فیزیکی، بلکه دایرکتوری های فردی (پارامتر --bind) را نیز نصب کنید یا به عنوان مثال، تصویر ISO(گزینه حلقه). افزونه هایی مانند FUSE همچنین به شما این امکان را می دهد که مثلاً یک فهرست کامل را روی FTP و تعداد بسیار زیادی منابع مختلف را نصب کنید.

ساختار پیچیده تری در NTFS و HFS استفاده می شود. دراین سیستم های فایلهر فایل مجموعه ای از ویژگی ها است. ویژگی‌ها نه تنها فقط خواندنی، سیستم، بلکه نام فایل، اندازه و حتی محتوا را نیز شامل می‌شوند. بنابراین برای NTFS و HFS، آنچه در یک فایل ذخیره می شود تنها یکی از ویژگی های آن است.

با پیروی از این منطق، یک فایل می تواند دارای چندین تنوع محتوا باشد. بنابراین، چندین نسخه از یک سند را می توان در یک فایل و همچنین داده های اضافی (نماد فایل، برنامه مرتبط با فایل) ذخیره کرد. این سازمان برای HFS در مکینتاش معمولی است.


32. اجزای عملکردی سیستم عامل. مدیریت فرآیند.

مدیریت فرآیند:

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

در یک سیستم چندوظیفه ای (چند فرآیندی)، یک فرآیند می تواند در یکی از سه حالت اصلی باشد:

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

WAITING - حالت غیرفعال یک فرآیند، فرآیند مسدود شده است، نمی توان آن را به دلایل داخلی خود اجرا کرد، منتظر وقوع رویدادی است، به عنوان مثال، تکمیل یک عملیات I/O، دریافت پیام از دیگری. فرآیند، یا انتشار برخی از منابع مورد نیاز.

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

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

استاندارد CP/M

ایجاد سیستم عامل برای میکروکامپیوترها با OS SR/M آغاز شد. در سال 1974 توسعه یافت و پس از آن بر روی بسیاری از ماشین های 8 بیتی نصب شد. در چارچوب این سیستم عامل، حجم قابل توجهی نرم افزار از جمله مترجم از زبان های متنی BASIC، Pascal، C، Fortran، Cobol، Lisp، Ada و بسیاری دیگر ساخته شد. آنها به شما امکان می دهند اسناد را بسیار سریعتر و راحت تر از استفاده از ماشین تحریر آماده کنید.

استاندارد MSX

این استاندارد نه تنها سیستم عامل، بلکه ویژگی های سخت افزار را برای رایانه های شخصی مدرسه نیز تعیین می کند. طبق استاندارد MSX، ​​ماشین باید داشته باشد رمحجم حداقل 16 K، حافظه دائمی 32 K با مترجم زبان BASIC داخلی، نمایشگر گرافیکی رنگی با وضوح 256x192 پیکسل و 16 رنگ، تولید کننده صدای 8 اکتاو سه کاناله، یک پورت موازی برای اتصال یک چاپگر و یک کنترل کننده برای کنترل یک درایو خارجی متصل به خارج.

سیستم عامل چنین ماشینی باید دارای ویژگی های زیر باشد: حافظه مورد نیاز - حداکثر 16 K، سازگاری با CP/M در سطح تماس های سیستم، سازگاری با DOS در فرمت های فایل در درایوهای خارجیبر اساس دیسک های مغناطیسی فلاپی، پشتیبانی از مترجمان زبان های BASIC، C، Fortran و Lisp.

Pi - سیستم

در دوره اولیه توسعه کامپیوترهای شخصیسیستم عامل USCD p-system ایجاد شد. اساس این سیستم به اصطلاح P-machine بود - برنامه ای شبیه سازی جهانی فرضی کامپیوتر. P-machine با اجرای دستورالعمل های خاصی به نام P-code، عملکرد پردازنده، حافظه و دستگاه های خارجی را شبیه سازی می کند. اجزای نرم افزاریسیستم های Pi (از جمله کامپایلرها) در کد P کامپایل می شوند، برنامه های کاربردی نیز به کد P کامپایل می شوند. بنابراین، اصلی ویژگی متمایزاین سیستم حداقل وابستگی به ویژگی های تجهیزات رایانه شخصی داشت. این همان چیزی است که قابلیت حمل سیستم Pi را به آن تضمین می کند انواع مختلفماشین ها فشرده بودن کد P و مکانیسم پیجینگ که به راحتی اجرا می شود، اجرای برنامه های نسبتاً بزرگ را بر روی رایانه های شخصی با RAM کوچک امکان پذیر می کند.

کنترل I/O

دستگاه های ورودی/خروجی به دو نوع تقسیم می شوند: بلوک گرادستگاه ها و بایت گرادستگاه ها دستگاه های بلوک گرا اطلاعات را در بلوک هایی با اندازه ثابت ذخیره می کنند که هر کدام آدرس خاص خود را دارند. رایج ترین دستگاه بلوک گرا یک دیسک است. دستگاه‌های بایت‌گرا آدرس‌پذیر نیستند و اجازه عملیات جستجو را نمی‌دهند؛ آنها دنباله‌ای از بایت‌ها را تولید یا مصرف می‌کنند. به عنوان مثال ترمینال ها، چاپگرهای خطی، آداپتورهای شبکه. قطعه الکترونیکی کنترل کننده یا آداپتور دستگاه نامیده می شود. سیستم عامل با کنترلر سروکار دارد. کنترل کننده عملکردهای ساده ای را انجام می دهد، خطاها را کنترل و تصحیح می کند. هر کنترل کننده دارای چندین ثبات است که برای ارتباط با پردازنده مرکزی استفاده می شود. سیستم عامل I/O را با نوشتن دستوراتی در رجیسترهای کنترلر انجام می دهد. کنترلر فلاپی دیسک کامپیوتر IBM 15 فرمان مانند READ، WRITE، SEEK، FORMAT و غیره را می پذیرد. وقتی فرمان پذیرفته شد، پردازنده کنترلر را ترک می کند و کارهای دیگری را انجام می دهد. هنگامی که فرمان کامل می شود، کنترل کننده برای انتقال کنترل پردازنده به سیستم عامل وقفه ای صادر می کند که باید نتایج عملیات را بررسی کند. پردازنده با خواندن اطلاعات از رجیسترهای کنترلر، نتایج و وضعیت دستگاه را به دست می آورد.

ایده اصلی سازماندهی نرم افزار I/Oشامل تقسیم آن به چندین سطح است و سطوح پایینی ویژگی های تجهیزات را از سطوح بالایی محافظت می کند و آن ها رابط کاربر پسندبرای کاربران

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

یکی دیگر از مسائل کلیدی استفاده از انتقال های مسدود کننده (همزمان) و غیر مسدود کننده (ناهمزمان) است. بیشتر عملیات فیزیکی ورودی/خروجی به صورت ناهمزمان انجام می شود - پردازنده یک انتقال را شروع می کند و تا زمانی که یک وقفه رخ دهد به کار دیگری می رود. لازم است که عملیات I/O مسدود شود - پس از دستور READ، برنامه به طور خودکار متوقف می شود تا داده ها به بافر برنامه برسند.

آخرین مشکل این است که برخی از دستگاه‌ها به اشتراک گذاشته می‌شوند (دیسک‌ها: دسترسی همزمان چند کاربر به دیسک مشکلی نیست) در حالی که برخی دیگر اختصاصی هستند (چاپگرها: خطوط چاپ شده توسط کاربران مختلف را نمی‌توان مخلوط کرد).

برای حل این مشکلات، توصیه می شود نرم افزار I/O را به چهار لایه تقسیم کنید (شکل 2.30):

· مدیریت وقفه،

· درایورهای دستگاه،

· لایه مستقل از دستگاه سیستم عامل،

· لایه نرم افزار سفارشی.

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

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

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