Таким образом, я думал о языках на днях, и это ударило меня, что любая программа, записанная на скомпилированном языке, который взаимодействует с Интернетом, затем переводится в блок, который должен взаимодействовать с Интернетом. Я только что начал изучать немного x86 блока, чтобы помочь мне понять C++ немного лучше, и я экранирован тем, как что-то таким образом низкий уровень могло сделать что-то как доступ Интернет.
Я уверен, что полный ответ на этот вопрос намного больше, чем вписался бы ТАК ответ, но кто-то мог дать мне, возможно, основную сводку?
Программы пользовательского пространства, которые «взаимодействуют с Интернетом» во всех современных системах, делают это путем выдачи системных вызовов базовой операционной системе, которая предоставляет API для стека TCP / IP.
Рассматриваемые системные вызовы (такие как socket
, listen
, accept
и т. Д.) Обычно документируются на уровне C, но в каждом конкретную реализацию ОС они, конечно же, переведут в машинный код. Но то, идут ли значения в определенные регистры или места в памяти, на которые указывают определенные регистры и т. Д., Довольно второстепенно и полностью зависит от системы.
Если вам интересно, как машинный код (вероятно, также скомпилированный из C) в ядре и драйверах устройств «взаимодействует с Интернетом» (в ответ на системные вызовы), он делает это, создавая и поддерживая в памяти структуры данных для отслеживания состояния различных вещей и путем взаимодействия с базовым оборудованием (например, через прерывания, порты ввода-вывода, области устройств с отображением памяти или что-то еще, что использует эта конкретная архитектура) - точно так же, как он взаимодействует (скажем) с видеодисплей или дисковое устройство.
Что вам нужно сделать, так это найти некоторые из этих проектов веб-серверов PIC. Некоторые из них представляют собой веб-серверы, написанные на сборке и работающие на 8-битном оборудовании. Это даст вам четкое представление о том, как нечто столь же низкоуровневое, как сборка, может быть использовано для взаимодействия с остальным миром через Интернет.
Это в основном включает
Надеюсь, это развеет некоторые сомнения.
Это зависит от обстоятельств. Когда вы читаете о веб-скрипте, написанном на C, на самом деле это программа CGI. CGI - это протокол, а не язык. CGI указывает, что нужно поместить «GET», «POST» и т. Д.в REQUEST_METHOD, «foo = bar? baz = 42» в QUERY_STRING, отправлять данные в стандартный ввод и т. д. Для доступа к ним программа CGI использует системные вызовы. Веб-сервер использует CGI для связи с веб-сценарием. Программа, которая сама обменивается данными через Интернет, может использовать API системных сокетов.
Таким образом, операционная система делает все, что связано с обменом данными. Программа просто выполняет правильные системные вызовы.
Если вам интересно, как операционная система обменивается данными через Интернет, ответ заключается в том, что ядро ОС использует драйвер для взаимодействия с сетевой картой через порт ввода-вывода, ввод-вывод с отображением памяти и т. Д. ОС и сетевая карта реализуют Стандарты интернет-протокола для совместной работы всего.