Форум программистов, компьютерный форум, киберфорум
Теория программирования
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.83/18: Рейтинг темы: голосов - 18, средняя оценка - 4.83
1 / 1 / 0
Регистрация: 26.11.2013
Сообщений: 51

Создание программ и OC

08.10.2014, 20:59. Показов 4217. Ответов 46
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот у меня вопрос какие Яп нужны, чтоб создавать антивирусы или ОС и т.д(сложные программы)!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.10.2014, 20:59
Ответы с готовыми решениями:

Средства отладки программ в DELPHI.Создание программ для циклических процессов
Ребята, помогите, пожалуйста, нубу, никак не справлюсь(( Заранее благодарен) 1. Средства отладки программ в DELPHI.Создание программ для...

Создание программ
Всем привет. Подскажите как писать программу(принципы проектирования или еще что то). И еще что нибудь для развития мышления, чтобы мыслить...

Создание программ
Доброго времени суток. Подскажите, как создать программу которая будет работать не только в какой-то среде, а чтобы её можно было...

46
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
12.10.2014, 21:42
Студворк — интернет-сервис помощи студентам
Работа с памятью -- это не только ее выделение/освобождение, а еще и учет/диспетчеризация.
Цитата Сообщение от Dmitriy_M Посмотреть сообщение
Вопрос в том, где и чем будет выделена память?
На доступном пространстве ядром системы. Память будет запрошена из юзерспейса обертками типа *allok.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21285 / 8310 / 637
Регистрация: 30.03.2009
Сообщений: 22,671
Записей в блоге: 30
12.10.2014, 21:44
Цитата Сообщение от castorsky Посмотреть сообщение
В этом смысле принципиальной разницы нет, по крайней мере я не вижу, а Вы не показываете
Вопрос в том, что считать принципиальной разницей. И где граница между использованием языка и ассемблером. Чем выше уровень языка, тем больше придётся ваять на ассемблере. Можно 99% кода написать на ассемблере, а 1% написать на каком-нибудь заумном языке, а потом сказать, что ОС написана на заумном языке

Что касается того, что я не показываю - я ведь не занимаюсь разработкой ядра операционной системы, а потому не могу показать конкретное место и конкретный код, который выглядел бы по простому на Си, но был бы невозможен на каком-нибудь языке высокого уровня. И дело даже не в том, что на лиспе, например, нету ассемблерных вставок, а в том, пережуёт ли компилятор лиспа подобное низкоуровневое вмешательство в концепцию и договорённости языка высокого уровня

Цитата Сообщение от Dmitriy_M Посмотреть сообщение
Вопрос в том, где и чем будет выделена память?
Если взять процессор типа sparc v8, то в нём нет аппаратного 64-битного деления, хотя в кодах ядра оно присутствует. Компилятор gcc для реализации деления строит вызов функции с вполне конкретным именем и конкретным прототипом и помещает её в библиотеку runt-ime поддержки. Разработчики ядра линукса, понимаю, как устроен компилятор gcc, просто подцепляют эту библиотеку к коду ядра. Точно так же компилятор с лиспа для выделения памяти построит в коде вызов какой-то функции, которая в конечном счёте вызывает malloc. В код ядра вшить библиотеку run-time поддержки компилятора, и реализовать внутри ядра функцию с именем и прототипом libc'шного malloc'а, но с ядрёной реализацией.

Т.е. технические проблемы для того, чтобы была принципиальная возможность написать код ядра на произвольном языке, они все вполне решаемы. Проблема только в том, что никому это не надо. Можно даже на java'е код написать, а JIT встроить в ядро, но смысла нет
0
1443 / 1326 / 131
Регистрация: 20.03.2009
Сообщений: 4,689
Записей в блоге: 11
12.10.2014, 21:58
castorsky, я привел как минимум две обертки
Цитата Сообщение от castorsky Посмотреть сообщение
типа *allok.
, какая из них будет вызываться? kmalloc, vmalloc?

Evg, вы отвлекаетесь от темы. В Linux есть как минимум две версии malloc(вообще их там вагон и маленькая тележка), перечисленные kmalloc, и vmalloc, какую из них должна использовать ваша run-time?
P.S.
Цитата Сообщение от Evg Посмотреть сообщение
Разработчики ядра линукса, понимаю, как устроен компилятор gcc, просто подцепляют эту библиотеку к коду ядра.
Ничего они не подцепляли. malloc из libc под Linux использует sbrk и mmap.
0
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
12.10.2014, 22:19
Цитата Сообщение от Dmitriy_M Посмотреть сообщение
какая из них будет вызываться? kmalloc, vmalloc?
вопрос не ко мне, а к реализациям интерпретаторов/компиляторов lisp, perl, php (на каких языках Вы привели примеры).
0
1443 / 1326 / 131
Регистрация: 20.03.2009
Сообщений: 4,689
Записей в блоге: 11
12.10.2014, 22:36
castorsky, не ваше ли утверждение, что можно использовать любой компилируемый язык? Для Lisp, есть компилятор GNU Common Lisp. Но тут встает вопрос, а как же динамические свойство языка? Оказывается, что никак. Мы не можем сказать, что вот тот список должен работать через kmalloc, а вот тот через vmalloc.

Отсюда единственный вывод, утверждение
Цитата Сообщение от castorsky Посмотреть сообщение
Да мало ли компилируемых языков, главное чтобы компилятор был хороший. Фортран, паскаль, лисп... не принципиально.
неверно при разработке ОС.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21285 / 8310 / 637
Регистрация: 30.03.2009
Сообщений: 22,671
Записей в блоге: 30
12.10.2014, 23:31
Цитата Сообщение от Dmitriy_M Посмотреть сообщение
Ничего они не подцепляли. malloc из libc под Linux использует sbrk и mmap
Я говорил про 64-битное деление, а не про malloc

Цитата Сообщение от Dmitriy_M Посмотреть сообщение
какая из них будет вызываться? kmalloc, vmalloc?
Как напишешь свою реализацию функции malloc, которую использует функция run-time поддержки лиспа, то и вызовется. В ядре нету функции с именем malloc, а потому можно написать свою функцию с таким именем и именно её будет дёргать некая функция __list_allocate. Названия функций весьма условные, я исхожу из некоторой абстрактной реализации (потому что не знаю, как конкретно устроена run-time поддержка компилятора с лиспа). В качестве примера того, как это уже реально поддержано, привёл пример с 64-битным делением (а может и не делением, может умножением, или что-то ещё, точно и не помню). Смысл в том, что компилятор для реализации тех или иных языковых операций в конечном итоге строит вызов какой-нибудь библиотечной функции. Это может быть стандартная функция libc, может быть функция из библиотеки, идёт в комплекте с компилятором (для gcc это библиотека libgcc). Принципиальной разницы нет. Всегда требуемое окружение можно сэмулировать
0
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
12.10.2014, 23:32
Вывод может и верный, только он выведен с нарушениями законов логики, а именно утверждение "ложь влечет истину" ложно. Следовательно вывод ничтожен. В данном случае ставится задача исключить внешние зависимости и получить чистый (независимый) модуль. Это имхо.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21285 / 8310 / 637
Регистрация: 30.03.2009
Сообщений: 22,671
Записей в блоге: 30
13.10.2014, 22:36
Цитата Сообщение от castorsky Посмотреть сообщение
только он выведен с нарушениями законов логики
Если ты посмотришь на исходники низкоуровневого gnu'того софта, то увидишь там все эти нарушения логики, когда код пишется под конкретный компилятор. Исходников, например, микрософтовского софта, я по понятным соображениям не видел своими глазами, но более чем уверен, что там ровно то же самое. Использование языков программирования высокогого уровня для программирования на низком уровне всегда проходит на грани фола (а и иногда и за гранью).

Цитата Сообщение от castorsky Посмотреть сообщение
В данном случае ставится задача исключить внешние зависимости и получить чистый (независимый) модуль
В абстрактной постановке для теоретика задача не имеет решения. Даже для языка Си:

C
typedef unsigned long long u64_t;
 
u64_t func (u64_t a1, u64_t a2)
{
  return a1 / a2;
}
Code
$ gcc -v
Target: sparc-linux-gnu
gcc version 4.2.4 (Ubuntu 4.2.4-1ubuntu4)
 
$ gcc t.c -O2 -S
 
$ cat t.s
        .file   "t.c"
        .global __udivdi3
        .section        ".text"
        .align 4
        .global func
        .type   func, #function
        .proc   017
func:
        save    %sp, -112, %sp
        mov     %i0, %o0
        mov     %i1, %o1
        mov     %i2, %o2
        call    __udivdi3, 0  <----------------------
         mov    %i3, %o3
        mov     %o0, %i0
        jmp     %i7+8
         restore %g0, %o1, %o1
        .size   func, .-func
        .ident  "GCC: (GNU) 4.2.4 (Ubuntu 4.2.4-1ubuntu4)"
        .section        ".note.GNU-stack"
Из твоей логики вытекает, что на языке Си нельзя написать ядро ОС. Но это уже противоречит фактам, т.к. именно в таких условиях и написано ядро линукса
0
1443 / 1326 / 131
Регистрация: 20.03.2009
Сообщений: 4,689
Записей в блоге: 11
14.10.2014, 10:59
Evg, у меня складывается впечатление, что вы не понимаете как устроена память, и как с ней работает ядро ОС.
Если взять такое определение runtime, то получаем противоречие. runtime требует ОС, но так как мы пишем свою ОС, то понятия run-time еще нет.
0
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
14.10.2014, 17:13
Evg, Вы только показали (то что я и так знал) несостоятельность гнутого компилятора. Есть же ассемблерные коды целочисленного деления, нет надо запилить ligcc'шный вариант циклов, сдвигов, сложений, вычитаний и т.д. То, что уже зашито инженерами sun в пзу процессора.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21285 / 8310 / 637
Регистрация: 30.03.2009
Сообщений: 22,671
Записей в блоге: 30
14.10.2014, 19:24
Цитата Сообщение от Dmitriy_M Посмотреть сообщение
Evg, у меня складывается впечатление, что вы не понимаете как устроена память, и как с ней работает ядро ОС.
Если взять такое определение runtime, то получаем противоречие. runtime требует ОС, но так как мы пишем свою ОС, то понятия run-time еще нет.
Есть такое понятие, как библиотека run-time поддержки компилятора. По смыслу она означает, что в ней находятся коды, требуемые для кода, полученного компилятором. Потому что часть конструкция языка компилятор преобразует в операции вызова функций, находящихся в этой самой библиотеке.

При чём тут вообще и каким образом связано моё якобы непонимание того, как устроена память - я не понимаю

Цитата Сообщение от castorsky Посмотреть сообщение
Evg, Вы только показали (то что я и так знал) несостоятельность гнутого компилятора
И в чём же он несостоятелен? У меня нету виндовых компиляторов, но, если ты напишешь какую-нибудь конструкцию типа throw, то наверняка увидишь, что сгенерилась операция вызова

Цитата Сообщение от castorsky Посмотреть сообщение
Есть же ассемблерные коды целочисленного деления, нет надо запилить ligcc'шный вариант циклов, сдвигов, сложений, вычитаний и т.д
Это упомянутое тобой "ассемблерное деление" и сидит в библиотеке libgcc, которая является неотъемлимой частью компилятора и всегда подсовывается в линковку. И это куда более грамотное решение, чем на каждое деление втыкать в код длинный паровоз операций

Цитата Сообщение от castorsky Посмотреть сообщение
То, что уже зашито инженерами sun в пзу процессора
И в каком же это месте процессора SPARC V8 (который, кстати, выпускали разные фирмы, а не только Sun) в пзу вшито деление?

Добавлено через 1 час 32 минуты
Цитата Сообщение от castorsky Посмотреть сообщение
Evg, Вы только показали (то что я и так знал) несостоятельность гнутого компилятора
Кстати, вот результат компиляции того же кода с 64-битным делением на Sun'овском компиляторе

Code
$ /opt/SUN_Studio8/SUNWspro/bin/cc -V
cc: Sun C 5.5 2003/03/12
 
$ /opt/SUN_Studio8/SUNWspro/bin/cc t.c -xO4 -S
 
$ cat t.s
...
                        .global func
                       func:
/* 000000          4 */         save    %sp,-96,%sp
/* 0x0004            */         or      %g0,%i1,%o1
/* 0x0008            */         or      %g0,%i2,%o2
/* 0x000c            */         or      %g0,%i0,%o0
 
!    5                !  return a1 / a2;
 
/* 0x0010          5 */         call    __udiv64        ! params =  %o0 %o1 %o2 %o3     ! Result =  %o0 %o1
/* 0x0014          4 */         or      %g0,%i3,%o3
/* 0x0018          5 */         or      %g0,%o0,%i0
/* 0x001c            */         ret     ! Result =  %i0
/* 0x0020            */         restore %g0,%o1,%o1
/* 0x0024          0 */         .type   func,2
/* 0x0024          0 */         .size   func,(.-func)
...
Видимо, Sun'овский компилятор (который на момент 2003 года по показателям надёжности и соблюдения стандартов далеко переплёвывал gcc и компиляторы от микрософта/борланда) такой же несостоятельный. И SunOS, написанная на Си с использованием этого компилятора, наверное такая же несостоятельная
1
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
14.10.2014, 21:02
Цитата Сообщение от Evg Посмотреть сообщение
И в чём же он несостоятелен? У меня нету виндовых компиляторов
Цитата Сообщение от Evg Посмотреть сообщение
Если ты посмотришь на исходники низкоуровневого gnu'того софта, то увидишь там все эти нарушения логики
как-то так. Но я не имелл ввиду "виндовые" компиляторы, тот же watcom, например, или от производителей процессоров. Мне давно уже не нравится наплыв говнокода в гнутом сообществе.
Цитата Сообщение от Evg Посмотреть сообщение
Это упомянутое тобой "ассемблерное деление" и сидит в библиотеке libgcc
Я упоминал коды процессора, и единственная причина почему стоит вызывать call, это экономия памяти. Впрочем, это уже другая история, которая не касается темы.
Цитата Сообщение от Evg Посмотреть сообщение
И в каком же это месте процессора SPARC V8 (который, кстати, выпускали разные фирмы, а не только Sun) в пзу вшито деление?
На уровне проектирования процессора я некомпетентен, в моем представлении пзу как раз для того и нужна, чтобы хранить программы процессора, не? Процессор получает код, выбирает из пзу микропрограмму, которой соответствует данный код и выполняет ее.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21285 / 8310 / 637
Регистрация: 30.03.2009
Сообщений: 22,671
Записей в блоге: 30
14.10.2014, 21:31
Насчёт того, где хранятся микропрограммы, я честно говоря не знаю, это называется "пзу" или как-то ещё. Процессор sparc v8 выпускался ещё в те времена, когда микропрограммное устройство процессора ещё не было широко распространено. Да и в наши, как мне кажется, далеко не все современные процессоры строятся по микропрограммной схеме

Если ты смотрел на вопрос с этой точки зрения, то деление, как пример, было выбрано неудачно. Если оставаться в рамках языка Си, то нужно было взять в качестве примера деление комплексных типов в C99. Или нужно пойти в языки более высокого уровня и, как я предлагал, посмотреть, что строит компилятор Си++ на "тяжёлые" конструкции типа new/delete, try/catch/throw. А в языках типа фортрана и лиспа, где на уровне языка имеются операторы, которые в других языках реализуются только как библиотечные функции, весь код будет истыкан всякими операциями вызова.

И причин для такой реализации две. Первая (очевидная) - экономия памяти. Вторая (менее очевидная) - рожать длинные паровозы операций внутри компилятора технически намного сложнее, чем написать их в отдельной библиотеке на языке программирования типа Си или на ассемблере, а с точки зрения производительности построения паровоза в коде какого-то большого выигрыша не даст.

Т.е., возвращаясь к изначальному вопросу, если писать код операционной системы на языке более высокого уровня чем Си, то всю эту библиотечную поддержку (аналог libgcc) придётся втащить в код операционной системы. Если эта поддержка устроена культурным образом (выделена в библиотеку типа libgcc), то технические проблемы будут минимальными. Ну а дальше просто смотрят на соотношение пользы от использования языка высокого уровня к полученной производительности. И, скорее всего, получается, что лучше немного погеморроиться на Си, но получить эффективный код, чем работать с языками типа лисп
0
Эксперт по электронике
7179 / 3355 / 346
Регистрация: 28.10.2011
Сообщений: 13,218
Записей в блоге: 7
15.10.2014, 11:15
Цитата Сообщение от castorsky Посмотреть сообщение
Можно и на васике написать, и не плохо получится.
Да. ОС не бейсике не видел (да и если честно, не искал и это не значит что такой ОС нет), а вот дрова для Windows x86 и x64, не только видел, но и сам их писал и использовал в своих программах. Скажу так, дрова написанные на бейсике ничем не хуже чем на Си, но по моему, разработка проще. Дрова это уровень ядра, а значит теоретически и ОС написать можно.
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
19.10.2014, 08:06
Цитата Сообщение от Evg Посмотреть сообщение
В указатель можно записать целое число?
А зачем? Подобные преобразования не более чем источник багов.

Добавлено через 12 минут
Цитата Сообщение от Dmitriy_M Посмотреть сообщение
неверно при разработке ОС.
http://en.wikipedia.org/wiki/O... ing_system)

http://sourceforge.net/projects/losak/

http://programatica.cs.pdx.edu/House/

или "гибридный" вариант: http://www.vitanuova.com/inferno/papers/bltj.html когда минимальное "ядро" пишется на Си, а все остальное системное окружение -- на ЯП более высокого уровня.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21285 / 8310 / 637
Регистрация: 30.03.2009
Сообщений: 22,671
Записей в блоге: 30
19.10.2014, 12:21
Цитата Сообщение от korvin_ Посмотреть сообщение
А зачем? Подобные преобразования не более чем источник багов
Пользовательское приложение и софт низкого уровня - это слишком разные вещи, чтобы вот так вот с уверенностью делать подобные заявления. Чтобы далеко не ходить, можно взять простой пример в виде бинарного файла, в заголовке которого прописаны целые числа, которые по смыслу являются указателями в момент исполнения
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
19.10.2014, 13:48
Цитата Сообщение от Evg Посмотреть сообщение
можно взять простой пример в виде бинарного файла, в заголовке которого прописаны целые числа, которые по смыслу являются указателями в момент исполнения
Зачем?
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21285 / 8310 / 637
Регистрация: 30.03.2009
Сообщений: 22,671
Записей в блоге: 30
19.10.2014, 14:20
Действительно, зачем? Когда начнём писать ос на лиспе, тогда и будем смотреть
0
2 / 2 / 6
Регистрация: 09.11.2014
Сообщений: 71
06.01.2015, 20:42
Pascal предназначен для решения производственных задач.
0
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
12.09.2015, 22:47
Цитата Сообщение от Evg Посмотреть сообщение
Когда начнём писать ос на лиспе, тогда и будем смотреть
Есть уже. Прадва jff, автор прокачивал свои скиллы. https://github.com/froggey/Mezzano
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.09.2015, 22:47

Создание программ
Есть ли какая-нибудь программа, чтобы создавать приложения для Андроид с самого Андроид-устройства? И если есть, то какая?

Создание корпоративных программ
Почему для создания корпоративных программ используют, в основном, Java и C#, а не плюсы? И вообще как определить когда лучше использовать...

Создание программ в php
Не пойму как написать верный код на данные задания, заранее спасибо.

Создание программ (приложений)
Добрый вечер, я уже тут просил помоц по прога, но в универ сказали, что б они были приложениями, типо когда создаёшь:...

Создание программ с функциями
Напишите процедуру на языке VBA для нахождения функции f(x)=(sin^2(x))/(sin^3(x)+2) Вычисление sin^n(x) оформить в виде функции. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek ВВЕДЕНИЕ Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru