Что фактически делает ОС?
Что именно делает операционная система? Я знаю, что операционные системы могут быть запрограммированы, например, на С++, но я ранее считал, что программы на С++ должны запускаться под операционной системой? Может кто-нибудь объяснить и дать ссылки? заранее спасибо, ell
Ответы
Ответ 1
Операционная система - это слой между вашим кодом (кодом пользователя) и оборудованием.
ОС отвечает за управление физическими компонентами и дает вам простой (надеюсь) API, из которого можно построить. Он обрабатывает, какие программы запускаются, когда, кто идет первым, как обрабатывается память, кто получает память, видеоролик и все эти хорошие вещи.
Например, при создании графического интерфейса вместо отправки каждого бита на монитор вы указываете ОС (или оконному менеджеру) на создание окна. Затем вы сообщите ему, чтобы он разместил кнопку в вашем окне. Затем ОС обрабатывает чертеж, перемещая окно, перемещая кнопку (но сохраняя ее там, где она должна находиться в окне).
Теперь вы можете запрограммировать операционную систему на С++, но это непросто. Вам необходимо разработать свое ядро и многое другое, найти способ взаимодействия с аппаратным обеспечением, а затем разоблачить этот интерфейс для своих пользователей и их программ.
Таким образом, по сути, ОС обрабатывает взаимодействие между программным обеспечением и оборудованием и управляет вашими физическими ресурсами. Программы на С++ могут запускаться в ОС или, при достаточной работе, запускаться самостоятельно или даже быть ОС.
Ответ 2
Собственно, сам стандарт С++ имеет что сказать по этой проблеме. §1.4/7:
Определены два вида реализации: хостинг и автономный. Для размещенной реализации этот международный стандарт определяет набор доступных библиотек. Внештатной реализацией является реализация, которая может выполняться без использования операционной системы и имеет набор библиотек, поддерживающих реализацию, которые содержат определенные библиотеки поддержки языков (17.4.1.3).
И в 17.4.1.3,
Внештатная реализация имеет набор заголовков, определенный реализацией. Этот набор должен включать по меньшей мере следующие заголовки, как показано в таблице 13:
Table 13—C++ Headers for Freestanding Implementations
_______________________________________________
Subclause Header(s)
18.1 Types <cstddef>
18.2 Implementation properties <limits>
18.3 Start and termination <cstdlib>
18.4 Dynamic memory management <new>
18.5 Type identification <typeinfo>
18.6 Exception handling <exception>
18.7 Other runtime support <cstdarg>
В поставляемой версии заголовка должны быть объявлены как минимум функции abort(), atexit() и exit() (18.3).
Эти заголовки либо определяют константы, либо предоставляют базовую поддержку компилятору. На практике некоторые функции языка будут отсутствовать, пока ОС не завершит некоторую инициализацию, например new
и catch
.
Ответ 3
ОС - это просто программа, которая запускает другие программы и управляет аппаратными ресурсами для них.
Если вы действительно серьезно относитесь к попаданию во внутренние дела, я бы рекомендовал прочитать книгу Понимание ядра Linux.
Ответ 4
sure, http://en.wikipedia.org/wiki/Operating_system
Операционная система - это программное обеспечение на компьютере, которое управляет тем, как разные программы используют свое оборудование, и регулирует способы, которыми пользователь управляет компьютером. Операционные системы находятся практически на любом устройстве, которое содержит компьютер с несколькими программами - от сотовых телефонов и игровых консолей до суперкомпьютеров и веб-серверов. Некоторые популярные современные операционные системы для персональных компьютеров включают Microsoft Windows, Mac OS X и Linux (см. Также: список операционных систем, сравнение операционных систем).
Я имею в виду описание операционной системы, что она делает, когда и почему выходит далеко за пределы ответа на этом сайте imho.
Ответ 5
Операционная система, в частности ее ядро, разрабатывается на языке, таком как C. И он скомпилирован в машинный код, как и любая другая программа. Основное различие между основной ОС и некоторым кодом, который вы пишете на C, заключается в том, что C-код будет запускаться в тайм-шер через системный планировщик ОС. Также учтите, что ОС работает сначала и может настроить такую среду, в которой он полностью контролирует и ограничивает все, что он запускает. Также имейте в виду, что системные вызовы - это то, как процесс может связываться с ОС, все это типичные машинные инструкции, которые могут выполняться на любом другом процессоре своего типа.
Несколько ключевых функций, которые предоставляет любая ОС основного уровня:
- Планировщик CPU - это будет загружать процесс, позволять ему работать в течение очень ограниченного времени, прежде чем отбросить его назад, восстановить управление и позволить что-то еще запустить (пусть это будет задача ядра или другой процесс, обычно ядро задачи имеют приоритет)
- Управление памятью. Любое приложение, которое вы запускаете, не имеет точных адресов памяти, поскольку оно подвержено изменениям. Все процессы будут выполняться в виртуальной памяти, и ОС переведет виртуальную память (например: 0x41000 +) в физический адрес. (опять же, его абстрагирование аппаратного обеспечения, как часто упоминается)
- Файловые системы - различные виды
- Ресурсы - любой вид устройства следует рассматривать как ресурс. Процесс может запрашивать доступ к ресурсу. (Как ни странно, в этот день и в возрасте нет основной ОС имеет механизм предотвращения мертвых блокировок для ресурсов.)
- Безопасность - это выполняется через роли. Очень важно, чтобы каждый процесс проходил в жестких ограничениях. Это еще одна абстракция, которую предоставляет ОС.
Ответ 6
Операционная система - это просто программное обеспечение, которое является интерфейсом между вашим оборудованием и вашим программным обеспечением. Это делает абстракцию этого оборудования, чтобы упростить его использование. Например, вам не нужно читать статус клавиатуры в своих программах, чтобы проверить, ударил ли пользователь ключ. Вы можете подумать об этом как о множестве кирпичей, собранных вместе и сложенных друг на друга, с очень точного представления аппаратного обеспечения до очень абстрактного вида (от битов, до окон или кнопок... например)
Вам не нужно программировать операционную систему на определенном языке, но большинство из них написано на C по соображениям эффективности и удобства. Вы можете выполнять программирование (свои собственные приложения) на любом языке, при условии, что у вас есть правильные библиотеки, установленные в операционной системе.
Ответ 7
Нет четкого определения того, что является обязанностью ОС. Он может включать следующее:
- Управление памятью
- Устройства и драйверы
- Файловая система (ы)
- Процессы и потоки
- Системные вызовы
В двух словах ОС - это программа, которая позволяет пользователю управлять компьютерным оборудованием сравнительно простым способом.
Ответ 8
С точки зрения программирования операционные системы в основном обеспечивают абстракцию. Абстракция от деталей процессора и управления памятью, абстракция от работы с аппаратными устройствами, абстракция от деталей сетевых стеков протоколов.
Операционная система обеспечивает интерфейс программирования более высокого уровня, часто стандартизованный в нескольких операционных системах, таких как POSIX, для всех ароматов Unix.
Ответ 9
После прочтения вопроса, я вижу, что вы пытаетесь спросить. Что вы спрашиваете, если программы C/С++ требуют запуска ОС. Ответ - нет. C/С++ - это компилятор, который переводит человеческий язык в машинный язык. Он не требует конкретной операционной системы. Однако, если вы компилируете, скажем, Visual Studio, полученный исполняемый машинный код не может работать ни на чем, кроме Windows.
В частности, код C/С++ обычно переносится в том случае, если у вас есть компилятор для операционной системы, вы можете скомпилировать его, и он будет работать так же. Однако иногда у вас есть машинный код (или код, специфичный для ОС), например, приложение Windows, которое использует интерфейсы на основе Windows, которые нельзя перенести на другую операционную систему. Некоторые примеры, о которых я могу думать, похожи на операции с каталогом, обычно не переносятся и обычно зависят от того, на какой ОС вы находитесь. Однако большинство файловых операций, таких как fopen, переносимы.
ОС немного отличается. Для этого требуется другой тип компилятора, и он требует другого способа загрузки. Большинство ОС создаются в C/С++, затем компилируются компилятором, затем распределяются. Например, Microsoft написала Windows 95 на C/С++, они передали ее через компилятор, затем сжег полученный исполняемый код на CD-ROM, а затем продали его вам, а затем вставили диск и скопировали полученный исполняемый код на вашу машину, и вы ее используете.
Они не дают вам исходный код, затем компьютер компилирует его; обычно они дают вам исполняемый файл.
Ответ 10
В основном ОС - это программа, в которой все другие программы выполняются внутри. Это буквально первая программа, которую ваш компьютер запускает при загрузке. Таким образом, он контролирует все аппаратные средства и действует в гейткипере для других программ для доступа к этому оборудованию. Он также контролирует (или должен, по крайней мере) все программы, которые работают под ним, - когда они начинаются, как остановить и какие ресурсы у них есть доступ. Вы можете называть его "Программа управления мастером":)
Ответ 11
Термин "операционная система", применяемый к ПК, обычно относится к современной операционной системе "защищенной памяти", которая обеспечивает не только базовый набор системных сервисов, но и полный пользовательский интерфейс:
-
комбинация ядра, драйверов устройств и системных служб, обеспечивающих защиту памяти, задачи, которые не могут помешать памяти друг друга, и потоки, которые являются единицами выполнения внутри процесса, а также пути для потоков и задачи для общения друг с другом и доступа к общим ресурсам, таким как файловые системы, содержащие файлы, на устройствах хранения, таких как жесткий диск вашего ПК, на самом деле являются ядром операционной системы.
-
"оболочка" поверх этой операционной системы может быть такой же простой, как текстовая командная команда "command.com" в DOS (помните "C: > _"?) или такая сложная, как Windows Shell, включая его панель управления и т.д.
Иногда "дистрибутив Linux" содержит гораздо больше, чем операционную систему, но неофициально упоминается одним именем (например, Ubuntu) и, таким образом, между тем, что представляет собой операционная система (возможно, ядро Linux и стандартные библиотеки), а приложения, которые просто поставляются с этой операционной системой (среды Gnome и KDE в Linux), довольно серые.
Отличный способ узнать, что такое настоящая операционная система, - это прочитать одну из книг Tannenbaum об операционных системах. Я считаю, что он подробно описывает реализацию своего ядра "minix". Другая книга - "Внутренние ядра ядра Linux". Если вы можете обрабатывать технические детали в этом типе книги, тогда вы действительно можете понять, что такое "ядро" операционной системы, а затем начать понимать слои вокруг этого ядра.
Мне не известно об одной коммерческой или операционной системе с открытым исходным кодом, которая написана в основном на С++. Такое системное программирование чаще всего выполняется в сочетании с чистым ANSI C и Assembly/Machine language. Биты сборки низкого уровня часто участвуют в таких задачах, как обработка прерываний, инициализация оборудования и загрузка системы. Перед тем, как иметь кучу, стек и рабочую систему виртуальной памяти, вы не захотите использовать объекты С++ или даже некоторые функции C, такие как malloc. Ваши ресурсы и ваш дизайн должны быть ограничены критериями производительности, и любые дополнительные накладные расходы, даже семантические накладные расходы, должны быть осуждены.
Недавно Линус Торвальдс лихо оскорбил С++ и описал в списке рассылки, почему он никогда не будет использовать его для ядра Linux. Я считаю, однако, что С++ делает набеги в областях, которые обычно были гаванями "чистого C". Например, команда Gnu GCC готова разрешить С++ в кодовую базу GCC, наконец.