МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
Національний університет
“ЛЬВІВСЬКА ПОЛІТЕХНІКА”
Загальне ознайомлення iз системними викликами операцiйної системи Linux
ЛАБОРАТОРНА РОБОТА № 5
З ДИСЦИПЛІНИ “МЕРЕЖЕВІ ОПЕРАЦІЙНІ СИСТЕМИ”
Львів 2010
Мета роботи
Познайомитися iз повним набором системних викликiв операцiйної системи Linux та призначенням i синопсисом найвживанiших системних викликiв.
Короткі теоретичні відомості
Ядро ОС виконується в привiлейованому режимi работи процесора. Для виконання мiжпроцесної операцiї чи операцiї,яка вимагає доступу до обладнання, програма звертається до ядра, яке, в залежносi вiд повноважень викликаючого процесу, виконує чи вiдмовляє у виконаннi такого виклику. Таке звертання до ядра ОС називають системним викликом.
Веpсiї Linux 0.99.2 налiчувала 116 системних виклики, версiя 2.2.14 має 162 найменування, а версiя 2.6.18 – 243 (див. Список системних викликів у Додатку 1. Документацiя до них можна знайти безпосpедньо в самiй документацiї по Linux.
Iснують процедури, якi дозволять встановити свiй власний системний виклик.
В Linux/UNIX системнi виклики майже один до одного вiдповiдають бiблiотечним функцiям, якi використовуються для звертання до системного виклику. Тому у цiй лабораторнiй роботi ми фактично знайомимося iз вiдповiдними бiблiотечними функцiями.
Уточнимо деякi поняття важливi при ознайомленнi iз системними викликами:
Ядро ОС Linux - програма, що забезпечує роздiлення часу центрального процесора мiж процесами, що виконуються, здiйснює управлiння пам'яттю та пристроями вводу-виводу, реалiзує файлову систему.
Системнi виклики представлять собою iнтерфейс мiж програмами користувача i ядром операцiйної системи Linux (чи UNIX). Реалiзацiя системних викликiв - одна iз функцiй ОС Linux.
Iдентифiкатор процесу (PID). Кожний активний процес в системi iдентифiкується унiкальним цiлим додатнiм числом, яке називається "iдентифiкатором процесу". Дiапазон представлення iдентифiкатора процеса - вiд 0 до PROC_MAX (значення PROC_MAX встановлюються при генерацiї системи).
Iдентифiкатор процеса-предка (PPID). Iдентифiкатор процеса, який породив даний процес (див. опис виклику fork).
Iдентифiкатор групи процесiв. Кожний активний процес є членом якої-небудь групи процесiв. Як iдентифiкатор групи процесiв використовується iднтифiкатор процеса старшого в групi (спiльно предка всiх процесiв групи). Об'єднання процесiв в групу дозволяє працювати з групою, як з одним об'єктом, наприклад , передавати сигнал всiм процесам групи.
Реальнi iдентифiкатори користувача i групи (UID i GID). Кожний користувач системи iдентифiкуєтьсяцiлим додатнiм числом, яке називається "iдентифiкатором користувача". Крiм того, користувач може бути членом однiєї чи декiлькох груп. Групи вiдрiзняються одна вiд одної специфiчними правами доступу. Додатнє цiле число, поставлене у вiдповiднiсть групi, називається "iдентифiкатором групи". Процеси мають реальнi идентифiкатори користувача i групи, значення яких рiвнi вiдповiдним iдентифiкаторам користувача, який iнiцiював даний процес. Реальнi iдентифiкактори успадковуються всiма нащадками процеса.
Ефективнi iдентифiкатори користувача i групи, список груп доступу. Доступ до системних ресурсiв визначається трьома значеннями: "ефективним iдентифiкатором користувача", "ефективним iдентифiкатором групи" i "списком груп доступу". Ефективний iдентифiкатор користувача i групи при стартi процеса переважно спiвпадають з реальними. Виняток становлять випадки, коли статус виконуваного файла мiстить ознаки set-UID i set-GID (див. опис виклику execve). Список груп доступу разом з iдентифiкатором групи використовується для визначення прав доступу до системних ресурсiв.
Привiлейований користувач i привiлейований процес. Процес вважається привiлейованим, тобто отримує винятковi права доступу, до всiх ресурсiв, якщо його єфективний iдентифiкатор користувача рiвний нулю.
Системнi процеси. Процеси з iдентифiкаторами 0, 1 вважаються системними. Це - планувальник (процес 0), який iнiцiалiзує процес, який одночасно є предком усiх решта процесiв (процес 1).
Дескриптор. Унiкальне цiле додатнє число, яке ставиться системою у вiдповiднiсть файлу, при його вiдкриттi. В процесi роботи дискриптор використовується процесом чи його нащадками при виконаннi конкретних операцiй з файлом.
Iм'я файла. Послiдовнiсть вiд одного до {FILENAME_MAX} симвлоiв, якi використовуються для iменування звичайних файлiв, директорiй чи спецiальних файлiв. В iменi файла можна використовувати будь-якi символи коду ASCII, за винятком керуючого коду 0 (NUL) i символу "/". Не рекомендується використовувати в iменах файлiв символи, якi мають спецiальне значення в мовi упрпвлiння завданнями (типу "*", "?").
Повне iм'я файла. Це послiдовнiсть iмен каталогiв роздiлених символом "/", якi передують iменi файла. Повне iм'я файла мiстить iнформацiю про положення каталогу з файлом в деревi файлiв. Якщо повне iм'я починається iз символа "/" (абсолютна адресацiя), воно вказує положення каталогу з файлом вiдносно кореня дерева файлiв. Iм'я, яке починається з будь-якого iншого символа, вказує положення каталога з файлом вiдносно поточного каталога. Довжина повного iменi файла не може перевищувати {PATHNAME_MAX} символiв.
Каталог. Спецiальний тип файла, який мiстить iнформацiю про файли, якi можуть адресуватися з даного каталога без вказання повного iменi (тобто по iменi файла). Будь-який каталог мiстить щонайменше двоє iмен "." i "..". Вони вiдповiдають даному каталогу (".") i каталогу, в який даний каталог входить (".."), так званий, батькiвський каталог.
Кореневий i поточний (робочий) каталог. Кожному процесу поставленi у вiдповiднiсть кореневий i робочий каталог, якi використовуються для пошуку конкретних файлiв за їх именем. Кореневий каталог процесу може не спiвпадати з кореневим каталогом системи.
Режим доступу до файла. Режим доступу визначає права процесу на виконання операцiй над файлом (наприклад, вiдкривання файла на запис). Режим доступу є приналежнiстю файла i встановлюється при його створеннi. Режим може перевизначатися з допомогою виклику chmod. Режим доступу мiстить iнформацiю про можливостi читання, запису та виконання файла для трьох груп користувачiв: власника файла, членiв його групи i всiх решта користувачiв. Для каталога ознака "виконання" iнтерпретується як право перегляду її вмiстимого. Процес отримує доступ до файла, якщо:
процес виконується в привiлейованому режимi;
ефективний iдентифiкатор процесу спiвпадає з iдентифiкатором власника файла i режим доступу дозволяє виконання замовленої операцiї;
ефективний iдентифiкатор процесу не спiвпадає з iдентифiкатором власника, але iдентифiкатор групи файла спiвпадає з ефективним iдентифiкатором групи процеса чи входить в список груп доступа процеса (при цьому режим доступу для групи дозволяє виконання замовленої операцiї);
якщо ефективнi iдентифiкатори i список груп доступу процеса не вiдповiдають iдентифiкаторам файла, але режим доступу файла дозволяє виконання вказаної операцiї для всiх iнших користувачiв.
В решті випадків процес не отримує доступу до файла.
Результати виконання завдання
STAT(1) User Commands STAT(1)
NAME
stat - display file or file system status
SYNOPSIS
stat [OPTION]... FILE...
DESCRIPTION
Display file or file system status.
-L, --dereference
follow links
-f, --file-system
display file system status instead of file status
-c --format=FORMAT
use the specified FORMAT instead of the default; output a newline after each use of FOR‐
MAT
--printf=FORMAT
like --format, but interpret backslash escapes, and do not output a mandatory trailing
newline. If you want a newline, include \n in FORMAT.
-t, --terse
print the information in terse form
--help display this help and exit
--version
output version information and exit
OPENVT(1) Linux 1.x OPENVT(1)
NAME
openvt - start a program on a new virtual terminal (VT).
SYNOPSIS
openvt [-c vtnumber] [-s] [-u] [-l] [-v] [--] command command_options
DESCRIPTION
openvt will find the first available VT, and run on it the given command with the given command
options, standard input, output and error are directed to that terminal. The current search path
($PATH) is used to find the requested command. If no command is specified then the environment
variable $SHELL is used.
OPTIONS
-c vtnumber
Use the given VT number and not the first available. Note you must have write access to
the supplied VT for this to work.
-f Force opening a VT without checking whether it is already in use.
-e Directly execute the given command, without forking. This option is meant for use in
/etc/inittab.
-s Switch to the new VT when starting the command. The VT of the new command will be made
the new current VT.
-u Figure out the owner of the current VT, and run login as that user. Suitable to be
called by init. Shouldn't be used with -c or -l.
-l Make the command a login shell. A - is prepended to the name of the command to be exe‐
cuted.
-v Be a bit more verbose.
-w wait for command to complete. If -w and -s are used together then openvt will switch back
to the controlling terminal when the command completes.
-- end of options to openvt.
WRITE(1) BSD General Commands Manual WRITE(1)
NAME
write — send a message to another user
SYNOPSIS
write user [ttyname]
DESCRIPTION
The write utility allows you to communicate with other users, by copying lines from your terminal
to theirs.
When you run the write command, the user you are writing to gets a message of the form:
Message from yourname@yourhost on yourtty at hh:mm ...
Any further lines you enter will be copied to the specified user's terminal. If the other user
wants to reply, they must run write as well.
When you are done, type an end-of-file or interrupt character. The other user will see the mes‐
sage вЂEOF’ indicating that the conversation is over.
You can prevent people (other than the super-user) from writing to you with the mesg(1) command.
If the user you want to write to is logged in on more than one terminal, you can specify which
terminal to write to by specifying the terminal name as the second operand to the write command.
Alternatively, you can let write select one of the terminals - it will pick the one with the
shortest idle time. This is so that if the user is logged in at work and also dialed up from
home, the message will go to the right place.
The traditional protocol for writing to someone is that the string вЂ-o’, either at the end of a
line or on a line by itself, means that it's the other person's turn to talk. The string вЂoo’
means that the person believes the conversation to be over.
KILL(1) Linux User's Manual KILL(1)
NAME
kill - send a signal to a process
SYNOPSIS
kill [ -signal | -s signal ] pid ...
kill [ -L | -V, --version ]
kill -l [ signal ]
DESCRIPTION
The default signal for kill is TERM. Use -l or -L to list available signals. Particularly use‐
ful signals include HUP, INT, KILL, STOP, CONT, and 0. Alternate signals may be specified in
three ways: -9 -SIGKILL -KILL. Negative PID values may be used to choose whole process groups;
see the PGID column in ps command output. A PID of -1 is special; it indicates all processes
except the kill process itself and init.
SIGNALS
The signals listed below may be available for use with kill. When known constant, numbers and
default behavior are shown.
Name Num Action Description
0 0 n/a exit code indicates if a signal may be sent
ALRM 14 exit
HUP 1 exit
INT 2 exit
KILL 9 exit cannot be blocked
PIPE 13 exit
POLL exit
PROF exit
TERM 15 exit
USR1 exit
USR2 exit
VTALRM exit
STKFLT exit might not be implemented
PWR ignore might exit on some systems
WINCH ignore
CHLD ignore
URG ignore
TSTP stop might interact with the shell
TTIN stop might interact with the shell
TTOU stop might interact with the shell
STOP stop cannot be blocked
Висновок
На даній лабораторній роботі, я, познайомився iз повним набором системних викликiв операцiйної системи Linux та призначенням i синопсисом найвживанiших системних викликiв.