Что нужно знать, чтобы написать операционную систему

Как сделать свою сборку дистрибутива Windows 10. Пошаговая инструкция создания системы. Преимущества и недостатки собственных сборок дистрибутива Windows 10.

НАЧНЁМ !

scale_1200

1) Нужно чётко определиться с жанром сборки. Будет ли это industrial, magic, magitech, AFN(all from nothing или всё из ничего), а может RPG.

2) Вы должны… Нет… Вы ОБЯЗАНЫ идеально знать все моды, которые вы хотите включить в вашу сборку! Причём очень желательно хотя бы приблизительно понимать, как они работают (потом поможет избежать проблем в стиле «Я хотел сделать так, а оно работает не так, что делать?») Если вы ну совсем не можете читать исходный код, то рекомендую вам пройти майнкрафт с каждым из модов, которые вы хотите воткнуть в сборку по отдельности или сгрупировав их по 2-3 штуки (не считая JEI, WAILA, Minimap и т. д.)

3) Моды должны быть настроены и интегрированы. Не бойтесь отключать половину контента модов. Главное чтобы всё было гармонично и вписывалось в общую концепцию!

4) Если моды всем хорошо знакомы, то придумывайте игроку цели, которых трудно будет достичь!

5) Сборка должна быть оптимизирована. Желательно под максимум 4 ГБ ОЗУ

Создаем свою сборку программ с помощью программы MinstAll

Скачиваем программу тут. Распаковываем и запускаем программу с помощью файла autorun.exe. У вас откроется сама программа, в которой вы сможете добавлять те приложения, которые вам необходимы. Чтобы добавить программу нажмите на кнопку настроек, которая находится в верхнем правом углу. Нажмите на зелёный + который находятся рядом. Выберите файл, который Вы будете использовать как установщик какой-либо программой, этот файл может лежать вас на флешке, диске либо на вашем компьютере, без разницы, вы его выбираете там, где он у вас лежит.

Но лучшим вариантом если вы поместите данную программку в раздел minstall/software. Выбрали файл, нажимали кнопку открыть, в следующем окне Вам нужно будет прописать: название программы, версию программы, уникальный идентификатор guid, если есть программы которые исключают установку данной программы, то их нужно добавить, если есть программы которые включают данную установку, то их тоже нужно добавить, нужно указать статус программы. Далее вы представляете галочки всех совместимых операционных систем, если подходят все операционные системы, то можно просто поставить галочку все. Также вы можете выбрать битность данной программы на какую битность её можно будет установить.

Путь приложению программа добавить сама если вы поместите программу как я говорил в начале в папку software. Чтобы Вы могли легко определить программу на глаз можете добавить иконку. Иконку Вы можете выбрать откуда угодно она сама автоматически подтянется в нужную папку. Если вы хотите запустить программу в скрытом виде, то там есть специальную галочку, если для программы нужна перезагрузка можно поставить галочку перезагрузить ОС.  Ну и последнее что необходимо это указать ключи запуска если у вас репак программы либо если вы хотите указать какие-то определенные настройки для того, чтобы эти настройки включились в момент установки.

Есть стандартные ключи запуска, которые можно посмотреть в самой программе, а некоторые ключи придется поискать в Интернете или спросить на сайте у разработчика программы, разные упаковщики exe файлов имеют разные ключи запуска. Программка которая покажет возможные ключи тут.

Более подробно о том, как создать свой набор программ Вы можете посмотреть в моём видео.

Шаг 1. Необходимые компоненты, программы и ресурсы

Для создания собственной сборки КС 1.6 нам понадобятся следующие компоненты и программы (без них никуда):

  • Основа для сборок КС 1.6

    Для того, чтобы создать свою сборку КС 1.6, нам понадобится основа. Мы уже сделали всю работу за Вас и подготовили для Вас кристально чистую КС 1.6 для создания собственной сборки. В этой сборке нет ни единой рекламы, установлен полностью чистый конфиг, русский язык, боты и оригинальные файлы. Заранее лишь был установлен рабочий поиск серверов и защита клиента, так как с этим у многих возникает масса проблем. Собственно, качаем КС 1.6 для создания сборки, на основе которой уже будем делать свою сборку.

    В сборке уже есть всё самое необходимое: русский язык, рабочие боты, поиск серверов, защита от взлома, последний патч 43 версии, работоспособность на всех ОС Windows, полностью оригинальные файлы без единой рекламы.

  • Smart Install Maker

    Программа Smart Install Maker нужна нам для того, чтобы мы смогли сделать установщик для нашей будущей сборки. То есть мы упакуем все файлы в .exe установщик и после этого Ваша сборка будет устанавливаться через программу, как и все сборки в интернете. Также мы сделаем личный дизайн установщика. Об этом читайте далее.

  • Сайт CS-Site или-же прочие источники КС 1.6

    Далее, что нам потребуется — это сайт CS-Site.Ru или-же прочие источники. Вы спросите, зачем? Нужно это для того, чтобы Вы скачали и установили в свою сборку новые фишки: новые скины оружия, скины игроков, новое фоновое изображение, новый дизайн окон и таблиц и так далее. Не будете же Вы делать сборку и оставлять её полностью классической, правильно? Чистых сборок в интернете и так уже хватает. Кстати, этот пункт не так важен для тех, кто самостоятельно делает свои скины или-же новый дизайн для сборок.

Преимущества и недостатки своих сборок

Собственноручно созданная сборка экономит время и силы при установке ОС. В зависимости от умений пользователя, профессионализма зависит количество положительных и отрицательных моментов.

К достоинствам своих сборок относятся:

  • уменьшенный размер образа и установленной системы;
  • более высокая скорость работы за счет уменьшения или отключения дополнительных служб;
  • простота использования, которая заключается в уже установленных базовых настройках, не требующих дополнительного вмешательства.

Bild_1

У собственных сборок также имеются недостатки:

  • созданный дистрибутив занимает больше места, чем оригинальная ОС;
  • процесс установки занимает больше времени;
  • нестабильная работа системы из-за присутствия драйвера или служба, которая сведет на нет усилия по установке;
  • ошибки реестра – важного элемента в системе; неверные записи приведут к нестабильной работе Windows и критическим ошибкам.

Если создавать модифицированную сборку Windows 10 самому, нужно знать, что лучше параллельно выполнить резервную копию системного раздела перед запуском софта.

Bild_2

Что такое Сборка Майнкрафт?

Следовало бы начать с того, что эта «сборка» является своеобразным паком текстур со встроенными заранее шейдерами, измененными шрифтами, интерфейсом и меню. В неё можно внести еще и дополнительные изменения, к примеру, вывести показатель здоровья противника справа на экране. Весь остальной интерфейс так же очень подвижен, некоторые детали можно добавить – другие убрать.

ߣ

, ߣ — 0x100000 0xFF. , ӣ , — , ߣ . :

1) , , «» . , , BIOS , .

2) ӣ , ߣ . BIOS ACPI, .

, ߣ BIOS, .

ߣ 0x12. , AX . — 640 . , 640 , . ţ — ݣ , .

ߣ 640 . — 0x15 AH=0x88. AX ( 1 ) AX. 15 (15 + 1 16 ).

16 — 0x15, AX=0xE801. 4 :

AX — 16
BX — 16 64
CX- 16
DX — 16 64

«» BIOS , , AX BX , CX DX.

. ߣ 4 , , . BIOS ݣ — 0x15, AX=0xE820. , . :

EAX=0xE820
EDX=0x534D4150 («SMAP»)
EBX — ( 0)
ECX — ( 24 — )
ES:DI — ,

:

EAX=0x534D4150 («SMAP»)
EBX — . 0,
ECX — ݣ (20 24 )
.

( , ):

struct { unsigned long long base; // unsigned long long length; // unsigned long type; // unsigned long acpi_attrs; // ACPI}; 

. ݣ , . , ACPI, , . , ӣ ݣ , BIOS.

, , :

1 — . . , ӣ .
2 — (, BIOS). , . .
3 — ACPI. , . ACPI , . , 1.
4 — NVS . , , NVS :-)

BIOS . — , ţ . 0xE820. — ߣ . ߣ 32- 64- , ţ . 0x7000. , . 0 — BIOS .

; get_memory_map: mov di, 0x7000 xor ebx, ebx @: mov eax, 0xE820 mov edx, 0x534D4150 mov ecx, 24 mov dword[di + 20], 1 int 0x15 jc @f add di, 24 test ebx, ebx jnz @b @: cmp di, 0x7000 ja .ok mov dword[di], 0x100000 mov dword[di + 4], 0 mov dword[di + 12], 0 mov dword[di + 16], 1 mov dword[di + 20], 0 mov ax, 0xE801 int 0x15 jnc @f mov ah, 0x88 int 0x15 jc .ok mov cx, ax xor dx, dx @: test cx, cx jz @f mov ax, cx mov bx, dx @: movzx eax, ax movzx ebx, bx mov ecx, 1024 mul ecx push eax mov eax, ebx mov ecx, 65536 mul ecx pop edx add eax, edx mov [di + 8], eax add di, 24 jmp .ok .ok: xor ax, ax mov cx, 24 / 2 rep stosw ret

  32- . ģ .

; x86format Binary as «bin»org 0x7C00 jmp boot; ListFSalign 4fs_magic dd ?fs_version dd ?fs_flags dd ?fs_base dq ?fs_size dq ?fs_map_base dq ?fs_map_size dq ?fs_first_file dq ?fs_uid dq ?fs_block_size dd ?; virtual at 0x800f_info: f_name rb 256 f_next dq ? f_prev dq ? f_parent dq ? f_flags dq ? f_data dq ? f_size dq ? f_ctime dq ? f_mtime dq ? f_atime dq ?end virtual; label sector_per_track word at $$label head_count byte at $$ + 2label disk_id byte at $$ + 3reboot_msg db «Press any key…»,13,10,0boot_file_name db «boot.bin»,0; DS:SI write_str: push si mov ah, 0x0E @: lodsb test al, al jz @f int 0x10 jmp @b @: pop si ret; error: pop si call write_str; reboot: mov si, reboot_msg call write_str xor ah, ah int 0x16 jmp 0xFFFF:0; DX:AX ES:DIload_sector: push dx add ax, word[fs_base] adc dx, word[fs_base + 2] cmp byte[sector_per_track], 0xFF je .use_EDD push bx cx si div [sector_per_track] mov cl, dl inc cl div [head_count] mov dh, ah mov ch, al mov dl, [disk_id] mov bx, di mov al, 1 mov si, 3 @: mov ah, 2 int 0x13 jnc @f xor ah, ah int 0x13 dec si jnz @b .error: call error db «DISK ERROR»,13,10,0 @: pop si cx bx dx ret .use_EDD: push si mov byte[0x600], 0x10 mov byte[0x601], 0 mov word[0x602], 1 mov [0x604], di push es pop word[0x606] mov [0x608], ax mov [0x60A], dx mov word[0x60C], 0 mov word[0x60E], 0 mov ah, 0x42 mov dl, [disk_id] mov si, 0x600 int 0x13 jc .error pop si dx ret; DS:SI DX:AXfind_file: push cx dx di .find: cmp ax, -1 jne @f cmp dx, -1 jne @f .not_found: call error db «NOT FOUND»,13,10,0 @: mov di, f_info call load_sector push di mov cx, 0xFFFF xor al, al repne scasb neg cx dec cx pop di push si repe cmpsb pop si je .found mov ax, word[f_next] mov dx, word[f_next + 2] jmp .find .found: pop di dx cx ret; BX:0. AXload_file_data: push bx cx dx si di mov ax, word[f_data] mov dx, word[f_data + 2] .load_list: cmp ax, -1 jne @f cmp dx, -1 jne @f .file_end: pop di si dx cx mov ax, bx pop bx sub ax, bx shr ax, 9 — 4 ret @: mov di, 0x8000 / 16 call load_sector mov si, di mov cx, 512 / 8 — 1 .load_sector: lodsw mov dx, [si] add si, 6 cmp ax, -1 jne @f cmp dx, -1 je .file_end @: push es mov es, bx xor di, di call load_sector add bx, 0x200 / 16 pop es loop .load_sector lodsw mov dx, [si] jmp .load_list; boot: ; jmp 0:@f @: mov ax, cs mov ds, ax mov es, ax ; mov ss, ax mov sp, $$ ; sti ; mov [disk_id], dl ; mov ah, 0x41 mov bx, 0x55AA int 0x13 jc @f mov byte[sector_per_track], 0xFF jmp .disk_detected @: mov ah, 0x08 xor di, di push es int 0x13 pop es jc load_sector.error inc dh mov [head_count], dh and cx, 111111b mov [sector_per_track], cx .disk_detected: ; mov si, boot_file_name mov ax, word[fs_first_file] mov dx, word[fs_first_file + 2] call find_file mov bx, 0x7E00 / 16 call load_file_data ; jmp boot2; rb 510 — ($ — $$)db 0x55,0xAA; load_msg_preffix db «Loading ‘»,0load_msg_suffix db «‘…»,0ok_msg db «OK»,13,10,0config_file_name db «boot.cfg»,0start16_msg db «Starting 16 bit kernel…»,13,10,0start32_msg db «Starting 32 bit kernel…»,13,10,0label module_list at 0x6000label memory_map at 0x7000; DS:SI split_file_name: push si @: lodsb cmp al, «/» je @f test al, al jz @f jmp @b @: mov byte[si — 1], 0 mov ax, si pop si ret; DS:SI BX:0. AXload_file: push si mov si, load_msg_preffix call write_str pop si call write_str push si mov si, load_msg_suffix call write_str pop si push si bp mov dx, word[fs_first_file + 2] mov ax, word[fs_first_file] @: push ax call split_file_name mov bp, ax pop ax call find_file test byte[f_flags], 1 jz @f mov si, bp mov dx, word[f_data + 2] mov ax, word[f_data] jmp @b @: call load_file_data mov si, ok_msg call write_str pop bp si ret; get_memory_map: mov di, memory_map xor ebx, ebx @: mov eax, 0xE820 mov edx, 0x534D4150 mov ecx, 24 mov dword[di + 20], 1 int 0x15 jc @f add di, 24 test ebx, ebx jnz @b @: cmp di, 0x7000 ja .ok mov dword[di], 0x100000 mov dword[di + 4], 0 mov dword[di + 12], 0 mov dword[di + 16], 1 mov dword[di + 20], 0 mov ax, 0xE801 int 0x15 jnc @f mov ah, 0x88 int 0x15 jc .ok mov cx, ax xor dx, dx @: test cx, cx jz @f mov ax, cx mov bx, dx @: movzx eax, ax movzx ebx, bx mov ecx, 1024 mul ecx push eax mov eax, ebx mov ecx, 65536 mul ecx pop edx add eax, edx mov [di + 8], eax add di, 24 jmp .ok .ok: xor ax, ax mov cx, 24 / 2 rep stosw ret; boot2: ; mov si, config_file_name mov bx, 0x1000 / 16 call load_file ; mov bx, 0x9000 / 16 mov bp, module_list mov dx, 0x1000 .parse_line: mov si, dx .parse_char: lodsb test al, al jz .config_end cmp al, 10 je .run_command cmp al, 13 je .run_command jmp .parse_char .run_command: mov byte[si — 1], 0 xchg dx, si cmp byte[si], 0 je .parse_line ; cmp byte[si], «#» je .parse_line ; cmp byte[si], «L» je .load_file ; cmp byte[si], «S» je .start ; ; mov al, [si] mov [.cmd], al call error db «Unknown boot script command ‘» .cmd db ? db «‘!»,13,10,0 .config_end: ; ; jmp reboot; .load_file: push dx inc si call load_file push ax mov cx, 512 mul cx mov word[bp + 8], ax mov word[bp + 10], dx mov word[bp + 12], 0 mov word[bp + 14], 0 mov ax, bx mov cx, 16 mul cx mov word[bp], ax mov word[bp + 2], dx mov word[bp + 4], 0 mov word[bp + 6], 0 pop ax shr ax, 9 — 4 add bx, ax add bp, 16 pop dx jmp .parse_line; .start: ; , cmp bx, 0x9000 / 16 ja @f call error db «NO KERNEL LOADED»,13,10,0 @: ; xor ax, ax mov cx, 16 mov di, bp rep stosw ; inc si cmp word[si], «16» je .start16 cmp word[si], «32» je .start32 ;cmp word[si], «64» ;je .start64 ; call error db «Invalid start command argument»,13,10,0; 16- .start16: mov si, start16_msg mov bx, module_list mov dl, [disk_id] jmp 0x9000; 32- .start32: ; 32- mov si, start32_msg call write_str ; , i386 mov ax, 0x7202 push ax popf pushf pop bx cmp ax, bx je @f call error db «Required i386 or better»,13,10,0 @: ; call get_memory_map ; xor ax, ax mov cx, 3 * 4096 / 2 mov di, 0x1000 rep stosw ; mov word[0x1000], 0x2000 + 111b mov word[0x1FFC], 0x3000 + 111b ; mov eax, 11b mov cx, 0x100000 / 4096 mov di, 0x2000 @: stosd add eax, 0x1000 loop @b ; mov di, 0x3000 mov eax, dword[module_list] or eax, 11b mov ecx, dword[module_list + 8] shr ecx, 12 @: stosd add eax, 0x1000 loop @b mov word[0x3FF4], 0x4000 + 11b ; Kernel stack mov word[0x3FF8], 0x3000 + 11b ; Kernel page table ; CR3 mov eax, 0x1000 mov cr3, eax ; GDTR lgdt [gdtr32] ; cli ; ģ ݣ mov eax, cr0 or eax, 0x80000001 mov cr0, eax ; ģ 32- jmp 8:start32; 32- align 16gdt32: dq 0 ; NULL — 0 dq 0x00CF9A000000FFFF ; CODE — 8 dq 0x00CF92000000FFFF ; DATA — 16gdtr32: dw $ — gdt32 — 1 dd gdt32; 32- use32start32: ; mov eax, 16 mov ds, ax mov es, ax mov fs, ax mov gs, ax mov ss, ax mov esp, 0xFFFFDFFC ; DL mov dl, [disk_id] ; EBX mov ebx, module_list ; ESI mov esi, memory_map ; jmp 0xFFC00000 

— startup.asm main.c. startup.asm , , ģ kernel_main. , startup.o , .

format ELFpublic _startextrn kernel_mainsection «.text» executable_start: movzx edx, dl push edx push esi push ebx lgdt [gdtr] call kernel_main @: ;cli ;hlt jmp @bsection «.data» writablegdt: dq 0 dq 0x00CF9A000000FFFF dq 0x00CF92000000FFFFgdtr: dw $ — gdt dd gdt

  Assembler :-). — kernel_main ţ . ţ . . GDTR — ģ .

— :

typedef struct { unsigned long long base; unsigned long long size;} BootModuleInfo;void kernel_main(char boot_disk_id, void *memory_map, BootModuleInfo *boot_module_list) { char *screen_buffer = (void*)0xB8000; char *msg = «Hello world!»; unsigned int i = 24 * 80; while (*msg) { screen_buffer[i * 2] = *msg; msg++; i++; }} 

— «Hello world!» . .

, — , . printf, strcpy, memcpy . . ģ , . ͣ libc, . , .

— , . ӣ . . , , . . . (, , ), . . , — ( PE ELF). 0xFFC00000. ӣ, ld:

OUTPUT_FORMAT(«binary»)ENTRY(_start)SECTIONS { .text 0xFFC00000 : { *(.text) *(.code) *(.rodata*) } .data ALIGN(0x1000) : { *(.data) } .bss ALIGN(0x1000) : { *(.bss) } .empty ALIGN(0x1000) — 1 : { BYTE(0) }} 

, 0xFFC00000. , read-only , , . 4 ( ). .empty , ( ). .

ӣ :

fasm startup.asm startup.ogcc -c -m32 -ffreestanding -o main.o main.cld —oformat=binary -melf_i386 -T script.ld -o kernel.bin startup.o main.o 

GCC -ffreestanding . , .

:

dd if=bin/boot.bios.bin of=bin/boot_sector.bin bs=512 count=1dd if=bin/boot.bios.bin of=disk/boot.bin bs=1 skip=512cp bin/kernel.bin disk/kernel.binbin/make_listfs of=disk.img bs=512 size=2880 boot=bin/boot_sector.bin src=./disk  

, bin , ݣ disk, boot.cfg :

# Loading kernelLkernel.bin# Boot 32 bit kernelS32 

ӣ , :

s_1342449337_2515581_92d6017bd6.png

  , , ݣ . , . , . , , . Assembler, startup.asm main.c, ֣ — ( ) .

1. Linux Respin

Иллюстрация 1

Linux Respin это форк более неподдерживаемого Remastersys. Год назад Remastersys был самым популярным инструментом для создания собственного дистрибутива Linux  и/или создания резервной копии вашей операционной системы. Linux Respin не даёт тех же возможностей что и Remastersys, но всё еще великолепно вам подойдет, если вы используете один из дистрибутивов которые им поддерживаются. Linux Respin доступен только для Debian, Mint и Trisquel, что, конечно, ограничивает его популярность. Еще один жирный минус в этом инструменте — практически полное отсутствие документации.

Makefile

, . . , startup.asm Σ, fasm. make, GCC MinGW.

Makefile :

: …  

, Makefile — all. make all , . ţ . . ģ .

ݣ , Makefile — clean. , » «. Makefile :

all: startup.o main.o script.ld ld —oformat=binary -melf_i386 -T script.ld -o kernel.bin startup.o main.ostartup.o: startup.i386.asm fasm startup.i386.asm startup.omain.o: main.c gcc -c -m32 -ffreestanding -o main.o main.cclean: rm -v *.o kernel.bin 

Makefile ( ) . make , kernel.bin ( , — ).

:

all: boot.bios.binboot.bios.bin: boot.bios.asm fasm boot.bios.asm boot.bios.binclean: rm -v boot.bios.bin 

 … make_listfs:

all: compilecompile: make_listfs.c gcc -o make_listfs make_listfs.cclean: rm -f make_listfs make_listfs.exe 

Makefile . , , 1 Makefile, . src, : boot, kernel, make_listfs. src Makefile:

all: make -C boot/ make -C kernel/ make -C make_listfs/clean: make -C boot/ clean make -C kernel/ clean make -C make_listfs clean 

 , src make , make clean, .

, . src, bin disk boot.cfg.

#!/bin/shmake -C srccp src/boot/boot.bios.bin bin/cp src/kernel/kernel.bin bin/cp src/make_listfs/make_listfs bin/dd if=bin/boot.bios.bin of=bin/boot_sector.bin bs=512 count=1dd if=bin/boot.bios.bin of=disk/boot.bin bs=1 skip=512cp bin/kernel.bin disk/kernel.binbin/make_listfs of=disk.img bs=512 size=2880 boot=bin/boot_sector.bin src=./disk read -p «Press Enter to continue…» dummy 

, , . dd, cp, rm Windows, ţ MSYS Cygwin. GCC fasm (make_listfs Windows-).

Шаг 3. Придумываем название для сборки

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

Предупреждения

  • Небрежное переписывание ОС на жесткий диск может повредить его полностью. Будьте осторожны
  • У вас не получится полностью готовая система за две недели. Начните с загружаемой операционной системы, а затем переходите на более интересный материал.
  • Если вы сделаете что-то опрометчивое, как, например, напишите беспорядочные байты в произвольных портах I/O, то уничтожите вашу ОС и можете (в теории) спалить ваше оборудование.
  • Не ожидайте, что будет легко построить качественную операционную систему. Существует множество сложных взаимозависимостей. Например, для того, чтобы ОС была способна работать с несколькими процессорами, ваш диспетчер памяти должен иметь «блокирующие» механизмы для предотвращения доступа лишних процессоров в один и тот же ресурс одновременно. Используемые «блоки» предполагают наличие планировщика, чтобы убедиться, что только один процессор обращается к критическому ресурсу в любой момент времени, а все остальные находятся в режиме ожидания. Тем не менее, работа планировщика зависит от присутствия диспетчера памяти. Это пример зависимости от взаимоблокировки. Нет стандартного способа разрешить подобные проблемы; каждый создатель операционной системы, как ожидается, достаточно квалифицирован, чтобы найти свой собственный вариант их решения.

Что необходимо знать

Список вещей, которые необходимо знать для создания собственной ОС, очень длинный. Но в нём есть три основных пункта, на которые нужно обратить внимание в первую очередь:

  • базовое понимание компьютерной науки (информатики);
  • теория и опыт в программировании;
  • знание высоко- и низкоуровневых языков программирования.

Изучение информатики

Разработка ОС — это не тоже самое, что, скажем, веб-разработка. Тут нельзя будет просто и быстро разобраться в базовых вещах. Для начала нужно получить крепкий базис информатики и только потом переходить к другим темам.

Coursera: Computer Science 101 — это курс, который подойдёт для тех, кто только начал осваиваться в информатике и программировании. Если у вас уже имеются элементарные знания в в этой области, то пропустите этот курс и переходите к следующему.

Udacity: Intro to Computer Science использует веб-разработку в качестве подхода к обучению компьютерной науке. Хоть курс и не направлен на непосредственную разработку ОС, он даёт мощный базис в области программирования.

edX: Introduction to Computer Science — этот курс является самым исчерпывающим и углублённым в этом списке. Несмотря на это, он полностью бесплатен. Курс был разработан в Гарвардском Университете. В нём вас научат алгоритмам, структурам данных, управлению ресурсами, разработке ПО, а так же познакомят с такими языками программирования, как C, PHP и JavaScript.

Подборка книг для самостоятельного изучения Computer Science.

6. Live Magic

Картинка 6Live Magic еще одна утилита Debian для создания дистрибутива. Она может создавать CD, USB, и сетевые образы. Его гораздо проще использовать, чем некоторые другие приложения в этом списке, такие как Remastersys, но он не использует вашу работающую систему как основу для создания образа. Вместо этого следуйте указаниям мастера и выберите свои параметры конфигурации. Программа вытащит пакеты из ваших репозиториев и добавит их в ваш образ.

Об этой статье

Эту страницу просматривали 64 340 раз.

Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: