Как ОС обнаруживает числа и строки? - PullRequest
2 голосов
/ 02 августа 2011

Если у нас есть строка "A" и число 65, так как они выглядят одинаково в памяти, как ОС узнает, какая строка и какое число?

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

Ответы [ 5 ]

3 голосов
/ 02 августа 2011

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

По первому вопросу: внутренне в памяти нет абсолютно никакого различия между символом «А» и числовым значением 65 (при условии, конечно, что вы просто просматриваете один байт данных). Разница возникает, когда вы видите, как эти биты интерпретируются программой. Например, если пользовательская программа пытается распечатать строку на экране, она, вероятно, сделает какой-то системный вызов ОС, чтобы попросить ОС напечатать символ. В этом случае код в ОС состоит из серии инструкций по сборке, чтобы воспроизвести эти биты где-то в устройстве отображения. Дисплей затем выполняет рендеринг набора соответствующих пикселей, чтобы нарисовать символ «А». Другими словами, программа ни разу не «знала», что значением является «А». Вместо этого аппаратное обеспечение просто перемещало биты, которые контролировали другой фрагмент кода, перед которым в конечном итоге была поставлена ​​задача превратить эти биты в пиксели.

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

  1. На уровне ОС ядро ​​ОС даже не знает, что байт был выделен. Вместо этого ОС просто выделяет гигантские блоки памяти для пользовательской программы, которая будет использоваться во время работы. Когда программа завершается, вся эта память освобождается.

  2. На уровне программ большинство программ содержат диспетчер памяти , фрагмент кода, предназначенный для выделения и разделения этого большого куска памяти на более мелкие фрагменты, которые затем могут использоваться программой , Это обычно отслеживает выделенную память в виде списка «чанков», где каждый чанк памяти обрабатывается как двусвязный список элементов. Каждый чанк обычно снабжается информацией, указывающей, что он используется и насколько велик чанк, что позволяет диспетчеру памяти восстанавливать память после освобождения.

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

Надеюсь, это поможет!

1 голос
/ 02 августа 2011
  1. Символ 'A' и целое число 65 хранятся в памяти одинаково (по крайней мере, в 32-битных системах).Строка «A», однако, хранится по-разному, и это может зависеть от системы или языка программирования.Возьмем, к примеру, C, в котором строки будут храниться как массив символов, за которым следует нулевой символ.

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

1 голос
/ 02 августа 2011

Нет. 2 - система ведет учет всех распределений (определенного процесса) и может, таким образом, удалить их, например, когда процесс заканчивается Я предлагаю вам прочитать книгу о принципах операционной системы (например, «Современные операционные системы» Таненбаума).

0 голосов
/ 02 августа 2011
  1. Для компьютера строка - это число. Простейшим примером будет таблица ASCII, в которой для каждой буквы есть номер. Так что, если вы знакомы с C, вы можете написать printf("%c", 0x65) и фактически получить A вместо числа. Надеюсь, что это имело смысл.

  2. ОС не запоминает расположение памяти, выделенной программой. Вот для чего указатели !

0 голосов
/ 02 августа 2011
  1. «ОС» применяет алгоритм, который будет выглядеть примерно так: «если каждый символ в строке является числом, то строка является числом», и становится более сложным для десятичных чисел, +/- и т. Д.!
  2. http://en.wikipedia.org/wiki/Dynamic_memory_allocation!
...