Я могу выполнить какой-либо c, сделанный прогр без какой-либо платформы OS?

Важное примечание - то, что использование SQL-запросов поставщика для получения последнего вставленного идентификатора безопасно использовать, не боясь о параллельных соединениях.

я всегда думал, что необходимо было создать транзакцию, чтобы ВСТАВИТЬ строку и затем ВЫБРАТЬ последний вставленный идентификатор, чтобы не получать идентификатор, вставленный другим клиентом.

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

16
задан Kevin 10 January 2012 в 04:05
поделиться

9 ответов

Конечно, можете. Все, что требуется (типичному) ЦП, - это питание и доступ к памяти, затем он выполнит свою жестко запрограммированную последовательность загрузки.

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

Эти инструкции, конечно, могут исходить из программы на языке C, хотя на этом уровне более распространены самые ранние стадии (называемые начальной загрузкой) в ассемблере.

Это, конечно, не означает, если я Если читать заголовок вашего вопроса буквально, то любая программа C должна запускаться таким образом. Если программа предполагает, что есть ОС, но ее нет, это не сработает. Это должно быть довольно очевидно.

19
ответ дан 30 November 2019 в 17:15
поделиться

You can run a program in a system without an Operating System ... and that program need not be an Operating System itself.

Think about all the computers (or processors if you prefer) inside a car: engine management, air conditioning, ABS, ..., ...
Во всех этих системах работает программа (возможно, написанная на C). Ни у одного из процессоров нет ОС.

Стандарт специально различает размещенные реализации и автономные реализации :

    5.1.2.1 Freestanding environment
1   In a freestanding environment (in which C program execution may take place
    without any benefit of an operating system), the name and type of the
    function called at program startup are implementation-defined. Any library
    facilities available to a freestanding program, other than the minimal set
    required by clause 4, are implementation-defined.
2   The effect of program termination in a freestanding environment is
    implementation-defined.

    5.1.2.2 Hosted environment
1   A hosted environment need not be provided, but shall conform to the
    following specifications if present.
    ...

6
ответ дан 30 November 2019 в 17:15
поделиться

Думаю, вам будет интересно написать «игрушечные» ядра, которые предназначены для работы в симуляторах, таких как QEMU (или платформах виртуализации, Xen + MiniOS - одна из моих любимых). Без (больших) трудностей вы можете запустить базовую консоль и начать печатать на ней. Это действительно весело, познавательно и одновременно доставляет удовольствие.

Если вы работаете на x86 ... и заставляете свое шикарное ядро ​​работать под QEMU ... есть очень хороший шанс, что оно также будет работать на реальном оборудовании. Возможно, вам это понравится.

В любом случае, ответ на ваш вопрос однозначно положительный. Это особенно проще, если вы используете загрузчик ... например, Google memtest86 и получите код.

4
ответ дан 30 November 2019 в 17:15
поделиться

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

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

2
ответ дан 30 November 2019 в 17:15
поделиться

Встроенные системы сами по себе являются законными ОС, но не ОС общего назначения . Любая пользовательская программа (т.е. программа, которая сама по себе не является операционной системой) требует, чтобы операционная система запускалась поверх.

1
ответ дан 30 November 2019 в 17:15
поделиться

As an example: Building Bare-Metal ARM Systems with GNU

Many embedded systems do not have enough resources for a full OS, some may use a scheduler kernel or RTOS, others are coded 'bare metal'. The main() C entry point is entered after reset. Only a small amount of assembler code is required to initialise a microprocessor, to execute C code. All C requires to run generally is a stack - usually simply a case of initialising the stack pointer to a specific address. Some processor specific initialisation of interrupt/exception vectors, system clocks, memory controllers etc. may be necessary also.

On a desktop PC, typically you have a BIOS that handles basic hardware initialisation such as SDRAM controller setup and timing, and then bootstrapping from a disk boot-sector, which then in turn bootstraps an OS. Any of that code could be written in C (and some of it probably is), and it could do something other than boot an OS - it could do anything - it is just code.

OSs are useful for non-dedicated computing devices where the end user many select one of many programs to execute and possibly several simultaneously. Most embedded systems do just one thing, the software is often loaded from ROM or executes directly from ROM, and is never changed and executes indefinitely (usually stopped only by power-down).

You still of course might implement device drivers and the like, but often these are an integral part of the application rather than a separate entity. Even when you do use an RTOS in an embedded system, it is still generally integral to your application rather than an OS in the sense you might understand. In these cases the RTOS is simply a library like any other, and is often initialised and started from main() rather then the other way around as you might expect.

1
ответ дан 30 November 2019 в 17:15
поделиться

Очевидно, вы не можете выполнить любую произвольную программу на C без какой-либо ОС или ее эквивалента. Точно так же я могу написать программу на C под Linux, которая не будет работать под Microsoft Windows.

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

Многие встроенные системы имеют просто ЦП, подключенный к ПЗУ, с выводами из микросхемы, которые непосредственно подключены на входы и выходы. Нет пользовательского ввода-вывода, нет файловой системы, нет планирования процессов, ничего, для чего вам обычно нужна ОС. В этих случаях программист на C может написать программу, которая будет записана в ПЗУ, которая будет обрабатывать все сама.

(Некоторые встроенные системы более сложны и могут использовать ОС. Linux часто используется, поскольку он « s бесплатны для использования, могут быть сделаны очень компактными и могут быть изменены на любом уровне. Но не все.)

0
ответ дан 30 November 2019 в 17:15
поделиться

каждая часть оборудования должна иметь часть программного обеспечения, которое управляет им, будь то встроенная прошивка (меньшая и относительно фиксированная, как vxworks) или программное обеспечение операционной системы, которое может запускать сложный произвольный код на поверх него (например, windows, linux или mac)

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

поэтому, возвращаясь к вашему вопросу, да, вы МОЖЕТЕ запускать любую программу c на ничего, НО это зависит от того, что это за программа на c. если это программа низкого уровня c, которая может взаимодействовать с оборудованием, тогда вам не нужно ничего, кроме вашей программы и оборудования. если это программа c более высокого уровня (например, чат-программа), тогда вам понадобится целая куча вещей между вашей программой и оборудованием.

имеет смысл?

0
ответ дан 30 November 2019 в 17:15
поделиться

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

  1. Напишите "reset_routine", который запускается при запуске платы. Это инициализирует часы и любую необходимую внешнюю память. (Эта процедура должна выполняться из памяти, которая является внутренней или той, которая может быть инициализирована и запрограммирована извне).
  2. Функция reset_routine после инициализации оборудования передает управление подпрограмме sw_runtime_init, которая настроит стек и глобальные переменные, определенные вашим приложением. (Сделайте переход от reset_routine к sw_runtime_init вместо вызова, чтобы избежать использования стека).
  3. Скомпилируйте и свяжите это со своим приложением, при этом убедитесь, что "reset_routine" связана с местом, на которое указывает вектор сброса.
  4. Загрузите это на свою цель и молитесь.
0
ответ дан 30 November 2019 в 17:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: