niedziela, 31 października 2010

Pisanie systemów operacyjnych cz. 1

Może zawsze zastanawiałeś się, jak pisze się systemy operacyjne od zera. Nawet jeśli nie, to jeśli masz wiedzę informatyczną ten kurs jest dla Ciebie. Podobne kursy po polsku sięgają jedynie GDT. W j. angielskim polecam OSDev.
Musisz jedynie opanować asembler x86 (FASM) na poziomie średniozaawansowanym. Jeśli nie znasz asemblera, ten kurs jest jednym z najlepszych.
Po co pisać nowy system? Jedynie dla celów edukacyjnych. Samemu nie stworzysz systemu dorównującego obecnym, albo mającego podstawowe funkcje.

W tej części opiszę przygotowanie narzędzi i stworzenie absolutnej podstawy systemu operacyjnego.

Edytor tekstu
Warto przygotować sobie dobry edytor tekstu obsługujący składnię asemblera Intela. Dla Windowsa może to być Notepad++. Dla Linuksa najlepiej SciTE.

Kompilator
Używam popularnego Flat Assemblera. Pobieramy go i rozpakowujemy. Następnie używamy go poleceniem:
fasm <source> [output]

Piszemy kod
main.asm
format binary
use16

include "boot.inc"

times 510 - ($ - start) db 0
dw 0AA55h



boot.inc
org 7C00h

start:
mov ax, 0B800h
mov es, ax
.loop:
inc dword[es:0]
jmp .loop


format binary oznacza, że program jest napisany w formacie binarnym w odróżnieniu od formatu DOS-owego, ELF, wykonywalnego i innych.
Komenda org ustawia bezwzględny adres w pamięci, do którego zostaje załadowany program. Kompilator wymaga tej informacji, by znać adres zadeklarowanych zmiennych. W przypadku bootsektora jest to zawsze szesnastkowo 7C00.
use16 zmienia typ kodu na 16-bitowy.
Następnie kilka instrukcji w pętli powiększa o 1 podwójne słowo (4 bajty) w pamięci pod adresem B800:0000. W tym miejscu zaczyna się pamięć trybu tekstowego.
Instrukcja times 510 - ($ - start) db 0 dopełnia program zerami do 510 bajtów.
Na końcu stawiamy dwa bajty często wymagane przez BIOS - szesnastkowo AA55. Bootsektor ma łącznie pół kilobajta.

Całość kompilujemy poleceniem:
fasm main.asm main.bin

Maszyna wirtualna
Oczywiście możemy zapisywać system na dyskietce poleceniem linuksowym:
dd if=bootloader.bin of=/dev/fd0
Następnie trzeba uruchomić komputer z dyskietki. Jednakże szybciej i bezpieczniej będzie użyć VirtualBoxa. Po instalacji tworzymy nową maszynę wirtualną. Wybieramy inny typ systemu:

Wystarczy kilkadziesiąt MB pamięci - przechodzimy dalej. Tworzymy wirtualny dysk twardy o rozmiarze kilkudziesięciu MB.

W ustawieniach wybieramy Nośniki.

Wybieramy dyskietkę. Klikamy na ikonkę po prawej stronie.

Pozostaje dodać i wybrać nasz skompilowany obraz main.bin.

Po uruchomieniu tego kodu dwa pierwsze znaki powinny się zmieniać:

sobota, 30 października 2010

Odkryto setki prehistorycznych owadów








Naukowcy odkryli największy bursztyn wypełniony idealnie zachowanymi prehistorycznymi owadami.
Bursztyn o wadze 150kg odkryty w kopalni węgla brunatnego w Gujarat, 30km na północny wschód od Suratu podważył przekonanie, że Indie były odizolowaną wyspą 52 milionów lat temu. Uważa się, że Indie odłączyły się od Afryki ponad 100 milionów lat wcześniej.

Zazwyczaj owady znalezione w bursztynach są tylko pustymi pancerzykami. Jedynie szkielet zewnętrzny zostaje zachowany. Ich miękkie wnętrzności rzadko zostają nienaruszone po tysiącach lat. Między innymi z tego powodu uzyskiwanie krwi komarów przedstawione w filmie "Jurrasic Park" jest fikcją. Jednakże owady odkryte w Indiach są wyjątkowe. Są jednymi z najlepiej zachowanych okazów.

Bursztyn ten jest prawdopodobnie większy niż rekordowe okazy z bogatych regionów Bałtyku. Uwięzione w nim insekty są droższe niż sam bursztyn. Prehistoryczne termity, muchy, pszczoły, mrówki, pająki i roztocza zostaną zbadane z niesamowitą dokładnością.

"Możemy rozłożyć bursztyn i wydobyć osobniki na zewnątrz", wyjaśnia prof. Jes Rust z uniwersytetu w Bonn. "To jak wyciągnięcie całego dinozaura z bursztynu i możliwość zobaczenia go pod mikroskopem."


Te mające 50 milionów lat owady mogły przetrwać zagładę dinozaurów. Możliwe, że żyły w czasie ewolucji ssaków. Choć większość to prehistoryczne gatunki, to jeden gatunek mrówek należy do rodzaju, który żyje wciąż w Australii.


"Bursztyn pokazuje, jakby stara fotografa, jak wyglądało życie w Indiach przed zderzeniem z kontynentem azjatyckim. Insekty stawiają historię subkontynentu w nowym świetle", mówi Rust.


Zamiast znaleźć ewolucyjne powiązania z Afryką i Madagaskarem, badacze odkryli zależności w północnej Europie, Azji, Australii i obu Amerykach.

Dotychczas w bursztynie odnaleziono ogółem 700 okazów, lecz naukowcy mówią, że jedynie "zadrapali" powierzchnię.

Źródło: http://www.mnn.com/earth-matters/wilderness-resources/stories/hundreds-of-prehistoric-insects-found-intact-within-huge-
http://timesofindia.indiatimes.com/home/science/Ancient-insects-find-shows-India-wasnt-isolated-50mn-yrs-ago/articleshow/6828378.cms
http://www.telegraph.co.uk/science/science-news/8086821/Ancient-insect-find-raises-questions-about-Indias-origins.html

Rotationplasty

Wiadomość o raku kolana albo innym schorzeniu nóg jest szokująca dla (zazwyczaj młodego) pacjenta. Jednakże istnieje nadzieja: udana amputacja może nawet pozwolić na względnie normalną egzystencję.
Rotationplasty to procedura chirurgiczna polegająca na usunięciu środkowej części kończyny. Resztę kończyny obraca się o 180°. Kość piszczelowa zostaje przyłączona do kości udowej. Stopę przyłącza się w miejsce kolana. Pozwala to na dużo łatwiejsze użycie protez, a nawet chodzenie.



Źródło: http://www.amputee-coalition.org/inmotion/mar_apr_05/rotationplasty.html
http://en.wikipedia.org/wiki/Rotationplasty

Steganografia

Steganografia jest nauką o ukrywaniu danych w ten sposób, by ich obecność nie została wykryta. W przeciwieństwie do kryptografii próbuje ukryć istnienie komunikatu. Zazwyczaj nośnik to pozornie zwykła, dużo większa od ukrytego komunikatu treść. Format może być tekstowy lub cyfrowy (obrazek, film, nagranie, plik). Są trzy grupy systemów steganograficznych:

  • steganografia czysta - opiera się jedynie na unikalności metody
  • steganografia z kluczem prywatnym - obie strony posiadają ten sam klucz i szyfrują np. AES
  • steganografia z kluczem publicznym - jedna strona wykorzystuje kryptografię asymetryczną np. RSA, czyli szyfruje kluczem publicznym, a wiadomość może zostać odszyfrowana jedynie odpowiadającym mu kluczem prywatnym
Możemy ukryć komunikat w tekście pisanym.
Przykład 1. Pierwsze litery w zdaniach tworzą liczbę.
Przykład 2. Pierwsze wyrazy w wersach tworzą zdania.
Możemy także ukryć go w obrazku. Odszyfruj go tutaj hasłem haslo:



Jest to przykład steganografii z kluczem prywatnym. Jedną z wad wykorzystania obrazków jest uszkodzenie wiadomości przy edycji obrazka. Nawet najmniejsza kompresja czy zmiana rozmiaru może usunąć wiadomość.

Project Euler

Project Euler to zbiór programistyczno-matematycznych zagadek. Jest ich aktualnie ponad 300. Po rejestracji możemy wpisywać odpowiedzi. Po podaniu poprawnego rozwiązania mamy dostęp do komentarzy.
W pierwszym zadaniu musimy znaleźć sumę liczb poniżej 1000, które są wielokrotnościami liczb 3 i 5. Wystarczy prosty programik w Ruby:
puts (1..999).select{|n| n%3+n%5 == 0}.inject(0){|x, n| x+n}

piątek, 29 października 2010

Dzielenie sekretu Shamira

Dzielenie sekretu Shamira jest algorytmem kryptograficznym. Pozwala na podział liczby S na n części, z których potrzebne jest co najmniej k dowolnych części do odtworzenia liczby.


Następnie wybieramy k dowolnych części, by odtworzyć S



Przykład: Chcemy podzielić liczbę 7 na 4 części, z których 3 wystarczą do odtworzenia liczby. Jako losowe wybieramy liczby 5 i 4.



Wybieramy trzy części i obliczamy:

Pierwszy wpis

Będę tutaj zamieszczał ciekawostki i rzeczy dotyczące programowania.