Пользователь пока ничего не рассказал о себе

Достижения

Все достижения (3)

Наибольший вклад в теги

Все теги (19)

Лучшие ответы пользователя

Все ответы (23)
  • Рабочая виза в Канаду

    @amirul
    Виза отличается от H1. Principal applicant-у (тому у кого на руках оффер) дают W1 — с привязкой к работодателю. Dependent-ам дают W2 — право на работу без привязки к работодателю (в отличие от американского аналога — H4, по которой работать нельзя).

    Сама виза не является, собственно, воркпермитом. Пермит — это бумажка, которую встепливают при первом въезде по этой визе прямо на границе (если пройдешь собеседование с border officer-ом :-) ). При этом без пермита виза все еще продолжает действовать как Multiple Entry виза (типа американской B1/B2).

    ВО для работы не нужно, но весьма пригодится, если вдруг захочется запарковать трактор в канадских снегах.
    Ответ написан
    1 комментарий
  • В чем преимущества fork в unix системах?

    @amirul
    Ни в чем. Это просто устаревшая концепция, сохраняющаяся ради совместимости. Single Unix Specification говорит следующее:
    There are two reasons why POSIX programmers call fork(). One reason is to create a new thread of control within the same program (which was originally only possible in POSIX by creating a new process); the other is to create a new process running a different program. In the latter case, the call to fork() is soon followed by a call to one of the exec functions.

    То есть буквально, у fork-а есть два применения: создание нового процесса из нового бинарника и создание нового «потока» в рамках текущего процесса. В обоих случаях у него есть недостатки, происходящие из самого принципа fork-а:
    1) При создании процесса сначала копируется адресное пространство (не память, а именно адресное пространство — у каждого процесса оно в любом случае свое), дескрипторы и прочие ресурсы, чтоб сразу же их освободить (эта проблема частично решается vfork-ом)
    2) При создании потока опять же копируется адресное пространство вместо исполнения в том же.

    Мне на ум приходит единственное применение, могущее быть полезным: создание песочниц a-la Chrome/IE7. Создание нового процесса копированием старого будет на пару миллионов (несколько миллисекунд на современных процессорах) тактов дешевле — для тех, кому важно создание песочниц в огромных количествах (и по какой либо причине «префорк» пула таких песочниц не подходит) это может оказаться существенным.

    Есть еще одна проблема помимо сравнительно небольшого снижения производительности в двух наиболее часто используемых сценариях. Вот как описывает проблему все тот же SUS:
    The general problem with making fork() work in a multi-threaded world is what to do with all of the threads. There are two alternatives. One is to copy all of the threads into the new process. This causes the programmer or implementation to deal with threads that are suspended on system calls or that might be about to execute system calls that should not be executed in the new process. The other alternative is to copy only the thread that calls fork(). This creates the difficulty that the state of process-local resources is usually held in process memory. If a thread that is not calling fork() holds a resource, that resource is never released in the child process because the thread whose job it is to release the resource does not exist in the child process.


    В современном дизайне ПО существует такое довольно важное понятие, как связность. Так вот, традиционный юникс-процесс имеет низкую связность. Он одновременно является контейнером ресурсов (упрощая, можно сказать, что это абстракция памяти) и единицей исполнения (абстракция процессора).
    Posix thread-ы призваны решить данную проблему, но они несовместимы с fork. Так что лучше пользоваться подходом, описанным все в той же SUS:
    When a programmer is writing a multi-threaded program, the first described use of fork(), creating new threads in the same program, is provided by the pthread_create() function. The fork() function is thus used only to run new programs, and the effects of calling functions that require certain resources between the call to fork() and the call to an exec function are undefined.

    Пользоваться форком ТОЛЬКО для выполнения новой программы, для всего остального пользоваться pthread_create.
    Ответ написан
    Комментировать
  • Возможно ли создать .bat файл для быстрого извлечения флешки?

    @amirul
    Если обязательно bat файл, то как то так
    eject.cmd:

    @if (0 == 1) @end /*
    @cscript //E:JScript //Nologo %~f0
    @exit /B %ERRORLEVEL%
    */
    var shell = new ActiveXObject("Shell.Application");
    shell.NameSpace(17).ParseName("E:").InvokeVerb("Eject");
    WSH.Sleep(2000);
    


    К сожалению, для версии, не зависящей от языка, нужно использовать CM API, но для личного пользования, как по мне, вполне сойдет.
    Ответ написан
    5 комментариев
  • Windows намертво подвисает на несколько секунд?

    @amirul
    Намертво и при этом на многопроцессорной машине. Если это как то и связано с диском, то скорее всего какой то драйвер блокирует все ядра в ISR или DPC. Но это может быть и чего нибудь связанное со спинлоками (что более вероятно, ибо нечто подобное у меня наблюдалось с проактивной защитой аутпоста пару лет назад — снес к чертям как только вычислил).

    Собственно, искать гада стоит начинать с установки WPT Kit
    Так как проблема появляется нечасто, то придется постоянно крутить circular logging. Запускаем из elevated консоли:

    xperf -on latency -stackwalk profile -maxfile 128 -filemode circular

    Естественно, некоторая часть ресурсов будет отъедаться на постоянную запись лога, но по личным наблюдениям оно не особо мешает даже на относительно слабом low-middle end ноуте более чем двухлетней давности.
    После того, как проблема зарепродюсится, нужно запустить из элевейченной консоли:

    xperf -d trace.etl

    Потом делаем

    xperf trace.etl

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

    SRV*c:\downstore*http://msdl.microsoft.com/download/symbols

    и вывести «Summary table» на «Stack counts by type». С очень большой вероятностью можно будет обнаружить странности уже там.
    Также стоит взглянуть на «Summary table» для «DPC CPU Usage» и «Interrupt CPU Usage». Вообще говоря полуофициальное требование к длительности ISR — не более 10 мкс, DPC — не более 25 мкс. Средние значения длительностей ISR и DPC должны быть близки к этим, пиковое значение может быть в районе миллисекунд или даже десятков миллисекунд. Если там сотни-тысячи — это уже проблема.

    В общем, удачной охоты.
    Ответ написан
    7 комментариев
  • Мониторинг обращений к жёсткому диску

    @amirul
    Кто то (антивирус?) открывал музыку в контексте процесса калькулятора — винда это запомнила и теперь каждый раз префетчит эту музыку перед запуском калькулятора.

    del %SystemRoot%\Prefetch\calc.exe*.pf

    Из элевейченной консоли должно помочь. Если будет повторяться — xperf со стектрейсами при обращении к файлам и смотреть кто попадется.
    Ответ написан
    2 комментария