Являются ли libc и malloc частью операционной системы?

У меня была дискуссия с коллегой о malloc, и мне было интересно, есть ли случаи, когда определенные вызовы libc, такие как malloc, реализуются операционной системой?

Я всегда думал, что malloc вызывает некоторые символы, представленные в «sys», чтобы объявить, какие адреса памяти он будет использовать. Из того, что я думал, операционная система позволит указать сегментацию программы с использованием некоторого API-интерфейса уровня ОС... который может быть похож на:

int assign_memory_segmention(size_t start, size_t end);

Я знаю, что мой заголовок stdlib.h является частью GNU из-за заголовка GPL... и, как GNU сообщил мне... они не Unix. Так является ли malloc просто указателем функции на реализацию кучи ОС?


person Harley Armstrong    schedule 22.04.2014    source источник
comment
malloc вызывает системные вызовы для обеспечения динамического распределения памяти. В Linux он вызывает brk и mmap. Так что я бы назвал это абстракцией системной функциональности.   -  person Yifu Wang    schedule 22.04.2014
comment
Библиотека C содержит много обычного кода C, который предварительно скомпилирован, чтобы сделать его доступным для вас, программиста/пользователя. Большая часть этого кода не является системными вызовами. Операционная система не реализует malloc() как таковую; он предоставляет механизм, который позволяет malloc() запрашивать больше памяти, но malloc() отвечает за передачу этой памяти программе. Таким образом, они не являются частью ядра. OTOH, функции в библиотеке C поставляются с операционной системой и используются большинством программ, поэтому они очень тесно связаны с операционной системой.   -  person Jonathan Leffler    schedule 22.04.2014
comment
Незначительный момент: большая часть кода под лицензией GPL не имеет ничего общего с GNU или фондом свободного программного обеспечения (кроме использования лицензии, созданной и опубликованной ими). Поскольку ваша система, вероятно, использует glibc, она на самом деле является частью проекта GNU, но (например) ядро ​​Linux имеет тот же заголовок GPL в своем исходном коде и заголовках.   -  person    schedule 22.04.2014
comment
Ах, я сослался на уведомление, в котором говорилось, что Copyright (C) 2005, 2007, 2012 Free Software Foundation, Inc. Этот файл является частью библиотеки GNU C. В верхней части уведомления о GPL, я полагаю, я сформулировал это странным образом.   -  person Harley Armstrong    schedule 25.04.2014


Ответы (2)


Этот вопрос лучше всего задавать с другим вопросом: что такое операционная система? Или, если хотите: где вы печатаете грань между ОС и стандартными библиотеками?

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

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

Но тогда Linux — это ядро, ОС должна называться GNU/Linux (необходима цитата). Но опять же, есть системы Linux без GNU, такие как Android...

Вывод таков: термин «Операционная система» не является техническим. Если вы хотите быть точным, используйте ядро или стандартную библиотеку C и т. д.

person rodrigo    schedule 22.04.2014
comment
Для этого вопроса я считаю, что достаточно учесть, что операционная система - это то, что происходит внутри системного вызова (в коде уровня ядра). - person André Puel; 23.04.2014
comment
@AndréPuel: тогда malloc не работает в режиме ядра, поэтому он не является частью этого определения ОС. Но он может использовать службы ОС для получения дополнительной памяти, если это необходимо (brk, mmap или что-то еще). - person rodrigo; 23.04.2014
comment
Вот, SCO, GNU и Linux — Столлман. Кроме того, существует несколько дополнительных стандартных библиотек C, которые работают в Linux. - person Elliott Frisch; 24.04.2014

И да и нет. C malloc() обычно является вспомогательным распределителем областей памяти, предоставляемых вызовами ОС. ОС управляет всей виртуальной памятью — это часть ее работы.

person Martin James    schedule 22.04.2014