Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

ЛЕКЦИЯ 14. Механизм системных вызовов




Механизм системных вызовов

Системные вызовы

Файлы

Управление памятью

Взаимоблокировка

Когда взаимодействуют 2 или более процессов, они могут попадать в ситуации, которая не дает выполнятся далее без посторонней помощи, такая ситуация называется взаимоблокировка.

Пример. Пусть к ПК подключены стример и пишущий DVD привод. Требуется записать данные со стримера на DVD. Процесс_1 запрашивает и получает в пользование стример. Создается Процесс_2, который запрашивает и получает в свое распоряжение DVD. После этого Процесс_1 запрашивает DVD, который занят Процессом_2. Поэтому процесс_1 приостанавливает свою работу и ждет, пока Процесс_2 не освободит DVD. Аналогично с процессом_2 по отношению к стримеру. И ждут оба). Вот это и есть взаимоблокировка.

Проблемы:

1. защищенность

2. недостаточно адресного пространства, чтобы вся программа поместилась в ОЗУ. Тогда создается на жестком диске область памяти под виртуальную память. Либо файл подкачки - программа будет загружаться в ОЗУ по частям.

Файл нужно открыть(создать) и закрыть. Файл можно читать и писать только тогда, когда он открыт. Файлы нужно хранить. За это отвечает файловая система: как и где?

Место для хранения файлов называется каталог(директория, папка). Есть корневой каталог, есть дочерние. Используется принцип дерева.

Сравнение иерархии файлов и процессов. (таблица)

 

Иера рхия
Процессы Файлы
не глубокая глубокая
короткое время жизни очень большое время жизни
доступ к процессу может быть осуществлен только из родительского процесса произвольный доступ

Путь - это полное имя файла от корневого каталога.

Файловые системы Юникс систем:

- bin

- sbin

- usr

-

 

Системные вызовы это интерфейс между программами пользователя и устройствами.

Выполнение системного вызова похоже на выполнение процедуры.

ПРИМЕР:

системный вызов чтения данных из файлов

в с++ этот системный вызов запускается функцией с таким же именем

count read(fd, buffer, nbyte);

fd - file descripter. идентификатор

буфер - куда считавыются данные

nbyte - кол. байт которые нужно прочесть

count - количество байт которое необходимо прочесть

Если системный вызов не может быть выполнен count = -1, а в глобальной переменной errno = сохраняет номер ошибки. Каждый системный вызов выполняется в несколько этапов:

 

Пример использования системных вызовов

Пример1 "Системный вызов ioctl()":

Системный вызов ioctl() универсальное средство управления аппаратными устройствами. Первый аргумент - дескриптор файла того устройства которым требуется управлять, второй аргумент - код запроса на конкретную операцию.

Рассмотрим пример использования этого системного вызова для извлечения компакт-диска из дисковода.

 

// cdrom-eject.c

#include <fcntl.h>

#include <linux/cdrom.h>

#include <sys/ioctl.h>

#include <sys/stat.h>

#include <sys/types.h>

#include <unistd.h>

int main(int argc, char* argv[])

{

//открытие файла устройства указанного в командной строке

int fd=open(argv[1], O_RDONLY);

//Извлечение диска из устройства

ioctl(fd, CDROMEJECT);

close(fd);

return 0;

}

Пример 2 "Использование API функций для работы с процессом"

Вывод информации в не модальное окно может быть выполнен явно и не явно. При неявном выводе информация создается пользователем. При не явном выводе информация представляет собой значение возвращаемое какой либо системной API функции. В качестве примера вывод идентификатора в консоль

Получить значения идентификатора текущего процесса позволяет функция которая называется DWORD GetCurrentProcessId(void). Алгоритм работы программы следующий:

1. Вызывается функция GetCurrentProcessId(void) и сохраняется в регистре EAX

2. Содержимое ЕАХ преобразуется в строку символов которая помещаетсяв буфер.

3. Адрес начала строки сохраняется в индексном регистре EDI

4. Строка символов передается в функцию MassageBox

5. Вызов функции MassageBox

 

Исходный модуль на ASM

.386

model flat, stdcall

include c\tasm\examples\wap32\win32.inc

includelib import32.lib

extrn GetCurrentProcessId:proc

extrn MassageboxA:proc

extrn ExitProcess:proc

.data

mesbox_title db "Id of current process: ", 0

textbuf db 11 dup(0), 0

.code

Start:

call GetCurrentProcessId;результат в EAX

; преобразование числа в строку

lea edi, textbuf+11

mov esi,10

Clr_dvd:

xor edx,edx

div esi

add edx,'0'

dec edi

mov Byte PTR[edi],dl

or eax,eax

jnz Clr_Dvd

; создание диалогового окна

push MB_OK

push offset messbox_title

push offset edi

push 0

call MessageBoxA

call ExitProcess

ends

end start

 

Вариант на С++

#include <windows.h>

#include <iostream.h>

#include <conio.h>

void main()

{

DWORD dwpid=GetCurrentProcessId();

cout<<"Current Id Of Processd:"<<wpid;

getch();

}

 




Поделиться с друзьями:


Дата добавления: 2014-12-16; Просмотров: 443; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.008 сек.