Wpis z mikrobloga

#naukaprogramowania #assembler
Lekcja 1.
Temat: Ogólnie z czego składa się komputer.
Do szczegółów jak komponenty naszego komputera ze sobą oddziałują jeszcze wrócimy.
Najprostszy komputer to maszyna Turinga. Bardzo długa taśma i głowica, która na podstawie
danych na tej taśmie zmienia zawartość owej taśmy.
Brzmi bardzo nie realnie? I tu się mylicie. Komputer na którym właśnie czytacie ten wpis też ma
bardzo długą taśmę i głowice co się nie po niej porusza i ją ciągle zmienia.
Taśmą jest pamięć RAM a głowicą procesor. I tak oto mamy najprostszy komputer.
Dodajmy mu jednak jeszcze jedną rzecz, jakiś układ wejścia wyjścia by mógł się z nami komunikować:
pobierać dane, wypisywać wyniki i pozwalać na wprowadzenie programu.
Jeszcze przed zbudowaniem pierwszego komputera niejaki Von Neumann zaproponował, że dobrze by było
jak by pamięć kodu i danych była w jednym miejscu.
To rozwiązanie które króluje w komputerach ogólnego przeznaczenia, PC-tach laptopach smartfonach, smart TV itd...
Daje nam to bardzo dużą elastyczność, możemy napisać prosty kod mielący duże dane albo duży kod który operuje
jednak na małych ilościach danych. To rozwiązanie nie jest jednak pozbawione wad. Procesor jest bardzo głupi
i o tym czy właśnie wczytał dane czy program decyduje kontekst.
Aby Ci to uzmysłowić pokażę Ci jeden bajt z pamięci, dla uproszczenia przyjmijmy że jest to intel x86
0x61H
Co on oznacza?


Jak pewnie widzicie zbudowanie procesora który jeszcze miał by "myśleć" czy akurat mówimy o danych czy o kodzie może trudne.
Inne podejście prezentuje architektura harwardzka. Tam to na cześć oddajemy bardzo wczesnej konstrukcji zbudowanej właśnie na Uniwersytecie
Harvarda. Komputer ten miał zupełnie różną pamięć danych, która była na lampach a pamięcią kodu zbudowanej na przekaźnikach.
Szerokość danych w obu pamięciach również była inna. Ta organizacja ma sporo zalet:
-Można równolegle pobierać dane i kod z 2 odrębnych pamięci.
-Większe bezpieczeństwo niż w Architekturze Von Neumanna


Pewno jesteś ciekaw czemu Harvardzka jest bezpieczniejsza. Chodzi o to że w trakcie wykonywania programu pamięć w której jest przechowywany
jest tylko do odczytu co skutecznie uniemożliwia ataki na przepełnianie buforów oraz inne wykorzystujące że dane wprowadzone przez użytkownika mogą być potraktowane jako kod do wykoanania.
Architektura harwardzka jest stosowana wszędzie tam gdzie elastyczność pamięci nie jest konieczna. Zazwyczaj z takim podejściem spotkamy się w mikrokontrolerach.
Na tym chciał bym skończyć pierwszą lekcję
to co powinieneś pamiętać to to że komputer składa się z 3 rzeczy:
Procesora
Pamięci (osobnej dla kodu i danych lub wspólnej)
Wejścia/wyjścia

Proszę o wasze oceny plusy itd, mam nadzieję wrzucać dość regularnie. Nie będę tworzyć osobnego tagu, no chyba że poprosicie.
W następnej lekcji popatrzymy na podstawowe bloki procesora.
  • 14
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@wytrzzeszcz: Jak nie chcesz robić tagu to zrób listę. A z takich porad, to mógłbyś jakoś bardziej przejrzyście pisać, i nie chodzi mi tu o treść, ale o estetykę wpisu, zastosuj więcej wypunktowań, stosuj pogrubienia dla najważniejszych informacji, i zadbaj o wygląd ogólny, bo szczerze nie wygląda to zbyt ciekawie, w przeciwieństwie do treści, która jest ok.
  • Odpowiedz
@wytrzzeszcz: aj za daleko wybiegłeś, myślę że najpierw powinieneś dla osób nietechnicznych wytłumaczyć rejestry x86, oraz czym różni się MOV EAX,0 od XOR EAX, EAX dla rozgrzeffki ( ͡° ͜ʖ ͡°)
  • Odpowiedz
@wytrzzeszcz: Nie wtrącaj nic o czym jeszcze nie było, bo ludzie nie wiedzą przez to o co chodzi. Pomiń rzeczy, których nie rozumieją (skoro nie wiedzą co to assembler to skąd mają wiedzieć co to jest przepełnienie bufora). Wpisy będą dwa razy krótsze, ale przynajmniej nie będą pozostawiać wątpliwości. Ciekawe podejście to podstaw - ciężko tłumaczyć podstawy, niezła robota. Zasubskrybowałem.
  • Odpowiedz