- •СПбГУТ им. проф. Бонч- Бруевича )))
- •План
- •Используемый софт
- •Ядро операционной системы
- •Ядро операционной системы
- •Ядро операционной системы
- •Ядро операционной системы
- •Ядро операционной системы
- •Ядро операционной системы
- •Объекты ядра
- •Объекты ядра
- •Объекты ядра: Создание
- •Объекты ядра
- •Объекты ядра: Закрытие дескриптора
- •Объекты ядра: Закрытие дескриптора
- •Объекты ядра: Именованные объекты
- •Объекты ядра: Именованные объекты
- •Объекты ядра: Именованные объекты
- •Объекты ядра: Наследование
- •Объекты ядра: Наследование
- •Процессы и потоки
- •Процессы и потоки
- •Процессы и потоки
- •Создание процесса
- •Создание процесса
- •Создание потока
- •Функции ожидания
- •Функции ожидания
- •Функции ожидания
- •События, семафоры и мьютексы
- •Создание события
- •Создание события
- •Создание семафора
- •Создание мьютекса
- •Создание мьютекса
- •Windows API подробнее
- •Windows API подробнее
- •Windows API подробнее
- •Windows API подробнее
- •Windows API подробнее
- •Windows API подробнее
- •Windows API подробнее
- •Windows API подробнее
- •Windows API подробнее
- •Windows API подробнее
- •Windows API подробнее
- •Windows API подробнее
- •Windows API подробнее
- •Windows API подробнее
- •Литература
- •Используемая литература
- •FINAL
Объекты ядра
Дескриптор объекта ядра — идентификатор объекта, при помощи которого осуществляется работа с этим объектом.
Создание объекта осуществляется следующим образом:
1.Ядро ОС выделяет память под объект ядра и инициализирует его;
2.Ядро ОС добавляет в таблицу дескрипторов процесса
дескриптор нового объекта.
Далее этот процесс работает с объектом ядра через его дескриптор.
Дескриптор может представлять целое число.
Объекты ядра: Создание
Process A создает объект ядра и получает его |
||
дескрип |
Пространство пользователя |
|
Пространство ядра |
||
|
(пользовательские программы) |
|
Ядро |
Библиотек |
1. Создать объект |
ядра* |
||
ОС |
а или API |
2. |
|
||
|
|
ObjectHandle |
|
|
либо NULL Process A |
|
|
(ошибка) |
* — CreateProcess, CreateThread, CreateEvent,
CreateSemaphore, CreateMutex, CreatePipe,
CreateWaitableTimer…
Объекты ядра
Дескрипторы любого приложения можно увидеть в программе Process Explorer (freeware).
Вверху выделяем любой запущенный процесс. Внизу смотрим список дескрипторов.
Как видим, в приложении main.exe (выделен) работают 20 потоков.
Объекты ядра: Закрытие дескриптора
После работы с объектом ядра следует закрыть его дескриптор при помощи функции CloseHandle().
Пространство ядра |
Пространство пользователя |
|
|
(пользовательские программы) |
|
Ядро |
Библиотек |
1. |
CloseHandle() |
||
ОС |
а или API |
2. Результат: |
|
||
|
|
True : удача Process A |
|
|
False: неудача |
Объект “разрушится” только тогда, когда все процессы, использующие этот объект, завершат работу с ним (тоже вызвав CloseHandle).
Объекты ядра: Закрытие дескриптора
А что будет, если приложение не вызвало CloseHandle?
Будет ли утечка памяти?
Утечка вполне вероятна, пока процесс еще выполняется. Однако по завершении процесса операционная система гарантированно освобождает все ресурсы, принадлежавшие этому процессу.
Объекты ядра: Именованные объекты |
|||||||||||||||||||||||||||||
Некоторые объекты ядра могут иметь имена. Таким |
|||||||||||||||||||||||||||||
образом, процессы могут получать доступ к объектам друг |
|||||||||||||||||||||||||||||
друга. Для этого они используют Open-функции. |
|||||||||||||||||||||||||||||
Пространство ядра |
Пространство пользователя |
||||||||||||||||||||||||||||
|
(пользовательские программы) |
||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
o |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
“ |
|||
|
|
|
|
|
|
|
|
|
|
|
|
1 |
|
|
|
|
|
|
|
|
|
|
|
|
( |
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
t |
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
c |
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
e |
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
j |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
b |
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
O |
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
d |
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
e |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
m |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
a |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
N |
|
|
|
|
|
|
|
|
|
|
|
|
|
Process A |
|||||||
|
|
|
|
|
|
e |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
Ядро |
Библиотек |
|
|
|
t |
|
|
|
|
|
”) |
|
|
|
|
|
|
|
|
||||||||||
Crea |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||
ОС |
а или API |
|
|
2. |
|
O |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
d |
wAc |
|
|
pen |
O |
bjec |
|
|
|
|
|
|
|
||||||||||||||
|
|
cess, |
t( |
|
|
|
|||||||||||||||||||||||
|
|
Д |
|
|
|
|
b |
|
|
|
|
|
|
|
|
|
|
||||||||||||
|
|
|
а |
л |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
ь |
ш |
е“ |
|
|
|
|
I |
n |
h |
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
e |
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
oр |
|
|
|
|
|
|
|
|
|
|
r |
i |
t |
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
а” |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
об |
ъ |
е |
|
|
б) |
от |
а |
|
с |
|
|
|
|
|
|
, |
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
ктом |
|
|
|
|
|
|
|
Process B |
|||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Объекты ядра: Именованные объекты |
|||||||||||||||||||||||||
Если два процесса попытались создать объект с одинаковым |
|||||||||||||||||||||||||
именем, то в одном процессе будет создан объект, а в другом |
|||||||||||||||||||||||||
открыт. Оба процесса получат один и тот же дескриптор (права |
|||||||||||||||||||||||||
доступа должны быть идентичны). |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Пространство ядра |
Пространство пользователя |
||||||||||||||||||||||||
|
(пользовательские программы) |
||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
. |
|
|
|
|
|
|
|
|
|
o |
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
“ |
|||||
|
|
|
|
|
|
|
|
|
|
|
|
1 |
|
|
|
|
|
|
|
|
|
( |
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
t |
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
c |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
e |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
j |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
b |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
O |
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
d |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
e |
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
m |
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
a . |
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
N |
|
|
2 |
|
|
ndlProcess A |
|||||||||||||
|
|
|
|
|
e |
|
|
|
|
|
|
|
|||||||||||||
Ядро |
|
t |
|
|
|
|
|
|
”) |
|
|
||||||||||||||
Библиотек |
Crea |
|
|
|
|
|
|
|
|
|
|||||||||||||||
|
|
|
|
|
|
|
|
|
|
ctHa |
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
e |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
j |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
ОС |
а или API |
C |
|
|
|
b |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
O |
|
|
|
|
|
|
3. |
|
|
|
|
|
|
|
|
|
|
||||||
|
|
reat |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
eNam |
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
4 |
|
|
|
|
|
e |
d |
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
. |
|
т |
|
|
|
O |
b |
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
Obj |
|
|
|
|
|
от |
|
же |
j |
ec |
|
|
|
|
|||||||||
|
|
|
|
|
|
|
|
) |
|
|
|
t |
|
|
|
|
|||||||||
|
|
|
|
|
|
e |
c |
|
|
|
|
|
|
|
|
|
|
|
|
|
” |
||||
|
|
л |
иб |
|
|
|
t |
Ha |
n |
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||
|
|
|
|
о |
|
|
|
|
|
|
dl |
|
|
|
|
|
|
|
|||||||
|
|
( |
|
|
|
|
|
NUL |
|
e |
|
|
|
|
|
|
|||||||||
|
|
ош |
|
|
|
|
|
|
|
|
|
|
|
||||||||||||
|
|
|
ибка |
L |
|
|
|
|
Process B |
||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
Объекты ядра: Именованные объекты
Именованные объекты
Объекты ядра: Наследование |
|||||||||||||||||
Дочерние процессы могут унаследовать некоторые |
|||||||||||||||||
объекты процесса-родителя (если наследование разрешено). |
|||||||||||||||||
Пространство ядра |
Пространство пользователя |
||||||||||||||||
|
(пользовательские программы) |
||||||||||||||||
|
|
|
|
|
|
|
|
|
. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
|
|
|
|
|
|
|
) |
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
( |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
t |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
c |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
e |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
j |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
b |
|
|
|
|
|
||
|
|
|
|
|
|
|
|
O |
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
e |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
t |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
a |
|
|
|
|
|
|
|
|
|
Process A |
||
|
|
|
e |
|
|
|
|
|
|
|
|
|
|
||||
Ядро |
Библиотек |
r |
|
|
|
|
|
|
|
|
|
|
|
||||
C |
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
ОС |
а или API |
|
|
|
|
|
|
|
|
|
2. Запуск |
||||||
|
|
3. |
|
|
|
|
|
|
|
|
(аргумент |
||||||
|
|
|
Раб |
|
|
|
|
|
|
ы) |
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
о |
|
|
|
|
|
|
|
|
|
|
|
о |
|
|
|
|
|
|
та |
с |
|
|
|
||||
|
|
б |
ъ |
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
екто |
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
м |
|
|
|
Process B |
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Объекты ядра: Наследование
main.exe — процесс-родитель notepad.exe — дочерний процесс со своим
потоком