წყვეტა (წყვეტის სიგნალი; ინგლ. Interrupt) —  სისტემურ დაპროგრამებაში არის სიგნალი, რომელსაც პროგრამული ან ტექნიკური უზრუნველყოფა პროცესორს გადასცემს და მიანიშნებს მოვლენაზე, რომელსაც დაუყონებლივ ყურადღებას საჭიროებს. წყვეტა პროცესორს აფრთხილებს ისეთი უპირველესი მნიშვნელობის მდგომარეობაზე, რომელიც პროცესორის  მიერ იმ დროს გაშვებული კოდის შეწყვეტას მოითხოვს. პროცესორი ამ დროს მიმდინარე აქტივობებს დროებით წყვეტს, ინახავს მათ მდგომარეობას და მოვლენასთან გასამკლავებლად უშვებს ფუნქციას, რომელსაც წყვეტის დამმუშავებელი (ან წყვეტის მომსახურების  რუტინა; ინგლ. interrupt service routine, ISR) ეწოდება. პროცესორის მიერ მიმდინარე დავალებებზე მუშაობის შეწყვეტა დროებითია და წყვეტის დაამუშავებლის დასრულების შემდეგ ის აგრძელებს ჩვეულებრივ აქტივობებს.[1] არსებობს ორი ტიპის წყვეტა: აპარატურული და პროგრამული.

წყვეტის წყაროები და პროცესორის მიერ მათთან მოპყრობა

აპარატურული წყვეტა გამოიყენება მოწყობილობების მიერ, რათა ოპერაციული სისტემისგან ყურადღება მოითხოვონ.[2] აპარატურული წყვეტები შესრულებულია ელექტრონული გამაფრთხილებელი სიგნალებით, რომელიც პროცესორს ეგზავნება თვითონ კომპიუტერის შემადგენილი ნაწილი გარე მოწყობილობიდან, (მაგალითად დისკის კონტროლერი) ან გარე პერიფერიული მოწყობილობიდან. მაგალითისთვის, კლავიატურის ღილაკზე დაჭერას ან მაუსის გამოძრავებას მოქმედებაში მოჰყავს წყვეტები, რომელიც პროცესორს ღილაკზე დაჭერის ან მაუსის პოზიციის წაკითხვას აიძულებს. პროგრამულისგან განსხვავებით (აღწერილია დაბლა), აპარატურული წყვეტები ასინქრონულია და შესაძლებელია ინსტრუქციის შესრულებისას მოხდეს, რაც პროგრამირებაში დამატებით საზრუნავს მოითხოვს. აპარატურული წყვეტის წამოწყების აქტი მოხსენიებულია როგორც წყვეტის მოთხოვნა (ინგლ. interrupt request, IRQ).

პროგრამული წყვეტა გამოწვეულია თვითონ პროცესორში უჩველო გარემოებით ან ინსტრუქციების ნაკრებში განსაკუთრებული ინსტრუქციით, რომელიც შესრულებისას წყვეტას იწვევს. აქედან პირველს ხშირად მახეს ან გამონაკლისს უწოდებენ და ის გამოიყენება პროგრამის შესრულებისას მომხდარი ისეთი განსაკუთრებული შეცდომების ან მოვლენებისას, რომელთა გამკლავებაც თვითონ პროგრამაში ვერ მოხდება. მაგალითად, თუ პროცესორის არითმეტიკულ-ლოგიკურ ბლოკს რიცხვის ნულზე გაყოფა დაევალება, ეს შეუძლებელი მოთხოვნა "ნულზე-გაყოფა" გამონაკლისს გამოიწვევს და კომპიუტერი სავარაუდოდ გამოთვლას მიატოვებს ან შეცდომის ცნობას აჩვენებს. პროგრამული წყვეტის ინსტრუქციები ქვეპროგრამის გამოძახებების მსგავსად მუშაობენ და სხვადასხვა მიზნებისთვის გაომიყენებიან, მაგალითად, დაბალი დონის სისტემური პროგრამული უზრუნველყოფიდან მომსახურების (როგორიცაა მოწყობილობის დრაივერები). კიდევ, კომპიუტერები პროგრამული წყვეტის ინსტრუქციებს ხშირად იყენებენ დისკის კონტროლერთან დასაკავშირებლად დისკზე მონაცემების ჩაწერის ან წაკითხვის მოსათხოვად.

ყველა წყვეტას საკუთარი წყვეტის დამმუშავებელი აქვს. აპარატურული წყვეტების რაოდენობა შეზღუდულია პროცესორისთვის გაგზავნილი წყვეტის მოთხოვნების (IRQ) ხაზების რაოდენობით, მაგრამ შესაძლოა ასობით სხვადასხვაგვარი პროგრამული წყვეტა მოხდეს . წყვეტები კომპიუტერის მრავალდავალებიან სამუშაოსთვის, განსაკუთრებით რეალური დროის გამოთვლებში, ხშირად გამოყენებული მეთოდია. ასეთ სისტემებს წყვეტებით მომუშავეს უწოდებენ.[3]

სქოლიო რედაქტირება

  1. Alessandro Rubini; Greg Kroah-Hartman. Linux Device Drivers, Third Edition, Chapter 10. Interrupt Handling (PDF). O'Reilly Media (2005). ციტატა: „Then it's just a matter of cleaning up, running software interrupts, and getting back to regular work. The "regular work" may well have changed as a result of an interrupt (the handler could wake_up a process, for example), so the last thing that happens on return from an interrupt is a possible rescheduling of the processor.“ ციტირების თარიღი: December 25, 2014.
  2. Hardware interrupts. ციტირების თარიღი: 2014-02-09.
  3. Basics of Interrupts. ციტირების თარიღი: 2010-11-11.