Post:#471944 Date:06.06.2015 (00:41) ... 21 августа 1991 года закончился августовский путч в СССР-
24 августа 1991 в центре Киева. Люди приветствуют провозглашение независимости
25 августа 1991 года Линус Товальдс опубликовал ядро Linux Date: 25 Aug 91 20:57:08 GMT
Просто совпадение? Можно быть, но есть еще много других совпадений.
Главное- это одинаковая методика зомбирования адептов Линукса и Нэзалежной.
Линуксоидов в мире точно столько же сколько и укропов- около 1 %.
О чем не спросишь линуксоида- ответ : хто нескаче тотмастдай
DevilR Пост: 472646 От 15.Jun.2015 (02:04)
P.S. Нет компиляторов ядра. Не бывает. Компилятор (или интерпретатор) языка - это да, есть. Например gcc для c...
Тот же gcc сотни релизов и все разные. Ядро у тебя собрано одним,
а пользовательскую програмку взял готовую- собранную другим компилятором.
Вон хохоша вообще не парится- берет готовые образы.
Поэтому и не любая программа запускается на разных дистрибутивах линукса. Вроде ядро одно и то же- а скомпилили с разными ключиками
и разными версиями компиляторов.
Вот и не находят они свои библиотеки.
А отсюда вывод- програмка знает где должна быть ее библиотека. Если она там вдруг не лежит- ядро ей не подсказывает. А раскладывает библиотеки ядро по правилам своего компилятора.
Второе- допустим все нормально запустилось, программа загрузила одну из библиотек.
Наступает прерывание по таймеру и начинает работать ядро, ему допустим
понадобилась та же самая библиотека, а она вот уже готовая в памяти.
Вопрос- ядро будет загружать новый экземпляр библиотеки или воспользуется имеющимся?
DevilR Пост: 472661 От 15.Jun.2015 (11:12)
Компиляторы одного класса (например gcc) не настолько уж и разные, как кажется.
До 12 года на си писали их. после на плюсах, и ты думаешь они одинаково компилируют? Как раз в части динамического связывания.
По моему вообще перпендикулярно.
Но я не специалист практик - тут я полный ноль, просто еще давно у самых истоков - вот там чего то ковырял , то что сейчас уже идеологией программирования стало.
Я гляжу ты единственный из линуксоидов понял, что я не линух хочу обидеть,
А его мамашу- потаскушку от нее все дыры. От компиляции.
Вот ты знаешь хоть один компилятор гнуса, который разработывался бы с точки зрения защиты, а не быстродействия или сокращения кода?
Можно просто смотреть версию подгружаемой библиотеки и отказываться грузить неправильную.
Да версию каку хочешь написать можно.
Интересно другое - именно фиксированное распределение вызовов по памяти.
Или что то там динамическое бывает?
DevilR Пост: 472736 От 15.Jun.2015 (15:43)
Там просто все - есть таймер, который переключает контекст задач.
А вот на момент создания процесса, запускающий процесс распределяет память
Вот и я про то- что линух переключается 100 раз в секунду.
За один тик он может сделать около 10 млн операций- тут можно успеть все что хочешь сделать. и контроль идет только во время переключения,
когда может быть уже поздно.
А вот про момент создания - давай поподробнее- откудаось берет инфу куда затолкнуть процкесс и сколько ему нужно- из самого процесса?
Инфа вставлена на этапе компиляции?
dedivan Пост: 472649 От 15.Jun.2015 (02:32)
Вопрос- ядро будет загружать новый экземпляр библиотеки или воспользуется имеющимся?
ядро знать ничего не будет про "имеющееся", поскольку "имеется" оно в другой области памяти и вызвано другой программой, которая в данный момент времени для ядра "не существует" и не выполняется.
Но это не значит что ядро убого работает и не может кэшировать данные, есть кэш накопителя хардверный (в виде встроенной в него памяти) есть кэш фс софтверный, эта библиотечка и там и там отметится в виде последовательности секторов или файла и будет "повторно считана" со скоростью значительно превышающей стандартную скорость чтения с диска.... и кстати про "вот она готовая в памяти"
В памяти нет файловой системы, там код, нельзя взять кусок кода и переместить в память выделенную для другой программы, мало того в памяти хранится только текущая программа, а библиотеки различные которые вызываются в процессе занимают память лишь временно на этапе выполнения, происходит это примерно так (возьму для примера винду отличия не принципиальны) программа хочет обработать некие промежуточные данные и получить результат обработки в качестве значения переменной или содержимого буфера, программа вызывает библиотеку, при вызове передает ей некоторое количество параметров и в качестве результата после выполнения этой библиотеки получает некую переменную или последовательность данных в буфере, как только эти данные получены уже никакой библиотеки в памяти нету (кстати еще не факт что она вообще выполняется в памяти вызывающего процесса, тут уж точно не скажу боюсь соврать) Зато в кэше есть и сама библиотека и данные и брать их оттуда может любая программа а не только та которая библиотеку вызвала....
MPR Пост: 472760 От 15.Jun.2015 (18:08)
(кстати еще не факт что она вообще выполняется в памяти вызывающего процесса, ....
Вот уже близко подоборались.
А неуверенность оттого, что в книжках часто пишут про разные уровни абстракции. и часто их путают.
Библиотека может сидеть в физической памяти и одна, а представляться в виртуальной в нескольких экземплярах и в разных местах.
Это надо проверять- сделать инжекцию в одну из библиотек в памяти и повызывать ее из разных процессов.
Инжекцию допустим самую простую- какой то битик дергать а кто то считать будет.
Вот это как раз и пробовать надо. юзерскую модифицировать, а потом посмотроеть
какой ядро пользуется.
Ядерную модифицировать- смотреть какая у юзера будет.
И не путайте- динамическое связывание идет при компиляции- ось тут совсем не при чем.
DevilR Пост: 472776 От 15.Jun.2015 (22:57)
Ошибка в архитектуре - это интересно.
Это не ошибка, это с самого начала в проекте кроме парадного входа и запасной пожарный вход.
Ну или как решетки на окнах- и от воров не особо защищают и при пожаре погубить могут.
/*
* This function is used through-out the kernel (including mm and fs)
* to indicate a major problem.
*/
#include <linux/debug_locks.h>
#include <linux/interrupt.h>
#include <linux/kallsyms.h>
#include <linux/notifier.h>
#include <linux/module.h>
#include <linux/random.h>
#include <linux/reboot.h>
#include <linux/delay.h>
#include <linux/kexec.h>
#include <linux/sched.h>
#include <linux/sysrq.h>
#include <linux/init.h>
#include <linux/nmi.h>
#include <linux/dmi.h>
Все заголовки библиотек- линуксовые, выберем одну из них
#ifndef _LINUX_DELAY_H
#define _LINUX_DELAY_H
/*
* Copyright (C) 1993 Linus Torvalds
*
* Delay routines, using a pre-computed "loops_per_jiffy" value.
*/
#include <linux/kernel.h>
extern unsigned long loops_per_jiffy;
#include <asm/delay.h>
Опять все линуксовое и асм .
#ifndef _LINUX_KERNEL_H
#define _LINUX_KERNEL_H
/*
* 'kernel.h' contains some often-used function prototypes etc
*/
Вот наконец появилась одна сишная библиотека.
#include <stdarg.h>
И то- это заголовки-библиотеки там дальше - и они будут линковаться к общему
коду совсем по другим правилам- не по правилам линуха а по своим внутренним
взаимосвязям , что уже прописаны в гнусе с самого начала.
Там не интересует для чего компилируетсяи программа- для линуха или винды.
DevilR Пост: 472787 От 16.Jun.2015 (00:21)
Какой в этом всем смысл?
Вот теперь логику включаем.
Языковые библиотеки должны размещаться в памяти по одним правилам,
а системные по своим. Системными система командует, а языковыми
она не командует, иначе простая программа не найдет их.
Это как раз и подтверждает практика, когда смена версии компилятора приводит к незапуску программ, а система не может сообщить программе куда она переместила вызовы.
То есть вызовы именно сишной библиотеки распределяет компилятор,
и они должны быть стандартными.
Вот и с чего все началось- я задал вопрос- где эти вызовы размещены
в реальной системе.
Есть подозрение, что похоже как в досе- в первом мегабайте памяти-
от нуля и до какого то значения типа вызовов прерываний доса.
только тут вместо доса - функции си.
DevilR Пост: 472799 От 16.Jun.2015 (01:54)
Программы то все время улучшаются.
Это сказка для бедных. Давай смотреть что в реальности. Из приведенных выше заголовков видно
Объектов нет, в основном весь код представляет из себя структуры- указатели на другие указатели.
И когда проц продерется сквозь эту паутину взаимных ссылок-
И только в самом конце реальные объекты- куски машинного исполняемого кода.
А вся таблица перекрестных ссылок - должна быть общей, каждый процесс пользуется одними и теми же заголовками,
На этапе компиляции сначала собирается эта большая таблица ссылок и компилятор вставляет в программы и модули адреса реальных ссылок на эту таблицу.
Эта таблица - как пасьянс должна сходиться. Перемещать ее врядли перемещают, это надо каждый раз вызывать компилятор, и раскладывать весь пасьянс по новой. Компилятор 2-3 часа компилирует ядро- это он не асмовые команды в машинный код транслитует- это секунды занимает - а именно раскладывает пасьянс из перекрестных ссылок.
Это собственно и есть операционная система- а куски реального кода- это всего лишь объекты языка
DevilR Пост: 472827 От 16.Jun.2015 (11:29)
Зачем все это?
Вопрос то простой- ткни, где этот массив ссылок находитсмя в работающей машине? Может в файловой системе?
У меня такое впечатление как у того мужика - уж и унитаз приносил,
и жопу показывал- ну нету у них туалетной бумаги...
чей то мне это напомнило приключения электроника, когда ури ходить и бурчит, и где у него кнопка...
хотя да где кнопка интересно... я до этого и не задумывался о том чтоб использовать готовые решения в поделках. мне обычно атмег хватало...
но сам концепт помахать ножкой используя готовый рутер мне очень нравится... даже знаю куда пристроить...