Форум программистов, компьютерный форум, киберфорум
ОС на Assembler
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
83 / 1 / 0
Регистрация: 08.11.2017
Сообщений: 146

Теория новичка по теме создания ОС

08.11.2020, 12:26. Показов 2380. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Я в теории создания операционных систем ничего не знаю, есть несколько вопросов, чтобы хотя бы понять,
стоит ли этим заниматься и насколько это сложно.. (заранее спасибо).

На персональном компьютере (не ноут, а обычный ящик-системник + отдельно монитор) - установлен процессор x86-64 архитектуры (AMD Phenom X4 II 945 (3 ГГц)), и установлено 2 винчестера (HDD).
На одном из HDD, установлена операционная система Windows 10, а на втором HDD - ничего не установлено, это просто доп. винчестер. И ничего там не записано, и даже никакая файловая система не установлена.

Когда включается комп, управление передаётся BIOS, он определяет какое оборудование установлено, видит в частности, что есть 2 HDD. В BIOS - можно выбрать, какой из них использовать для загрузки ОС. Если выбрать 1-й ОС - будет загружаться ОС Windows 10.

Я хочу понять, как написать свою микро-операционку на 2-й HDD. Почитал теорию, многие пишут, что надо что то там записать в нулевой сектор дискеты, или разбираться с виртуализацией, и т.д. Дисковода давно нет, дискет нету, а разбираться с глючным VirtualBox не хотелось бы. Если есть готовый 2-й HDD, пусть и без файловой системы, есть же возможность средствами exe-файла Windows , (записать туда в нулевой сектор или куда надо) - некий первичный загрузчик своей микро-операционной системы? Аналогично, как Setup Windows, если надо поставить вторую операционку, запускается же, из уже установленной Windows, что то пишет на другой дису так, что после перезагрузки, BIOS видит, что с другого диска тоже можно загрузиться, а дальше это уже по сути, мини-операционная система, только после загрузки, она устанавливает настоящую итоговую Windows.

1) Значит, насколько я это понимаю, мой exe-файл, должен уметь во-первых, писать на 2-й HDD, что то в нужный (нулевой?) загрузочный сектор, так чтобы позже после выключения-включения компьютера, BIOS поверил в существование там некой операционной системы, и передал ей управление.

2) Как это сделать? Писать что то в нулевые секторы, и не на дискету, а на обычный винчестер HDD , притом что там даже файловая система никакая не установлена?

3) Сам мой exe-файл, пусть будет компилироваться ассемблером MASM, это программа, работающая в ОС Windows, и это файл на диске с файловой системой NTFS, будет состоять как бы, из 3-х частей. 1-я часть - сама программа, скомпилированная MASM, и работающая до перезагрузки компьютера, её цель - и записать загрузчик нашей микро - операционной системы на 2-й HDD, 2-я часть - собственно сам загрузчик, (видимо тоже скомпилированная MASM?) подпрограмма, в набор неких байт, она не будет выполняться непосредственно (после старта нашего exe-файла), но будет выполняться после перезагрузки, т.е. когда BIOS увидит что на 2-м HDD присутствует некая ОС, и можно будет загрузиться с этого, 2-го HDD, изменив приоритет загрузки с 1-го HDD на 2-й - в настройках BIOS. 3-я часть - возможно понадобиться, как сама микро-ОС, может быть так, что 2-й части будет недостаточно, т.к. лимитирован по размеру загрузочный сектор 2-го HDD. Получается, это тоже некий набор байт, который будет скомпилирован MASM, непосредственно выполняться не будет, а будет выполняться после перезагрузки как наша ОС.

4) Сама ОС, пусть будет совсем примитивной, переведет процессор в защищенный режим, оттуда выведет на экран "Hello OS" , будет иметь только один обработчик прерываний - от нажатия на клавиатуру, и если нажата клавиша "E" - выходит из защищенного режима, т.е. делает рестарт компьютера, и после рестарта опять управление в BIOS, опять выбор откуда загружаться и т.д.

5) Насколько трудно это сделать? Если изучать мануалы месяцами, то хотелось бы, хотя бы уже после того, как получен был бы, такой вот казалось бы, примитивный рабочий вариант.. Может есть похожая уже созданная программа. Чтобы всё просто - открыл увидел код. Скомпилировал в MASM. Запустил в Windows 10, exe-файл. Программа видит 2-й HDD, где не установлено ничего. Пишет туда загрузчик примитивной ОС. Вышел, в BIOS выбрал - грузиться с другого диска, и увидел нашу "Hello OS" с заходом в защищенный режим, и выходом из него.

Если есть такой рабочий вариант, подскажите, а то сразу что то сложное новичков может отпугнуть.

Спасибо.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.11.2020, 12:26
Ответы с готовыми решениями:

C++/C# (теория для новичка)
Я вот изучаю самоучкой C#, изучил всю базу, и структуры данных... Но до сих пор волнует 1 вопрос. Это сравнение C# и C++ (на обоих...

Задачи по теме: теория групп
Во вложенном изображении Правила, 5.16, 5.18. Задания набирать ручками. Один вопрос - одна тема. Для формул есть редактор.

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

17
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
08.11.2020, 17:14
Если Windows 10 грузится, то можно в меню её загрузчика добавить запуск своего UEFI-экзешника (если Windows грузится в режиме UEFI ), или "секторов" из файла, если система работает в устаревшем режиме BIOS.
Если есть минимальная поддержка EFI, можно попробовать её включить и с её помощью запустить свой bootx64.efi

Для начала нужно выяснить в msinfo32.exe в каком режиме BIOS запускается Windows 10.
0
Asm/C++/Delphi/Py/PHP/VBA
 Аватар для Jin X
6812 / 2052 / 238
Регистрация: 14.12.2014
Сообщений: 4,305
Записей в блоге: 12
13.11.2020, 21:28
Цитата Сообщение от SergeyYN Посмотреть сообщение
хотя бы понять,
стоит ли этим заниматься и насколько это сложно
Стоит ли заниматься – это зависит от ваших целей. Про сложность – довольно сложно, особенно если вы ничего не знаете по теме. Разумеется, если вы хотите что-то более или менее нормальное сделать, а не просто "Hello from Protected Mode!"
В целом, для самообразования довольно полезная штука, если хочется разобраться в архитектуре процессора (и не только) и прочих низкоуровневых вещах.

Цитата Сообщение от SergeyYN Посмотреть сообщение
а разбираться с глючным VirtualBox не хотелось бы.
С VirutalBox почти не работал, но есть VMware (вполне нормальный), есть Bochs (с отладчиком загрузчиков).

Цитата Сообщение от SergeyYN Посмотреть сообщение
Если есть готовый 2-й HDD, пусть и без файловой системы, есть же возможность средствами exe-файла Windows , (записать туда в нулевой сектор или куда надо) - некий первичный загрузчик своей микро-операционной системы?
https://github.com/jin-x/mbrset (там в разделе release справа есть exe-шник под Win). Исходники есть, под Delphi, правда.

В бородатом 2002 году делал прогу, которая прописывает в MBR загрузчик. Этот загрузчик читает boot-сектор дискеты, если нажата определённая клавиша (Ctrl, например – это настраивается), иначе оригинальный MBR (сохранённый, насколько я помню, в первом свободном секторе после MBR). Потом передаёт управление туда. Но это всё под DOS. Исходник с комментами, можете глянуть прикреплённый файл.

А вообще, по теме загрузчиков на форуме достаточно тем. А также много тем по защищённому режиму (вероятно, в подразделе "DOS"). Пользуйтесь поиском. Также можете глянуть OSDev Wiki или погуглить ещё на эту тему.

Просто создать программу, перезаписывающую MBR, а также загрузчик, который переходит в защищённый режим и выводит "Hello OS" – это несложно (если знать что и как делать). Думаю, за несколько дней сможете разобраться.

Современные компьютеры снабжены UEFI – разновидностью BIOS, который может работать не только в Legacy Mode (т.е. грузить систему с MBR), но и в своём основном режиме, когда загрузчик расположен в файле формата PE EXE на диске с файловой системой FAT32. Примеры (для FASM) тоже прикрепляю.

Ещё, кстати, можете погуглить по теме GRUB. Вероятно, это тоже интересно вам будет.

Успехов!
Вложения
Тип файла: zip bstrap.zip (19.1 Кб, 8 просмотров)
Тип файла: zip uefi.zip (2.1 Кб, 8 просмотров)
Тип файла: zip UEFI-32bit-asm-examples-master.zip (7.8 Кб, 8 просмотров)
2
83 / 1 / 0
Регистрация: 08.11.2017
Сообщений: 146
14.11.2020, 11:23  [ТС]
Jin X

Спасибо,

Цитата Сообщение от Jin X Посмотреть сообщение
https://github.com/jin-x/mbrset (там в разделе release справа есть exe-шник под Win). Исходники есть, под Delphi, правда.
Этот exe - так и делает - на подключенный 2-й HDD, без файловой системы, средствами exe-файла Windows , пишет в нулевой сектор HDD (или куда надо) - некий первичный загрузчик своей микро-операционной системы?

Т.е. если я запущу exe, то потом BIOS увидит что на нём тоже есть ОС , и можно будет загрузиться с этого другого винчестера HDD, просто изменив приоритет загрузочных дисков в BIOS ?

PS Хочу уточнить, чтобы не сломать потом ничего. (А то запущу exe, что нибудь не то сделаю, и потом вообще не загружусь)
0
Asm/C++/Delphi/Py/PHP/VBA
 Аватар для Jin X
6812 / 2052 / 238
Регистрация: 14.12.2014
Сообщений: 4,305
Записей в блоге: 12
14.11.2020, 19:43
SergeyYN, да, прога записывает содержимое файла в первый физический сектор (и при необходимости делает бэкап оригинала). При это прога проверяет файл на размер и наличие подписи.

BIOS сможет загрузиться с HDD, если: а) выставить нужный приоритет (либо указать диск в меню загрузки), б) UEFI-BIOS (если он таков) будет работать в режиме Legacy BIOS или в комбинированном (UEFI/Legacy), в) загрузчик будет иметь верную сигнатуру (последние байты = 0x55,0xAA). Возможно, потребуется ещё что-то, зависит от BIOS'а. У меня, к примеру, при отсутствии Partition Table (или ошибке в нём) BIOS может принять диск за Floppy и использовать первый сектор как Boot-сектор FDD, а не MBR (обычно это USB-HDD/FDD, правда, а не хард). В проге, собственно, реализована такая проверка тоже ([x] Check partition table).

Кстати говоря, вы можете разметить HDD и перезаписать только загрузочную часть с сигнатурой ("boostrap code & sign"), программа это позволяет сделать. В этом случае Partition Table в на HDD будет сохранён, перезапишется только код загрузчика (и сигнатура – последние 2 байта). Главное, не поставить по запаре опцию "clear partition table"

И ещё: чтобы видеть жёсткие диски в списке, не забудьте поставить галочку "Allow all disk drive types", иначе будете видеть только флешки. Вообще, можете на флешках, кстати, и потренироваться. Это безопаснее. Хотя, если вы не выберете случайно не тот диск, ничего страшного не будет. Но я перед экспериментами рекомендую сделать бэкап MBR с загрузочного диска (это можно сделать без замены – просто убрать галочку с "Replace", оставить только "Backup"). А также скачать спасительный WinPE 10-8 Sergei Strelec (x86/x64/Native x86) и записать Rufus'ом на флешку (хотя там в комплекте вроде есть прога для записи) + эту прогу с сохранённым бэкапом туда скопировать. Такую штуку желательно всегда иметь на отдельной флешке на случай краха системы.

В целом, прога должна быть интуитивно понятной. Читайте надписи внимательно и всё будет ок. Там есть пара кнопок с вопросиками (?), которые открывают подсказки по опциям. Самое худшее, что вы сможете сделать – это уничтожить загрузочный MBR с первого HDD. Но если будет спасительная флешка (WinPE и бэкап), всё легко восстановите. А если будете экспериментировать с USB, то всё ещё проще (галочка "Allow all disk drive types" по умолчанию отключена).

Добавлено через 3 минуты
p.s. Исправил ссылку на WinPE.
1
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
14.11.2020, 19:55
SergeyYN, загрузочные сектора - это из эпохи дискет и более ранней. Размер физического "сектора" на современных носителях - десятки и сотни килобайт. А встроенное ПО современных компьютеров может быть намного больше, чем операционные системы, которые когда-то загружались с дискет. Фактически мини-ОС, которая умеет работать с файловой системой и запускать программы из этой файловой системы (в т.ч. другие ОС и загрузчики), записывается изготовителем компьютера в энергонезависимую память устройства.
А программа инициализации ОС, автономная утилита или напрямую загружаемый супервизор ОС - это не образ сектора, а обычная программа, написанная на языке высокого уровня:
Запуск кода на железе
Установить такую "ОС" можно копированием файла программы в проводнике в папку с именем, известным встроенному ПО.
0
Asm/C++/Delphi/Py/PHP/VBA
 Аватар для Jin X
6812 / 2052 / 238
Регистрация: 14.12.2014
Сообщений: 4,305
Записей в блоге: 12
14.11.2020, 22:56
Цитата Сообщение от politoto Посмотреть сообщение
Размер физического "сектора" на современных носителях - десятки и сотни килобайт.
Про сотни Кб – это уж перебор (да и про десятки тоже, если не брать в расчёт страницы SSD, но об этом ниже)

В современных HDD (2011 года и младше) – всё-таки 4 Кб, но программист на низком уровне видит их как 512-байтовые из-за эмуляции (int 13h и прочее) – это что касается 512e, а вот что происходит с 4Kn при работе с int 13h, к примеру, я не знаю. Но было бы интересно узнать, кстати! Вероятно, они просто не определяются в режиме Legacy BIOS, иначе могут возникнуть большие проблемы.

Под первым физическим сектором я имел в виду эмулируемый 512-байтный физический сектор (в 512e, либо физический в 512n), т.е. по сути логический

Если же речь про SSD, то там вместо секторов страницы от 2 до 16 (32?) Кб, но они обычно видны всё равно как обычные 512-байтные сектора (как в 512n-дисках).
0
14.11.2020, 23:19

Не по теме:

Если страница 16 KB, то блок из 8 страниц уже 128KB. Интерфейс позволяет читать и записывать постранично, но фактически перезаписаться может целый блок.

0
Asm/C++/Delphi/Py/PHP/VBA
 Аватар для Jin X
6812 / 2052 / 238
Регистрация: 14.12.2014
Сообщений: 4,305
Записей в блоге: 12
15.11.2020, 10:12
politoto, про запись согласен (и то если кэширование не сработает; а доступ к конкретным физическим страницам как таковой недоступен из-за системы выравнивания износа). Но читать-то страницами можно

Мне, кстати, интересно, где (в какой памяти) хранится карта соответствия логических страниц (или блоков) физическим? Это в плане работы выравнивания износа.
0
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
16.11.2020, 07:56
Одна из моих машин не позволяет Legacy-загрузку с внутреннего PCIe M.2
Секторы читаются только с внешних флешек.
0
Asm/C++/Delphi/Py/PHP/VBA
 Аватар для Jin X
6812 / 2052 / 238
Регистрация: 14.12.2014
Сообщений: 4,305
Записей в блоге: 12
16.11.2020, 13:10
Цитата Сообщение от politoto Посмотреть сообщение
Одна из моих машин не позволяет Legacy-загрузку с внутреннего PCIe M.2
А как он (диск) определяется в системе?
AIDA64, к примеру, Хранение данных → ATA → Размер физического/логического сектора.
0
Эксперт Hardware
Эксперт Hardware
 Аватар для R71MT
6213 / 2447 / 403
Регистрация: 29.07.2014
Сообщений: 3,178
Записей в блоге: 4
17.11.2020, 00:00
Цитата Сообщение от Jin X Посмотреть сообщение
AIDA64, к примеру,
ещё пару вариантов определения сектора в командной строке:
1) wmic diskdrive get bytespersector, caption
2) fsutil fsinfo ntfsinfo c:
1
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
17.11.2020, 07:35
Это размер сектора с точки зрения файловой системы и ОС. Он не обязан совпадать с фактическим размером блока на устройстве.
0
Эксперт Hardware
Эксперт Hardware
 Аватар для R71MT
6213 / 2447 / 403
Регистрация: 29.07.2014
Сообщений: 3,178
Записей в блоге: 4
17.11.2020, 08:11
что такое "фактический размер блока на устройстве"?
0
Asm/C++/Delphi/Py/PHP/VBA
 Аватар для Jin X
6812 / 2052 / 238
Регистрация: 14.12.2014
Сообщений: 4,305
Записей в блоге: 12
17.11.2020, 18:26
Цитата Сообщение от R71MT Посмотреть сообщение
wmic diskdrive get bytespersector, caption
Здесь только один параметр. Размер логического сектора, судя по всему.

Цитата Сообщение от R71MT Посмотреть сообщение
fsutil fsinfo ntfsinfo c:
А вот это показывает байт на сектор и на физический сектор.
0
Эксперт Hardware
Эксперт Hardware
 Аватар для R71MT
6213 / 2447 / 403
Регистрация: 29.07.2014
Сообщений: 3,178
Записей в блоге: 4
18.11.2020, 06:54
Если уж FS вводит в заблуждение, то реальный размер сектора всегда можно запросить и у самого контролёра диска, через DeviceIoControl() с кодом IOCTL_DISK_GET_DRIVE_GEOMETRY. Здесь идёт запрос именно к драйверу, а он берёт данные не из воздуха, а запрашивает их у контролёра, в ПЗУ которого и хранится заводская геометрия. В этом случае файловая система и логика остаётся уже в стороне.

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
format   PE console
include 'win32ax.inc'
entry   start
.data
IOCTL_DISK_GET_DRIVE_GEOMETRY  = 0x00070000
 
buff     rb  16
count    dd  0
path     db  '\\.\PhysicalDrive0',0
 
align  16
struct DISK_GEOMETRY
  totalCyl    dd  0,0   ; - Цилиндров
  mediaType   dd  0     ; - Тип устройства
  trackCyl    dd  0     ; - Дорожек (треков) в цилиндре
  secTrack    dd  0     ; - Секторов в треке
  byteSec     dd  0     ; - Байт в секторе
ends
 
geo  DISK_GEOMETRY
;ннннннннннннннннннн
.code
start:  invoke   CreateFile,path,0,0,0,OPEN_EXISTING,0,0
        or       eax,eax
        jns      @f
       cinvoke   printf,<'Physical Drive ERROR!!!',0>
        jmp      @exit
 
@@:     push     eax
        invoke   DeviceIoControl,eax,IOCTL_DISK_GET_DRIVE_GEOMETRY,\
                                0,0,geo,sizeof.DISK_GEOMETRY,count,0
        pop      eax
        invoke   CloseHandle,eax
 
       cinvoke   printf, <10,'Sector size: %d byte',0>,[geo.byteSec]
 
@exit: cinvoke  gets,buff
       cinvoke  exit,0
;ннннннннннннннннннн
section '.idata' import data readable
library  kernel32,'kernel32.dll',msvcrt,'msvcrt.dll'
import   msvcrt,printf,'printf',gets,'gets',exit,'exit'
include 'api\kernel32.inc'
0
Asm/C++/Delphi/Py/PHP/VBA
 Аватар для Jin X
6812 / 2052 / 238
Регистрация: 14.12.2014
Сообщений: 4,305
Записей в блоге: 12
18.11.2020, 18:05
R71MT, эта фича показывает только логический (эмулируемый) размер сектора.
Есть более чёткая фича: IOCTL_STORAGE_QUERY_PROPERTY.

Вот нашёл в инете (работает):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include <iostream>
#include <Windows.h>
 
#pragma comment(lib, "Kernel32.lib")
 
int main()
{
    HANDLE hDevice;
 
    char cDisk = 'C';   // Get metadata about the C:\ disk
 
    // Build the logical drive path and get the drive device handle
    std::wstring logicalDrive = L"\\\\.\\";
    wchar_t drive[3];
    drive[0] = cDisk;
    drive[1] = L':';
    drive[2] = L'\0';
    logicalDrive.append(drive);
 
    hDevice = CreateFile(
        logicalDrive.c_str(),
        0, 
        0,
        NULL,
        OPEN_EXISTING,
        0,
        NULL);
 
    if (hDevice == INVALID_HANDLE_VALUE)
    {
        std::cerr << "Error\n";
        return -1;
    }   
 
    // Now that we have the device handle for the disk, let us get disk metadata
    DWORD outsize;
    STORAGE_PROPERTY_QUERY storageQuery;
    memset(&storageQuery, 0, sizeof(STORAGE_PROPERTY_QUERY));
    storageQuery.PropertyId = StorageAccessAlignmentProperty;
    storageQuery.QueryType  = PropertyStandardQuery;
 
    STORAGE_ACCESS_ALIGNMENT_DESCRIPTOR diskAlignment = {0};
    memset(&diskAlignment, 0, sizeof(STORAGE_ACCESS_ALIGNMENT_DESCRIPTOR));
 
    if (!DeviceIoControl(hDevice, 
        IOCTL_STORAGE_QUERY_PROPERTY, 
        &storageQuery, 
        sizeof(STORAGE_PROPERTY_QUERY), 
        &diskAlignment,
        sizeof(STORAGE_ACCESS_ALIGNMENT_DESCRIPTOR), 
        &outsize,
        NULL)
        )
    {
        std::cerr << "Error\n";
        return -1;
    }
 
    std::cout << "Physical sector size: " << diskAlignment.BytesPerPhysicalSector << std::endl;
    std::cout << "Logical sector size: " << diskAlignment.BytesPerLogicalSector << std::endl;
 
    return 0;
}
1
Эксперт Hardware
Эксперт Hardware
 Аватар для R71MT
6213 / 2447 / 403
Регистрация: 29.07.2014
Сообщений: 3,178
Записей в блоге: 4
18.11.2020, 19:17
Цитата Сообщение от Jin X Посмотреть сообщение
IOCTL_STORAGE_QUERY_PROPERTY
и точно.. есть и такой под-код, только хреново что поддерживается начиная с висты (т.е. ХР в пролёте):
https://docs.microsoft.com/en-... descriptor

Code
1
2
3
4
5
6
7
8
9
typedef struct _STORAGE_ACCESS_ALIGNMENT_DESCRIPTOR {
  DWORD Version;
  DWORD Size;
  DWORD BytesPerCacheLine;
  DWORD BytesOffsetForCacheAlignment;
  DWORD BytesPerLogicalSector;
  DWORD BytesPerPhysicalSector;
  DWORD BytesOffsetForSectorAlignment;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.11.2020, 19:17
Помогаю со студенческими работами здесь

Вопрос по теме Dynamic-Link Library: Теория + Практика
Здорова всем! Посмотрел тему Dynamic-Link Library: Теория + Практика и решил попробовать сделать длл. До этого ни разу не пробовал....

Теория создания
Как то с другом начали рассуждать , о том как могла возникнуть вселенная.И пришла мне в голову такая вот идея ... Что , если люди( или...

Теория создания плагинов.
Нужна информация о создании программ к которым в процессе работы можно было бы подключать plug-in'ы.

Теория создания компиляторов
Доброго времени суток. Занимаюсь созданием компилятора Паскаль-подобного языка. Есть огромная нехватка в качественной теории. Если сказать...

Теория и практика создания QA-систем
Хочу создать свою QA-систему, по этому реквестирую интересные статьи, книги, или собственные идеи по этой тематике.


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
Программный отбор значений справочника
Maks 21.03.2026
Установка программного отбора значений справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru