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

Вниз

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

 
KSergey ©   (2005-01-26 16:49) [0]

В разрезе ветки "тест при приеме на работу" в основной хотелось бы задать такой вопрос, давно меня мучающий.

Здесь часто слышно от признанных корифеев, что программист - это тот, кто знает базу, алгоритмы, умеет все это применить, а вот конкретная платформа/язык - типа не главное, можно быстренько все освоить и все такое, однако вот вопрос:

1. Сколько времени надо работать на конкретной платформе, чтобы ответить на вопросы ЮЗ?

2. Ведь приведенные тесты - именно по поводу приема на работу!

Вот мне и не понтно все же: или я путаю вакансии программиста и кодера или путаю что-то другое? Куда может строится человек, знающий круто базу, но не работавшей на конкретной платформе?

Может даже наберусь наглости, и спрошу персонально у ЮЗ (прошу не принимать за наезд и все такое)

Никто не ставит под сомнение отменое знание вами базы.
Вот Вы какой язык не знаете? На какой платформе? Ну положим C# (я просто для примера, не хочу обидеть!)

Очевидно, что тут и платформа своя, и язык с нюансами.
Безусловно, Вы освоите это довольно быстро.
Однако как быстро наберете мощь для прохождения теста аналогичного уровня? А как же тогда с работой?
Или я все же что-то путаете? Или в призывах "платформа -это мощь!" есть доля лукавства?

Я не оспариваю факт, что без платформы скоро упрешься и будет принципиальный потолок, однако как на работу попасть?

Только честно...


 
KSergey ©   (2005-01-26 16:51) [1]

"платформа -это мощь!" читать "база - это мощь!"


 
Nikolay M. ©   (2005-01-26 17:01) [2]


> Однако как быстро наберете мощь для прохождения теста аналогичного
> уровня? А как же тогда с работой?

А тебе шашечки или ехать?
Что важнее - уметь проходить тесты или конечный результат, за который, собственно, платят зарплату?


 
Александр Иванов ©   (2005-01-26 17:04) [3]

KSergey ©   (26.01.05 16:51) [1]
И потом не все тесты направлены на получение точного ответа, многие должны показать как человек будет искать ответ на вопрос.


 
jack128 ©   (2005-01-26 17:17) [4]

Nikolay M. ©   (26.01.05 17:01) [2]
конечный результат, за который, собственно, платят зарплату?

Если ты не пройдешь тест при приеме на работу, то до конечного реультата дело не дойдет ;-)


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


> Однако как быстро наберете мощь для прохождения теста аналогичного
> уровня? А как же тогда с работой?


Обычно работу ищут уже набрав мощь :)

С уважением,


 
Nikolay M. ©   (2005-01-26 18:04) [6]


> jack128 ©   (26.01.05 17:17) [4]
> конечный результат, за который, собственно, платят зарплату?
> Если ты не пройдешь тест при приеме на работу, то до конечного
> реультата дело не дойдет ;-)

Ни на одном из мест, где я работал, на собеседовании меня не просили решать зубодробительные тесты. А вот в фирмы, где, наоборот, просили и куда меня потом по результатам этих тестов звали, я не пошел. Просто потому, что я хочу на работе решать вопросы, скажем, синхронизации пары-тройки БД или создания бэкофиса, а не клацковать простым кодером, выворачивая мозги над чисто техническими вопросами. Хотя последним тоже иногда приходится заниматься, воспринимаю это как необходимое зло.


 
Юрий Зотов ©   (2005-01-26 19:21) [7]

> KSergey ©   (26.01.05 16:49)  

Сначала надо бы пояснить. Да, мы используем у себя для соискателей такой тест (даже еще и покруче). И еще ни один человек полностью и точно на все вопросы не ответил. Максимальным был результат 60 баллов из 100 возможных (20 вопросов, каждый оценивается по 5-балльной системе).

Но это совсем не значит, что к нам невозможно устроиться. Цель такого тестирования не в том, чтобы кого-то отсеять, а в том, чтобы выяснить сильные и слабые стороны претендента. И еще выяснить, соответствует ли его уровень той зарплате, на которую он претендует.

У нас, как и везде, работают разные люди. Кто-то пишет ядро, кто-то - скрипты, кто-то - прикладной код и т.д. Для каждой из этих работ требуется разный уровень и знания в разных областях. И если соискатель набрал даже 10 баллов из 100, но мы видим, что он соответствует одной из имеющихся вакансий - милости просим.

Теперь попробую ответить на вопросы.

> Вот Вы какой язык не знаете? На какой платформе?

Очень многие на очень многих. Перечислять - места не хватит.
:о)

> Однако как быстро наберете мощь для прохождения теста
> аналогичного уровня?


Трудно сказать. Это очень сильно зависит от характера повседневной работы. Одно дело, когда большую часть времени занимаешься бумажками-писульками, другое - когда по 10 часов в день шпаришь на Асме, третье - когда то же самое на ЯВУ. И еще смотря что на этом ЯВУ делать приходится, насколько оно сложно.

Конкретно могу сказать вот что, а там уж судите сами. Доисторическую эпоху опускаю, начну с EC ЭВМ.

1. EC ЭВМ, OS 360 и PL/1 были освоены прмерно за полгода, на уровне практически свободного владения PL/1 и JCL (кто знает - тот поймет, хе-хе), работы с устройствами.

1. На ДВК-2М, RT11SJ и Fortran перепрыгнул за пару месяцев. Причем с языка на язык - просто сел и сразу начал писать, а 2 месяца понадобилось на освоение машины и системы на уровне их администрирования и разработки системных утилит для себя (гы... на Фортране, вот ей-богу).

2. На i86, DOS и Pascal перешел за пару недель. Наибольшее время заняло освоение непривычного языка и среды разработки. Еще через пару месяцев работал с прерываниями напрямую. Потом были еще и другие языки, но это уж потом.

3. На Win16, Delphi 1 и ООП перескочил тоже примерно за пару недель. Причем писать-то начал практически сразу, а время потребовалось, чтобы выйти на уровень грамотного написания компонентов, знания структуры DCL (так тогда VCL называлясь) и понимания, где и почему есть OnCreate. А где-то через месяц начал понимать и то, как работает сама IDE. WinAPI занял побольше времени, на более-менее приличный уровень вышел значительно позже.

4. С Win16 препрыгнул на Win32 примерно за столько же времени, сколько потребовалось на установку Windows 95 и Delphi 2.
:о)

Так что судите сами - помогает база, или мешает.

> А как же тогда с работой?

Как написано выше. Работа разная бывает. Никто же не поручит студенту сразу ядро писать, верно? А вот диалоговые формы - это другой вопрос, с этим он справится. И они тоже нужны.

> Или в призывах "платформа -это мощь!" есть доля лукавства?

Никакого лукавства. Принципы везде если не одинаковы, то очень схожи, так что переход с одной платформы на другую становится даже проще. А уж чтобы без знания базы стать сильным программером - об этом можно даже и не мечтать.

> однако как на работу попасть?

Приходить и устраиваться. Далеко не всегда конторе нужен именно сильный программер, очень часто бывают нужны и средние. Это ведь еще и экономия - если нужен человек для сравнительно простой работу, то на фига ему больше платить-то?

А потом расти, уже по ходу пьесы.


 
KSergey ©   (2005-01-26 21:51) [8]

Хорошо, спасибо
Я получил ответ на вопрос.


 
KilkennyCat ©   (2005-01-26 22:28) [9]

Я ни разу не мог пройти подобные тесты. Тест Юрия Зотова я бы вообще не прошел. Но это вовсе не означает, что я не смог бы работать. Просто работа - это не олимпиада, всегда можно воспользоваться справочниками, советами и пр.
Работа и есть самый главный тест.


 
Юрий Зотов ©   (2005-01-26 22:45) [10]

> KilkennyCat ©   (26.01.05 22:28) [9]

> Работа и есть самый главный тест.

Это точно. Тест нужен лишь затем, чтобы определить, какая именно работа больше всего соответствует кандидату.

Кстати, человек, ответивший на 60% вопросов к нам так и не устроился. Никто и не спорил, что программер он достаточно сильный, но просто в тот момент у нас не было подходящей для него работы. А более простая не подошла уже ему, по зарплате.

В то же время, люди, ответившие на 20-30% вопросов, у нас работают, и со СВОИМИ задачами вполне справляются.


 
KilkennyCat ©   (2005-01-26 23:06) [11]


> Тест нужен лишь затем, чтобы определить, какая именно работа
> больше всего соответствует кандидату


Ну и отсеить "бананоедов". Не без этого тоже ведь.

Хотя, формулировка стопроцентная, если допустить в "какая именно работа" предположение не только о работе в данной фирме.


 
Palladin ©   (2005-01-26 23:45) [12]


> Я получил ответ на вопрос.

Ты не получил ответ на вопрос. Ты прочитал мнение и впечатление от конкретного случая.


 
Piter ©   (2005-01-26 23:53) [13]

KilkennyCat ©   (26.01.05 22:28) [9]
Я ни разу не мог пройти подобные тесты. Тест Юрия Зотова я бы вообще не прошел


а чем отличается "не смог бы пройти" от "вообще бы не прошел"? :)


 
KilkennyCat ©   (2005-01-27 00:07) [14]


> Piter ©   (26.01.05 23:53) [13]


я не добавлял "смог" :)
тесты, которые я проходил были проще-с, я справлялся с 40-60 процентами... но все равно не 100%. В упомянутом же тесте я ничего не знаю :)


 
Piter ©   (2005-01-27 00:12) [15]

Palladin ©   (26.01.05 23:45) [12]
Ты не получил ответ на вопрос. Ты прочитал мнение и впечатление от конкретного случая


слушай, зачем ты пошел в программисы? По-моему, тебе надо было идти в философы :)

P.S. Ты сейчас прочитал чисто мое впечатление в конкрентном случае :)


 
Piter ©   (2005-01-27 00:32) [16]

KilkennyCat ©   (27.01.05 0:07) [14]
В упомянутом же тесте я ничего не знаю :)


ну-ну, даже я знаю :)

>Напишите пример перегрузки процедурыты

что, не напишешь? Правда, непонятно что имеется в виду, overload или override, но в общем без разницы. Если ты хоть минимально ООП знаешь - должен написать

try
Obj := TMyObject.Create;
...
finally
Obj.Free;
end;


вообще элементарно. Понятное дело, что try должен быть ПОСЛЕ конструктора. Ибо если в конструкторе возникло исключение - то объект считай не создан, а значит и освобождать нечего.

>Что такое объекты ядра?

неужели ты никогда не слышал о потоках и процессах? :)
А ведь это объекты ядра.
Да я думаю и о мьютексах слышал, о семафорах...

>Приводят ли вызовы функций LoadLibrary/FreeLibrary
>к загрузке DLL в ОЗУ или выгрузке из ОЗУ?

ну тоже не особо сложный вопрос. Надо только знать, зачем вообще библиотеки придумали

>Написать стандартный код цикла выборки сообщений

ну блин, стандартный цикл то, типа:

while GetMessage(bla bla) do

неужели не видел?

>Написать модуль, содержащий класс, который
>позволяет создать лишь один свой экземпляр

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

Грамотно реализовать - наверное, не каждый сможет.


 
KilkennyCat ©   (2005-01-27 00:52) [17]


> Piter ©   (27.01.05 00:32) [16]


не поверишь, но большинство таких вещей я знаю как "стукни загогулиной по выпупоклине" :)

то есть, когда идет терминология, я ни хрена не соображаю. Пока не гляну в справочнике. Наверное, слишком долго сидел на символьном Искры-1256 :)


 
GuAV ©   (2005-01-27 01:21) [18]


> вообще элементарно. Понятное дело, что try должен быть
> ПОСЛЕ конструктора. Ибо если в конструкторе возникло
> исключение - то объект считай не создан, а значит и
> освобождать нечего.


Это не полный ответ.


> ну тоже не особо сложный вопрос. Надо только знать,
> зачем вообще библиотеки придумали


И всё же< приводят ли ? :)


> while GetMessage(bla bla) do


Ошибка уже здесь.


>>Написать модуль, содержащий класс, который
> >позволяет создать лишь один свой экземпляр


Лишь один - это на исп. модуль ? или на всю систему ?


 
jack128 ©   (2005-01-27 01:28) [19]

Piter ©   (27.01.05 0:32) [16]
неужели ты никогда не слышал о потоках и процессах? :)
А ведь это объекты ядра.
Да я думаю и о мьютексах слышал, о семафорах...

Ты не ответил на вопрос даже на троечку ;-) Ведь никто не просил приводить ПРИМЕРЫ объектов ядра. Просили объяснить что это такое. А вот такие вещи знает далеко не каждый..

Piter ©   (27.01.05 0:32) [16]
Напишите пример перегрузки процедурыты

что, не напишешь? Правда, непонятно что имеется в виду, overload или override, но в общем без разницы. Если ты хоть минимально ООП знаешь - должен написать
Ну этоо вообще на ноль баллов ;-)  Ибо не знаешь, что такое процедура ;-)

Так что вопросы не тривиальны, для ответа на каждый из них нужно углубится в изучение соответствующего раздела программирования..


 
Gero ©   (2005-01-27 01:29) [20]


> Ибо если в конструкторе возникло исключение - то объект
> считай не создан, а значит и освобождать нечего.

Если в конструкторе возникнет исключение, то мы еще и AV получим в последствии…

> Грамотно реализовать - наверное, не каждый сможет.

Что значит грамотно и чем не устраивает решение с доп. переменной?


 
Gero ©   (2005-01-27 01:33) [21]


> для ответа на каждый из них нужно углубится в изучение соответствующего
> раздела программирования

И с перегрузкой тоже?

procedure a(n: integer); overload;
procedure a(s: string); overload;

...


 
jack128 ©   (2005-01-27 01:40) [22]

Gero ©   (27.01.05 1:33) [21]
И с перегрузкой тоже?


Если ты не заметил, это лишь один из четырех подпунктов вопроса на знание языка, общее умение программировать и грамотность стиля по сумме ответов, я думаю можно без проблем ответить, знаешь ты Object Pascal или нет.


 
TUser ©   (2005-01-27 06:50) [23]


> Юрий Зотов ©   (26.01.05 19:21) [7]

Да вы настоящий полиглот ...
А если честно - вот этот тест он действительно, является свидетельством больших знаний? Я вот, например, процентов на 50 вопросов отвечу без справки, причем про 30 процентов - могу бить себя пяткой в грудь в уверенности, что я прав. Остальные 20 - скорее всего тоже не ошибся. Но мне еще ооочень далеко до того времени, когда я скажу, что я хороший программист.


 
Arm79 ©   (2005-01-27 10:34) [24]

TUser ©   (27.01.05 06:50) [23]

Тогда я вообще молчу в тряпочку...


 
TUser ©   (2005-01-27 11:09) [25]

Я еще при этом могу добавить, что вопросов на этом форуме, на которые я не знаю ответа, - море. И даже много таких, на которые я не могу сразу сказать, с какой стороны начинать копать.


 
GuAV ©   (2005-01-27 12:47) [26]


> Если в конструкторе возникнет исключение, то мы еще и
> AV получим в последствии…


Не факт. Может получим а может и нет.


 
Rule ©   (2005-01-27 13:18) [27]

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


 
CDF ©   (2005-01-27 13:38) [28]

А где можно посмотреть эти вопросы? Ужасно интересно :о)


 
KSergey ©   (2005-01-27 13:41) [29]

> [28] CDF ©   (27.01.05 13:38)

Конференция "основная", ветка "вопросы при приеме на работу"


 
CDF ©   (2005-01-27 13:42) [30]

Спасибо :)


 
Sergey_Masloff   (2005-01-27 13:50) [31]

Rule ©   (27.01.05 13:18) [27]
>Странно, но вот вопрос ЮЗ,
Да у меня возник тот же вопрос но с другой несколько колокольни. Мне интересен опыт "выращивания". При том что человек на "рисовании диалогов" загружен весь рабочий день (а иначе зачем он нужен?). Пока же у меня тупик. Вот я "куратор" у пары человек. Работают довольно долго уже, ребята толковые. Но не могу я им дать серьезное - как всегда дедлайн вчера и писать надо сразу и без права на ошибку. А "диалоги" сколько можно рисовать?
 Про диалоги конечно я утрирую но сейчас получается что я пишу основной кож и перепоручаю всякие вспомогательные вещи (проверяя потом). Но это же тупик?


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

Sergey_Masloff   (27.01.05 13:50) [31]


>  Мне интересен опыт "выращивания".


Наш не подойдет ? :)

С уважением,


 
KSergey ©   (2005-01-27 14:08) [33]

> [32] Игорь Шевченко ©   (27.01.05 13:58)
> Наш не подойдет ? :)

Мне - вполне ;)
С удовольствием бы послушал.


 
Sergey_Masloff   (2005-01-27 14:11) [34]

Игорь Шевченко ©   (27.01.05 13:58) [32]
 Я даже хотел упомянуть ;-) К сожалению, воспроизводимость
низкая. Наверное мои "кураторские" способности просто не блестящие...


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

KSergey ©   (27.01.05 14:08) [33]

Боюсь, что ездить далеко придется :)

Дел в том, что Сергей Маслов в курсе нашего опыта "выращивания и кураторства", если это можно так назвать. Отсюда и мой пост [32].

Хитростей и секретов никаких нету.

С уважением,


 
Piter ©   (2005-01-27 15:18) [36]

GuAV ©   (27.01.05 1:21) [18]
Это не полный ответ.


а что тебе не нравится? Про AV упомянуть?
Ну это и так понятно, если объект не создан, то вызов его метода может окончиться плохо.

И всё же< приводят ли ? :)

LoadLibrary приводит, если библиотека еще не загружена.
FreeLibrary приводит к выгрузке из памяти, если больше никто библиотеку не использует (счетчик ссылок оказался 0).

Ну можно добавить, что в реальности библиотека, конечно, не выгружается - работает механизм кеширования.

Ошибка уже здесь.

и в чем же здесь ошибка?

Лишь один - это на исп. модуль ? или на всю систему ?

я думаю на модуль

jack128 ©   (27.01.05 1:28) [19]
Ты не ответил на вопрос даже на троечку ;-) Ведь никто не просил приводить ПРИМЕРЫ объектов ядра. Просили объяснить что это такое. А вот такие вещи знает далеко не каждый..


ну не надо. Возможно, ответ не очень корректен - так я уточню.
Я не могу дать определение, что такое объекты ядра. Этим пусть Рихтер занимается. Зато я знаю, что это такое, зачем нужны, как с ними работать.

jack128 ©   (27.01.05 1:28) [19]
Ну этоо вообще на ноль баллов ;-)  Ибо не знаешь, что такое процедура ;-)


да? Ну обосновывай, Жень, что я не знаю, а то обижусь.
И может ты расскажешь, что такое процедура?

Gero ©   (27.01.05 1:29) [20]
Что значит грамотно и чем не устраивает решение с доп. переменной?


ну смотря как ты это реализуешь. Вот напиши, как бы ты это сделал


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


> FreeLibrary приводит к выгрузке из памяти, если больше никто
> библиотеку не использует (счетчик ссылок оказался 0).
>
> Ну можно добавить, что в реальности библиотека, конечно,
> не выгружается - работает механизм кеширования.


Какой-какой механизм ?


 
Kerk ©   (2005-01-27 15:34) [38]

Piter ©   (27.01.05 15:18) [36]
Ну этоо вообще на ноль баллов ;-)  Ибо не знаешь, что такое процедура ;-)

да? Ну обосновывай, Жень, что я не знаю, а то обижусь.


имхо, процедуру с методом спутал


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

Piter ©   (27.01.05 15:18) [36]
да? Ну обосновывай, Жень, что я не знаю, а то обижусь.

Пожалуйста,
Piter ©   (27.01.05 0:32) [16]
Правда, непонятно что имеется в виду, overload или override, но в общем без разницы


ЯЯ знаю, что это описка, не больше. Ты просто спутал процедуры и методы. (см [21]) Но это я, а вот будущий работодатель тебя не знает, потому может подумать, что ты вообще не видишь разницы между методом и процедурой.

Piter ©   (27.01.05 15:18) [36]
Зато я знаю, что это такое
Ты уверен?  Подумай, ведь не с проста все эти объекты называют объектами ядра, а например, окна объектом ядра не являются. Есть некий признак по которому однозначно определяется объект ядра это или нет. Исходный вопрос в том, что нужно назватьь этот признак..
зы Миш - это вовсе не наезд, наёюсь ты понимаешь?


 
Игорь Шевченко ©   (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 ?


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

default ©   (27.01.05 17:06) [77]


> нам следовало бы разуметь под объектами ядра то что написано
> в официальной документации(SDK) в разделе kernel objects


Читаем в разделе Handles and Objects:

"An object is a data structure that represents a system resource, such as a file, thread, or graphic image. An application cannot directly access object data or the system resource that an object represents. Instead, an application must obtain an object handle, which it can use to examine or modify the system resource. Each handle has an entry in an internally maintained table"

Про раздел "kernel object", куда относятся DLL и Heaps, а также ресурсы, я уже высказался.

С уважением,


 
default ©   (2005-01-27 17:19) [82]

Игорь Шевченко ©   (27.01.05 17:15) [81]
ну счётчик ссылок-то у DLL есть(
Вы дали ссылку на объекты, а не на объекты ядра о чём шла речь


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

default ©   (27.01.05 17:19) [82]


> ну счётчик ссылок-то у DLL есть(


А у окна Handle есть. И что ?


 
default ©   (2005-01-27 17:22) [84]

Игорь Шевченко ©   (27.01.05 17:20) [83]
я это на Ваше "Модули и DLL не имеют счетчика ссылок, управляемого ядром и дескрипторов защиты."


 
Piter ©   (2005-01-27 17:24) [85]

Игорь Шевченко ©   (27.01.05 15:30) [37]
Какой-какой механизм ?


я его обозвал кешированием. А как это правильно назвать?
Я понимаю, что кеширование это нечто упреждающее и не совсем верно тут говорить о кешировании. Но я просто не знаю правильного названия.

jack128 ©   (27.01.05 15:41) [39]
Ты просто спутал процедуры и методы


ну тут уже терминология...
Почему вы решили, что процедура описанная в классе уже не является процедурой? Собственно, если объявление начинается с ключевого слова procedure - то это, по моему мнению, процедура и есть. Просто процедуры и функции класса называют методами. Но от этого они не перестают быть процедурами и функциями.
Это я вот так считаю.

Миш - это вовсе не наезд, наёюсь ты понимаешь?

конечно

nikkie ©   (27.01.05 16:44) [63]
Новичок в программировании для Windows может запутаться, пытаясь отличить объекты User или GDI от объектов ядра.


:))))


 
Kerk ©   (2005-01-27 17:26) [86]


> Просто процедуры и функции класса называют методами.

разница не только в этом.
procedure vs procedure of object


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

default ©   (27.01.05 17:22) [84]

Ну так надо читать фразу полностью, а не приводить доводы в защиту ее части :)

С уважением,


 
default ©   (2005-01-27 17:30) [88]

Игорь Шевченко ©   (27.01.05 17:27) [87]
выходит я не прав?тогда в чём?счётчик есть я не прав...


 
Piter ©   (2005-01-27 17:32) [89]

Вот видите какой спор разгорелся. Поэтому я и сказал, что не могу дать определение объектам ядра.
Главное знать для чего они служат и как ими управлять.


 
nikkie ©   (2005-01-27 17:33) [90]

>[79] esu
>Терминология.

я согласен. просто почему-то Digitman и ИШ настаивают на том, чтобы понимать эту терминологию так, как им хочется, а не так, как принято. мне тоже кажется странным классификация утконоса как млекопитающего, но я терплю... мультик еще такой был - "Кто ж такие птички?"


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

default ©   (27.01.05 17:30) [88]

Счетчик использования DLL действителен только для конкретного процесса и управляется пользовательским режимом. DLL, отображенная (загруженная) в адресное пространство одного процесса недоступна другому процессу.

С уважением,


 
Piter ©   (2005-01-27 17:37) [92]

Kerk ©   (27.01.05 17:26) [86]
разница не только в этом.
procedure vs procedure of object


не понял, что ты хотел сказать.

Напомню, что изначально просили сделать перегрузку процедуры. Jack128 говорит, что это можно понимать только как overload.

А я вот считаю, что это еще можно понимать как override, ибо процедуру в классе можно также именовать процедурой.
А можно и методом. Но от этого она процедурой не перестанет быть.


 
default ©   (2005-01-27 17:38) [93]

Игорь Шевченко ©   (27.01.05 17:33) [91]
"DLL, отображенная (загруженная) в адресное пространство одного процесса недоступна другому процессу."
это почему?сколько отображений столько и доступов!
"Счетчик использования DLL действителен только для конкретного процесса и управляется пользовательским режимом."
получается если два процесса отобразили на своё пространство адресов одну DLL, потом один процесс её "бросил" то система может свободно выгружать её из памяти наплевав на второй процесс? это же ерунда


 
default ©   (2005-01-27 17:41) [94]

Игорь Шевченко ©   (27.01.05 17:33) [91]
Вы вероятно имели ввиду что пока не будет сделано столько же FreeLibrary сколько LoadLibrary отмены отображения не будет
но это-то тут причём, всё равно систма считает сколько процессов "держат" эту DLL


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


> "Счетчик использования DLL действителен только для конкретного
> процесса и управляется пользовательским режимом."
> получается если два процесса отобразили на своё пространство
> адресов одну DLL, потом один процесс её "бросил" то система
> может свободно выгружать её из памяти наплевав на второй
> процесс? это же ерунда


Вдумчиво изучаем, как загружаются DLL.


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

nikkie ©   (27.01.05 17:33) [90]


> просто почему-то Digitman и ИШ настаивают на том, чтобы
> понимать эту терминологию так, как им хочется, а не так,
> как принято


Если не секрет, какое определение является "как принято" ?

С уважением,


 
default ©   (2005-01-27 17:47) [97]

Игорь Шевченко ©   (27.01.05 17:44) [95]
ну мы ж цитаты кидали...а тут к литературе...
тогда потом


 
Sergey_Masloff   (2005-01-27 17:47) [98]

Вот отошел на 2 часа и что вижу. Нешуточная рубка вокруг объектов ядра - ИМХО полный оффтоп. Давайте назад за жизнь говорить! У меня редкий выходной про объекты ядра не особо хочется.


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

default ©   (27.01.05 17:47) [97]

DLL не грузится в память целиком, а отображается на адресное пространство процесса, поэтому высказываение "система может выгрузить DLL наплевав на ее использование" по меньшей мере свидетельствует о незнании механизма загрузки DLL.

С уважением,


 
default ©   (2005-01-27 17:55) [100]

Игорь Шевченко ©   (27.01.05 17:50) [99]
Вы не поняли о чём я, читал я про адресацию на нижнем уровне, про глобальные дескрипторные таблицы и прочую дребедень знаю я как это работает)
я говорил про другое, про то что есть глобальный счётчик пользователей DLL который есть у системы)


 
kaZaNoVa ©   (2005-01-27 17:56) [101]

Игорь Шевченко ©   (27.01.05 17:50) [99]
я выгружал используемые длл функцией FreeLibrary и вполне успешно (!) - правда при попытке системы выполнить код выгруженной длл получалось AV и программа аварийно завершалась ...


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

default ©   (27.01.05 17:55) [100]


> я говорил про другое, про то что есть глобальный счётчик
> пользователей DLL который есть у системы)


И где же он есть ? Точнее, где про этот глобальный счетчик написано ?


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

kaZaNoVa ©   (27.01.05 17:56) [101]

Отдохнул бы ты...


 
kaZaNoVa ©   (2005-01-27 17:59) [104]

Игорь Шевченко ©   (27.01.05 17:57) [103]
в чём я не прав? - длл выгружалась, несмотря на то, что в ней выполнялся код ..


 
default ©   (2005-01-27 18:04) [105]

Игорь Шевченко ©   (27.01.05 17:57) [102]
допустим DLL лежит на диске
один процесс загружает её вызовом LoadLibrary - естественно происходит её подгрузка в ОП и отображение на пространство адресов первого процесса кода этой DLL
далее второй процесс вызывает LoadLibrary - естественно в память ничего не подгружается выполняется только резервирование и настройка адресов процесса опять же на код этой DLL
у первого процесса счётчик использования этой DLL есть 1
у второго тоже 1
теперь второй вызывает FreeLibrary счётчик обнуляется
будет возможность теперь выгрузить DLL и ОП для ОС?
конечно нет поскольку ещё есть один процесс её использующий
отсюда ясно что система считает число процессов использующих данную DLL
прямо таки лекция...


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

kaZaNoVa ©   (27.01.05 17:59) [104]

Откуда ты выгружал DLL ?


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

default ©   (27.01.05 18:04) [105]

Ты б Рихтера почитал, ей-богу.


 
kaZaNoVa ©   (2005-01-27 18:11) [108]

Игорь Шевченко ©   (27.01.05 18:05) [106]
код
длл
library Test;
uses
 Windows;

{$R *.res}

Procedure F;
Begin
While(true) do sleep(17000);
End;

Var i:cardinal;

begin
CreateThread(nil,0,@f,nil,0,i);
end.


форма
var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
tag:=LoadLibrary("test.dll");
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
FreeLibrary(Tag);
end;

end.



загружаем/выгружаем (!) всё ок, длл можно даже удалить, (выгрузилась) а через несколько секунд получаем AV, проверил несколько раз ..


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


> загружаем/выгружаем (!) всё ок, длл можно даже удалить,
> (выгрузилась) а через несколько секунд получаем AV, проверил
> несколько раз ..


Это несколько не в тему. Потому и мой совет в [103]


 
default ©   (2005-01-27 18:16) [110]

Игорь Шевченко ©   (27.01.05 18:06) [107]
не вижу ошибки чтобы читать
ясно что явно мы знаем лишь о внутрипроцессном счётчике, но очевидно есть и глобальный отсюда уже одно свойство в пользу причисления  DLL к объекту ядра
kaZaNoVa ©   (27.01.05 18:11) [108]
сдесь просто пытается выполнить код DLL, а он уже ототображён от ВАП процесса
физически же DLL может находиться в ОП


 
kaZaNoVa ©   (2005-01-27 18:17) [111]

Игорь Шевченко ©   (27.01.05 18:14) [109]
понятно ..  но мой пример доказывает, что всё-же можно выгружать используемые длл, несмотря не на что ..


 
default ©   (2005-01-27 18:17) [112]

kaZaNoVa ©   (27.01.05 18:11) [108]
здесь просто поток пытается выполнить код DLL, а он уже ототображён от ВАП процесса
физически же DLL может находиться в ОП


 
Sergey_Masloff   (2005-01-27 18:18) [113]

default ©   (27.01.05 18:04) [105]
>допустим DLL лежит на диске
>один процесс загружает её вызовом LoadLibrary - естественно >происходит её подгрузка в ОП и отображение на пространство >адресов первого процесса кода этой DLL
>далее второй процесс вызывает LoadLibrary - естественно в >память ничего не подгружается выполняется только резервирование >и настройка адресов процесса опять же на код этой DLL
Кстати как насчет не может второй процесс по базовому адресу ее загрузить не может. То тогда вообще все по-другому же ж ;-)


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

default ©   (27.01.05 18:16) [110]


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


И откуда это очевидно ?

ЗЫ: Рихтера почитай.

kaZaNoVa ©   (27.01.05 18:17) [111]

Так ты же все делаешь в своем процессе - там ты хозяин выбивать из-под себя табуретку. Дурное дело нехитрое.


 
esu ©   (2005-01-27 18:45) [115]


> ЗЫ: Рихтера почитай.

BTW Эта книжка существует в электронном виде ? А то прям как библия как я посмотрю :)


 
Rule ©   (2005-01-27 18:51) [116]

esu ©   (27.01.05 18:45) [115]
все библии должны дома стоять на полочке, а не в электронном виде :)


 
Kerk ©   (2005-01-27 18:55) [117]

чуть-чуть в тему:
http://wasm.ru/baixado.php?mode=tool&id=289

This creates a remote thread in a target
process and attempts to call FreeLibrary()
in order to unload the target dll.


 
Kerk ©   (2005-01-27 18:56) [118]

esu ©   (27.01.05 18:45) [115]

у меня есть.. а еще у Подгорецкого посмотри


 
esu ©   (2005-01-27 18:57) [119]


> Rule ©   (27.01.05 18:51) [116]

Ну у меня один фолдер так дома и называется "полка" ;)


 
Rule ©   (2005-01-27 19:00) [120]

esu ©   (27.01.05 18:57) [119]
теперь осталось сделать так, чтобы все файлы там стояли а не лежали :)


 
Kerk ©   (2005-01-27 19:05) [121]

Piter ©   (27.01.05 17:37) [92]
не понял, что ты хотел сказать.


это я в отрыве от вопроса о перегрузке. )
о том что процедура и метод имеют разный тип..


 
default ©   (2005-01-27 19:19) [122]

Игорь Шевченко ©   (27.01.05 18:20) [114]
ну должна же ОС знать когда можно выгрузить DLL из ОП, а когда нет


 
GuAV ©   (2005-01-27 19:20) [123]

Piter ©   (27.01.05 15:18) [36]


>а что тебе не нравится? Про AV упомянуть?
> Ну это и так понятно, если объект не создан, то вызов
> его метода может окончиться плохо.


Нет. Дело в том, что если изначально Obj равен nil то ничего плохого не предвидится.

Так как же определить объекты ядра, чтобы туда попали и окна ?


 
Юрий Зотов ©   (2005-01-27 21:58) [124]

Кто как, а я придерживаюсь "родной" терминологии Microsoft.

Ядро - это Kernel. Согласно прямому переводу. Значит, объекты ядра - это Kernel objects. И более ничего.

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

А с вольной трактовкой слишком далеко уйти можно. Терминология - штука строгая и серьезная.


 
Nous Mellon ©   (2005-01-27 22:45) [125]

ЮЗ, как всегда, рулит


 
Игорь Шевченко ©   (2005-01-28 10:26) [126]

Юрий Зотов ©   (27.01.05 21:58) [124]

Юра, объясни ты мне бестолковому, какое отношение, согласно документации Microsoft, к объектам ядра имеют DLL и кучи ?
Только потому, что так в MSDN написано ?

С уважением,


 
NewDelpher ©   (2005-01-28 11:12) [127]

Помимо профессионализма программиста очень важную роль играют и чисто человеческие качества. Будь ты хоть супер-мега-гением программизма, но если как человек ты - моральный урод, то далеко не уедешь...


 
Gero ©   (2005-01-28 12:05) [128]


> Будь ты хоть супер-мега-гением программизма, но если как
> человек ты - моральный урод, то далеко не уедешь

Это тебе кто такое сказал?


 
esu ©   (2005-01-28 12:13) [129]


> Только потому, что так в MSDN написано ?

А MSDN вообще есть четкие критерии по которым системные объекты поделены на 3 вышеупомянутые группы одка из которых называется kernel ?


 
esu ©   (2005-01-28 12:14) [130]


> Gero ©   (28.01.05 12:05) [128]

Ну если это одиночка то почему бы и да... Хотя рок музыкантам с этим явно попроще ;)


 
Набережных С.   (2005-01-28 13:06) [131]

>esu ©   (28.01.05 12:13) [129]

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/sysinfo/base/object_categories.asp

и далее


 
Юрий Зотов ©   (2005-01-28 13:13) [132]

> Игорь Шевченко ©   (28.01.05 10:26) [126]

> какое отношение, согласно документации Microsoft, к объектам
> ядра имеют DLL и кучи?

Если говорить формально, то в документации Microsoft черным по белому написано, что Heap и Module - это объекты ядра:
ms-help://MS.MSDNQTR.2005JAN.1033/sysinfo/base/kernel_objects.htm

То есть, согласно документации Microsoft, DLL и кучи имеют к объектам ядра такое отношение - они ими являются. Это и есть прямой ответ на твой вопрос.

А если говорить не формально, а по смыслу, то по поводу DLL и кучи могу сказать следующее.

Загрузкой и выгрузкой DLL занимается ядро. Все наши вызовы LoadLibrary/FreeLibrary - это всего лишь запросы, не более. Удовлетоворять их, или нет, когда и как именно, какие при этом производить дополнительные операции (или не производить никаких) - все это решает и исполняет ядро. О счетчике пользователей уже говорилось. Проецированием DLL, подгрузкой ее страниц, их кэшированием и т.д. тоже занимается ядро.

По куче: управление памятью - это тоже задача ядра (притом традиционная и одна из важнейших). Все наши вызовы, связанные с распределением памяти - это тоже всего лишь запросы. Будут ли они обслужены, когда и как именно, какие при этом будут призведены дополнительные операции (или не будет призведено никаких) - все это решает ядро. Об управлении своппингом даже и говорить не приходится.

Если коротко, то я бы сказал, что объект ядра - это объект, владельцем которого является ядро. Запрос на создание, использование или уничтожение такого объекта может выдать кто угодно, но только ядро может его создать, дать к нему какой-то доступ, осуществить с ним какие-то операции и уничтожить. Причем как и когда это делать - решает тоже ядро.

Пример - система может выгрузить DLL не сразу после обнуления счетчика ее пользователей, а тогда, когда сочтет нужным и своевременным. Принимает и осуществляет такое решение именно ядро и никто другой на это повлиять не может.

Потому что владелец - ядро. Оно и рулит.


 
Игорь Шевченко ©   (2005-01-28 13:23) [133]

Юрий Зотов ©   (28.01.05 13:13) [132]


> Загрузкой и выгрузкой DLL занимается ядро. Все наши вызовы
> LoadLibrary/FreeLibrary - это всего лишь запросы, не более.
> Удовлетоворять их, или нет, когда и как именно, какие при
> этом производить дополнительные операции (или не производить
> никаких) - все это решает и исполняет ядро.


Нет, Юра, это решает пользовательский режим. Загрузчик находится для NT-систем в ntdll.dll, он все и определяет.


> О счетчике пользователей уже говорилось


Какие именно разговоры о счетчике имеются в виду ?


> Проецированием DLL, подгрузкой ее страниц, их кэшированием
> и т.д. тоже занимается ядро.


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


> По куче: управление памятью - это тоже задача ядра (притом
> традиционная и одна из важнейших). Все наши вызовы, связанные
> с распределением памяти - это тоже всего лишь запросы. Будут
> ли они обслужены, когда и как именно, какие при этом будут
> призведены дополнительные операции (или не будет призведено
> никаких) - все это решает ядро.


Юра, кучи - это надстройка пользовательского режима над стандартными функциями управления памятью (VirtualAlloc, VirtualFree).


> Пример - система может выгрузить DLL не сразу после обнуления
> счетчика ее пользователей, а тогда, когда сочтет нужным
> и своевременным. Принимает и осуществляет такое решение
> именно ядро и никто другой на это повлиять не может


Плохой пример. Даже приведенный код KaZaNova несколькими постами выше его опровергает.

С уважением,


 
Игорь Шевченко ©   (2005-01-28 13:28) [134]

Набережных С.   (28.01.05 13:06) [131]

По той ссылке и ресурсы относятся к объектам ядра. Что вообще-то неверно :)

С уважением,

ЗЫ: Ты б перерегистрировался.


 
Игорь Шевченко ©   (2005-01-28 13:32) [135]


> А MSDN вообще есть четкие критерии по которым системные
> объекты поделены на 3 вышеупомянутые группы одка из которых
> называется kernel ?


Сначала я полагал, что критерием является та библиотека пользовательского режима, в которой находятся функции для управления теми или иными объектами. Потом понял, что ошибся, так как объекты Desktop и WindowStation относятся к kernel objects (и являются ими, кстати, говоря), а функции управления ими находятся в user32.dll

С уважением,


 
АлексейК   (2005-01-28 13:56) [136]

.... и управляет ими ядерная часть подсистемы Win32....

УБЕРИТЕ ДЕТЕЙ ОТ КОМПЬЮТЕРОВ.

P.S. Теперь то понятно почему у компьютера радиация.


 
Набережных С.   (2005-01-28 14:38) [137]

Если кто интересуется, по загрузке ДЛЛ есть добрая статья
http://msdn.microsoft.com/msdnmag/issues/02/03/Loader/default.aspx

>http://msdn.microsoft.com/msdnmag/issues/02/03/Loader/default.aspx
>ЗЫ: Ты б перерегистрировался.

А смысл? Опять исчезну - опять удалят. Пусть будет как есть.


 
Набережных С.   (2005-01-28 14:41) [138]

Во, плоды технологии Copy-Paste:) В предыдущем посте вместо дубля ссылки должно было быть:
>Игорь Шевченко ©   (28.01.05 13:32) [135]


 
Игорь Шевченко ©   (2005-01-28 14:45) [139]

Набережных С.   (28.01.05 14:38) [137]

<offtopic>

> А смысл? Опять исчезну - опять удалят. Пусть будет как есть.


Да никто тебя не удалял - база анкет сломалась. Потому и просьба перерегистрироваться.

</offtopic>

А статья эта печаталась в MSDN Magazine Russian Edition на русском языке: "Внутри загрузчика", если мне память не изменяет.

С уважением,


 
Digitman ©   (2005-01-28 14:55) [140]


> Игорь Шевченко ©   (28.01.05 13:32) [135]


Абсолютно верно, Игорь.



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

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

Наверх





Память: 0.9 MB
Время: 0.039 c
1-1107343940
Neznaika
2005-02-02 14:32
2005.02.20
Z-последовательность


1-1107724539
Poochacha
2005-02-07 00:15
2005.02.20
Single to String


8-1098811987
Artemka
2004-10-26 21:33
2005.02.20
Проблема с выводом изображения на канву формы...


1-1107704675
Gear99
2005-02-06 18:44
2005.02.20
Как создать одно всплывающее окно из другого?


10-1080597324
GanibalLector
2004-03-30 01:55
2005.02.20
MDAC и DCOM





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский