Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2005.02.20;
Скачать: [xml.tar.bz2];

Вниз

О профессионализме программиста   Найти похожие ветки 

 
Игорь Шевченко ©   (2005-01-27 15:42) [40]


> а например, окна объектом ядра не являются


LOL. Интересно, чьими объектами являются окна.


> Есть некий признак по которому однозначно определяется объект
> ядра это или нет


Было бы очень любопытно его услышать.


 
jack128 ©   (2005-01-27 15:50) [41]

Игорь Шевченко ©   (27.01.05 15:42) [40]
Интересно, чьими объектами являются окна.


Уж точно не ядра. Окно может уничтожить кто угодно и когда угодно, а, например, процесс только ядро после того как будут закрыты все хендлы


 
Kerk ©   (2005-01-27 15:52) [42]

jack128 ©   (27.01.05 15:50) [41]

а окно разве не объект shell ? как оно с ядром связано?


 
Игорь Шевченко ©   (2005-01-27 15:54) [43]

jack128 ©   (27.01.05 15:50) [41]


> Уж точно не ядра. Окно может уничтожить кто угодно и когда
> угодно, а, например, процесс только ядро после того как будут закрыты все хендлы


Ой. Откуда информация ?

А файл ?


 
esu ©   (2005-01-27 16:01) [44]


> jack128 ©   (27.01.05 15:50) [41]

Окно создаешь в API, получаешь к нему хендл, дальше с ним работаешь... почему не объект ядра ? :)


 
jack128 ©   (2005-01-27 16:01) [45]

Kerk ©   (27.01.05 15:52) [42]
а окно разве не объект shell ? как оно с ядром связано?

Так и говорю, что окно - НЕ объект ядра

Игорь Шевченко ©   (27.01.05 15:54) [43]
Ой. Откуда информация ?

Рихтер на ушко шепнул ;-)

А файл

А что  файл? Разве когда мы открываем файл мы не создаем НОВЫЙ объект ядра, даже если этот же файл был открыт другим процессом?


 
Игорь Шевченко ©   (2005-01-27 16:04) [46]

jack128 ©   (27.01.05 16:01) [45]


> Рихтер на ушко шепнул ;-)
>
> А файл
> А что  файл? Разве когда мы открываем файл мы не создаем
> НОВЫЙ объект ядра, даже если этот же файл был открыт другим
> процессом?


Я очень извиняюсь, а медведь между Рихтером и тобой не пробегал в тот момент, когда он шептал ?

"Разве когда мы открываем файл мы не создаем
НОВЫЙ объект ядра, даже если этот же файл был открыт другим
процессом?" - нет, не создаем. Объект один и тот же.

Так чьими объектами являются окна ?


 
esu ©   (2005-01-27 16:04) [47]

хотя да, действительно не объект


 
default ©   (2005-01-27 16:04) [48]

jack128 ©   (27.01.05 15:50) [41]
бред
TerminateProcess (понятно что при этом система сама всё закроет)
но тем не менее
когда захочу тогда и порешу:)
"Учет пользователей объектов ядра
Объекты ядра принадлежат ядру, а не процессу. Иначе говоря, если Ваш процесс вызывает функцию, создающую объект ядра, а затем завершается, объект ядра может быть не разрушен. В большинстве случаев такой объект все же разрушается; но если созданный Вами объект ядра используется другим процессом, ядро запретит разрушение объекта до тех пор, пока от него не откажется и тот процесс.

Ядру известно, сколько процессов использует конкретный объект ядра, посколь ку в каждом объекте есть счетчик числа его пользователей. Этот счетчик — один из элементов данных, общих для всех типов объектов ядра. В момепт создания объекта счетчику присваивается 1. Когда к существующему объекту ядра обращается другой процесс, счетчик увеличивается на 1. А когда какой-то процесс завершается, счетчики всех используемых им объектов ядра автоматически уменьшаются на 1. Как только счетчик какого-либо объекта обнуляется, ядро уничтожает этот объект."
Рихтер
потоки принадлежат процессу а окна потокам отсюда окна есть


 
default ©   (2005-01-27 16:07) [49]

потоки принадлежат процессу а окна потокам отсюда окна есть собственность процесса а не ядра ОС


 
Игорь Шевченко ©   (2005-01-27 16:10) [50]

esu ©   (27.01.05 16:04) [47]

Почему ?

default ©   (27.01.05 16:07) [49]

А хуки ?


 
jack128 ©   (2005-01-27 16:11) [51]

default ©   (27.01.05 16:04) [48]
TerminateProcess (понятно что при этом система сама всё закроет)

система уничтожить запущенную программу, но объект ядра не будет уничтожен пока не будут закрыты все хендлы.
Игорь Шевченко ©   (27.01.05 16:04) [46]
Я очень извиняюсь, а медведь между Рихтером и тобой не пробегал в тот момент, когда он шептал ?

Цитата:
Ядру известно, ссколько процессов использует конкретный объект ядра, поскольку в каждом объекте есть счетчик числа его пользователей. Этот счетчик - один из элеменов данных общих для всех типов объектов ядра. Когда к существующему объекту ядра обращается другой процесс, счетчик увеличивается на 1. А когда какой то процесс завершается, счетчик всех используемых им оъектов ядра автоматически уменьшается на 1. Как только счетчик какого либо объекта обнуляется, ядро уничтожает этот объект.
Конец цитаты


 
Игорь Шевченко ©   (2005-01-27 16:14) [52]

jack128 ©   (27.01.05 16:11) [51]


> Цитата:
> Ядру известно, ссколько процессов использует конкретный
> объект ядра, поскольку в каждом объекте есть счетчик числа
> его пользователей. Этот счетчик - один из элеменов данных
> общих для всех типов объектов ядра. Когда к существующему
> объекту ядра обращается другой процесс, счетчик увеличивается
> на 1. А когда какой то процесс завершается, счетчик всех
> используемых им оъектов ядра автоматически уменьшается на
> 1. Как только счетчик какого либо объекта обнуляется, ядро
> уничтожает этот объект.
> Конец цитаты


1. И причем здесь твое утверждение про файл, открытый другим процессом ?
2. С окнами тоже самое. И счетчик, и уничтожение по завершению процесса или потока. Можешь провести эксперимент - через Task Manager завершить какой-либо процесс с открытыми окнами и посмотреть, что становится с этими окнами. Удивишься :)


 
jack128 ©   (2005-01-27 16:20) [53]

Игорь Шевченко ©   (27.01.05 16:14) [52]
2. С окнами тоже самое. И счетчик, и уничтожение по завершению процесса или потока. Можешь провести эксперимент - через Task Manager завершить какой-либо процесс с открытыми окнами и посмотреть, что становится с этими окнами. Удивишься :)

Провел еще до того, как начал этот разговор.
Нажимаю кнопку1
procedure TForm1.Button1Click(Sender: TObject);
begin
 h := FindWindow("TMainForm", nil);
 Win32Check(h <> 0)
end;
Закрывают ту программу, которой это окно пренадлежит
Нажимаю кнопку2
procedure TForm1.Button2Click(Sender: TObject);
var
 r: TRect;
begin
 Win32Check(GetWindowRect(h, r)); // Ошибка - недопустимый дискриптор окна.
end;

Игорь Шевченко ©   (27.01.05 16:14) [52]
1. И причем здесь твое утверждение про файл, открытый другим процессом ?

Игорь, не надо передергивать.
Ото был ответ на вот этот вопрос
Игорь Шевченко ©   (27.01.05 15:54) [43]
> Уж точно не ядра. Окно может уничтожить кто угодно и когда
> угодно, а, например, процесс только ядро после того как будут закрыты все хендлы

Ой. Откуда информация ?


 
Игорь Шевченко ©   (2005-01-27 16:21) [54]

Одно из главных отличий окон (меню, хуков и прочих объектов Win32) от объектов, описанных у Рихтера, это то, что ими управляет не Object Manager из ntoskrnl, а Object Manager из Win32k.sys. Они, разумеется, не обладают всей функциональностью тех объектов, которые описаны у Рихтера (например, не имеют дескриптора защиты, их описатели не являются уникальными для каждого процесса, и т.д.), но тем не менее, управляет ими ядерная часть подсистемы Win32.


 
nikkie ©   (2005-01-27 16:21) [55]

окно - не объект ядра. это User-объект.

Рихтер, стр. 648:
Однако два User-объекта (окна и ловушки) принадлежат только создавшему их потоку. И вновь, если поток создает окно или устанавливает ловушку, а потом завершается, операционная система автоматически уничтожает окно или удаляет ловушку.


 
Игорь Шевченко ©   (2005-01-27 16:22) [56]

nikkie ©   (27.01.05 16:21) [55]

А user-объекты где находятся ? :)


 
Игорь Шевченко ©   (2005-01-27 16:24) [57]

Естественно, мой спор не с Рихтером, Рихтер пишет все правильно :)


 
nikkie ©   (2005-01-27 16:26) [58]

хотел написать еще описание объектов ядра из Рихтера, но Игорь уже это и так сделал:

>Они, разумеется, не обладают всей функциональностью тех объектов, которые описаны у Рихтера (например, не имеют дескриптора защиты, их описатели не являются уникальными для каждого процесса, и т.д.)

добавлю такую цитатку:
Объекты ядра принадлежат ядру, а не процессу. Иначе говоря, если Ваш процесс вызывает функцию, создающую объект ядра, а затем завершается, тобъект ядра может быть не разрушен.


 
Digitman ©   (2005-01-27 16:27) [59]


> jack128 ©   (27.01.05 16:01) [45]
> окно - НЕ объект ядра


чушь ты несешь.
окно в Windows как было отродясь объектом ядра, так им и осталось по сей день.
и не важно при этом, кто/что и при каких условиях имеет возможность/право уничтожать сей объект.


 
Digitman ©   (2005-01-27 16:34) [60]


> jack128


ну если под ядром подразумевать только "kernel"-обозавнные исп.модули, тот тут ты, конечно же, прав)


 
nikkie ©   (2005-01-27 16:35) [61]

>[56] Игорь Шевченко
А user-объекты где находятся ? :)

мне какая разница? я прикладной программист, использую API, как именно внутри эти объекты реализованы меня не волнует. есть общепринятое разделение по признакам, которые могут быть описаны в терминах API.

Рихтер описывает по крайней мере три признака объектов ядра:
- зависимость описателей объектов ядра от процесса
- объект ядра не принадлежит процессу, его создавшему, система ведет счетчик процессов его использующих
- возможность использования дескриптора защиты

ни один из этих признаков для окна не выполнен.


 
jack128 ©   (2005-01-27 16:35) [62]

jack128 ©   (27.01.05 16:11) [51]
Этот счетчик - один из элеменов данных общих для всех типов объектов ядра.
(с) Рихтер

Это правда или ложь?

Digitman ©   (27.01.05 16:27) [59]
окно в Windows как было отродясь объектом ядра, так им и осталось по сей день.
и не важно при этом, кто/что и при каких условиях имеет возможность/право уничтожать сей объект.

Ваше определение объекта ядра?


 
nikkie ©   (2005-01-27 16:44) [63]

Рихтер, стр.31
Кроме объектов ядра Ваша программа может использовать объекты других типов - меню, окна, курсоры мыши, кисти и шрифты. Они относятся к объектам User или GDI. Новичок в программировании для Windows может запутаться, пытаясь отличить объекты User или GDI от объектов ядра.
:)))


 
Nous Mellon ©   (2005-01-27 16:45) [64]

Вот они наши новички Дижитмэн и ИШ. :)


 
Digitman ©   (2005-01-27 16:45) [65]


> jack128 ©   (27.01.05 16:35) [62]


как это ни странно, но ОЯ с т.з. прикл.задачи - это объект, созданный успешным вызовом одной из WinAPI-ф-ций.


 
Digitman ©   (2005-01-27 16:48) [66]


> nikkie ©   (27.01.05 16:44) [63]


> User или GDI


а кому нужно такое "ядро" без USER и GDI ?


 
jack128 ©   (2005-01-27 16:51) [67]

Digitman ©   (27.01.05 16:45) [65]
как это ни странно, но ОЯ с т.з. прикл.задачи - это объект, созданный успешным вызовом одной из WinAPI-ф-ций.

хм. Ну не знаю. Я больше ориентируюсь на определение Рихтера. Прежде всего на
объект ядра не принадлежит процессу, его создавшему, система ведет счетчик процессов его использующих
и возможность использования дескриптора защиты


 
Kerk ©   (2005-01-27 16:53) [68]

Digitman ©   (27.01.05 16:48) [66]
а кому нужно такое "ядро" без USER и GDI ?


это другой вопрос ;)


 
nikkie ©   (2005-01-27 16:53) [69]

>[66] Digitman
>а кому нужно такое "ядро" без USER и GDI ?
например, серверным приложениям.


 
Digitman ©   (2005-01-27 16:55) [70]


> nikkie


на Рихтера можно ссылаться сколь угодно, но и без него понятно, что есть глобальные (независимые от контекстов процессов) объекты "ядра", а есть контекстно-зависимые (зависимые от контекстов конкр.процессов) объекты того же самого "ядра".


 
esu ©   (2005-01-27 16:58) [71]


> Digitman ©   (27.01.05 16:45) [65]

Ну если так то объект :)

Ладно, определения мы не будем оспаривать. Я во второй раз почему-то сориентировался на взоможность использования SECURITY_ATTRIBUTES ну да ладно :)


 
default ©   (2005-01-27 16:58) [72]

в [61] всё верно сказано
можно накрайняк открыть SDK:)


 
Игорь Шевченко ©   (2005-01-27 17:01) [73]

Прежде чем спорить о том, что является объектом ядра или не является им, неплохо бы ввести определение ядра. Если под ядром имеется в виду диспетчер объектов, то тогда к объектам ядра относится порядка 20-40 типов объектов, которыми он и управляет . Если под ядром имеется в виду еще и те части подсистем, которые работают в режиме ядра, тогда количество "объектов ядра" несколько увеличивается.


 
Digitman ©   (2005-01-27 17:02) [74]


> nikkie ©   (27.01.05 16:53) [69]
> например, серверным приложениям.


ну эт ты загнул.

"серверное" приложение "серверному" приложению - рознь.
вот куда деваться серв.приложению, если ему позарез нужно выполнить PostThreadMessage(), в то время как nikkie ему сказал, мол, не нужен тебе USER32 ?


 
nikkie ©   (2005-01-27 17:03) [75]

>на Рихтера можно ссылаться сколь угодно, но и без него понятно, что...
а ссылки на MSDN и авторитет Microsoft тоже не принимаются?
может тогда и обсуждать ничего не надо, если все по понятиям решается?

Platform SDK: Interprocess Communications
Object Categories
The system provides three categories of objects: user, graphics device interface (GDI), and kernel. The system uses user objects to support window management, GDI objects to support graphics, and kernel objects to support memory management, process execution, and interprocess communications (IPC). For information about creating and using a specific object, refer to the associated overview.

User object Overview
Accelerator table Keyboard Accelerators  
Caret Carets  
Cursor Cursors  
DDE conversation Dynamic Data Exchange Management Library  
Desktop Window Stations and Desktops
Hook Hooks  
Icon Icons  
Menu Menus  
Window Windows  
Window position Windows  
Window station Window Stations and Desktops  

GDI object Overview
Bitmap Bitmaps  
Brush Brushes  
DC Device Contexts  
Enhanced metafile Metafiles  
Enhanced-metafile DC Metafiles  
Font Fonts and Text  
Memory DC  Device Contexts  
Metafile Metafiles  
Metafile DC  Metafiles  
Palette Colors  
Pen and extended pen Pens  
Region Regions  

Kernel object Overview
Access token Access Control
Change notification File I/O  
Communications device Communications  
Console input Consoles and Character-Mode Support
Console screen buffer Consoles and Character-Mode Support
Event Synchronization  
Event log Event Logging  
File File I/O  
File mapping File Mapping  
Find file File I/O  
Heap Memory Management  
Job Job Objects
Mailslot Mailslots  
Module Dynamic-Link Libraries  
Mutex Synchronization  
Pipe Pipes  
Process Processes and Threads  
Semaphore Synchronization  
Socket Windows Sockets 2
Thread Processes and Threads  
Timer Synchronization  
Update resource Resources


 
Игорь Шевченко ©   (2005-01-27 17:04) [76]

nikkie ©   (27.01.05 16:35) [61]


> мне какая разница? я прикладной программист, использую API,
> как именно внутри эти объекты реализованы меня не волнует.


Тогда зачем тебе вообще знать, что такое объекты ядра ? :)


> Рихтер описывает по крайней мере три признака объектов ядра:
> - зависимость описателей объектов ядра от процесса
> - объект ядра не принадлежит процессу, его создавшему, система
> ведет счетчик процессов его использующих
> - возможность использования дескриптора защиты


Первые два признака действительны также для хуков и курсоров :)

С уважением,


 
default ©   (2005-01-27 17:06) [77]

Игорь Шевченко ©   (27.01.05 17:01) [73]
нам следовало бы разуметь под объектами ядра то что написано в официальной документации(SDK) в разделе kernel objects
там есть их список, есть их отличительные черты


 
Игорь Шевченко ©   (2005-01-27 17:07) [78]

nikkie ©   (27.01.05 17:03) [75]


> Kernel object Overview


Что-то они там намешали...Модули и DLL не имеют счетчика ссылок, управляемого ядром и дескрипторов защиты. А также принадлежат процессу, а не системе. Heaps тоже.

С уважением,


 
esu ©   (2005-01-27 17:11) [79]


> Object Categories
> The system provides three categories of objects: user, graphics
> device interface (GDI), and kernel. The system uses user
> objects to support window management, GDI objects to support
> graphics, and kernel objects to support memory management,
> process execution, and interprocess communications (IPC).
>

Терминология. Кто-то подразумевает объектами ядра все объекты, а кто-то system->kernel :)

В любом случае у нас используется слово Ядро а оно может подразумевать и как все системные объекты так и только одну из категорий.


 
Digitman ©   (2005-01-27 17:14) [80]


> nikkie ©   (27.01.05 17:03) [75]


тогда выскажи. пож., свое соображение, почему в приведенной цитате IPC-объекты относятся к kernel objects, в то время как некие ф-ции доступа/управления IPC-объектов отнесены к user32, та же PostThreadMessage(), например .. ведь подобного рода очереди и их диспетчеризацию, по идее, должно "вести" именно ЯДРО, а не "нахлобучки" к нему типа USER ?



Страницы: 1 2 3 4 вся ветка

Форум: "Потрепаться";
Текущий архив: 2005.02.20;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.64 MB
Время: 0.039 c
4-1105200919
Лёха
2005-01-08 19:15
2005.02.20
BITMAP


1-1107347080
Dmitry_04
2005-02-02 15:24
2005.02.20
Скинообразная форма непрямоугольногоя


1-1107354569
aleks-ran
2005-02-02 17:29
2005.02.20
Значения Low и High в многомерных динамических массивах


4-1104127474
iNBox
2004-12-27 09:04
2005.02.20
OEP


1-1107852705
Erik1
2005-02-08 11:51
2005.02.20
Какую создать структуру для принятия решения о иницализации?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский