Strona używa cookies (ciasteczek). Dowiedz się więcej o celu ich używania i zmianach ustawień. Korzystając ze strony wyrażasz zgodę na używanie cookies, zgodnie z aktualnymi ustawieniami przeglądarki.    X

W świecie komputerowego tekstu

Zastanawialiście się kiedyś jak komputery "widzą" tekst? Albo dlaczego różne urządzenia elektroniczne pod kontrolą różnych systemów operacyjnych widzą i rozumieją ten sam tekst?

To zasługa w niemałej części American National Standards Institute, w skrócie ANSI. Ta znana niegdyś jako American Standards Association organizacja utworzyła komitet o fascynującej ;] nazwie X3, którego zadaniem było zestandaryzowanie sposobu wymiany tekstu między różnymi urządzeniami. Standard ten znany jako ASCII (American Standard Code for Information Interchange) wyparł stosowany wcześniej kod Baudota-Murraya i do dziś stanowi podstawę wymiany informacji między urządzeniami elektronicznymi. Zupełnie przypadkiem Intel jest członkiem ANSI. ;)

Ale jak działa ASCII? - ktoś zapyta. Już wyjaśniam. Historycznie większość komputerów (nie wszystkie!) operowała na bajtach o wielkości 8 bitów. Zaistniała potrzeba stworzenia jednolitego sposobu reprezentowania tekstu w postaci bajtów. Jako że w czasie powstawania standardu dalekopisy były wciąż kawałkiem szalenie zaawansowanej techniki, ASCII musiało odpowiadać także na ich zapotrzebowania, takie jak np. przewijanie papieru i powrót do początku wiersza (tzw. powrót karetki). No i te nieszczęsne urządzenia, które miały tylko 7 bitów na bajt...

ASCII stworzyło zatem tablicę kodów dla wartości od 0 do 127 (7 bitów), które to reprezentowały zarówno komendy sterujące (przewiń papier, uderz w dzwoneczek przywołujący operatora urządzenia - nie żartuję! - i temu podobne) jak i znaki niezbędne w tekście: litery, cyfry, znaki przestankowe i szereg mniej istotnych. Wartości 128-255, z których mogły skorzystać 8-bitowe urządzenia, miały kilka wariantów, dla większości pewnie znanych pod postacią stron kodowych w DOS. Tabela kodów jest łatwo osiągalna z poziomu wyszukiwarki Google, ale dla wygody umieściłem ją także poniżej.

Sposób, w jaki rozdystrybuowano kody ASCII niesie ze sobą kilka interesujących właściwości. Po pierwsze, jak już wspomniałem, wszystkie "naturalne" kody (w tym litery i cyfry) znajdują się w przedziale 0-127, a więc mają zero na najstarszym bicie klasycznego, 8-bitowego bajtu. Co więcej wszystkie litery mają jedynkę na drugim najstarszym bicie.

Widzicie już dokąd zmierza ten wpis? :)

Każda kratka grafiki to bit. Biały - zero, czarny - jeden. W każdym rzędzie mamy zatem 16 bitów, czyli dwa bajty (dwa znaki informacji).

Konkursowe pytanie to grafika 16x6 punktów. Daje nam to w sumie 12 liter. Gdyby spojrzeć na trzeci MSB (most significant bit) od lewej, da się także zauważyć, że pierwszych 8 znaków to litery małe (jedynka na 3. bicie) a kolejne cztery to litery duże (zero w tym samym miejscu). Jaki to zatem tekst? Część z Was na pewno już wie: "pierwszySIMD". :)

Trzeba sobie zatem odpowiedzieć na pytanie: jaki był pierwszy powszechnie oferowany przez Intel SIMD? I co w ogóle znaczy SIMD?

SIMD to skrót od single instruction, multiple data. Idea jest następująca: by przyspieszyć działanie urządzenia, wykonujmy identyczne operacje na wielu danych jednocześnie, a nie jedna po drugiej. Pierwotnie komputery wykonywały operacje szeregowo: weź dwie wartości, zsumuj, zapisz wynik; weź dwie kolejne, zsumuj,...

Jest wiele zadań, które wymagają takich samych, powtarzalnych operacji na pokaźnych objętościowo danych. Układy wspierające SIMD pozwalają na pobranie nie dwóch, a większej liczby wartości (4, 8, 16,...), wykonanie na parach tej samej operacji oraz zapisanie wyników. Wszystko to jednocześnie! Jeśli zatem nasza aplikacja (np. program do kompresji video) operuje w jednolity sposób na bardzo dużej ilości danych, wykorzystując SIMD możemy uzyskać poważne przyspieszenie w ich przetwarzaniu.

Pierwsze oferowane w procesorach x86 rozszerzenie SIMD to oczywiście rok 1996 i technologia MMX (ponoć pierwotnie nie był to żaden skrót, choć powszechnie mówi się o rozwinięciu MultiMedia eXtension). Podkreślenie w podpowiedzi, że chodzi o technologię Intela jest o tyle istotne, że rok wcześniej zadebiutowało rozszerzenie VIS w procesorach SPARC a dwa lata wcześniej MAX w procesorach PA-RISC od HP. Przeczy to wprost idei architektur RISC (do których należy także SPARC), ale ciężko wymagać od inżynierów konsekwencji. ;>

Czasy świetności RISCów już mocno przeminęły a architekturę PA-RISC wyparło Itanium znane także jako IA-64 od - nomen omen - Intela. Która to architektura, jeśli wolno mi wyrazić opinię, jest potwornie uciążliwa w debugowaniu. ;) Dziś procesory RISC pozostają architekturą wyspecjalizowaną, niszową (zrezygnowało z nich nawet Apple), natomiast x86 z MMX i jego zmiennoprzecinkowymi następcami z rodziny SSE święcą triumf. I to technologii MMX właśnie poświęcone było pierwsze zadanie specjalne. :]

Gratulacje dla wszystkich, którzy sobie z zadaniem poradzili. Mam nadzieję, że obeszło się bez siwych włosów. :) Bolesna chłosta czeka wszystkich tych, którzy chcieli popsuć zabawę innym publicznie odpowiadając lub podpowiadając. Wstydźcie się! :P

Padało wiele różnych odpowiedzi. Część z grających uznała, że wystarczy wpatrywać się w grafikę wystarczająco długo i nadejdzie olśnienie. Stąd zapewne takie odpowiedzi jak fxk, fyk, RYK, "i, zygzaki, schodki" czy "biały, czerwony, czarny". :) Część ewidentnie nie lubi podpowiedzi, bo na pytanie dotyczące Intela odpowiadała IBM lub AMD. ;] Wiele osób strzelało wpisując TLA związane z Intelem: QPI, C2D, GMA, DUO,... Część celowała bardziej ogólnie: x86 czy też w szalenie popularne CPU.

Wreszcie były i odpowiedzi zaskakujące. Część z nich to nazwy części ciała, których opublikować nie mogę. ;> Kolejna grupa to wyrazy zdziwienia. Trafiło się "haha!!!", "ale jaja!", popularne "LOL" i kilka wezwań o łaskę z nieba. Niektórzy z grających podzielili się opinią na temat pytania, kilkoro postanowiło zadać nam pytanie. Odpowiadam na jedno z nich: nie, to nie jest alfabet Braille'a. :) Trafił się też link do akcji Pajacyk i, moje ulubione: "jakie ładne... co to?". :D

I to tyle w materii rozgrzewki. Do następnego zadania specjalnego. Obiecuję, że będzie dużo trudniejsze. ;D 

Komentarze

0 nowych
  #1 10.10.2010 00:05

A ja nadal wiem swoje - ryk rządzi!

Lizard   5 #2 10.10.2010 00:12

Mhm.. środkowej części nie za bardzo rozumiem, ale dzięki za "kwiatki" ;-)

Ryan   15 #3 10.10.2010 00:14

Co konkretnie nie jest jasne? Mogę przecież poprawić. :)

  #4 10.10.2010 00:16

A ja juz rozumiem :-D teraz wyglada na banal... moze gdybym mial jakies szanse, kombinowalbym, ale z 754 miejscem nie chcialo mi sie

Lizard   5 #5 10.10.2010 00:17

Jak jest o RISC, to nie za bardzo rozumiem o co chodzi, ale nie dlatego, że jest niezrozumiale napisane, tylko dlatego, że po prostu nie wiem co to jest :-) Zaraz się doedukuję.

Kot-ek   10 #6 10.10.2010 00:19

A czy pierwszy SIMD nie jest w ujęciu procesora? A te to z rodziny 8? Natomiast MMX zawsze wydawało mi się zestawem rozkazów...

Songokuu   14 #7 10.10.2010 00:19

OMG... :)
I ja miałem na to wpaść?
Ja podałem "CES" (Consumer Electronics Show) bo Intel wraz Warner mieli taką akcję promocyjną, w której wykorzystali kody DataMatrix. A wiadomości w nich zawarte prowadziły do filmów na youtube o CES Las Vegas.
Moim zdaniem moja odpowiedź pasuje do treści zadania...chociaż już wiem że odpowiedź była bardziej skomplikowana.

Igloczek   8 #8 10.10.2010 00:19

Kurde, ja się pospieszyłem i zamiast MMX napisałem SSE.

Ale wielki plus za pomysł :)!

B.Andy   4 #9 10.10.2010 00:25

Mialo byc zamieszanie, ale chyba gdzies zginelo :-( mordek dostaje pierwszego netboooooka :-(

kostek7   3 #10 10.10.2010 00:25

Czytam tekst już drugi raz i mam prośbę do autora o wyjaśnienie przejścia logicznego pomiędzy tablicą kodów ASCII a grafiką z dzisiejszego zadania. :)

Kot-ek   10 #11 10.10.2010 00:26

@Songokuu - jedna z hipotez poprowadziła mnie również poprzez kody QR do akcji Intela (fragment Easter Eggs na stronie http://en.wikipedia.org/wiki/Intel_Corporation) w Hillsboro (Oregon), gdzie pracownicy tej firmy w różnych miejscach kampusu zaszyfrowali tajną wiadomość za pomocą tych kodów. W Hillsboro była również jedna z trzech większych fabryk, gdzie produkowano pierwsze procesory x86 - tak też odpowiedziałem :P

neoxxx   2 #12 10.10.2010 00:26

moje typy to LOL, ŻAL i OMG jak widac nie trafilem ale byly adekwatne do zadania.

B.Andy   4 #13 10.10.2010 00:31

Po prostu czarne to 1, a biale to 0 i odczytujac od lewej do prawej, mamy 01110... po zamianie na systek dziesietny dostaniemy kody ansi znakow. Dla mnie caly haczyk byl w tym, ze zaszyfrowana wiadomosc to tylko wskazowka

Lizard   5 #14 10.10.2010 00:31

ja w swoich poszukiwaniach trafiłem na Intel HEX :>

Ryan   15 #15 10.10.2010 00:32

@Kot-ek: SIMD to ogólnie lista rozkazów jest. :)

@Lizard: Są dwie "klasy" architektur: RISC i CISC. RISC (np. PowerPC) mają niewiele różnych instrukcji (przeważnie kilka wariantów "pobierz z pamięci" i "zapisz do pamięci" oraz bardzo podstawowe operacje arytmetyczne). CISC z kolei (np. x86) mają instrukcje na każdą okazję (zarówno takie proste jak CISC jak i kombajny typu "weź wartość spod adresu A dodaj do wartości spod adresu B+4, wynik powiększ o 8 a następnie wrzuć pod adres z rejestru C").

Na poziomie krzemu RISC jest dużo prostszy. To był jeden z powodów dla których wieszczono, że RISC to przyszłość. Ale życie zweryfikowało te poglądy. ;) Jedyny RISC jaki posiadasz to zapewne układ ARM w telefonie komórkowym. Praktycznie każdy komputer biurowy to CISC (x86 lub x64).

Problem w tym, że od dawna układy RISC mają tak rozdmuchane listy rozkazów, że nazywanie ich czymś innym niż CISC jest jakimś niesmacznym żartem. :) To tak jakby mówić, że się jest chudym, gdy waga wskazuje 140kg. ;] Dodanie do listy rozkazów RISC rozkazów realizujących SIMD jest tego przykładem.

Oczywiście jest to bardziej opinia niż fakt, ale nie jestem w tej opinii odosobniony. :)

Songokuu   14 #16 10.10.2010 00:32

AKot-ek
Może redakcja nad nami się zlituje :) No bo przecież nasze odpowiedzi pasują do treści pytania.
A tak przy okazji to gratulacje dla tych wszystkich mega mózgów, którzy domyślili się o co chodzi i poprawnie (według zamysłu redakcji) odpowiedzieli na pytanie.

Kot-ek   10 #17 10.10.2010 00:38

@Ryan - trochę się nie zgodzę."Single instruction, multiple data (SIMD)" mi nie kojarzy się z rozkazami, a z maszynami (hardware), które dla pojedynczego potoku instrukcji mają wiele potoków danych... dla mnie to architektura (i procesory wytwarzane, które ją obsługują/posiadają), a nie instrukcje (software).

Ale człowiek się uczy całe życie...

PS: Mam Ci zaufać, że wiesz dobrze? :P

Ryan   15 #18 10.10.2010 00:46

Kot-ek, wyjaśnij mi proszę w jaki sposób "rozkazy" i "instrukcje" są niezwiązane ze sprzętem? :) Lista instrukcji jest podstawową cechą każdej architektury. MMX jest zestawem instrukcji SIMD. Pentium MMX jest pierwszym procesorem Intela implementującym ten zestaw instrukcji (obok zestawów instrukcji x86 i x87 ma się rozumieć). Gdyby ktoś odpowiedział Pentium MMX (konkretny procesor, tak jak chcesz), nawet pomimo tego, że podpowiedź wyraźnie mówi o 3 literach, zaliczylibyśmy. Ale nikt tak nie odpowiedział.

Igloczek   8 #19 10.10.2010 00:58

A jakieś punkty pocieszenia za napisanie SSE :D?

Ryan   15 #20 10.10.2010 01:00

Punkty sławy. :)

Kot-ek   10 #21 10.10.2010 01:01

Nie napisałem tego :) Po prostu uprościłem (rozszerzyłem) sobie odpowiedź do procesorów z serii 8 (Pentium MMX, czyli tak naprawdę "Pentium with MMX Technology" miał numerek 80586), a że miały być tylko trzy literki - x86 wpisałem. Na tą chwilę tak mi rozum podpowiadał - pytanie "pierwszySIMD" od razu rzutowane było na procesor (hardware), a MMX nie brałem pod uwagę (jako software).

Ach te szare komórki... Pofolgowały :P

A jak już jesteśmy przy szarości... a gdyby tak do tego obrazka dodać kolor szary... to by była dopiero logika rozmyta - ile czarnego jest w czarnym, albo ile białego jest w białym... czy jest to logiczne 1, czy 0... :)

Igloczek   8 #22 10.10.2010 01:17

@Kot-ek - pewnie zwyciężyła by jakaś kobieta :D

@Ryan - puki co poopalam w blasku za... mordzia :)

FlashMan   4 #23 10.10.2010 02:00

Dopiero parę minut temu przyszła mi odp w łazience i to już bez patrzenia na obrazek tylko na swoją twarz. Oczywiście próbowałem rozwiązać zagadkę w ciągu dnia (po obiedzie), ale dopiero teraz miałem czysty umysł i zastanawiałem się nad technologiami Intela... Trudno, ostatecznie nie odpowiedziałem na pytanie mimo, że doskonale znam słowo klucz - MMX :)

Gratuluję za pomysł i czekam na trudniejsze pytania.

Lizard   5 #24 10.10.2010 02:35

@Ryan
Jestem pod wrażeniem Twoich zdolności nauczycielskich. Przeczytałem trochę na wiki i znalazłem się w jeszcze większej i ciemniejszej..., a z Twojego komentarza dowiedziałem się wszystkiego.

Skoro jesteś taki dobry, to wytłumacz mi proszę, w jaki sposób zapisane są instrukcje w procesorze. Na poziomie mechanicznym. Jak wygląda np. funkcja dodawania, albo pętla ?

Ryan   15 #25 10.10.2010 03:26

To czy dany bajt jest daną (tekstem, kolorem obrazka, dźwiękiem) czy kodem zależy od kontekstu. Przy starcie komputer zakłada, że w pewnym obszarze pamięci znajduje się program i obecne tam bajty (przeważnie w przypadku komputerów PC "skopiowany" do pamięci BIOS) traktuje jako kod.

Pierwotnie procesory RISC były zbudowane tak, że każda instrukcja miała taką samą długość, np. 2 bajty (słowo). Komputer czytał zatem dwa bajty, interpretował je i wykonywał.

Interpretacja polega na stosunkowo prostym mapowaniu w stylu: 0 - nie rób nic, 1 - dodaj, 2 - odejmij, 3 - załaduj z pamięci do rejestru, itd. Tu trzeba pewnie wyjaśnić co to rejestr. :)

Procesory mają wbudowaną niewielką pamięć pod nazwą rejestrów. W najprostszej postaci są to jedyne miejsca, których wartości mogą być przez ALU (jednostkę arytmetyczną - część CPU, która wykonuje operacje matematyczne) przetwarzane.

Zatem dodanie do siebie dwóch komórek z pamięci wymaga wczytania jednej komórki do jednego rejestru, drugiej komórki do drugiego rejestru i wreszcie wykonania dodawania na rejestrach i zapisania wyniku w rejestrze (operacja jest częścią samego dodawania - wynik nie może wisieć w powietrzu). To trzy operacje (2 ładowania i 1 dodawanie) lub, jeśli chcemy wynik z rejestru przenieść ponownie do pamięci, aż cztery.

Takie ograniczenie - dostęp do pamięci mają tylko operacje odczytu/zapisu, a nie arytmetyczne - pozwoliło uprościć kody i zachować w RISCach stały rozmiar instrukcji. Bo łatwiej zakodować kombinacje pokroju: "dodaj rejestr A do rejestru B", A do C, A do D, B do C, B do D, C do D (6 wariantów dla 4 rejestrów) niż "dodaj do komórki spod adresu [tutaj dowolny adres w pamięci] komórkę spod adresu [drugi dowolny adres]".

Te adresy to pozycja w pamięci opisana liczbami zapisanymi w jednym lub kilku bajtach. Wobec tego im więcej pamięci, tym więcej miejsca w kodzie instrukcji potrzeba, by wskazać o jakim miejscu w pamięci mówimy. Dla 64kB to 2 bajty, dla 4GB to 4 bajty.

Zakładając nawet, że zakodowanie typu typu operacji danej instrukcji (dodawanie, odejmowanie,...) w jednym bajcie jest ok, dwa parametry operacji będące adresami to przynajmniej kilka dodatkowych bajtów, które znacznie poszerzają długość całej instrukcji. A nie dość, że pamięć była kosztowna, to jeszcze przesłanie kilku bajtów z pamięci do procesora w celu przeczytania "co mamy teraz do roboty?" trwało dosyć długo.

Alternatywą były instrukcje o zmiennym rozmiarze typowe dla architektur CISC i dostęp do pamięci na kilka różnych sposobów, bezpośrednio w operacjach arytmetycznych. Czyli np. dodawanie nie musiało polegać na poprzedzających je przesunięciach z pamięci do rejestru i odbywało się w samej operacji dodawania.

To komplikowało budowę instrukcji jak i ich dekodowanie w układzie. Kiedyś to był poważny problem, dzisiaj niewielką tylko część krzemu zajmuje logika odpowiedzialna za dekodowanie instrukcji.

Wracając do samego zapisu instrukcji. Te jak już pisałem są w pamięci i w gestii autora programu jest takie wysterowanie procesora, żeby ten wiedział gdzie jest kod a gdzie dane. BIOS czyta z dysku starter systemu operacyjnego (np. msdos.sys w przypadku MS DOS), ładuje go do pamięci pod jakimś adresem, po czym skacze pod ten adres (steruje procesor tak, by ten wykonał kod spod tego właśnie adresu).

Jeśli podmienisz msdos.sys na grafikę, niczego nieświadomy BIOS wczyta ją do pamięci i skoczy do jej danych, jakby to był kod. Coś się stanie, bo to bajty, które procesor JAKOŚ zinterpretuje, ale pewnie nie wykona się nic sensownego. :) Podobnie gdybyś w miejsce danych wrzucił kod, jakoś te dane zostaną zinterpretowane przez wykonywany program.

Te dwa rodzaje błędów są zresztą podstawą sporej części ataków na dziury w oprogramowaniu. Jeśli jesteś w stanie zmusić program graficzny do wczytania pliku, który jest tak spreparowany, że program wykona się nieprawidłowo i skoczy do obszaru pamięci, w którym są Twoje dane - voila! Twój plik graficzny "wykonał" kod na komputerze ofiary. :)

Czyli: procesor zajmuje się wyłącznie odczytywaniem i przetwarzaniem bajtów z pamięci. To, czy zinterpretuje je jako dane czy też jako kod zależy od tego, co powiedział o nich wykonany chwilę wcześniej kod. Jeśli więc gdzieś w programie jest błąd, mogą się dziać dziwne rzeczy. Jeśli problem nastąpi w aplikacji w userlandzie, wysypie się ta aplikacja. Jeśli problem jest w Ring 0 (kernel systemu i sterowniki), czeka Cię coś dużo bardziej nieprzyjemnego. :)

przemor25   14 #26 10.10.2010 07:26

Udało mi się odczytać grafikę. Przypomniały mi się zajęcia z LOGO i ASCII. Niestety napisałem SEE zamiast MMX. Gdybym nie pospieszył się wczoraj...

przemor25   14 #27 10.10.2010 07:32

"Trafił się też link do akcji Pajacyk"

Powinniście tym przyznać bonusowy punkt za dobre serce :)

przemor25   14 #28 10.10.2010 07:35

@Ryan

Ale kliknąłeś wtedy w Pajacyka? ;)

Pozdrawiam

Mifczu   12 #29 10.10.2010 08:24

No i właśnie wszystko ładnie pięknie ale jak już pisałem wcześniej połasiłem się na punkty i strzeliłem zanim doszedłem do odpowiedzi, a że nie mógłbym zjeść nic nie znając odpowiedzi to do niej doszedłem lecz za późno ale czekam na kolejne zadania bo zapowiadają się ciekawie.

luqass   13 #30 10.10.2010 08:31

w życiu bym na coś takiego nie wpadl, zadanie zaczełem rozwiazywać z drugiej strony:
1. najpierw na ślad naprowadziło mnie oznaczanie przez Intel procesorów czymś podobnym: http://upload.wikimedia.org/wikipedia/commons/thumb/1/14/KL_Intel_Pentium_4_Nort...
no i tutaj już właściwie miałem 2 typy: QRC, i CPU (CPU wydało mi się zbyt oczywiste :P)
2. Potem jednak postanowiłem się upewnić i korzystająć z dekodera: http://invx.com/
chyba wszystkie 3 literowe skróty (w tym mmx) związane z intelem próbowałem przetłumaczyć próbując uzyskać taki sam obrazek jakim była podpowidź- bez skutku, w związku z czym uznałem że to jest to jeden z pierwszych lepszych kodów dwuwymiarowych jakim intel oznacza procki i odpowiedziałem QRC
jak się okazało nie byłem nawet blisko...

Lizard   5 #31 10.10.2010 09:08

OK. Zrozumiałem, ale dalej nie wiem tego jednego. W jaki sposób procesor wie co to dodawanie ? Czym jest materialnie taka instrukcja ? Przecież nie słowem "add". Skąd, w pewnym sensie samoświadomość działania. Skąd procesor coś rozumie ? Czy dodawanie to jakiś mikro układ, gdzie na wejściu są dwa sygnały o pewnych mocach, a na wyjściu jest sygnał o mocy obu tych sygnałów ? I teraz procesor natrafiając na słowa "add" wpuszcza dwie wartości w ten układ i wynik zapisuje ?

Czy może działą to jak maszyna Turinga ? Procesor natrafia na kolejne obszary.... no ale właśnie skąd ta zdolność procesora do przestawiania "klocków" ? Czy to na zasadzie takiej, że jak jest napięcie, to po prostu właściwością krzemu jest przestawienie się ? A jak go nie ma to się nic nie dzieje ?

Pytam po omacku, bo właśnie na samym poziomie mechanicznym, fizycznym ciekaw jestem jak to działa.

ppsx   4 #32 10.10.2010 09:17

Zadanie było banalne. Proszę o trudniejszy zestaw pytań :)

[Off-Topic]
Dzisiejszy dzień jest odpowiedzią na najważniejsze pytanie we wszechświecie - o życie, wszechświat i wszystko inne.
Dziś jest 10 października 2010 roku, czyli data: 10/10/10.
Binarne 101010 = 42. A 42 jest właśnie odpowiedzią na to pytanie.
Jeśli komuś brakuje skojarzeń, to polecam lekturę książki (ew. obejrzenie filmu) pt. "Autostopem przez galaktykę" :D

imaginee   4 #33 10.10.2010 09:36

Autor tekstu: "jakie ładne... co to?" powinien otrzymać nagrodę specjalną ;D

lun   1 #34 10.10.2010 09:56

Ja niestety muszę się zgodzić z songokuu - też napisałem CES. Wydawało mi się to najbardziej trafną odpowiedzią, bo wymagała znajomości Intela, kombinowania oraz przeszukania treści w wujku google. Ale co najważniejsze taka odpowiedź nie dyskwalifikowała zawodowych informatyków (co robi aktualna odpowiedź).
Zadanie specjalne całkiem niezłe, ale szczerze mówiąc "udu***" troszkę tych użytkowników którzy z informatyką nie mają za wiele wspólnego. Do tego, jest to pytanie na które można udzielić wielu odpowiedzi, i wiele z nich wydaje się trafne.

GL1zdA   12 #35 10.10.2010 10:18

@Lizard
Polecam książke "Kod" Petzolda (tego od słynnego "Programowania Windows") - znajdziesz tam odpowiedzi na nurtujące cię pytania wyjaśnione w bardzo przystępny sposób.

adam9870   12 #36 10.10.2010 10:19

Bardzo ładnie piszesz. :) To wszystko wiesz z Windows Internals, 5th edition, jeżeli ktoś szukałby źródła, ażeby zagłębić temat?

PS. To teraz czas na wpis o tym jak Windows, począwszy od NT 6.0 radzi sobie z obsługą tekstu i przekształcaniem ANSI na Unicode itd.

Airborn   8 #37 10.10.2010 10:33

@Lizard od strony mechanicznej za wszystko odpowiedzialne są tranzystory, zorganizowane w bramki logiczne. ALU, o którym wspomniał Ryan składa się właśnie z wielu takich bramek. Przykładowo proste ALU może wyglądać tak jak na Wikipedii http://pl.wikipedia.org/w/index.php?title=Plik:2-bit_ALU.png&filetimestamp=2... bramki logiczne zbudowane są z tranzystorów polowych (obecnie dominują te wykonane w technologii CMOS - tzw. para komplementarna), na pojedynczą bramkę składa się kilka tranzystorów. Schematycznie może to wyglądać na przykład w taki sposób: http://en.wikipedia.org/wiki/File:CMOS_NAND.svg natomiast fizyczna budowa takiej bramki może wyglądać w taki sposób http://en.wikipedia.org/wiki/File:CMOS_NAND_Layout.svg

MartinMax   3 #38 10.10.2010 11:44

Za stary jestem na takie zabawy... Nawet ze wskazówkami autora zajęło mi to 10 minut. Musiałem sobie obrazek powiększyć (niestety jak dla mnie za mały ten obrazek), wydrukować w powiększeniu, pokratkować. Inaczej nie potrafiłem bezbłędnie spisać po kolei ciągów zer i jedynek. Przeliczenie tego z kodu binarnego i sprawdzenie w tablicy ASCII też zajęło dobrą chwilę. Już nie mówię o odpowiedzeniu na pytanie, bo odpowiedź też na pierwszy rzut oka nie wydaje się jednoznaczna. Ktoś na to odpowiedział w 57 sekund? Toż to ktoś musiał mieć komputer... w głowie. Stanowczo czas na emeryturę. Nie dla mnie to. :(

blapiter   2 #39 10.10.2010 11:57

Zadanie faktycznie ciekawe, ale moim zdaniem w samym pytaniu powinna być jakaś lepsza podpowiedź, czyli np:" Odpowiedzi szukajcie zagłębiając się w treść obrazka, przyda się powtórzyć ASCII :)". i w tedy wiadomo że odpowiedzi szukać gdzie indziej. Ja jestem informatykiem i za chiny nie przyszło by mi na myśl że chodzi o bity zapisane graficznie, tylko o litery zniekształcone pikselizacją :)

command-dos   18 #40 10.10.2010 12:12

byłem blisko - odpalony kalkulator, bin -> dec, ale dostałem ze 12 liczb dziesiętnych (a mają być 3), po czym zobaczyłem na posty pod artykułem i było powiedziane, że nie dla programistów, więc olałem temat kalkulatora i otwarłem gimpa, gdzie przy różnych przekształceniach obrazka rozbolał mnie łeb i co dalej? Wolałem pójść zrzucić węgiel ;)
@blapiter - "Ja jestem informatykiem i za chiny nie przyszło by mi na myśl że chodzi o bity zapisane graficznie, tylko o litery zniekształcone pikselizacją :)" - ja też i nawet wpadłem, że to bity - i co z tego? "Podpowiedź" @Ryan'a mnie zmyliła... Bo polonista nawet nie wie co to bit, a programista już tak... Ale cóż, gramy dalej :)

mandriva-not-user   2 #41 10.10.2010 12:12

Pytanie było TENDENCYJNE. Preferowało informatyków, kosztem zwykłych użytkowników komputerów :P:P:P

Ryan   15 #42 10.10.2010 12:25

@Lizard: Mniej więcej w ten sposób:
http://pl.wikipedia.org/wiki/Bramka_logiczna

Na krzemie masz bramki logiczne, które biorą jakieś bajty na wejście i przetwarzają na coś na wyjściu. Skoro pobrana z pamięci informacja jaką operację wykonać to bajt (jak każda inna informacja), to ten bajt rozłożony na bity pojawia się na wejściu układu. W układzie odpowiedni układ bramek steruje ALU tak, żeby uaktywniło się "dodawanie" albo "mnożenie" albo inna operacja i w ten sposób dwa inne bajty na wejściu (dane pobrane z pamięci) stają się czynnikami operacji arytmetycznej.

Pobieranie kodu z pamięci jest automatyczne, to znaczy procesor robi to cały czas. Efekt wykonania tego kodu może jedynie poinformować procesor, że następną operację należy pobrać z kompletnie nowej komórki pamięci (bo domyślnie procesor czyta bajt po bajcie, kolejno).

Ogólnie procesor to jedynie układ logiczny przetwarzający liczby na wejściu w liczby na wyjściu. Część z tych liczb traktuje jako instrukcje do wykonania, część jako dane. Bardzo proste w teorii działanie, stosunkowo złożona rzecz w praktyce. ;)

@adam9870: Winternals mówią o bebechach Windy a nie działaniu kompa czy sposobie interpretacji ciągu znaków. To co powyżej nie pochodzi z żadnej konkretnej książki. To raczej taka powszechnie dostępna wiedza, która nie wymaga konkretnej pozycji na półce. :) Co do Winternals jeszcze - nie za bardzo jest sens ją czytać, jeśli nie administruje się Windą na dosyć zaawansowanym poziomie, ani nie pisze pod Windę kodu. Chyba, że ktoś najzwyczajniej w świecie lubi wiedzieć albo lubi czytać. :]

@blapiter: To są wszystko słuszne uwagi i przy kolejnych zadaniach będą uwzględnione, zapewniam. :)

MantisGhost   4 #43 10.10.2010 12:50

Ja także podałem CES bo mi się z intelowskim QR Code skojarzyło.

SinTom   8 #44 10.10.2010 12:54

@command-dos
"po czym zobaczyłem na posty pod artykułem i było powiedziane, że nie dla programistów"

I tak właśnie również porzuciłem pomysł z bitami i zająłem się obróbką graficzną. Kombinowałem nawet czy niema żadnych metadanych zapisanych, czy w rozmiarze obrazka niema ukrytego sensu. Teraz przy kolejnym zadaniu będę gotowy na wszystko.

Hilarion   5 #45 10.10.2010 13:12

Ja też jestem informatykiem i też na tym poległem. Niestety w branży, w której obecnie siedzę, stykam się stale z kodami kreskowymi. Ostatnio siedziałem trochę w dwuwymiarowych i również z tym właśnie skojarzył mi się obrazek z zadania. Spędziłem parę godzin na próbach dopasowania jakiegoś kodu 2D do obrazka i próbach zdekodowania go. W końcu poddałem się i po prostu strzelałem (oczywiście błędnie).
Oczywiście jak zobaczyłem dzisiaj wyjaśnienie, to wszystko wydało się proste i oczywiste (tzn. sposób zdekodowania obrazka - nie jestem na tyle obeznany z technologiami by z pamięci odpowiedzieć na zakodowane pytanie).

command-dos   18 #46 10.10.2010 14:07

#Hilarion - z pamięci mogę napisać, że ASCII #32 to spacja, #49 w górę to bodajże 1-9, #13 to enter, a esc to #27 - na co mi ta wiedza? ;)

przemor25   14 #47 10.10.2010 14:34

Ludzie. Jakie programistyczne zadanie? Przekształcania z kodu binarnego na dziesiętny to jest już w liceum na informatyce. Problemem było "wpaść" na to że tak trzeba to odczytać :)

luqass   13 #48 10.10.2010 14:49

@przemor25 zależy od tego, kiedy chodziłeś do tego liceum, i co robiłeś po nim- bo poprostu zapominasz ;]. Ja jeszcze przed 6 laty tego nie miałem, a poźniej mojego drogi z TYM też się nie skrzyżowały...

fenikstomek   4 #49 10.10.2010 16:55

Ja nie jestem informatykiem i w dużej części mogę powiedzieć że było to piekielnie trudne pytanie :)
Może następne dla nie informatyków ale hobbystów informatyków :)

dsp32bit   6 #50 10.10.2010 17:13

a ja sie meczylem z kodami UTF-16 bo stwierdzilem ze kodowania ascii juz nikt nie uzywa XD Natomiast chcialbym polemizowac z autorem na temat gloryfikacji jednej lini procesorow jaka jest x86. Jako ze obecnie robie projekt pod arm cortex-a9 zauwazylem bardzo przyjemne kodowanie w assemblerze (w przeciwienstwie do koszmarnego assemblera x86). Risc/ARM wygrywaja poborem pradu, szybszym czasem wdrozenia latwiej optymalizowac kompilator i dobra wydajnoscia przynajmniej w ukladach wbudowanych. Intel wygrywa tylko dzieki lepszemu procesowi technologicznemu w fabrykach a roznice w wydajnosciach obecnych "CISC"(AMD/INTEL) i "RISC"(Power IBM/Sparc SUN) sa obecnie kosmetyczne. Pozatym ciezko architerure x86 obecnie nazwac CISC jak w srodku siedzi uklad tlumaczacy rozkazy na bardziej riscowe. Ja tam uwazam ze teraz uklad nie ma znaczenia jak caly software jest wysokopoziomowy bo czas wdrozenia najwazniejszy.

B_S_E   3 #51 10.10.2010 17:33

Pytanie faworyzujące "informatyków" bo ja po ekonomii z tak beznadziejnie sformułowanym pytaniem mogłem szukać odpowiedzi jak przysłowiowej ”igły w stogu siana".

Lizard   5 #52 10.10.2010 18:55

Ja nie jestem informatykiem, a odpowiedziałem na to pytanie już po 15 minutach :)

foreste   15 #53 10.10.2010 19:06

Lol na tym się rozwaliłem bo nie wiedziałem jak to odczytać ;E i jedyne zadanie co mam failed xD
gdzie można nauczyć tego odszyfrowania ?

matrix012345   4 #54 10.10.2010 19:47

@dsp32bit W UTF-8, ANSII, i wszystkich kodowaniach Windows oraz ISO wyjdzie to samo

Ryan   15 #55 10.10.2010 23:47

@dsp32bit: Ja nie mam nic przeciwko RISCom czy ARMom w szczególności. :) Jedynie uważam, że nazywanie jakichkolwiek procesorów dzisiaj RISCami jest stosunkowo zabawne.

Cechy charakterystyczne RISCów to jednolita lista instrukcji, zunifikowane rejestry i proste tryby adresowania. No i taki np. ARM wprowadza zestaw instrukcji Thumb, który obok 32-bitowych instrukcji pozwala na przechowywanie instrukcji 16-bitowych w celu zaoszczędzenia pamięci i przepustowości. Do tego niektóre SKU mają zaawansowane operacje przeznaczone do przetwarzania danych.

W zasadzie jedyne co pozostało z RISCów to architektura load-store, a co za tym idzie proste tryby adresowania. Głównie to etykietowanie procesorów jako CISC lub RISC jest tym, co mnie śmieszy. :)

W ASM to już od lat mało kto koduje i tego typu skillset oczekiwany jest od garstki ludzi. Jeśli nie piszesz high performance kodu (np. kodeka video) to nawet na urządzeniach z układami wbudowanymi nie ma sensu używać czegoś innego niż C/C++. Po co się męczyć? Trzeba mieć sporo dobrego humoru i gigantyczne ego żeby wierzyć, że się z palca zoptymalizuje złożony kod lepiej niż kompilator. :)

Chyba, że to platforma Sony i kompilator utrzymywany przez SN-Systems. Wtedy to co innego. ;>

Istnienie micro-opsów zapoczątkowane podajże przez K6 jest całkowicie bez znaczenia. Procesor i jego klasyfikację definiuje zewnętrzny interfejs a nie to, co w środku. Równie dobrze mogłyby tam być konie albo krasnoludki. ;]

Radius01   3 #56 12.10.2010 23:22

Wszystko dobrze i jasno wyjaśnione odnośnie rozwiązania tego zadania. A przypomnienie początków historii na pewno się przyda dla wszystkich.