Системний виклик (англ. system call) — в інформатиці це спосіб використання застосунками сервісів ядра операційної системи. Це можуть бути сервіси, пов'язані з апаратною складовою комп'ютера (наприклад, доступ до диска), керування процесами та потоками, та багато іншого. Системні виклики забезпечують інтерфейс між процесом та операційною системою.
Привілеї
Архітектура практично всіх сучасних мікропроцесорів (окрім деяких вбудованих систем) реалізує модель безпеки, за якою існує багато рівнів прав, які можуть надаватися програмному забезпеченню. Наприклад, програма зазвичай виконується у власному адресному просторі та не має доступу до пам'яті інших програм та операційної системи; програма зазвичай не має привілеїв на прямий доступ до обладнання. Операційна система виконується на вищому рівні привілеїв, та має прямий доступ до комп'ютера.
Тим не менш, багатьом звичайним програмам потрібен жорсткий диск та інші компоненти комп'ютера. Системні виклики, як правило, реалізуються за допомогою переривань. Переривання автоматично перемикає процесор на потрібний рівень привілеїв та дає право на виконання ядру операційної системи, яке визначає чи надавати сервіс програмі, що зробила системний виклик. Якщо сервіс треба надати, то ядро виконує певний набір інструкцій, які програма не може виконати безпосередньо, перемикає процесор на рівень привілеїв програми та повертає право на виконання.
Бібліотека як посередник
З операційними системами створюють бібліотеки чи API, які є посередниками між звичайними програмами та системою. Часто це реалізації стандартної бібліотеки мови C (libc), наприклад glibc, які надають обгортки для системних викликів.
Приклади
В Unix та інших POSIX-сумісних операційних системах популярними системними викликами є open, read, write, close, wait, exec, fork, exit, та kill.
Багато операційних систем мають сотні викликів. Наприклад, Linux має більш ніж 300, FreeBSD більше 500. Мікроядро Neutrino операційної системи QNX (версії 6.3) має 63 системних виклики.
Відслідковувати використання програмами сервісів операційної системи можна за допомогою програм strace та truss. Вони дозволяють запустити процес та повідомляти про всі виклики, що він робить, або приєднатися до процесу, що вже існує, та перехоплювати його системні виклики. Ці можливості також реалізовані за допомогою системних викликів.
Реалізація
Реалізація системних викликів потребує команд переходу від одного коду до іншого, а це операції, що залежні від архітектури. Тривіальний спосіб реалізації — це використання програмного переривання. Переривання передає керування операційній системі, тому номер потрібного системного виклику потрібно лише записати у певний регістр процесора та виконати команду переривання.
Багато RISC-процесорів пропонують лише такий спосіб, в той час як процесори архітектури CISC (такі як x86) підтримують додаткові технології. Наприклад, SYSCALL/SYSENTER, SYSRET/SYSEXIT (два механізми, що були розроблені незалежно один від одного компаніями AMD та Intel). Це інструкції «швидкого» перемикання контексту, які спроектовані для реалізації системних викликів, що не потребують переривань. В ядрі Linux з версії 2.5 вже використовуються ці функції. Раніше використовувалася інструкція INT (0x80), а номер виклику записувався в регістр EAX.
Старий x86-механізм, що називався шлюзом виклику (англ. call gate), пропонував програмам безпосередньо викликати функції ядра, використовуючи безпечні механізми перемикання контексту, які забезпечувала операційна система. Цей підхід не став популярним, мабуть через те, що він потребував «дальні виклики» та погано впливав на переносність програмного забезпечення.
Для архітектури IA-64 використовується інструкція EPC (англ. Enter Privileged Mode). Для перших восьми викликів використовують регістри, а для інших — стек.
Перемикання контекстів
Системні виклики виконуються у режимі ядра, який перемикає процесор до більш привілейованого рівня, але не обов'язково змінює контекст процесу. Апаратні засоби бачать світ в термінах режиму виконання, що визначаються статусом процесора, а процес — це лише абстракція рівня операційної системи. Тому системний виклик не завжди потребує перемикання контексту на інший процес, а виконується в контексті процесу, який зробив виклик.
Примітки
- FreeBSD syscalls.c, the list of syscall names and IDs. Архів оригіналу за 27 липня 2013. Процитовано 18 березня 2012.
- QNX 6.3 microkernel source code.
- Anonymous (19 грудня 2002). Linux 2.5 gets vsyscalls, sysenter support. . Архів оригіналу за 15 липня 2012. Процитовано 1 січня 2008.
- Bach, Maurice J. (1986). The Design of the UNIX Operating System (англ.). Prentice Hall. с. 15—16.
- Discussion of syscall implementation at ProgClub including quote from Bach 1986. Архів оригіналу за 1 вересня 2013. Процитовано 18 березня 2012.
Посилання
- Linux system call reference
- A list of modern Unix-like system calls
- Interactive map of Linux kernel
- (англ.).
- How System Calls Work on Linux/i86
- Sysenter Based System Call Mechanism in Linux 2.6
- Kernel command using Linux system calls — IBM developerWorks
- HOWTO for Implementing a System Call on Linux 2.6 — Amit Choudhary
- Modular system programming on Minix 3
- — examples on System Calls under Unix
Це незавершена стаття про операційні системи. Ви можете проєкту, виправивши або дописавши її. |
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Sistemnij viklik angl system call v informatici ce sposib vikoristannya zastosunkami servisiv yadra operacijnoyi sistemi Ce mozhut buti servisi pov yazani z aparatnoyu skladovoyu komp yutera napriklad dostup do diska keruvannya procesami ta potokami ta bagato inshogo Sistemni vikliki zabezpechuyut interfejs mizh procesom ta operacijnoyu sistemoyu PrivileyiArhitektura praktichno vsih suchasnih mikroprocesoriv okrim deyakih vbudovanih sistem realizuye model bezpeki za yakoyu isnuye bagato rivniv prav yaki mozhut nadavatisya programnomu zabezpechennyu Napriklad programa zazvichaj vikonuyetsya u vlasnomu adresnomu prostori ta ne maye dostupu do pam yati inshih program ta operacijnoyi sistemi programa zazvichaj ne maye privileyiv na pryamij dostup do obladnannya Operacijna sistema vikonuyetsya na vishomu rivni privileyiv ta maye pryamij dostup do komp yutera Tim ne mensh bagatom zvichajnim programam potriben zhorstkij disk ta inshi komponenti komp yutera Sistemni vikliki yak pravilo realizuyutsya za dopomogoyu pererivan Pererivannya avtomatichno peremikaye procesor na potribnij riven privileyiv ta daye pravo na vikonannya yadru operacijnoyi sistemi yake viznachaye chi nadavati servis programi sho zrobila sistemnij viklik Yaksho servis treba nadati to yadro vikonuye pevnij nabir instrukcij yaki programa ne mozhe vikonati bezposeredno peremikaye procesor na riven privileyiv programi ta povertaye pravo na vikonannya Biblioteka yak poserednikZ operacijnimi sistemami stvoryuyut biblioteki chi API yaki ye poserednikami mizh zvichajnimi programami ta sistemoyu Chasto ce realizaciyi standartnoyi biblioteki movi C libc napriklad glibc yaki nadayut obgortki dlya sistemnih viklikiv PrikladiV Unix ta inshih POSIX sumisnih operacijnih sistemah populyarnimi sistemnimi viklikami ye open read write close wait exec fork exit ta kill Bagato operacijnih sistem mayut sotni viklikiv Napriklad Linux maye bilsh nizh 300 FreeBSD bilshe 500 Mikroyadro Neutrino operacijnoyi sistemi QNX versiyi 6 3 maye 63 sistemnih vikliki Vidslidkovuvati vikoristannya programami servisiv operacijnoyi sistemi mozhna za dopomogoyu program strace ta truss Voni dozvolyayut zapustiti proces ta povidomlyati pro vsi vikliki sho vin robit abo priyednatisya do procesu sho vzhe isnuye ta perehoplyuvati jogo sistemni vikliki Ci mozhlivosti takozh realizovani za dopomogoyu sistemnih viklikiv RealizaciyaRealizaciya sistemnih viklikiv potrebuye komand perehodu vid odnogo kodu do inshogo a ce operaciyi sho zalezhni vid arhitekturi Trivialnij sposib realizaciyi ce vikoristannya programnogo pererivannya Pererivannya peredaye keruvannya operacijnij sistemi tomu nomer potribnogo sistemnogo vikliku potribno lishe zapisati u pevnij registr procesora ta vikonati komandu pererivannya Bagato RISC procesoriv proponuyut lishe takij sposib v toj chas yak procesori arhitekturi CISC taki yak x86 pidtrimuyut dodatkovi tehnologiyi Napriklad SYSCALL SYSENTER SYSRET SYSEXIT dva mehanizmi sho buli rozrobleni nezalezhno odin vid odnogo kompaniyami AMD ta Intel Ce instrukciyi shvidkogo peremikannya kontekstu yaki sproektovani dlya realizaciyi sistemnih viklikiv sho ne potrebuyut pererivan V yadri Linux z versiyi 2 5 vzhe vikoristovuyutsya ci funkciyi Ranishe vikoristovuvalasya instrukciya INT 0x80 a nomer vikliku zapisuvavsya v registr EAX Starij x86 mehanizm sho nazivavsya shlyuzom vikliku angl call gate proponuvav programam bezposeredno viklikati funkciyi yadra vikoristovuyuchi bezpechni mehanizmi peremikannya kontekstu yaki zabezpechuvala operacijna sistema Cej pidhid ne stav populyarnim mabut cherez te sho vin potrebuvav dalni vikliki ta pogano vplivav na perenosnist programnogo zabezpechennya Dlya arhitekturi IA 64 vikoristovuyetsya instrukciya EPC angl Enter Privileged Mode Dlya pershih vosmi viklikiv vikoristovuyut registri a dlya inshih stek Peremikannya kontekstivSistemni vikliki vikonuyutsya u rezhimi yadra yakij peremikaye procesor do bilsh privilejovanogo rivnya ale ne obov yazkovo zminyuye kontekst procesu Aparatni zasobi bachat svit v terminah rezhimu vikonannya sho viznachayutsya statusom procesora a proces ce lishe abstrakciya rivnya operacijnoyi sistemi Tomu sistemnij viklik ne zavzhdi potrebuye peremikannya kontekstu na inshij proces a vikonuyetsya v konteksti procesu yakij zrobiv viklik PrimitkiFreeBSD syscalls c the list of syscall names and IDs Arhiv originalu za 27 lipnya 2013 Procitovano 18 bereznya 2012 QNX 6 3 microkernel source code Anonymous 19 grudnya 2002 Linux 2 5 gets vsyscalls sysenter support Arhiv originalu za 15 lipnya 2012 Procitovano 1 sichnya 2008 Bach Maurice J 1986 The Design of the UNIX Operating System angl Prentice Hall s 15 16 Discussion of syscall implementation at ProgClub including quote from Bach 1986 Arhiv originalu za 1 veresnya 2013 Procitovano 18 bereznya 2012 PosilannyaLinux system call reference A list of modern Unix like system calls Interactive map of Linux kernel angl How System Calls Work on Linux i86 Sysenter Based System Call Mechanism in Linux 2 6 Kernel command using Linux system calls IBM developerWorks HOWTO for Implementing a System Call on Linux 2 6 Amit Choudhary Modular system programming on Minix 3 examples on System Calls under Unix Ce nezavershena stattya pro operacijni sistemi Vi mozhete dopomogti proyektu vipravivshi abo dopisavshi yiyi