Что происходит в компьютере при запуске программы
2. Исходный текст компилируется в промежуточный низкоуровневый язык MSIL. При этом формируется пакет, состоящий из некоторого числа сборок, одна из которых является исполняемой и содержит точку входа в программу. В других - содержатся библиотечные файлы. Сборки содержат метаданные и код на промежуточном языке. Метаданные включают в себя информацию о типах данных, методах сборки и ХЭШ. ХЭШ содержит информацию о версиях и привилегиях, а так же какие другие сборки будут вызываться этой сборкой.
3. Среда CLR загружает сборку, содержащую точку входа в программу и анализирует ХЭШ для проверки целостности сборки и требуемых привилегиях. При этом происходит обращение к политике безопасности системы и учетной записи пользователя. Если пользователь обладает требуемыми привилегиями, то они будут предоставлены программе. CLR осуществляет так же проверку безопасности кода по типу памяти. Т.е. исполняемый код не должен пытаться читать или записывать в область памяти не принадлежащей ему. Если данное требование нарушается, то приложение снимается с выполнения.
4. CLR компилирует с помощью компилятора JIT (Just-in-time) программу на промежуточном языке MSIL в машинный код и запускает ее на выполнение. Причем компилируется только та часть программы, выполнение которой требуется в данный момент времени. Скомпилированный код сохраняется в ОЗУ ЭВМ и при повторном обращении к нему, перекомпиляции не происходит, а, следовательно, не происходи потери производительности, свойственных, например, компилятору-интерпретатору.
5. Во время выполнения кода периодически запускается так называемый сборщик мусора, который на основе анализа данных освобождает области памяти из-под объектов, которые больше не используются.
Историческая справка.
Язык программирования С - был разработан в 1972 г. Денисом Ричи в компании Bell Laboratories. Язык С - является первым структурным языком программирования.
В конце 1970 начале 1980 годов многие проекты достигли размера свыше пяти тысяч строк кода. Эта величина оценивается как предельная для языка структурного программирования. Свыше данного размера возникают большие трудности для понимания и сопровождения программ. Эта проблема была решена с помощью нового в то время подхода – объектно-ориентированного программирования (ООП).
В 1979 году Бьярном Страуструпом был разработан, на основе языка С, объектно-ориентированный язык – С с классами, который в последствии был переименован в 1983 в С++.
Долгое время язык оставался в тени. Первое справочное руководство по этому языку было выпущено только в 1991 году:
- Stroustroup, 1991."The C++ Programming Language".
И с этого момента он начинает широко применяться и приобретает большую популярность.
Следующим шагом в развитии языков программирования явилось появление языка программирования Java.
Работа над проектом Java, который первоначально назывался Oak, началась в 1991 году. Он создавался как независящий от платформы язык, предназначенный для разработки программного обеспечения (ПО) для контроллеров, встроенных в различные устройства (пылесосы, стиральные машины и т.п.).
В связи с бурным развитием сети Internet, которая объединяла компьютеры, реализованные на различных платформах, возникла проблема переносимости ПО с одной платформы на другую. В 1993 году для разработчиков Java стало очевидным, что идеи платформенной независимости языка легко переносятся с уровня встроенных контроллеров на уровень Internet.
Идея платформенной независимости Java заключается в том, что исходный текст программы транслируется в некоторый промежуточный язык, называемый байт-кодом. Каждый байт-код соответствует одной машинной инструкции некоторого абстрактного микропроцессора. Набор инструкций абстрактного микропроцессора соответствует набору инструкций, поддерживаемого большинством реальных микропроцессоров. Байт-код не зависит от платформы и может быть переслан по сети Internet для выполнения на любом типе компьютера, на котором установлена, так называемая, виртуальная машина Java (Java Virtual Machine - JVM).
Виртуальная машина Java работает в режиме интерпретатора и, в настоящее время, реализована для большинства платформ. Благодаря тому, что соответствие байт-кода инструкциям машинного кода реального процессора, составляют почти один к одному процесс трансляции и выполнение программы на байт коде происходит с приемлемой скоростью.
Язык программирования Java был создан на основе языка С и С++ (синтаксис его очень сходен с синтаксисом С++ и С) и является структурным объектно-ориентированным языком.
MSIL в отличие от байт-кода Java не интерпретируется, а компилируется с помощью JIT (just in time – в нужный момент) компилятора во внутренние коды процессора по мере необходимости. При этом время запуска программы мало отличается от времени запуска программы компилированной традиционным компилятором.
Это объясняется двумя причинами:
1. JIT – компилирует не всю программу сразу, а только тот кусок кода, который вызывается в данный момент (отсюда название компилятора just-in-time). Скомпилированный код сохраняется в ОЗУ и при следующем запуске этого куска кода перекомпиляции не происходит. JIT – компилятор – оптимизирует код также как и традиционный компилятор, но кроме этого оптимизирует код непосредственно для того процессора, на котором он выполняется.
В связи с этим фирма Microsoft даже ожидает повышения быстродействия работы программы.
8. В чем отличия и преимущества JIT – компилятора перед традиционными компиляторами?
ООП – это метод программирования, позволяющий рассматривать концептуальную модель как набор объектов. Объектно-ориентированный подход в программировании – это средство для создания больших, сложных, а самое главное, работающих программ. Программа, при объектно-ориентированном подходе выполняется с помощью объектов.
Объекты – как в реальной жизни – обладают определенными свойствами. Эти свойства объектов определяются программистом. Свойства объектов описываются относительно небольшим по объему кодом, который легко поддается отладке и тестированию. Для создания и определения свойств объектов используются структуры и классы.
Классы - это новый тип данных, является расширением типа struct и образует абстрактный тип данных для ООП. Класс состоит из набора переменных (данных) и операций (методов или функций-членов класса), работающих с этими переменными.
Объекты – это экземпляры класса или структуры.
Инкапсуляция - это сокрытие информации о строении или деталях класса.
Класс включает в себя как данные, так и код (функции). Доступ к элементам класса управляем. Задача программиста, создающего новый тип данных - класс - скрыть как можно больше информации от пользователя класса.
Пользователю класса предоставляется (минимальная) необходимая и достаточная информация для использования класса: пользовательский интерфейс.
Класс для пользователя - это черный ящик с характерным поведением.
Наследование – это средство получения новых классов из существующих классов. Другими словами наследование – это способность класса наследовать свойства других классов.
Класс, от которого наследуется, называется родительским классом или базовым классом. Получившийся в результате наследования новый класс называется порожденным или производным классом.
Наследуя характеристики базового класса можно заставить порожденный класс расширить, изменить или использовать их без изменения.
Полиморфизм – это скорее характеристика функций членов класса. Полиморфизм реализуется через архитектуру классов, но полиморфными могут быть только функции, а не весь класс.
Различают несколько видов полиморфизма:
1. Специальный полиморфизм
2. Параметрический полиморфизм
3. Чистый полиморфизм
Каждый вид полиморфизма реализуется с помощью различных механизмов, которые будут нами рассмотрены в соответствующих разделах.
Предположим, что у нас имеется ссылочный тип с именем Reftype.
Для создания объекта ссылочного типа необходимо выполнить два шага:
1. объявить ссылку, например:
2. выделить память под объект этого типа с помощью оператора new:
myObj = new Reftype();
Оператор new выполняет для ссылочных типов два действия.
Во-первых, выделяет память под объект указанного типа, возвращая адрес (ссылку) объекта в памяти, во-вторых, вызывает конструктор объекта.
Конструктор – это специальный метод класса, который будет рассмотрен нами позже. Сама ссылка, т.е. адрес объекта, хранится в стеке, занимая минимальное место в памяти. При передаче объекта передается не сам объект, который может быть достаточно большим и сложным, а только ссылка на него (адрес).
При создании объекта типа по значению, для объекта сразу выделяется память в стеке. Оператор new здесь может применяться только для вызова конструктора. Использование переменной ссылочного типа до вызова оператора new, в отличие от базовых типов по значению, невозможно.
Меня зовут Андрей Артемьев, я работаю в Microsoft над ядром ОС Windows 10, ранее я работал над Windows 10x (WCOS), XBox, Windows Phone и Microsoft Edge. Я хочу популярно в образовательных целях рассказать о том как работает компьютер на примере клавиатурного ввода и Windows 10. Данный цикл статей рассчитан в первую очередь на студентов технических специальностей. Мы рассмотрим какой путь проходит информация о нажатой клавише от клавиатуры до отображения в Notepad.exe. В виду обширности и междисциплинарности темы в статьях могут быть неточности, о которых сообщайте в комментариях. Какая-то информация может быть устаревшей в виду скорости с которой развивается Windows.
Насколько глубоко мы погрузимся в тему?
Давайте для начала в общих чертах поговорим об уровнях на которых можно рассматривать компьютер. Каждый уровень основывается на предыдущем. Начнём с самого верха.
Уровень операционной системы. ОС можно рассматривать как:
- Менеджер ресурсов — память, жёсткие диски, принтеры, экран, клавиатура ограниченные ресурсы которые совместно используются запущенными на компьютере программами.
- Виртуальная машина — файл это наглядный пример виртуального объекта. Он представляет абстракцию данных на диске, API для работы с ним и так же добавляет концепцию прав доступа. Вместо файла могла быть концепция контейнера данных и совершенно другого API. Таких виртуальных объектов в ОС много.
- Платформа — ОС предоставляет программные модели и примитивы для построения программ. К примеру Windows Drivers Framework позволяет быстро разрабатывать драйвера, окна в Windows используются для построения сложных пользовательских интерфейсов. Dll — предоставляет модель расширения функционала программы через плагины, а так же механизм для реализации читалки экрана через ловушки клавиатуры (см. LowLevelKeyboard hook).
Уровень архитектуры компьютера. Он представлен материнской платой, которая имеет определённый форм-фактор, встроенные функции закодированные в микросхемах называемых чип-сетом и порты, через которые можно расширять функционал компьютера подключив графическую карту, сетевую карту, дополнительную оперативную память (RAM), жёсткие диски, клавиатуру и пр. Порты влияют на скорость работы и возможности компьютера, что и будет определять его назначение будь то сервер для обработки тысяч запросов в секунду, планшет для пользования Интернетом или игровой ПК с несколькими видеокартами. ОС абстрагирует особенности материнской платы.
Микросхемы выглядят как на картинке ниже и представляют собой мини-компьютер выполняющий простые программы для низкоуровневых задач, к примеру прочитать данные от клавиатуры и передать их дальше чтобы они достигли в конечном счёте процессора. Как правило реализованы в виде аналоговой непрограммируемой микросхемы или микроконтроллера, программируемого на языке С.
Материнскую плату можно рассматривать как колонию микросхем которые общаются между собой через шины и через них циркулируют данные от подключенных устройств к процессору и обратно. Чип-сет — это своего рода нервная система компьютера. Все чипы на материнской плате были изначально созданы чтобы работать друг с другом. Некоторые из них могут иметь особые функции, к примеру таймер или хранение настроек BIOS. Пожалуй самый важный из них тот что имеет встроенную программу (прошивку, BIOS, UEFI) которая начинает выполняться как только появляется электричество. Она находит жёсткий диск с загрузчиком Windows и передаёт тому управление который в свою очередь запускает исполняемый файл ОС, который можно назвать Windows10.exe, на самом деле NtOsKrnl.exe. BIOS знает что искать благодаря соглашению между производителями железа и операционных систем.
Вокруг материнской платы можно собрать мобильный телефон, игровую приставку, серверную станцию или умное устройство. На картинке ниже распространённые форм-факторы материнских плат.
Уровень микроархитектуры представлен процессором (CPU), это сердце материнки и весь чип-сет нужен для обслуживания CPU. Процессор это компьютер в компьютере, более мощный и продвинутый микроконтроллер которому не нужна прошивка, потому как поток команд подаётся на лету, когда планировщик потоков поменял контекст процессора. Функционал процессора делится на подсистемы, к примеру компонент занимающийся математическими и логическими операциями, математический сопроцессор, кэш. Какие-то из них раньше были отдельным чипом на материнской плате, но сейчас их сделали частью ЦПУ, например контроллер прерывания и микросхема под названием “Северный мост” что увеличило скорость работы.
Микроархитектура это не то же самое что архитектура. Весь функционал CPU разделён на компоненты, которые работают сообща. Эти компоненты и их взаимодействие и есть микроархитектура. На блок-схеме ниже они представлены цветными прямоугольниками и квадратиками.
Архитектура процессора это по сути документ который описывает какой функциональностью он должен обладать для того чтобы соответствовать к примеру архитектуре x86, x64 или ARM применяемой на мобильных устройствах. В этом документе описано какие должны поддерживаться команды, назначения регистров и логика работы. Создатели процессоров Intel, AMD, Эльбрус могут реализовывать эту функциональность как угодно и добавлять к ней новые возможности в виде команд, регистров, флагов, прерываний и если ОС знает о них то может использовать. В терминах ООП архитектура ЦПУ — это интерфейс, а микроархитектура — его реализация.
Логические схемы. Цветные прямоугольники с блок-схемы CPU состоят из логических схем, которые производят свои операции на последовательностях нулей и единиц. Процессор видит все данные и команды в виде битов (0 и 1), по формуле любое десятичное число можно представить в виде последовательности 0 и 1, а вот что значит конкретное число зависит от контекста. Это может быть код, цифра, буква. Арифметическое и логическое устройство (ALU) умеет производить сложение двух чисел через побитовые операции. Побитовые алгоритмы сложения, вычитания, умножения и деления давно известны, разработчикам логической схемы их только надо эффективно реализовать.
Уровень радиоэлементов. Физически аналоговые схемы полагаются на радиоэлементы, которые собственно и эксплуатируют законы физики. Преимущественно это полупроводники, т.е. в определённых условиях они могут проводить электричество, а могут и нет. Диод проводит ток только в одном направлении, если его выпаять, развернуть на 180 и впаять обратно, то ток через него проходить не будет. Транзистор пропускает ток только если есть напряжение на управляющей ножке. Человечество научилось делать транзисторы микроскопическими и потому их можно размещать на маленькой плате миллионами. На картинках ниже полупроводниковые радиоэлементы и обычный транзистор рядом с нано транзистором под электронным микроскопом.
Уровень законов физики. И наконец самый нижний уровень — это уровень законов физики которые заключены в полупроводниковые радиоэлементы.
Мы будем много говорить про уровень ОС и чуть меньше про архитектуру компьютера, микроархитектуру, аналоговые схемы и радиоэлементы. К последней части у вас должно быть понимание как это всё работает вместе.
Основы Операционной Системы
Когда мы проходили в универе программирование на ассемблере у многих студентов был ступор от таких умных слов как “режимы ядра и пользователя”, под которыми на самом деле скрывается хорошо всем известная ролевая система аутентификации, на всех сайтах есть как минимум “Админ” имеющий доступ ко всем страницам и “Пользователь” имеющий ограниченный доступ. Точно так же роль “Ядро” имеет доступ ко всем возможностям CPU, а роль “Пользователь” может вызывать не все команды процессора и не со всеми аргументами. Поверх этой ролевой модели по принципу клиент-серверной архитектуры построена операционная система, где сервер это ядро, которое и реализовывает функционал ОС, а клиент — это пользовательские программы. В мире Web клиент и сервер разделены физически — это два разных компьютера общающихся по сети. В ОС клиент и сервер живут на одной машине и на одном железе. У сервера есть некий API который позволяет клиентам изменять его состояние, к примеру Twitter API позволяет создавать посты, логиниться и загружать ленту твитов в мобильный клиент. У Windows есть Win API, только более громоздкий в виду более широкого круга задач, на сегодняшний день у винды примерно 330 000 API плюс API для UWP apps. Если концепции Твитера более менее всем понятны — пост, пользователь, фид — то концепции ОС могут потребовать некоторого углубления в её внутренности. Поэтому API Windows могут быть трудно понятными без понимания внутреннего устройства ОС.
На самом деле под ядром понимают три разные вещи. Ядро как весь код ОС. Ядро как подсистема которая отвечает за механизмы ОС, такие как планировщик потоков, переключение контекста, обработка прерываний, свап виртуальный памяти на физическую (Kernel) и ядро подсистемы для поддержки других ОС — CSRSS.exe (Windows), PSXSS.exe (POSIX), OS2SS.exe (OS/2) или WSL (Windows SubSystem for Linux). В данном контексте понимается первый смысл — весь код ОС.
Когда на экране появляется окно, то в серверной части ОС (режим ядра) появляется структура данных которая описывает это окно — его положение на экране, размеры, текст заголовка, оконная функция через которую ОС даёт приложению среагировать на события. Поскольку подсистем в ОС много, то и структур данных описывающих один объект может быть несколько, к примеру информация о пользовательском процессе есть в компонентах:
- Executive — здесь логика работы ОС. В этом слое проверяется что могут и не могут делать процессы. Здесь хранится инфа о родительском процессе, параметры старта процесса (Process Environment Block), привязанный аккаунт пользователя, имя exe файла процесса.
- Kernel — здесь реализованы механизмы ОС, такие как планировщик потоков. Здесь хранится сколько времени процесс проводит в режиме пользователя и ядра, к каким процессорам привязаны его потоки, базовый приоритет потоков процесса.
- Windowing subsystem — инфа о GDI объектах которые используются для рисования в окне. Это такие примитивы как кисти, pen и пр.
- DirectX — всё что имеет отношение к DirectX: шейдеры, поверхности, DX-объекты, счётчики производительности GPU, настройки памяти графической памяти.
- Подсистема Windows которая представлена процессом CSRSS.exe (Client Server Runtime SubSystem). Windows ранее поддерживал ОС POSIX (процесс PSXSS.exe) и OS/2 (OS2SS.exe). В те времена возникла идея сделать и Windows такой же подсистемой, но эта было медленно и поэтому скоро часть CSRSS.exe перенесли в win32k.sys, который сейчас разбит на несколько файлов — win32k.sys, win32kbase.sys и win32kfull.sys. Здесь хранится информация о Process Group Data, Shutdown level, Session Data и пр.
Что такое компонент? Это логически сгруппированный функционал. Компонентом можно назвать ООП-класс, dll, папку, набор функций с общим префиксом, пространство имён, слой в архитектуре.
Более подробно о разделении на клиент-сервер
Разделение на клиент и сервер реализовано при помощи встроенной функциональности CPU, разделения памяти и программных проверок.
Производители оборудования сотрудничают с разработчиками ОС, поэтому в процессоре есть механизмы созданные с учётом потребностей создателей операционных систем. Во всех современных процессорах реализован механизм ролей пользователя, где под пользователем понимается исполняемый в данный момент код. В веб приложениях роль залогиненого пользователя хранится в какой-то переменной и помимо понятного названия Admin или User имеет Id этой роли который чаще и используется при авторизации, потому как сравнивать числа быстрее и проще чем строки. В процессоре роль текущего пользователя хранится в поле которое называется “кольцо безопасности” (Security Ring), а не “CurrentUser.Role.Id”. В большинстве процессоров это поле принимает четыре значения от 0 до 3. Windows использует 0 для роли которая называется “Режим Ядра”, потому как это самый привилегированный режим и самое большое значение для роли “Режим Пользователя”, потому как это самая ограниченная роль. Остальные роли не используются потому как различие между 0 и 1, 2 и 3 незначительное. Эти роли ограничивают страницы памяти которые могут быть адресованы, нельзя вызывать некоторые инструкции или же нельзя их вызывать с определёнными аргументами. Так же есть ограничения на использование технологии I/O Ports для обмена данными с устройствами такими как клавиатура, но она уже лет 10 не используется. Переключение в режим ядра происходит через команду syscall, которая по индексу находит в массиве указателей на APIs Windows функцию которую надо вызвать. Указатель на этот массив сохраняется в специальном регистре процессора во время загрузки ОС.
Прерывания могут генерироваться не только процессором но и внешними устройствами (клавиатура, мышь) или программным кодом. Планировщик потоков устанавливает таймер который с интервалами равными одному кванту (по умолчанию около 15мс, в Windows Server больше) генерирует прерывание чтобы по внутреннему алгоритму назначить другой поток на исполнение. Пошаговое исполнение программы в Visual Studio так же полагается на механизм прерываний — у процессора устанавливается флаг, который после каждой команды вызывает прерывание которое обрабатывает Windows Debugging Engine и уведомляет через API Visual Studio.
Разделение памятью реализовано благодаря виртуальной памяти. Ранее я говорил что ОС это менеджер ресурсов и виртуальная машина. Даже если у вас 1Гб RAM 32х битный Windows будет работать так как если бы у вас было 4Гб оперативки, т.е. реально у вас 1Гб, а виртуально 4Гб. Современные компьютеры основаны на теоретической модели машины Тьюринга или же архитектуре фон Неймана (с некоторыми изменениями). Согласно этим моделям память в компьютере это лента состоящая из ячеек размером один байт. Эти ячейки сгруппированы в страницы как правило по 4096 байт (4Кб), потому как:
64 битный адрес позволяет адресовать 16 экзабайт, это 18,446,744,073,709,551,616 ячеек памяти. Современные процессоры пока что не поддерживают так много RAM и поэтому используют только младшие 48 бит адреса, остальные 16 заполняются старшим разрядом. Поэтому Win x64 попросту не использует часть адресов, которые помечены на рисунке выше чёрным. Но это не значит, что 64х битный Windows “видит” 256 Tb оперативки. Максимум 8TB виртуальной памяти на архитектуре IA64 и 7TB на x64. Предел физической памяти поддерживаемой Windows 10 — 2TB, потому как с большим количеством Винда не тестировалась. Объём поддерживаемой RAM в Windows 10 определяется во многом редакцией ОС, чем дороже тем больше.
Почему ячейки памяти пронумерованы шестнадцатиричными (HEX) числами, а не десятичными или двоичными? Адрес ячейки это не просто порядковый номер, в нём закодировано три числа по которым эту ячейку можно отобразить на физическую память. Первые два это индексы по которым находится конкретная страница виртуальной памяти, а третье число — смещение от начала страницы. CPU и ОС здесь работают в связке — ОС предоставляет структуру данных по которой CPU находит страницу виртуальной памяти и копирует её в физическую. По HEX номеру можно сразу увидеть как выровнен в памяти адрес. Формат двоичного числа слишком громоздкий, 32 бита (или 64) трудны для восприятия. Десятичный формат — показывает слишком мало информации, тогда как HEX удобный компромисс между десятичной и двоичной системами, средами людей и машин.
Программный способ разделения на клиент-сервер (режим ядра-режим пользователя) гораздо скучнее перечисленных выше механизмов. Процессы и потоки могут быть помечены специальными аттрибутами или же мы можем хранить список указателей на потоки/процессы и проверять их в коде. Если вы хоть раз делали авторизацию в веб-приложении, то хорошо понимаете о чём я говорю.
Из чего состоит Windows?
Абстракция или же разбиение на компоненты есть во всех сферах программирования и интуитивно понятно что Windows тоже делится на какие-то компоненты. Под компонентом понимается какая-то единица функциональности — ООП класс, файл, dll, папка. Компоненты на диаграмме ниже могут быть как индивидуальными *.sys, *.dll файлами, так и просто набором API сгруппированным логически через добавление префикса к имени функции, старая часть системы написана на C, а он не поддерживает классы. Новые части пишутся нередко на C++. В укрупнённом виде Винда выглядит так:
Давайте быстренько пробежимся по её компонентам снизу вверх:
- Hyper-V Hypervisor — слой виртуализации благодаря которому в Windows можно создать виртуальную машину. Иногда говорят, что Hyper-V это минус первый уровень привилегий, однако реализован он в одном уровне привилегий и адресном пространстве что и ядро ОС, за счёт использования слоёной архитектуры ОС ничего не знает о нём.
- HAL.dll — Hardware Abtraction Layer — изначально задумывался как абстракция над железом — чипсет, материнская плата, процессор — для того чтобы можно было перенести Windows на новую платформу реализовав новый HAL.dll, который будет выбран и скопирован во время установки. По сути это драйвер к устройствам материнской платы, к примеру таймерам, контроллеру прерываний. Сейчас его роль снижена, потому как многие драйвера материнки и чип-сета реализованы в ACPI.sys.
Большинство компьютерных систем могут исполнять только команды, находящиеся в оперативной памяти компьютера, в то время как современные операционные системы в большинстве случаев хранятся на жёстких дисках, загрузочных CD-ROM, USB дисках или в локальной сети.
После включения компьютера в его оперативной памяти нет операционной системы. Само по себе, без операционной системы, аппаратное обеспечение компьютера не может выполнять сложные действия, такие как, например, загрузку программы в память. Таким образом мы сталкиваемся с парадоксом, который кажется неразрешимым: для того, чтобы загрузить операционную систему в память, мы уже должны иметь операционную систему в памяти.
Решением данного парадокса является использование специальной компьютерной программы, называемой начальным загрузчиком, или BIOS (Basic Input/Output System). Эта программа не обладает всей функциональностью операционной системы, но её достаточно для того, чтобы загрузить другую программу, которая будет загружать операционную систему. Часто используется многоуровневая загрузка, в которой несколько небольших программ вызывают друг друга до тех пор, пока одна из них не загрузит операционную систему.
В современных компьютерах процесс начальной загрузки начинается с выполнения процессором команд, расположенных в постоянной памяти (например на IBM PC — команд BIOS), начиная с предопределённого адреса (процессор делает это после перезагрузки без какой бы то ни было помощи). Данное программное обеспечение может обнаруживать устройства, подходящие для загрузки, и загружать со специального раздела выбранного устройства (чаще всего загрузочного сектора данного устройства) загрузчик ОС.
Каков порядок работы программы POST?
Полный регламент работы POST:
1. Проверка всех регистров процессора;
2. Проверка контрольной суммы ПЗУ;
3. Проверка системного таймера и порта звуковой сигнализации (для IBM PC — ИМС i8253 или аналог);
4. Тест контроллера прямого доступа к памяти;
5. Тест регенератора оперативной памяти;
6. Тест нижней области ОЗУ для проецирования резидентных программ в BIOS;
7. Загрузка резидентных программ;
8. Тест стандартного графического адаптера (VGA или PCI-E);
9. Тест оперативной памяти;
10. Тест основных устройств ввода (НЕ манипуляторов);
12. Тест основных портов LPT/COM;
13. Тест накопителей на гибких магнитных дисках (НГМД);
14. Тест накопителей на жёстких магнитных дисках (НЖМД);
15. Самодиагностика функциональных подсистем BIOS;
16. Передача управления загрузчику.
Для чего предназначена программа BIOS Setup?
Пользователи компьютеров наиболее часто имеют дело с частью BIOS под названием BIOS Setup. Bios Setup предназначена для настройки работы отдельных компонентов аппаратной составляющей персонального компьютера с помощью опций.
Компьютеры плотно вошли в нашу жизнь. Их используют для развлечения и работы. К сожалению, проблемы с ними тоже не редкость. Бывают такие ситуации, когда после включения сразу или через несколько минут машина намертво зависает. Из-за чего это происходит и что делать в такой ситуации, разберемся в этой статье.
Основные причины
На самом деле причин, по которым компьютер зависает при включении достаточно много.
Рассмотри основные причины, приводящие к зависанию:
- большое количество программ, запускающихся при старте системы;
- вирусы и другие вредоносные приложения;
- перегрев центрального процессора, видеокарты или других комплектующих;
- неправильно установленные или проблемные драйвера;
Перед тем как приступать к исправлению ошибки необходимо ее точно диагностировать и установить причины ее возникновения.
Перегружена память
Пользователи постоянно забывают следить за наличием свободного места на системном жестком диске, в результате чего память оказывается перегружена. Это приводит к тому, что компьютер может зависнуть в любой момент.
На самом деле в процессе работы практически все программы создают на винчестере множество служебных файлов. Особенно это относиться к браузерам и другим программам, требующим загрузки информации из интернета. Если места на жестком диске не остается, то приложениям просто некуда создавать временные файлы, и они зависают, при этом может нарушиться работа и всей системы в целом.
Избежать проблемы легко, для этого достаточно регулярно освобождать место на диске. Для этого можно удалять лишние или неиспользуемые приложения, файлы, а также производить очистку с помощью специализированных утилит.
Много программ в автозагрузке
Очень распространенной причиной, приводящей к зависанию компьютера после загрузки операционной системы, является большое количество приложений в автозагрузке. Каждая программа потребляет определенные ресурсы и их может просто не хватить на всех, почему и происходит сбой.
Устанавливая новые приложения пользователи, как правило, не обращают внимание на появляющиеся подсказки и параметры установки, а сразу нажимают кнопку «Далее…». В результате у многих программ остается установленная по умолчанию галочка «Загружать вместе с Windows» и они запускают при старте операционной системы.
Предотвратить такую ситуацию можно, если внимательно читать инструкции к устанавливаемому софту, а также удаляя ненужные приложения из автозапуска.
Загружена оперативная память
Временная память, в которой происходит выполнение программ, называется оперативной. Она используется при запуске любого приложения или игры. Ее объем достаточно ограничен и при полном его заполнении начинаются тормоза. В некоторых случаях, когда запущенно сразу несколько ресурсоемких приложений компьютер может зависнуть совсем.
В большинстве случаев эта проблема возникает тогда, когда в автозагрузке присутствует большое количество программ или у людей, любящих запускать сразу много разнообразных приложений или огромное количество вкладок в браузере.
Вирус
Вредоносные программы в современном мире встречаются в огромном количестве. Заражение компьютера может привести к самым разнообразным последствиям. Пока инфицировано небольшое количество файлов пользователь может не заметить присутствия нежелательных приложений. По прошествии некоторого времени свое присутствие вирус проявляет более явно.
Наиболее частые последствия заражения вирусом:
- часть программного обеспечения перестает запускаться или работает с ошибками;
- перезагрузка через несколько минут после старта;
- удаление или повреждение некоторых файлов;
- повышенная нагрузка на сетевое соединение.
Независимо, от того каким типом заразы инфицирована система это представляет угрозу для ее работоспособности и сохранности данных. Несмотря на развитие разнообразных антивирусных систем обеспечить защиту на 100% не может ни один софт в текущее время. Поэтому от внимательности пользователя, прежде всего, зависит своевременное выявление вирусов.
Видео: Чтобы наш компьютер не зависал и работал быстро-это очень просто!
Перегрев
Не всегда ошибки, вызывающие зависание компьютера связаны с программной частью. Железо тоже способно доставить много хлопот пользователю. Современные высокопроизводительные устройства выделяют достаточно много тепла. Перегрев может привести к зависанию системы или выходу из строя отдельных компонентов.
Пользователям настольных компьютеров достаточно просто проводить профилактику перегрева. Достаточно чистить время от времени системный блок от накопившейся пыли. Более проблемно провести очистку ноутбуков и других мобильных устройств из-за небольших размеров и особенностей конструкции.
Драйвера
Операционной системе необходимо знать, как управлять комплектующими. Для этой цели производители разрабатывают специализированные утилиты – драйвера. В состав Windows уже входят программы для правильной работы ключевых устройств, но для функционирования некоторых потребуется устанавливать пакеты от производителя.
Основные виды устройств драйвера, которых необходимо инсталлировать самостоятельно:
Конкретный набор определяется для каждого ПК отдельно. Неправильная установка одного или нескольких драйверов может привести к самым разным последствиям.
Последствия некорректной установки драйверов:
- отсутствие возможности работы с устройством (пропадание звука и т. п.);
Возникают подобные ошибки и по вине разработчиков утилит, управляющих работой устройств. Наиболее часто пользователь сталкивается с этим при установке драйверов из не доверенных источников или версии, находящиеся в стадии тестирования.
Проблема в питании
Компьютеры, как и другие современные электронные устройства, предъявляют достаточно строгие требования к питанию. Поэтому особенно важно уделить внимание качеству приобретаемого блока питания. Правильный выбор этого компонента поможет в дальнейшем избежать многих проблем и обеспечить долговечность самого ПК.
Например, приобретая недостаточно мощный блок питания и высокопроизводительную видеокарту, пользователь рискует столкнуться с зависанием компьютера в неподходящий момент или постоянными перезагрузками.
Что делать если компьютер завис при включении? Находим решение
Рассмотрим типы проблем, приводящих к зависанию ПК:
Программные ошибки
Наиболее распространенные проблемы связаны с софтом, установленным на компьютере. Начинать поиски всегда стоит с самых простых вариантов. Поэтому необходимо удостовериться в наличие свободного места на жестком диске и при необходимости очистить его.
Воспользоваться для освобождения пространства на винчестере можно встроенными в Windows средствами или специальными утилитами, например, CCleaner. В последнем случае имеется больше возможностей по настройке. Порекомендовать утилиту CCleaner можно и тем, кому необходимо отключить автоматическую загрузку лишних приложений.
Людям, активно использующим глобальную сеть, в обязательном порядке следует проверить все устройства на заражения вирусом. С этого же надо начать, если ОС не стартует совсем. Можно посоветовать использовать для этих целей утилиту CureIt! от компании Доктор Веб или Kaspersky Rescue Disk от Лаборатории Касперского.
Обе утилиты можно запустить со сменных носителей, что позволяет искать инфицированные файлы даже при значительных проблемах. Во избежание повторного заражения рекомендуется устанавливать специальные антивирусы.
Аппаратные проблемы
С аппаратными проблемами приходится сталкиваться значительно реже. Решить их самостоятельно достаточно сложно. Если есть некоторый опыт работы с техникой, то стоит обратить внимание на температуру процессора и видеокарты. Проверив показания датчиков с помощью специального утилит, например, HWMonitor.
В случае если температура превышает 60–70 градусов Цельсия для центрального процессора или 80–90 для видеокарты, то наиболее вероятной причиной неисправности является пыль или неисправность системы охлаждения. Для решения проблемы необходимо удалить пыль, заменить термопасту, проверить работу вентиляторов и крепление радиаторов.
Диагностировать проблемы, связанные с питанием, в домашних условиях и без специальных знаний сложно. Единственно, для их исключения при тестировании можно посоветовать использовать заведомо рабочий блок.
Проблемы с зависанием компьютеров очень часто можно решить самостоятельно, не прибегая к услугам сервисных центров. Это позволяет значительно сэкономить. При этом придется потратить только немного времени. В случае, когда решить проблему не удается в домашних условиях, конечно, придет обращаться в специализированную фирму.
Бывает, что не включается компьютер при запуске, читайте об этом в отдельной статье.
Причин, из-за которых установленные на компьютере программы вдруг перестают работать или вообще запускаться - огромное количество. К сожалению, многие из них носят исключительно специфический характер, связанный с определенными программными и техническими нюансами каждого отдельно взятого приложения и требуют от пользователя эксклюзивного подхода к решению вопроса по восстановлению их работоспособности.
Однако, есть немало и общих, достаточно часто возникающих причин, устранив которые, можно без особого труда восстановить работу большинства софта. Такие, реально действенные универсальные решения мы и хотим предложить нашим пользователям в приведенных ниже инструкциях.
Итак, если у вас перестала работать или запускаться какая-либо установленная на компьютере программа, нужно.
Сверить технические требования (System Requirements)
Прежде, чем скачать и воспользоваться какой-либо программой, всегда внимательно проверяйте на официальном сайте разработчика софта технические требования, предъявляемые к каждой программе. При этом обязательно учтите, что такие тех. требования бывают двух видов: минимальные ( гарантируют, что программа точно запустится на вашей машине, но никак не гарантируют, что она будет быстро и полноценно функционировать) и рекомендуемые.
Изучая тех. требования каждого приложения, обращайте внимание на следующие нюансы, особенно, если у вас проблемы не с "бытовым" софтом, а со специализированными утилитами ( например, не запускается / не работает программа для настройки, тестирования и разгона какого-либо "железа" или другие профессиональные приложения):
Остальные программные требования, уточняйте на официальных сайтах разработчиков программ! Внимательно изучив все аппаратные и программные требования, вы сразу же поймете, "потянет" ли ваш компьютер нужную программу или нет!
Обновить / переустановить драйверы
Драйвер является важнейшей технической программой от которой на 100% зависит нормальная работа всех устройств, подключенных к компьютеру (процессор, видеокарта, звуковая карта и другие устройства), а так же самой операционной системы и всего установленного на ней софта. Согласитесь, если у вас будут какие-либо проблемы с драйвером веб-камеры, то вы вряд ли сможете воспользоваться программой для записи с вебки или сделать видеозвонок в Скайпе. Другой вариант. К примеру, если у вас на компьютере не установлен (или начал конфликтовать) драйвер звуковой карты, то ваш медиаплеер однозначно покажет "немое кино", и про работу в аудиоредакторах / конверторах тоже можно забыть. Поэтому, совершенно очевидно, что за драйверами нужно внимательно следить и вовремя их обновлять!
Для решения этой задачи можно воспользоваться специализированными программами для поиска и установки драйверов или же сделать это вручную.
Полная деинсталляция и переустановка неработающих программ
Действительно такой метод реально может сработать. Сбоящие или вовсе не запускающиеся приложения стоит попробовать удалить из системы и установить заново. Для корректного удаления программ из "операционки", лучше всего использовать специализированные приложения "деинсталляторы". Для этих целей, мы рекомендуем воспользоваться Revo Uninstaller.
Впрочем, программ-деинсталляторов на сегодняшний день создано немало. Если вышеуказанная программа вас чем-то не устроит, то можно выбрать любое-другое понравившееся приложение.
Полная очистка системы программами-чистильщиками
Такой метод тоже вполне оправдан, особенно, в качестве профилактики сбоев работы программ в будущем. Запомните! Чем меньше всякого "мусора" будет скапливаться в операционной системе, тем стабильнее, она и весь установленный на ней софт будут работать!
Для выполнения задач подобного плана так же, лучше всего пользоваться специальными программами - "чистильщиками". Лучшей из них, бесспорно, является CCleaner.
Впрочем, программ-чистильщиков на современном компьютерном рынке тоже достаточно много. Если возникнет необходимость, можно легко выбрать любую-другую программу для очистки "операционки".
Удаление программ из автозагрузки (автозапуска)
Программы, находящиеся в автозапуске, всегда автоматически стартуют вместе с операционной системой и в дальнейшем продолжают висеть в ней "фоном". Без сомнения, многие из них вполне могут конфликтовать с другими приложениями, запускаемыми / работающими на ПК, а так же сильно тормозить работу системы и даже нередко приводить к ее сбоям! Попробуйте убрать из автозагрузки все лишние приложения и, вполне возможно, нужные вам программы снова начнут запускаться и нормально работать.
Очистить автозагрузку от лишних объектов можно разными способами, как вручную (через службу msconfig), так и с помощью специализированных утилит, например, все тот же CCleaner.
Очистка компьютеров от вирусов
Вредоносное ПО, так же может оказаться реальной причиной из-за которой могут не работать или не запускаться те или иные программы на компьютере, поскольку, вирусы могут легко повреждать, удалять и блокировать рабочие файлы программ. По этому, рекомендуем всем пользователям обзавестись серьезным антивирусом и полностью проверить систему!
Добавить исключения в антивирус
Как известно, идеальных антивирусов не существует. Многие из них зачастую грешат ложными срабатываниями. В любой момент, антивирус может легко удалить с компьютера чем-то "не понравившиеся" ему файлы какой-либо программы или заблокировать их выполнение. Соответственно, эти программы тут же перестанут работать или вовсе запускаться.
Чтобы избежать подобных неприятных ситуаций, нужно воспользоваться функцией "Исключения", имеющейся практически в каждом нормальном антивирусе. Учтите! В исключения можно добавлять только те файлы и папки, которые вы считаете стопроцентно безопасными!
Запуск программ от имени администратора и отключение UAC
UAC - система контроля учетных записей пользователей Windows, созданная для контроля за разграничением прав доступа пользователей к функциям операционной системы и предотвращения несанкционированного запуска различных приложений в "фоновом" режиме.
Повышенными привилегиями в системе обладает только администратор. И только он может запускать многие системные службы и установленные на компьютере приложения! По этому, если у вас не запускается какая-либо программа, попробуйте ее перезапустить с административными правами. Заодно, можно отключить систему UAC, чтобы не мешала в дальнейшем.
Различные сетевые проблемы.
Здесь вы найдете решения для наиболее часто встречающихся сетевых проблем из-за которых перестают работать или запускаться многие программы, установленные на компьютере.
Прописывание DNS Гугля
Многим программам для запуска и работы, в обязательном порядке, необходимо постоянное и стабильное интернет-соединение, с чем, у большинства наших провайдеров частенько возникают серьезные проблемы. Одна из наиболее частых проблем - сбои DNS-серверов. Итак, если ваш роутер фиксирует наличие подключения, но при этом, страницы в браузере по непонятной причине не грузятся, вполне возможно, что у провайдера возникли какие-то проблемы с DNS-серверами. Для устранения проблемы необходимо прописать в настройках сетевой платы альтернативные DNS серверы от Google.
Делается это так. Кликаем на значок сети (в правом нижнем углу экрана) и открываем "Центр управления сетями и общим доступом".
В открывшемся меню, выберите опцию "Изменение параметров адаптера" и вы попадете в раздел "Сетевые подключения".
В этом разделе выберите "Подключение по локальной сети" или же "Беспроводное сетевое соединение" (если получаете интернет через Wi-Fi). Кликните по выбранном объекту правой клавишей мыши и выберите пункт "Свойства".
В свойствах сетевой платы, выберите пункт "Протокол Интернета версии 4 (TCP/IPv4)", кликнув по нему дважды. В открывшихся свойствах сетевого протокола, пропишите следующие цифры: «Предпочитаемый DNS-сервер» - 8.8.8.8, «Альтернативный DNS-сервер» - 8.8.4.4. После чего, для подтверждения операции нажмите "ОК".
В качестве альтернативного варианта, можно сделать еще так. В графе "предпочитаемого сервера" прописать ip-адрес своего роутера (как правило: 192.168.1.1 или 192.168.0.1), а в "альтернативном" - уже ДНС Гугля.
После этого, если проблема была именно с DNS-серверами, странички в браузере начинают нормально открываться, а работа многих программ, требующих подключение к интернету, нормализуется.
Добавление программ в сетевые исключения антивирусов
Как уже говорилось ранее, в одной из вышеописанных инструкций, многие современные антивирусы далеко не идеальны и зачастую огорчают пользователей ложными срабатываниями. По своему "сугубо личному" усмотрению они легко могут и заблокировать всю сетевую активность любых работающих / запускающихся на компьютере программ. К чему это приведет, догадаться не сложно! Бороться с этим, так же, можно только одним способом - добавлять программы и запущенные в системе процессы в исключения.
Выключение автономной работы в Internet Explorer
Многие windows-приложения (например, Windows Live Mail и Skype др.) напрямую "завязаны" с браузером Internet Explorer. То есть, попросту, используют его движок. Из-за этого (в некоторых ситуациях) автономный режим этого браузера может вызывать проблемы в работе сетевых приложений. Если у вас, к примеру, не восстанавливается почта в Windows Live Mail или же вы не можете войти в Скайп (показывается белый или синий экран без полей для ввода логина / пароля) и другие подобные проблемы с ранее нормально работавшим софтом, возможно, нужно отключить автономный режим в Интернет Эксплорере.
Делается это так. Запустите Internet Explorer. Нажмите клавишу "ALT", чтобы появилась панель управления браузером. Откройте вкладку "Файл" и уберите значок-флажок с пункта "Работать автономно" (так же, эта опция может находиться в вкладке "Сервис").
Однако, учтите, что в новых версиях браузера IE, такой опции в панели управления нет, и отключить автономный режим можно только через редактирование реестра!
Делается это следующим образом. Откройте меню "Пуск" и в поисковой строке наберите команду: regedit. Кликните лев. клавишей мыши на появившемсяся вверху ярлыке regedit.exe, чтобы запустить редактор реестра.
Далее, в реестре найдите ветку: HKEY+CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings. После этого, кликните дважды левой клавишью мыши по параметру "GlobalUserOffline" и в открывшемся окошке, установите значение - 0.
Если такого параметра в реестре вы найдете, то его обязательно нужно создать! Кликните правой клавишей мыши в правом окне редактора реестра и выберите опцию "Создать", а затем "Параметр DWORD".
Далее, задайте название новому параметру: GlobalUserOffline. Затем, кликните по нему дважды и установите значение - 0.
После завершения всех операций, автономный режим IE будет точно отключен и работоспособность нужных вам программ должна восстановиться.
На этом, данное руководство заканчивается. Мы по возможности представили вам все самые быстрые и эффективные методы для решения распространенных проблем, связанных с запуском и работой софта. Попробуйте воспользоваться наиболее подходящими из них и, скорее всего, ваши программы снова заработают!
Читайте также: