1 / 41

Architektura systemów komputerowych (jesień 2013)

Architektura systemów komputerowych (jesień 2013). Wykład 4 Reprezentacja danych część 4. dr inż. Wojciech Bieniecki Instytut Matematyki i Informatyki http://wbieniec.kis.p.lodz.pl/pwsz. Kolejność bajtów w słowach.

navid
Download Presentation

Architektura systemów komputerowych (jesień 2013)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Architektura systemów komputerowych(jesień 2013) Wykład 4 Reprezentacja danych część 4 dr inż. Wojciech Bieniecki Instytut Matematyki i Informatyki http://wbieniec.kis.p.lodz.pl/pwsz

  2. Kolejność bajtów w słowach W sytuacjach, kiedy liczby, znaki lub inne dane zapisywane są przy użyciu wielu bajtów, nie istnieje jeden unikatowy sposób uporządkowania tych bajtów w pamięci. Musi być użyta jedna z wielu konwencji ustalająca kolejność bajtów (byte order lub endianness). Analogia do zapisu pozycyjnego liczb lub kierunku pisma w różnych językach – ze strony lewej na prawą albo z prawej na lewo. Ciekawostka: Użyte poniżej nazwy big endian i littleendian pochodzą z książki Jonathana Swifta Podróże Guliwera i odnoszą się do mieszkańców Liliputu, których spór o to, czy ugotowane jajko należy tłuc od grubego (tępego), czy od cienkiego (ostrego) końca, doprowadził do podziału na dwa stronnictwa toczące ze sobą niekończące się, choć bezsensowne dysputy i wojny.

  3. Kolejność bajtów w słowach Little endian (spotykane także cienkokońcowość) to forma zapisu danych, w której mniej znaczący bajt (zwany też dolnym bajtem, low-orderbyte, LSB) umieszczony jest jako pierwszy. Procesor zapisujący 32-bitowe wartości w pamięci, przykładowo 4A 3B 2C 1D pod adresem 100, umieszcza dane zajmując adresy od 100 do 103 w następującej kolejności: Procesory, które używają formy littleendian, to między innymi wszystkie z rodziny x86, DEC VAX

  4. Kolejność bajtów w słowach Big endian(spotykane także grubokońcowość) to forma zapisu danych, w której najbardziej znaczący bajt (zwany też grubym bajtem, z ang. high-order byte) umieszczony jest jako pierwszy. Procesor zapisujący 32-bitowe wartości w pamięci, przykładowo 4A 3B 2C 1D pod adresem 100, umieszcza dane, zajmując adresy od 100 do 103 w następującej kolejności: Procesory, które używają formy big endian, to między innymi SPARC, Motorola 68000, PowerPC 970, IBM System/360, Siemens SIMATIC S7. Istnieją także procesory, w których można przełączyć tryb kolejności bajtów, należą do nich na przykład PowerPC (do serii PowerPC G4), SPARC, ARM, MIPS

  5. Kolejność bajtów w słowach - odwracanie X = aaaaaaaa bbbbbbbb cccccccc dddddddd m1= 11111111 00000000 00000000 00000000 m2= 00000000 11111111 00000000 00000000 m3= 00000000 00000000 11111111 00000000 m4= 00000000 00000000 00000000 11111111 W1 = (X & m1)>>24 = 00000000 00000000 00000000 aaaaaaaa W2 = (X & m2)>>8 = 00000000 00000000 bbbbbbbb 00000000 W3 = (X & m3)<<8 = 00000000 cccccccc 00000000 00000000 W4 = (X & m3)<<24 = dddddddd 00000000 00000000 00000000 intreverseEndian(int x) { return (x&0xff000000)>>24 | (x&0x00ff0000)>> 8 | (x&0x0000ff00)<< 8 | (x&0x000000ff)<<24; }

  6. Kod ASCII ASCII (American Standard Code for InformationInterchange) Opracowany dla urządzeń dalekopisowych, później przyjęty dla komputerów 7-bitowy kod przyporządkowujący liczby z zakresu 0-127 literom (alfabetu angielskiego), cyfrom, znakom przestankowym i innym symbolom oraz poleceniom sterującym litery, cyfry oraz inne znaki drukowane tworzą zbiór znaków ASCII - jest to 95 znaków o kodach 32-126 pozostałe 33 kody (0-31 i 127) to tzw. kody sterujące służące do sterowania urządzeniem odbierającym komunikat, np. drukarką czy terminalem

  7. Kody ASCII

  8. Tablica bitowa kodów ASCII

  9. Kod ASCII – znaki sterujące 33 kody – 0-31 i 127 znaki niedrukowalne: sygnały dźwiękowe, białe znaki (tabulacja, spacja, znak końca wiersza, powrót na początek wiersza)

  10. Kod ASCII – zakończenie wiersza W systemie DOS/ Windows każdy wiersz pliku zakończony jest parą znaków: CR, kod ASCII - 13(10) = 0D(16) - powrót na początek wiersza LF, kod ASCII - 10(10) = 0A(16) - przesunięcie o wiersz w systemie Linux znakiem końca wiersza jest tylko: LF, kod ASCII - 10(10) = 0A(16) podczas przesyłania pliku tekstowego z systemu Linux do systemu DOS/Windows pojedynczy znak LF zamieniany jest automatycznie na parę znaków CR i LF błędne przesłanie pliku tekstowego (w trybie binarnym) powoduje nieprawidłowe jego wyświetlanie

  11. Kod ASCII – znak końca wiersza DOS / Windows (32B): UNIX / Linux (30B): Mac OS (30B):

  12. Podstawowe funkcje znakowe isdigit– czy znak jest cyfrą? isalnum – czy znak jest literą? isspace– czy znak jest odstępem? ispunct– czy znak jest znakiem przestankowym? isprint– czy znak jest znakiem drukowanym isgraph – czy znak jest symbolem graficznym? toupper – zamiana małych liter na duże tolower – zamiana dużych liter na małe

  13. isdigit 0110000 0 0110001 1 0110010 2 0110011 3 0110100 4 0110101 5 0110110 6 0110111 7 0111000 8 0111001 9 int isdigit(char c) { return (c>=48 && c<=58); }

  14. isalnum int isupper(char c) { return (c>='A' && c<='Z'); } int islower(char c) { return (c>='a' && c<='z') } int isalpha(char c) { return ((c>='A' && c<='Z') || (c>='a' && c<='z')); }

  15. toupper, tolower char toupper(char c) { if ( (c >= 'a') && (c <= 'z') ) c = c - ('a' - 'A'); return c; } char tolower(char c) { if ( (c >= 'A') && (c <= 'Z') ) c = c + ('a' - 'A'); return c; }

  16. Rozszerzony od ASCII Kod ASCII w wersji podstawowej jest 7-bitowy Większość komputerów pracuje na 8-bitowych bajtach Dodatkowy bit jest wykorzystywany do powiększenia zbioru kodowanych znaków Powstało wiele ro żnych rozszerzeń ASCII wykorzystują cych o smy bit, nazywanych stronami kodowymi (np. norma ISO 8859, rozszerzenia firm IBM lub Microsoft)

  17. Kod ASCII – strony kodowe Strony kodowe – wersje kodu ASCII różniące się interpretacją symboli o numerach od 128 do 255. RÓżne strony kodowe mogą przyjąć odmienne znaki dla tego samego kodu Różne strony kodowe mogą różnić się wyborem znaków Duża liczba dostępnych stron kodowych wynika z faktu, że na 8 bitach można zakodować tylko 256 rożnych znaków, co jest niewystarczające do zmieszczenia w jednym zestawie znaków wszystkich alfabetów Przykłady stron kodowych uwzględniające polskie litery: ISO 8859-2 (Latin-2), ISO 8859-16 (Latin-10)

  18. ISO 8859 Zestaw standardów służących do kodowania znaków za pomocą 8 bitów Standardy te zostały utworzone przez European Computer Manufactures’ Association (ECMA) w połowie lat osiemdziesiątych, a następnie uznane przez ISO Wszystkie zestawy ISO 8859 mają znaki 0-127 takie same jak ASCII Pozycjom 128-159 przypisane są dodatkowe kody sterujące, tzw. C1 (faktycznie są nieużywane).

  19. Standardy ISO 8859 ISO 8859-1 (Latin-1) - alfabet łaciński dla Europy zachodniej ISO 8859-2 (Latin-2) – alfabet łaciński dla Europy środkowej i wschodniej, również odpowiednia Polska Norma ISO 8859-3 (Latin-3) – alfabet łaciński dla Europy południowej ISO 8859-4 (Latin-4) – alfabet łaciński dla Europy północnej ISO 8859-5 (Cyrlic) – alfabet dla cyrylicy ISO 8859-6 (Arabic) - dla alfabetu arabskiego ISO 8859-7 (Greek) - dla alfabetu greckiego ISO 8859-8 (Hebrew) - dla alfabetu hebrajskiego ISO 8859-9 (Latin-5) ISO 8859-10 (Latin-6) ISO 8859-11 (Thai) - dla alfabetu tajskiego ISO 8859-13 (Latin-7) ISO 8859-14 (Latin-8) ISO 8859-15 (Latin-9) - z ISO 8859-1 usunięto kilka rzadko używanych znaków i wprowadzono znak Euro oraz litery Š, š , Ž, ž, OE , oe oraz Ÿ ISO 8859-16 (Latin-10) – alfabet łaciński dla Europy środkowej - zmodyfikowany ISO 8859-2 ze znakiem Euro i dodatkowymi literami dla kilku języków.

  20. Kod ISO 8859-1 kodowanie używane w Amerykach, Europie Zachodniej, Oceanii i większej części Afryki dostępne języki: albański, angielski, baskijski, duński, estoński, fiński, francuski, hiszpański, irlandzki, islandzki, kataloński, łaciński, niderlandzki, niemiecki, norweski, portugalski, retoromański, szkocki, szwedzki, włoski składa się ze 191 znaków łacińskiego pisma po rozszerzeniu o dodatkowe przypisania znaków jest podstawą dla dwóch mapowań znaków ISO-8859-1 i Windows-1252

  21. Kod ISO 8859-2 dostępne języki: bośniacki, chorwacki, czeski, węgierski, polski, rumuński, serbski, słowacki, słoweński, górno- i dolnołużycki możliwość przedstawienia znaków w języku niemieckim i angielskim składa się ze 191 znaków łacińskiego pisma zapisywanych na 8-bitach kody z przedziałów 00(16)-1F(16) oraz 7F(16)-9F(16) nie są używane w ISO-8859-2 kodowanie to jest zgodne z Polską Normą

  22. ISO 8859-1 i 8859-2 – porównanie

  23. Windows 1250 Standard kodowania używana przez system Microsoft Windows do reprezentacji tekstów w językach środkowoeuropejskich używających alfabetu łacińskiego, takich jak albański, chorwacki, czeski, polski, rumuński, słowacki, węgierski jest podobny do ISO 8859-2 – posiada wszystkie jego drukowalne znaki (a także kilka dodatkowych), lecz kilka z nich zajmuje inne miejsca

  24. Windows 1250 i ISO 8859-2 NZ - znak niezdefiniowany w kodowaniu ZK znak kontrolny, Znakznak wspólny dla obydwu kodowań.

  25. Kodowanie polskich znaków Tekst przykładowy: Ą Ć Ę Ł Ń Ó Ś Ź Ż ą ć ę ł ń ó ś ź ż Tekst zapisany w standardzie ISO – 8859-2 Tekst zapisany w standardzie CP-1250 ISO-8859-2 wyświetlony w edytorze obsługującym CP-1250 ˇ Ć Ę Ł Ń Ó ¦ ¬ Ż ± ć ę ł ń ó ¶ Ľ ż CP-1250 wyświetlony w edytorze obsługującym ISO-8859-2 Ľ Ć Ę Ł Ń Ó Œ  Ż š ć ę ł ń ó œ Ÿ ż

  26. Standardy kodowania polskich znaków W Polsce stosowanych było ok. 20 standardów kodowania polskich liter Próby wprowadzania standardu Mazovia - promowany przez społeczność informatyczną w Polsce (nie był pełną stroną kodową , ale określał sposób kodowania polskich liter) IBM-Latin-2 (CP-852) - stosowany w DOS, OS/2 i części systemu Windows CP-1250 (Windows-1250) – stosowany w MS Windows PL ISO-Latin-2 (ISO 8859-2) - stosowany w Internecie Standard ISO 8859-2 jest zgodny z Polską Normą PN-93 T-42118

  27. Unicode Komputerowy zestaw znaków mający w zamierzeniu obejmować wszystkie pisma i inne znaki (symbole muzyczne, techniczne, wymowy) używane na świecie Unicode przypisuje unikalny numer każdemu znakowi, niezależnie od używanej platformy, programu czy języka Definiowany jest przez dwa standardy, w których znaki są identyczne: Unicode i ISO/IEC 10646 Standard Unicode zaimplementowany został w wielu nowych technologiach, np. XML, Java, Microsoft .NET Framework, nowe systemy operacyjne

  28. Unicode Rozwijany jest przez konsorcjum, w skład którego wchodzą firmy komputerowe, producenci oprogramowania oraz grupy użytkowników - http://www.unicode.org Strona polska: http://www.unikod.pl Pierwsza wersja: Unicode 1.0 (październik 1991) Ostatnia wersja: Unicode 6.1.0 (styczeń 2012)

  29. Podstawowe właściwości Unicode Jednoznaczność – każdemu znakowi zakodowanemu za pomocą Unicode odpowiada zawsze ta sama wartość liczbowa i odwrotnie. Uniwersalność – dostępne znaki obejmują wszystkie powszechnie używane języki i symbole. 16-bitowa reprezentacja – każdy znak reprezentowany jest w postaci 16-bitowej liczby, czyli można zakodować 216=65536 różnych znaków Efektywność – ułatwienie manipulowania tekstami, gdyż identyfikacja znaku nie zależy od sekwencji sterujących czy znaków następujących bądź poprzedzających

  30. UTF-8 – kodowanie znaków Unicode UnicodeTransformation Format. Jest to przykład kodu bajtowego Mapowanie znaków Unikodu na ciągi bajtów: 0x00 do 0x7F - 0xxxxxxx 0x80 do 0x7FF - 110xxxxx 10xxxxxx 0x800 do 0xFFFF - 1110xxxx 10xxxxxx 10xxxxxx 0x10000 do 0x1FFFFF - 11110xxx 10xxxxxx 10xxxxxx10xxxxxx 0x200000 do 0x3FFFFFF - 111110xx 10xxxxxx 10xxxxxx10xxxxxx10xxxxxx 0x4000000 do 0x7FFFFFFF - 1111110x 10xxxxxx 10xxxxxx10xxxxxx10xxxxxx10xxxxxx Dla pierwszych znaków z przedziału ASCII od 0 do 127 (czyli dla npj.ang) znak jest mapowany jako jeden bajt. Dla znaków powyżej (np. polskie znaki) jest mapowany jako dwa bajty (lub więcej).

  31. UTF-8 - kodowanie oznacza to, że ten sam znak można zapisać na kilka sposobów. Przykładowo znak ASCII / (ukośnik) można zapisać jako: 00101111 11000000 10101111 11100000 10000000 10101111 Standard UTF-8 przewiduje, że każdy program MUSI odrzucać wszystkie znaki zapisane sekwencjami dłuższymi niż minimalna.

  32. UTF-8 Zalety Każdy tekst w ASCII jest tekstem w UTF-8. Żaden znak spoza ASCII nie zawiera bajtu z ASCII. Zachowuje porządek sortowania UCS-4. Typowy tekst ISO-Latin-X rozrasta się w bardzo niewielkim stopniu po przekonwertowaniu do UTF-8. Nie zawiera bajtów 0xFF i 0xFE, więc łatwo można go odróżnić od tekstu UTF-16. Znaki o kodzie różnym od 0 nie zawierają bajtu 0, co pozwala stosować UTF-8 w ciągach zakończonych zerem. O każdym bajcie wiadomo, czy jest początkiem znaku, czy też leży w jego środku (co nie jest prawdą np. w kodowaniu EUC). Nie ma problemów z littleendian i big endian. Jest domyślnym kodowaniem w XML (również w jego aplikacjach: XHTML, SVG, XSL, CML, MathML)

  33. UTF-8 – Wady Znaki CJK (chiński-japoński-koreański) zajmują po 3 bajty zamiast 2 w kodowaniach narodowych. Znaki alfabetów niełacińskich zajmują po 2 bajty zamiast jednego w kodowaniach narodowych. UTF-8 nie używa przesunięć zasięgów, co stanowi dodatkowe utrudnienie dla implementacji UTF-8 • Problemu tego można byłoby uniknąć, przy okazji skracając nieznacznie długość danych, jeśli wykorzystano by zasadę przesunięć typu: • sekwencje 1-bajtowe kodują 0x80 różnych znaków - od 0x00 do 0x7F • sekwencje 2-bajtowe kodują 0x800 różnych znaków - od 0x80 do 0x87F • sekwencje 3-bajtowe kodują 0x10000 różnych znaków - od 0x880 do 0x1087F • itd.

  34. UTF-16 Sposób ten wymaga użycia szesnastobitowych słów Dla znaków na pozycjach poniżej 65536 (przedział 0000-FFFF) używane jest jedno słowo, którego wartość odpowiada pozycji znaku w standardzie. Dla znaków z wyższych pozycji używa się dwóch słów. Pierwsze z nich należy do przedziału D800–DBFF, drugie: DC00-DFFF. Znak o kodzie szesnastkowym 10000 zostanie zamieniony na sekwencję D800 DC00 a znak o kodzie 10FFFD (górna granica unikodu) na DBFF DFFD. W standardzie Unicode pozycjom z przedziału D800–DFFF nie są przypisane żadne znaki, zatem każda sekwencja słów kodowych jest interpretowana jednoznacznie.

  35. UTF-32 wymaga użycia trzydziestodwubitowych słów. Zestaw znaków jest też zdefiniowany w standardzie ISO 10646 jako UCS-4 Kody obejmują zakres od 0 do 0x7FFFFFFF. Kod znaku zawsze ma długość 4 bajtów i w zapisie big endian przedstawia po prostu numer znaku w tabeli Unikodu. ZALETA Stała długość kodu każdego znaku WADA Mała efektywność- zakodowane ciągi znaków są dwa do czterech razy dłuższe niż ciągi tych samych znaków zapisanych w innych kodowaniach. ZASTOSOWANIE tylko w RAM w celu ułatwienia obsługi i przetwarzania (np. obliczenie długości czy wycinanie ciągu znaków jest bardzo proste)

  36. Kod EBCDIC (ang. ExtendedBinaryCodedDecimalInterchangeCode, czyli rozszerzony dziesiętny zakodowany dwójkowo kod wymiany) to ośmiobitowe kodowanie znaków używane głównie w systemach IBM. Pojedynczy znak zapisywany jest na 8 bitach podzielonych na dwie części. Pierwsze 4 bity, nazywane strefą, oznaczają grupę do jakiej dany znak należy, podczas gdy ostatnie 4 bity, zwane cyfrą, identyfikują konkretny znak.

  37. Kod Radix-50 Kod ten jest nazywany Rad-50 lub RAD50, zaprojektowany przez Digital Equipment Corporation dla komputerów DECsystem, PDP, i VAX. • Kod ten ma pozwala zapisać 40 różnych znaków (ósemkowo 50), w tym spacja, 26 liter, znak dolara, kropka, cyfry w dwóch wariantach: • 3 znaki na słowie 16 bitowym. • 6 znaków wraz z flagą informacyjną na słowie 36 bitowym.

  38. Kod Radix-50 Łańcuchy tekstowe są kodowane na kolejnych słowach. Pierwszy znak w obrębie słowa zajmuje najstarszą pozycję. Przykład: Zakodować napis ABCDEF używając PDP-11. Wartości znaków to 1,2,3,4,5,6. Będą one zakodowane jako słowa: (1*40 + 2) * 40 + 3 = 1683 (4*40 + 5) * 40 + 6 = 6606 Każdy łańcuch jest uzupełniany spacjami na końcu do wielokrotności trzech znaków.

  39. Kod Radix-50 Istnieje wiele odmian kodowania Rad-50. Np. w systemie operacyjnym RT-11 wartość 011101 jest określona jako niezdefiniowana natomiast programy użytkowe przypisywały jej reprezentację * Użycie Rad-50 wymusiło konwencję zapisu nazw plików w systemie PDP-11. Nazwa pliku składa się z 6 znaków nazwy właściwej i trzech znaków rozszerzenia. Cały łańcuch można było zapisać na trzech słowach (kropki rozdzielającej nie trzeba pamiętać) Rad-50 był często stosowany w tablicach symboli dla różnych języków programowania dla PDP-11.

  40. Kod Base64 Base64 służy do kodowania ciągu bajtów za pomocą ciągu znaków Przypisuje 64 wybranym znakom wartości od 0 do 63. Ciąg bajtów poddawany kodowaniu dzielony jest na grupy po 3 bajty. Każdą taką grupę dzieli się następnie na 4 jednostki 6-bitowe. Istnieją więc dokładnie 64 możliwe wartości każdej takiej jednostki Jeśli rozmiar wejściowego ciągu bajtów nie jest wielokrotnością liczby 3, to stosowane jest dopełnianie

  41. Kod Base64 Rodzaj kodowania transportowego  • Wykorzystywane m.in. do: • przesyłania załączników binarnych w poczcie elektronicznej, • pamiętania ViewState w stronach WWW tworzonych przy użyciu technologii ASP.NET, • kodowania haseł wysyłanych w protokole SMTP podczas uwierzytelniania metodami PLAIN i LOGIN. Przykład:  Idealysa jak gwiazdy - nie mozna ich osiagnac, ale mozna sie nimi kierowac. SWRlYWx5IHNhIGphayBnd2lhemR5IC0gbmllIG1vem5hIGljaCBvc2lhZ25hYywgYWxlIG1vem5hIHNpZSBuaW1pIGtpZXJvd2FjLg0K

More Related