Rozdział z książki "Rozbudowa i naprawa komputerów PC". © 1999 Wydawnictwo Helion

Rozdział 7.
Pamięć

Scott Mueller

W tym rozdziale zostanie omówiona pamięć, zarówno od strony budowy, jak i wykorzystania przez komputer. Na początku zdefiniujemy, czym jest pamięć, jakie zajmuje miejsce w architekturze komputerów PC oraz w jaki sposób działa. Omówimy różne typy, szybkości oraz obudowy układów pamięci, które możesz kupić i zainstalować w komputerze.

Zostanie również omówiona logiczna organizacja pamięci, zdefiniowane różne jej obszary oraz ich wykorzystanie z punktu widzenia systemu. Ponieważ logiczna organizacja pamięci i jej zastosowania znajdują się w "umyśle" procesora, jest ona, wraz z mapowaniem pamięci, jednym z najtrudniejszych do zrozumienia pojęć w świecie pecetów. Rozdział ten zawiera użyteczne informacje zdejmujące towarzyszącą pamięci zasłonę tajemniczości.

Podstawowe wiadomości o pamięci

Pamięć jest tymczasowym nośnikiem danych, muszą się w niej znajdować wszystkie programy i dane przetwarzane w danej chwili przez procesor komputera. Pamięć jest nośnikiem tymczasowym, ponieważ wszystkie dane i programy pozostaną w niej tylko do momentu wyłączenia lub zresetowania systemu. Dlatego właśnie przed zresetowaniem lub wyłączeniem komputera powinno się zapisać na trwalszy nośnik (najczęściej twardy dysk) wszystkie zmiany, by w przyszłości można je było odtworzyć.

Pamięć często określa się mianem RAM, co jest skrótem od Random Access Memory (pamięć o losowym dostępie). Nazywa się ją tak dlatego, iż można losowo (i szybko) uzyskać dostęp do każdej pozycji w pamięci. Gdy mówimy o pamięci komputera, najczęściej mamy na myśli systemową pamięć RAM, przechowującą uruchomione programy i dane przetwarzane przez procesor.

Skrótem RAM można określać zarówno same kości pamięci, jak i jej logiczną organizację oraz mapowanie w systemie. Pod pojęciami mapowania i logicznej organizacji pamięci kryje się sposób, w jaki są mapowane adresy pamięci w zainstalowanych układach oraz rozmieszczenie różnych typów informacji systemowych w określonych adresach.

Początkujący użytkownicy komputerów często mylą pamięć z pojemnościami dysków, ponieważ pojemność zarówno pamięci, jak i dysków wyraża się w megabajtach i gigabajtach. Najlepszą analogią wyjaśniającą zależności między pamięcią a dyskami, jaką znalazłem, jest porównanie ich do małego biura z biurkiem i kartoteką.

W tej popularnej analogii kartoteka reprezentuje twardy dysk, w którym zarówno programy, jak i dane są przechowywane przez dłuższy czas. Biurko przedstawia pamięć systemową, dzięki której pracująca przy biurku osoba (działająca jak procesor) ma bezpośredni dostęp do każdej położonej na nim teczki (pliku). Każda teczka, zanim rozpocznie się nad nią pracę, musi zostać przeniesiona z kartoteki na biurko. Jeśli biurko jest wystarczająco duże, można będzie otworzyć na nim w tym samym czasie wiele teczek; podobnie jest z komputerem – jeśli ma więcej pamięci, będzie można na nim uruchomić więcej lub większe programy.

Zwiększenie pojemności twardego dysku w komputerze jest tym samym, co zaopatrzenie biura w większą kartotekę – będzie można przechowywać przez dłuższy czas więcej plików (teczek). Zwiększenie pojemności pamięci jest podobne do wymienienia biurka na większe – będziesz mógł pracować w tym samym czasie z większą liczbą programów i danych.

Istnieje jednak poważna różnica pomiędzy pracą biura a tym, co w rzeczywistości dzieje się z danymi w komputerze – w przeciwieństwie do biura, dane umieszczane w pamięci komputera są tylko kopiami, podczas gdy oryginalne pliki nadal pozostają na twardym dysku. Zwróć uwagę, że z powodu tymczasowej natury pamięci, wszystkie zmienione pliki muszą być ponownie zachowane na dysku, zanim zostaną utracone w wyniku wyłączenia lub zrestartowania komputera. Jeśli nie zapiszesz zmian dokonanych na pliku pozostającym w pamięci, oryginalny plik na twardym dysku pozostanie niezmieniony. To jest tak, jakby w chwili zamknięcia biura wyrzucano wszystkie pozostałe na biurku teczki, podczas gdy oryginały nadal pozostają w kartotece.

Pamięć tymczasowo przechowuje uruchomione programy oraz wykorzystywane przez nie dane. Kości RAM czasem są również nazywane pamięcią ulotną, ponieważ gdy wyłączysz komputer lub gdy nastąpi przerwa w dostawie energii, wszystko, co przechowuje RAM, zostanie utracone, z wyjątkiem tego, co zostało zachowane na dysku. Z powodu ulotnej natury pamięci RAM, wielu użytkowników komputerów ma zwyczaj częstego zapisywania swojej pracy (niektóre programy potrafią robić to automatycznie w zdefiniowanych przez użytkownika odstępach czasu).

Uruchamiając program komputerowy, powodujesz przekopiowanie go do pamięci, w której pozostaje aż do zakończenia działania. Procesor wykonuje znajdujące się w RAM-ie instrukcje; w pamięci RAM przechowywane są również wyniki. Gdy korzystasz z edytora tekstu, dane o naciśniętych przez ciebie klawiszach przechowywane są w pamięci RAM, podobnie liczby wykorzystywane do obliczeń. Gdy wybierasz opcje zachowania danych, informujesz program, że chcesz zapisać zawartość RAM-u w postaci pliku na twardym dysku.

Z fizycznego punktu widzenia, RAM jest zbiorem układów lub modułów zawierających kości pamięci, które umieszcza się w gniazdach na płycie głównej. Te układy lub moduły różnią się od siebie zarówno zasilaniem, jak i wymiarami i aby poprawnie funkcjonowały, muszą być kompatybilne z systemem, w którym mają zostać zainstalowane. W tym rozdziale omówimy różne typy pamięci instalowane w komputerach.

Pamięć, zaraz po procesorze, może być jednym z najdroższych elementów nowoczesnego komputera PC, mimo iż w ciągu ostatnich lat znacznie spadły jej ceny. Nawet mimo spadku cen, nadal musisz wydać na pamięć do dwóch razy więcej niż na płytę główną. Zanim w połowie 1996 r. gwałtownie spadły ceny, pamięć przez wiele lat sprzedawano po stałej cenie około 160 zł za megabajt. 16 MB (w tym okresie typowa ilość pamięci w komputerze domowym) kosztowało ponad 2400 zł. Pamięć była wówczas droższa od swej wagi w złocie. Tak wysokie ceny przyciągały uwagę przestępców, co zaowocowało wieloma dużymi napadami z użyciem broni. Kradzieże te były w równym stopniu wywołane wysokimi cenami pamięci, jak i dużym na nie popytem oraz praktycznie rzecz ujmując, brakiem możliwości śledzenia skradzionych układów czy modułów. Po serii napadów z użyciem broni i innych kradzieżach, producenci układów pamięci zaczęli zatrudniać uzbrojoną ochronę i wprowadzili dodatkowe procedury bezpieczeństwa.

Pod koniec 1996 r. ceny pamięci ustabilizowały się na poziomie około 16 zł za megabajt; czyli na przestrzeni niecałego roku cena 1 MB pamięci spadła dziesięciokrotnie. Po początkowym gwałtownym załamaniu się, ceny pamięci nadal opadały i ostatnio wynoszą około 6 zł za MB lub około 400 zł za 64 MB, typową ilość pamięci w dzisiejszych komputerach domowych. W obecnie kupowanych komputerach instalujemy około czterech razy więcej pamięci niż w komputerach będących standardem kilka lat temu i wydajemy na nią około 1/6 tego, ile musielibyśmy zapłacić, zanim załamały się ceny.

Pamięć kosztuje co prawda znacznie mniej niż kilka lat temu, ale okres jej użyteczności uległ znacznemu skróceniu. Szybciej niż kiedykolwiek wcześniej ukazują się na rynku nowe układy pamięci i o wiele bardziej prawdopodobne jest, że w nowym komputerze będzie należało instalować inne kości niż w komputerze już posiadanym. Oznacza to, że jeśli naprawa lub zmodernizowanie komputera wymaga wymiany płyty głównej, może się okazać, że musisz wymienić również układy pamięci. Szansa na wykorzystanie w nowej płycie głównej zainstalowanych w posiadanym już komputerze pamięci jest znikoma. W przyszłości sytuacja prawdopodobnie nie ulegnie zmianie i płyta główna, którą kupisz za rok, będzie musiała być obsadzana innymi od stosowanych dzisiaj układami pamięci.

Z tego powodu ważnym jest, byś poznał wszystkie typy aktualnie sprzedawanych pamięci, dzięki czemu łatwiej będzie ci zdecydować, jakiego rodzaju pamięci wymaga dany komputer, z większą łatwością będziesz mógł również planować przyszłe modernizacje i naprawy.

Typy pamięci

Aby lepiej zrozumieć pamięć, należy poznać role, jakie spełniają jej różne typy w systemie. W nowoczesnych komputerach PC stosuje się przede wszystkim trzy typy pamięci:

  • ROM. Read Only Memory (Pamięć tylko do odczytu)

  • DRAM. Dynamic Random Access Memory (Dynamiczna pamięć o losowym dostępie)

  • SRAM. Static RAM (Statyczna pamięć RAM)

ROM

ROM jest typem pamięci, która może stale przechowywać dane. Pamięć ROM jest nazywana pamięcią tylko do odczytu, ponieważ zmiana zawartych w niej danych jest albo bardzo trudna, albo niemożliwa. ROM jest również nazywana pamięcią nieulotną, ponieważ wszystkie znajdujące się w niej dane nie ulegną wymazaniu nawet po wyłączeniu komputera. Z tego powodu ROM jest idealny do przechowywania instrukcji wykonywanych przy uruchamianiu się systemu.

Zauważ, że ROM i RAM, pomimo opinii niektórych ludzi, nie są swoimi przeciwieństwami. W rzeczywistości ROM stanowi część pamięci systemowej. Innymi słowy, część adresów pamięci RAM jest mapowana (czytaj: przypisana) na jeden lub więcej układów ROM. Bez tego komputer nie mógłby się uruchomić, ponieważ po włączeniu zasilania procesor nie miałby w pamięci żadnego programu, który mógłby wykonać.

>> Patrz "Proces uruchamiania komputera", str. 1238

Po uruchomieniu komputera PC, procesor automatycznie wykonuje skok do adresu FFFF0h, spodziewając się odnaleĽć pod tym adresem instrukcję, co ma robić dalej. Adres ten mieści się dokładnie 16 bajtów od końca pierwszego MB pamięci RAM i końca ROM. Gdyby był mapowany na zwykłe układy pamięci, wszystkie znajdujące się w nich dane zniknęłyby po wyłączeniu komputera i po ponownym jego włączeniu procesor nie byłby w stanie znaleĽć instrukcji informujących go, co ma zrobić dalej. Dzięki umieszczeniu pod tym adresem układów ROM, zapisany w nich program uruchamiania się komputera będzie dostępny przy każdym jego włączeniu.

Więcej informacji o dynamicznej pamięci RAM można znaleĽć w sekcji "DRAM".

Pamięć ROM rozpoczyna się zazwyczaj od znajdującego się 64 kB przed końcem pierwszego megabajta adresu F0000h. Ponieważ układy ROM mają zazwyczaj pojemność 64 kB, zawarte w nich programy zajmują całe ostatnie 64 kB pierwszego megabajta, łącznie z najważniejszym adresem FFFF0h, zawierającym instrukcję startu.

To, że komputery PC rozpoczynają wykonywanie instrukcji 16 bajtów przed końcem pamięci ROM, może wydawać się dziwne, ale zostało to zaprojektowane celowo. Wszystkie programatory ROM-ów umieszczają pod tym adresem instrukcję skoku (JMP), wskazującą aktualny adres początku ROM-u – najczęściej jest nim znajdujący się o około 64 kB wcześniej adres F0000h. To tak, jakby zdecydować się na czytanie każdej książki od 16 strony od końca i umówić się z wydawcami, by umieszczali na tej stronie instrukcję, o ile stron należy się cofnąć, by znaleĽć się na początku książki. Dzięki temu rozwiązaniu, Intel umożliwił stosowanie układów pamięci ROM o różnych rozmiarach.

BIOS komputera jest zapisany w układzie pamięci ROM znajdującym się na płycie głównej, ale oprócz niego istnieją również BIOS-y umieszczone na poszczególnych kartach rozszerzeń. W BIOS-ach kart rozszerzeń znajdują się pomocnicze procedury i sterowniki BIOS-u wymagane przez daną kartę; są one szczególnie potrzebne na przykład kartom graficznym, które muszą być aktywne już na wczesnym etapie uruchamiania się systemu. Karty, które nie muszą być aktywne podczas uruchamiania się komputera, zazwyczaj nie posiadają ROM-u, ponieważ ich sterowniki mogą być załadowane póĽniej z twardego dysku.

ROM płyty głównej w większości komputerów zawiera cztery główne programy, którymi są:

  • POST. Power-On Self Test. Seria procedur testujących sprawność poszczególnych komponentów komputera.

  • CMOS Setup. Program umożliwiający zmianę parametrów konfiguracji systemu, ustawienie zabezpieczeń oraz preferencji.

  • Bootstrap loader. Procedura szukająca możliwego do załadowania systemu operacyjnego najpierw na dyskietce w stacji dysków, a póĽniej na twardym dysku.

  • BIOS. Basic Input/Output System. Zbiór sterowników stanowiący standardowy interfejs podstawowych urządzeń komputera, szczególnie tych, które muszą być aktywne podczas uruchamiania się systemu.

Ponieważ BIOS stanowi większość kodu znajdującego się w ROM-ie, często określamy ROM nazwą ROM BIOS. W starszych komputerach PC, ROM BIOS płyty głównej mógł się składać nawet z pięciu lub sześciu układów, jednak już od wielu lat stosuje się tylko jeden układ. Więcej informacji o znajdującym się na płycie głównej ROM-ie możesz znaleĽć w rozdziale 4. "Płyty główne".

Pamięci ROM znajdują się również w kartach rozszerzeń, których sterowniki muszą być już aktywne podczas uruchamiania się systemu. Do takich kart należą karty graficzne, większość kart SCSI (Small Computer System Interface), karty kontrolerów EIDE (Enhanced IDE) oraz niektóre karty sieciowe. Znajdujące się w tych kartach układy ROM zawierają sterowniki i programy startowe, które podczas uruchamiania się systemu zostaną wywołane przez BIOS płyty głównej. Właśnie dzięki temu karta graficzna może zostać rozpoznana i zainicjowana, nawet jeśli w ROM BIOS-ie nie ma dedykowanych jej sterowników. Trudno byłoby wgrać sterowniki inicjujące kartę VGA z dysku, ponieważ do momentu inicjacji karty graficznej ekran monitora pozostawałby ciemny. Podczas uruchamiania się systemu, BIOS płyty głównej skanuje specjalny obszar pamięci RAM zajmowany przez ROM-y kart rozszerzeń (adresy C0000-DFFFFh) w poszukiwaniu oznaczającego początek ROM-u dwubajtowego podpisu 55AAh. ROM BIOS automatycznie uruchamia wszystkie odnalezione podczas skanowania ROM-y kart rozszerzeń. Proces ten widać w większości komputerów, gdy – podczas wykonywania procedur POST-u – inicjowany jest BIOS karty graficznej.

Układy ROM są z natury bardzo wolne, czas dostępu do nich wynosi zazwyczaj około 150 ns (więcej informacji na ten temat znajduje się w sekcji Częstotliwości pamięci, w dalszej części tego rozdziału), podczas gdy czas dostępu pamięci DRAM mieści się w granicach 60 ns. W związku z tym, w wielu systemach pamięci ROM są cieniowane (ROM shadowing). Cieniowanie polega na przekopiowaniu podczas uruchamiania się systemu pamięci ROM do RAM, co podczas póĽniejszej pracy komputera znacznie przyśpiesza dostęp do zawartych w niej informacji. Po zakończeniu kopiowania, procedura cieniowania przypisuje kopii adres oryginału. Dzięki temu komputer pracuje tak, jakby posiadał pamięć ROM o dostępie równie szybkim jak posiadana pamięć RAM, ponieważ od tego momentu pamięć ROM nie jest już wykorzystywana. Uzyskany za pomocą cieniowania wzrost wydajności jest jednak często nieznaczny, a w dodatku niepoprawnie skonfigurowane cieniowanie może być Ľródłem problemów. Dlatego zazwyczaj najlepiej jest cieniować tylko BIOS płyty głównej i, być może, karty graficznej, a wszystkie inne BIOS-y pozostawić bez zmian.

Przede wszystkim, cieniowanie jest użyteczne tylko, jeśli pracujesz z 16-bitowym systemem operacyjnym, jak na przykład z DOS-em czy Windows 3.x. Jeśli pracujesz w 32-bitowym środowisku, jak Windows 95, Windows 98 czy Windows NT, cieniowanie jest właściwie bezużyteczne, ponieważ te systemy operacyjne nie korzystają z 16-bitowego kodu zawartego w ROM-ach. Zamiast tego, wczytują do pamięci własne, 32-bitowe sterowniki, które zastępują wykorzystywany tylko przy uruchamianiu się komputera 16-bitowy kod ROM-u. Ustawienia cieniowania znajdują się w zawartym w pamięci CMOS programie konfiguracyjnym.

Istnieją cztery różne typy układów ROM:

  • ROM. Pamięć tylko do odczytu

  • PROM. Programowalny ROM

  • EPROM. Wymazywalny PROM

  • EEPROM. Elektrycznie wymazywalny PROM, nazywany również pamięcią flash lub flash ROM.

Bez względu na to, jakiego układu pamięci ROM użyjesz, zawarte w nim dane nie będą ulotne i pozostaną bez zmian, o ile celowo się ich nie usunie lub nie nadpisze.

W tabeli 7.1 zostały wypisane początki numerów identyfikacyjnych różnych typów pamięci ROM.

Tabela 7.1. Numery identyfikacyjne układów ROM
Typ układu ROM Numer Inne
ROM Nie są już wykorzystywane  
PROM 27nnnn  
EPROM 27nnnn Przezroczysta kwarcowa szybka
EEPROM 28xxxx lub  
  29xxxx  

Odwzorowywane pamięci ROM [Mask ROM]

Początkowo większość ROM-ów produkowano z naniesionymi lub zintegrowanymi w matrycy zerami i jedynkami. Matryca przedstawiała rzeczywisty krzemowy układ wraz z zapisanymi danymi. Układy te były nazywane odwzorowywanymi pamięciami ROM, ponieważ dane były formowane we wzór, z której tworzono matrycę ROM-u. Ten sposób produkcji jest ekonomiczny, jeśli tworzysz setki tysięcy ROM-ów zawierających dokładnie te same dane. Chcąc jednak zmienić choć jeden bit, trzeba było utworzyć nowy wzór, co pociągało za sobą duże koszty. Obecnie nikt już nie korzysta z odwzorowywanych pamięci ROM z powodu ich małej elastyczności i wysokich kosztów produkcji.

PROM

Pamięci PROM nie zawierają żadnych danych po wyprodukowaniu i zanim zacznie się z nich korzystać, muszą zostać zaprogramowane. PROM został wynaleziony w póĽnych latach 70. przez firmę Texas Instruments i jest produkowany w wielu pojemnościach, od 1 kB (8 kb) do 2 MB (16 Mb) i większych. Pojemność może zostać określona za pomocą czterech ostatnich cyfr numeru identyfikacyjnego, w którym pierwsze dwie cyfry (27) oznaczają PROM firmy TI, a cztery kolejne – pojemność układu w kb (kilobitach). Przykładowo, w większości wykorzystujących PROM-y komputerów PC umieszcza się układy 27512 lub 271000, czyli o pojemności 512 kb (64 kB) lub 1 Mb (128 kB).

W znajdującym się w moim samochodzie Pontiac Turbo Trans Am komputerze część systemu operacyjnego oraz wszystkie tabele danych, opisujące wyprzedzenie zapłonu [spark advance], dostarczanie paliwa [fuel delivery], a także inne parametry pracy pojazdu i silnika, umieszczono w 32-kilobitowym (4 kB) układzie PROM 2732. Systemy operacyjne wielu urządzeń ze zintegrowanymi komputerami przechowywane są w PROM-ach.

Choć wcześniej napisałem, iż pamięci PROM po wyprodukowaniu są puste, to z technicznego punktu widzenia są one zapełnione binarnymi jedynkami. Innymi słowy, wykorzystywany w nowoczesnych komputerach 1-megabitowy układ ROM posiada milion (dokładnie 1048576) pozycji zawierających binarną jedynkę. Pusty PROM może zostać zaprogramowany poprzez zapisanie na nim danych. Do zapisania danych wymagane jest zazwyczaj specjalne urządzenie, noszące nazwę programatora ROM (rysunek 7.1). Często mówi się o programowaniu ROM-ów jako o ich "wypalaniu", ponieważ jest to dość trafne technicznie określenie tego procesu. O każdej binarnej wartości jeden możesz myśleć jako o nienaruszonym bezpieczniku. Większość układów pracuje z napięciem zasilania wynoszącym 5 V. Podczas programowania, pod różne adresy układu zostaje skierowane napięcie dużo wyższe (najczęściej 12 V), które przepala znajdujące się tam bezpieczniki, przełączając logiczny stan jedynki na zero. Choć możemy zamienić 1 na 0, z pewnością zauważyłeś już, że proces ten jest nieodwracalny; czyli nie możemy zamienić 0 na 1. Programator analizuje program, który chcesz wprowadzić do układu, a następnie w wymaganych miejscach zamienia wartości 1 na 0. Układy PROM często są z tego powodu nazywane układami jednorazowego programowania OTP (One Time Programmable). Mogą one zostać zaprogramowane tylko raz i naniesionych zmian nie da się już usunąć. Większość PROM-ów jest niedroga, cena typowego, wykorzystywanego w płytach głównych PROM-u wynosi około 12 zł, więc jeśli chcesz zmienić znajdujący się w nim program, po prostu zastępujesz go nowym zaprogramowanym układem, a układ poprzedni wyrzucasz.

Programowanie pamięci PROM w zależności od pojemności układu i algorytmu wykorzystywanego przez programator trwa od kilku sekund do kilku minut. Na rysunku 7.1 został przedstawiony typowy, kilkugniazdowy programator układów PROM. Programatory tego typu nazywane są programatorami grupowymi (ang. gang-programmer), ponieważ mogą programować wiele układów jednocześnie, co jest szczególnie przydatne, gdy musisz umieścić ten sam program w wielu PROM-ach. Tańsze programatory mają tylko jedno gniazdo, co jest zupełnie wystarczające do większości domowych i serwisowych zastosowań.

Rysunek 7.1.

Typowy grupowy, posiadający kilka gniazd programator układów PROM

Osobiście korzystam (i zalecam to innym) z naprawdę niedrogiego programatora firmy Andromeda Research. Jest on nie tylko ekonomiczny, ale i można go podłączyć do portu równoległego komputera, dzięki czemu łatwo i szybko przesyła się pliki między nim a komputerem. Urządzenie to jest w dodatku zamknięte w łatwej do przenoszenia obudowie. Programator kontroluje się za pomocą okienkowego programu konfiguracyjnego, który należy zainstalować na komputerze, do którego jest podłączony. Program konfiguracyjny ma wiele użytecznych możliwości, łącznie z funkcjami umożliwiającymi zgranie znajdujących się w układzie PROM danych do pliku na twardym dysku, zaprogramowanie układu PROM danymi z pliku, porównanie zawartości układu z plikiem w komputerze oraz sprawdzenie przed rozpoczęciem programowania, czy umieszczony w programatorze układ jest pusty.

Za pomocą programatora PROM-ów przeprogramowałem nawet PROM w swoim samochodzie, zmieniając fabryczne ustawienia ograniczeń szybkości i obrotów silnika, turbosprężarki, kąta wyprzedzenia zapłonu, dostarczania paliwa i jeszcze wielu innych parametrów! Zamontowałem również przełącznik umożliwiający mi wybór jednego z czterech różnych układów podczas jazdy samochodem. Jeden z zaprogramowanych przeze mnie układów odcinał dopływ paliwa po przekroczeniu 36 mil na godzinę i wznawiał, gdy samochód zwalniał do 35. Taka modyfikacja mogłaby być szczególnie przydatna, gdybyś chciał na przykład ograniczyć prędkość, z jaką maksymalnie może jeĽdzić twoje nastoletnie dziecko. Inny stworzony przeze mnie ze względów bezpieczeństwa układ odcinał dopływ paliwa do silnika, gdy zasygnalizowałem, że samochód jest zaparkowany. Bez znaczenia, jak pomysłowy byłby złodziej, nie mógłby ukraść auta, chyba że wziąłby je na hol. Jeśli jesteś zainteresowany urządzeniem zmieniającym układy lub też samymi układami PROM do samochodów Turbo Trans Am lub Buick Grand National, skontaktuj się z firmą Casper’s Electronics. Gdy zainstalowałem układ Superchips w samochodzie Ford Explorer, natychmiast zauważyłem olbrzymią różnicę w pracy silnika i wydajności pojazdu.

EPROM

Pamięci EPROM są popularną odmianą pamięci PROM. Nie są one niczym innym jak pamięciami PROM, ale z możliwością wymazania zaprogramowanych danych. Układ EPROM można bardzo łatwo rozpoznać, ponieważ w obudowie bezpośrednio nad matrycą znajduje się przezroczysta kwarcowa szybka, przez którą możesz zobaczyć matrycę. Pamięci EPROM mają taki sam jak PROM-y prefiks numerów identyfikacyjnych (27xxxx) i nie licząc kwarcowej szybki, są fizycznie oraz funkcjonalnie takie same.

Dzięki znajdującej w obudowie układu szybce, do matrycy może się dostać promieniowanie ultrafioletowe, którym są wymazywane układy EPROM. Szybka jest wykonana z kwarcu, ponieważ zwykłe szkło blokuje promieniowanie UV. Nie można się opalić przez szybę! Konieczność zastosowania kwarcowej szybki spowodowała, że układy EPROM są droższe od układów PROM. Jeśli jednak możliwość wymazywania nie ma dla ciebie znaczenia, nie musisz ich kupować.

Promieniowanie UV wywołuje reakcję chemiczną, w której ponownie stapiają się ze sobą znajdujące się w układzie bezpieczniki, dzięki czemu zostają wymazane wszystkie znajdujące się w nim dane. W wywołanej przez promieniowanie UV reakcji wszystkie binarne zera znów stają się jedynkami i układ zostaje przywrócony do stanu sprzed programowania. Aby zaszła reakcja chemiczna, promieniowanie UV musi mieć określoną długość (2537 angstremów), odpowiednią intensywność (12000 uw/cm2), a także musi działać z niewielkiej odległości (2–3 cm) przez około 5 do 15 minut. W urządzeniu do szybkiego wymazywania EPROM-ów (patrz rysunek 7.2) Ľródło promieniowania UV (najczęściej specjalna żarówka) znajduje się nad uszczelnioną szufladką, w której umieszczasz jeden lub więcej układów EPROM.

Rysunek 7.2.

Profesjonalne urządzenie do wymazywania EPROM-ów

Na rysunku 7.2 zostało przedstawione profesjonalne urządzenie do wymazywania EPROM-ów, które jednorazowo może wymazywać do 50 układów. Ja korzystam ze znacznie mniejszego i tańszego urządzenia firmy Walling Co. o nazwie DataRase. Urządzenie to wymazuje jednorazowo do czterech układów i jest ekonomiczne, jak również przenośne.

Kwarcowa szybka znajdująca się w obudowach układów EPROM jest zazwyczaj zabezpieczona za pomocą taśmy przed przypadkowym wystawieniem na promieniowanie ultrafioletowe. Promieniowanie UV występuje nie tylko w świetle słonecznym, ale i nawet w zwykłym oświetleniu pokojowym, w związku z czym dane zawarte w układzie wystawionym na bezpośrednie światło szybko mogłyby ulec uszkodzeniu. Dlatego dobrym nawykiem jest zabezpieczanie za pomocą naklejki zaprogramowanych układów.

EEPROM/Flash ROM

EEPROM jest nowszym typem ROM-u, jego nazwa jest skrótem od "Elektrycznie wymazywalny PROM" (ang. Electrically Erasable PROM). Układy te są również nazywane pamięcią Flash lub po prostu Flash ROM; ich najważniejszą cechą jest możliwość wymazania i ponownego zaprogramowania bez żadnych dodatkowych urządzeń. Dzięki pamięciom Flash stało się możliwe wymazanie i przeprogramowanie ROM-u komputera PC bez wyjmowania układu z podstawki na płycie głównej, a nawet bez zdejmowania obudowy! Gdy korzystasz z pamięci Flash, do jej ponownego zaprogramowania nie potrzebujesz ani programatora, ani urządzenia wymazującego. Pamięci Flash są wykorzystywane nie tylko we wszystkich właściwie płytach głównych wyprodukowanych po 1994 roku, ale i w większości zbudowanych od tego czasu samochodach. Na przykład mój Chevy Impala SS z 1994 r. posiada PCM (Powertrain Control Module) ze zintegrowaną pamięcią Flash.

Pamięci EEPROM można zidentyfikować po numerze identyfikacyjnym, który jest zgodny ze wzorem 28xxxx lub 29xxxx, oraz po braku kwarcowej szybki w obudowie. Jeśli w twoim komputerze zastosowano pamięci Flash, będziesz mógł łatwo uaktualnić ROM płyty głównej bez konieczności wymiany posiadanych układów. Zazwyczaj po prostu zgrywasz ze strony WWW producenta uaktualniony ROM i uruchamiasz dołączony program, który zastępuje stare dane nowymi. Procedura ta została bardziej szczegółowo opisana w rozdziale czwartym.

>> Patrz "Instalacja w komputerze nowszej wersji ROM BIOS", str. 479 i 485

Częste sprawdzanie, czy na stronie WWW producenta płyty głównej nie pojawił się uaktualniony BIOS, jest bardzo dobrym nawykiem. Uaktualniony BIOS może już nie zawierać błędów oraz posiadać niedostępne wcześniej możliwości. Na przykład w nowym BIOS-ie może się znajdować poprawka niwelująca ewentualny problem roku 2000 oraz nowe sterowniki umożliwiające uruchomienie komputera ze 120-megabajtowej stacji dysków LS-120.

>> Patrz "Napędy Floptical LS-120 (120MB)", str. 817

Obecnie w wielu zintegrowanych z różnymi urządzeniami komputerach stosuje się pamięci flash. Być może już w najbliższej przyszłości będziesz poszukiwał uaktualnionego ROM-u do, na przykład, swojego tostera! W rozdziale czwartym został dokładnie opisany sposób poszukiwania i uaktualniania pamięci flash ROM płyt głównych komputerów PC. Inne urządzenia również mogą posiadać pamięci flash – ostatnio na przykład uaktualniłem ROM swojego modemu ISDN Motoroli oraz cyfrowej kamery Kodaka. Uaktualnienie pamięci flash było bardzo łatwe do przeprowadzenia (wystarczyło zgrać uaktualniony ROM ze strony WWW producenta i uruchomić dołączony do niego program), a wyeliminowało wiele różnych dziwactw obu urządzeń. Pamięci flash wykorzystuje się również do zwiększania możliwości sprzętu znajdującego się już na rynku oraz do przystosowywania go do najnowszych standardów. Przykładem może tu być uaktualnienie standardu komunikowania się modemu z X2 lub Kflex do V.90.

Jeśli masz samochód z wbudowanym komputerem, również możesz zaktualizować znajdujący się w nim BIOS, o ile tylko producent samochodu zaprojektował uaktualnioną wersję. Uaktualnienie ROM-u jest obecnie tak łatwe i tanie, iż często się zdarza, że producenci samochodów udostępniają nową wersję ROM-u, która zawiera poprawki usprawniające pracę samochodu lub po prostu usuwające problemy wynikające z poprzedniej wersji ROM-u. Nowe ROM-y są zazwyczaj dostępne u dealera danego samochodu, jego więc musisz zapytać, czy producent zaprojektował uaktualnioną wersję. Jeśli posiadasz samochód GM, firma ta ma swoją stronę WWW, na której umieszcza informacje o nowych wersjach BIOS-u dostępnych dla ich samochodów. Strona ta znajduje się pod poniższym adresem:

http://207.74.147.14/vci

Gdy wprowadzisz swój VIN (numer identyfikacyjny pojazdu), na stronie ukaże się historia kalibracji samochodu, która jest listą wszystkich uaktualnień ROM-u (kalibracji) zaprojektowanych od chwili powstania pojazdu. Gdy na przykład wprowadziłem numer identyfikacyjny mojego Impala z 1994 r., okazało się, że od momentu powstania samochodu producent zaprojektował już pięć kalibracji pamięci Flash, a w moim samochodzie znajdowała się tylko druga wersja. Oznaczało to, że powstały już trzy wersje nowsze od tej, którą wtedy posiadałem! Uzbrojony w tę informację udałem się do dealera, który podłączył do mojego samochodu swój komputer diagnostyczny i zaprogramował PCM nowym oprogramowaniem, co w moim przypadku poprawiło wiele mniejszych i większych niedociągnięć, łącznie z występującą w pewnych okolicznościach nierówną pracą silnika.

Zastosowanie w samochodzie pamięci Flash dało mi możliwość eksperymentowania z kalibracjami przeznaczonymi do innych samochodów, dzięki czemu w pamięci Flash mojego samochodu znajduje się obecnie zmodyfikowany ROM przeznaczony do samochodu Camaro. W zaprojektowanej dla Camaro kalibracji ustawiono znacznie bardziej agresywne parametry krzywej wyprzedzenia zapłonu oraz dostarczania paliwa, jak również zmian biegów i wielu innych cech. Jeśli jesteś zainteresowany posiadaniem innego programu w pamięci Flash twojego samochodu, skontaktuj się z firmą Wright Automotive lub Evergreen Performance.

DRAM

W nowoczesnych komputerach najczęściej wykorzystuje się dynamiczne pamięci RAM. Największą przewagą DRAM nad innymi pamięciami jest jej duża gęstość, dzięki której w jednym niewielkim układzie można umieścić znacznie więcej bitów, oraz bardzo niska cena, umożliwiająca produkcję układów pamięci o dużej pojemności.

Komórki pamięci DRAM są niewielkimi kondensatorami przechowującymi ładunki oznaczające bity. Problemem jest tu dynamiczność DRAM – pamięci te muszą być stale odświeżane, ponieważ przy braku odświeżania zanikłyby przechowywane w poszczególnych komórkach ładunki elektryczne, co spowodowałoby utratę zgromadzonych w nich danych. Odświeżanie następuje, gdy systemowy kontroler pamięci zarządza małą przerwę, podczas której odczytuje wszystkie dane zawarte w poszczególnych komórkach. Kontroler pamięci (zazwyczaj wbudowany w chipset płyty głównej) jest w większości systemów ustawiony zgodnie z wynoszącym 15ms (mikrosekund) fabrycznym standardem częstotliwości odświeżania. Dostęp do pamięci jest zorganizowany w taki sposób, że po dokładnie 128 cyklach zostaną odczytane wszystkie wiersze pamięci. Czyli inaczej mówiąc, odświeżenie danych następuje po każdych 1,92 ms (milisekundy lub 128*15ms).

>> Patrz "Chipsety", str. 345

Niestety, odświeżanie pamięci zabiera procesorowi wiele cykli. W starszych komputerach cykle odświeżania mogły zająć nawet 10 lub więcej procent czasu procesora. Na szczęście, w obecnie produkowanych systemach, w których procesory pracują z częstotliwościami rzędu setek megaherców, odświeżanie zajmuje najczęściej nie więcej niż 1% czasu procesora. W BIOS-ach niektórych komputerów masz możliwość zwiększenia czasu pomiędzy kolejnymi odświeżeniami pamięci, co przyśpiesza działanie komputera, ale i zarazem może prowadzić do losowego występowania tzw. miękkich błędów pamięci. Miękki błąd jest błędem danych, który nie został spowodowany przez uszkodzony układ pamięci. Dlatego lepiej zazwyczaj pozostać przy zalecanych lub standardowych ustawieniach odświeżania pamięci. Tym bardziej zresztą, że w nowoczesnych komputerach odświeżanie zabiera tylko około 1% całkowitej wydajności systemu, czyli siłą rzeczy, zwiększanie czasu odświeżania będzie miało bardzo niewielki wpływ na osiągi komputera.

W pamięciach DRAM bit jest tylko jedną parą tranzystora i kondensatora, dzięki czemu pamięci te mają bardzo dużą gęstość. Dzięki takiemu rozwiązaniu, można produkować układy DRAM o pojemności większej, niż było to możliwe z innymi układami pamięci. Istnieją już układy DRAM o pojemności ponad 256 Mb. Kości o tej pojemności zawierają co najmniej 256 milionów tranzystorów! W porównaniu z tym, nieszczególnie wypadają nawet procesory Pentium II, które przecież posiadają ich tylko 7,5 miliona. Różnica polega na tym, iż pary tranzystorów i kondensatorów w pamięciach są ułożone w prosty (zazwyczaj kwadratowy), powtarzający się układ, podczas gdy struktury znajdujące się w procesorze są nie tylko znacznie bardziej różnorodne i skomplikowane, ale i w równie skomplikowany sposób ze sobą połączone. Co najmniej jeden z producentów pracuje obecnie nad pamięciami wykonywanymi w technologii 0,05 mikrona, o gęstości 256 gigabitów, które mają trafić do seryjnej produkcji około roku 2001–2002. Oznacza to, iż pojemności pamięci nadal będą rosły w tempie równym temu, w jakim wzrastały do dzisiaj.

Pamięci DRAM wykorzystuje się w komputerach PC z powodu ich niskiej ceny oraz możliwości gęstego upakowania kości, dzięki czemu na niedużej przestrzeni można zgromadzić dużą pojemność pamięci. Niestety, układy DRAM są również wolne, zazwyczaj dużo wolniejsze od procesora. Z tego powodu powstało wiele różnych architektur pamięci DRAM, zaprojektowanych z myślą o poprawie wydajności.

Szybkość pamięci

Szybkość i wydajność pamięci jest dość mylącym zagadnieniem, ponieważ najczęściej wyraża się ją w ns (nanosekundach), podczas gdy szybkość (częstotliwość pracy) procesora jest wyrażana w megahercach.

Nanosekunda jest jedną miliardową częścią sekundy – to naprawdę bardzo niewiele. By ujrzeć to we właściwej perspektywie, wystarczy uzmysłowić sobie, iż światło przemieszczające się w próżni, którego szybkość poruszania się wynosi 299792 km na sekundę, w czasie jednej nanosekundy przemieści się tylko o 29,98 cm, czyli o mniej niż długość przeciętnej linijki!

Szybkość (częstotliwość) pracy systemu i układów wyrażana jest w megahercach (MHz), czyli milionach cykli na sekundę. Już obecnie można się spotkać z procesorami pracującymi z częstotliwościami rzędu 500 MHz; procesory pracujące z częstotliwościami gigaherców (GHz lub miliardów cykli na sekundę) pojawią się na rynku w ciągu najbliższych kilku lat.

Ponieważ mówienie o szybkości w różnych jednostkach jest dość mylące, pomyślałem, iż porównanie ich może być bardzo interesujące. W tabeli 7.2 zostały pokazane zależności pomiędzy nanosekundami (ns) a megahercami (MHz).

Jak wynika z tabeli, w miarę zwiększania się częstotliwości pracy zegara maleje czas cyklu pamięci. Jeśli dokładniej przyjrzysz się tabeli, z całą pewnością zauważysz, iż szybkość pamięci DRAM zupełnie nie przystaje do szybkości obecnych procesorów, pracujących z częstotliwościami nawet powyżej 400 MHz. Jeszcze do niedawna większość wykorzystywanych w komputerach PC pamięci DRAM miała czas dostępu rzędu 60 ns, co odpowiada wartości około 16,7 MHz! Różnica pomiędzy wydajnością pamięci a procesora jest szczególnie widoczna, gdy tak wolne pamięci są instalowane w komputerze, którego procesor pracuje z częstotliwością 300 lub więcej megaherców.

Taktowanie pamięci jest jednak rzeczą bardziej skomplikowaną od prostego przeliczania nanosekund na megaherce. Ponieważ tranzystory bitów pamięci pracują najbardziej efektywnie, gdy są ułożone w siatkę, dostęp do każdego z nich odbywa się za pomocą schematu wiersza i kolumny. Przed każdym odczytaniem lub zapisaniem danych, należy podać adres wiersza i kolumny komórki pamięci, która ma zostać odczytana lub w której mają się znaleĽć dane. Początkowy etap transferu danych z pamięci i do niej, w którym wybiera się adresy wierszy i kolumn, przyjęło się nazywać opóĽnieniem (latency). Czas dostępu do pamięci jest sumą czasu cyklu oraz opóĽnienia. Na przykład pamięć o dostępie 60 ns ma zazwyczaj opóĽnienie rzędu 25 ns, a czas cyklu wynoszący około 35 ns. W związku z tym, rzeczywista częstotliwość taktowania 60-nanosekundowej pamięci wynosi 28,5 MHz (35 ns = 28,5 MHz). Jednak nawet wtedy każdy transfer pamięci będzie nadal wymagał pełnych 60 ns i z powodu dodawanego opóĽnienia częstotliwość kolejnych transferów będzie wynosić tylko 16,7 MHz (60 ns).

Tabela 7.2. Zależności pomiędzy częstotliwościami zegara w megahercach (MHz) a czasem cykli w nanosekundach (ns)
Częstotliwość zegara Czas cyklu Częstotliwość zegara Czas cyklu
6 MHz166 ns 120 MHz8,3 ns
8 MHz125 ns 133 MHz7,5 ns
10 MHz100 ns 150 MHz6,6 ns
12 MHz83 ns 166 MHz6,0 ns
16 MHz62 ns 180 MHz5,5 ns
20 MHz50 ns 200 MHz5,0 ns
25 MHz40 ns 233 MHz4,2 ns
33 MHz30 ns 250 MHz4,0 ns
40 MHz25 ns 300 MHz3,3 ns
50 MHz20 ns 333 MHz3,0 ns
60 MHz16 ns 350 MHz2,8 ns
66 MHz15 ns 400 MHz2,5 ns
75 MHz13 ns 450 MHz2,2 ns
80 MHz12 ns 500 MHz2,0 ns
100 MHz10 ns 550 MHz1,8 ns

Co następuje, gdy pracujący z częstotliwością 300 MHz procesor usiłuje odczytać wiele bajtów danych z 16-megahercowej pamięci? OdpowiedĽ łatwo przewidzieć – mnóstwo cykli oczekiwania (ang. wait states). Cykl oczekiwania jest dodatkowym cyklem, w którym procesor nie wypełnia żadnej instrukcji, a który musi wykonać podczas oczekiwania na dane. Jeśli każdy cykl pamięci trwa 60 ns (16 MHz), a cykl procesora – 3 ns (300 MHz), procesor czekając na dane będzie musiał wykonać około 19 cykli oczekiwania! Dodawanie w ten sposób cykli oczekiwania dość skutecznie zwalnia szybkość przetwarzania do szybkości pamięci, czyli w tym wypadku 16 MHz. Z tego powodu powstało wiele szybszych pamięci systemowych i podręcznych, mających zredukować liczbę cykli oczekiwania. W tym rozdziale zostanie omówiona każda z nich.

FPM (Fast Page Mode) DRAM

Dostęp do standardowych pamięci DRAM odbywa się poprzez stronicowanie (ang. paging). Zwykłe odczyty i zapisy danych w pamięci wymagają wybrania wiersza i kolumny, co zabiera trochę czasu. Stronicowanie polega na udostępnianiu komórek z tego samego wiersza, dzięki czemu należy zmieniać tylko adres kolumny. Wykorzystująca ten sposób dostępu pamięć jest nazywana PM (Page Mode) lub FPM (Fast Page Mode). Istnieją również inne wersje pamięci FPM, nazywane pamięcią SC (Static Column) lub pamięcią NM (Nibble Mode).

Stronicowanie jest prostym sposobem zwiększenia wydajności pamięci, poprzez podzielenie jej na strony mające długość od 512 bajtów do kilku kilobajtów. Dostęp do wszystkich komórek wewnątrz strony jest dzięki mechanizmom stronicowania szybszy o wiele cykli oczekiwania. Jeśli docelowa komórka pamięci znajduje się poza aktualnie wybraną stroną, procesor musi odczekać kilka dodatkowych cykli, aż do chwili gdy system wybierze nową stronę.

W miarę upływu czasu wymyślano coraz to nowe sposoby uzyskiwania szybszego dostępu do pamięci DRAM. Jedną z najbardziej znaczących zmian była implementacja w procesorach 486 i póĽniejszych seryjnego trybu dostępu (ang. burst mode). W seryjnym taktowaniu pamięci wykorzystano fakt, iż kolejne dostępy do niej dotyczą najczęściej komórek położonych blisko siebie. Dzięki wykorzystaniu trybu seryjnego, po ustaleniu wiersza i kolumny komórki pamięci, można bez żadnych dodatkowych cykli oczekiwania czy opóĽnień uzyskać dostęp do komórek sąsiednich. Dostęp seryjny jest zazwyczaj ograniczony do czterech kolejnych odczytów/zapisów. Dlatego taktowanie opisuje się często liczbami cykli potrzebnymi na uzyskanie kolejnych dostępów. Typowe taktowanie pamięci DRAM w trybie seryjnym jest zazwyczaj wyrażane w postaci x-y-y-y, gdzie x jest czasem pierwszego dostępu (sumy opóĽnienia i czasu cyklu), a y liczbą cykli potrzebnych do uzyskania każdego z kolejnych dostępów.

Standardowe, 60-nanosekundowe pamięci DRAM są w trybie seryjnym taktowane zgodnie ze schematem 5-3-3-3. Oznacza to, że uzyskanie pierwszego dostępu do pamięci zajmie w sumie pięć cykli (przy 66-megahercowej magistrali systemowej czas uzyskania pierwszego dostępu wyniesie około 75 ns lub inaczej pięciu cykli po 15 ns), a każdy kolejny dostęp serii zajmie po trzy cykle (3 × 15 ns = 45 ns). Jak widać, uzyskane czasy dostępu do pamięci są niższe, niż wynikałoby to z samej specyfikacji pamięci. Zwróć jednak uwagę, że bez wykorzystania trybu seryjnego dostęp do pamięci odbywałby się zgodnie ze schematem 5-5-5-5, ponieważ przy przeprowadzaniu każdego transferu do i z pamięci występowałoby pełne opóĽnienie. Układy DRAM obsługujące stronicowanie i dostęp seryjny są nazywane pamięcią FPM (Fast Page Mode). Nazwa ta wynika z tego, że w trybie seryjnym dostępy do znajdujących się na tej samej stronie pamięci danych są uzyskiwane z mniejszym opóĽnieniem. W większości komputerów 486 i nowszych wykorzystano układy FPM; w starszych komputerach stosowano standardowe pamięci DRAM.

Innym sposobem na przyśpieszenie pamięci FPM jest przeplatanie (ang. interleaving). W trybie dostępu przeplatanego, dwa osobne banki pamięci są odczytywane naprzemiennie. Gdy w jednym z banków trwa odczyt lub zapis danych, w drugim wybiera się w tym samym czasie wiersz i kolumnę komórki. Dzięki temu, gdy pierwszy bank kończy przekazywanie danych, drugi zakończył już okres opóĽnienia i jest gotowy do kolejnego transferu. W czasie gdy w drugim banku trwa przesyłanie danych, w pierwszym banku wybierany jest wiersz i kolumna komórki pamięci, od której rozpocznie się kolejny dostęp. Jedynym problemem jest to, że aby skorzystać z dostępu przeplatanego, musisz obsadzić dokładnie takimi samymi kośćmi dwa banki na płycie głównej. Było to bardzo popularne rozwiązanie w systemach z 32-bitową pamięcią i procesorami 486, ale szybko straciło uznanie po ukazaniu się komputerów z procesorami Pentium, które posiadały pamięci 64-bitowe. By móc skorzystać z techniki przeplatania w komputerach Pentium, musiałbyś zainstalować jednocześnie 128 bitów pamięci, czyli albo cztery 72-końcówkowe pamięci SIMM, albo dwa moduły DIMM.

EDO RAM

W 1995r pojawił się nowy typ pamięci dla systemów z procesorami Pentium, nazwany EDO (Extended Data Out) RAM. Pamięć EDO to zmodyfikowana pamięć FPM i z tego powodu bywa nazywana również pamięcią HPM (Hyper Page Mode). Pamięć EDO została wynaleziona i opatentowana przez firmę Micron Technology, która udzieliła licencji na jej produkcję wielu innym producentom. EDO składa się ze specjalnie wyprodukowanych układów, które pozwalają na zazębianie się taktowań pomiędzy udanymi dostępami. Skrót EDO odnosi się przede wszystkim do tego, iż w przeciwieństwie do pamięci FPM, sterowniki wyjścia danych na układzie nie są wyłączane, gdy kontroler pamięci usuwa adres kolumny w celu rozpoczęcia kolejnego cyklu. Dzięki temu kolejny cykl może nastąpić zaraz za poprzednim, co umożliwia zaoszczędzenie na każdym cyklu około 10 ns.

Ponieważ układy EDO umożliwiają kontrolerowi pamięci rozpoczęcie instrukcji adresowania nowej kolumny jeszcze podczas odczytywania danych pod aktualnych adresem, czasy cykli uległy znacznemu skróceniu. Rozwiązanie to jest bardzo podobne do przeplatania banków w starszych systemach, ale w przeciwieństwie do przeplatania, by z niego skorzystać, nie musisz posiadać dwóch identycznie obsadzonych banków pamięci.

EDO RAM w trybie seryjnym umożliwia zastosowanie taktowania zgodnego ze schematem 5-2-2-2, czyli lepszym od osiąganego przez układy FPM schematu 5-3-3-3. Oznacza to, że pamięci EDO w ciągu 11 cykli systemowych mogą wykonać cztery transfery danych, natomiast pamięci FPM do tego samego zadania potrzebują 14 cykli. Choć czas potrzebny na wykonanie transferów został zmniejszony o 22%, pamięci EDO zazwyczaj zwiększają ogólną wydajność systemu o około 5%. Nawet jeśli uzyskany wzrost wydajności wydaje się niewielki, warto zauważyć, iż pamięci EDO bazują na tym samym podstawowym układzie DRAM co pamięci FPM, a to oznacza, że koszt ich produkcji praktycznie nie różni się od kosztu produkcji układów FPM. Dzięki temu układy EDO kosztują niemal tyle samo co układy FPM, a oferują wyższą wydajność.

Pamięci EDO mogą zostać wykorzystane tylko pod warunkiem, że obsługuje je chipset płyty głównej. Większość chipsetów powstałych od roku 1995, kiedy na rynku ukazał się chipset 430FX (Triton), obsługuje układy EDO. Dzięki porównywalnym z pamięciami FPM kosztom wytwarzania oraz obsługiwaniu przez chipsety Intela, rynek bardzo szybko całkowicie przerzucił się na kości EDO.

>> Patrz "Chipsety piątej generacji (P5)", str. 349

>> Patrz "Chipsety szóstej generacji (klasy Pentium Pro/Pentium II)", str. 363

Układy EDO są idealnym rozwiązaniem dla systemów z magistralą pracującą do 66 MHz, co do roku 1997 w zupełności zaspokajało potrzeby rynku. Jednak w 1998 r. na rynku pojawiły się nowsze i szybsze pamięci SDRAM (Synchronous DRAM), które wkrótce stały się nowym standardem pamięci komputerów PC.

Burst EDO

Jedną z odmian pamięci EDO są układy BEDO DRAM (Burst Extended-Data-Out Dynamic Random Access Memory), których specjalny tryb seryjny umożliwia uzyskanie jeszcze szybszych transferów pamięci. Niestety, obsługiwał je tylko jeden chipset (Intel 440FX Natoma) i zostały szybko wyparte przez układy SDRAM, faworyzowane przez projektantów chipsetów i systemów PC. Pamięci BEDO nie są już produkowane i nie spotyka się ich w obecnie sprzedawanych komputerach.

SDRAM

SDRAM jest skrótem od Synchronous DRAM, czyli pamięci, która działa synchronicznie z magistralą. SDRAM przekazuje informacje za pomocą bardzo szybkiego potoku, wykorzystując szybki, taktowany interfejs. Dzięki zastosowaniu pamięci SDRAM znacząco zmniejsza się opóĽnienie, ponieważ układy te są już zsynchronizowane z częstotliwością pracy płyty głównej.

Zanim będziesz mógł zainstalować układy SDRAM w komputerze, podobnie jak pamięci EDO, muszą być one obsługiwane przez chipset płyty głównej. Od początku 1997 r. wszystkie chipsety Intela, wraz z chipsetami 430VX i 430TX, w pełni obsługują SDRAM, co czyni te układy najpopularniejszymi pamięciami na rynku nowych komputerów. Pamięci SDRAM są przede wszystkim dostosowane do architektury procesorów Pentium II oraz nowych płyt głównych, na których można te procesory umieszczać.

Osiągana przez SDRAM wydajność jest o wiele większa od wydajności pamięci FPM i EDO. Ponieważ SDRAM jest jedną z odmian DRAM, początkowe opóĽnienie jest takie samo, ale za to całkowite czasy cykli są znacznie krótsze od wcześniejszych pamięci FPM i EDO. Taktowanie SDRAM podczas dostępu seryjnego jest zgodne ze schematem 5-1-1-1; czyli 4 transfery pamięci zakończą się już po 8 cyklach. Pamięci EDO potrzebowały na wykonanie tej samej operacji 11 cykli, a pamięci FPM aż 14.

SDRAM poza możliwością pracy ze znacznie krótszymi cyklami obsługuje również 100-megahercowe (10-nanosekundowe) i szybsze magistrale, które w 1998 roku stały się nowym standardem częstotliwości pracy magistral systemowych. Dzięki temu, w praktycznie wszystkich sprzedanych w 1998 r. komputerach wykorzystano właśnie te pamięci i bardzo prawdopodobne jest, iż układy te utrzymają się na rynku jeszcze do końca roku 2000.

Prawdopodobnie w niedalekiej przyszłości pamięci SDRAM będą mogły pracować na nawet 200-megahercowych i szybszych magistralach. SDRAM są sprzedawane w formie DIMM, a ich szybkość często określa się nie w nanosekundach, lecz w megahercach. Z tego powodu możesz natknąć się na takie same pamięci sprzedawane jako 66 MHz lub 15 ns, 83 MHz lub 12 ns czy też 100 MHz lub 10 ns. Z powodu bardzo szybkich taktowań pamięci podczas pracy z częstotliwością 100 MHz, Intel stworzył standard PC/100, w którym zdefiniował wymagania, jakie muszą spełnić układy pamięci, by pozostawały stabilne przy częstotliwości taktowania wynoszącej 100 MHz. Większość pamięci z certyfikatem PC/100 ma w celu zachowania odpowiedniego marginesu błędu czas dostępu 8 ns, czyli może pracować z częstotliwością 125 MHz. Jednak nawet jeśli układy te mogą pracować z takimi częstotliwościami, oficjalnie posiadają wyłącznie certyfikat PC/100. Choć 10-nanosekundowe pamięci również mogłyby działać z częstotliwością 100 MHz, Intel stwierdził, że z powodu zbyt małego marginesu błędu mogłyby nie być stabilne.

Pomimo iż SDRAM jest znacząco szybszy od poprzednich typów pamięci, nie jest od nich dużo droższy, dzięki czemu jeszcze szybciej wzrosła jego popularność.

>> Patrz "Fizyczna pamięć komputera", str. 396

 

Przyszłe technologie pamięci DRAM

RDRAM

RDRAM, nazywany również Rambus DRAM, jest pamięcią opartą na zupełnie nowych rozwiązaniach, która początkowo, w latach 1999–2000, ma się znaleĽć tylko w komputerach o największej mocy. RDRAM jest wspierany przez Intel i będzie bezpośrednio obsługiwany przez wszystkie jego chipsety.

RDRAM, dzięki podwojeniu znajdującej się w układzie magistrali danych do 16 bitów i zwiększeniu częstotliwości pracy do 800 MHz, przyśpiesza przepustowość samej pamięci, umożliwiając uzyskanie szczytowo przepustowości rzędu 1,6 GB/s. Rambus wprowadził również uaktualnienia w protokole magistrali, dzięki czemu dane nie muszą być mutlipleksowane. Zamiast tego utworzono niezależną kontrolę, a magistralę adresową podzielono na dwie grupy końcówek, osobno na polecenia kolumn i osobno na polecenia wierszy. Dane w tych końcówkach przesyłane są za pośrednictwem 2-bitowych magistral. Synchronizację osiąga się dzięki wysyłaniu pakietów na opadającej krawędzi sygnału zegara.

Architektura RDRAM-u obsługuje wielokrotne, jednocześnie przeplatane transakcje. Wewnętrznie, 64-bitowe urządzenie korzysta z w sumie 128-bitowej ścieżki danych, która pracuje z częstotliwością 100 MHz, i umożliwia wykonywanie 16-bajtowych transferów z rdzenia i do niego co 10 ms. Ponieważ układy RDRAM posiadają cztery tryby oszczędzania energii i automatycznie przełączają się w tryb uśpienia po zakończeniu transakcji, pobierają nieco mniej energii od układów SDRAM i mniej więcej tyle samo, co pamięci EDO zaprojektowane z myślą o komputerach przenośnych.

Układy RDRAM będą instalowane w modułach nazywanych RIMM (Rambus Inline Memory Modules). RIMM (pokazany na rysunku 7.3) ma podobną wielkość i wygląd do aktualnie używanych DIMM-ów, ale nie jest z nimi kompatybilny na poziomie wyprowadzeń.

Rysunek 7.3.

128-końcówkowy moduł RIMM

Kontroler pamięci RDRAM z pojedynczym kanałem Rambus obsługuje do trzech modułów RIMM, które dzięki gęstości 64 Mb na układ umożliwiają tworzenie RIMM-ów o pojemności 256 MB. Przyszłe wersje układów RIMM będą miały większe pojemności, nawet powyżej 1 GB. Możliwe będzie również projektowanie chipsetów obsługujących więcej kanałów Rambus, co umożliwi instalowanie na płycie większej liczby gniazd RIMM.

Co ciekawe, Rambus nie produkuje ani układów RDRAM, ani modułów RIMM – to zadanie pozostawia innym firmom. Rambus jest przede wszystkim firmą projektującą technologie i nie posiada własnych fabryk układów ani hal produkcyjnych. Firma ta udziela licencji na opracowaną przez siebie technologię innym firmom, które wytwarzają urządzenia i moduły. Licencję na wytwarzanie pamięci RDRAM posiada już co najmniej 13 firm: Fujitsu Ltd., Hitachi Ltd., Hyundai Electronics Industry Co. Ltd., IBM Microelectronics, LG Semiconductor Co. Ltd., Micron Technology Inc., Mitsubishi Electric Corp., NEC Corp., Oki Electric Industry Co. Ltd., Samsung Electronics Corp., Siemens AG oraz Toshiba Corp. Wszystkie te firmy będą produkować zarówno RDRAM-y, jak i zawierające je RIMM-y.

DDR SDRAM

Pamięć DDR (Double Data Rate) SDRAM jest rozwinięciem projektu standardowych układów SDRAM, w którym dane przesyłane są z dwa razy większą szybkością. Poza zwiększeniem częstotliwości taktowania, pamięci DDR osiągają podwojenie wydajności dzięki wykonywaniu dwóch transferów podczas jednego taktu zegara. Pierwszy z transferów jest wykonywany na rosnącym, a drugi – na opadającym zboczu cyklu. Dzięki temu zostało uzyskane podwojenie szybkości transferu przy wykorzystaniu tej samej częstotliwości i tych samych sygnałów.

AMD i Cyrix, jak również producenci chipsetów VIA Technologies, Ali (Acer Labs, Inc.) i SiS (Silicon integrated Systems) proponują pamięci DDR jako tanią i wolną od konieczności posiadania licencji alternatywę RDRAM-ów. Według oficjalnych zapowiedzi, Intel ma zamiar obsługiwać tylko pamięci RDRAM, pozostawiając układy DDR tańszym i mniej wydajnym komputerom. Ciężar oficjalnej standaryzacji układów DDR wzięło na siebie DDR Consortium, w którego skład wchodzi zespół ekspertów firm Fujitsu Ltd., Hitachi Ltd., Hyunday Electronics Industries Co., Mitsubishi Electric Corp., NEC Corp, Samsung Electronics Co., Texas Instruments oraz Toshiba Corp.

Pamięci DDR SDRAM powinny się pojawić na rynku już w tym roku, przede wszystkim w komputerach z procesorami innych niż Intel producentów.

Pamięć podręczna – SRAM

Pamięć podręczna jest zupełnie innym rodzajem pamięci, zdecydowanie szybszym od większości odmian układów DRAM. SRAM jest skrótem od Static RAM, czyli pamięci statycznej, która w przeciwieństwie do układów DRAM (pamięci dynamicznej) nie wymaga odświeżania. Dzięki rozwiązaniom zastosowanym w układach SRAM nie tylko została wyeliminowana konieczność cyklicznego odświeżania, ale i uzyskano znaczne zwiększenie szybkości, dzięki czemu układy te mogą w pełni dotrzymać kroku nowoczesnym procesorom.

Czasy dostępu pamięci SRAM wynoszą nawet poniżej 2 ns, dzięki czemu mogą współpracować z procesorami pracującymi z częstotliwościami 500 i więcej MHz! Tak dobre wyniki osiągnięto dzięki budowie układów SRAM, w których każda komórka pamięci jest zbudowana z sześciu tranzystorów. Dzięki temu niepotrzebne stało się odświeżanie pamięci, ponieważ w komórkach nie ma rozładowujących się z upływem czasu kondensatorów. Pamięci SRAM będą przechowywały informację tak długo, jak długo będą zasilane. Dlaczego więc, skoro układy SDRAM są tak dobre, nie stosuje się ich jako pamięci systemowej? OdpowiedĽ jest prosta:

Typ Szybkość Gęstość Koszt wytworzenia
DRAM Wolne Wysoka Niski
SDRAM Szybkie Niska Wysoki

SRAM w porównaniu do układów DRAM jest dużo szybsza, ale równocześnie ma dużo mniejszą gęstość, jest również o wiele droższa. Mniejsza gęstość oznacza, że układy SRAM mają większe wymiary i w sumie przechowują mniej komórek pamięci. Duża ilość tranzystorów i grupowa budowa układów oznacza, że kości SRAM są nie tylko większe, ale i droższe w porównaniu z układami DRAM. Na przykład moduł SDRAM może zawierać ponad 64 MB RAM, podczas gdy moduł SDRAM o takim samym rozmiarze będzie miał tylko 2 MB, a koszt jego wytworzenia wyniesie tyle samo, co 64 MB modułu DRAM. Ogólnie rzecz biorąc, pamięć SRAM jest około 30 razu większa i 30 razy droższa od pamięci DRAM. Z powodu dużych rozmiarów i kosztów wytwarzania, moduły SRAM nie są stosowane jako pamięć systemowa komputerów PC.

Choć SRAM jest zbyt droga, by można było ją wykorzystywać jako pamięć systemową pecetów, projektanci systemów PC znaleĽli sposób, by za jej pomocą znacząco zwiększyć wydajność komputerów. Zamiast wydawać duże kwoty na układy SRAM i wykorzystywać je jako pamięć systemową, taniej było wyposażyć procesor w niewielką ilość bardzo szybkiej pamięci SRAM, nazywanej pamięcią podręczną (ang. cache memory). Pamięć podręczna pracuje z częstotliwością zbliżoną lub nawet równą częstotliwości pracy procesora i jest pamięcią, z której bezpośrednio korzysta procesor. Podczas operacji odczytu dane w szybkiej pamięci podręcznej są z wyprzedzeniem wymieniane z wolniejszą pamięcią systemową DRAM.

Do niedawna szybkość pamięci DRAM była ograniczona do około 60 ns (16 MHz). W czasie gdy komputery PC pracowały z częstotliwościami 16 i mniej MHz, 60-nanosekundowe układy DRAM w pełni dotrzymywały kroku procesorowi i płycie głównej, przez co nie było potrzeby stosowania pamięci podręcznej. Jednak od czasu gdy procesory zaczęły być taktowane z częstotliwością wyższą od 16 MHz, pamięci DRAM przestały wystarczać i projektanci komputerów zwrócili uwagę na możliwości skryte w układach SRAM. Nastąpiło to na przełomie lat 1987–1988, gdy na rynku pojawiły się pierwsze procesory 386 taktowane częstotliwościami 16 i 20 MHz. Systemy z tymi procesorami były jednymi z pierwszych systemów posiadających pamięć podręczną, z której procesor bezpośrednio pobierał dane. Ponieważ pamięć podręczna może pracować z szybkością procesora, kontroler pamięci podręcznej przewiduje z wyprzedzeniem, jakich danych będzie potrzebował procesor i kopiuje je z pamięci systemowej do szybszej pamięci podręcznej. Dzięki temu, gdy procesor wywoła adres pamięci, zostaną mu dostarczone dane z pamięci podręcznej.

Efektywność pamięci podręcznej jest wyrażana za pomocą współczynnika trafień (ang. hit ratio). Jest to stosunek liczby trafień do sumy wszystkich odczytów pamięci. Trafienie następuje, gdy procesorowi są potrzebne dane, które zostały już wcześniej umieszczone w pamięci podręcznej, dzięki czemu procesor nie musi ich odczytywać z pamięci systemowej. Chybieniem (ang. cache miss) nazywana jest sytuacja, w której kontroler pamięci podręcznej nie przewidział, iż dane, które chce odczytać procesor, będą potrzebne, przez co procesor musi je odczytywać z wolniejszej pamięci systemowej. Za każdym razem, gdy procesor odczytuje dane z pamięci systemowej, musi czekać, ponieważ pamięć ta działa z niższą od niego częstotliwością. Jeśli procesor pracuje z częstotliwością 233 MHz, jego cykl trwa około 4 nanosekund. Pamięć systemowa natomiast może mieć czas dostępu równy 60 ns, co oznacza, że pracuje z częstotliwością tylko 16 MHz. Z tego powodu, za każdym razem, gdy procesor odczytuje dane z pamięci systemowej, praktycznie zwalnia do 16 MHz! Zwolnienie jest osiągane poprzez realizowanie przez procesor cykli oczekiwania (ang. wait states), podczas których nie są wykonywane żadne operacje – procesor właściwie zatrzymuje się, oczekując na dane z pamięci systemowej. Dlatego rozwiązania zastosowane przy projektowaniu działania pamięci podręcznej mają bardzo duży wpływ na wydajność systemu.

W nowoczesnych komputerach, w celu zminimalizowania sytuacji, kiedy procesor jest zmuszony do oczekiwania na dane z wolniejszej pamięci systemowej, stosuje się dwa poziomy pamięci podręcznej: pamięć podręczną L1 i pamięć podręczną L2. Pamięć podręczna pierwszego poziomu (L1) jest również nazywana integralną lub wewnętrzną pamięcią podręczną, ponieważ znajduje się bezpośrednio w procesorze i jest częścią jego matrycy. Z tego powodu L1 zawsze pracuje z pełną częstotliwością jądra procesora i jest najszybszą pamięcią podręczną w każdym systemie. Wszystkie procesory 486 i nowsze zawierają zintegrowaną pamięć podręczną pierwszego poziomu, dzięki czemu są znacząco szybsze od swoich poprzedników. Pamięć podręczna drugiego poziomu jest nazywana również zewnętrzną pamięcią podręczną, ponieważ znajduje się poza samym procesorem. Na początku pamięć ta znajdowała się na płycie głównej; tak było w przypadku systemów z procesorami 386, 486 i Pentium. W systemach tych pamięć podręczna L2 pracuje z częstotliwością płyty głównej.

W celu poprawienia wydajności, pamięć podręczna drugiego poziomu w nowszych procesorach Intela, łącznie z procesorami Pentium Pro i Pentium II, jest częścią samego procesora. Również nie znajduje się w matrycy procesora, ale jest umieszczona wewnątrz jego modułu lub układu. Z tego powodu systemy z procesorami Pentium Pro i Pentium II nie mają żadnej pamięci podręcznej na płycie głównej – wszystko znajduje się w module lub układzie procesora.

Kluczem do zrozumienia zarówno pamięci podręcznej, jak i systemowej jest zrozumienie roli, jaką odgrywa w architekturze komputera.

Na rysunku 7.4 został przedstawiony typowy system z procesorem Pentium MMX i chipsetem 430TX Intela.

W tabeli 7.3 zostały przedstawione zależności pomiędzy pamięcią podręcznej pierwszego i drugiego poziomu.

Tabela 7.3. Zależności pomiędzy pamięcią podręczną pierwszego i drugiego poziomu
Typ procesora 486 DX4 Pentium Pentium Pro Pentium II (1997) Pentium II (1998)
Typowa częstotliwość pracy procesora: 100 MHz 233 MHz 200 MHz 300 MHz 400 MHz
Czas dostępu pamięci podręcznej L1: 10 ns (100 MHz) 4 ns (233 MHz) 5 ns (200 MHz) 3 ns (300 MHz) 2 ns (400 MHz)
Czas dostępu pamięci podręcznej L2: 300 ns (33 MHz) 15 ns (66 MHz) 5 ns (200 MHz) 6 ns (150 MHz) 5 ns (200 MHz)
Częstotliwość pracy płyty głónej: 33 MHz 66 MHz 66 MHz 66 MHz 100 MHz
Czasy dostępu układów: 60 ns 60 ns 60 ns 15 ns 10 ns
SIMM/DIMM: (16 MHz) (16 MHz) (16 MHz) (66 MHz) (100 MHz)

Początkowo pamięci podręczne były asynchroniczne, czyli pracowały z częstotliwością różniącą się od częstotliwości magistrali procesora. W stworzonym w 1995 roku chipsecie 430FX i wszystkich póĽniejszych wprowadzono nowy typ synchronicznej pamięci podręcznej. Synchroniczny tryb pracy wymagał, by częstotliwość pracy układów pamięci podręcznej była zsynchronizowana i taka sama jak częstotliwość magistrali procesora, dzięki czemu znacząco zwiększała się jej wydajność. W tym czasie dodano również tryb potokowo-seryjny (ang. pipeline burst mode), który umożliwia dokonanie po każdym pojedynczym odczycie całej ich serii, co pozwoliło zredukować sumę opóĽnień (cykli oczekiwań). Ponieważ zarówno synchroniczny tryb pracy, jak i tryb potokowo-seryjny pojawiły się w tym samym czasie i zostały zastosowane w tych samych układach, obecność jednego z nich najczęściej jest związana z obecnością drugiego. W sumie dzięki obu trybom pracy pamięci podręcznej wydajność systemu wzrosła o 20%, co jest już znaczącym osiągnięciem.

Rysunek 7.4.

Architektura komputera z procesorem Pentium MMX i chipsetem 430TX Intela

W nowoczesnych systemach kontroler pamięci podręcznej znajduje się albo w układzie North Bridge (w komputerach z procesorami Pentium i wcześniejszych), albo w procesorze (w komputerach z procesorami z Pentium Pro/II i nowszych). Możliwości kontrolera decydują o wydajności i możliwościach pamięci podręcznej. Warto zauważyć, iż większość kontrolerów pamięci podręcznej potrafi buforować tylko ograniczoną ilość pamięci. Często limit ten jest dość niewielki, tak jak to było w komputerach z procesorami Pentium i chipsetem 430TX. Chipset ten był w stanie buforować tylko 64 MB pamięci systemowej. Jeśli miałeś więcej pamięci, komputer działał zauważalnie wolniej, ponieważ wszystkie dane poza pierwszymi 64 MB nigdy nie były buforowane i ich odczyt wiązał się z koniecznością wykonania wszystkich cykli oczekiwań wymaganych podczas odczytu z wolniejszych układów DRAM. Zależnie od wykorzystywanego oprogramowania, spowolnienie to mogło być naprawdę znaczące. Na przykład 32-bitowe systemy operacyjne, takie jak Windows NT lub 95/98 zapełniają pamięć od końca, czyli gdybyś posiadał 96 MB pamięci, system operacyjny i aplikacje byłyby załadowane bezpośrednio do niebuforowanych górnych 32 MB (położonych ponad pierwszymi 64 MB). Spowodowałoby to olbrzymie spowolnienie działania systemu. W tym wypadku rozwiązaniem zwiększającym wydajność komputera byłoby wyjęcie dodatkowej pamięci, tak by w systemie było zainstalowane tylko 64 MB. Krótko mówiąc, nie ma sensu instalować w komputerze więcej pamięci, niż komputer (chipset) może buforować. Więcej informacji znajdziesz w dokumentacji komputera lub rozdziale o procesorach i chipsetach.

Fizyczna pamięć komputera

Maksymalną ilość fizycznej pamięci w komputerze determinuje typ procesora i architektura płyty głównej komputera. Procesory 8088 i 8086 mają 20 linii adresowych i mogą zaadresować do 1 MB (1024 kB) pamięci RAM. Procesory 286 i 386SX mają 24-bitową magistralę adresową i mogą współpracować maksymalnie z 16 MB pamięci. Procesory 386DX, 486, Pentium, Pentium MMX i Pentium Pro mają 32 linie adresowe, dzięki czemu mają dostęp do 4 GB pamięci, natomiast Pentium II z 36 liniami adresowymi może obsłużyć aż 64 GB pamięci!

Procesory 286 i nowsze emulując procesor 8088 (np. wykonując pojedynczy program systemu DOS) pracują w trybie rzeczywistym (ang. real mode). Jest to jedyny tryb dostępny w procesorach 8086 i 8088, wykorzystywanych w komputerach PC i XT. W trybie rzeczywistym wszystkie procesory Intel, łącznie z "potężnymi" procesorami Pentium, mają przestrzeń adresową ograniczoną do 1 MB – dokładnie tak, jak ich przodkowie 8088 i 8086. 384 kB z tego obszaru są zainstalowane na potrzeby różnych urządzeń komputera. Jedynie w trybie chronionym procesory 286 i lepsze mogą w pełni wykorzystać swoje możliwości adresowania.

Komputery z procesorami Pentium mogą zaadresować do 4 GB pamięci, a komputery z procesorami Pentium II – do 64 GB pamięci. Przekładając możliwości adresowania na ceny, koszt 64 GB (65536 MB) wyniósłby łącznie ok. $100000. Oczywiście, planując zakup tak dużej ilości pamięci moglibyśmy negocjować ze sprzedawcą korzystniejszą cenę. Nawet gdybyśmy pozwolili sobie na zakup całej tej pamięci, to obecnie największe dostępne moduły (168-końcówkowe moduły DIMM) mają pojemność 256 MB. Zainstalowanie takiej ilości RAM-u wymagałoby użycia 256 takich kości pamięci, a produkowane dziś płyty główne mają do 8 gniazd przeznaczonych na tę pamięć.

Większość płyt głównych Pentium II może posiadać maksymalnie od trzech do siedmiu gniazd pamięci DIMM, co pozwala na zainstalowanie od 0,75 do 1,5 GB pamięci przy wypełnionych wszystkich gniazdach. Te ograniczenia wynikają z chipsetu, nie z procesora. Technicznie rzecz ujmując, procesor Pentium może zaadresować do 4 GB pamięci, zaś Pentium II – do 64 GB pamięci, jednak na rynku nie występuje żaden chipset, który by to umożliwiał! Większość z istniejących obecnie chipsetów PII pozwala zaadresować najwyżej 1 GB pamięci.

Systemy Pentium mają jeszcze większe ograniczenia. Są dostępne od 1993 roku, lecz jedynie te zbudowane w roku 1997 i póĽniej używają chipsetu płyty głównej obsługującego pamięci SDRAM DIMM. Nawet płyty używające najnowszego chipsetu 430TX Intela nie obsługują więcej niż 256 MB całkowitej pamięci, nie powinny mieć także zainstalowanych więcej niż 64 MB pamięci z powodu ograniczeń w systemie pamięci podręcznej. Nie instaluj więcej niż 64 MB pamięci w swoim systemie Pentium, chyba że jesteś pewny, iż płyta główna i chipset umożliwiają funkcjonowanie pamięci podręcznej drugiego poziomu dla pamięci głównej powyżej tego rozmiaru. Jeśli chcesz uzyskać więcej informacji na ten temat, w rozdziale 4. w sekcji dotyczącej chipsetów znajdziesz wyczerpujący opis ograniczeń pamięci podręcznej na płytach głównych Intela i innych producentów.

Starsze płyty główne 386 i 486 mogą mieć problemy z adresowaniem pamięci powyżej 16 MB, a to z powodu problemów z kontrolerem DMA (Direct Memory Access). Jeśli zainstalujesz kartę ISA używającą kanału DMA (na przykład kartę busmaster SCSI) i masz więcej niż 16 MB pamięci RAM, pojawiają się potencjalne problemy, ponieważ magistrala ISA umożliwia transfery DMA jedynie do granicy 16 MB. Próba transmisji danych poprzez DMA powyżej granicy 16 MB kończy się załamaniem systemu. W przypadku nowych, 32-bitowych systemów problem znika, podobnie w przypadku 32-bitowych gniazd kart rozszerzeń, takich jak PCI. 32-bitowe systemy operacyjne automatycznie remapują transfery DMA magistrali ISA poniżej granicy 16 MB, zaś w przypadku PCI po prostu nie ma takich ograniczeń.

Pierwotnie pamięć systemów komputerowych była zbudowana z pojedynczych chipów. Oryginalne maszyny XT i AT firmy IBM posiadały 36 kieszeni na takie chipy na płycie głównej. Zainstalowanie większej ilości pamięci wymagało umieszczenia w komputerze specjalnych kart rozszerzających, na które można by wetknąć dodatkowy RAM.

Poza pracochłonnością obsługi, tego typu rozszerzenia pamięci miały jeszcze jedną wadę. Mianowicie kości miały tendencję do obluzowywania się w gniazdach ze względu na cykle temperaturowe, którym były poddane. Każdego dnia, gdy włączano system, kości się rozgrzewały, a potem – każdego dnia przy wyłączaniu komputera – studziły się. Na skutek ruchów termicznych mogło się zdarzyć, że kości traciły dobry styk z gniazdem. Objawiało się to usterkami w pracy komputera. Jedyną metodą było otwieranie obudowy co jakiś czas i pracochłonne dociskanie kości do ich gniazd.

Jedyną alternatywą było lutowanie kości pamięci – zamiast umieszczania ich w gniazdach. Jednak w przypadku awarii pojedynczej kości pamięci zwykła wymiana uszkodzonego elementu przeradzała się w koszmar wylutowywania chipów z płyty głównej. Wymagało to wprawy, cierpliwości i wiele czasu. Jedno i drugie rozwiązanie miało więc wady.

Zatem rozwiązaniem, jakie na producentach wymusili użytkownicy, była prostota instalacji rozszerzeń pamięci z jednoczesnym zagwarantowaniem trwałości takiej instalacji. W większości współczesnych komputerów można zamiast pojedynczych układów pamięci spotkać raczej pamięć w postaci modułów SIMM (single in-line memory module) albo DIMM (dual in-line memory module). Są to małe płytki, które umieszczamy w gniazdach na płycie głównej albo na kartach rozszerzających. Same układy pamięci zostały na stałe przylutowane do modułów, niemożliwa jest więc wymiana pojedynczych układów. W razie awarii musimy wymienić cały moduł. Pod tym względem moduły SIMM/DIMM przypominają więc jedną dużą kość pamięci.

W komputerach kompatybilnych z IBM spotkać można dwa typy modułów SIMM, różniące się fizycznie: moduły 30-końcówkowe (9-bitowe) i 72-końcówkowe (36-bitowe). Wśród nich spotyka się moduły różniące się pojemnością pamięci i innymi parametrami. Moduły 30-końcówkowe są mniejsze od 72-końcókowych i mogą mieć przylutowane kostki pamięci z jednej lub z obydwu stron. SIMM-y 30-końcówkowe wychodzą obecnie z użycia, przede wszystkim ze względu na rosnącą popularność komputerów 64-bitowych, w których do obsadzenia jednego banku pamięci potrzeba aż 8 takich modułów. W komputerach z procesorem Pentium-MMX i Pentium Pro popularność zyskały moduły DIMM – 168-końcówkowe moduły 64-bitowe (bez bitów parzystości) lub 72-bitowe (z bitami parzystości).

Na rysunkach 7.5, 7.6 i 7.7 przedstawiono typowe 30-końcówkowe (9-bitowe) i 72-końcówkowe (36-bitowe) moduły SIMM oraz 168-końcówkowe (64-bitowe) moduły DIMM. Końcówki znajdujące się z obydwu stron płytki ponumerowano od lewej do prawej. Wszystkie wymiary są podane zarówno w calach, jak i w milimetrach (w nawiasach).

Rysunek 7.5.

Rozkład wyprowadzeń typowego 30-końcówkowego (9-bitowego) modułu SIMM

Rysunek 7.6.

Rozkład wyprowadzeń typowego 72-końcówkowego (36-bitowego) modułu SIMM

Moduły SIPP (single inline pinned packages) są to zwykłe kości SIMM, z dolutowanymi nóżkami w miejscach blaszek stykowych. Zostały one wyprodukowane z myślą o gniazdach tańszych do SIMM. Ze względu na ich wady – brak zatrzasku chroniącego przed wysunięciem oraz brak zabezpieczeń przed wycieraniem się styków – w dzisiejszych czasach prawie się ich nie używa.

Rysunek 7.7.

Typowy moduł DIMM. Ukazany na rysunku ma strukturę 72-bitową, jednak wymiarami nie różni się od modułu 64-bitowego

 

Istnieje możliwość przerobienia modułu SIPP w SIMM – poprzez obcięcie dodatkowych igiełek – lub modułu SIMM w SIPP – poprzez ich dolutowanie. Istnieją także specjalne przejściówki umożliwiające umieszczenie modułów SIPP w gniazdach 30-stykowych SIMM.

Moduł SIMM w bardzo małych rozmiarach skupia bardzo duży obszar pamięci. Dostępne są wersje modułów o różnych pojemnościach. Tabela 7.4 przedstawia rozmiar pamięci różnych modułów SIMM (30- i 72-końcówkowych) oraz DIMM.

Tabela 7.4. Pojemności modułów SIMM i DIMM
SIMM-y 30-końcówkowe
Rozmiar Moduły z kontrolą parzystości Moduły bez kontroli parzystości
256 kB 256 kb × 9 256 kb × 8
1 MB 1 Mb × 9 1 Mb × 8
4 MB 4 Mb × 9 4 Mb × 8
16 MB 16 Mb × 9 16 Mb × 8
SIMM-y 72-końcówkowe
Rozmiar Moduły z kontrolą parzystości Moduły bez kontroli parzystości
1 MB 256 kb × 36 256 kb × 32
2 MB 512 kb × 36 512 kb × 32
4 MB 1 Mb × 36 1 Mb × 32
8 MB 2 Mb × 36 2 Mb × 32
16 MB 4 Mb × 36 4 Mb × 32
32 MB 8 Mb × 36 8 Mb × 32
64 MB 16 Mb × 36 16 Mb × 32
128 MB/FONT> 32 Mb × 36 32 Mb × 32
DIMM-y 168-końcówkowe
Rozmiar Moduły z kontrolą parzystości Moduły bez kontroli parzystości
8 MB 1 Mb × 72 1 Mb × 62
16 MB 2 Mb × 72 2 Mb × 64
32 MB 4 Mb × 72 4 Mb × 64
64 MB 8 Mb × 72 8 Mb × 64
128 MB 16 Mb × 72 16 Mb × 64
256 MB 32 Mb × 72 32 Mb × 64

Moduły SIMM z układami dynamicznej pamięci RAM (DRAM) dla poszczególnych rozmiarów pamięci są dostępne w wersjach o różnych czasach dostępu. Szybkość pracy modułów pamięci wyraża się w nanosekundach (miliardowych częściach sekundy, oznaczanych w skrócie ns). Dostępne moduły SIMM mają różne czasy dostępu, od 120 ns (najwolniejsze) do 50 ns (najszybsze), a prędkość modułów DIMM waha się od 60 ns do 7 ns. W większości pierwszych komputerów z modułami SIMM, ich czas dostępu wynosił 120 ns. Moduły te zostały w niedługim czasie wyparte przez SIMM-y 100-nanosekundowe i szybsze. Obecnie w handlu są dostępne moduły SIMM od 70 ns do 60 ns oraz moduły DIMM o czasie dostępu mniejszym niż 10 ns. Dostępne są również moduły szybsze i wolniejsze od tych, jednak z powodu ich ograniczonego zastosowania są trudne do zdobycia.

Jeżeli komputer wymaga modułów o określonym czasie dostępu, to zawsze można zastosować szybsze moduły. Bez problemu można również "mieszać" w jednym komputerze moduły o różnych czasach dostępu, o ile ich czas dostępu jest taki sam lub krótszy w porównaniu do wymaganego przez dany komputer. Z powodu niedużych różnic w cenie pomiędzy modułami o różnych czasach dostępu, zazwyczaj decyduję się na kupno szybszych modułów, niż wymaga mój komputer. Szybsze moduły mogą znaleĽć zastosowanie w przyszłości, przy zmianie komputera na model wymagający modułów o krótszym czasie dostępu.

Większość modułów DIMM składa się z układów pamięci SDRAM (Synchronous DRAM), charakteryzujących się bardzo szybkim transferem danych, synchronicznym do dostarczonego sygnału zegarowego. Moduły te mogą współpracować z magistralami przesyłającymi dane z częstotliwością do 100 MHz, a w przyszłości do 200 MHz.

30-końcówkowe moduły SIMM są dostępne w kilku odmianach, co może mieć wpływ na ich pracę w konkretnym komputerze (po zainstalowaniu niektórych modułów komputer może odmówić pracy). Po pierwsze, moduły te występują w dwóch odmianach różniących się rozkładem wyprowadzeń. W większości komputerów wykorzystuje się moduły ogólnego przeznaczenia, których rozkład wyprowadzeń został ustandaryzowany. W wielu starszych komputerach, począwszy od XT-286, który pojawił się w roku 1986, aż do komputerów PS/2 (modele 25, 30, 50 i 60), wykorzystywano moduły o nieco zmodyfikowanej konfiguracji końcówek. (tzw. 30-końcówkowe moduły IBM-style SIMMs). Można dopasować 30-końcówkowy moduł SIMM ogólnego przeznaczenia do pracy z komputerem IBM, a także moduł specyficzny dla IBM do pracy z innymi komputerami, jednak prostszy będzie zakup modułów o wyprowadzeniach odpowiednich dla danego typu komputera. Jeżeli potrzebujemy modułów specyficznych dla IBM, to powiedzmy o tym sprzedawcy przy zakupie.

Inny problem jest związany z SIMM-ami 30-końcówkowymi i odnosi się do ilości bitów w module. Pojedynczy moduł jest traktowany jak układ pamięci z 9 bitami danych (w tym bit parzystości), wewnętrzna struktura modułu nie ma przy tym znaczenia. Starsze moduły składały się z dziewięciu 1-bitowych kości pamięci, podczas gdy w nowszych modułach znajdują się dwa układy 4-bitowe i jeden 1-bitowy, pamiętający bity parzystości. Dzięki temu ilość wszystkich układów modułu została ograniczona do trzech. Zmniejszenie ilości układów modułu do trzech wymaga modyfikacji pewnych układów na płycie głównej odpowiedzialnych za odświeżanie pamięci. Wiele starszych płyt głównych nie radzi sobie z modułami 3-układowymi. Większość nowszych płyt automatycznie dopasowuje się do modułów z trzema lub z dziewięcioma układami. Korzystanie z modułów 3-układowych ma jednak tę zaletę, że moduły te są bardziej niezawodne, zużywają mniej energii i mniej kosztują. Większość starszych komputerów również powinna pracować poprawnie z modułami 3-układowymi, jednak niektóre komputery mogą odmówić pracy. Niestety, jedyny sposób, aby się o tym przekonać, polega na sprawdzeniu poprawności działania komputera z danymi modułami. Rozsądniej jest jednak pozostać przy modułach 9-układowych, aby nie zużywać czasu na zamianę modułów 3-układowych na 9-układowe.

W przypadku SIMM-ów 72-końcówkowych nie ma problemów z wyprowadzeniami końcówek, jedyne różnice wynikają z różnych pojemności pamięci i różnych czasów dostępu. Na współpracę modułu z komputerem nie ma wpływu liczba układów pamięci w module. 72-końcówkowe moduły SIMM są idealnym rozwiązaniem w przypadku komputerów 32-bitowych, np. z procesorem 486, ponieważ pojedynczy moduł wystarczy w takim komputerze do obsadzenia całego banku pamięci (32 bity danych plus cztery bity parzystości). Kiedy zmieniamy ilość pamięci w komputerze 32-bitowym wykorzystującym SIMM-y 76-końcówkowe, możemy dodawać i usuwać pojedyncze moduły (wyjątek stanowią komputery, w których wprowadzono tzw. pamięć z przeplotem – ang. interleaved memory – aby uniknąć wstawiania cykli oczekiwania przy dostępie do pamięci).

W komputerach 64-bitowych, do których zaliczają się komputery z procesorem Pentium albo nowszym, jeden bank pamięci tworzą dwa 72-końcówkowe moduły SIMM. Niektórzy producenci płyt głównych oferują płyty "oszczędzające SIMM-y" przeznaczone dla nowszych procesorów Pentium, które są wyposażone w gniazda dla SIMM-ów 30- i 72-końcówkowych. Konfiguracja taka nie należy z pewnością do najbardziej pożądanych, pozwala jednak użytkownikowi na zagospodarowanie starych modułów 30-końcówkowych. Na jeden bank pamięci może składać się 8 SIMM-ów 30-końcówkowych. Można również użyć kombinacji czterech modułów 30-końcówkowych z jednym modułem 72-końcówkowym. Konfiguracja taka na pewno nie jest optymalną, ponieważ 6 modułów zajmuje dużo miejsca na płycie głównej.

Inną możliwością są SIMM-y grupowane w "stosy" oraz konwertery modułów SIMM. Pozwalają one na umieszczanie SIMM-ów 30-końcówkowych w gniazdach 72-końcówkowych, dzięki czemu zagospodarowujemy moduły, które inaczej wyrzucilibyśmy na śmietnik. Takie sposoby, podobnie jak poprzednie, zabierają miejsce na płycie głównej, rozważmy więc dobrze sprawę przed ewentualnym zakupem. Obecnie, gdy ceny modułów SIMM i DIMM nieustannie spadają, prawdopodobnie lepszym rozwiązaniem będzie pozostanie przy 72-końcówkowych modułach SIMM i 168-końcówkowych modułach SIMM.

Pamiętajmy przy tym, że w niektórych komputerach z procesorem 486 (np. PS/2 90 i 95) stosuje się w celu zmniejszenia liczby cykli oczekiwania tzw. pamięć z przeplotem (ang. interleaved memory). W rozwiązaniu tym liczba SIMM-ów w komputerze musi być wielokrotnością liczby 2, ponieważ idea dostępu do pamięci z przeplotem polega na naprzemiennym odwoływaniu się procesora do obydwu modułów, dzięki czemu poprawia się wydajność komputera.

Bank pamięci jest najmniejszą porcją pamięci, jaka może być jednorazowo zaadresowana przez procesor. Rozmiar banku z reguły odpowiada szerokości magistrali danych procesora. W przypadku pamięci z przeplotem wirtualny bank pamięci może mieć rozmiar dwukrotnie większy od szerokości magistrali danych procesora.

Nie zawsze możemy zamienić moduł SIMM w komputerze na moduł o większej pojemności pamięci. Np. komputery IBM PS/2 Model 70-Axx i Bxx dopuszczają stosowanie 72-końcówkowych modułów SIMM o pojemnościach 1 MB i 2 MB oraz o czasie dostępu 80 ns lub krótszym. Osiągalne są również SIMM-y o pojemności 4 MB i czasie dostępu 80 ns, jednak moduły takie nie będą pracowały w tych komputerach. Natomiast komputery PS/2 Model 50 SX i 65 SX dopuszczają 72-końcówkowe SIMM-y o pojemnościach 1 MB, 2 MB i 4 MB. Moduły SIMM o większych pojemnościach mogą być stosowane tylko wówczas, gdy na ich stosowanie pozwala płyta główna. Informacje na temat odpowiedniej dla danego komputera pojemności pamięci i czasu dostępu modułów SIMM można znaleĽć w dokumentacji komputera.

Obecnie wszystkie dostępne w sprzedaży komputery wykorzystują moduły SIMM, a wiele komputerów współpracuje z modułami DIMM. Moduły SIMM i DIMM spotyka się nawet w komputerach Apple Macintosh. Rozwiązanie SIMM/DIMM nie jest niczyim rozwiązaniem firmowym, a raczej standardem w branży. Jak już wspomniałem, niektóre moduły SIMM przy takiej samej pojemności i czasie dostępu różnią się nieco wyprowadzeniem końcówek, dlatego powinniśmy się zawsze upewnić, że moduły, które kupujemy, pasują do naszego komputera.

Rozkład końcówek modułów SIMM

W tabelach 7.5 i 7.6 zebrano opisy wyprowadzeń 30-końcówkowych oraz standardowych 72-końcówekowych modułów SIMM. Dodatkowa tabela opisuje znaczenie specjalnych końcówek SIMM-ów 72-końcówkowych, wykorzystywa-nych do wykrywania obecności modułu w gnieĽdzie. Końcówki te służą płycie głównej do ustalenia rozmiaru i czasu dostępu pamięci RAM modułów SIMM. Końcówek tych są pozbawione standardowe SIMM-y 30-końcówkowe, jednak firma IBM wyposażyła w tę funkcję swoje zmodyfikowane SIMM-y 30-końcówkowe.

Tabela 7.5. Rozmieszczenie końcówek w standardowych 30-końcówkowych modułach SIMM oraz 30-końcówkowych modułach SIMM firmy IBM
Końcówka Sygnał modułu standardowego Sygnał modułu firmy IBM
1 +5 Vdc +5 Vdc
2 Sygnał strobe kolumny adresu Sygnał strobe kolumny adresu
3 Dane – bit 0 Dane – bit 0
4 Adres – bit 0 Adres – bit 0
5 Adres – bit 1 Adres – bit 1
6 Dane – bit 1 Dane – bit 1
7 Adres – bit 2 Adres – bit 2
8 Adres – bit 3 Adres – bit 3
9 Masa Masa
10 Dane – bit 2 Dane – bit 2
11 Adres – bit 4 Adres – bit 4
12 Adres – bit 5 Adres – bit 5
13 Dane – bit 3 Dane – bit 3
14 Adres – bit 6 Adres – bit 6
15 Adres – bit 7 Adres – bit 7
16 Dane – bit 4 Dane – bit 4
17 Adres – bit 8 Adres – bit 8
18 Adres – bit 9 Adres – bit 9
19 Adres – bit 10 Sygnał strobe wiersza adresu
20 Dane – bit 5 Dane – bit 5
21 WE (Write Enable – zapis do pamięci) WE (Write Enable – zapis do pamięci)
22 Masa Masa
23 Dane – bit 6 Dane – bit 6
24 Nie podłączone Obecność modułu w gnieĽdzie (masa)
25 Dane – bit 7 Dane – bit 7
26 Dane – bit 8, wejściowy (parzystości) Obecność modułu w gnieĽdzie (1 MB = masa)
27 Sygnał strobe wiersza adresu Sygnał strobe wiersza adresu
28 Bit parzystości sygnału strobe kolumny adresu Nie podłączone
29 Dane - bit 8 (parzystości), wyjściowy Dane – bit 8 (parzystości), linia dwukierunkowa
30 +5 Vdc +5 Vdc

Tabela 7.6. Rozmieszczenie końcówek w standardowych 72-końcówkowych modułach SIMM
Końcówka Sygnał modułu standardowego Końcówka Sygnał modułu standardowego
1 Masa 37 Parzystość – bit 1
2 Dane – bit 0 38 Parzystość – bit 3
3 Dane – bit 16 39 Masa
4 Dane – bit 1 40 Sygnał strobe kolumny adresu 0
5 Dane – bit 17 41 Sygnał strobe kolumny adresu 2
6 Dane – bit 2 42 Sygnał strobe kolumny adresu 3
7 Dane – bit 18 43 Sygnał strobe kolumny adresu 1
8 Dane – bit 3 44 Sygnał strobe wiersza adresu 0
9 Dane – bit 19 45 Sygnał strobe wiersza adresu 1
10 +5 Vdc 46 Wybór bloku 1
11 Bit parzystości sygnału strobe kolumny adresu 47 WE (Write Enable – zapis do pamięci)
12 Adres – bit 0 48 Zarezerwowane
13 Adres – bit 1 49 Dane – bit 8
14 Adres – bit 2 50 Dane – bit 24
15 Adres – bit 3 51 Dane – bit 9
16 Adres – bit 4 52 Dane – bit 25
17 Adres – bit 5 53 Dane – bit 10
18 Adres – bit 6 54 Dane – bit 26
19 Zarezerwowane 55 Dane – bit 11
20 Dane – bit 4 56 Dane – bit 27
21 Dane – bit 20 57 Dane – bit 12
22 Dane – bit 5 58 Dane – bit 28
23 Dane – bit 21 59 +5 Vdc
24 Dane – bit 6 60 Dane – bit 29
25 Dane – bit 22 61 Dane – bit 13
26 Dane – bit 7 62 Dane – bit 30
27 Dane – bit 23 63 Dane – bit 14
28 Adres – bit 7 64 Dane – bit 31
29 Wybór bloku 0 65 Dane – bit 15
30 +5 Vdc 66 Wybór bloku 2
31 Adres – bit 8 67 Obecność modułu w gnieĽdzie – bit 0
32 Adres – bit 9 68 Obecność modułu w gnieĽdzie – bit 1
33   69 Obecność modułu w gnieĽdzie – bit 2
34   70 Obecność modułu w gnieĽdzie – bit 3
35 Parzystość – bit 2 71 Wybór bloku 3
36 Parzystość – bit 0 72 Masa

Zwróć uwagę, że 72-stykowe SIMM-y wykorzystują zestaw czterech lub pięciu styków do przekazania płycie głównej informacji o rodzaju SIMM-a. Te styki obecności są albo podłączone do masy, albo nie podłączone w celu wskazania typu SIMM-a. Styki obecności muszą być podłączone do masy poprzez zeroomowy rezystor na płytce SIMM – w celu wysterowania styku w wysoki poziom logiczny, gdy styk jest otwarty, a w niski poziom logiczny, gdy styk jest połączony z masą płyty głównej. W ten sposób powstaje cyfrowy sygnał dekodowany przez układy logiczne płyty głównej. Jeśli płyta główna wykorzystuje sygnały obecności, to podczas procedury POST (Power-On Self Test) potrafi wyznaczyć rozmiar i szybkość płytek pamięci SIMM i na tej podstawie automatycznie dobrać sygnały sterowania i adresowania pamięci. Dzięki temu rozmiar i szybkość pamięci mogą być wykryte automatycznie.

Cały mechanizm bardzo przypomina przemysłowy standard kodów DX używanych w nowoczesnych filmach fotograficznych 35 mm, który wskazuje na wartość ASA (szybkość naświetlania) filmu. Gdy wkładasz film do aparatu, styki elektryczne łączą się z metalizowanymi polami na obudowie rolki, tworzącymi ogólnie przyjęty kod DX.

Tabela 7.7 przedstawia przemysłowy standard JEDEC stosowany do wykrywania konfiguracji 72-stykowych modułów pamięci z rodziny SIMM. JEDEC to Joint Electronic Devices Engineering Council, stowarzyszenie amerykańskich producentów i użytkowników półprzewodników, ustanawiające wymiary i inne standardy dla kostek i modułów pamięci.

Tabela 7.7. Konfiguracja styków obecności dla 72-stykowych pamięci SIMM
Rozmiar Szybkość Styk 67 Styk 68 Styk 69 Styk 70 Styk 11
1 MB 100 ns Gnd - Gnd Gnd -
1 MB 80 ns Gnd - - Gnd -
1 MB 70 ns Gnd - Gnd - -
1 MB 60 ns Gnd - - - -
2 MB 100 ns - Gnd Gnd Gnd -
2 MB 80 ns - Gnd - Gnd -
2 MB 70 ns - Gnd Gnd - -
2 MB 60 ns - Gnd - - -
4 MB 100 ns Gnd Gnd Gnd Gnd -
4 MB 80 ns Gnd Gnd - Gnd -
4 MB 70 ns Gnd Gnd Gnd - -
4 MB 60 ns Gnd Gnd - - -
8 MB 100 ns - - Gnd Gnd -
8 MB 80 ns - - - Gnd -
8 MB 70 ns - - Gnd - -
8 MB 60 ns - - - - -
16 MB 80 ns Gnd - - Gnd Gnd
16 MB 70 ns Gnd - Gnd - Gnd
16 MB 60 ns Gnd - - - Gnd
16 MB 50 ns Gnd - Gnd Gnd Gnd
32 MB 80 ns - Gnd - Gnd Gnd
32 MB 70 ns - Gnd Gnd - Gnd
32 MB 60 ns - Gnd - - Gnd
32 MB 50 ns - Gnd Gnd Gnd Gnd

-    Bez połączenia (otwarte)
Gnd    Ground (masa)
Pin 67    Presence detect 1 (wykrywanie obecności)
Pin 68    Presence detect 2
Pin 69    Presence detect 3
Pin 70    Presence detect 4
Pin 11    Presence detect 5

Niestety, nie wszyscy producenci dostosowują się do przyjętych za obowiązujące standardów. Jednym z przykładów jest różnorodność rozwiązań sygnałów zawiadamiających o obecności różnych modułów pamięci. Compaq, IBM (głównie w systemach PS/2) i Hewlett-Packard są głównymi producentami komputerów o takich – niestandardowych – wymaganiach. Wiele z ich systemów, pomimo iż używają standardowych gniazd SIMM, wymaga specjalnych, dostosowanych do ich komputerów modułów pamięci. Tabela 7.8 przedstawia połączenia styków konfiguracji pamięci według firmy IBM.

Właśnie różnorodne wariacje definicji tych styków są powodem, dla którego przy zamawianiu pamięci SIMM musisz podać, czy chodzi o układy IBM, Compaq, HP czy moduły standardowe.

Tabela 7.8. Konfiguracja styków obecności dla 72-stykowych pamięci SIMM
67 68 69 70 Typ SIMM-a Numer części (IBM)
- - - - Niedozwolona konfiguracja N/A
Gnd - - - 1 MB 120 ns N/A
- Gnd - - 2 MB 120 ns N/A
Gnd Gnd - - 2 MB 70 ns 92F0102
- - Gnd - 8 MB 70 ns 64F3606
Gnd - Gnd - Zarezerwowane N/A
- Gnd Gnd - 2 MB 80 ns 92F0103
Gnd Gnd Gnd - 8 MB 80 ns 64F3607
- - - Gnd Zarezerwowane N/A
Gnd - - Gnd 1 MB 85 ns 90X8624
- Gnd - Gnd 2 MB 85 ns 92F0104
Gnd Gnd - Gnd 4 MB 70 ns 92F0105
- - Gnd Gnd 4 MB 85 ns 79F1003 (square notch) L40-SX
Gnd - Gnd Gnd 1 MB 100 ns N/A
Gnd - Gnd Gnd 8 MB 80 ns 79F1004 (square notch) L40-SX
- Gnd Gnd Gnd 2 MB 100 ns N/A
Gnd Gnd Gnd Gnd 4 MB 80 ns 87F9980
Gnd Gnd Gnd Gnd 2 MB 85 ns 79F1003 (square notch) L40SX

-    Bez połączenia (otwarte)
Gnd    Ground (masa)
Pin 67    Presence detect 1 (wykrywanie obecności)
Pin 68    Presence detect 2
Pin 69    Presence detect 3
Pin 70    Presence detect 4

Tabela 7.9 przedstawia rozkład wyprowadzeń standardowych, niebuforowanych, 168-stykowych pamięci SDRAM DIMM.

Tabela 7.9. Wyprowadzenia 168-stykowej pamięci SDRAM DIMM
Styk ×64 Non-Parity ×72 Parity/ECC Styk ×64 Non-Parity ×72 Parity/ECC
1 Gnd Gnd 85 Gnd Gnd
2 Data Bit 0 Data Bit 0 86 Data Bit 32 Data Bit 32
3 Data Bit 1 Data Bit 1 87 Data Bit 33 Data Bit 33
4 Data Bit 2 Data Bit 2 88 Data Bit 34 Data Bit 34
5 Data Bit 3 Data Bit 3 89 Data Bit 35 Data Bit 35
6 +5 V +5 V 90 +5 V +5 V
7 Data Bit 4 Data Bit 4 91 Data Bit 36 Data Bit 36
8 Data Bit 5 Data Bit 5 92 Data Bit 37 Data Bit 37
9 Data Bit 6 Data Bit 6 93 Data Bit 38 Data Bit 38
10 Data Bit 7 Data Bit 7 94 Data Bit 39 Data Bit 39
11 Data Bit 8 Data Bit 8 95 Data Bit 40 Data Bit 40
12 Gnd Gnd 96 Gnd Gnd
13 Data Bit 9 Data Bit 9 97 Data Bit 41 Data Bit 41
14 Data Bit 10 Data Bit 10 98 Data Bit 42 Data Bit 42
15 Data Bit 11 Data Bit 11 99 Data Bit 43 Data Bit 43
16 Data Bit 12 Data Bit 12 100 Data Bit 44 Data Bit 44
17 Data Bit 13 Data Bit 13 101 Data Bit 45 Data Bit 45
18 +5 V +5 V 102 +5 V +5 V
19 Data Bit 14 Data Bit 14 103 Data Bit 46 Data Bit 46
20 Data Bit 15 Data Bit 15 104 Data Bit 47 Data Bit 47
21 - Check Bit 0 105 - Check Bit 4
22 - Check Bit 1 106 - Check Bit 5
23 Gnd Gnd 107 Gnd Gnd
24 - - 108 - -
25 - - 109 - -
26 +5 V +5 V 110 +5 V +5 V
27 Write Enable Write Enable 111 Column Address Strobe Column Address Strobe
28 Byte Mask 0 Byte Mask 0 112 Byte Mask 4 Byte Mask 4
29 Byte Mask 1 Byte Mask 1 113 Byte Mask 5 Byte Mask 5
30 S0 S0 114 S1 S1
31 Reserved Reserved 115 Row Address Strobe Row Address Strobe
32 Gnd Gnd 116 Gnd Gnd
33 Address Bit 0 Address Bit 0 117 Address Bit 1 Address Bit 1
34 Address Bit 2 Address Bit 2 118 Address Bit 3 Address Bit 3
35 Address Bit 4 Address Bit 4 119 Address Bit 5 Address Bit 5
36 Address Bit 6 Address Bit 6 120 Address Bit 7 Address Bit 7
37 Address Bit 8 Address Bit 8 121 Address Bit 9 Address Bit 9
38 Address Bit 10 Address Bit 10 122 Bank Address 0 Bank Address 0
39 Bank Address 1 Bank Address 1 123 Address Bit 11 Address Bit 11
40 +5 V +5 V 124 +5 V +5 V
41 +5 V +5 V 125 Clock 1 Clock 1
42 Clock 0 Clock 0 126 Address Bit 12 Address Bit 12
43 Gnd Gnd 127 Gnd Gnd
44 Reserved Reserved 128 Clock Enable 0 Clock Enable 0
45 S2 S2 129 S3 S3
46 Byte Mask 2 Byte Mask 2 130 Byte Mask 6 Byte Mask 6
47 Byte Mask 3 Byte Mask 3 131 Byte Mask 6 Byte Mask 6
48 Reserved Reserved 132 Address Bit 13 Address Bit 13
49 +5 V +5 V 133 +5 V +5 V
50 - - 134 - -
51 - - 135 - -
52 - Check Bit 2 136 - Check Bit 6
53 - Check Bit 3 137 - Check Bit 7
54 Gnd Gnd 138 Gnd Gnd
55 Data Bit 16 Data Bit 16 139 Data Bit 48 Data Bit 48
56 Data Bit 17 Data Bit 17 140 Data Bit 49 Data Bit 49
57 Data Bit 18 Data Bit 18 141 Data Bit 50 Data Bit 50
58 Data Bit 19 Data Bit 19 142 Data Bit 51 Data Bit 51
59 +5 V +5 V 143 +5 V +5 V
60 Data Bit 20 Data Bit 20 144 Data Bit 52 Data Bit 52
61 - - 145 - -
62 Voltage Reference Voltage Reference 146 Voltage Reference Voltage Reference
63 Clock Enable 1 Clock Enable 1 147 - -
64 Gnd Gnd 148 Gne Gne
65 Data Bit 21 Data Bit 21 149 Data Bit 53 Data Bit 53
66 Data Bit 22 Data Bit 22 150 Data Bit 54 Data Bit 54
67 Data Bit 23 Data Bit 23 151 Data Bit 55 Data Bit 55
68 Gnd Gnd 152 Gnd Gnd
69 Data Bit 24 Data Bit 24 153 Data Bit 56 Data Bit 56
70 Data Bit 25 Data Bit 25 154 Data Bit 57 Data Bit 57
71 Data Bit 26 Data Bit 26 155 Data Bit 58 Data Bit 58
72 Data Bit 27 Data Bit 27 156 Data Bit 59 Data Bit 59
73 +5 V +5 V 157 +5 V +5 V
74 Data Bit 28 Data Bit 28 158 Data Bit 60 Data Bit 60
75 Data Bit 29 Data Bit 29 159 Data Bit 61 Data Bit 61
76 Data Bit 30 Data Bit 30 160 Data Bit 62 Data Bit 62
77 Data Bit 31 Data Bit 31 161 Data Bit 63 Data Bit 63
78 Gnd Gnd 162 Gnd Gnd
79 Clock 2 Clock 2 163 Clock 3 Clock 3
80 - - 164 - -
81 -   165 Serial PD Address 0 Serial PD Address 0
82 Serial Data I/O Serial Data I/O 166 Serial PD Address 1 Serial PD Address 1
83 Serial Clock Input Serial Clock Input 167 Serial PD Address 2 Serial PD Address 2
84 +5 V +5 V 168 +5 V +5 V

-    Bez połączenia (otwarte)
Gnd    Ground (masa)

Pamięci DIMM używają zupełnie innego mechanizmu wykrywania obecności, noszącego nazwę SPD (Serial Presence Detect). Składa się on z małej pamięci EEPROM (Electrically Erasable Programmable Read Only Memory) lub nawet pamięci flash umieszczonej w module DIMM, zawierającej specjalnie sformatowane dane opisujące właściwości danego modułu. Te szeregowe dane mogą zostać odczytane poprzez styki danych szeregowych modułu i umożliwiają płycie głównej precyzyjne dostosowanie się do zainstalowanego modułu pamięci.

Zorganizowanie oraz pojemności pamięci RAM

Na płytach głównych komputerów PC można spotkać kilka typów układów pamięci. W większości są to układy o szerokości magistrali równej 1 bit, o różnych pojemnościach. W poniższej tabeli zebrano spotykane układy RAM i ich pojemności:

Typ układu Pojemność
16 K razy 1 bit Układy wykorzystywane w oryginalnym komputerze IBM PC z płytą główną Typu 1.
64 K razy 1 bit Układy wykorzystywane na standardowej płycie głównej IBM PC Typ 2. Układy te są również wykorzystywane na wielu kartach rozszerzających pamięć, np. klasyczna karta AST 6-pack.
128 K razy 1 bit Układy wykorzystywane na płycie głównej Typ 1 komputera IBM PC AT były osobliwym połączeniem dwóch układów 64 K umieszczonych i przylutowanych jeden na drugim. Pojedyncze układy były również wykorzystywane do przechowywania wartości bitu parzystości w komputerze IBM XT 286.
256 K razy 1 bit
(lub 64 K razy 4 bity)
Układy te można było w swoim czasie często spotkać na wielu popularnych płytach głównych i kartach rozszerzających pamięć. Były także stosowane na płytach komputerów IBM XT Typ 2 i IBM AT Typ 2 oraz płytach wielu komputerów kompatybilnych pochodzących z tamtego okresu.
1 M razy 1 bit
(lub 256 K razy 4 bity)
Układy o pojemności 1 Mb były przez szereg lat bardzo popularne i najczęściej znajdowały zastosowanie w modułach SIMM o pojemnościach od 256 kB do 9 MB.
4 M razy 1 bit
(lub 1 M razy 4 bity)
Układy o pojemności 4 Mb są najczęściej stosowane w modułach SIMM o pojemnościach od 1 MB do 16 MB. Można je było spotkać przede wszystkim w modułach SIMM 4 MB i 8 MB. Generalnie nie były sprzedawane jako osobne układy.
16 M razy 1 bit
(lub 4 M razy 4 bity)
Układy o pojemności 16 Mb, wykorzystywane często w 72-końcówkowych modułach SIMM o pojemnościach od 16 MB do 32 MB.
64 M razy 1 bit
(lub 16 M razy 4 bity)
Układy o pojemności 64 Mb, spotykane często w modułach o pojemnościach 16 MB lub większych, zwłaszcza w komputerach typu notebook.
256 M razy 1 bit
(lub 64 M razy 4 bity)
Układy o pojemności 256 Mb, które pojawiły się na rynku w ostatnim czasie. Pozwalają na budowę modułów SIMM o pojemności ponad 128 MB! Z powodu wysokiej ceny i ograniczonej dostępności można je spotkać jedynie w najdroższych i największych dostępnych obecnie modułach pamięci.

Rysunek 7.8 przedstawia wygląd typowego układu pamięci RAM. Każde z oznaczeń na układzie niesie ze sobą jakąś informację.

Rysunek 7.8.

Oznaczenia na typowym układzie pamięci RAM

Przyrostek "–10" na układzie określa jego szybkość (czas dostępu), wyrażoną w nanosekundach (ten układ ma czas dostępu równy 100 ns). Symbol MB81256 jest numerem identyfikującym układ i zazwyczaj zawiera informację o pojemności kości pamięci. Cyfry 1256 wskazują na rozmiar 256 K słów 1-bitowych. Aby z takich układów uzyskać bank pamięci o szerokości jednego bajta, potrzebnych jest dziewięć takich układów. Układ oznaczony symbolem KM4164B-10 oznacza kość pamięci o pojemności 64 K razy 1 bit o czasie dostępu 100 ns. Poniższa lista przedstawia popularne układy pamięci i ich oznaczenia.

Symbol układu Pojemność pamięci
4164 64 K razy 1 bit
4464 64 K razy 4 bity
41128 128 K razy 1 bit
44128 128 K razy 4 bity
41256 256 K razy 1 bit
44256 256 K razy 4 bity
41000 1 M razy 1 bit
44000 1 M razy 4 bity

Układy o szerokości słowa większej niż jeden bit są stosowane do budowy banków składających się z mniejszej liczby układów niż 9, 18 czy 36 (w zależności od architektury). Np. w komputerze XT-286, który jest 16-bitowym komputerem AT, ostatnie 128 kB pamięci na płycie głównej jest bankiem składającym się tylko z sześciu układów; cztery z nich mają szerokość słowa równą 4 bity, a pozostałe dwa układy z bitami parzystości to układy jednobitowe. Szerokość słowa jest więc równa 18 bitom.

Litera "F", umieszczona pomiędzy dwoma kreskami na rysunku 7.8, jest znakiem firmy Fujitsu Microelectronics. Liczba 8609 oznacza datę produkcji (dziewiąty tydzień 1986 roku), podaną jednak według kalendarza juliańskiego. Dokładniejszych informacji o oznaczeniu układu może udzielić producent albo sprzedawca układu.

SIMM-y i DIMM-y również mają numery części, które mogą być trudne w odcyfrowaniu. Niestety, nie ma ogólnie przyjętego przemysłowego standardu nazywania takich modułów, więc jeśli chcesz precyzyjnie rozszyfrować numer części, musisz się skontaktować z producentem. Rysunek 7.9 przedstawia sposób numerowania modułów SIMM firmy Micron Technology (a także Crucial Technology).

Banki pamięci

Moduły pamięci (DIP, SIMM, SIPP i DIMM), znajdujące się na płycie głównej lub na kartach rozszerzających pamięć, są zorganizowane w banki. Dobrze jest znać rozmiar banku i jego usytuowanie na płycie głównej komputera, względnie na kartach rozszerzających.

Znajomość rozmiaru banku jest potrzebna przy rozszerzaniu pamięci komputera. Ponadto programy diagnostyczne informując o błędzie pamięci podają adres błędnej komórki jako adres w bajtach i numer bitu w komórce. Do użytkownika należy zidentyfikowanie na podstawie tej informacji błędnego banku pamięci.

Rysunek 7.9.

Typowa numeracja pamięci SIMM firmy Micron (Crucial Technology)

Rozmiar banku jest zazwyczaj związany z rozmiarem magistrali mikroprocesora. W tabeli 7.10 podano szerokości banków w zależności od typu komputera PC.

Odpowiednia liczba bitów, stanowiąca szerokość słowa banku, może być uzyskana jako zestawienie pojedynczych układów, modułów SIMM albo DIMM. Np. w komputerze 286 wykorzystującym bank 18-bitowy, pojedynczy bank można zbudować z 18 osobnych układów, o szerokości słowa 1 bit, albo z czterech 4-bitowych układów składających się na 16-bitowe słowo i dwóch układów 1-bitowych przechowujących bity parzystości.

Tabela 7.10. Rozmiary banków pamięci w zależności od typu komputera
Procesor Szerokość magistrali danych Rozmiar banku danych (bez bitów parzystości) Rozmiar banku danych (z bitami parzystości) Liczba 30-końcówk. modułów SIMM przypadaj. na jeden bank Liczba 72-końcówk modułów SIMM przypadaj. na jeden bank Liczba 168-końcówk. modułów SIMM przypadaj. na jeden bank
1 Gnd Gnd 85 Gnd Gnd Gnd
8088 8-bitowa 8 bitów 9 bitów 1 <1* <1*
8086 16-bitowa 16 bitów 18 bitów 2 <1* <1*
286 16-bitowa 16 bitów 18 bitów 2 <1* <1*
386SX, SL, SLC 16-bitowa 16 bitów 18 bitów 2 <1* <1*
386DX 32-bitowa 32 bity 32 bity 4 1 <1*
486SLC, SLC2 16-bitowa 16 bitów 18 bitów 2 <1* <1*
486SX, DX, DX2, DX4 32-bitowa 32 bity 32 bity 4 1 <1*
Pentium, MMX 64-bitowa 64 bity 64 bity 8 2 1
Pentium Pro, Pentium II 64-bitowa 64 bity 64 bity 8 2 1
* Pojedynczy moduł SIMM czy DIMM tworzy więcej niż jeden bank pamięci.

Do zapełniania banku pamięci w komputerach 486 potrzebne są cztery 30-końcówkowe SIMM-y lub jeden SIMM 72-końcówkowy. Każdy 72-końcówkowy moduł SIMM jest 32- lub 36-bitowy, w zależności od tego, czy obsługuje parzystość. Często możesz się zorientować, czy dany moduł SIMM obsługuje parzystość, po prostu licząc znajdujące się na nim układy. Do zbudowania 32-bitowego modułu SIMM potrzeba albo 32 osobnych, 1-bitowych układów, albo ośmiu układów 4-bitowych. Jeśli system obsługuje parzystość, moduł SIMM musi posiadać cztery dodatkowe bity (w sumie 36 bitów), w związku z czym znajduje się na nim dodatkowo jeden (4-bitowy) lub cztery (1-bitowe) układy zawierające bity parzystości.

Jak możesz sobie wyobrazić, 30-końcówkowe pamięci SIMM nie są zbyt dobre dla systemów 32- i 64-bitowych (na przykład 486 i Pentium), bo każdy bank trzeba byłoby obsadzać czterema lub ośmioma modułami. Jako że układy te mają pojemność 1, 4 lub 16 MB, w komputerze Pentium musiałoby się znajdować 8, 32 lub 128 MB pamięci, bez żadnych wartości pośrednich. Ponieważ wykorzystanie 32-końcówkowych SIMM-ów w 32- i 64-bitowych systemach wiąże się ze sztucznymi ograniczeniami możliwych pojemności pamięci, stosowanie tych układów nie jest zalecane. W 32-bitowym systemie (na przykład każdym komputerze PC z procesorem 486) wykorzystującym 72-końcówkowe SIMM-y każdy układ jest bankiem i może zostać wymieniony osobno, a nie – jak to było w przypadku 30-końcówkowych SIMM-ów – w grupach po cztery układy. Dzięki temu konfiguracja pamięci stała się znacznie prostsza i bardziej elastyczna. W nowoczesnych 64-bitowych systemach wykorzystujących 72-końcówkowe SIMM-y w skład każdego banku wchodzą dwa układy.

Układy DIMM są idealnym rozwiązaniem dla komputerów Pentium i nowszych, ponieważ tak samo jak magistrala procesora Pentium, są 64-bitowe. Oznacza to, że każdy moduł DIMM jest osobnym bankiem i może zostać dodany lub usunięty bez konieczności wyjmowania lub instalowania dodatkowych modułów. Liczba i położenie gniazd pamięci SIMM i DIMM na płycie głównej zależy od jej producenta. Bardzo przydatna jest tu dokumentacja dołączona do komputera, dzięki której możesz szybko się zorientować, jakie i ile gniazd pamięci znajduje się na płycie głównej.

Czas dostępu układów pamięci RAM

Czas dostępu pamięci RAM jest wyrażany w nanosekundach (ns – nanosekunda jest czasem, w jakim światło przebywa drogę 11,72 cali). W przypadku pamięci RAM w komputerach PC czas ten waha się do ok. 10 ns do 200 ns. Kiedy wymieniamy uszkodzony moduł pamięci, musimy go zastąpić modułem takiego samego typu i o takim samym czasie dostępu. Możemy w miejsce starego modułu umieścić inny moduł, ale jego czas dostępu musi być mniejszy lub równy czasowi dostępu starego modułu.

Czasami użytkownikom zdarzają się problemy podczas "mieszania" ze sobą w komputerze różnych modułów SIMM, ponieważ zastosowane układy nie spełniają minimalnych wymagań komputera (np. czas odświeżania) bądĽ też są fizycznie niekompatybilne z płytą pod względem rozmieszczenia końcówek, wysokości, szerokości czy typu modułu. Czas dostępu modułu zawsze może być niższy niż wymagany, pod warunkiem, że układy pamięci są odpowiedniego typu i spełniają wszystkie inne wymagania.

Zamiana układów pamięci na szybsze nie zawsze powoduje wzrost szybkości komputera, ponieważ płyta główna nadal komunikuje się z pamięcią z szybkością taką jak poprzednio. W komputerach, w których wymagania czasowe zostały zbyt "napięte", korzystanie z szybszych układów może przyczynić się do zwiększenia niezawodności pracy komputera.

To samo odnosi się do sytuacji, w której pamięć w komputerze po prostu nie działa bądĽ też nie jest wystarczająco szybka. Objawia się to zazwyczaj błędami parzystości albo zupełnym brakiem działania komputera. Błędy mogą być również zgłaszane przez program testujący POST. W razie wątpliwości, jakie układy pamięci są odpowiednie dla konkretnego komputera, skontaktujmy się z producentem sprzętu albo wiarygodnym dostawcą pamięci.

Złoto i cyna

Wielu ludzi nie docenia znaczenia metalu zastosowanego w wyprowadzeniach modułów SIMM i DIMM. Zarówno układy SIMM, jak i DIMM są produkowane w wersjach z końcówkami pokrytymi cyną i złotem. Początkowo wydawało mi się, iż SIMM-y i DIMM-y z pozłacanymi końcówkami oferują największą niezawodność w każdym wypadku, ale nie jest to prawdą. By uzyskać najbardziej niezawodny system, musisz zainstalować pamięci SIMM lub DIMM w gniazdach pokrytych tym samym metalem, co wyprowadzenia modułów. Jeśli zainstalujesz w pozłacanych gniazdach moduły z końcówkami pokrytymi cyną, po pewnym czasie wystąpią błędy pamięci. To samo dotyczy sytuacji odwrotnej – zainstalowania modułów z pozłacanymi końcówkami w gniazdach z wyprowadzeniami pokrytymi cyną. Według mojego doświadczenia, błędy zaczynają występować od 6 miesięcy do roku po instalacji modułów. Na problem ten natknąłem się już wielokrotnie zarówno w moich komputerach, jak i komputerach, które serwisowałem. Nawet zostałem poproszony o pomoc przez klienta, który kupił kilkaset komputerów od ich producenta i po roku od dostarczenia w systemach tych zaczęły się masowo pojawiać błędy pamięci. Było to spowodowane różnicą metali, którymi były pokryte wyprowadzenia gniazd i końcówki modułów (w tym wypadku pozłacane SIMM-y w pokrytych cyną gniazdach). Doszło do procesu, ponieważ producent odmówił wymienienia SIMM-ów na wersje o końcówkach pokrytych cyną.

W większości płyt głównych pod Pentium i 486 wyprowadzenia gniazd pamięci 72-końcówkowych modułów SIMM są pokryte cyną i należy w nich instalować moduły o końcówkach pokrytych tym samym metalem. Intel obecnie stanowczo odradza łączenie różnych metali w pamięci systemowej. Przeprowadzone przez producentów gniazd badania wykazały, że gdy cyna styka się bezpośrednio ze złotem lub jakimkolwiek innym metalem, zachodzi zjawisko nazwane korozją cierną. Korozja cierna zachodzi wówczas, gdy na powierzchnię złota przemieszcza się posiadający wysoką oporność tlenek cyny, który utrudnia lub nawet uniemożliwia przechodzenie ładunków elektrycznych. Zjawisko to występuje zawsze, bez względu na grubość warstwy złota. W miarę upływu czasu, zależnie od warunków otoczenia, prędzej czy póĽniej korozja wywoła dużą oporność w miejscu styku, co zaowocuje błędami pamięci.

Ktoś może w tym momencie pomyśleć, iż problemy wywołane są łatwym utlenianiem się cyny. Jednak w przypadku gdy stykają się ze sobą mocno dociśnięte dwie powierzchnie pokryte cyną, utrzymanie styku jest bardzo łatwe, ponieważ tlenki obu powierzchni wiążą się ze sobą, utrzymując kontakt. Szczególnie odnosi się to do modułów SIMM i DIMM, gdzie na miejsce styku przyłożony jest duży nacisk.

Gdy złoto i cyna stykają się ze sobą, jedna z powierzchni jest twarda, co powoduje, że utlenianie wzmacnia się i z powodu nacisku nie może się rozproszyć. Zwiększona oporność miejsca styku w pewnym momencie zaczyna wywoływać błędy pamięci. Dlatego właśnie przy instalacji pamięci nie powinno się łączyć ze sobą różnych metali.

AMP, producent złącz, opublikował wiele dokumentów omawiających to zagadnienie. Najważniejsze z nich to Golden Rules: Guidelines for the Use of Tin on Connector Contacts (Wskazówki na temat wykorzystania złota w złączach komputerowych) oraz The Tin Commandments: Guidelines for the Use of Tin on Connector Contacts (Wskazówki na temat wykorzystania cyny w złączach komputerowych). Oba dokumenty w formie pliku *.PDF można pobrać z witryny internetowej AMP, znajdującej się pod adresem http://www.ampincorporated.com/. W dokumencie dotyczącym stosowania cyny jest na przykład napisane (w zaleceniu 7) "Łączenie wyprowadzeń pokrytych cyną z wyprowadzeniami pokrytymi złotem nie jest zalecane". Więcej informacji technicznych możesz znaleĽć w polecanych przeze mnie witrynach internetowych Intela i AMP.

Najlepszym rozwiązaniem jest łączenie złota ze złotem, czyli umieszczenie w gniazdach z wyprowadzeniami pokrytymi złotem modułów pamięci z pozłacanymi końcówkami. W ten sposób jest zaprojektowana większość serwerów i innych cechujących się dużą niezawodnością systemów. Większość systemów wykorzystujących moduły SDRAM DIMM posiada pozłacane gniazda i w związku z tym wymaga korzystania z pamięci SDRAM o końcówkach pokrytych tym samym metalem.

Jeśli pamięci są pokryte innym metalem niż gniazda na płycie głównej, najlepszym rozwiązaniem będzie ich wymiana. Innym, mniej korzystnym wyjściem z sytuacji, które umożliwi w miarę normalną pracę, jest czekanie, aż pojawią się błędy (najczęściej od 6 miesięcy do roku). Wówczas należy wyjąć układy pamięci z gniazd, przeczyścić styki i umieścić je z powrotem w ich miejscach. Oczywiście czynność tę za jakiś czas znów będzie trzeba powtórzyć. Rozwiązanie to może być wystarczające dla użytkownika, który ma jeden lub dwa komputery, ale nie jest wystarczające dla firmy, która montuje setki systemów. W dodatku, jeśli w twoim komputerze nie ma pamięci z parzystością lub ECC (a tak jest w większości obecnie sprzedawanych komputerów), nie będziesz w stanie od razu się zorientować, że błędy (ogólne wyjątki ochrony, zawieszanie się komputera, uszkodzenia plików i danych itp.) są wywołane problemami z pamięcią.

Znajdujący się na warstwie złota osad tlenków cyny jest bardzo trudny do usunięcia i często trzeba go usuwać za pomocą na przykład gumki lub różu polerskiego. Usuwanie w ten sposób nalotu nigdy nie powinno być robione na sucho, ponieważ pocieranie powoduje powstanie ładunków elektrostatycznych, które mogą uszkodzić układ. Lekkie zwilżenie oczyszczanego miejsca zminimalizuje szansę uszkodzenia pamięci przez ładunki elektrostatyczne.

Są osoby, które zarzucają mi zbytnią ostrożność przy dobieraniu pamięci do gniazd. Często zdarzało się, że zwracałem pamięci lub płyty główne, jeśli producent nie wiedząc o problemie umieścił nieodpowiednie moduły w gniazdach pamięci. Gdy wyjaśniałem problem niektórym ludziom, twierdzili, że posiadali wiele komputerów PC z pamięciami pokrytymi innym metalem niż gniazda i komputery te działały prawidłowo przez wiele lat.

Jest to oczywiście bardzo mizerny argument usprawiedliwiający nieprawidłowe montowanie komputerów. Specyfikacje określają, że długość kabla drukarki nie może przekraczać 3 metrów, a widziałem wiele dłuższych kabli, których producenci twierdzili, że są "w porządku". Długość kabelka IDE nie może przekraczać 46 cm, ale ludzie nie zwracają na to uwagi, uważając że ich dyski "będą działać prawidłowo". Czasem spotykam się z tanimi zasilaczami, które nie dość że są głośne i mają nieprawidłowo ustawione poziomy napięć, to jeszcze przepuszczają do uziemienia napięcie rzędu 69 V – ale oczywiście komputery zasilane nimi "działają prawidłowo". Widziałem już mnóstwo komputerów bez odpowiedniego radiatora chłodzącego procesor lub z aktywnym radiatorem, w którym zablokował się wentylatorek – komputery te, jakżeby inaczej, działały "bez żadnych problemów". Przypomina mi to wywiad przeprowadzony przez Johny’ego Carsona ze stuletnim człowiekiem, który stwierdził, iż przez całe życie codziennie dużo pił i palił i właśnie temu zawdzięcza długowieczność!

Prawdą jest, że często bywam zdumiony, iż tak Ľle zaprojektowane lub zmontowane komputery jeszcze działają... zazwyczaj. Sporadyczne zawieszanie się i nieprawidłowe działanie komputera jest traktowane przez użytkownika w myśl zasady "takie rzeczy przydarzają się wszędzie". Być może wszędzie, ale nie w moich komputerach. Projektując i składając moje komputery często stosuję kryteria nawet ostrzejsze, niż wynikałoby to ze specyfikacji części. Choć zwiększa to koszty produkcji, komputery działają dzięki temu lepiej.

Innymi słowy, może się zdarzyć, że jakiś komputer będzie działał prawidłowo, nawet jeśli zostaną w nim zastosowane rozwiązania przekraczające specyfikację poszczególnych komponentów – jednak nie ma żadnej gwarancji, że wszystkie, a nawet większość złożonych w ten sposób komputerów zadziała poprawnie. Dlatego, jeśli sprzedajesz wiele komputerów, które powinny być jak najmniej zawodne, ponieważ mogą na przykład zostać wykorzystane jako serwery, metal wykorzystany w wyprowadzeniach gniazd i modułów pamięci ma znaczenie.

Innym zagadnieniem, które przyciągnęło moją uwagę, jest grubość warstwy złota na wyprowadzeniach; ludzie często obawiają się, że jest ona zbyt cienka i zetrze się po jednym czy dwóch wyjęciach modułów pamięci. Z całą pewnością grubość warstwy złota została dobrana tak, by spełniła wymagania trwałości związane z zastosowaniem układu, choć oczywiście z powodu wysokich cen złota, w interesie producenta leży, by warstwa pozłoty była tak mała, jak tylko jest to możliwe.

W celu zwiększenia trwałości warstwy złota, często dodaje się do niej niewielkie ilości kobaltu lub niklu. Taka warstwa jest nazywana "twardym złotem" i jest bardzo odporna na ścieranie. Złącza pokryte twardym złotem wytrzymują zazwyczaj od kilkuset do kilku tysięcy instalacji. Ich trwałość można jeszcze polepszyć stosując podwarstwę z twardszego od złota metalu, którym najczęściej jest nikiel. Trwałość warstwy złota można również zwiększyć stosując środki zmniejszające tarcie.

Trwałość złącza polepsza również zwiększenie grubości warstwy twardego złota. Poniższe rezultaty są wynikiem przeprowadzonych przez AMP testów laboratoryjnych na ścieranie warstwy twardego złota ocieranej o niklową płytkę o grubości 1,3 mikrona (50 mikrocali). Dane zostały uzyskane dla kuli o średnicy 0,635 cm (0,25 cala) ocieranej podczas każdego cyklu z siłą 100 gramów na przestrzeni 1,27 cm (0,5 cala).

Grubość warstwy w mikronach Grubość warstwy w mikrocalach Ilość cykli do wystąpienia błędu
0,4 15 200
0,8 30 1000
1,3 50 2000

Jak wynika z tabeli, warstwa twardego złota o grubości 0,8 mikrona (30 mikrocali) jest więcej niż wystarczająca i umożliwia wykonanie 1000 cykli wyjęcia i ponownego umieszczenia modułów w gniazdach pamięci. Po przeanalizowaniu specyfikacji produkowanych przez AMP gniazd SIMM i DIMM stwierdziłem, że są one w większości pokryte warstwą złota o grubości 0,8 mikrona na mierzącej 1,3 mikrona warstwie niklu w punkcie styku. Na ile mogłem stwierdzić, w praktycznie wszystkich wyprowadzeniach modułów SIMM i DIMM stosuje się warstwę o podobnej grubości i trwałości.

AMP posiada również kilka gniazd pamięci w wersji z warstwą złota o grubości 1,020 mikrocala położoną na warstwie niklu o grubości 1,270 mikrocala. Podejrzewam, że gniazda te były przeznaczone do na przykład urządzeń testujących układy pamięci, które muszą wytrzymać znacznie więcej instalacji modułów. Gniazda te można byłoby też stosować w środowiskach o dużej wilgotności lub w dużym stopniu narażonych na wibrację.

Dla porównania, we wszystkich gniazdach SIMM i DIMM pokrytych cyną, warstwa tego metalu nie może być mniejsza od 30 mikrocali w miejscu styku, a warstwa niklu musi wynosić co najmniej 50 mikrocali.

Rozmiar warstwy naniesionego metalu nie ogranicza zastosowań modułów pamięci. Nie ma on również wpływu na problemy związane ze stykaniem się cyny ze złotem. Jedyną wadą cieńszej warstwy złota jest to, że zetrze się po mniejszej liczbie cykli instalacji, przez co znajdujący się pod nią nikiel może ulec korozji.

Według mnie, problem związany z łączeniem złota z cyną może mieć jeszcze większe znaczenie w przypadku modułów DIMM. Jest tak z dwóch powodów. Moduły SIMM mają dwa połączenia dla każdej końcówki (po jednym z każdej strony modułu), więc jeśli któreś z połączeń ulegnie korozji ciernej, nie będzie to miało tak dużego znaczenia. Moduły DIMM mają o wiele więcej końcówek (168, a nie 72), które w dodatku nie mają swoich odpowiedników po drugiej stronie modułów. Dodatkowo, w większości modułów DIMM zastosowano układy SDRAM, których taktowanie dla 66- i 100-megahercowych płyt głównych zostało skrócone do 15–10 ns. Przy tych częstotliwościach każda dodatkowa, najmniejsza nawet oporność w miejscu połączenia wywoła problemy.

Z tych właśnie powodów, w przyszłości będę korzystał wyłącznie z płyt głównych ze złączami SIMM lub DIMM o wyprowadzeniach pokrytych złotem i, oczywiście, z modułów pamięci o końcówkach pokrytych tym samym metalem. Zauważyłem, że na przykład Micron produkuje układy DIMM wyłącznie w wersji z końcówkami pokrytymi złotem. Również wyprowadzenia wszystkich gniazd DIMM, jakie do tej pory widziałem, były także pozłacane. W tej chwili nie polecam kupowania żadnej płyty głównej, w której wyprowadzenia złącz SDRAM DIMM byłyby pokryte cyną; nie polecam również kupowania pokrytych tym metalem DIMM-ów.

Niezawodność pamięci

Z naturą pamięci wiążą się nieuchronne błędy. Często wyróżnia się dwa rodzaje błędów: błędy ciężkie i błędy miękkie.

Najlepiej zbadane i zrozumiane są błędy ciężkie, w których układ po pewnym okresie działania odmawia dalszej pracy z powodu wad produkcyjnych, fizycznych uszkodzeń lub z innych przyczyn. Naprawa tego typu błędu zazwyczaj ogranicza się do wymiany uszkodzonych modułów pamięci. Błędy te są określane nazwą HER.

Innym, bardziej tajemniczym typem błędu są błędy miękkie. Miękki błąd jest błędem przejściowym, który może nigdy ponownie nie nastąpić lub pojawiać się w nieregularnych odstępach czasu. (Miękkie błędy są skutecznie "naprawiane" poprzez wyłączenie i ponowne włączenie systemu). Często są one określane skrótem SER.

Około 20 lat temu Intel dokonał odkrycia, które zaszokowało producentów układów RAM i spowodowało, iż zaczęli zwracać większą uwagę na miękkie błędy pamięci. Zauważył on bowiem, że bombardowanie cząsteczkami alfa dostępnych w tym czasie 16-kilobajtowych układów DRAM wywoływało duże zwiększenie się częstotliwości występowania miękkich błędów. Ponieważ cząsteczki te mają małą energię i mogą zostać zatrzymane nawet przez coś tak cienkiego i delikatnego jak kartka papieru, stało się jasne, iż cząsteczki alfa wywołujące miękkie błędy pamięci w warunkach pozalaboratoryjnych muszą pochodzić z materiału półprzewodników. Po przeprowadzeniu testów okazało się, że w plastikowych i ceramicznych materiałach wykorzystywanych w tym czasie do produkcji obudów układów znajdują się śladowe ilości uranu i toru. Zmusiło to producentów pamięci do opracowania technologii umożliwiającej produkcję wolnych od zanieczyszczeń materiałów.

Dzięki temu, że producenci pamięci całkowicie wyeliminowali miękkie błędy wywoływane cząsteczkami alfa, wielu ludzi uwierzyło, iż kontrola parzystości stała się zbędna. Argumentem za tym były na przykład wyniki badań, z których wynikało, że wywołany przez cząsteczki alfa miękki błąd 16-megabajtowego modułu pamięci przydarza się raz na 16 lat! Niestety, argument ten znalazł uznanie producentów komputerów, którzy zaczęli usuwać z produkowanych przez siebie systemów kontrolę parzystości i inne mechanizmy mające na celu wykrywanie i poprawianie miękkich błędów pamięci. Tymczasem, jak wykazują najnowsze odkrycia, błędy wywołane cząsteczkami alfa są tylko małym ułamkiem wszystkich miękkich błędów DRAM!

Po ich wyeliminowaniu, najczęstszą przyczyną występowania miękkich błędów stało się promieniowanie kosmiczne. Naukowcy firmy IBM rozpoczęli badania nad możliwością wywoływania miękkich błędów pamięci przez promieniowanie kosmiczne, podobnie jak analizowali problemy z cząsteczkami alfa. Promieniowanie kosmiczne różni się od cząsteczek alfa tym, że ma dużo większą energię i nie może zostać zatrzymane przez kartkę papieru ani inne, bardziej masywne typy osłon. Badania te prowadził Dr J.F. Ziegel z IBM Watson Research Center, znajdującym się w Yorktown Heights, w Nowym Jorku. Przeprowadzone przez niego badania okazały się kamieniem milowym w zrozumieniu wpływu promieniowania kosmicznego na występowanie miękkich błędów pamięci.

Doskonałym przykładem ilustrującym wagę wpływu tego promieniowania na występowanie miękkich błędów pamięci, jest jedno z przeprowadzonych przez niego badań, któremu została poddana próbka modułów DRAM nie wyprodukowanych przez IBM. Współczynnik miękkich błędów pamięci (SER) mierzony w warunkach rzeczywistej pracy wyniósł 5950 FIT (błędów w danym okresie, którym był w tym wypadku miliard godzin pracy) na układ. Oznacza to, że w przeciętnym systemie, który zazwyczaj posiada w modułach SIMM około 36 układów pamięci, miękki błąd pojawi się co 6 miesięcy! W systemach z dużymi ilościami pamięci, na przykład serwerach plików, może to być nawet ponad 1 błąd miesięcznie. Następnie, taka sama próbka została przeniesiona do schronu oddzielonego od powierzchni ziemi 15 metrami skały, dzięki czemu całkowicie wyeliminowano wpływ promieniowania kosmicznego. Po powtórzeniu tej samej procedury testującej nie wykryto ani jednego miękkiego błędu! To doświadczenie nie tylko wykazało wagę wpływu promieniowania kosmicznego na moduły pamięci, ale i udowodniło, że problem błędów wywoływanych przez cząsteczki alfa został w pełni rozwiązany.

Układy pamięci statycznej SRAM są bardziej podatne na błędy wywołane promieniowaniem kosmicznym niż układy DRAM, ponieważ ładunek wymagany do przełączenia stanu komórki pamięci jest w nich znacznie mniejszy. Promieniowanie kosmiczne jest również groĽniejsze dla układów pamięci o większej gęstości. W miarę zwiększania się gęstości układu zwiększa się również szansa na przełączenie stanu bitu pamięci przez zabłąkaną cząsteczkę. Przewiduje się, że współczynnik występowania miękkich błędów 64-megabajtowych układów DRAM będzie dwa razy większy niż w układach 16-megabajtowych. Dla 256-megabajtowych układów DRAM współczynnik ten będzie większy cztery razy.

Niestety, większość producentów komputerów PC nie zwróciła uwagi na nową przyczynę błędów pamięci. Ponieważ miękkie błędy występują nieregularnie i w różnych warunkach, winą za nie obarczano wyładowania elektrostatyczne, skoki zasilania czy też niestabilność oprogramowania, szczególnie po ukazaniu się nowego systemu operacyjnego lub większych aplikacji.

Badania wykazały, że częstotliwość występowania miękkich błędów pamięci w komputerach z ECC była około 30 razy większa od częstotliwości występowania błędów ciężkich. Dla tych, którzy znają wpływ promieniowania kosmicznego na układy pamięci, taki wynik nie jest niczym zaskakującym. Obecne dane sugerują, że rozwiązania zastosowane w niektórych 16-megabajtowych układach pamięci mogą zwiększyć liczbę miękkich błędów do 24000 w ciągu miliarda godzin. Oznacza to, że w większości dzisiejszych komputerów występowałby jeden miękki błąd miesięcznie!

Jak możemy sobie poradzić z tymi błędami? Z całą pewnością nie jest najlepszym pomysłem ich ignorowanie, choć właśnie tak obecnie postępuje wielu producentów i sprzedawców. Najlepszym sposobem radzenia sobie z nimi jest zwiększenie odporności komputera na błędy. Jak? Najlepiej poprzez wprowadzenie do komputerów mechanizmów wykrywających i, jeśli tylko jest to możliwe, korygujących powstałe błędy. W nowoczesnych komputerach stosuje się trzy rozwiązania pamięci, charakteryzujące się różną odpornością na przekłamania bitów. Układy pamięci mogą więc być:

  • bez parzystości

  • z parzystością

  • z kodem korekcji błędów (Error Correcting Code, w skrócie ECC)

Systemy z pamięcią bez kontroli parzystości nie mają żadnej odporności na błędy. Z układów tych korzysta się tylko dlatego, że są najtańsze. Ich konstrukcja nie wymaga przeznaczania dodatkowej pamięci na techniki kodu korekcji błędów lub na bity parzystości. Ponieważ na każdy bajt pamięci z parzystością przypada 9 bitów, a na tę samą pojemność układu bez parzystości – tylko 8, układy bez parzystości są tańsze o 12,5 procent. Uproszczony jest również ich kontroler pamięci, ponieważ nie musi posiadać dodatkowych bramek logicznych obliczających parzystość lub sprawdzających kontrolne bity ECC. Systemy przenośne dzięki brakowi kontroli parzystości zużywają mniej energii, ponieważ moduły pamięci są zbudowane z mniejszej liczby układów. Odciążona jest również systemowa magistrala pamięci, dzięki czemu można zmniejszyć rozmiar buforów danych. Statystyczne prawdopodobieństwo wystąpienia miękkiego błędu pamięci w typowym komputerze domowym i biurowym, w zależności od wykorzystanych w nim układów, waha się w granicach jednego błędu na kilka miesięcy.

Taki współczynnik prawdopodobieństwa wystąpienia błędu może być wystarczający dla niezbyt wydajnych, tanich komputerów, na których nie uruchamia się spełniających ważne zadania aplikacji. W tym wypadku, rzeczywiście duża konkurencyjność cen może usprawiedliwiać rezygnację z droższych układów pamięci z ECC czy też parzystością.

W każdym razie, wielu producentów nie umieszcza w komputerach mechanizmów umożliwiających rozpoznanie i naprawienie błędów pamięci, ponieważ uważa, że błędy te są na tyle rzadkie, iż nawet jeśli jakiś błąd się pojawi, to konsekwencje jego wystąpienia będą niższe od ceny dodatkowych układów wymaganych do przeprowadzenia korekcji. Oczywiście wcale tak być nie musi – błąd pamięci może na przykład wywołać pomyłkę w obliczeniach komputera bankowego albo zawiesić komputer pracujący jako serwer, który pociągnie za sobą wszystkie połączone z nim systemy. W systemie pozbawionym parzystości lub ECC trudno jest nawet rozpoznać błąd pamięci – tego problemu nie ma w systemach z parzystością lub kodem korekcji błędów. Mechanizmy te umożliwiają przynajmniej stwierdzenie, że błąd został wywołany przez przekłamanie pamięci, oszczędzając czas i koszty związane z wyjaśnianiem Ľródła problemu,

Kontrola parzystości

Jednym ze standardów, narzuconych branży komputerowej przez firmę IBM, jest jeden wyróżniony układ wśród dziewięciu układów tworzących bank pamięci: osiem układów odpowiada ośmiu bitom w bajcie, natomiast bit dziewiątego układu jest tzw. bitem parzystości (ang. parity bit). Z bitu tego korzysta układ kontroli pamięci, który obserwuje poprawność pozostałych ośmiu bitów. Jest to mechanizm kontroli integralności każdego bajta danych pamiętanego w komputerze. Jeżeli układ kontroli błędów wykryje błąd pamięci, praca komputera zostaje wstrzymana, a na ekranie zostaje wyświetlony komunikat informujący o zaistniałej niesprawności. Jeżeli komputer pracuje w nowszym systemie operacyjnym, takim jak Windows czy OS/2, błąd parzystości objawi się zawieszeniem komputera. Po ponownym uruchomieniu komputera błąd ten zostanie wykryty przez BIOS, po czym zostanie wyświetlony odpowiedni komunikat.

Zarówno moduły SIMM, jak i DIMM są dostępne w wersjach z bitami i bez bitów parzystości. Początkowo układy z kontrolą parzystości stosowano we wszystkich komputerach PC. W 1994 r. na rynku komputerów PC pojawiła się niepokojąca tendencja do produkowania i sprzedawania komputerów PC bez żadnych mechanizmów umożliwiających naprawienie lub chociaż wykrycie błędów pamięci. W komputerach tych zaczęto stosować układy SIMM pozbawione bitów parzystości, które były tańsze o około 10–15 procent. Parzystość pamięci nie umożliwia poprawienia błędu, ale przynajmniej informuje o jego zaistnieniu. Dzięki niej:

  • użytkownik jest poinformowany o błędzie obliczeń bazujących na przekłamanych danych.

  • od razu wiadomo, że błąd został spowodowany przez pamięć, co ułatwia serwisowanie komputera.

Komputery PC z łatwością można zaprojektować tak, by działały zarówno z pamięciami posiadającymi bity parzystości, jak i nie posiadającymi ich. Właściwie nie ponosi się żadnych dodatkowych kosztów związanych z dostosowaniem płyty głównej do pracy z układami pamięci posiadającymi parzystość, a dzięki takiemu rozwiązaniu to użytkownik podejmowałby decyzję, czy chce wydać o 10–15 procent więcej na układy pamięci i mieć je w wersji z parzystością, czy też zadowoli się tańszym rozwiązaniem.

Niestety wiele dużych firm zaczęło sprzedawać tańsze systemy, nie afiszując się z tym, że niższa cena ich komputerów wynika z zastosowania pamięci bez bitów parzystości. Proces ten rozpoczął się głównie w latach 1994–1995, gdy bardzo niewielu ludzi w pełni zdawało sobie sprawę ze znaczenia mechanizmów informujących o błędach. Kilku większych producentów dzięki stosowaniu tańszych układów obniżyło ceny swoich komputerów, co zmusiło inne firmy, chcące zachować konkurencyjność, do podążenia za nimi.

Ponieważ nikomu nie zależało na rozgłaszaniu tej informacji, pozostawała ona małym sekretem producentów. W początkowym okresie tego procesu, mogłeś przy zamawianiu systemu zażądać pamięci z kontrolą parzystości, nawet jeśli nie była ona wyposażeniem standardowym. Zwiększało to o 10–15 procent cenę pamięci, ale ci, którym zależało na posiadaniu stabilnego systemu, byli gotowi tę kwotę zapłacić, o ile oczywiście wiedzieli, o co pytać. I wtedy właśnie na rynku ukazał się pierwszy chipset, w którym w ogóle nie zaimplementowano mechanizmów kontroli parzystości! Chipsetem tym był Triton 430FX Intela. Triton stał się bardzo popularny, były na nim oparte praktycznie wszystkie płyty główne sprzedane w 1995 roku. To wyznaczyło niepokojący kierunek rozwoju rynku na kilka kolejnych lat. Nie licząc Tritona II (430HX), wszystkie chipsety Intela wyprodukowane po ukazaniu się chipsetu 430FX nie obsługiwały pamięci z kontrolą parzystości. Dobrą nowiną jest natomiast to, że wszystko wskazuje, iż okres ten dobiegł już końca i producenci płyt głównych zaczęli doceniać znaczenie mechanizmów kontroli błędów pamięci. Dzięki temu, większość chipsetów Pentium Pro i Pentium II obsługuje parzystość lub ECC i coraz więcej ludzi stwierdza, że warto wydać więcej pieniędzy na takie pamięci. Zaprojektowano co prawda również chipset Pentium II pozbawiony mechanizmów kontroli pamięci, ale jest on przeznaczony na rynek tanich komputerów, poniżej 3000 zł, w którym nie niezawodność jest najważniejsza, lecz cena.

Zobaczmy, w jaki sposób działają mechanizmy kontroli parzystości, a następnie bardziej szczegółowo przyjrzyjmy się jej następcy, kodowi korekcji błędów, który nie tylko wykrywa, ale i na bieżąco poprawia błędy pamięci.

Standard kontroli pamięci wprowadzony przez firmę IBM jest tak naprawdę kontrolą nieparzystości. Istotę kontroli nieparzystości pomoże wyjaśnić następujące rozumowanie: Kiedy w pamięci zapisywanych jest 8 osobnych bitów, układ generoowania bitu parzystości, który jest częścią procesora bądĽ też znajduje się w osobnym układzie na płycie głównej, zlicza ilość jedynek w bajcie (8 bitach). Jeżeli w bajcie ilość jedynek jest parzysta, generowany jest bit o wartości 1, który jest następnie zapamiętywany jako 9. bit w układzie przechowującym bity parzystości. Dzięki temu suma wszystkich 9 bitów jest liczbą nieparzystą. Jeżeli oryginalna suma ośmiu bitów danych jest liczbą nieparzystą, generowany jest bit parzystości o wartości 0, a tym samym suma wszystkich dziewięciu bitów jest nieparzysta. Wartość bitu parzystości jest zawsze ustawiana tak, że suma wszystkich 9 bitów (8 bitów danych i jeden bit parzystości) jest liczbą nieparzystą. 8 bitów danych w bajcie jest numerowanych następująco: 0 1 2 3 4 5 6 7. W zrozumieniu zagadnienia pomogą poniższe przykłady:

Numer bitu danych:        0 1 2 3 4 5 6 7        Bit parzystości
Wartość bitu danych:      1 0 1 1 0 0 1 1        0

W powyższym przykładzie liczba bitów równych jeden jest liczbą nieparzystą (5), dlatego bit parzystości musi być równy 0, aby suma wszystkich 9 bitów była nieparzysta.

Kolejny przykład:

Numer bitu danych:        0 1 2 3 4 5 6 7        Bit parzystości
Wartość bitu danych:      0 0 1 1 0 0 1 1        1

W powyższym przykładzie liczba bitów równych jeden jest liczbą parzystą (4), dlatego bit parzystości musi być równy 1, aby suma wszystkich 9 bitów była nieparzysta.

Kiedy odczytywana jest zawartość komórki pamięci, komputer sprawdza informację o parzystości. Jeżeli w bajcie (9 bitów) znajduje się parzysta ilość jedynek, a bit parzystości ma wartość 1, oznacza to wystąpienie błędu. Komputer nie potrafi określić, na którym bicie nastąpiło przekłamanie ani czy zmienił się tylko pojedynczy bit. Np. jeżeli zmieniły się naraz trzy bity, to bit parzystości będzie nadal wskazywał na pojawienie się błędu, jednak zmiana dwóch bitów może nie zostać zauważona. Kolejny przykład pokazuje komunikaty o błędach kontroli parzystości w trzech różnych typach komputerów:

IBM PC:                              PARITY CHECK x
IBM PC XT:                           PARITY CHECK x         yyyyy (z)
IBM PC AT i póĽniejsze modele XT:    PARITY CHECK x         yyyyy

Gdzie x przyjmuje wartość 1 albo 2:

  • 1 = błąd w odczycie z pamięci płyty głównej

  • 2 = błąd w odczycie z pamięci karty rozszerzającej

yyyyy jest liczbą szesnastkową z zakresu 00000 – FFFFF, wskazującą na bajt pamięci, przy odczycie którego wystąpił błąd parzystości.

x ma postać (S) albo (e)

  • (S) = błąd parzystości dotyczy jednostki komputera (ang. system unit)

  • (e) = błąd parzystości dotyczy specjalnych gniazd rozszerzających IBM (ang. expansion chassis)
Rozwiązanie znane jako expansion chassis było opcją w oryginalnych komputerach PC i XT firmy IBM, zwiększającą ilość gniazd rozszerzających w komputerze. Jednostka komputera składała się z płyty głównej w tzw. formacie backplane z ośmioma gniazdami, z których jedno zawierało specjalną kartę (ang. extender/receiver card) połączoną kablem z podobną kartą znajdującą się w jednostce głównej komputera. Dzięki temu zyskiwało się sześć dodatkowych gniazd rozszerzających.

W momencie wykrycia błędu parzystości płyta główna komputera generuje przerwanie niemaskowalne (NMI), które powoduje wstrzymanie procesora i przekazuje obsługę błędu procesorowi. Następnie wykonywana jest odpowiednia procedura BIOS-u. Procedura ta czyści ekran i wyświetla komunikat w lewym górnym rogu. Komunikat ten może mieć różną postać, w zależności od typu komputera. W przypadku niektórych starszych komputerów IBM procedura obsługi przerwania powoduje wstrzymanie pracy procesora. Następuje wówczas zawieszenie się komputera i użytkownik musi ręcznie go zrestartować albo włączyć i wyłączyć zasilanie. Niestety, powoduje to utratę wszystkich danych, które nie zostały zapisane na dysku.

W większości komputerów w momencie wykrycia błędu parzystości nie następuje wstrzymanie pracy procesora. Zamiast tego użytkownik może wybrać, czy chce zrestartować komputer, czy też kontynuować pracę, tak jakby nic się nie stało. Ponadto forma i treść komunikatu wyświetlanego przy błędzie parzystości może się różnić od komunikatu w komputerze IBM, chociaż wyświetlane są te same informacje. Np. w wielu komputerach wyposażonych w BIOS firmy Phoenix komunikat ten będzie miał następującą postać:

Memory parity interrupt at xxxx:xxxx
Type (S)shut off NMI, Type (R)eboot or other keys to continue

Lub

I/O card parity interrupt at xxxx:xxxx
Type (S)shut off NMI, Type (R)eboot or other keys to continue

Pierwszy z dwóch komunikatów oznacza błąd parzystości pamięci na płycie głównej (Perity Check 1), podczas gdy drugi oznacza błąd pamięci na kartach rozszerzających (Parity Check 2). Zauważmy, że adres komórki pamięci w komunikacie jest podawany w formacie segment:przesunięcie, a nie jako adres liniowy, co następuje w komputerze IBM. Format segment:przesunięcie również określa lokalizację w pamięci z dokładnością do jednego bajta.

Po wyświetleniu na ekranie takiego komunikatu można zrobić trzy rzeczy:

  • Nacisnąć klawisz S, co spowoduje wyłączenie kontroli parzystości i wznowi pracę systemu operacyjnego w miejscu, w którym nastąpiło jego zatrzymanie.

  • Nacisnąć klawisz R, co wymusi restart komputera i spowoduje utratę nie zapisanych danych.

  • Naciśnięcie każdego innego klawisza spowoduje wznowienie pracy komputera z włączoną kontrolą parzystości.

Jeżeli problem się powtórzy, może ono spowodować kolejne przerwanie niemaskowalne. W większości przypadków najroztropniejszym wyjściem będzie naciśnięcie klawisza S, co spowoduje wyłączenie kontroli parzystości i pozwoli nam na zapisanie danych na dysku. Najlepiej byłoby zapisać efekty naszej pracy na dyskietce, co pozwoli nam uniknąć utrwalenia błędnych danych na dysku. Nie powinniśmy również nadpisywać (ang. overwriting) poprzedniej wersji pliku, gdyż z powodu błędu w pamięci moglibyśmy zapisywać do pliku błędne dane. Kontrolę parzystości mamy wyłączoną, tak więc operacja zapisu na dysk nie powinna zostać przerwana. Następnie powinniśmy wyłączyć komputer, włączyć go ponownie i uruchomić programy diagnostyczne, które mogłyby dokładnie określić błąd. Czasami może się zdarzyć, że błąd zostanie wykryty w czasie testu POST przy następnym uruchamianiu komputera, jednak w większości przypadków do zlokalizowania błędu powinniśmy skorzystać z usług bardziej zaawansowanych programów diagnostycznych, najlepiej w trybie ciągłym (ang. contionuous mode).

Jeżeli w komputerze jest BIOS firmy AMI, wyświetlany komunikat ma następującą postać:

ON BOARD PARITY ERROR ADDR (HEX) = (xxxxx)

lub też

OFF BOARD PARITY ERROR ADDR (HEX) = (xxxxx)

Komunikaty te wskazują na błąd pamięci w czasie wykonywania testu POST, a adres wskazuje na błędną komórkę pamięci. Pierwszy komunikat odnosi się do pamięci na płycie głównej, podczas gdy drugi informuje o błędzie pamięci na karcie rozszerzającej. AMI BIOS wyświetla komunikaty o błędzie parzystości w następującej postaci:

Memeory Parity Error at xxxxx

albo

I/O Card Parity Error at xxxxx

Komunikaty te mówią, że błąd pamięci nastąpił pod wskazanym adresem w czasie normalnej pracy. Pierwszy komunikat informuje o błędzie pamięci na płycie głównej, a drugi o błędzie pamięci na karcie rozszerzającej.

Wiele komputerów ma możliwość kontynuowania pracy po wystąpieniu błędu, a także możliwość wyłączenia kontroli parzystości. Jednak kontynuowanie pracy z komputerem po wykryciu błędu może być niebezpieczne. Przesłanką przemawiającą za pozostawieniem możliwości kontynuacji pracy było danie użytkownikowi czasu na zapisanie danych na dysku przed przystąpieniem do ewentualnej naprawy. BądĽmy jednak ostrożni w korzystaniu z tej możliwości!

Pamiętajmy, że komunikat o błędzie parzystości oznacza, że pamięć komputera zawiera błędne dane. Czy chcemy, aby błędne dane z pamięci zostały utrwalone na dysku? Jasne, że nie! Dlatego należy zachować dane w pliku o innej nazwie. Jeżeli to możliwe, powinniśmy zachować dane na dyskietce, ponieważ istnieje nieduże ryzyko uszkodzenia struktury logicznej dysku poprzez zapisanie na nim zawartości pamięci z błędami.

Po zapisaniu danych przystępujemy do ustalenia przyczyny błędu parzystości i naprawienia komputera. Pojawia się pokusa całkowitego wyłączenia kontroli parzystości i dalszej pracy jakby nic się nie stało. Takie postępowanie można porównać do wykręcenia kontrolki oleju w samochodzie, w którym wycieka olej, aby swoim świeceniem nie pogarszała nam samopoczucia.

ECC (Kod korekcji błędów)

ECC w porównaniu do wykrywania błędów pamięci za pomocą parzystości jest dużym krokiem naprzód. ECC nie tylko wykrywa błąd, ale i umożliwia poprawienie pojedynczego przekłamanego bitu, dzięki czemu komputer może kontynuować pracę, bez wstrzymywania systemu i bez uszkodzeń danych. Zaimplementowany w komputerach PC kod korekcji błędów nie potrafi poprawić błędów, w których przekłamaniu uległy dwa bity, choć jest w stanie je wykryć. Ponieważ badania wykazały, że w 98% błędów pamięci przekłamaniu ulegał tylko jeden bit, najpowszechniej stosowany typ ECC polega na wykorzystaniu pomocniczego kontrolera pamięci, który wykrywa i poprawia przekłamania pojedynczego bitu w odczytanym słowie danych (przekłamania dwóch bitów również są wykrywane, ale nie są poprawiane). Ten typ kodu korekcji błędów jest znany jako SEC-DED i wymaga stosowania 7 dodatkowych bitów na 32 bity w 4-bajtowym systemie, a ośmiu dodatkowych bitów w systemie 8-bajtowym. ECC w systemie 4-bajtowym najczęściej zabiera więcej niż parzystość, ale już w systemie 8-bajtowym koszty kodu korekcji błędów i parzystości są dokładnie takie same.

ECC wymaga, by kontroler pamięci obliczał podczas operacji zapisów wartości dodatkowych bitów, porównywał wynik z odczytaną wartością i w razie konieczności poprawiał przekłamania. Konieczność zastosowania dodatkowych układów logicznych ECC w kontrolerze pamięci nie ma już obecnie większego znaczenia, ale zastosowanie kodu korekcji błędów zmniejsza szybkość zapisów pamięci. Jest to spowodowane koniecznością oczekiwania na wynik obliczeń dodatkowych bitów. Przy zapisie części słowa, najpierw musi być odczytane całe słowo, póĽniej muszą zostać nadpisane zmienione bity, a na koniec obliczona nowa wartość bitów kontrolnych.

Większość błędów pamięci jest wywołana przekłamaniem pojedynczego bitu i może zostać poprawiona przez kod korekcji błędów. Dlatego zastosowanie ECC znacząco zwiększa niezawodność systemu. System wyposażony w kod korekcji błędów jest szczególnie dobrze przystosowany do pełnienia roli serwera, stacji roboczej czy też innego komputera, którego stabilna i poprawna praca usprawiedliwia dodatkowe koszty pamięci. Jeśli cenisz swoje dane i używasz komputera do ważnych (dla ciebie) zadań, powinieneś skorzystać z pamięci z kodem korekcji błędów. Projektując system współpracujący zarówno z pamięciami pozbawionymi parzystości, jak i z pamięciami posiadającymi ją lub wyposażonymi w kod korekcji błędów, pozostawia się użytkownikowi możliwość wyboru poziomu ochrony swoich danych i ceny, jaką ma zamiar za to zapłacić.

Rozszerzanie pamięci komputera

Spośród wszystkich sposobów "unowocześnienia" komputera, zwiększenie pamięci jest jednym z najbardziej użytecznych, a przy tym jednym z najtańszych, zwłaszcza gdy weĽmiemy się pod uwagę, jak wzrosną możliwości systemów Windows 95, Windows NT i OS/2 po rozszerzeniu pamięci. W niektórych przypadkach podwojenie ilości pamięci dostępnej w komputerze może wręcz podwoić szybkość komputera.

Układy pamięci są dostępne w różnych formatach i różnych rozmiarach pamięci, nas jednak będą interesować wyłącznie układy pamięci DRAM (dynamic random-access memory). Układy te należą do najbardziej rozpowszechnionych typów pamięci. Pamięci te przyjęło się określać jako "dynamiczne", ponieważ aby przechowywana w nich informacja nie została utracona, do układu trzeba kilkaset razy na sekundę dostarczać porcje energii. Jeżeli wyłączymy zasilanie komputera, to cała informacja jest bezpowrotnie tracona.

W tym podrozdziale omówimy rozszerzanie pamięci komputera, co obejmuje wybór odpowiednich układów pamięci, instalowanie ich w komputerze oraz testowanie zainstalowanej pamięci.

Możliwe strategie rozszerzania pamięci

Zwiększanie pamięci jest stosunkowo tanie – w momencie pisania tej książki cena wynosiła poniżej 1,50 $ za megabajt. Niewielki wydatek może dać komputerowi spory "zastrzyk" większych możliwości.

W jaki sposób możemy dodawać pamięć do komputera? Mamy trzy możliwości, uszeregowane według prostoty i kosztów:

  • Dodanie pamięci w wolne gniazda na płycie głównej.

  • Zastąpienie pamięci na płycie głównej pamięcią o większej pojemności.

  • Kupno karty rozszerzającej pamięć (najmniej efektywna i najdroższa metoda w obecnych czasach).

Dodawanie pamięci EMS w komputerach PC i XT nie jest dobrym pomysłem, przede wszystkim z powodu ceny – karta rozszerzająca z kilkoma megabajtami pamięci może kosztować więcej niż wynosi wartość całego komputera. Pamięć ta nie będzie działać w systemie Windows, komputer klasy PC czy XT nie może również pracować pod systemem OS/2. Należałoby raczej rozważyć zakup komputera o większej mocy obliczeniowej, np. niedrogiego zestawu Pentium 100. Możliwości rozszerzenia konfiguracji tego ostatniego są o wiele większe.

Jeżeli zdecydowaliśmy się na rozszerzenie pamięci w komputerze nowszym niż PC czy XT, musimy pamiętać, że nie jest możliwe przenoszenie pamięci z komputera PC czy XT do komputerów nowszych. 8-bitowe karty rozszerzające pamięć są bezużyteczne w komputerach AT i Micro Channel, a ich szybkość zazwyczaj jest niedostateczna na potrzeby nowych komputerów. W wielu nowych komputerach zamiast pojedynczych układów stosuje się szybkie moduły SIMM. Zbiór pojedynczych układów o czasie dostępu 150 ns i jednostkowej pojemności 64 kB czy 256 kB jest bezużyteczny, jeżeli nasz komputer wykorzystuje pamięć w postaci modułów SIMM czy innej formie, o czasie krótszym niż 70 ns.

Należy więc pogodzić przyszłe potrzeby zwiększenia mocy obliczeniowej komputera i chęć pracy w wielozadaniowych systemach operacyjnych z ilością gotówki, którą bylibyśmy skłonni przeznaczyć na rozbudowę komputera.

Zanim rozbudujesz pamięć komputera (lub wymienisz uszkodzone moduły pamięci), musisz określić, jakie układy należy w nim zainstalować. Potrzebne ci informacje znajdują się w dokumentacji komputera. Jeśli musisz wymienić uszkodzone moduły SIMM lub DIMM i nie posiadasz żadnej dokumentacji, możesz stwierdzić, jakie układy są ci potrzebne, sprawdzając te, które znajdują się już w komputerze. Na każdym module pamięci są naniesione oznaczenia informujące o jego czasie dostępu i pojemności. Zagadnienia związane z pojemnością i czasem dostępu pamięci zostały szczegółowo omówione we wcześniejszej części tego rozdziału.

Jeśli nie posiadasz dokumentacji sytemu, a jego producent nie oferuje pomocy technicznej, otwórz pokrywę komputera i dokładnie spisz wszystkie oznaczenia znajdujące się na modułach pamięci. Następnie skontaktuj się z najbliższym sklepem komputerowym lub serwisem, który powinien ci pomóc w ustaleniu, jakie moduły pamięci zostały zastosowane w komputerze. Zainstalowanie w komputerze nieprawidłowych modułów może spowodować jego uszkodzenie lub, jeśli się uruchomi, niestabilną pracę.

Zanim rozbudujesz pamięć komputera do ponad 64 MB, sprawdĽ, czy chipset płyty głównej będzie ją buforował. Jeśli chipset płyty głównej nie będzie mógł buforować dodanej pamięci, wydajność komputera raczej zmaleje, niż wzrośnie. Więcej informacji o tym częstym ograniczeniu możesz znaleĽć w sekcji "Pamięć podręczna – SRAM", wcześniej w tym rozdziale, lub w omówieniu chipsetów w rozdziale 6.

Wybór i instalacja pojedynczych układów pamięci oraz modułów SIMM i DIMM

Jeżeli przystępujemy do zwiększenia ilości pamięci na płycie głównej, to przede wszystkim powinniśmy przestrzegać zaleceń producenta dotyczących typu układów pamięci. Jak już była mowa wcześniej, fizyczna pamięć komputera jest dostępna w różnych formach: jako pojedyncze układy w obudowie typu DIP, moduły SIMM, SIPP czy DIMM. W komputerze wykorzystuje się jedną z tych odmian albo ich kombinację.

Bez względu na fizyczną formę pamięci komputera, układy pamięci w komputerze są zgrupowane w banki. Bank pamięci jest zbiorem układów pamięci, tworzących jednolity blok pamięci. Każdy taki blok może być odczytany przez procesor w pojedynczym cyklu dostępu do pamięci. Aby bank pamięci mógł funkcjonować, musi być wypełniony fizycznymi układami pamięci.

Umieszczanie dodatkowej fizycznej pamięci na płycie głównej komputera jest prostym sposobem zwiększenia pamięci komputera. W większości komputerów jest przynajmniej jeden nie wykorzystywany bank, w którym będzie można umieścić w przyszłości dodatkowe moduły i zwiększyć w ten sposób szybkość komputera.

Zastępowanie modułów SIMM i DIMM modułami o większej pojemności

Jeśli wszystkie gniazda pamięci płyty głównej są już obsadzone, najlepszym rozwiązaniem będzie zastąpienie wszystkich modułów pamięci jednego z banków modułami o większej pojemności. Jeśli na przykład posiadasz komputer Pentium z 16 MB pamięci w czterech modułach po 4 MB, możesz wymienić wszystkie 4-megabajtowe SIMM-y na moduły o pojemności 8 MB, rozbudowując dzięki temu pamięć komputera do 32 MB. Możesz również pozostawić dwa z już posiadanych 4-megabajtowych SIMM-ów i obsadzić drugi bank modułami 8-megabajtowymi, rozbudowując pamięć komputera do 24 MB. Pamiętaj jednak, że zawsze musisz obsadzać jednocześnie cały bank, który składa się z dwóch modułów pamięci o tej samej pojemności – nie możesz zainstalować w banku tylko jednego modułu lub modułów o różnej pojemności. Konieczność instalowania dwóch modułów nie dotyczy pamięci DIMM, ponieważ każda z nich jest pełnym bankiem.

Istnienie modułów pamięci o większej pojemności, pasujących do gniazd w twojej płycie głównej, wcale nie oznacza, że pamięci te muszą poprawnie działać z twoim komputerem. Chipset lub BIOS płyty głównej może ograniczać możliwości korzystania z układów o większej pojemności. Zanim więc kupisz nowe moduły pamięci, sprawdĽ w dokumentacji płyty głównej lub komputera, czy będziesz mógł z nich korzystać.

Typy układów pamięci RAM (pojemność)

Spotykane są układy pamięci RAM o różnych pojemnościach. Pojemność układu pamięci określa liczbę bitów, jaka może być zapamiętana w układzie. Np. w oryginalnym komputerze IBM PC układy pamięci RAM przechowywały 16 kilobitów danych i były to układy o najmniejszej ilości pamięci stosowane kiedykolwiek w komputerach PC. W oryginalnej wersji komputera XT układy RAM miały pojemność 64 kilobitów. Obecnie układy pamięci RAM, zgrupowane zazwyczaj w moduły SIMM, w komputerach z procesorem Pentium mają pojemność 4 megabitów lub 16 megabitów.

Zanim dodamy nowe układy pamięci do komputera (albo wymienimy stare układy na nowe), musimy określić typ układów wymaganych przez nasz komputer. Informację tę można znaleĽć w dokumentacji komputera.

Jeżeli musimy wymienić uszkodzony układ RAM, a nie mamy dokumentacji komputera, możemy określić typ układów odpowiedni dla danego komputera sprawdzając układy obecne już w komputerze. Każdy układ ma na obudowie napisy, które określają jego pojemność i czas dostępu. Oznaczenia układów o pojemności 1 M pochodzących od różnych producentów zebrano w tabelce:

Oznaczenie Producent
TMS4C1024N/DJ Texas Instruments
HM511100AP/AJP/AZP Hitachi
MB81C1000P/PJ/PSZ Fujitsu

Jeżeli nie mamy dokumentacji komputera i nie jest dostępna pomoc techniczna producenta, nie pozostaje nam nic innego jak otworzyć obudowę komputera i uważnie spisać oznaczenia poszczególnych układów. Następnie udajemy się do najbliższego sklepu komputerowego lub zwracamy się listownie do sprzedawcy układów z prośbą o dobranie układów RAM odpowiednich do naszego komputera. Umieszczenie w komputerze niewłaściwych układów spowoduje, że praca komputera będzie tak zawodna, jakby został pozostawiony w komputerze wadliwy układ pamięci.

Czas dostępu układów pamięci RAM

Układy RAM różnią się między sobą czasem dostępu. Np. w starszych komputerach były wykorzystywane układy o czasie 80 ns albo wolniejsze, a w komputerach 486 – układy 70 ns i 60 ns.

Odpowiednią szybkość układów pamięci w komputerze ustala producent płyty głównej. Np. firma IBM ustala różne szybkości pamięci w zależności od modelu komputera. W tabeli 7.11 zebrano czasy dostępu i liczbę cykli oczekiwania, jakich wymagają płyty główne IBM.

Tabela 7.11. Zależności czasowe płyt głównych firmy IBM
Komputer Procesor Częstotliwość procesora (MHz) Liczba cykli oczekiwania Czas dostępu (ns) Uwagi
PC 8088 4,77 1 200  
XT 8088 4,77 1 200  
AT 286 6 1 150  
AT 286 8 1 150  
XT-286 286 6 0 150 Brak cykli oczekiwania
PS/1 286 10 1 120  
25 8086 8 0 150 Brak cykli oczekiwania
30 8086 8 0 150 Brak cykli oczekiwania
25-286 286 10 1 120  
30-286 286 10 1 120  
35 SX 386SX 20 0–2 85 Stronicowanie pamięci
40 SX 386SX 20 0–2 85 Stronicowanie pamięci
L40 386SX 20 0–2 85 Stronicowanie pamięci
50 286 10 1 150  
50Z 286 10 0 85 Brak cykli oczekiwania
53486SLC2 486SLC2 10 0–2 70 Pamięć z przeplotem, 16 kB wewnętrznej pamięci cache
55 SX 386SX 50 0–2 100 Stronicowanie pamięci
56 486SLC3 486SLC3 16 0–2 70 Pamięć z przeplotem, 16 kB wewnętrznej pamięci cache
57 SX 386SX 75 0–2 70 Stronicowanie pamięci
57 486SLC3 486SLC3 20 0–2 70 Pamięć z przeplotem, 16 kB wewnętrznej pamięci cache
65 386SX 10 0–2 100 Stronicowanie pamięci
70 386DX 16 0–2 85 Stronicowanie pamięci
70 386DX 16 0–2 85 Stronicowanie pamięci
70 386DX 20 0–5 80 64 kB zewnętrznej pamięci cache
70 486DX 25 0–5 80 8 kB wewnętrznej pamięci cache
P70 386DX 16 0–2 85 Stronicowanie pamięci
P70 386DX 20 0–2 85 Stronicowanie pamięci
P75 486DX 33 0–5 70 8 kB wewnętrznej pamięci cache
76 486DX2 66 0–2 70 Pamięć z przeplotem, 8 kB wewnętrznej pamięci cache
76 486SX 33 0–2 70 Pamięć z przeplotem, 8 kB wewnętrznej pamięci cache
76 486DX4 100 0–2 70 Pamięć z przeplotem, 16 kB wewnętrznej pamięci cache
77 486DX2 66 0–2 70 Pamięć z przeplotem, 8 kB wewnętrznej pamięci cache
77 486SX 33 0–2 70 Pamięć z przeplotem, 8 kB wewnętrznej pamięci cache
77 486DX4 100 0–2 70 Pamięć z przeplotem, 16 kB wewnętrznej pamięci cache
80 386DX 16 0–2 80 Stronicowanie pamięci
80 386DX 20 0–2 80 Stronicowanie pamięci
80 386DX 25 0–5 80 64 kB zewnętrznej pamięci cache
90 486SX 20 0–5 70 Pamięć z przeplotem, 8 kB wewnętrznej pamięci cache
90 486SX 25 0–5 70 Pamięć z przeplotem, 8 kB wewnętrznej pamięci cache
90 486DX 25 0–5 70 Pamięć z przeplotem, 8 kB wewnętrznej pamięci cache, opcjonalnie 64 kB zewnętrznej pamięci cache
90 486DX 33 0–5 70 Pamięć z przeplotem, 8 kB wewnętrznej pamięci cache, opcjonalnie 64 kB zewnętrznej pamięci cache
90 486DX 50 0–5 70 Pamięć z przeplotem, 8 kB wewnętrznej pamięci cache, opcjonalnie 64 kB zewnętrznej pamięci cache
95 486SX 20 0–5 70 Pamięć z przeplotem, 8 kB wewnętrznej pamięci cache
95 486SX 25 0–5 70 Pamięć z przeplotem, 8 kB wewnętrznej pamięci cache
95 486DX 25 0–5 70 Pamięć z przeplotem, 8 kB wewnętrznej pamięci cache, opcjonalnie 64 kB zewnętrznej pamięci cache
95 486DX 33 0–5 70 Pamięć z przeplotem, 8 kB wewnętrznej pamięci cache, opcjonalnie 64 kB zewnętrznej pamięci cache
95 486DX 50 0–5 70 Pamięć z przeplotem, 8 kB wewnętrznej pamięci cache, opcjonalnie 64 kB zewnętrznej pamięci cache
Komputery kompatybilne z IBM powinny generalnie akceptować takie same układy pamięci jak ich odpowiedniki wymienione w tabelce. Układy wolniejsze niż 70 ns (60-nanosekundowe są szybsze) nie powinny być wykorzystywane w komputerach z procesorem Pentium (albo lepszym).

Dozwolone jest zainstalowanie w komputerze szybszych układów pamięci, niż wymaga płyta główna czy karty rozszerzające – zakup szybszych układów może okazać się dobrą inwestycją, jeżeli zamierzamy je w przyszłości wykorzystać w szybszym komputerze. Niestety, szybsza pamięć nie spowoduje przyśpieszenia pracy komputera, ponieważ architektura komputera przewiduje pracę z pamięcią o co najwyżej określonym czasie dostępu.

Czas dostępu układów pamięci jest wydrukowany na wierzchu obudowy układu. Na układach pamięci – bez względu na to, czy są to pojedyncze układy typu DIP czy moduły SIMM albo SIOPP – można znaleĽć numer identyfikacyjny. Ostatnie dwie cyfry po myślniku (-) są szczególnie ważne, ponieważ wskazują na szybkość układu pamięci.

W niektórych komputerach możliwa jest kontrola szybkości pracy układów pamięci. Komputery z regulacją cykli liczby oczekiwania umożliwiają osiągnięcie optymalnej wydajności komputera. W tym celu musimy kupić odpowiednio szybkie układy pamięci. Możemy również wybrać niższą wydajność kupując tańszą pamięć. Praca komputera bez cykli oczekiwania może wymagać użycia układów o krótszym czasie dostępu.

Komputery wykorzystujące 72-końcówkowe moduły SIMM mogą określić szybkość i pojemność pamięci zainstalowanych modułów. Wykorzystują w tym celu cztery specjalne końcówki – tzw. presence detect pins. Za pomocą tych wyprowadzeń płyta główna może określić czas dostępu i pojemność pamięci zainstalowanych modułów, podobnie jak kamera filmowa może określić właściwą szybkość przesuwu taśmy filmowej, odczytując informację z otworów perforowanych na filmie. Umieszczenie w komputerze pamięci, która jest zbyt wolna, może spowodować wyświetlenie komunikatu o błędzie już przy starcie systemu.

Architektura podzespołu pamięci RAM w komputerze

W celu zmniejszenia ilości cykli oczekiwania opracowano architektury pamięci, które zwiększają ogólną wydajność komputera i przyczyniają się do obniżenia kosztów. Najczęściej stosuje się w tym celu następujące rozwiązania:

  • Pamięć stronicowaną (ang. paged memory)

  • Pamięć z przeplotem (ang. interleaved memory)

  • Pamięć podręczną (ang. memory caching)

Pamięć stronicowana jest prostym sposobem zwiększenia szybkości operacji angażujących pamięć poprzez podział pamięci na strony o rozmiarach od 512 bajtów do kilku kilobajtów. Układ stronicowania umożliwia dostęp do pamięci w obrębie strony bez wstawiania cykli oczekiwania. Jeżeli adres w pamięci, do którego chcemy się odwołać, znajduje się poza bieżącą stroną, dodawany jest jeden lub więcej cykli oczekiwania, aby można było dokonać koniecznego przełączenia strony.

Pamięć z przeplotem pozwala na osiągnięcie większej wydajności niż pamięć stronicowana. Koncepcja ta polega na połączeniu dwóch banków pamięci w jeden, w którym znajdują się na przemian bajty parzyste i nieparzyste. Dzięki temu możliwy jest dostęp procesora do jednego banku w czasie trwania poprzedniego dostępu do drugiego banku. Poprzez naprzemienne dostępy do obydwu banków, procesor może zażądać danych z jednego banku, a gdy realizacja żądania się zbliża, procesor przełącza się na drugi bank i obsługuje kolejne żądanie. Realizacja pierwszego żądania odbywa się w czasie, gdy drugie żądanie wciąż oczekuje na realizację, itd. Dzięki mechanizmowi pamięci z przeplotem możliwe jest podwojenie efektywnej szybkości dostępu do pamięci, bez konieczności stosowania szybszych układów.

Mechanizm pamięci z przeplotem znalazł zastosowanie w wielu komputerach i przyczynił się do wzrostu ich wydajności. Niektóre komputery oferujące ten mechanizm pozwalają na korzystanie z niego jedynie wówczas, gdy obydwa zainstalowane banki pamięci są takich samych rozmiarów, co oznacza zazwyczaj jednoczesne dodanie dwóch 36-bitowych modułów SIMM o takiej samej pojemności. Jeżeli dodany będzie tylko jeden bank albo zostaną dodane banki o różnych rozmiarach, to komputer będzie działał, jednak przeplot pamięci będzie wyłączony i nastąpi znaczny spadek wydajności. Więcej informacji na ten temat można znaleĽć w dokumentacji komputera.

Pamięć podręczna (cache) jest najpopularniejszą i zazwyczaj najbardziej efektywną techniką podnoszenia wydajności operacji angażujących pamięć. Technika ta opiera się na wykorzystaniu bardzo szybkiej pamięci o niewielkich rozmiarach (od 8 kB do 512 kB), tak aby transfer danych z procesora mógł się odbywać bez konieczności wstawiania cykli oczekiwań. Czas dostępu do pojedynczego banku pamięci cache wynosi nawet 2 ns. Ponieważ czas ten jest o wiele krótszy od najkrótszego czasu osiąganego dla pamięci DRAM, konieczne jest stosowanie specjalnych pamięci – SRAM. Pamięci SRAM, w odróżnieniu od DRAM, nie wymagają stałej obecności sygnału odświeżającego. Cecha ta, wraz z innymi właściwościami, daje w efekcie bardzo krótki czas dostępu do pamięci, lecz także podnosi jej cenę.

Pamięć podręczna

Jak już wspomniałem w poprzednim podrozdziale, stosowanie pamięci podręcznej jest jednym z najefektywniejszych sposobów na zwiększenie szybkości operacji angażujących pamięć. Układy pamięci SRAM są, co prawda, drogie, jednak do zaimplementowania pamięci podręcznej potrzebna jest niewielka ich ilość. W pamięci SRAM, nadzorowanej przez specjalny układ kontrolera pamięci cache, przechowywane są kopie danych z tych obszarów pamięci RAM, do których procesor często się odwoływał. Są w niej także zawartości tych komórek pamięci, co do których układ kontrolera spodziewa się, że będą wkrótce wykorzystane. Pamięć cache jest więc rodzajem inteligentnego bufora pomiędzy procesorem a wolną pamięcią dynamiczną RAM.

Trafienie (ang. cache hit) oznacza, że dane, których potrzebuje procesor, znajdują się w pamięci cache i do ich pobrania nie trzeba wstawiać dodatkowych cykli oczekiwania. Brak trafienia (ang. cache miss) oznacza, że dane, których potrzebuje procesor, nie zostały załadowane do pamięci cache i do ich pobrania potrzebne są dodatkowe cykle oczekiwania. Dobry kontroler pamięci cache zapewnia współczynnik trafień rzędu 95 procent, a nawet więcej (oznacza to, że komputer pracuje bez cykli oczekiwania przez 95 procent swojego czasu). W efekcie komputer z zewnątrz wygląda tak, jakby prawie przez cały czas była w nim pamięć o czasie dostępu 15 ns lub mniejszym, chociaż większość jego pamięci jest o wiele wolniejsza (i co za tym idzie, o wiele tańsza).

Komputery z procesorem 486SX, SL i DX mają zintegrowany z procesorem kontroler pamięci cache wraz z 8 kB wewnętrznej pamięci cache, dzięki której komputer pracuje dużo szybciej niż poprzednie komputery. Procesor 486SLC posiada 1 kB wewnętrznej pamięci cache, procesory 486DX mają 16 kB wewnętrznej pamięci cache, podobnie procesory 486SLC2 i 486SLC3. W komputerach z procesorem 386SX i DX trzeba stosować zewnętrzną pamięć cache wraz z kontrolerem – komputery te są pozbawione wewnętrznej pamięci cache. Procesory Pentium i Pentium II mają dwa obszary wewnętrznej pamięci cache – jeden dla kodu instrukcji i jeden dla danych. Architektura ta została również przeniesiona do procesorów Pentium MMX i Pentium II. Oba te procesory są wyposażone w dwa osobne obszary pamięci cache o rozmiarze 16 kB dla kodu rozkazów procesora i dla danych. Pamięć ta jest pamięcią typu write-back, tzn. procesor może z niej korzystać zarówno do odczytywania, jak i zapisywania danych.

Wewnętrzna pamięć cache procesora jest nazywana pamięcią cache pierwszego poziomu (ang. Level 1 cache – L1), natomiast zewnętrzna pamięć cache to pamięć cache drugiego poziomu (ang. Level 2 cache – L2). Zazwyczaj im większy rozmiar pamięci cache, tym większa wydajność komputera. Większy rozmiar pamięci L2 cache nie stanowi jednak gwarancji większej wydajności komputera – można spotkać komputery z mniejszą pamięcią cache, które osiągają lepsze parametry niż komputery z większą pamięcią cache. Rzeczywiste parametry komputera zależą od wydajności kontrolera pamięci cache oraz od architektury komputera, np. pamięć cache zintegrowana z procesorem może zwiększyć wydajność o wiele bardziej niż zewnętrzna pamięć cache. Dodanie 256 kB pamięci L2 cache w komputerze IBM PS/2 Model 90 czy 95 z procesorem 486DX spowoduje nieznaczny tylko wzrost osiągów komputera w porównaniu z dodaniem do procesora 486 8 kB wewnętrznej pamięci cache (L1). Przyczyną tego jest większa wydajność pamięci L1 niż L2. Ponadto dodanie pamięci cache nie spowoduje proporcjonalnego wzrostu szybkości komputera. Najlepszą wydajność uzyskamy stosując połowę całkowitego rozmiaru pamięci cache, jaką komputer może obsłużyć. Komputer PC wyposażony w 256 kB czy 512 kB pamięci cache drugiego poziomu stanowi rozwiązanie optymalne.

Aby osiągnąć maksimum wydajności i maksimum niezawodności, najlepiej jest korzystać z pamięci o czasie dostępu zalecanym przez producenta komputera. Szybsza pamięć będzie działać, jednak nie spowoduje przyrostu wydajności i z tego powodu jej kupno jest marnotrawstwem pieniędzy.

Minimalny czas dostępu do pamięci na płycie głównej konkretnego typu komputera można znaleĽć w dokumentacji technicznej. Jeżeli jesteśmy właścicielem komputera PC bez dokumentacji, to możemy skorzystać z dokumentacji innego komputera o parametrach podobnych do naszego, ponieważ większość komputerów kompatybilnych ma takie same parametry. Z powodu różnorodności rozwiązań spotykanych na rynku powinniśmy jednak pozyskać odpowiednią dokumentację od producenta sprzętu.

Karty rozszerzające pamięć

Do kart rozszerzających pamięć zazwyczaj uciekamy się w ostateczności. W wielu komputerach (np. starszych modelach firmy Compaq), których złącza gniazd rozszerzających są firmowym rozwiązaniem producenta, jesteśmy zmuszeni do zakupu kart z pamięcią tylko u producenta komputera. Własne rozwiązania kart z pamięcią stosuje również firma IBM w komputerze PS/2 Model 80. W innych standardowych komputerach, w których nie są stosowane własne rozwiązania producentów (np. IBM PC, XT i AT) i w większości komputerów kompatybilnych oraz większości komputerów PS/2, karty rozszerzające pamięć pasują do standardowych gniazd rozszerzających i możemy się w nie zaopatrzyć u setek producentów.

Niestety, wszystkie karty rozszerzające pamięć umieszczane w standardowych gniazdach pracują z częstotliwością magistrali zewnętrznej, a nie z pełną częstotliwością płyty głównej. Z tego powodu w większości komputerów umieszcza się obecnie gniazda na moduły SIMM bezpośrednio na płycie głównej, dzięki czemu pamięć jest połączona bezpośrednio z magistralą procesora. Korzystanie w takich komputerach z kart rozszerzających pamięć powoduje tylko ich spowolnienie. W innych komputerach wykorzystuje się firmowe rozwiązania interfejsu łączącego magistralę lokalną z kartami rozszerzającymi pamięć. Rozwiązania te mogą jednak sprawiać dodatkowe problemy i być przyczyną dodatkowych kosztów przy rozszerzaniu czy wymianie pamięci.

W niektórych przypadkach karta rozszerzająca pamięć może wykorzystywać wolniejsze układy pamięci, niż wymagałaby tego płyta główna (np. karty komputerów PS/2 Model 50 i 60 używają układów pamięci o czasie dostępu 120 ns). W wielu komputerach gniazda rozszerzające pamięć są taktowane zegarem o ustalonej, dość niskiej częstotliwości, wynoszącej w większości komputerów z magistralą ISA 8 MHz, tak aby karty rozszerzające zainstalowane w komputerze pracowały poprawnie. Z powodu licznych funkcji interfejsu magistrali MCA (Micro Channel Architecture) karty rozszerzające pamięć w komputerze PS/2 mogą pracować wolniej niż pamięć zainstalowana na płycie głównej. Asynchroniczna magistrala MCA umożliwia niezależną od szybkości procesora pracę kart rozszerzających. W razie potrzeby urządzenia podłączone do magistrali mogą żądać dodatkowych cykli oczekiwania, aby wolniejsze karty mogły nadążyć z przesyłem informacji.

Instalowanie pamięci w komputerze

W tym podrozdziale zostanie omówione instalowanie w komputerze układów pamięci – zwłaszcza nowych układów i modułów pamięci RAM. Opiszemy także problemy, z jakimi najczęściej styka się użytkownik, i metody ich unikania. Zamieścimy również informacje o konfiguracji komputera, które są konieczne, abyśmy mogli w pełni korzystać z dodatkowej pamięci.

Podczas umieszczania w komputerze czy wyjmowania z niego modułów pamięci użytkownik najczęściej napotyka następujące trudności:

  • wyładowania elektrostatyczne

  • złamane lub wygięte nóżki układów

  • nieodpowiednie ustawienie przełączników i zworek

Aby zapobiec wyładowaniom elektrostatycznym w czasie umieszczania w komputerze wrażliwych pod tym względem układów pamięci i kart, nie powinniśmy mieć na sobie odzieży syntetycznej ani butów na skórzanej podeszwie. Zanim zaczniemy pracę, powinniśmy pozbyć się ładunków elektrostatycznych przez dotknięcie ręką obudowy komputera. Jeszcze lepiej jest mieć na nadgarstku pasek uziemiający, zakupiony w tym celu w sklepie. Paski takie można dostać w sklepach z częściami elektronicznymi lub w sieci sprzedaży wysyłkowej. Pasek uziemiający składa się z przewodzącej obrączki uziemionej na drugim końcu przewodem przypiętym do obudowy komputera. W czasie gdy będziemy pracować, wtyczka kabla zasilającego powinna być włożona do gniazdka w celu uziemienia komputera, lecz sam komputer musi pozostać wyłączony.

Należy używać tylko paska uziemiającego z odpowiednim oznaczeniem, kupionego w sklepie; nie wolno stosować paska wykonanego samodzielnie. Paski sklepowe są wyposażone w rezystor o oporze jednego megaoma, który pełni rolę zabezpieczenia w razie przypadkowego dotknięcia punktu pod napięciem. Rezystor powoduje, że nasze ciało nie stanie się przewodem o niższej rezystancji, przez który prąd spłynie do ziemi porażając nas. Nieodpowiednio wykonany pasek może spowodować przepływ prądu przez nasze ciało do ziemi, z możliwością śmiertelnego porażenia.

Innym problemem przy instalowaniu w komputerze układów w obudowie typu DIP czy modułów SIP są wygięte bądĽ złamane nóżki układów. Czasami nóżki fabrycznie nowych układów są wygięte w kształcie litery V, przez co stają się trudne do umieszczenia w podstawce. Jeżeli zauważymy, że układ w obudowie DIP ma wygięte w ten sposób nóżki, połóżmy układ na stole stroną z wygiętymi nóżkami w dół i delikatnie naciskając wygnijmy nóżki tak, aby znalazły się pod kątem 90 stopni w stosunku do obudowy układu. W przypadku modułu SIPP możemy posłużyć się szczypcami zakończonymi igłą, za pomocą których prostujemy nóżki modułu, tak aby odstawały od krawędzi w dół, przy zachowaniu jednakowych odstępów pomiędzy końcówkami. Następnie umieszczamy układy pojedynczo w gnieĽdzie.

Wyprostowanie końcówek układów SIPP czy modułów DIPP nie jest zbyt trudne, jednak przy braku uwagi można łatwo złamać nóżkę, co czyni taki układ czy moduł bezużytecznym. Przy prostowaniu nóżek powinniśmy być bardzo ostrożni. Aby wyprostować nóżki i dopasować je do otworów w podstawce, możemy posłużyć się odpowiednimi narzędziami. Narzędzia takie nie są drogie, a pozwolą nam zaoszczędzić sporo czasu.

Każdy moduł czy układ pamięci musi być włożony w podstawkę w odpowiednim kierunku. Każdy układ ma na końcu oznaczenie wskazujące na sposób umieszczenia go w gnieĽdzie. Może to być nacięcie, okrągłe wgłębienie albo jedno i drugie. Odpowiednie nacięcie może znajdować się też na podstawce układu. Na płycie głównej może być również legenda objaśniająca poprawny kierunek układu w gnieĽdzie. Jeżeli oznaczenia takiego nie ma, to jako wzór mogą nam posłużyć inne układy. Pozycja nacięcia wskazuje na lokalizację pierwszej końcówki układu. Poprawne włożenie układu, tak aby nacięcie zgadzało się z pozycją nacięć na innych układach, uchroni nas przed następstwem włożenia układu na odwrót. Następnie delikatnie umieszczamy układ na podstawce, pilnując, aby każda końcówka była dopasowana do swojego otworu. Następnie pewnym ruchem dociskamy układ kciukami, aż będzie osadzony w podstawce.

Kierunek osadzenia modułów SIMM jest wyznaczony nacięciem na jednym końcu modułu (przedstawiono na rysunku 7.10). W gnieĽdzie modułu znajduje się odstający fragment, który musi pasować do nacięcia na końcu modułu. Wystający fragment uniemożliwia odwrotne włożenie modułu do gniazda; aby to zrobić, musielibyśmy złamać podstawkę. Rysunek 7.11 przedstawia powiększony fragment gniazda SIMM decydującego o położeniu modułu. Gniazda modułów SIPP są pozbawione takiego klucza i do użytkownika należy poprawne umieszczenie modułów w gnieĽdzie. Jeżeli na płycie głównej nie ma żadnych oznaczeń, pomocna w tym względzie może być dokumentacja komputera. Jako wzór mogą także posłużyć moduły SIPP znajdujące się na płycie głównej.

Rysunek 7.10.

Nacięcie na module SIMM widać na lewej końcówce modułu. Najpierw należy umieścić moduł pod pewnym kątem, a następnie należy go wyprostować w gnieĽdzie do pionowej pozycji, aż zatrzasną się zatrzaski

Moduły DIMM posiadają również nacięcia pozwalające na jednoznaczne określenie ich pozycji w gnieĽdzie. Ukazano je na rysunku 7.12. Kiedy moduł jest poprawnie umieszczony w gnieĽdzie (należy go wcisnąć), dĽwignie znajdujące się z boków modułu powinny się podnieść do góry i zatrzasnąć w nacięciach z boku modułu. Przy instalacji nie należy używać siły – jeżeli coś nie pasuje, należy raczej szukać innego rozwiązania niż siłowe. Uszkodzenie uchwytów może spowodować pojawianie się przypadkowych błędów pamięci. Moduł DIMM wyjmujemy odchylając dĽwigienki z boku modułu.

Rysunek 7.11.

Zbliżenie ukazuje tylną stronę modułu SIMM umieszczonego poprawnie w gnieĽdzie. Widać otwór, w który wchodzi plastikowy bloczek umocowany do gniazda

Rysunek 7.12.

Nacięcia w module DIMM pasujące do kluczy w gnieĽdzie

Jak wyjaśniono wcześniej w rozdziale, moduły DIMM są dostępne w kilku wersjach, na przykład: buforowane, niebuforowane, 3,3 V, 5 V. Buforowane moduły posiadają dodatkowy bufor pośredniczący w wymianie danych pomiędzy płytą główną a modułem. Niestety, spowalniają one pracę modułu, dlatego nie powinno się ich wykorzystywać w szybszych płytach głównych. Różnicowanie napięcia jest proste. Moduł 3,3 V nie pasuje do 5 V – i odwrotnie – z powodu różnic w konfiguracji kluczy w gnieĽdzie DIMM.

Nowoczesne systemy PC korzystają jedynie z niebuforowanych, 3,3-voltowych modułów DIMM. Komputery Apple oraz systemy niezgodne z PC mogą korzystać z innych rozwiązań. Klucze są przedstawione na rysunku 7.13.

Rysunek 7.13.

Klucze w gnieĽdzie DIMM

Zanim zainstalujemy w komputerze moduły czy układy pamięci, upewnijmy się, że zasilanie komputera jest wyłączone. Następnie zdejmujemy obudowę komputera i wyjmujemy wszystkie obecne w nim karty. Moduły SIMM z łatwością wkładamy na ich miejsce, jednak z układami SIPP możemy mieć pewne problemy. Narzędzia do mocowania układów nie są bezwzględnie wymagane, jednak z ich pomocą umieszczenie układu w gnieĽdzie może być o wiele prostsze. Do wyjmowania układów z podstawek posłużmy się specjalnym narzędziem albo śrubokrętem. Nie należy nigdy próbować wyciągać układów palcami, ponieważ możemy powyginać przy tym końcówki albo skaleczyć się w palec. Moduły SIMM wyjmujemy zwalniając uprzednio zatrzask i wyciągając moduł z gniazda.

Po umieszczeniu w komputerze nowych układów pamięci i złożeniu komputera z powrotem w jedną całość, konieczna może się okazać zmiana ustawień przełączników czy zworek na płycie głównej. W oryginalnym komputerze PC znajdują się dwa bloki przełączników, po osiem przełączników w każdym. Pozycje od 1 do 4 w drugim bloku przełączników odzwierciedlają rozmiar całej pamięci obecnej w komputerze. W komputerze XT znajdował się tylko jeden blok przełączników, oznaczający liczbę banków pamięci na płycie głównej komputera, lecz nie na kartach rozszerzających pamięć. Komputery IBM AT i kompatybilne są pozbawione przełączników określających konfigurację pamięci. Zamiast tego trzeba w nich uruchomić program konfiguracyjny (SETUP), w którym poinformujemy komputer o całkowitej ilości pamięci w nim obecnej. Komputery kompatybilne z IBM AT mają zazwyczaj program konfiguracyjny w pamięci ROM BIOS. Program ten musi być uruchomiony po zainstalowaniu nowej pamięci, aby komputer był właściwie skonfigurowany.

Po odpowiednim skonfigurowaniu komputera do pracy z nową pamięcią, powinniśmy uruchomić oprogramowanie diagnostyczne, aby się upewnić, że nowa pamięć funkcjonuje prawidłowo. Dla wszystkich typów komputerów dostępne są co najmniej dwa, a czasami trzy takie programy. Oto one (według ilości zwracanej informacji):

  • POST (Power-On Self Test) – dysk z zaawansowanym programem diagnostycznym

  • Dysk z programem diagnostycznym użytkownika – dodatkowe oprogramowanie diagnostyczne

Program POST jest uruchamiany za każdym razem po włączeniu komputera; aby uzyskać dostęp do zaawansowanych programów na dysku diagnostycznym, należy nacisnąć Ctrl+A w menu powitalnym.

Dostępnych jest wiele innych programów diagnostycznych pochodzących od niezależnych producentów oprogramowania użytkowego. Więcej informacji na temat takich programów można znaleĽć w rozdziale 21. pt. "Programowe i sprzętowe narzędzia diagnostyczne".

Organizacja logiczna pamięci komputera

Przestrzeń adresowa oryginalnego komputera PC wynosiła 1 MB, z czego górne 384 kB było zarezerwowane na potrzeby pamięci ROM BIOS, kart rozszerzających itp. Zarezerwowanie przez projektantów komputera górnej części obszaru adresowego procesora (pomiędzy 640 kB a 1024 kB), zamiast obszaru dolnego (od 0 do 640 kB) doprowadziło do powstania ograniczenia w ilości pamięci dostępnej dla systemu operacyjnego DOS do 640 kB (ang. convenctional memory barier). Ciągła presja wywierana na producentów komputerów i urządzeń peryferyjnych, aby nie zmieniać oryginalnej organizacji pamięci komputera i dzięki temu utrzymać całkowitą zgodność z poprzednimi komputerami PC, spowodowała wielki bałagan. W 20 lat po wyprodukowaniu pierwszego komputera PC, najnowsze komputery z procesorem Pentium II są pod wieloma względami ograniczone organizacją pamięci, będącą spadkiem po pierwszych komputerach PC.

Użytkownicy, którzy chcieliby lepiej poznać i zrozumieć działanie swojego komputera, stają w pewnym momencie przed koniecznością wgłębienia się w problemy związane z organizacją pamięci. Z logicznego punktu widzenia pamięć komputera składa się z różnej wielkości fragmentów, z których tylko część może być wykorzystywana przez aplikacje. W tym podrozdziale omówimy podział logiczny pamięci współczesnego komputera PC. Możemy wyróżnić następujące obszary pamięci:

  • Pamięć podstawowa (ang. convenctional memory)

  • Pamięć górna (ang. Upper Memory Area, UMA)

  • Pamięć "wysoka" (High Memory Area, HMA)

  • Pamięć powyżej pierwszego megabajta (ang. extended memory, XMS)

  • Pamięć rozszerzona (ang. expanded memory, EMS) – rozwiązanie przestarzałe

  • Pamięć obrazu (ang. Video RAM), umieszczona w przestrzeni adresowej UMA

  • Pamięci ROM i RAM kart rozszerzających (umieszczone w przestrzeni adresowej UMA)

  • Pamięć ROM BIOS płyty głównej (umieszczona w przestrzeni adresowej UMA)

W kolejnych podrozdziałach opiszemy również konflikty angażujące pamięć oraz zjawisko zachodzenia na siebie różnych obszarów pamięci (ang. overlap). Omówimy także programy zarządzające pamięcią (ang. memory managers), pomagające w optymalnym skonfigurowaniu pamięci i lepszym jej wykorzystaniu. W komputerze AT obszar dostępnej dla procesora pamięci przekracza granicę 1 MB i osiąga 16 MB w komputerze 286, 4 GB w komputerach z procesorem 386DX (lub lepszym) i 64 GB w komputerze Pentium II. Obszar pamięci powyżej 1 MB określany jest w języku angielskim jako extended memory (dosł. pamięć powiększona).

Na rysunku 7.14 przedstawiono mapę pamięci komputera PC. Jeżeli procesor pracuje w trybie rzeczywistym, to do jego dyspozycji jest tylko pierwszy megabajt. Procesor pracujący w trybie chronionym ma dostęp do pełnej przestrzeni adresowej, w zależności od procesora równej 16 MB, 4096 MB lub 65536 MB. Pojedynczy znak na rysunku oznacza 1 kB pamięci, linia albo segment oznacza 64 kB. Przedstawiona mapa pamięci obejmuje dwa pierwsze megabajty.

Przedstawiona mapa pamięci kończy się, z braku miejsca, po drugim megabajcie. W rzeczywistości obejmuje ona całą przestrzeń adresową komputera.

Pamięć podstawowa

Oryginalny komputer PC/XT mógł wykorzystywać 1 MB pamięci roboczej, zwanej również pamięcią RAM (Random Access Memory). 1 MB pamięci RAM komputera dzieli się na kilka bloków, z których każdy jest przeznaczony do innych zastosowań. System operacyjny DOS może zapisywać i odczytywać dane w obrębie całego megabajta, jednak programy mogą być ładowane jedynie do obszaru pamięci podstawowej, która w pierwszym komputerze PC wynosiła 512 kB. Pozostałe 512 kB zostało zarezerwowane do innych zastosowań, m.in. na potrzeby płyty głównej i kart rozszerzających.

Po premierze komputera PC firma IBM zdecydowała, że na te cele wystarczy tylko 384 kB i zaczęła sprzedawać komputer z 640 kB pamięci operacyjnej. W ten sposób ustalił się standard obszaru pamięci o rozmiarze 640 kB, który może być wykorzystywany przez aplikacje systemu DOS. Po pewnym czasie dla wielu użytkowników stało się to ograniczeniem (ang. 640K barrier). Pozostałe 384 kB przestrzeni powyżej 640 kB zostało zarezerwowane na potrzeby karty graficznej, kart rozszerzających i pamięci ROM BIOS płyty głównej.

Pamięć górna (ang. Upper Memory Area, UMA)

Pamięć UMA jest zarezerwowanym obszarem pamięci o rozmiarze 384 kB, umieszczonym w górnej części pierwszego megabajta przestrzeni adresowej komputera PC/XT i PC/AT.

Rysunek 7.14.

Obszar dwóch pierwszych megabajtów przestrzeni adresowej komputera PC

. = pamięć dostępna dla programów (RAM)
G = pamięć karty graficznej – tryb wysokiej rozdzielczości
M = pamięć karty graficznej – kolorowy tryb tekstowy
C = pamięć karty graficznej – monochromatyczny tryb tekstowy
V = pamięć ROM BIOS karty graficznej (w komputerze PS/2 oznaczona "a")
a = pamięć ROM kart rozszerzających oraz pamięć RAM zarezerwowana do 
    specjalnych zastosowań (wolne fragmenty w obszarze UMA)
r = dodatkowa pamięć ROM BIOS płyty głównej komputera PS/2 (w 
    komputerach innych niż PS/2 wolne fragmenty w pamięci UMA)
R = pamięć ROM BIOS płyty głównej komputera
b = w komputerach IBM pamięć ROM zawierająca interpreter języka BASIC
    (w komputerach kompatybilnych z IBM oznaczona "R")
h = obszar pamięci wysokiej (HMA), pod warunkiem, że załadowany jest 
    sterownik HIMEM.SYS

Obszar pamięci podstawowej:

      :0–––1–––2–––3–––4–––5–––6–––7–––8–––9–––A–––B–––C–––D–––E–––F–––
000000:................................................................
010000:................................................................
020000:................................................................
030000:................................................................
040000:................................................................
050000:................................................................
060000:................................................................
070000:................................................................
080000:................................................................
090000:................................................................

Obszar pamięci górnej (UMA):

      :0–––1–––2–––3–––4–––5–––6–––7–––8–––9–––A–––B–––C–––D–––E–––F–––
0A0000:GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
0B0000:MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
      :0–––1–––2–––3–––4–––5–––6–––7–––8–––9–––A–––B–––C–––D–––E–––F–––
0C0000:VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
0D0000:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
      :0–––1–––2–––3–––4–––5–––6–––7–––8–––9–––A–––B–––C–––D–––E–––F–––
0E0000:rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
0F0000:RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR

Obszar pamięci powyżej pierwszego megabajta (pamięć HMA):

      :0–––1–––2–––3–––4–––5–––6–––7–––8–––9–––A–––B–––C–––D–––E–––F–––
100000:hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh

Pozostała część obszaru powyżej pierwszego megabajta (pamięć XMS)

      :0–––1–––2–––3–––4–––5–––6–––7–––8–––9–––A–––B–––C–––D–––E–––F–––
110000:................................................................
120000:................................................................
130000:................................................................
140000:................................................................
150000:................................................................
160000:................................................................
170000:................................................................
180000:................................................................
190000:................................................................
1A0000:................................................................
1B0000:................................................................
1C0000:................................................................
1D0000:................................................................
1E0000:................................................................
1F0000:................................................................

Obszar pamięci UMA rozciąga się od adresu A0000 do FFFFF. 384 kB pamięci górnej dzieli się na trzy bloki:

  • Pierwsze 128 kB za obszarem pamięci podstawowej to obszar pamięci obrazu (ang. Video RAM), zarezerwowanej na potrzeby karty graficznej. Zawartość tego obszaru pamięci bierze udział w wyświetlaniu na ekranie monitora grafiki czy tekstu. Pamięć obrazu zajmuje obszar A0000-BFFFF.

  • Kolejne 128 kB zostało zarezerwowane na potrzeby pamięci ROM BIOS niektórych kart rozszerzających. Pierwsze 32 kB tego obszaru są wykorzystywane przez większość kart graficznych VGA na potrzeby pamięci ROM BIOS tych kart. Pozostała część może być wykorzystywana przez inne karty rozszerzające. Obszar ten jest również wykorzystywany przez wiele kart sieciowych jako tzw. pamięć współdzielona (ang. Shared Memory). Pamięć ROM i pamięć RAM kart rozszerzających zajmują obszar adresowy C0000-DFFFF.

  • Ostatnie 128 kB zarezerwowano dla potrzeb ROM BIOS płyty głównej komputera. (BIOS jest zbiorem podstawowych procedur wejścia/wyjścia, przechowywanych w pamięci RAM tylko do odczytu albo w pamięci ROM). W obszarze tym umieszczono również procedury testujące POST (Power-On Self Test) oraz program odpowiedzialny za inicjowanie komputera aż do momentu przejęcia kontroli nad komputerem przez procedury ładujące system operacyjny (ang. bootstrap loader). W większości komputerów wykorzystywane są jedynie górne 64 kB tego obszaru, dzięki czemu do dyspozycji zostają pozostałe 64 kB (lub więcej), pod warunkiem, że skorzystamy z programu zarządzającego pamięcią. W niektórych komputerach w obszarze tym znajduje się również program konfiguracyjny (CMOS SETUP) komputera. ROM BIOS zajmuje obszar E0000-FFFFF.

Nie we wszystkich komputerach AT całe 384 kB pamięci górnej są zawsze wykorzystywane. Zgodnie z założeniem przyjętym przez firmę IBM, obszar przeznaczony na pamięć obrazu zaczyna się od adresu A0000, który jest górną granicą obszaru 640 kB pamięci podstawowej. Zazwyczaj pamięć od adresu A0000 jest wykorzystywana w trybie wysokiej rozdzielczości karty graficznych VGA, podczas gdy w trybie monochromatycznym i kolorowym trybie tekstowym wykorzystywane są odpowiednio obszary B0000-B7FFF i B8000-BFFFF. Starsze karty graficzne, inne niż VGA, wykorzystują tylko pamięć z segmentu B0000. Karty graficzne wykorzystują różne obszary pamięci w zależności od trybu, w jakim pracują. Jednak bez względu na to, ile pamięci RAM znajduje się na karcie graficznej, procesor traktuje całe 128 kB jak jeden obszar. Osiągnięto to dzięki przełączaniu boków pamięci karty graficznej, tak aby w razie potrzeby stawały się widoczne dla procesora w segmencie A0000-BFFFF.

384 kB pamięci w górnej części pierwszego megabajta miało być w założeniach obszarem pamięci zarezerwowanej (ang. reserved memory). Możliwe jest jednak wykorzystanie nieużywanych fragmentów pamięci do ładowania sterowników urządzeń (ang. device drivers), np. ANSI.SYS, czy programów rezydentnych, np. MOUSE.COM. Dzięki temu zwolniona zostaje pamięć podstawowa, którą normalnie zajmowałyby te programy. Obszary wolnej pamięci UMA różnią się lokalizacją i rozmiarem, w zależności od rodzajów kart rozszerzających w obecnych komputerze. Np. większość kart adapterów SCSI oraz kart sieciowych wymaga części tego obszaru na potrzeby modułów pamięci ROM czy RAM znajdujących się na tych kartach.

Adresacja segment: przesunięcie i adresacja liniowa

Dla niektórych użytkowników mylące bywa rozróżnienie pomiędzy adresem segmentu a adresem liniowym. Adresowanie pamięci z wykorzystaniem numerów segmentów wynika z wewnętrznej struktury mikroprocesorów Intel i jest wykorzystywane głównie w starszych, 16-bitowych systemach operacyjnych. W adresacji takiej w osobnym rejestrze procesora jest pamiętany adres segmentu pamięci, a w innym rejestrze tzw. offset, czyli przesunięcie komórki pamięci liczone względem początku segmentu. Koncepcja ta jest bardzo prosta. Można ją zilustrować przykładem "hotelowym": załóżmy, że zatrzymaliśmy się w hotelu i ktoś poprosił nas o podanie numeru naszego pokoju. Hotel ma 10 pięter, numerowanych od zera do dziewięć, a na każdym piętrze znajduje się 100 pokoi, numerowanych od 0 do 99. Za segment przyjmijmy dowolną grupę 100 pokoi o numerach zaczynających się od wielokrotności dziesiątki, numer segmentu jest liczbą dwucyfrową. Początek segmentu o numerze 54 wskazywałby na pokój nr 540, a przesunięcie od 00 do 99 oznaczałoby jeden ze 100 pokoi w segmencie.

W naszym hotelowym przykładzie każdy segment byłby więc liczbą dwucyfrową z zakresu od 00 do 99, a w ramach każdego segmentu offset byłby również liczbą z zakresu od 00 do 99.

Przyjmijmy, że jesteśmy w pokoju 541. Jeżeli ktoś nas teraz poprosi o podanie numeru pokoju w formacie segment:przesunięcie, a segment i offset (przesunięcie) są liczbami dwucyfrowymi, to moglibyśmy odpowiedzieć, że jesteśmy w segmencie 54 (pokój 540), a przesunięcie względem początku segmentu wynosi 1. Moglibyśmy też powiedzieć, że nasz segment ma numer 50 (pokój 500), a przesunięcie jest równe 41. Możliwe byłyby i inne odpowiedzi, np. segment 45 (pokój 450) i przesunięcie 91 (450 + 91 = 541). Możliwości te ilustruje tabelka:

Segment przesunięcie wynik
54 01 541
50 41 541
45 91 541

Widać, że pomimo różnych numerów segmentu i przesunięcia, w wyniku otrzymujemy zawsze taki sam numer pokoju. W podobny sposób jest obliczany adres komórki pamięci w procesorach Intel x86. Taki schemat adresacji wprowadza czasami w błąd, szczególnie gdy piszemy programy w języku assemblera.

W taki właśnie sposób działa mechanizm segmentacji pamięci w procesorach Intel. Zauważmy, że numery segmentu i przesunięcia pokrywają się ze sobą na wszystkich cyfrach za wyjątkiem cyfry pierwszej i ostatniej. Jeżeli dodając je do siebie uwzględnimy to przesunięcie, otrzymamy w wyniku pełny adres liniowy.

W przypadku 32-bitowych systemów operacyjnych nie musimy już zaprzątać sobie głowy segmentacją. Adres liniowy jest tworzony bez ograniczeń typu segment:przesunięcie, podobnie jak np. pokój nr 541. Adres taki jest liczbą i nie jest obliczany na podstawie dwóch oddzielnych wartości. Na przykład karta adaptera SCSI może być wyposażona w pamięć ROM widoczną w obszarze D4000 – D7FFF. Liczby te podane w formacie segment:przesunięcie to odpowiednio D400:0000 i D700:0000. Część adresu odpowiadająca numerowi segmentu jest złożona z czterech najbardziej znaczących cyfr adresu liniowego, a część odpowiadająca przesunięciu to cztery najmniej znaczące cyfry adresu liniowego. Segment i przesunięcie nie zachodzą na siebie tylko na swoich skrajnych cyfrach, dlatego końcowy adres bloku pamięci ROM mógłby być zapisany na jeden z czterech możliwych sposobów:

D000:7FFF = D000              segment
            +7FFF             przesunięcie
            ---------
            D7FFF

D700:0FFF = D700              segment
            +0FFF             przesunięcie
            ---------
            D7FFF

D7F0:00FF = D7F0              segment
            +00FF             przesunięcie
            ---------
            D7FFF

D7FF:000F = D7FF              segment
            +000F             przesunięcie

--------- D7FFF

Widać więc, że pomimo różnych wartości segmentu i przesunięcia, wszystkie one dają w rezultacie ten sam wynik. Możliwe są jeszcze inne kombinacje segment:przesunięcie, które dadzą w wyniku D7FF:

D500:2FFF = D500              segment
            +2FFF             przesunięcie
            ---------
            D7FFF

D6EE:111F = D6EE              segment
            +111F             przesunięcie
            ---------
            D7FFF

Widzimy, że możliwe są różne kombinacje. Poprawną i ogólnie przyjętą formą zapisu adresu w postaci liniowej jest D7FFF, natomiast większość osób zapisałaby go w postaci D000:7FFF. Zapisanie czterech mniej znaczących pozycji segmentu zerami sprawia, że zapis segment:przesunięcie staje się bardziej przejrzysty, a wynik łatwiejszy do obliczenia. Jeżeli poprawnie rozumiemy ideę zapisu segment:przesunięcie, to jest już jasne, dlaczego pięciocyfrowemu adresowi liniowemu odpowiadają czterocyfrowe adresy segmentu i przesunięcia.

Istotną cechą nowszych 32-bitowych systemów operacyjnych jest możliwość mapowania obszaru pamięci RAM karty rozszerzającej w przestrzeni adresowej komputera z wykorzystaniem adresowania liniowego. Nie występuje tu ograniczenie rozmiaru bloku pamięci do 64 kB, jakie istnieje w przypadku pamięci UMA.

Pamięć obrazu (ang. Video RAM memory)

Karta graficzna zainstalowana w komputerze wykorzystuje część pamięci operacyjnej do przechowywania informacji o obrazie wysokiej rozdzielczości lub tekstowym. Niektóre karty graficzne, np. VGA, są wyposażone w pamięć ROM BIOS, widoczną w obszarze przeznaczonym specjalnie do tego celu. Generalnie, im większa jest rozdzielczość obrazu i liczba dostępnych kolorów, tym więcej karta graficzna wykorzystuje pamięci. Istotne jest to, że większość kart VGA i SVGA jest wyposażona we własną pamięć RAM, która przechowuje informację o obrazie wyświetlanym w danej chwili na ekranie. Pamięć ta przyśpiesza również operacje odświeżania ekranu.

W przypadku standardowej konfiguracji przestrzeni adresowej komputera, 128 kB pamięci jest zarezerwowane na potrzeby kart graficznych do przechowywania informacji o obrazie wyświetlanym na ekranie. Blok ten znajduje się w segmentach A000 i B000. Pamięć ROM karty graficznej wykorzystuje dodatkowy obszar pamięci UMA w segmencie C000.

Umieszczenie pamięci obrazu w obszarze bloku A000 spowodowało powstanie ograniczenia pamięci podstawowej dostępnej dla systemu DOS do 640 kB. DOS może korzystać z dostępnej pamięci w obrębie pierwszego megabajta, aż do początku obszaru pamięci obrazu. Korzystanie z kart graficznych MDA czy CGA umożliwia dostęp systemu DOS do większego obszaru niż 640 kB. W przypadku kart VGA, EGA i MCGA górną granicą jest adres A0000, natomiast karty MDA czy CGA zadowalają się mniejszym obszarem, dzięki czemu zwolniona pamięć może być wykorzystywana przez system DOS i aplikacje. Na zamieszczonych rysunkach widać, że w przypadku karty MDA, DOS ma do dyspozycji dodatkowe 64 kB pamięci (cały segment A000), w rezultacie czego aplikacje systemu DOS mają do dyspozycji 740 kB. Również karta CGA pozostawia do dyspozycji systemu DOS ciągły obszar pamięci RAM o rozmiarze 736 kB. Karty EGA, VGA czy MCGA ograniczają obszar pamięci systemu DOS do 640 kB, ponieważ adresy powyżej tego obszaru są wykorzystywane jako pamięć obrazu. Z powyższych względów maksymalna pamięć dostępna dla programów systemu DOS zależy od zainstalowanej w komputerze karty graficznej. Tabela 7.12 pokazuje, jak maksymalny obszar pamięci dla systemu DOS zależy od karty graficznej komputera.

Tabela 7.12. Ograniczenie pamięci RAM dostępnej dla systemu DOS w zależności od stosowanej karty graficznej
Typ karty graficznej Maksymalna ilość pamięci dostępnej w sysemie DOS
MDA (Monochrome Display Adapter) 704 kB
CGA (Color Graphics Adapter) 736 kB
EGA (Enhanced Graphics Adapter) 640 kB
VGA (Video Graphics Adapter) 640 kB
SVGA (Super VGA) 640 kB
XGA (eXtended Graphics Array) 640 kB

Korzystanie z pamięci powiększonej do rozmiaru 736 kB jest możliwe, zależy jednak od typu karty graficznej, kart rozszerzających pamięć, zawartości pamięci ROM płyty głównej oraz typu komputera. Korzystanie z części tej pamięci jest możliwe w komputerze z procesorem 386 lub lepszym. Za pomocą programu menadżera pamięci, np. EMM386 dostarczanego z systemem DOS, pracującego w trybie 386+ MMU, możliwe jest takie skonfigurowanie części pamięci powyżej pierwszego megabajta, aby była ona widoczna w dodatkowym obszarze powyżej 640 kB.

Kolejne podrozdziały opisują wykorzystanie przestrzeni adresowej przez karty graficzne. Na rysunkach przedstawiono obszary pamięci wykorzystywane przez karty monochromatyczne, karty EGA, VGA oraz karty IBM PS/2. Informacje te mogą być dość istotne, ponieważ może się okazać, że niektóre obszary pamięci są niewykorzystane, a w wolne miejsce można ładować programy – sterowniki.

Obszar adresowy zajmowany przez monochromatyczną kartę MDA (Monochrome Display Adapter)

Rysunek 7.15 przedstawia obszary pamięci wykorzystywane przez oryginalną kartę MDA. Karta ta korzysta tylko z 4 kB zarezerwowanej pamięci RAM w obszarze B0000-B0FFF. Nie jest przy tym zajmowana żadna przestrzeń w segmencie C000, ponieważ zawartość pamięci ROM karty znajduje się w rzeczywistości w pamięci ROM płyty głównej.

Rysunek 7.15.

Mapa pamięci karty MDA

. = wolne obszary
M = pamięć RAM oryginalnej karty MDA
m = dodatkowa pamięć wykorzystywana w monochromatycznym trybie 
    tekstowym VGA

      :0–––1–––2–––3–––4–––5–––6–––7–––8–––9–––A–––B–––C–––D–––E–––F–––
0A0000:GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
0B0000:MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM

Zauważmy, że chociaż oryginalna karta MDA wykorzystywała tylko 4 kB pamięci od adresu B0000, karta VGA pracująca w trybie emulującym tryb monochromatyczny (Mono Text Mode) wykorzystuje ponadto dodatkowe 32 kB. Rzeczywista karta MDA nie posiada pamięci ROM BIOS, zamiast tego jest obsługiwana przez sterowniki znajdujące się w pamięci ROM BIOS płyty głównej.

Obszar adresowy zajmowany przez kartę CGA (Color Graphics Adapter)

Rysunek 7.16 przedstawia obszary pamięci wykorzystywane przez kartę CGA. Karta ta zajmuje 16 kB obszaru zarezerwowanej pamięci RAM pomiędzy adresami B8000 i BBFFF. Nie jest przy tym zajmowana żadna przestrzeń w segmencie C000, ponieważ zawartość pamięci ROM karty znajduje się w rzeczywistości w pamięci ROM płyty głównej.

Karta CGA zwalnia obszar A0000-B7FFF, który może być następnie wykorzystany przez programy zarządzające pamięcią jako dodatkowa pamięć dla systemu DOS. Wyklucza to jednak korzystanie z programów pracujących w trybie graficznym, np. Windows.

Rysunek 7.16.

Mapa pamięci karty CGA

. = wolne obszary
M = pamięć RAM wykorzystywana przez oryginalną kartę CGA
m = dodatkowa pamięć wykorzystywana w kolorowym trybie tekstowym VGA

      :0–––1–––2–––3–––4–––5–––6–––7–––8–––9–––A–––B–––C–––D–––E–––F–––
0A0000:................................................................
0B0000:................................CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC

Oryginalna karta CGA wymagała jedynie 16 kB obszaru od adresu B8000, podczas gdy karta VGA pracująca w trybie emulacji karty CGA (kolorowy tryb tekstowy) może potrzebować 32 kB pamięci od adresu B8000. Oryginalna karta CGA nie jest wyposażona w pamięć ROM BIOS, zamiast tego jest obsługiwana przez sterowniki programowe rezydujące w pamięci ROM BIOS płyty głównej.

Obszar adresowy zajmowany przez kartę EGA (Enhanced Graphics Adapter)

Rysunek 7.17 przedstawia obszary pamięci wykorzystywane przez kartę EGA. Karta ta wykorzystuje całe 128 kB pamięci RAM od adresu A0000 do BFFFF. Pamięć ROM z procedurami odpowiedzialnymi za obsługę karty jest częścią karty i zajmuje 16 kB przestrzeni adresowej pomiędzy adresami C0000 i C3FFF.

Rysunek 7.17.

Mapa pamięci karty EGA

. = wolne obszary

G = pamięć RAM wykorzystywana przez kartę w trybie wysokiej rozdzielczości M = pamięć RAM wykorzystywana w monochromatycznym trybie tekstowym C = pamięć RAM wykorzystywana w kolorowym trybie tekstowym V = ROM BIOS karty EGA R = ROM BIOS płyty głównej :0–––1–––2–––3–––4–––5–––6–––7–––8–––9–––A–––B–––C–––D–––E–––F––– 0A0000:GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG 0B0000:MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC :0–––1–––2–––3–––4–––5–––6–––7–––8–––9–––A–––B–––C–––D–––E–––F––– 0C0000:VVVVVVVVVVVVVVVV................................................ 0D0000:................................................................ :0–––1–––2–––3–––4–––5–––6–––7–––8–––9–––A–––B–––C–––D–––E–––F––– 0E0000:................................................................ 0F0000:RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR

Oryginalna karta IBM EGA wykorzystuje tylko 16 kB przestrzeni adresowej od adresu C0000 na potrzeby swojej pamięci ROM. Modele kart kompatybilnych mogą wymagać dla swoich pamięci ROM obszaru 32 kB. Interesujące w przypadku kart EGA (odnosi się to także do kart VGA) jest to, że segmenty pamięci od adresów A0000 i B0000 nie są wykorzystywane jednocześnie. Np. kiedy włączony jest tryb wysokiej rozdzielczości, wykorzystywany jest tylko obszar A0000, podczas gdy pod obszar B000 nie jest mapowana (podłączona) żadna pamięć. Kiedy programowo przełączymy kartę w kolorowy tryb tekstowy, to natychmiast zwolni się segment A0000, a pojawi się pamięć drugiej połowy segmentu B0000. Pamięć RAM monochromatycznego trybu tekstowego we współczesnych komputerach nie jest właściwie nigdy wykorzystywana, ponieważ bardzo mało programów wymaga przełączenia karty w ten tryb. Na rysunku 7.17 przedstawiono także obszar zajmowany standardowo przez ROM BIOS płyty głównej komputera, dzięki czemu uzyskujemy mapę całego obszaru pamięci UMA.

Karta EGA zyskała pewną popularność, jednak szybko zeszła w cień karty VGA, która pojawiła się wkrótce po niej. Większość danych technicznych karty EGA dotyczących zajmowanych obszarów przestrzeni adresowej odnosi się również do karty VGA, ponieważ jest ona kompatybilna "wstecz" z kartą EGA.

Obszar adresowy zajmowany przez kartę VGA (Video Graphics Adapter)

Wszystkie karty kompatybilne z VGA, również karty SVGA (Super VGA), nie różnią się prawie wcale od karty VGA pod względem zajmowanych obszarów pamięci. Podobnie jak w przypadku karty EGA, karty te zajmują 128 kB pamięci RAM jako pamięć obrazu w obszarze A0000-BFFFF, jednak nie całą pamięć naraz. Podobnie jak poprzednio, pamięć obrazu jest podzielona na trzy różne obszary, każdy z nich jest wykorzystywany tylko wtedy, kiedy karta pracuje w odpowiadającym mu trybie. Jedyną różnicą jest to, że właściwie wszystkie karty VGA wykorzystują w pełni przydzielone im 32 kB obszaru adresowego na potrzeby swoich pamięci ROM (obszar C0000-C7FFF). Rysunek 7.18 przedstawia mapę pamięci kart VGA i SVGA.

Rysunek 7.18.

Mapa pamięci karty VGA

. = wolne obszary
G = pamięć RAM wykorzystywana przez kartę w trybie wysokiej 
    rozdzielczości
M = pamięć RAM wykorzystywana w monochromatycznym trybie tekstowym
C = pamięć RAM wykorzystywana w kolorowym trybie tekstowym
V = ROM BIOS karty VGA
R = ROM BIOS płyty głównej

      :0–––1–––2–––3–––4–––5–––6–––7–––8–––9–––A–––B–––C–––D–––E–––F–––
0A0000:GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
0B0000:MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
      :0–––1–––2–––3–––4–––5–––6–––7–––8–––9–––A–––B–––C–––D–––E–––F––-
0C0000:VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV................................
0D0000:................................................................
      :0–––1–––2–––3–––4–––5–––6–––7–––8–––9–––A–––B–––C–––D–––E–––F–––
0E0000:................................................................
0F0000:RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR

Widać, że typowa karta VGA wykorzystuje całe 32 kB obszaru na potrzeby swojej pamięci ROM, zawierającej programowe sterowniki karty. Niektóre karty VGA mogą zajmować nieco mniejszy obszar, jednak należy to do rzadkości. Podobnie jak w przypadku karty EGA, obszar pamięci RAM obrazu uaktywnia się jedynie wówczas, gdy karta jest w odpowiednim trybie pracy. Karta VGA pracująca w trybie wysokiej rozdzielczości wykorzystuje tylko segment A0000, a w kolorowym trybie tekstowym tylko drugą połowę segmentu B0000. Karta VGA prawie nigdy nie pracuje w monochromatycznym trybie tekstowym, dlatego pierwsza połowa segmentu B0000 pozostaje niewykorzystana (B0000-B7FFF). Na rysunku 7.18 widać także obszar zajmowany standardowo przez ROM BIOS płyty głównej, dzięki czemu uzyskujemy mapę całego obszaru pamięci UMA.

Komputery z płytą główną w formacie LPX (Low Profile), zamknięte w obudowie typu LPX lub Slimline, mają kartę graficzną wbudowaną w płytę główną. Pomimo że BIOS karty graficznej i BIOS płyty głównej mogą w tych komputerach pochodzić od tego samego producenta, podzespół karty graficznej zawsze emuluje standardową kartę VGA. BIOS karty graficznej jest widoczny w pierwszej połówce (32 kB) segmentu C0000, tak jakby był to BIOS osobnej karty VGA włożonej w gniazdo rozszerzające. Wbudowana w płytę główną karta graficzna może być łatwo wyłączona za pomocą przełącznika lub zworki, co umożliwia korzystanie z osobnej karty VGA, którą wkłada się do gniazda rozszerzającego. Odłączenie wewnętrznej karty graficznej, odpowiadającej jednak funkcjonalnie normalnej karcie VGA, umożliwia używanie osobnej karty, co rozwiązuje problem ewentualnego braku kompatybilności w przypadku gdy sterowniki karty są częścią ROM BIOS płyty głównej.

Niektórzy użytkownicy, obecni na rynku komputerowym w roku 1987, pamiętają może, jak wiele czasu zajęło producentom klonów kart graficznych dokładne skopiowanie karty VGA firmy IBM. Musiały minąć niemal dwa lata (prawie do roku 1989), zanim stały się dostępne karty VGA niezależnych producentów, które pracowały poprawnie i bez żadnych problemów z każdym oprogramowaniem współpracującym z kartą IBM VGA. Niektórzy moi wspólnicy, którzy kupili jedne z pierwszych modeli tych kart, niechcąco stali się członkami klubu określanego złośliwie jako "ROM tygodnia". W trakcie ich eksploatacji stale pojawiały się różne kłopoty; wiele układów ROM tych kart, dostarczonych już jako nowsze wersje, zostało odesłanych do producenta, bo pojawiły się nowe problemy. Nie miałem ochoty płacić za przywilej testowania modeli beta kart, które według zapewnień producentów miały coraz bardziej zbliżać się do VGA, poszedłem więc po linii najmniejszego oporu i za 596$ stałem się posiadaczem karty IBM VGA (PS/2 Display Adapter). Kwota, którą wówczas zapłaciłem, odpowiada w przybliżeniu cenie najlepszych dostępnych dziś na rynku kart AGP.

Karta ta sprawowała się bardzo dobrze i nigdy nie miałem problemów ze współpracą z oprogramowaniem. Po pewnym czasie doświadczyłem jednak dość zaskakujących problemów z pamięcią wykorzystywaną przez kartę. Było to moje pierwsze zetknięcie się z tym, co nazwałem pamięcią notatnikową (ang. scratch pad memory) karty. Odkryłem, że różne rodzaje kart rozszerzających mogą wykorzystywać niektóre obszary w pamięci UMA jako pamięć notatnikową do swoich potrzeb. W obszarze tym jest widoczna pamięć RAM obecna na karcie, która przechowuje status karty, dane konfiguracyjne i pozostałe informacje o zmiennym charakterze. Większość kart rozszerzających ma taką pamięć do swoich celów, lecz nie umieszcza jej w przestrzeni adresowej procesora. Niektóre jednak karty "mapują" swoją pamięć podręczną w przestrzeni adresowej procesora, aby informacje z niej mogły być wykorzystywane przez sterowniki programowe. Na rysunku 7.19 przedstawiona jest mapa pamięci karty graficznej komputera IBM PS/2 (karta IBM VGA).

W zakresie zajmowanego obszaru pamięci obrazu nie ma różnicy pomiędzy moją kartą a dowolną inną kartą VGA. Jedyną różnicą jest pamięć ROM, która przechowuje procedury obsługi karty, zajmuje ona 24 kB przestrzeni adresowej w obszarze C0000-C5FFF. Nietypowa jest również 2-kilobajtowa "dziura" od adresu C6000 oraz obszar 6 kB pamięci notatnikowej od adresu C68000, a także dodatkowe 2 kB pamięci notatnikowej od adresu CA000. Zwłaszcza te ostatnie 2 kB pamięci sprawiły mi pewną niespodziankę, gdy zainstalowałem w komputerze kartę adaptera SCSI wyposażoną w 16 kB pamięci ROM BIOS o domyślnym adresie startowym C8000. Natychmiast wystąpił konflikt, który kompletnie sparaliżował pracę całego komputera. Nie można było wystartować systemu, na monitorze nic nie było widać, a z głośnika słychać było tylko dĽwięki sygnalizujące błąd karty graficznej. W pierwszej chwili pomyślałem, że niechybnie spaliłem kartę graficzną, jednak po wyjęciu adaptera SCSI wszystko działało normalnie.

Rysunek 7.19.

Mapa pamięci karty IBM VGA (ISA, PS/2 Display Adapter)

. = wolne obszary

G = pamięć RAM wykorzystywana przez kartę VGA w trybie wysokiej rozdzielczości M = pamięć RAM wykorzystywana w monochromatycznym trybie tekstowym C = pamięć RAM wykorzystywana w kolorowym trybie tekstowym V = ROM BIOS karty IBM VGA v = pamięć notatnikowa karty IBM VGA R = ROM BIOS płyty głównej :0–––1–––2–––3–––4–––5–––6–––7–––8–––9–––A–––B–––C–––D–––E–––F––– 0A0000:GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG 0B0000:MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC :0–––1–––2–––3–––4–––5–––6–––7–––8–––9–––A–––B–––C–––D–––E–––F––– 0C0000:VVVVVVVVVVVVVVVVVVVVVVVV..vvvvvv........vv...................... 0D0000:................................................................ :0–––1–––2–––3–––4–––5–––6–––7–––8–––9–––A–––B–––C–––D–––E–––F––– 0E0000:................................................................ 0F0000:RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR

Sprawdziłem również działanie komputera z adapterem SCSI i starszym modelem karty CGA, doszedłem więc do wniosku, że na pewno zaistniał konflikt. W dokumentacji technicznej karty nie było jednak jasnych informacji na temat pamięci notatnikowej, musiałem do tego dojść sam metodą prób i błędów. Jeżeli w komputerze z kartą graficzną IBM VGA pojawią się konflikty współpracy z innymi kartami, to teraz już wiadomo, co jest przyczyną.

Oczywiście, nie można było w żaden sposób przesunąć 2-kilobajtowego "kawałka" pamięci notatnikowej. Musiałem jednak jakoś sobie radzić z tym problemem, dopóki miałem w komputerze kartę IBM VGA. Problem z adapterem SCSI rozwiązałem przesuwając obszar zajmowany przez BIOS karty SCSI pod inny adres.

Spotkałem również inne typy kart VGA z pamięcią notatnikową, jednak we wszystkich tych kartach pamięć ta była ulokowana w 32-kilobajtowym obszarze C0000-C7FFF, który normalnie jest przydzielony dla pamięci ROM BIOS płyty głównej. Na komputerze, którego BIOS zajmował 24 kB, mogłem zaobserwować, jak inne karty wykorzystują pozostałe 8 kB na swoją pamięć notatnikową, jednak w żadnej z tych kart – oprócz karty IBM VGA – obszar pamięci podręcznej nie wychodził poza adres C8000.

Pamięć ROM i specjalna pamięć RAM kart rozszerzających

Drugi 128-kilobajtowy blok pamięci górnej (UMA), począwszy od adresu C0000, zarezerwowano na potrzeby programów lub procedur BIOS (Basic Input Output System) zaszytych w pamięci kart rozszerzających. Procedury te są pamiętane w specjalnych układach pamięci "tylko do odczytu" (ang. read-only memory, ROM). Informacja w pamięci ROM jest pamiętana dzięki trwałym przepaleniom struktury pamięci, a jej zawartość nie może być zmieniana przez komputer. Pamięć ROM nadaje się do przechowywania programów, których kod nie ulega zmianie w czasie pracy komputera, a które zawsze muszą być obecne w pamięci. Przykładowe karty, które mogą mieć pamięć ROM, to karty graficzne, kontrolery dysków twardych, urządzenia komunikacyjne czy karty rozszerzające pamięć komputera.

W komputerach z procesorem 386 (lub lepszym) programy-sterowniki urządzeń albo programy rezydentne dzięki zastosowaniu tzw. menadżerów pamięci – np. MS DOS 6.0 MEMMAKER, IBM DOS RAMBOOST czy innych producentów, np. QMM firmy Quarterdeck – mogą być ładowane w wolne obszary pamięci UMA. Aby zmienić obszar pamięci RAM przyznany karcie rozszerzającej, trzeba najpierw zajrzeć do dokumentacji karty. W większości starszych kart zmiana obszaru adresowego karty polega na przestawieniu niektórych przełączników czy zworek. Ich znaczenie bez pomocy instrukcji może nie być całkiem oczywiste. Większość nowych kart, zwłaszcza kart Plug-and-Play, pozwala na programową zmianę ich ustawień. Odpowiednie programy są dostarczane wraz z kartą albo są to programy typu Menadżer konfiguracji (Configuration Manager) spotykane w nowszych systemach operacyjnych, takich jak Windows 95 czy OS/2.

Pamięć ROM BIOS karty graficznej

BIOS karty graficznej zapewnia komunikację pomiędzy układem kontrolera karty (ang. video chipset) a pamięcią obrazu (video RAM). Na potrzeby BIOS-u karty graficznej zarezerwowano całe 128 kB pamięci UMA od adresu C000, jednak popularne karty graficzne w komputerach PC nie wykorzystują całej tej przestrzeni adresowej. W tabeli 7.13 zebrano dane o zajętości przestrzeni adresowej przez BIOS popularnych typów kart graficznych.

Tabela 7.13. Obszar pamięci wykorzystywanej w różnych typach kart graficznych
Typ karty Pamięć używana przez BIOS karty
MDA (Monochrome Display Adapter) Brak – sterowniki karty w BIOS-ie płyty głównej
CGA (Color Graphics Adapter) Brak – sterowniki karty w BIOS-ie płyty głównej
EGA (Enhanced Graphics Adapter) 16 kB pamięci ROM karty (C0000–C3FFF)
VGA (Video Graphics Adapter) 32 kB pamięci ROM karty (C0000–C7FFF)
SVGA (Super VGA) 32 kB pamięci ROM karty (C0000–C7FFF)

Niektóre spośród bardziej zaawansowanych kart graficznych z tzw. akceleracją wykorzystują większość lub nawet cały obszar 128 kB pamięci górnej od adresu C000, co pozwala na przyśpieszenie operacji odmalowania obrazu w systemach operacyjnych Windows, OS/2 i innych systemach wykorzystujących graficzny interfejs użytkownika (ang. Graphical User Interface – GUI). Karty te mogą dodatkowo zawierać 4 MB lub więcej własnej pamięci RAM. Dane o aktualnie wyświetlanym obrazie mogą być dzięki temu szybko pobierane bez udziału procesora.

BIOS kontrolerów twardego dysku i adapterów SCSI

Adresy w pamięci UMA w obszarze C0000–DFFFF są także wykorzystywane przez BIOS wielu kart-kontrolerów dysków twardych. Tabela 7.14 przedstawia szczegółowo obszar pamięci i adresy wykorzystywane często przez BIOS tych kart.

Karty kontrolerów dysku twardego czy adaptera SCSI w indywidualnych przypadkach mogą wykorzystywać inne niż podane obszary przestrzeni adresowej, jednak najczęściej wykorzystują one segment od adresu C800, ponieważ adres ten jest określony w standardzie komputera IBM PC.

Tabela 7.14. Obszary przestrzeni adresowej wykorzystywane przez różne typy kart-kontrolerów dysków twardych
Typ karty Rozmiar pamięci ROM BIOS karty Zakres adresów wykorzystywanych przez BIOS
IBM XT 10 M Controller 8 kB C8000–C9FFF
IBM XT 20M Controller 4 kB C8000–C9FFF
Większość kontrolerów w komputerach XT 8 kB C8000–C9FFF
Większość kontrolerów w komputerach AT Brak Sterowniki karty zawiera BIOS płyty głównej
Większość adapterów IDE Brak Sterowniki karty zawiera BIOS płyty głównej
Większość kontrolerów ESDI 16 kB C8000–CBFFF
Większość adapterów SCSI 16 kB C8000–CBFFF

Właściwie wszystkie obecnie spotykane kontrolery dyskowe czy adaptery SCSI, wyposażone we własny BIOS, umożliwiają łatwą zmianę adresu startowego BIOS-u w segmentach C000 i D000. Lokalizacje wymienione w tabeli 7.14 są adresami domyślnymi, wykorzystywanymi przez większość kart. Jeżeli jednak adres jest używany przez inną kartę, to w dokumentacji nowej karty należy sprawdzić, jak można zmienić domyślny adres startowy BIOS-u karty, aby uniknąć konfliktu.

Rysunek 7.20 przedstawia przykładową mapę pamięci adaptera SCSI Adaptec AHA-1542CF.

Rysunek 7.20.

Domyślny obszar adresowy adaptera SCSI Adaptec AHA-1542CF

. = wolne obszary
G = pamięć RAM wykorzystywana przez kartę VGA w trybie wysokiej
    rozdzielczości
M = pamięć RAM wykorzystywana w monochromatycznym trybie tekstowym
C = pamięć RAM wykorzystywana w kolorowym trybie tekstowym
V = ROM BIOS karty IBM VGA
S = ROM BIOS karty adaptera SCSI
R = ROM BIOS płyty głównej

      :0–––1–––2–––3–––4–––5–––6–––7–––8–––9–––A–––B–––C–––D–––E–––F–––
0A0000:GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
0B0000:MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
      :0–––1–––2–––3–––4–––5–––6–––7–––8–––9–––A–––B–––C–––D–––E–––F–––
0C0000:VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV................................
0D0000:................................................SSSSSSSSSSSSSSSS
      :0–––1–––2–––3–––4–––5–––6–––7–––8–––9–––A–––B–––C–––D–––E–––F–––
0E0000:................................................................
0F0000:RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR

Zwróćmy uwagę, jak zostały rozmieszczone obszary adresowe adaptera SCSI. W pamięci UMA nie ma teraz konfliktów adresowych, jednak powyższy przydział pamięci dla BIOS-u urządzenia SCSI spowodował fragmentację wolnej przestrzeni w pamięci UMA. W większości komputerów w segmencie E000 nie jest umieszczony żaden BIOS, dlatego 64 kB tego obszaru pozostaje wolne. W powyższym przykładzie nie ma już innych urządzeń zajmujących przestrzeń adresową procesora, pojawił się natomiast wolny blok pamięci od adresu C8000 do adresu DBFFF o rozmiarze 80 kB. Za pomocą programu EMM386, dostarczanego wraz z systemem DOS, możliwe jest udostępnienie tych dwóch wolnych obszarów, dzięki czemu pamięć ta może być wykorzystana do ładowania sterowników urządzeń i programów rezydentnych. Niestety, programy ładowane do pamięci komputera nie mogą być rozbijane pomiędzy większą ilość fragmentów, dlatego rozmiar największego programu, jaki można załadować do pamięci UMA, wynosi 80 kB – taki rozmiar ma największy wolny blok w pamięci UMA. Znacznie lepiej byłoby przesunąć obszar zajmowany przez BIOS urządzenia SCSI, tak aby znalazł się zaraz za obszarem ROM BIOS karty VGA, ponieważ zwiększyłoby to obszar wolnego bloku w pamięci UMA do 144 kB. Korzystanie z pojedynczego bloku 144 kB zamiast z dwóch bloków 80 kB i 64 kB jest rozwiązaniem znacznie prostszym i bardziej efektywnym.

Na szczęście, w przypadku omawianego urządzenia SCSI jest możliwa zmiana adresów zajmowanych przez BIOS urządzenia, jednak wymaga to zmian ustawień kilku przełączników na karcie. Jedną z zalet sterownika Adaptec jest naklejka z opisem wszystkich ustawień przełączników znajdująca się na karcie (lub też napisy są na samej karcie). Oznacza to, że nie trzeba sięgać do dokumentacji karty, której akurat może nie być pod ręką. Opisywanie kart w ten sposób to praktyka, której stosowania należałoby życzyć innym producentom.

Po przemieszczeniu obszaru ROM BIOS karty SCSI pod adres C8000, mapa "zoptymalizowanej" pamięci wyglądałaby tak jak na Rysunku 7.21.

Rysunek 7.21.

Obszar adresowy adaptera SCSI Adaptec AHA-1542CF po optymalizacji

. = wolne obszary
G = pamięć RAM wykorzystywana przez kartę VGA w trybie wysokiej
    rozdzielczości
M = pamięć RAM wykorzystywana w monochromatycznym trybie tekstowym
C = pamięć RAM wykorzystywana w kolorowym trybie tekstowym
V = ROM BIOS karty IBM VGA
S = ROM BIOS karty adaptera SCSI
R = ROM BIOS płyty głównej

      :0–––1–––2–––3–––4–––5–––6–––7–––8–––9–––A–––B–––C–––D–––E–––F–––
0A0000:GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
0B0000:MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
      :0–––1–––2–––3–––4–––5–––6–––7–––8–––9–––A–––B–––C–––D–––E–––F–––
0C0000:VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVSSSSSSSSSSSSSSSS................
0D0000:................................................................
      :0–––1–––2–––3–––4–––5–––6–––7–––8–––9–––A–––B–––C–––D–––E–––F–––
0E0000:................................................................
0F0000:RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR

Zauważmy, że wolny obszar w pamięci UMA jest teraz ciągłym blokiem o rozmiarze 144 kB. Taka konfiguracja jest znacznie korzystniejsza w porównaniu z ustawieniami domyślnymi karty.

Warto zwrócić uwagę na to, że większość kart wyprodukowanych po roku 1996 są to karty Plug and Play. Do skonfigurowania takiej karty nie trzeba już używać pracochłonnej techniki "zworkowej". Karty te można konfigurować za pomocą odpowiedniego oprogramowania – w szczególności Menadżera urządzeń w Panelu sterowania Windows 9X. Przykładem takiego sterownika jest sterownik SCSI Adaptec AHA-2940U.

Karty sieciowe

Karty sieciowe także korzystają z segmentów w pamięci UMA, zaczynających się od adresów C000 i D000. Dokładny rozmiar zajmowanej przestrzeni oraz adres początkowy dla konkretnego modelu karty zależy od typu karty i jej producenta. Niektóre karty sieciowe w ogóle nie korzystają z zasobów adresowych komputera. Zapotrzebowanie karty sieciowej na zasoby adresowe ma dwie przyczyny:

  • w pamięci ROM karty rezyduje program inicjujący, tzw. IPL ROM (ang. Initial Program Load or Boot)

  • karta korzysta ze współdzielonej pamięć RAM (ang. shared memory)

IPL ROM jest układem pamięci ROM, najczęściej o rozmiarze 8 kB, zawierający program ładujący (ang. bootstrap loader), który umożliwia wystartowanie komputera z serwera plików (ang. file server) za pośrednictwem sieci lokalnej. Rozwiązanie to pozwala na usunięcie z komputera twardego dysku, dzięki czemu otrzymujemy bezdyskową stację roboczą (ang. diskless workstation). W takim komputerze nie ma żadnego urządzenia dyskowego (stacji dyskietek, dysku twardego), z którego mógłby zostać załadowany system operacyjny. Pamięć IPL ROM udostępnia procedury potrzebne na zlokalizowanie na serwerze plików obrazu systemu operacyjnego i załadowanie go do pamięci komputera, tak jakby był on ładowany z wewnętrznego napędu dyskowego komputera. Jeżeli komputer nie jest wykorzystywany do pracy jako bezdyskowa stacja robocza, to opłaca się wyłączyć pamięć IPL ROM. Pamiętajmy jednak, że większość kart sieciowych nie pozwala na wyłączenie IPL ROM, oznacza to, że tracimy 8 kB przestrzeni adresowej, która mogłaby być wykorzystana przez inne urządzenie, nawet jeżeli układ IPL ROM zostanie wyjęty z gniazda.

Pamięć współdzielona jest niewielkim obszarem pamięci RAM karty sieciowej, który jest widoczny w przestrzeni adresowej UMA komputera. Zamapowany fragment pamięci UMA jest wykorzystywany jako okno, przez które odbywa się komunikacja komputera z siecią i które zapewnia szybki transfer danych pomiędzy kartą sieciową a komputerem. Pionierem w tej dziedzinie była firma IBM, która po raz pierwszy zastosowała pamięć współdzieloną w swoich kartach sieciowych Token Ring. Obecnie pamięć współdzielona jest powszechnie stosowana również przez innych producentów kart sieciowych. Firma IBM opracowała koncepcję pamięci współdzielonej, gdy okazało się, że transfery danych za pośrednictwem kanałów DMA nie były dostatecznie szybkie w większości komputerów. Powodem wolnych transferów DMA była architektura kontrolera DMA i magistrali komputera, dotyczyło to zwłaszcza komputerów z 16-bitową magistralą ISA. Karty sieciowe, które nie korzystają z pamięci współdzielonej, przesyłają dane za pośrednictwem DMA albo w tzw. transferach programowanych (ang. Programmed I/O – PIO).

Pamięć współdzielona w komputerach z magistralą ISA jest szybszym rozwiązaniem niż kanały DMA czy przesyły PIO, wymaga jednak wolnego 16-kilobajtowego bloku w pamięci UMA. Większość standardowych kart sieciowych wykorzystuje PIO, ponieważ dzięki temu karty te są prostsze w konfiguracji i nie potrzebują wolnych adresów w pamięci UMA. Natomiast większość zaawansowanych kart sieciowych korzysta z pamięci współdzielonej. Pamięć współdzielona w większości kart ma rozmiar 16 kB i może być umieszczona w segmentach C000 lub D000 pod adresem wybranym przez użytkownika, który jest wielokrotnością 4 kB.

Rysunek 7.22 przedstawia obszary zajmowane domyślnie przez pamięć IPL ROM i pamięć współdzieloną karty sieciowej IBM Token Ring, przy czym ta mapa pamięci wyglądałaby podobnie także w przypadku innych kart sieciowych, np. Ethernet.

Rysunek 7.22.

Domyślny obszar adresowy karty sieciowej

. = wolne obszary
G = pamięć RAM wykorzystywana przez kartę VGA w trybie wysokiej
    rozdzielczości
M = pamięć RAM wykorzystywana w monochromatycznym trybie tekstowym
C = pamięć RAM wykorzystywana w kolorowym trybie tekstowym
V = ROM BIOS karty IBM VGA
I = pamięć IPL ROM karty sieciowej Token Ring
N = współdzielona pamięć RAM karty sieciowej Token Ring
R = ROM BIOS płyty głównej

      :0–––1–––2–––3–––4–––5–––6–––7–––8–––9–––A–––B–––C–––D–––E–––F–––
0A0000:GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
0B0000:MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
      :0–––1–––2–––3–––4–––5–––6–––7–––8–––9–––A–––B–––C–––D–––E–––F–––
0C0000:VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV................IIIIIIII........
0D0000:................................NNNNNNNNNNNNNNNN................
      :0–––1–––2–––3–––4–––5–––6–––7–––8–––9–––A–––B–––C–––D–––E–––F–––
0E0000:................................................................
0F0000:RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR

Na rysunku 7.22 pokazano również obszar zajmowany standardowo przez BIOS karty VGA, ponieważ karta ta znajduje się w prawie każdym komputerze. Zauważmy, że domyślny przydział adresów na potrzeby pamięci IPL ROM i pamięci współdzielonej można łatwo zmienić odpowiednio konfigurując kartę sieciową. Większość pozostałych typów kart sieciowych przypomina pod względem pamięci współdzielonej i IPL ROM kartę Token Ring, chociaż rozmiary obszarów przeznaczonych na te cele w innych kartach i domyślne adresy mogą być inne. Większość kart z pamięcią IPL ROM umożliwia odłączenie samej pamięci albo jej gniazda, tak że nie będą już potrzebne dodatkowe zasoby adresowe. Pozwala to na zaoszczędzenie obszaru UMA i zapobiega ewentualnym przyszłym konfliktom, gdy nie zamierzamy korzystać z pamięci IPL ROM.

Zauważmy, że urządzenie SCSI wpasowane w wolne obszary na rysunku 7.22 mogłoby być umieszczone pod domyślnym adresem swojego BIOS-u DC000, jak również pod optymalną lokalizacją C8000. Domyślne usytuowanie obszaru pamięci współdzielonej karty Token Ring nie jest optymalne i powoduje powstanie fragmentacji w obszarze UMA. Modyfikując ten obszar moglibyśmy osiągnąć lepszą konfigurację. Rysunek 7.23 przedstawia optymalną konfigurację komputera z kartą sieciową Token Ring i kartą SCSI.

Powyższa konfiguracja pozwala na ładowanie sterowników programowych do pojedynczego, ciągłego bloku pamięci o rozmiarze 120 kB w obszarze UMA. Zauważmy, że pamięć IPL ROM została przesunięta pod adres D0000 i jest ostatnim blokiem pamięci przed początkiem obszaru wolnego. Gdy nie zamierzamy korzystać z pamięci IPL ROM, możemy ją wyłączyć, a obszar wolnej pamięci zwiększy się do 128 kB i nadal będzie ciągłym blokiem. Jeżeli pozostawimy ustawienia domyślne karty sieciowej i adaptera SCSI, to nastąpi fragmentacja obszaru UMA na trzy części: 16 kB, 40 kB i 64 kB. Pamięć ta będzie nadal dostępna, jednak takie rozwiązanie byłoby dalekie od optymalnego.

Rysunek 7.23.

Obszar UMA zajmowany przez kartę SCSI Adaptec AHA-1542CF oraz kartę sieciową po optym

. = wolne obszary
G = pamięć RAM wykorzystywana przez kartę VGA w trybie wysokiej
    rozdzielczości
M = pamięć RAM wykorzystywana w monochromatycznym trybie tekstowym
C = pamięć RAM wykorzystywana w kolorowym trybie tekstowym
V = ROM BIOS karty IBM VGA
S = ROM BIOS karty adaptera SCSI
I = pamięć IPL ROM karty sieciowej Token Ring
N = współdzielona pamięć RAM karty sieciowej Token Ring
R = ROM BIOS płyty głównej

      :0–––1–––2–––3–––4–––5–––6–––7–––8–––9–––A–––B–––C–––D–––E–––F–––
0A0000:GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
0B0000:MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
      :0–––1–––2–––3–––4–––5–––6–––7–––8–––9–––A–––B–––C–––D–––E–––F–––
0C0000:VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVSSSSSSSSSSSSSSSSNNNNNNNNNNNNNNNN
0D0000:IIIIIIII........................................................
      :0–––1–––2–––3–––4–––5–––6–––7–––8–––9–––A–––B–––C–––D–––E–––F–––
0E0000:................................................................
0F0000:RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR

Proszę zwrócić uwagę, iż usługa Plug-and-Play w Windows 9X/NT nie ma na celu optymalizowania użytych adresów, a jedynie zapobieganie konfliktom. Oczywiście w przypadku sterowników 32-bitowych ich zlokalizowanie nie wpływa na obszar UMB – są one umieszczone w obszarze pamięci rozszerzonej.

Inne typy pamięci ROM w obszarze UMA

Oprócz pamięci ROM BIOS kontrolerów dysków twardych, adapterów SCSI czy kart sieciowych, segmenty C000 i D000 w obszarze UMA są wykorzystywane przez takie urządzenia jak emulatory terminali (ang. terminal emulators), karty bezpieczeństwa (ang. security adapters), karty rozszerzające pamięć (ang. memory boards) i inne karty. Niektóre z tych urządzeń wymagają części obszaru UMA tylko na potrzeby swoich pamięci ROM BIOS, inne mogą umieszczać w segmentach UMA swoją pamięć RAM. Informacje dotyczące konkretnego typu karty można znaleĽć w jej dokumentacji.

Pamięć ROM BIOS płyty głównej

Ostatnie 128 kB pamięci UMA zarezerwowano na potrzeby pamięci ROM BIOS płyty głównej. Program BIOS, zapisany w pamięci ROM, odpowiada za obsługę komputera w czasie inicjowania systemu, a w czasie normalnej pracy komputera przechowuje sterowniki różnych urządzeń. Programy-sterowniki muszą być dostępne natychmiast, dlatego nie mogą być ładowane z urządzenia zewnętrznego, takiego jak dysk. Programy zapisane w pamięci ROM płyty głównej pełnią następujące funkcje:

  • Przeprowadzanie testu POST (Power-On Self Test), który jest zbiorem procedur sprawdzających działanie płyty głównej, kontrolerów dyskowych, kart graficznych, klawiatury i innych komponentów niezbędnych do prawidłowego funkcjonowania komputera. Procedury te są użyteczne, gdy staramy się zdiagnozować uszkodzenia czy rozwiązujemy problemy ze sprzętem.

  • Procedury programu ładującego (ang. bootstrap loader) inicjują poszukiwanie systemu operacyjnego. Jeżeli na dysku lub dyskietce zostanie znaleziony system operacyjny, to nastąpi jego załadowanie do pamięci RAM, a po uruchomieniu system operacyjny przejmie kontrolę nad komputerem.

  • BIOS jest interfejsem programowym (nadrzędnym programem nadzorującym) dla wszystkich zasobów sprzętowych komputera. Z jego pomocą możliwy jest łatwy dostęp do zasobów komputera w aplikacjach poprzez wywołanie modułu podprogramu rezydującego w BIOS-ie. Alternatywą byłoby bezpośrednie odwoływanie się do urządzeń.

  • Program CMOS Setup jest stosowany do zmieniania informacji o konfiguracji komputera. Najczęściej uruchamia się go odpowiednią kombinacją klawiszy naciśniętą w czasie startu komputera. Za jego pomocą można zmieniać podstawowe parametry płyt głównych: zarządzanie energią, opcje chipsetów itp. Nie wszystkie komputery posiadają ten program w pamięci ROM. Niektóre trzeba uruchamiać z dysków.

Segmenty E000 i F000 w przestrzeni adresowej procesora są zarezerwowane na potrzeby pamięci ROM BIOS płyty głównej, jednak tylko niektóre komputery klasy AT wykorzystują cały ten obszar. Komputery PC/XT wymagają jedynie segmentu E000. Większość komputerów AT wykorzystuje cały obszar od adresu F000, może również dekodować (lecz nie wykorzystywać) któryś z segmentów od adresu E000. Dekodując dany obszar adresowy, płyta główna AT po prostu przejmuje kontrolę nad jego adresami, co wyklucza przydzielenie tego obszaru dla innych urządzeń. Nie jest wówczas możliwe zainstalowanie w komputerze kart, które by korzystały z tego obszaru adresowego. Dlatego większość kart wykorzystujących przestrzeń adresową procesora nie pozwala na umieszczanie swoich zasobów adresowych w obrębie segmentu E000. Może się to wydawać marnowaniem 64 kB przestrzeni adresowej, jednak komputery, począwszy od 386, mogą korzystać z usług jednostki MMU (Memory Management Unit) procesora, która dokonuje przesunięcia pamięci RAM z obszaru pamięci powyżej pierwszego megabajta (ang. extended memory) w tzw. blok pamięci górnej (ang. Upper Memory Block – UMB). Pamięć ta może być wykorzystywana następnie do ładowania programów. Dzięki temu wygodnemu rozwiązaniu unikamy utraty części przestrzeni adresowej.

W pamięci ROM na płytach głównych komputerów IBM rezyduje szereg innych programów – interfejsów, jednak ich lokalizacja w przestrzeni adresowej jest zazwyczaj spójna. Informację o pamięci ROM BIOS komputerów PC/XT znaleĽć można na płycie CD, zawartej w szóstym wydaniu tej książki.

Rysunek 7.24 przedstawia mapę pamięci ROM BIOS płyty głównej w większości komputerów klasy AT. Komputery te są pozbawione interpretera języka BASIC, który można spotkać w komputerach IBM (tzw. IBM Cassette BASIC). Zamiast interpretera BASIC-a, w pamięci ROM tych komputerów znajduje się program konfiguracyjny.

Rysunek 7.24.

Obszar UMA zajmowany przez kartę SCSI Adaptec AHA-1542CF oraz kartę sieciową po optym

. = wolne obszary
R = ROM BIOS płyty głównej

      :0–––1–––2–––3–––4–––5–––6–––7–––8–––9–––A–––B–––C–––D–––E–––F–––
0E0000:................................................................
0F0000:RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR

Zauważmy, że BIOS standardowego komputera AT zajmuje tylko 64 kB obszaru od adresu F000. W większości przypadków pozostała część obszar zarezerwowanego na potrzeby BIOS-u (segment E000) jest niewykorzystana i może być użyta jako przestrzeń UMB.

Komunikaty o błędach BIOS-u

Mapa pamięci ROM większości komputerów kompatybilnych z IBM jest taka sama, jak w oryginalnym komputerze IBM. Wyjątkiem jest obszar zawierający interpreter języka BASIC (Cassette BASIC, ROM BASIC). Dla niektórych użytkowników komputerów osobistych może być niespodzianką, że oryginalny komputer IBM PC miał z tyłu obudowy gniazdko do podłączenia magnetofonu kasetowego, który był wykorzystywany do ładowania programów i danych z kaset. Stacje dyskietek były wówczas dość drogie, a dysków twardych w ogóle nie brano pod uwagę, dlatego stosowano kasety z taśmą magnetyczną. Ceny stacji dyskietek jednak szybko spadły, a gniazdo magnetofonu kasetowego nie pojawiło się już w żadnym z póĽniejszych komputerów PC.

Oryginalny komputer PC w podstawowej konfiguracji był standardowo wyposażony tylko w 16 kB pamięci RAM. Komputery te nie miały stacji dyskietek, nie można więc było ładować plików z dysku ani zapisywać ich na dysk. Większość użytkowników komputerów pisała własne programy w języku BASIC (Beginner’s All-Purpose Symbolic Instruction Code) lub uruchamiała programy napisane przez kogoś innego. W pierwszych komputerach IBM interpreter języka BASIC rezydował w pamięci ROM BIOS i obsługiwał port magnetofonu kasetowego, znajdujący się z tyłu obudowy.

Najdziwniejszą jednak rzeczą było to, że firma IBM wyposażała swoje komputery w BASIC przez cały czas, aż do komputerów PS/2. Komputer przenośny 486 PS/2 (IBM P75 Portable), którego do niedawna używałem, był standardowo wyposażony w adapter SCSI, a obecnie jest wyposażony w dysk SCSI 4 GB. Komputer ten wciąż ma wbudowany interpreter języka BASIC, który zajmuje 32 kB przestrzeni adresowej. Porównałbym go do wyrostka robaczkowego u człowieka. Pamięć ROM z interpreterem BASIC-a jest właśnie czymś w rodzaju pozostałości takiego organu, używanym przez prehistorycznych przodków, który jednak nie ma żadnego teraĽniejszego znaczenia.

Gdy wyłączymy wszystkie napędy dyskowe w komputerze, możemy zobaczyć migawkę związaną z obecnością interpretera BASIC w komputerze IBM. Kiedy uruchomimy komputer, to z powodu braku dysku, z którego mógłby wystartować system operacyjny, większość komputerów IBM bezceremonialnie wyrzuci na ekranie komunikat pochodzący właśnie od interpretera BASIC:

The IBM Personal Computer Basic
Version C1.10 Copyright IBM Corp 1981
62940K Bytes free
Ok.

Większość użytkowników ogarnia strach na widok takiego ekranu, ponieważ oznacza on zazwyczaj niewykrycie dysku twardego. Żaden z komputerów kompatybilnych z IBM nie był nigdy wyposażony w interpreter języka BASIC w pamięci ROM, dlatego w komputerach tych na ekranie pojawia się inny komunikat, który jednak oznacza taką samą sytuację jak ta, kiedy komputer IBM uruchamiałby swój interpreter BASIC-a. Komputery wyposażone w AMI BIOS sygnalizują ten fakt następującym, kłopotliwym dla użytkownika komunikatem:

NO ROM BASIC – SYSTEM HALTED

Komunikat ten jest komunikatem wyświetlanym przez AMI BIOS w tych samych sytuacjach, w jakich komputer IBM wywołałby interpreter BASIC-a, którego nie ma oczywiści w pamięci ROM BIOS firmy AMI (to samo dotyczy kompatybilnych BIOS-ów innych producentów). Komunikaty te różnią się w zależności od producenta BIOS-u. Np. BIOS firmy Compaq powoduje wyświetlenie w opisanym wyżej przypadku następującego komunikatu:

Non-System disk or disk error
replace and strike any key when ready

Taki komunikat może być nieco mylący, ponieważ ten sam (albo podobny) komunikat o błędzie jest zapisany w sektorze startowym (ang. Boot Sector) systemu DOS i normalnie zostałby wyświetlony wówczas, gdy brakuje jakiegoś pliku systemowego lub też jest on uszkodzony.

W takiej samej sytuacji, tzn. kiedy w komputerze IBM ujrzelibyśmy komunikat pochodzący od interpretera języka BASIC, komputer wyposażony w BIOS firmy Award wyświetliłby następujący komunikat:

DISK BOOT FAILURE, INSERT SYSTEM DISK AND PRESS ENTER

W komputerze z BIOS-em firmy Phoenix komunikat ten wyglądałby następująco:

No boot device available – 
Strike F1 to retry boot, F2 for setup utility

W zależności od tego, jaki w rzeczywistości wystąpiłby błąd, na ekranie zostanie wyświetlony odpowiednio pierwszy lub drugi komunikat.

Komunikaty o błędzie różnią się w zależności od pochodzenia BIOS-u, jednak ich przyczyna jest taka sama. Wyświetlenie takiego komunikatu może nastąpić w wyniku zajścia jednego z dwóch zdarzeń. Zdarzenia te są związane z wartością pewnych bajtów w nadrzędnym sektorze ładującym dysku (ang. Master Boot Record, MBR), który jest pierwszym sektorem dysku twardego. Fizyczna lokalizacja tego sektora odpowiada następującym ustawieniom dysku: cylinder 0, głowica 0, sektor 1.

Pierwszy z problemów dotyczy dysku, który albo nie został podzielony na partycje, albo też ma uszkodzony sektor MBR. W czasie procesu startowego BIOS sprawdza ostatnie dwa bajty sektora MBR (pierwszego sektora dysku) w poszukiwaniu "sygnatury" – wartości 55AAh. Jeżeli ostatnie dwa bajty sektora MBR nie mają wartości 55AAh, wywoływane jest przerwanie 18h. W programie obsługi tego przerwania następuje skok do podprogramu, który powoduje wyświetlenie omawianego komunikatu (a także innych komunikatów), a w przypadku komputera IBM wywołuje interpreter BASIC-a.

Informacja w sektorze MBR (wraz z dwoma bajtami sygnatury) jest zapisywana przez program FDISK, dostarczany z systemem DOS. Po tzw. niskopoziomowym sformatowaniu twardego dysku wszystkie sektory są zainicjowane pewnym ciągiem bajtów, a pierwszy sektor nie zawiera wartości 55AAh. Innymi słowy, komunikaty o błędach wyświetlane przez BIOS pojawiają się wówczas, gdy próbujemy wystartować komputer z dysku, który został już sformatowany w sposób niskopoziomowy, nie został jednak podzielony na partycje.

Rozważmy teraz drugą sytuację, która spowodowałaby wyświetlenie omawianego przez nas komunikatu. Załóżmy, że sygnatura w sektorze MBR ma poprawną wartość, BIOS wykonuje wówczas kod zawarty w sektorze MBR. Polega to na sprawdzeniu wartości bajtów zapisanych w każdej z czterech tablic partycji dysku (ang. Boot Indicator Bytes). Bajty te znajdują się odpowiednio pod adresami 446 (1Beh), 462 (1Ceh), 478 (1Deh) i 494 (1Eeh). Są one używane w celu określenia jednej z czterech partycji dysku jako tzw. partycji aktywnej (tzn. takiej, z której nastąpi start systemu operacyjnego). Wartość 80h, zapisana w jednym z tych bajtów, oznacza, że odpowiadająca temu bajtowi partycja jest partycją aktywną, natomiast wartości pozostałych bajtów muszą być równe 00h. Jeżeli więcej niż jeden bajt ma wartość 80h (co wskazuje na większą niż 1 liczbę aktywnych partycji) lub też jeżeli któryś z tych czterech bajtów ma wartość inną niż 80h czy 00h, ujrzymy następujący komunikat:

Invalid partition table

Jeżeli wszystkie cztery bajty mają wartość 00h, co oznacza brak aktywnej partycji, to na komputerze IBM uruchomi się interpreter języka BASIC, a na innych komputerach ujrzymy jeden z omawianych uprzednio komunikatów, w zależności od BIOS-u naszego komputera. Sytuacja taka zaistniałaby wtedy, gdybyśmy za pomocą programu FDISK usunęli z dysku istniejące partycje, lecz nie utworzyli nowych partycji bądĽ nie ustawili aktywnej partycji w programie FDISK przed ponownym uruchomieniem komputera.

Pamięć powyżej pierwszego megabajta (ang. extended memory)

Jak już była mowa wcześniej w tym rozdziale, przestrzeń adresowa komputera z procesorem 286 lub lepszym może rozciągać się poza granicę jednego megabajta, która jest ograniczeniem w trybie rzeczywistym procesora. W komputerach 286 lub 386SX pamięć może mieć maksymalnie 16 MB; w komputerach 386DX, 486, Pentium, Pentium MMX czy Pentium Pro pamięć osiąga granicę 64 GB (65536 MB).

W komputerze klasy AT, aby możliwe było zaadresowanie pamięci powyżej pierwszego megabajta, procesor musi pracować w trybie chronionym (ang. protected mode). Tryb ten jest podstawowym trybem (ang. native mode) pracy nowszych procesorów Intel. W przypadku procesora 286, z pamięci powyżej pierwszego megabajta mogą korzystać jedynie programy pracujące w trybie chronionym. Procesory 386 i lepsze oferują inny tryb, zwany wirtualnym trybem rzeczywistym (ang. virtual protected mode). Tryb ten umożliwia podział pamięci powyżej pierwszego megabajta na kawałki o rozmiarze 1 MB. Z każdym takim obszarem związana jest osobna sesja trybu rzeczywistego. Wirtualny tryb rzeczywisty pozwala również na jednoczesną pracę kilku takich sesji w osobnych, chronionych obszarach pamięci. Możliwa jest jednoczesna praca kilku programów systemu DOS, jednak dla każdego z nich dostępny jest maksymalnie obszar 640 kB pamięci RAM, ponieważ w każdej sesji jest symulowane środowisko trybu rzeczywistego, wraz z obszarem BIOS-u i obszarem pamięci UMA. Jednoczesne uruchamianie kilku programów w wirtualnym trybie rzeczywistym, zwane wielozadaniowością (ang. multitasking), wymaga oprogramowania, które mogłoby zarządzać każdym z uruchomionych programów i zabezpieczać programy przed interferowaniem ze sobą. Wszystkie te cechy zapewniają systemy operacyjne OS/2, Windows 95 i Windows NT.

Układy 286 i wyższe mogą również pracować w trybie rzeczywistym (ang. real mode), który zapewnia pełną kompatybilność z procesorami 8088 znajdującymi się w komputerach PC/XT. Tryb rzeczywisty umożliwia uruchamianie programów na komputerze AT tak, jakby były one uruchamiane na komputerze XT, przy czym w danym momencie może być uruchomiony tylko jeden program. Jednak komputer AT, również z procesorem 386, 486, Pentium, Pentium Pro czy Pentium II, pracując w trybie rzeczywistym jest tylko nieco szybszym komputerem turbo PC. Procesory w trybie rzeczywistym emulują układy 8086 i 8088, jednak nie mogą w tym samym czasie pracować w trybie chronionym. Z tego powodu procesory Intel, począwszy od 386, zostały wyposażone w wirtualny tryb rzeczywisty, w którym są zapewnione mechanizmy ochrony pamięci. Dzięki temu możliwe jest wykonywanie programów trybu rzeczywistego po kontrolą trybu chronionego systemu operacyjnego OS/2 czy Windows 95.

Pamięć rozszerzona (ang. extended memory) jest obszarem pamięci powyżej pierwszego megabajta, dostęp do tej pamięci jest możliwy tylko wtedy, gdy procesor pracuje w trybie chronionym.

Pamięć XMS

Specyfikacja pamięci XMS została opracowana w 1987 roku przez firmy Microsoft, Intel i AST Corp. oraz Lotus Development jako specyfikacja wykorzystania przez programy obszaru pamięci powyżej pierwszego megabajta. Pamięć XMS może funkcjonować na komputerze z procesorem 286 lub lepszym i pozwala na wykorzystywanie pamięci spoza zasięgu systemu DOS, powyżej pierwszego megabajta wraz z dodatkowym blokiem pamięci, przez programy trybu rzeczywistego (przeznaczone do uruchamiania w systemie operacyjnym DOS).

Przed pojawieniem się specyfikacji XMS nie istniała żadna możliwość współbieżnego wykonywania programów, które dokonywały przełączania procesora w tryb pracy chronionej i korzystały z pamięci powyżej pierwszego megabajta. Nie było możliwe sprawdzenie przez działający program, jak pamięć ta jest wykorzystywana przez inny, działający równolegle program, ponieważ w trybie rzeczywistym programy nie mogły zaadresować dodatkowej pamięci. Przykładem programu-arbitra, który sam zajmuje całą pamięć powyżej pierwszego megabajta po to, aby ją następnie wydzielać innym programom, przestrzegając przy tym reguł protokołu XMS, jest program HIMEM.SYS. W ten sposób kilka programów wykorzystujących pamięć XMS może jednocześnie pracować w systemie operacyjnym DOS. Programy te uzyskują dostęp do pamięci powyżej pierwszego megabajta, przełączając w razie potrzeby na pewien czas procesor w tryb pracy chronionej. Reguły protokołu XMS zapobiegają powstaniu sytuacji, w której jeden program uzyskuje dostęp do pamięci innego programu. System operacyjny Windows 3.x prowadzi zarządzanie pamięcią przełączając okresowo procesor w tryb chroniony, obsługuje w ten sposób kilka programów jednocześnie i dlatego wymaga obecności pamięci XMS. System Windows 95 pracuje najczęściej w trybie chronionym, jednak nadal wiele jego wywołań systemowych, w których uzyskuje dostęp do różnych komponentów komputera, odbywa się w trybie rzeczywistym. Systemy operacyjne Windows NT i OS/2 są systemami pracującymi wyłącznie w trybie chronionym.

Pamięć powyżej jednego megabajta może być dostosowana do specyfikacji XMS poprzez zainstalowanie odpowiedniego sterownika (ang. device driver) w pliku CONFIG.SYS. Najczęściej stosowanym sterownikiem jest program HIMEM.SYS, dostarczany wraz z systemami operacyjnymi Windows 3.x i DOS począwszy od wersji 4.0. Są dostępne również inne programy, np. QMM, które dodane do pliku CONFIG.SYS uaktywniają obszar pamięci powyżej pierwszego megabajta jako pamięć XMS.

Obszar pamięci "wysokiej" (ang. High Memory Area – HMA) i linia adresowa A20 procesora 286

Obszar pamięci "wysokiej" (HMA) ma rozmiar 64 kB pomniejszony o 16 bajtów i zaczyna się na początku drugiego megabajta pamięci. Obszar ten można wykorzystać do ładowania sterowników programowych i programów rezydentnych, dzięki czemu zwolnione obszary pamięci podstawowej mogą być wykorzystywane przez programy pracujące w trybie rzeczywistym. Do pamięci HMA można w danej chwili załadować tylko jeden sterownik lub program rezydentny, niezależnie od jego wielkości. Pierwotnie mógł to być dowolny program, jednak firma Microsoft zdecydowała, że jako pierwszy będzie tam ładowany system operacyjny i wbudowała w tym celu odpowiednie mechanizmy w system DOS począwszy od wersji 5.0.

Obszar pamięci HMA ma duże znaczenie w przypadku korzystania z DOS-a 5.0 lub nowszego, ponieważ od wersji 5.0 system DOS może przenieść w ten obszar swoje jądro (ang. kernel), liczące około 45 kB kodu. Aby tego dokonać, należy najpierw załadować do pamięci sterownik obsługujący pamięć XMS (np. HIMEM.SYS), a następnie dodać do pliku CONFIG.SYS linię DOS=HIGH. Dzięki temu zwolnione zostanie dodatkowe 45 kB pamięci podstawowej dla programów pracujących w trybie rzeczywistym. Zasadniczo pamięć powyżej pierwszego megabajta dostępna jest jedynie w trybie chronionym procesora, jednak okazało się, że "błąd" w konstrukcji procesora 286 (który szczęśliwie został przeniesiony do nowszych procesorów firmy Intel, nazwano go przy tym "zaletą") spowodował przez przypadek, że w trybie rzeczywistym możliwy jest dostęp do prawie całego pierwszego segmentu pamięci powyżej pierwszego megabajta.

Dostęp do pamięci HMA jest nadzorowany przez sterownik HIMEM.SYS albo inny sterownik o podobnych funkcjach. Interesujące jest pochodzenie błędu odpowiedzialnego za całą sprawę, ponieważ dotrwał on aż do procesora Pentium II.

U Ľródeł problemu tkwi fakt, że adresy w pamięci adresowanej przez procesor Intel są określane za pomocą adresu segmentu i przesunięcia względem początku segmentu. Jeżeli adres segmentu zostanie ustawiony na FFFF (co wskazuje komórkę o adresie FFFF0, znajdującą się 16 bajtów poniżej końca pierwszego megabajta), a jednocześnie adres przesunięcia będzie równy FFFF, czyli 64 kB, to uzyskamy następujący adres liniowy:

  FFFF          segment
+ FFFF          przesunięcie
--------
  10FFEF        suma

Adres ten nie ma racji bytu w komputerach z procesorem 8086 czy 8088, ponieważ procesory te mają tylko 20 linii adresowych i nie mogą wygenerować tak dużego adresu. Procesory te odrzucają pierwszą cyfrę wyniku i otrzymują adres 0FEF, który w gruncie rzeczy wskazuje na komórkę zlokalizowaną 16 bajtów przed końcem pierwszego segmentu pierwszego megabajta. Problem z procesorem 286 i nowszymi polega na tym, że w trybie rzeczywistym procesory te zachowują się w opisany wyżej sposób – efektywny adres również powinien wskazywać na komórkę w pierwszym segmencie pierwszego megabajta. Jednak na skutek błędu 21. linia adresowa procesora (A20) pozostaje wtedy aktywna, dzięki czemu efektywny adres wskazuje na komórkę pamięci zlokalizowaną 16 bajtów przed końcem pierwszego segmentu drugiego megabajta pamięci. Pamięć ta w założeniach miała być dostępna wyłącznie w trybie chronionym, jednak opisany błąd spowodował, że cały pierwszy segment (bez 16 bajtów) drugiego megabajta stał się dostępny w trybie rzeczywistym.

Błąd ten spowodował problemy w działaniu wielu programów trybu rzeczywistego, których prawidłowe działanie było zależne od "zawinięcia" pamięci. Dlatego inżynierowie firmy IBM przy opracowywaniu komputera AT musieli zapewnić mechanizm wyłączania linii A20 w czasie pracy w trybie rzeczywistym i włączania jej ponownie przy przełączaniu w tryb chroniony. Dokonano tego dzięki wykorzystaniu jednej z niewykorzystanych końcówek kontrolera klawiatury, układu 8042, znajdującego się na płycie głównej. Funkcją układu 8042 było odczytywanie kodów naciskanych klawiszy i przesyłanie ich do procesora, jednak niektóre końcówki układu nie brały udziału w tej operacji. Dlatego firma IBM wpadła na pomysł, aby układ ten wykorzystać do uaktywniania w razie potrzeby linii A20, zapewniając w ten sposób pełną emulację procesorów 8088 i 8086 przez "wadliwy" procesor 286 pracujący w trybie rzeczywistym.

Firma Microsoft odkryła, że za pomocą kontrolera 8042 można uaktywnić linię A20 i wykorzystać "wadę" procesora, dzięki czemu możliwy stał się dostęp do pierwszych 64 kB pamięci powyżej pierwszego megabajta, bez konieczności angażowania w to stosunkowo długiego i skomplikowanego procesu przełączania procesora w tryb chroniony. W ten sposób "narodził się" program HIMEM.SYS i obszar pamięci HMA. Zadaniem sterownika HIMEM.SYS jest sprawdzanie, czy linia A20 powinna być w danym momencie wyłączona, przez co zostałaby utrzymana kompatybilność z procesorami 8086/8088, czy też powinna zostać uaktywniona w razie żądania dostępu do pamięci HMA lub przy przełączaniu procesora w tryb chroniony. Podsumowując, program HIMEM.SYS za pośrednictwem układu 8042 sprawuje kontrolę nad linią A20.

Pamięć EMS (expanded memory – EMS)

Niektóre starsze programy mogą wykorzystywać pamięć EMS (Expanded Memory Specification). W przeciwieństwie do pamięci podstawowej (pierwszy megabajt) czy też pamięci XMS (obszar od 2 do 16 lub 4096 megabajtów), pamięć EMS nie jest adresowana bezpośrednio przez procesor. Zamiast tego dostęp do niej jest możliwy za pośrednictwem okna o rozmiarze 64 kB oraz 16 kB stron umieszczonych w obszarze UMA. Specyfikacja EMS została zrealizowana jako zbiór przełączanych banków pamięci. Na karcie rozszerzającej znajduje się dość duża ilość 64-kilobajtowych segmentów pamięci wraz z układami dokonującymi niezbędnego przełączania i mapowania banków pamięci. Wolny segment w pamięci UMA wykorzystywany jest przy tym jako obszar, przez który procesor uzyskuje dostęp do pamięci EMS. Kiedy całe 64 kB zostaną zapełnione danymi, karta rozszerzająca dokonuje przełączenia segmentów, w wyniku czego na miejscu pełnego segmentu pojawia się nowy, pusty segment. Karta pamięci EMS dokonuje odpowiedniego przełączania segmentów, tak aby po zapełnieniu się jednego segmentu na jego miejscu pojawiał się segment pusty. Tylko jeden segment może być w danej chwili obsługiwany przez procesor, dlatego pamięć EMS jest rozwiązaniem bardzo niewydajnym w przypadku kodu programów i stosuje się ją tylko dla danych.

Rysunek 7.25 obrazuje sposób, w jaki pamięć EMS jest wpisana w przestrzeń zajmowaną przez pamięć konwencjonalną i pamięć EMS.

Rysunek 7.24.

Obszar pamięci podstawowej, XMS i EMS

Firma Intel opracowała swego czasu kartę pamięci ogólnych zastosowań, wyposażoną w odpowiednie układy dokonujące przełączania banków pamięci. Karty te, określane jako Above Boards, były w sprzedaży dobrych kilkanaście lat temu. Pamięć EMS została opracowana z myślą o komputerach 8-bitowych, w których była szczególnie użyteczna, ponieważ komputery te były pozbawione możliwości obsługi pamięci XMS. Komputery z procesorami 286 i nowszymi pozwalały na dodanie do 16 MB lub 4 GB pamięci XMS, która jest znacznie wydajniejsza od wolnej pamięci EMS. Karty pamięci EMS nie są już produkowane, a sama pamięć EMS, zarówno pod względem koncepcji, jak i funkcjonalnym, jest rozwiązaniem przestarzałym.

W przypadku "antycznego" oprogramowania, wymagającego pamięci EMS, lepiej je zamienić na nowszą wersję, która może się bezpośrednio odwoływać do pamięci XMS. Dzięki dużym możliwościom jednostki zarządzania pamięcią MMU procesora 386 jest również możliwa konwersja pamięci powyżej pierwszego megabajta, tak aby "wyglądała" jak pamięć LIM EMS. Jednak w ten sposób powinniśmy postąpić dopiero wtedy, kiedy okaże się, że nie można wprost komunikować się z pamięcią XMS. Programem, który został opracowany z myślą o zamianie pamięci XMS na EMS, jest EMM386. Obecnie program ten służy raczej do mapowania pamięci XMS w obszar UMA w celu ładowania tam sterowników programowych. Sterownik EMM386 jest dostarczany z systemem DOS od wersji 5.0 oraz z systemem Windows. Jeżeli dostępnych jest kilka wersji tego sterownika, to zawsze używajmy wersji najnowszej.

Zapobieganie konfliktom i nakładaniu się obszarów pamięci ROM BIOS

Jak już zostało powiedziane w poprzednich podrozdziałach, obszary zaczynające się od adresów C000 i D000 zostały zarezerwowane na potrzeby pamięci ROM i RAM kart rozszerzających. Jeżeli obszary adresowe pamięci ROM lub RAM dwóch kart zachodzą na siebie, to zazwyczaj żadna z kart nie pracuje poprawnie. Poszczególne karty będą indywidualnie pracowały poprawnie, jednak nie będą działać razem.

W przypadku wielu kart rozszerzających jest możliwa zmiana położenia obszaru pamięci karty za pomocą zworek lub przełączników. Zmiana taka może okazać się konieczna do poprawnej jednoczesnej pracy dwóch kart w komputerze. Ten typ konfliktu może być trudny do wyeliminowania. W celu jego rozwiązania powinniśmy przeczytać dokumentację karty i ustalić, jakie obszary przestrzeni adresowej dana karta zajmuje oraz w jaki sposób można zmienić adresy, aby umożliwić jednoczesną pracę obydwu kart. Przez większość czasu poświęconego na rozwiązywanie problemów powinniśmy próbować zmian parametrów konfiguracyjnych karty lub zworek, zmianę ustawień czy parametrów sterowników programowych. Umożliwi to współistnienie dwóch kart w komputerze i niekolidowanie ich ze sobą.

Ponadto trzeba zapewnić, aby karty nie korzystały z tego samego przerwania IRQ, kanału DMA czy adresów w przestrzeni wejścia/wyjścia. Konfliktów w dostępie do zasobów takich jak przerwania, kanały DMA czy porty we/wy można uniknąć sporządzając tabelę konfiguracji komputera, do której wpisujemy te zasoby, które są wykorzystywane przez komputer. W rezultacie otrzymujemy obraz wykorzystania wszystkich zasobów w komputerze oraz wzajemne powiązania pomiędzy kartami rozszerzającymi. Taki sposób postępowania pomaga przewidywać potencjalne konflikty i zapewnia, że każda nowa karta w komputerze zostanie od razu poprawnie skonfigurowana. Tabela ta stanowi również ważną dokumentację, kiedy rozważamy zakup nowych kart rozszerzających. Nowe karty należy tak konfigurować, aby wykorzystywały dostępne zasoby komputera.

Jeżeli komputer odpowiada specyfikacji Plug-and-Play, a używane przez nas karty są kartami PnP, to karta sama będzie mogła dokonać koniecznych przesunięć obszarów pamięci, aby rozwiązać zaistniałe konflikty. Niestety, procedury te nie są zbyt "inteligentne" i wciąż wymagają interwencji użytkownika – jawnego podania takiej lokalizacji w przestrzeni adresowej, która będzie najbardziej optymalną dla pamięci karty.

Przepisanie zawartości pamięci ROM do RAM (shadow ROM)

W komputerach zbudowanych w oparciu o procesor 386 lub lepszy, który komunikuje się z pamięcią za pośrednictwem 32- lub 64-bitowej magistrali, do komunikacji z pamięcią ROM BIOS wykorzystywana jest często magistrala 16-bitowa. Ponadto karty wyposażone we własny BIOS mogą komunikować się z pamięcią komputera poprzez magistralę 8-bitową. W zaawansowanych, nowoczesnych komputerach, 8- czy 16-bitowa magistrala jest "wąskim gardłem", które obniża wydajność całego systemu. Oprócz ograniczeń w szerokości magistrali, w przypadku większości układów pamięci ROM czas dostępu jest o wiele dłuższy niż dla pamięci DRAM (dynamic RAM). Najszybsze dostępne na rynku układy ROM osiągają czasy dostępu w zakresie 150–200 ns, podczas gdy pamięci RAM we współczesnych komputerach mają czas dostępu równy 7 ns i mniej.

Ponieważ pamięć ROM jest dość wolna, każdy dostęp do danych lub programu zapisanego w pamięci ROM powoduje wstawienie cykli oczekiwania. Cykle oczekiwania mogą dramatycznie spowolnić pracę całego komputera, zwłaszcza że wiele sterowników urządzeń, do których odwołuje się system DOS, zawartych jest w pamięci ROM BIOS znajdującej się na płycie głównej i na kartach rozszerzających. Na szczęście opracowano sposób na przeniesienie zawartości wolnych 8- lub 16-bitowych układów ROM do znacznie szybszej, 32-bitowej pamięci RAM. W języku angielskim jest to określane jako ROM shadowing.

Właściwie wszystkie komputery z procesorem 386 i lepszym pozwalają na przepisanie do pamięci RAM pamięci ROM płyty głównej, a czasami także pamięci ROM kart rozszerzających. Polega to na przeniesieniu kodu z wolnych układów ROM do szybkiej, 32-bitowej pamięci RAM. Przepisanie zawartości ROM do RAM może znacznie podnieść szybkość wykonywania procedur BIOS-u – czasami aż do czterech lub pięciu razy.

Przepisywanie zawartości ROM do RAM odbywa się przy pomocy wydajnej jednostki MMU, która jest częścią procesorów Intel, począwszy od 386. Za pomocą odpowiedniej instrukcji można nakazać, by jednostka MMU odczytała zawartość pamięci ROM, umieściła ją w RAM i sprawiła, aby zawartość pamięci RAM była widoczna pod takimi samymi adresami, jak poprzednio pamięć ROM. Następnie wyłączamy pamięć ROM, a pamięć RAM, która teraz jest widziana jako ROM, jest całkowicie zabezpieczona przed zapisem. Pamięć ta przypomina więc teraz pod każdym względem poprzednią pamięć ROM, oprócz tego, że jest od niej znacznie szybsza! W większości komputerów program konfiguracyjny (SETUP) posiada opcją uaktywniającą przepisywanie pamięci ROM BIOS płyty głównej (zazwyczaj segment F000) oraz pamięci ROM BIOS karty graficznej (zajmującej zazwyczaj pierwsze 32 kB segmentu C000). Niektóre komputery umożliwiają nawet kopiowanie do pamięci RAM pozostałych fragmentów pamięci ROM z segmentu C000 i D000.

Powinniśmy pamiętać o jednej ważnej rzeczy, mianowicie jeżeli włączymy przepisywanie pamięci ROM o zadanych adresach do pamięci RAM, to przy uruchamianiu komputera każda informacja znaleziona pod tym obszarem zostanie przepisana do pamięci RAM i zapis danych w tym obszarze stanie się niemożliwy. Gdybyśmy postąpili tak w przypadku karty sieciowej wyposażonej we własną pamięć współdzieloną, widoczną w obszarze UMA, to karta odmówiłaby jakiejkolwiek pracy. Dlatego do RAM można kopiować tylko te obszary adresowe, pod którymi pierwotnie widoczna jest pamięć ROM, a nie RAM.

W niektórych komputerach niemożliwe jest przepisywanie do RAM obszarów innych niż BIOS płyty głównej czy karty graficznej. W komputerach tych, aby przepisać do RAM zawartość innych obszarów, trzeba skorzystać z usług jakiegoś programu zarządzającego pamięcią, np. EMM386 (który jest dostarczany z systemami DOS i Windows). Powinno się jednak przede wszystkim korzystać z możliwości, jakie w zakresie przepisywania ROM do RAM daje sprzęt, ponieważ sprzętowe przepisywanie zagospodarowuje te obszary pamięci UMA, które pozostałyby niewykorzystane. Natomiast program zarządzający pamięcią, taki jak EMM386, angażuje do tego nieduże obszary pamięci XMS (powyżej pierwszego megabajta), równe rozmiarowi pamięci ROM, której zawartość przepisujemy.

Jeżeli przepisanie pewnego obszaru ROM do pamięci RAM spowoduje, że przestanie prawidłowo działać jedna lub więcej kart rozszerzających w komputerze, to powodem tego może być przepisanie do RAM komputera obszarów pamięci podręcznej (ang. scratch pad memory) kart rozszerzających. Do pamięci tej nie będzie można zapisywać żadnych danych, dopóki opcja "ROM shadowing" nie zostanie wyłączona. Aby komputer mógł znowu poprawnie funkcjonować, należałoby tę opcję wyłączyć. Jeżeli jest możliwe precyzyjne ustalenie, które adresy w obszarze UMA odnoszą się do pamięci ROM, a które do RAM, to możemy nakazać przepisanie tylko obszarów ROM i osiągnięcie tym sposobem maksymalnej wydajności komputera.

Na uwagę zasługuje fakt, iż kopiowanie ROM-u do dużo szybszego RAM-u nie ma większego znaczenia dla systemów 32-bitowych, jak Windows 9X/NT. Systemy te używają 16-bitowego kodu BIOS jedynie podczas startu systemu. Potem uruchamiają własne, 32-bitowe sterowniki i ich używają. ROM Shadowing ma sens jedynie w przypadku starszych systemów operacyjnych, jak 16-bitowy DOS.

Całkowity rozmiar pamięci komputera a pamięć dostępna dla programów

Większość użytkowników nie zdaje sobie sprawy, że nie cała pamięć modułów SIMM czy inna pamięć fizyczna, którą kupimy i zainstalujemy w komputerze, będzie dostępna dla programów. Kilka osobliwych cech w architekturze komputera spowodowało, że całkowity rozmiar dostępnej pamięci został pomniejszony o 384 kB zagospodarowane jako obszar UMA.

Np. w większości komputerów z 4 MB (4096 kB) pamięci RAM, w czasie testu POST albo po uruchomieniu programu SETUP ujawni się dostępne 3712 kB pamięci RAM. Widać więc, że brakuje 4096 – 3712 = 384 kB pamięci RAM! Część komputerów z 4 MB RAM może ujawnić obecność 3968 kB pamięci, co oznacza brak 4096 – 3968 = 128 kB RAM.

Dokładniejsze informacje, niż podawane w czasie testu POST, można uzyskać uruchamiając program SETUP i sprawdzając ilość pamięci podstawowej i pamięci XMS. W większości komputerów mamy o dyspozycji 640 kB pamięci podstawowej i 3073 kB pamięci XMS. W niektórych przypadkach program SETUP poinformuje o "premii" w postaci 640 kB pamięci podstawowej i 3228 kB pamięci XMS. Inaczej mówiąc, w większości komputerów "brakuje" 384 kB pamięci RAM, podczas gdy w pozostałych tylko 128 kB.

Przyczyna tego niedoboru nie jest prosta do wyjaśnienia, jednak dla wszystkich komputerów jest taka sama. Załóżmy, że w komputerze 486 zainstalowane są dwa 72-końcówkowe (36-bitowe) moduły SIMM. W rezultacie w komputerze będą 2 MB pamięci w dwóch osobnych bankach – procesor 486 ma 32-bitową magistralę danych, a na każde 8 bitów danych przypada jeden bit parzystości. W tym przypadku pojedynczy moduł SIMM tworzy jeden bank pamięci. Zauważmy, że w większości tanich komputerów 486 wykorzystuje się 30-końcówkowe (9-bitowe) moduły SIMM i wówczas pojedynczy bank pamięci składa się z czterech takich modułów. Obszar pierwszego banku rozpoczyna się od adresu 000000 (początek pierwszego megabajta), a drugi bank od adresu 100000 (początek drugiego megabajta).

Kardynalna reguła, dotycząca zasobów adresowych komputera, mówi, że żadne dwa urządzenia w komputerze nie powinny nigdy mieć przypisanych tych samych obszarów adresowych. Oznaczałoby to jednak, że 384 kB pamięci z pierwszego banku pozostawałoby w bezpośrednim konflikcie z pamięcią obrazu (segmenty A000 i B0000), pamięcią ROM kart rozszerzających (segmenty C000 i D000) i oczywiście pamięcią ROM płyty głównej (segmenty E000 i F000). Wszystkie moduły SIMM, które zajmują ten obszar, musiałyby być wyłączone, w przeciwnym razie komputer by nie działał. W praktyce projektant płyty głównej może uczynić trzy rzeczy z pamięcią modułów SIMM, zajmującą obszar A0000-FFFFF:

  • Przepisać zawartość pamięci ROM do RAM (ang. shadowing), po czym wyłączyć układy ROM

  • Wyłączyć całą pamięć RAM widoczną w obszarze UMA i wyeliminować w ten sposób jakiekolwiek konflikty w tym obszarze.

  • Przenieść niewykorzystane obszary pamięci RAM dodając je do obszaru pamięci XMS

W większości komputerów do pamięci RAM przepisuje się ROM płyty głównej (zazwyczaj 64 kB), ROM karty graficznej (32 kB) a pozostałe obszary pamięci RAM po prostu się wyłącza. Niektóre płyty główne umożliwiają przepisanie do RAM dodatkowo 16-kilobajtowej porcji ROM z obszaru C8000-DFFFF.

Do pamięci RAM komputera można przepisywać tylko zawartość pamięci ROM, natomiast nie można np. pamięci RAM karty sieciowej. Jeżeli karta sieciowa ma bufor wpisany w obszar C8000-DFFFF, to nie należy go przepisywać do RAM komputera, ponieważ karta przestanie wtedy działać. Z tych samych przyczyn nie należy przepisywać obszaru A0000-BFFFF, ponieważ znajduje się tam pamięć RAM bufora karty graficznej.

Większość płyt głównych nie umożliwia przesunięcia wolnej pamięci UMA na koniec obszaru XMS (ang. remapping) , lecz po prostu pamięć tę wyłącza. Dlatego też włączenie mechanizmu "ROM shadowing" nie powoduje w praktyce zmniejszenia obszaru pamięci dostępnej w komputerze. W większości komputerów pamięć RAM, do której nie przepisano by pamięci ROM, zostałaby po prostu wyłączona. Takie komputery ujawniają o 384 kB mniej pamięci w porównaniu r rozmiarem fizycznej pamięci obecnej w komputerze. Przykładowo, mój komputer wyposażony w 2 MB pamięci RAM miałby 640 kB pamięci podstawowej i 1024 kB pamięci XMS, co daje łącznie 1664 kB dostępnej pamięci RAM, o 384 kB mniej niż jest w komputerze (2048 – 384 = 1664).

W bardziej zaawansowanych komputerach przepisuje się do RAM wszystkie możliwe obszary ROM, a następnie niewykorzystane obszary RAM z obszaru UMA umieszcza się na końcu przestrzeni XMS, dzięki czemu nie marnuje się żaden z niewykorzystanych obszarów RAM. Np. komputery PS/2 przepisują do RAM obszar ROM BIOS płyty głównej (obszar E0000-FFFFF lub 128 kB), a pozostałą pamięć z pierwszego banku pamięci, obecną w komputerze jako moduły SIMM (256 kB w obszarze A0000-DFFFF) pod adres, który jest bezpośrednio za ostatnim bankiem fizycznej pamięci komputera.

Zauważmy, że BIOS karty graficznej w komputerach PS/2 wchodzi w skład pamięci ROM BIOS płyty głównej, zlokalizowanej w obszarze E0000-FFFFF. W przeciwieństwie do innych komputerów, nie trzeba przepisywać osobno pamięci ROM BIOS karty graficznej.

Przykładowo, w moim komputerze, wyposażonym w dwa 36-bitowe moduły SIMM o rozmiarze 1 MB każdy, 256 kB pamięci UMA, do której nie przepisuje się pamięci ROM, zostałoby przesunięte w obszar 200000–230000, znajdujący się na początku trzeciego megabajta. Przesunięcie takie ma wpływ na znaczenie wartości podawanych przez programy diagnostyczne, ponieważ np. zgłoszenie błędu pamięci w obszarze 200000–230000, który wskazuje na końcowy obszar pamięci XMS, oznaczałoby w rzeczywistości uszkodzenie pierwszego modułu SIMM. Pamięć o adresach 100000–1FFFFF wchodziłaby w skład drugiego modułu SIMM, a 640 kB pamięci podstawowej o adresach 000000–09FFFF – w skład pierwszego modułu SIMM. Jak widać, domyślenie się, w jakich obszarach adresowych jest zlokalizowana fizyczna pamięć modułów SIMM, nie jest łatwe.

W większości komputerów możliwe jest przesunięcie tylko całego segmentu niewykorzystanej pamięci z obszaru UMA, o ile segment ten nie zawiera zawartości przepisanej z pamięci ROM. Nigdy nie należy przepisywać pamięci obrazu zlokalizowanej w segmentach A000 i B000, tak więc co najmniej 128 kB pamięci RAM może zostać przesunięte na koniec obszaru XMS, o ile komputer to umożliwia. Segmenty pamięci RAM spod adresów F000 i C000 w większości komputerów zawierają kopię odpowiednio pamięci ROM płyty głównej i pamięci ROM karty graficznej, dlatego też nie mogą być przesunięte na koniec obszaru XMS. Zostaje więc maksymalnie 256 kB, które mogą być przesunięte. Jeżeli w komputerze na koniec obszaru XMS przesunięte są całe 384 kB pamięci RAM z obszaru UMA, to automatycznie wyklucza to przepisywanie zawartości pamięci ROM do RAM w obrębie pamięci UMA. Zrezygnowanie z przepisywania ROM do RAM spowalnia jednak znacznie komputer i nie jest zalecane. Podejmując decyzję, czy dany fragment pamięci RAM z obszaru UMA wykorzystać do przechowywania kopii pamięci ROM (ang. shadowing) czy też przenieść go na koniec obszaru XMS (ang. remapping), należy zawsze wybrać rozwiązanie pierwsze. Natomiast niewykorzystaną pamięć RAM z obszaru UMA zawsze lepiej jest przesunąć na koniec obszaru XMS, niż po prostu wyłączyć.

W komputerze z brakującymi 384 kB pamięci RAM nie stosuje się przesuwania niewykorzystanej pamięci na koniec obszaru XMS. W celu ustalenia, czy w komputerze brakuje pamięci, wystarczy zwrócić uwagę na trzy czynniki. Pierwszym jest całkowity rozmiar pamięci fizycznie obecnej w komputerze. Pozostałe dwa można ustalić uruchamiając program SETUP komputera. Są to całkowity rozmiar pamięci podstawowej i pamięci XMS komputera. Następnie, odejmując pamięć podstawową i pamięć XMS od całkowitej pamięci komputera, otrzymamy rozmiar brakującej pamięci. Zazwyczaj okaże się, że w komputerze brakuje 384 kB, lecz jeżeli jesteśmy szczęśliwymi właścicielami komputera, w którym 256 kB pamięci RAM jest przepisywane spod obszaru UMA w obszar XMS, to okaże się, że brakuje tylko 128 kB.

Praktycznie wszystkie komputery wykorzystują część z brakującej pamięci RAM do przechowywania kopii zawartości swojej pamięci ROM, przede wszystkim ROM płyty głównej i karty graficznej. Tak więc "braki" nie oznaczają wcale marnotrawstwa. W komputerze, w którym brakuje 128 kB, w 64 kB z tego obszaru jest przechowywana kopia ROM BIOS (F0000–FFFFF), a w 32 kB – BIOS karty graficznej (C0000–C8000). Reszta – 32 kB (C8000–CFFFF) – jest po prostu wyłączana. Pozostałe dwa segmenty (128 kB w obszarze A0000-BFFFF i 128 kB w obszarze D0000-EFFFF) są przenoszone na początek piątego megabajta (400000-43FFFF). W większości komputerów pozostałe fragmenty RAM w obszarze UMA są po prostu wyłączane. Rozwiązanie to wybrano ze względu na prostotę realizacji. Operacja przeniesienia fragmentów RAM w obszar XMS wymaga dodatkowych układów logicznych i procedur BIOS-a realizujących tę funkcję, a większość producentów płyt głównych uznała, że dodatkowe 256 kB nie jest warte zachodu.

Jeżeli w komputerze włączona jest opcja przesuwania pamięci RAM spod obszaru UMA w obszar XMS, to jakiekolwiek komunikaty o błędach pamięci odnoszące się do końcowej części obszaru XMS prawdopodobnie dotyczą pierwszego banku pamięci, ponieważ przesunięty obszar pamięci pochodzi właśnie z tego banku. W komputerze 32-bitowym pierwszy bank może być złożony z czterech 9-końcówkowych (36-bitowych) modułów SIMM albo z jednego modułu 72-końcówkowego (36-bitowego).

Konfigurowanie i optymalizacja pamięci kart rozszerzających

W idealnym przypadku wszystkie karty w komputerze są kartami PnP i jedyne, czego wymagają od użytkownika, to włożenie ich do gniazd rozszerzających. Pojawienie się kart PnP przybliżyło nas trochę do ideału. Jednak czasami odnosi się wrażenie, że niektóre karty rozszerzające zostały zaprojektowane tak, jakby miały być jedynymi kartami w komputerze. Ich prawidłowe skonfigurowanie wymaga od użytkownika znajomości wykorzystania w komputerze zasobów adresowych z obszaru UMA, a także linii IRQ i kanałów DMA. Ponadto niezbędna jest umiejętność skonfigurowania karty w taki sposób, aby nie powodowała ona konfliktu z już zainstalowanymi urządzeniami.

Karty rozszerzające potrzebują adresów w przestrzeni UMA na potrzeby swoich pamięci ROM BIOS oraz jako robocze obszary RAM. Jeżeli dwie karty jednocześnie próbują korzystać z tego samego obszaru pamięci ROM BIOS czy pamięci RAM, powstaje konflikt, który może spowodować, że komputer w ogóle nie wystartuje. W tym podrozdziale omówimy sposoby unikania potencjalnych konfliktów oraz metody radzenia sobie w sytuacjach, kiedy konflikt wystąpi. Omówimy ponadto rozwiązywanie konfliktów poprzez przeniesienie pamięci kart w inne obszary oraz podamy pewne sposoby optymalizacji wykorzystania pamięci kart rozszerzających.

W komputerach z magistralą EISA czy MCA dodanie nowej karty rozszerzającej jest nieco prostsze, ponieważ architektura tych magistral umożliwia automatyczną konfigurację kart rozszerzających. Komputery z magistralami EISA czy MCA same ustalają dostępne obszary w przestrzeni UMA, linie IRQ i kanały DMA, a wszystkie karty zostają automatycznie skonfigurowane do optymalnej pracy.

Jak rozpoznać karty zajmujące adresy w przestrzeni UMA

Ustalić, które karty zajmują pamięć w obszarze UMA, można na jeden z dwóch sposobów:

  • Sprawdzić w dokumentacjach kart obecnych w komputerze adresy pamięci wykorzystywane przez karty.

  • Skorzystać z programu użytkowego, który sam szybko ustali, jakie obszary pamięci UMA są zajmowane przez poszczególne karty.

Sposobem najprostszym (chociaż nie zawsze niezawodnym) jest skorzystanie z programu użytkowego. Jednym z takich programów jest Microsoft Diagnostics (MSD), który jest dostarczany z systemami operacyjnymi DOS 6.0 i Windows 3.x (lub nowszymi). Informację taką podaje również Menadżer urządzeń z Panelu sterowania w Windows 95. Programy te sprawdzają konfigurację sprzętową ustalając nie tylko ilość pamięci UMA, lecz również linie IRQ zajmowane przez karty.

Po uruchomieniu programu MSD, Menadżera urządzeń lub innego podobnego programu, należy sporządzić wydruk przedstawiający adresy zajęte w komputerze. Wydruk ten będzie pomocny przy dodawaniu do komputera nowych urządzeń, ponieważ pozwoli nam się upewnić, że nowa karta nie spowoduje konfliktu z innymi urządzeniami obecnymi w komputerze.

Przesuwanie obszaru pamięci kart w celu rozwiązywania konfliktów

Po rozpoznaniu – przy pomocy dokumentacji karty czy programu użytkowego – konfliktu lub potencjalnego konfliktu w komputerze i ustaleniu adresów zajmowanych przez kartę w obszarze UMA, możemy przystąpić do zmiany konfiguracji karty lub kart, przenosząc fragmenty pamięci zajmowane przez te karty w inne miejsce w obszarze UMA.

W większości kart taka zmiana konfiguracji okaże się dość prosta, gdyż będzie wymagać jedynie zmiany ustawień kilku zworek czy przełączników. Przestrzeganie poniższych wskazówek pozwoli na rozwiązanie większości konfliktów, które wystąpiły pomiędzy kartami.

  1. Ustalenie i spisanie na kartce adresów w obszarze UMA zajmowanych przez karty rozszerzające.

  2. Sprawdzenie, czy adresy te nie pokrywają się, co byłoby przyczyną konfliktu.

  3. Ustalenie na podstawie dokumentacji, które karty pozwalają na zmianę konfiguracji, tak aby każda z kart miała dostęp do innego obszaru przestrzeni adresowej.

  4. Zmiana konfiguracji odpowiednich kart, tak aby nie było konfliktu w dostępie do ich obszarów adresowych.

Przykładowo, jeżeli jedna karta korzysta z obszaru C8000–CBFFF, a druga z obszaru CA000–CCFFF, to mamy potencjalny konflikt. Musimy wówczas zmienić obszar adresowy jednej z kart.

Optymalizacja wykorzystania pamięci kart rozszerzających

W przypadku idealnego komputera PC, karty rozszerzające byłyby skonfigurowane w en sposób, że ich adresy z obszaru UMA byłyby umieszczane zaraz po adresach kart instalowanych poprzednio. Obszary dwóch kart nie zachodziłyby na siebie, co eliminowałoby konflikt. Taka konfiguracja byłaby nie tylko bezkonfliktowa, lecz także uprościłaby ładowanie do pamięci UMA sterowników urządzeń i programów rezydentnych. Jednak nie to stanowi główny problem. Umieszczanie w komputerze kolejnych kart powoduje często powstawanie "dziur" – niewykorzystanego obszaru UMA – co oczywiście jest rozwiązaniem lepszym niż zachodzenie na siebie obszarów, jednak nie jest optymalnym wykorzystaniem przestrzeni adresowej komputera.

Chcąc wykorzystać jak największy obszar pamięci UMA, można by na podstawie dokumentacji kart ustalić sposób na "upchnięcie" fragmentów UMA wykorzystywanych przez poszczególne karty w komputerze. Wykorzystanie obszaru UMA przez poszczególne urządzenia powinno bardziej przypominać mur z cegieł niż ser szwajcarski, jak jest w iększości komputerów. Im bardziej uda się zmniejszyć liczbę fragmentów wolnej pamięci UMA, tym wydajniej i w sposób bardzie zwarty będzie można z niej korzystać.

Wykorzystywanie nieużywanej pamięci z obszaru UMA

W komputerach z 16-bitowym systemem operacyjnym, np. Windows 3.1 czy DOS, programy rezydentne oraz sterowniki urządzeń mogą być umieszczane w pamięci UMA za pomocą programów takich jak MEMMAKER czy QMM firmy Quartdeck. Programy te służą do zarządzania pamięcią i sprawdzają ilość pamięci zajmowanej przez programy rezydentne i sterowniki urządzeń, a następnie szukają najlepszego sposobu na umieszczenie ich w pamięci UMA, zwalniając w ten sposób pamięć podstawową.

Posługiwanie się programami MEMMAKER czy QMM jest dość proste. Przed rozpoczęciem pracy z nimi należy sporządzić kopię zapasową plików CONFIG.SYS i AUTOEXEC.BAT, aby w razie potrzeby móc przywrócić poprzednią konfiguracją komputera. Następnie z linii poleceń systemu DOS uruchamiamy program MEMMAKER albo program QMM z dysku instalacyjnego. Obydwa programy, poprzez odpowiednie wpisy w pliku CONFIG.SYS, zainstalują w komputerze wymagane sterowniki, a następnie przystąpią do optymalizowania konfiguracji pamięci w komputerze. Praca wykonana przez obydwa programy polega na zwalnianiu obszarów pamięci podstawowej, jednak QMM potrafi automatycznie zwolnić więcej pamięci podstawowej i w krótszym czasie niż większość pozostałych programów tego typu. Możliwe jest również ręczne zarządzanie pamięcią tylko za pomocą programów HIMEM.SYS i EMM386.EXE, w wyniku czego otrzymamy konfigurację, jakiej nie osiągnąłby automatycznie żaden program.

Wymóg ładowania w obszar pierwszego megabajta pamięci dotyczy tylko programów pracujących w trybie rzeczywistym procesora. Kod sterowników pracujących w trybie rzeczywistym jest 16-bitowy. Programy te nie mogą rezydować w pamięci XMS, ponieważ w trybie rzeczywistym dostępny jest tylko pierwszy megabajt pamięci. Systemy operacyjne DOS i Windows 3.x są programami 16-bitowymi, pracującymi w trybie rzeczywistym, stąd potrzeba optymalizacji wykorzystywania przez nie pamięci podstawowej. Zważywszy na dużą ilość sterowników programowych wykorzystywanych obecnie w komputerach, byłoby trudnym zadaniem umieszczenie ich wszystkich w dostępnym obszarze UMA i wydzielenie odpowiednio dużego wolnego obszaru w pamięci podstawowej dla aplikacji.

Nowsze systemy operacyjne przyczyniły się do zmiany tej sytuacji. Np. Windows 95 korzysta głównie z 32-bitowych sterowników i programów pracujących w trybie chronionym, chociaż wciąż pozostaje jeszcze duża ilość programów 16-bitowych. Systemy operacyjne Windows NT i OS/2 są systemami w pełni 32-bitowymi, a wszystkie ich sterowniki i aplikacje pracują w trybie chronionym. Jeżeli wszystkie programy, z których korzystamy, są 32-bitowe, to niepotrzebna jest właściwie żadna optymalizacja w obszarze pierwszego megabajta pamięci, ponieważ programy 32-bitowe mogą z powodzeniem pracować w obszarze pamięci XMS.

W kolejnym podrozdziale opiszemy, jak z pomocą oprogramowania zarządzającego pamięcią zoptymalizować pamięć podstawową. Omówimy także inne sposoby konfigurowania pamięci komputera, tak aby komputer pracował jak najwydajniej. Pamiętajmy, że w przy umieszczaniu sterowników urządzeń i programów rezydentnych w pamięci UMA przez program MEMMAKER ważną rolę odgrywają sterowniki HIMEM.SYS i EMM386.EXE. Kolejne dwa podrozdziały opisują posługiwanie się programami HIMEM.SYS i EMM386.EXE do konfigurowania pamięci XMS i EMS.

Jeżeli starsze 16-bitowe aplikacje systemu DOS są uruchamiane w systemach Windows 95, Windows NT czy OS/2, to również przydaje się wiedza o podstawowych technikach optymalizacji pamięci. Każda aplikacja pracuje wtedy w osobnym oknie DOS-a – w wirtualnym trybie rzeczywistym, w którym emulowany jest cały pierwszy megabajt – obszar roboczy trybu rzeczywistego. Pracując w 32-bitowym systemie operacyjnym, można zmienić parametry konfiguracyjne i organizację pamięci aplikacji działających w oknie DOS-a.

Korzystanie z programu HIMEM.SYS (w systemie DOS)

Sterownik HIMEM.SYS, dostarczany wraz z systemami Windows i DOS począwszy od wersji 4.0, służy do konfigurowania pamięci powyżej pierwszego megabajta, tak aby spełniała specyfikację XMS. Jego zadaniem jest także udostępnienie pierwszych 64 kB drugiego megabajta pamięci jako obszaru "pamięci wysokiej" (ang. High Memory Area, HMA). Instalacja programu HIMEM.SYS odbywa się poprzez dodanie linii wywołującej program do pliku CONFIG.SYS.

Specyfikacja pamięci XMS została opracowana przez firmy Microsoft, Intel, AST Corp. oraz Lotus Development w roku 1987 i określa sposób wykorzystania pamięci powyżej pierwszego megabajta w komputerach z procesorem 286 (lub lepszym). Pamięć XMS pozwala programom trybu rzeczywistego (przeznaczonych do pracy w systemie DOS) na korzystanie z pamięci powyżej pierwszego megabajta na kilka różnych sposobów.

Korzystanie z programu EMM386.EXE (DOS)

Program EMM386.EXE, dostarczany z systemem DOS począwszy od wersji 5.0, służy przede wszystkim do mapowania pamięci XMS (pamięci powyżej pierwszego megabajta zarządzanej przez program HIMEM.SYS) w niewykorzystane fragmenty obszaru adresowego UMA. Dzięki temu w obszar UMA mogą być ładowane programy systemu DOS. Drugą funkcją programu EMM386.EXE jest emulacja pamięci EMS w wersji 4 za pomocą pamięci XMS. Więcej informacji o korzystaniu z programu EMM386.EXE można znaleĽć w książce wydawnictwa Que, pt. "Using MS-DOS 6.0" albo w dokumentacji systemu DOS.

Program MEMMAKER w systemie DOS 6.0

Ilość dostępnej dla aplikacji pamięci podstawowej w komputerze z procesorem 386 (lub nowszym) można zwiększyć za pomocą programu MEMMAKER, dostarczanym z systemem DOS 6.0. System DOS w wersji 5.0 ma możliwość mapowania, za pomocą programu EMM386.EXE, pamięci XMS w obszar UMA, dzięki czemu mogą tam być ładowane sterowniki i programy rezydentne systemu DOS. Niestety, posługiwanie się nim wymaga dość rozległej wiedzy o konfiguracji obszaru UMA w konkretnym komputerze. Dopasowanie programów do wolnych fragmentów obszaru UMA wymaga posługiwania się metodą prób i błędów. Dla wielu użytkowników jest to jednak dość trudne do przeprowadzenia i dlatego nie korzystają oni w pełni efektywnie z pamięci komputera w systemach DOS (i Windows).

Aby sprawę ułatwić, firma Microsoft wraz z systemem DOS 6.0 zaczęła dostarczać program MEMMAKER sterowany za pomocą menu, którego zadaniem jest określenie konfiguracji komputera i na tej podstawie wygenerowanie odpowiednich sekwencji wywołań programu EMM386.EXE i umieszczenie ich w pliku CONFIG.SYS. Dzięki programowi MEMMAKER, bądĽ też poprzez ręczne manipulowanie obszarem UMA, można ładować sterowniki urządzeń i programy rezydentne do pamięci UMA, dzięki czemu do dyspozycji będzie ponad 600 kB pamięci podstawowej.

Przez miesiące lub lata użytkowania komputera programy instalacyjne różnych programów użytkowych instalują często tak duże ilości programów rezydentnych i sterowników, za pośrednictwem plików AUTOEXEC.BAT i CONFIG.SYS, że po pewnym czasie zaczyna brakować pamięci podstawowej na uruchamianie wszystkich programów. Dzięki programowi MEMMAKER można zwolnić dla tych programów więcej pamięci podstawowej. Pomoc na temat programu MEMMAKER można uzyskać wpisując z linii poleceń polecenie HELP MEMMAKER. Po uruchomieniu program MEMMAKER automatycznie przeprowadza następujące akcje:

  • Przeniesienie części jądra systemu DOS w obszar HMA.

  • Przesunięcie wolnych obszarów pamięci XMS w obszar UMA jako tzw. Upper Memory Blocks (UMB). DOS może wówczas ładować w ten obszar swoje sterowniki i programy rezydentne, zwalniając tym samym pamięć podstawową, którą zajmowałyby te programy.

  • Modyfikacja plików AUTOEXEC.BAT i CONFIG.SYS, tak aby system DOS ładował programy rezydentne i sterowniki urządzeń w obszary UMB.

Zanim uruchomimy program EMM386.EXE, powinniśmy uważnie prześledzić pliki CONFIG.SYS i AUTOEXEC.BAT, aby zidentyfikować niepotrzebne sterowniki urządzeń czy programy rezydentne. Np. sterownik ANSI.SYS, który jest ładowany za pośrednictwem pliku CONFIG.SYS, odpowiada za obsługę kolorów i innych atrybutów znaków w linii poleceń DOS-a, służy także do zmiany przyporządkowania znaków na klawiaturze. Jeżeli pracujemy przede wszystkim w środowisku Windows i nie korzystamy zbyt często z linii poleceń DOS-a, to możemy usunąć sterownik ANSI.SYS z pliku CONFIG.SYS i zwolnić w ten sposób pamięć zajmowaną przez ten sterownik.

Innym często ładowanym sterownikiem, który nie jest potrzebny większości użytkowników, jest SETVER. Jeżeli nie zamierzamy korzystać z programów, które wymagają konkretnej wersji systemu DOS, możemy usunąć ten sterownik z pliku CONFIG.SYS.

Po "okrojeniu" plików AUTOEXEC.BAT i CONFIG.SYS do najważniejszych funkcji (dobrze jest przedtem zrobić kopie zapasowe obydwu plików), możemy przystąpić do optymalizacji pamięci za pomocą programu MEMMAKER. Przy uruchamianiu tego programu powinniśmy postępować według poniższych wskazówek:

  1. Zakończyć działanie wszystkich programów.

  2. Uruchomić tylko najniezbędniejsze sterowniki sieciowe i programy rezydentne.

  3. Z linii poleceń DOS-a wpisać MEMMAKER.

Program MEMMAKER ma dwa tryby pracy, zwane Express i Custom. Pierwszy z nich jest przeznaczony dla użytkowników, którzy chcieliby, aby sterowniki urządzeń i programy rezydentne były ładowane w obszar pamięci wysokiej, lecz nie mają ochoty na dłuższą pracę z programem. Tryb ten możemy wybrać, jeżeli nasz monitor nie jest monitorem EGA albo VGA. Jeżeli mamy monitor EGA albo VGA, to wybieramy Custom Setup i na pytanie, czy program MEMMAKER może wykorzystać obszar trybu monochromatycznego karty graficznej (B0000–B7FFF) do ładowania programów, odpowiadamy twierdząco (Yes). W pozostałych opcjach wybieramy ustawienia domyślne, chyba że wiemy, iż jakieś ustawienie domyślne nie jest w naszym komputerze ustawieniem poprawnym. Wybranie trybu Custom nie jest dobrym pomysłem, jeżeli nie posiadamy wystarczającej wiedzy o optymalizacji konfiguracji pamięci w komputerze; dotyczy to zwłaszcza sterowników programowych i programów rezydentnych.

Po zakończeniu pracy, program MEMMAKER uzupełnia plik CONFIG.SYS o trzy dodatkowe linie:

DEVICE=C:\DOS\HIMEM.SYS
DEVICE=C:\DOS\EMM386.EXE NOEMS
DOS=HIGH,UMB

Ponadto MEMMAKER modyfikuje te linie w plikach CONFIG.SYS i AUTOEXEC.BAT, które ładują sterowniki urządzeń i programy rezydentne. Programy te będą teraz ładowane w obszary UMB. Linie w pliku CONFIG.SYS zaczynające się od DEVICE= zostaną zmienione na DEVICEHIGH=, a linie w pliku AUTOEXEC.BAT postaci C:\DOS\DOSKEY będą zmienione na LH C:\DOS\DOSKEY. Polecenia DEVICEHIGH i LH wymuszają ładowanie programów rezydentnych i sterowników programowych w obszar UMB. Program MEMMAKER dodaje także odpowiednie kody specyfikujące miejsce w pamięci UMA, pod które zostanie załadowany każdy program czy sterownik. Przykładowa sekwencja w pliku AUTOEXEC.BAT wygenerowana przez program MEMMAKER mogłaby mieć następującą postać:

LH /L:1 C:\DOS\DOSKEY

Parametr /L:1 powoduje, że program rezydentny DOSKEY zostanie załadowany w pierwszy obszar UMB. W wielu przypadkach MEMMAKER potrafi skonfigurować komputer zwalniając w nim aż do 620 kB pamięci podstawowej.

Program QEMM firmy Quarterdeck

W większości przypadków zwalniania pamięci podstawowej, program MEMMAKER przynosi zadowalające efekty, jednak w komputerach o bardziej złożonej konfiguracji sprzętowej, z licznymi zainstalowanymi programami rezydentnymi i sterownikami urządzeń, lepsze rezultaty może przynieść program QEMM firmy QUARTERDECK. W tym podrozdziale opiszemy program QEMM. Dla systemów operacyjnych Windows 95 czy Windows NT dostępne są nowsze wersje tego narzędzia, dostosowane do tych systemów operacyjnych.

Jedną z zalet programu QEMM jest prostota jego instalacji i obsługi. Zanim uruchomimy program instalacyjny QEMM INSTALL, zróbmy kopie plików AUTOEXEC.BAT i CONFIG.SYS, aby mieć je pod ręką, gdy będziemy musieli przywrócić poprzednią konfigurację komputera. Przy uruchamianiu tego programu powinniśmy postępować według poniższych wskazówek:

  1. Zakończyć działanie wszystkich programów.

  2. Z linii poleceń DOS-a przejść do katalogu, w którym znajduje się dysk instalacyjny programu QEMM, i uruchomić program INSTALL. Pliki programu QEMM zostaną skopiowane do katalogu C:\QEMM (albo innego wybranego przez nas katalogu).

  3. Program instalacyjny załaduje program użytkowy Optimize, który oblicza rozmiar obszaru pamięci zajmowanej przez programy rezydentne oraz sterowniki urządzeń i dla każdego z tych programów określa odpowiedni obszar w pamięci UMA. W czasie trwania tego procesu komputer jest kilka razy restartowany (lub też pojawiają się komunikaty informujące użytkownika, aby wyłączył i włączył komputer).

  4. Po skończeniu pracy programu Optimize, za pomocą komendy MEM wpisanej z linii poleceń możemy sprawdzić ilość dostępnej w komputerze pamięci podstawowej.

Gdy programu QEMM jest już zainstalowany, po każdym dodaniu nowego programu rezydentnego czy sterownika albo umieszczeniu w komputerze lub wyjęciu z niego nowej karty rozszerzającej (co może zmienić konfigurację pamięci UMA) powinniśmy ponownie uruchomić program Optimize. Dodatkowe informacje o instalacji i pracy programu QEMM można znaleĽć w podręczniku dostarczanym z programem.

Jedną z zalet programu jest dołączony program diagnostycznego MANIFEST. Spełnia on podobne funkcje jak program MSD, dostarcza jednak więcej szczegółowych informacji o komputerze.

Instalacja w komputerze nowszej wersji ROM BIOS

W tym podrozdziale dowiemy się, jak "unowocześnienie" pamięci ROM BIOS może na wiele sposobów polepszyć wydajność komputera. Okaże się, że wymiana ROM BIOS może być dość skomplikowana i będzie wymagać od użytkownika znacznie więcej niż tylko umieszczenia w komputerze kilku kostek ROM.

Pamięć ROM BIOS (read-only memory input/output system) dostarcza komputerowi podstawowych środków do współpracy wszystkich jego podzespołów. Prosta wymiana ROM BIOS, której koszt waha się w granicach $30–$90, może zwiększyć wydajność komputera i dodać nowe możliwości.

BIOS jest tym, co powoduje, że system operacyjny DOS może działać na prawie każdym komputerze kompatybilnym z IBM, pomimo różnić sprzętowych. BIOS komunikuje się z urządzeniami komputera, dlatego musi być do nich dopasowany. Zamiast opracowywać własne rozwiązania BIOS-u, wielu producentów komputerów kupuje BIOS od firm specjalizujących się w jego wykonywaniu: AMI (American Megatrends Inc.), Microid Research czy Phoenix Technologies Ltd. Producent komputerów, który chce uzyskać licencjonowany BIOS od tych firm, musi przejść długi proces dopasowywania kodu BIOS-u do potrzeb konkretnego sprzętu. Oto dlaczego proces wymiany BIOS-u w komputerze tak bardzo się komplikuje. Kod BIOS-u rezyduje zazwyczaj w układach pamięci ROM umieszczonych na płycie głównej komputera.

BIOS jest zbiorem krótkich procedur osadzonych na stałe w układzie albo układach (w zależności od typu komputera) pamięci EPROM (erasable programmable read-only memory). Programy te są ładowane do pamięci jako pierwsze po starcie komputera, jeszcze zanim zostanie załadowany system operacyjny. BIOS pełni w komputerze trzy główne funkcje:

  • Przeprowadza test podzespołów komputera przy starcie systemu. Test ten, określany jako POST (power-on self test), sprawdza pamięć komputera, płytę główną, kartę graficzną, kontroler dysku, klawiaturę i inne komponenty.
  • Jeżeli na dysku zostanie znaleziony system operacyjny, BIOS załaduje go do pamięci komputera (ang. bootstrap loader routine). Po załadowaniu system operacyjny przejmuje kontrolę nad komputerem.
  • Po załadowaniu systemu operacyjnego BIOS współpracuje z procesorem, udostępniając wykonywanym programom specyficzne cechy komputera. Np. BIOS określa, co się stanie, jeśli programy zażądają dostępu do jednego z urządzeń – karty graficznej czy dysku twardego.

W starszych komputerach konieczna była wymiana BIOS-u, jeżeli użytkownik chciał korzystać z nowych urządzeń instalowanych w komputerze – np. niektórych nowszych typów kontrolerów dysków IDE (Integrated Drive Electronics) czy stacji dysków LS120/ZIP. W sprzedaży nadal można spotkać komputery ze starszą wersją BIOS-u, która nie dopuszcza definiowania przez użytkownika typów dysku, co jest potrzebne do łatwej instalacji dysku IDE czy do uniknięcia kłopotów z zależnościami czasowymi dysków IDE.

Poniższa lista przedstawia nowe funkcje i możliwości, jakie pojawiły się po zmianie wersji BIOS-u na nowszą:

  • Umożliwienie współpracy z dyskami IDE LS120 i ZIP

  • Praca z dyskami IDE większymi od 8 GB

  • Praca dysków w trybie UDMA

  • Umożliwienie startu systemu operacyjnego (boot) z CD-ROM-u

  • Dodanie lub udoskonalenie Plug-and-Play

  • Poprawienie znanych błędów – na przykład błędu roku 2000

  • Zmiana procesora na nowszy

Z powodu różnorodności płyt głównych spotykanych na rynku, zamówienie nowej wersji BIOS-u jest bardziej skomplikowane, niż to się może wydawać. W przypadku markowego komputera proces ten może być stosunkowo prosty. W przypadku mniej znanych komputerów PC, sprzedawca BIOS-u będzie potrzebował od nas informacji o komputerze, np. co do typu chipsetu płyty głównej.

W większości przypadków przy wymianie BIOS-u musimy uzyskać następującą informację:

  • Marka i model komputera lub płyty głównej

  • Typ procesora (np. Pentium MMX, AMD K6, Cyrix/IBM 6x86MX, MII, Pentium II)

  • Marka i wersja aktualnej wersji BIOS-u w komputerze

Zintegrowany układ chipset (ang. integrated chipset) jest grupą układów znajdujących się na oryginalnej płycie głównej AT, mogących pełnić funkcje setek elementów dyskretnych. Wiele z tych układów oferuje funkcje, które są dostępne tylko wtedy, gdy mamy odpowiednią wersję BIOS-u. Obecnie większość różnic pomiędzy komputerami bierze się z różnorodności chipsetów wykorzystywanych do produkcji komputerów i ze specjalnego sposobu inicjowania tych układów, który jest niezbędny do ich prawidłowego funkcjonowania.

BIOS musi również reagować na różnice w kodzie programu zaszytego w kontrolerach klawiatury i obsługiwać różne niestandardowe funkcje, takie jak przełączanie częstotliwości zegara. Np. komputer z chipsetem firmy Chips & Technologies NEAT, musi mieć BIOS zaprojektowany specjalnie na potrzeby tego układu. BIOS musi w odpowiedni sposób zainicjować rejestry układu NEAT, bo inaczej komputer nie mógłby nawet wystartować. BIOS musi również obsługiwać specjalne funkcje tego układu. Dla poprawnej pracy każdego z popularnych chipsetów w komputerach z procesorem 286, 386, 486, Pentim, Pentium-MMX, Pentium Pro i Pentium II wymagany jest odpowiedni BIOS. BIOS ogólnego przeznaczenia może co prawda uruchomić niektóre komputery, jednak pewne funkcje, takie jak przełączanie procesora w tryb chroniony i z powrotem w tryb rzeczywisty, mogą być niedostępne bez odpowiedniego BIOS-u.

Układy kontrolera klawiatury

W komputerach klasy AT oprócz głównej pamięci ROM jest również pamięć ROM kontrolera klawiatury. Kontroler klawiatury jest mikroprocesorem obsługującym klawiaturę, wyposażonym we własną pamięć ROM. Jest nim zazwyczaj układ Intel 8042, który skupia w sobie mikroprocesor, pamięć ROM, RAM i porty wejścia/wyjścia. Kontroler klawiatury jest najczęściej układem 40-końcówkowym, zaopatrzonym często w etykietkę informującą o prawach handlowych do kodu BIOS-u zaszytego wewnątrz kontrolera.

Układ kontrolera klawiatury sprawuje nadzór nad linią reset i linią A20 oraz przeprowadza interpretację kodów naciskanych klawiszy. Linia adresowa A20 jest wykorzystywana do komunikacji z pamięcią HMA i do operacji w trybie chronionym. W wielu komputerach jeden z niewykorzystanych portów kontrolera jest używany do określenia częstotliwości zegara procesora. Z powodu bliskich związków kontrolera klawiatury z pracą w trybie chronionym, wiele problemów z kontrolerem klawiatury staje się widocznych w czasie pracy w systemie Windows czy OS/2. Jeżeli w czasie pracy w systemie Windows czy OS/2, albo z innym oprogramowaniem pracującym w trybie chronionym procesora, np. Lotus 1-2-3 wersja 3.x, występują zawieszenia czy problemy z klawiaturą, powinniśmy zaopatrzyć się w nową wersję BIOS-u u jego producenta albo u producenta płyty głównej.

W komputerach IBM wymiana kontrolera klawiatury na nowy nie jest konieczna (wymiana taka byłaby utrudniona, ponieważ układ ten jest normalnie przylutowany do płyty). Większość producentów komputerów kompatybilnych z IBM umieszcza układ kontrolera klawiatury w gnieĽdzie, dzięki czemu można go łatwo wymienić. Jeżeli dokonujemy wymiany BIOS-u w naszym komputerze, sprzedawca BIOS-u często dostarcza wraz z nim także kompatybilny kontroler klawiatury. Zazwyczaj nie musimy osobno kupować kontrolera klawiatury, chyba że pojawiają się problemy ze współpracą starego kontrolera z nowym BIOS-em.

Oprogramowanie ROM BIOS, przeznaczone dla komputerów IBM i kompatybilnych, zostało opracowane przez kilku producentów. Oto najwięksi producenci programów ROM BIOS:

Oprogramowanie ROM BIOS, przeznaczone dla komputerów IBM i kompatybilnych, zostało opracowane przez kilku producentów. Oto najwięksi producenci programów ROM BIOS:

  • Phoenix

  • American megatrends international (AMI)

  • Award

Firma Phoenix jako pierwsza opracowała w legalny sposób BIOS kompatybilny z BIOS-em IBM, nie naruszając przy tym praw autorskich firmy IBM. Firma ta również jako pierwsza wprowadziła wiele nowych funkcji, np. typy dysków twardych definiowane przez użytkownika czy obsługę stacji dyskietek 1,44 MB. Phoenix BIOS ma bardzo dobry program testujący POST, który w wyczerpujący sposób informuje o różnych błędach, zwłaszcza kiedy komputer sprawia wrażenie całkowicie "martwego".

Dokumentacja BIOS-u firmy Phoenix, składająca się z trzech książek, jest jedną z zalet tego produktu. W skład dokumentacji wchodzą następujące książki: System BIOS for IBM PC/XT/AT Computers and Compatibles, CBIOS for IBM PS/2 Computers and Compatibles oraz ABIOS for IBM PS/2 Computers and Compatibles. Są to doskonałe publikacje wydawnictwa Addison-Wesley, które polecam każdemu użytkownikowi PC, nawet tym, którzy nie mają w komputerach BIOS-u firmy Phoenix (choć niektóre, specyficzne informacje mogą nie mieć zastosowania w przypadku innych komputerów).

BIOS firmy AMI jest obecnie bardzo popularny i w wersjach dla nowych komputerów przewyższa Phoenix BIOS. Program testujący POST jest mniej wyczerpujący niż w przypadku BIOS-u firmy Phoenix, jednak osobny program testujący znajdzie użytkownik w pamięci ROM. Program ten można nawet kupić oddzielnie pod nazwą AMIDIAG. Wersja programu w pamięci ROM jest jednak pozbawiona możliwości testowania pamięci RAM, co ma szczególnie duże znaczenie, gdy uszkodzona jest pamięć w obrębie pierwszego banku. Z drugiej strony, AMI BIOS jest w wysokim stopniu kompatybilny ze standardem PC BIOS-u; jest dostępny w odmianach dla kilku różnych układów chipset i różnych płyt głównych. Zaletą produktu jest także pomoc techniczna. Gdy w BIOS-ie wykryto błędy, firma AMI je usunęła, dzięki czemu produkt spisuje się bez zarzutu w systemie OS/2 i innych "trudnych" środowiskach.

Firma AMI produkuje własne płyty główne, dlatego ma znaczącą przewagę nad innymi producentami BIOS-u. Jeżeli płyta główna i BIOS pochodzą z tego samego Ľródła, to ewentualne problemy ze współpracą płyty z BIOS-em może szybko rozwiązać ich producent, bez zrzucania winy na innego producenta. Generalnie nie trzeba się martwić o kompatybilność płyt głównych i BIOS-u firmy AMI, dlatego zalecam także kupowanie płyt głównych AMI. Nawet jeżeli pojawią się jakieś problemy, firma AMI na pewno je rozwiąże.

Trzeci producent oprogramowania ROM BIOS, firma Award, wyrobiła sobie markę przy pomocy innych producentów, ponieważ firma ta udziela licencji na kod swojego BIOS-u z możliwością jego modyfikacji. Np. firma AST zakupiła prawa do Award BIOS-u w celu wykorzystania go w swoich komputerach i obecnie może BIOS ten modyfikować, tak jakby sama go stworzyła od podstaw. Firma AST mogła rozwijać swój BIOS traktując produkt firmy Award jako punkt wyjścia. Award dostarcza także kod BIOS-u dostosowany do indywidualnych potrzeb producentów komputerów. BIOS firmy Award jest bardzo popularny, chociaż nie tak bardzo, jak produkty firm AMI czy Phoenix, zapewnia jednak kompatybilność z oryginałem nawet w tak "trudnych" środowiskach jak OS/2.

Jeżeli chcemy wymienić BIOS w komputerze na nowszy, możemy zaopatrzyć się w układy z nową wersją wprost u producenta albo u następujących, godnych polecenia dystrybutorów:

  • Micro Firmware Inc. Firma Micro Firmware ma w ofercie wyczerpującą listę produktów firmy Phoenix, dostępne jest ponad 50 powszechnie stosowanych wersji BIOS-u dla procesorów 8088, 286, 386, 486, Pentium i lepszych. Firma ta opracowuje nowsze wersje BIOS-u dla określonych platform sprzętowych, nawet gdy producenta oryginalnego BIOS-u nie ma już na rynku. Wielu sprzedawców BIOS-u oferuje produkty opracowane przez Firmę Micro Firmware dla określonych platform sprzętowych.
  • Washbourn & Company Distributors. Firma ta jest licencjonowanym dystrybutorem firmy AMI i zajmuje się opracowywaniem nowszych wersji tylko BIOS-u firmy AMI. Firma ta jest w posiadaniu praw do płyt głównych i BIOS-u firmy AMI. Jako główny dystrybutor AMI, firma Washbourn posiada dużą wiedzę w zakresie problemów z zamianą BIOS-u w komputerze na nowszą wersję. Firma ta oferuje również produkt o nazwie Second Nature, który zwalnia użytkownika z konieczności wymiany BIOS-u, jeżeli wszystko, czego użytkownik potrzebuje, to obsługa dodatkowego dysku twardego czy stacji dyskietek.

Specyficzne problemy związane z pamięcią ROM BIOS

W niektórych wersjach ROM BIOS, a także w niektórych komputerach sprzedawanych w ostatnich latach, wykryto pewne problemy. Niektóre z nich mogą dotyczyć dużych grup użytkowników, ponieważ albo są dość poważne, albo też są spotykane na wielu komputerach. Kolejny podrozdział opisuje część najpoważniejszych ujawnionych problemów związanych z BIOS-em albo współpracą BIOS-u z komputerem, a także sposoby rozwiązywania tych problemów.

Niektóre komputery, nawet te wyposażone w stosunkowo nowy BIOS z lat 1992 i 1993, mogą nie wystartować po wymianie systemu operacyjnego DOS na wersję 6.0. Niektóre, starsze wersje BIOS-u pochodzą z lat, kiedy obowiązującą wersją systemu DOS była wersja 3.3 albo starsza. W rezultacie starsze wersje BIOS-u nie mogą korzystać z zaawansowanych możliwości systemu DOS 6.0.

Użytkownicy komputera AT&T 6300 powinni się zaopatrzyć w wersję 1.43 BIOS-u, która jest najnowszą wersją dla tego komputera. W wersji tej rozwiązano wiele problemów występujących w starszych komputerach 6300, a także wbudowano obsługę stacji dyskietek 720 kB. Wersja 1.43 BIOS-u jest osiągalna za $35 w sprzedaży wysyłkowej firmy AT&T National Parts Sales Centre pod numerem produktu 105203780.

W niektórych komputerach wyposażonych w AMI BIOS pojawiają się problemy z dyskami IDE. Napędy IDE były reklamowane jako w pełni kompatybilne z istniejącymi na rynku napędami ST-506/412 (MFM albo RLL) i napędami ESDI. Niektóre napędy IDE tracą jednak zbyt dużo czasu pomiędzy nadejściem kodu rozkazu a pojawieniem się danych w porcie. Pod koniec roku 1989 firma AMI odebrała wiele skarg na współpracę z napędami IDE, zwłaszcza firm Conner i Toshiba. Z powodu tych problemów nie zaleca się korzystania na komputerach z napędem IDE z BIOS-u firmy AMI z datą wcześniejszą niż 9 kwietnia 1990 r. W przypadku stosowania wcześniejszych wersji, na dysku może nastąpić utrata danych. W przypadku niektórych dysków, zwłaszcza firmy Conner, mogą pojawiać się błędy typu Drive C not ready. Użytkownicy komputerów z dyskami IDE i AMI BIOS-em z datą wcześniejszą niż 9 kwietnia 1990 r. powinni się zaopatrzyć w nowy BIOS u sprzedawcy komputera.

Aby ustalić wersję BIOS-u firmy AMI, spójrzmy na numer w lewym dolnym rogu ekranu, widoczny w czasie startu komputera:

XXXX-ZZZZ-040990

NUMER 040990 oznacza BIOS z datą 9 kwietnia 1990 roku – najstarszą wersję, jaką można bezpiecznie stosować. Starszych wersji można używać tylko w komputerze bez dysku IDE. Symbol xxxx-zzzz oznacza kod BIOS-u i numer identyfikacyjny producenta OEM (original equipment manufacturer). Np. w przypadku płyt głównych firmy AMI kod ten ma postać DAMI-[kod modelu].

Wymiana BIOS-u komputera

Użytkownicy mający odpowiednią wiedzę i narzędzia mogą się pokusić o przeprowadzenie interesującej modyfikacji komputera, polegającej na wymianie BIOS-u. W kolejnym podrozdziale omówię modyfikacje, które przeprowadziłem w swoim komputerze (dały one efekty w moim komputerze, co oznacza, że niekoniecznie muszą działać w innych komputerach). Poza oczywistymi korzyściami płynącymi z wymiany BIOS-u, przeprowadzenie modyfikacji pozwoliło mi na zdobycie dodatkowej wiedzy w zakresie komputerów IBM i kompatybilnych. Wiem także, że wielu czytelników jest zainteresowanych tego rodzaju informacjami.

Modyfikację BIOS-u w komputerach powinni przeprowadzać tylko ci czytelnicy, którzy mają "smykałkę" techniczną albo są bardzo żądni przygód. Pozostałe osoby, a zwłaszcza ci, dla których niezawodność komputera jest sprawą bardzo istotną, nie powinni przeprowadzać takich modyfikacji. Jednak informacje te mogą zainteresować nawet tych czytelników, którzy nie zamierzają dokonywać modyfikacji ROM BIOS-u.
Więcej informacji na temat BIOS-u, w tym takich możliwości jak usunięcie opcji sprawdzania szybkości komputera w czasie testu POST (ang. POST Sped Check), sporządzanie kopii zapasowej ROM BIOS komputera, modyfikacja tabeli parametrów dysku twardego i zmiana kroku głowicy dysku twardego, można znaleĽć na płycie CD dostarczanej wraz z książką. Informacje te można również znaleĽć w rozdziale siódmym wydania szóstego tej książki.

Zmiana BIOS-u w pamięci typu FlashROM

Zanim przystąpisz do uaktualniania BIOS-u, musisz się zaopatrzyć w jego uaktualnioną wersję, przygotowaną przez producenta twojej płyty głównej. Połącz się ze stroną główną producenta, przejdĽ do podstrony z uaktualnionymi wersjami BIOS-u, a następnie wybierz i zgraj uaktualniony BIOS twojej płyty głównej.

Program narzędziowy uaktualniający BIOS to najczęściej samorozpakowujące się archiwum, które po zgraniu ze strony producenta powinno zostać rozpakowane i skopiowane na dyskietkę, zanim jeszcze rozpoczniesz proces aktualizacji. Programy i sposoby aktualizacji BIOS-u nieco się różnią w zależności od producenta, najlepiej więc przed aktualizacją przeczytać instrukcję, dołączoną najczęściej do uaktualnionej wersji. Poniżej została przedstawiona instrukcja postępowania dla płyt głównych Intela, ponieważ są one najbardziej popularne.

Pierwszym krokiem po zgraniu uaktualnionego BIOS-u powinno być wejście do konfiguracji CMOS i zanotowanie wszystkich aktualnych ustawień, ponieważ podczas uaktualniania BIOS-u zostaną one wymazane. Następnie należy utworzyć DOS-ową dyskietkę startową i rozpakować na nią pliki uaktualniające BIOS, znajdujące się w ściągniętym z sieci pliku. Następnie powinieneś zrestartować i uruchomić komputer z utworzonej przed chwilą dyskietki i dalej postępować już zgodnie z instrukcjami na ekranie.

Poniżej został krok po kroku przedstawiony sposób postępowania przy uaktualnianiu BIOS-u:

  1. Zapisz aktualne ustawienia konfiguracji zawarte w pamięci CMOS. By uzyskać do nich dostęp, musisz, naciskając odpowiedni klawisz podczas uruchamiania się komputera (F1 w BIOS-ach AMI, F2 w BIOS-ach Phoenix, a Delete w BIOS-ach Award), wejść do programu konfiguracyjnego. Po uaktualnieniu BIOS-u wszystkie ustawienia zresetują się do wartości domyślnych producenta, powinieneś więc zapisać wszystkie ustawienia charakterystyczne dla twojego komputera. Szczególną uwagę zwróć na ustawienia twardego dysku; są one bardzo ważne. Jeśli pomylisz się przy ich ponownym wpisywaniu, nie będziesz mógł uruchomić komputera z dysku, nie będzie również możliwe odczytanie zawartych na nim danych.

  2. WyjdĽ z programu konfiguracyjnego BIOS-u i uruchom ponownie komputer. Pozwól komputerowi na załadowanie systemu Windows i wywołaj okno trybu MS-DOS lub też przejdĽ do DOS-u bezpośrednio, jeszcze przed uruchomieniem się Windows (na przykład przytrzymując przycisk F8 po zobaczeniu napisu "Uruchamianie systemu Windows" i wybierając z menu "Tylko wiersz poleceń").

  3. Umieść dyskietkę w stacji dysków A: i sformatuj ją za pomocą polecenia FORMAT z parametrem /S, tak jak zostało to pokazane poniżej:

    C:\>FORMAT A: /S

  4. Jeśli masz sformatowaną już wcześniej, czystą dyskietkę, możesz zamiast na nowo ją formatować, tylko przenieść na nią system, wykorzystując w następujący sposób polecenie SYS:

    C:\>SYS A:

  5. Plik, który wcześniej zgrałeś ze strony WWW Intela, powinien być samorozpakowującym się, skompresowanym archiwum, zawierającym w sobie wiele spakowanych plików. Umieść zgrany plik w tymczasowym katalogu, a następnie dwukrotnie kliknij na jego ikonę lub też będąc w tym samym katalogu, wpisz jego nazwę i naciśnij Enter. Po uruchomieniu, plik sam się rozpakuje. Jeśli na przykład plik, który zgrałeś, nosi nazwę SEBIOS04.EXE (dla płyt głównych Intel SE440BX), powinieneś wpisać następujące polecenie:

    C:\TEMP>SEBIOS04 <enter>

  6. Wśród rozpakowanych plików powinien znajdować się plik noszący nazwę BIOS.EXE oraz plik tekstowy zawierający licencję oprogramowania. Teraz, podobnie jak wcześniej, powinieneś rozpakować BIOS.EXE na dyskietkę systemową, wpisując:

    C:\TEMP>BIOS A:

  7. Teraz możesz zrestartować komputer i uruchomić go z umieszczonej w stacji A: dyskietki startowej, zawierającej rozpakowane pliki nowego BIOS-u. Podczas uruchamiania się komputera z dyskietki, automatycznie zostanie wywołany program IFLASH; po ujrzeniu znaku zachęty naciśnij Enter.

  8. Wybierz "Save to flash memory area to file" i naciśnij Enter. Wpisz po ujrzeniu zapytania nazwę pliku. Pod tą nazwą zostanie utworzona kopia zapasowa aktualnego BIOS-u, na wypadek, gdyby nowy BIOS wywołał nieoczekiwane problemy.

  9. Wybierz "Update Flash Memory From a File" i naciśnij Enter. Po ujrzeniu zapytania wybierz nazwę obrazu BIOS-u, który ma zostać zapisany w pamięci Flash. Wybierz za pomocą klawisza Tab odpowiednią nazwę pliku i naciśnij Enter.

  10. Na ekranie monitora pojawi się teraz komunikat ostrzeżenia, że kontynuowanie procesu aktualizacji BIOS-u spowoduje wymazanie wszystkich aktualnie znajdujących się w pamięci Flash danych. Naciśnij Enter, by kontynuować – uaktualnianie powinno potrwać około trzech minut. Nie przerywaj procesu uaktualniania, ponieważ jeśli to zrobisz, BIOS zawarty w pamięci Flash będzie uszkodzony.

  11. Gdy stwierdzisz, że cały BIOS został przegrany do pamięci Flash, wyjmij dyskietkę startową ze stacji dysków i naciśnij Enter, by zrestartować komputer.

  12. Naciśnij odpowiedni klawisz, by wejść do programu konfiguracyjnego (Setup). By upewnić się, że nowy BIOS jest już zainstalowany, w menu głównym (pierwszy ekran po wejściu) sprawdĽ numer wersji.

  13. Wczytaj standardowe ustawienia w programie konfiguracyjnym. Jeśli posiadasz AMI BIOS, naciśnij F5; w BIOS-ie Phoenix przejdĽ do podmenu "Exit", wybierz "Load Setup Defaults"i naciśnij Enter. Jeśli tego nie zrobisz, system może działać niestabilnie.

  14. Ustaw wcześniej zanotowaną konfigurację. Naciśnij F10, by zapisać zmiany, wyjdĽ z programu konfiguracyjnego i zrestartuj system. Od tej chwili komputer powinien być w pełni funkcjonalny i działać poprawnie z nową wersją BIOS-u.

Jeśli po zrestartowaniu systemu napotkasz błąd sumy kontrolnej CMOS (CMOS checksum error) czy też inny problem, spróbuj jeszcze raz zrestartować komputer. By skorygować błąd sumy kontrolnej CMOS, musisz wejść do programu konfiguracyjnego, sprawdzić i zapisać ustawienia, a po wyjściu zrestarować komputer.

Odzyskanie BIOS-u

Podczas przeprogramowywania pamięci Flash, powinieneś zobaczyć na ekranie komputera podobne do poniższego ostrzeżenie:

C:\>SYS A:"The BIOS is currently being updated. DO NOT REBOOT OR POWER DOWN until 
the update is completed (typically within three minutes)..."

(Trwa uaktualnianie BIOS-u. NIE RESTARTUJ I NIE WYŁĄCZAJ KOMPUTERA przed 
zakończeniem procesu uaktualniania (zazwyczaj poniżej trzech minut))

Jeśli nie zwrócisz uwagi na to ostrzeżenie lub coś przerwie procedurę uaktualniania, staniesz się posiadaczem komputera o uszkodzonym BIOS-ie. Oznacza to, że nie będziesz mógł zrestartować komputera i powtórzyć procesu uaktualniania, a przynajmniej nie tak łatwo. Zależnie od płyty głównej, może się okazać, że musisz wymienić układ scalony pamięci Flash na wcześniej zaprogramowany przez producenta, ponieważ płyta główna nie będzie działać bez poprawnego BIOS-u. Dlatego właśnie nadal trzymam pod ręką programator pamięci Flash; jest on bardzo użyteczny przy płytach głównych posiadających kości pamięci Flash umieszczone w gniazdach. W ciągu kilku minut mogę zaprogramować kość pamięci i zainstalować ją na płycie głównej. Jeśli potrzebny ci jest programator ROM, polecam kupienie go w firmie Andromeda Research lub Bytek

W większości obecnie produkowanych systemów pamięć Flash jest przylutowana do płyty głównej i nie może zostać wymieniona. Nie oznacza to jednak, że gdy podczas programowania wystąpi błąd, będzie należało wymienić całą płytę główną – większość płyt głównych z przylutowaną pamięcią Flash posiada specjalną procedurę umożliwiającą odzyskanie pamięci Flash. Mieści się ona w specjalnym niewymazywalnym obszarze pamięci Flash, zarezerwowanym na tę właśnie ewentualność.

W przypadku gdy dojdzie do nieoczekiwanego przerwania procesu aktualizacji BIOS-u, to, co znajduje się w pamięci Flash, najczęściej nie nadaje się już do niczego. Postępując zgodnie z poniższymi punktami można przywrócić normalny stan systemu. Podczas odzyskiwania BIOS-u, do płyty głównej musi być podłączone co najmniej zasilanie, stacja dysków ustawiona jako A: oraz głośniczek systemowy (speaker).

  1. Przełącz zworkę "Flash Recovery" na pozycję trybu odzyskiwania. Praktycznie wszystkie płyty główne Intela i wiele płyt głównych innych producentów posiada zworkę lub przełącznik powodujący wejście w tryb odzyskiwania. Zworka jest najczęściej oznaczona jako "Recover/Normal". Na rysunku 7.26 została zaznaczona pozycja zworki na typowej płycie głównej Intel SE440BX.

Rysunek 7.26.

Zworka przełączająca w tryb odzyskiwania na typowej płycie głównej Intela

  1. Umieść przygotowaną wcześniej dyskietkę z uaktualnionym BIOS-em w stacji dysków A: i uruchom ponownie komputer.

    Ponieważ nieusuwalny obszar pamięci Flash jest bardzo niewielki, nie ma w nim zawartych procedur wyświetlania grafiki. Innymi słowy, nic nie pojawi się na ekranie. W rzeczywistości, do przeprowadzenia całej procedury nie jest nawet wymagana karta graficzna. Postęp procedury można zaobserwować na podstawie sygnałów dĽwiękowych z głośniczka systemowego oraz diody stacji dysków. Podczas umieszczania w pamięci Flash BIOS-u, komputer wydaje sygnały dĽwiękowe i świeci się dioda stacji dysków.

  2. Proces odzyskiwania powinien się zakończyć zaraz po zgaśnięciu diody stacji dysków. Wyłącz komputer.

  3. Przełącz zworkę Flash Recovery na pozycję normalnej pracy.

Po ponownym włączeniu systemu, w komputerze powinien już być zainstalowany nowy, w pełni działający BIOS. Możesz jednak pozostawić dyskietkę w stacji dysków A: i sprawdzić, czy na pewno została zainstalowana odpowiednia wersja BIOS-u. Warto zauważyć, że procedura odzyskiwania BIOS-u jest często najszybszym sposobem uaktualnienia BIOS-u w wielu komputerach, szczególnie jeśli w tej samej chwili przeprowadzasz wiele uaktualnień. Właśnie tak się to najczęściej odbywa u producenta lub przy montażu komputera.

BIOS na partycji IML dysku twardego

Firma IBM wprowadziła technikę podobną do flash ROM, zwaną IML (Initial Microcode Load). Technika ta polega na zapisie kodu BIOS-u na specjalnej, ukrytej partycji dysku twardego i ładowaniu go z niej za każdym razem po włączeniu zasilania komputera. Oczywiście, na płycie głównej komputera nadal znajduje się "rdzeń" BIOS-u, jednak całe jego zadanie polega na zlokalizowaniu na dysku i załadowaniu kodu BIOS-u z partycji systemowej. Dzięki tej technice firma IBM może rozprowadzać wersje instalacyjne BIOS-u na dyskietce. IML BIOS jest ładowany z dysku każdorazowo po włączeniu zasilania komputera.

Wraz z kodem BIOS-u, na partycji systemowej znajduje się kompletna kopia dyskietki systemowej (Reference Disk), która pozwala na uruchomienie programu konfiguracyjnego komputera w czasie restartu. Dzięki tej opcji nie jest konieczne startowanie komputera z dyskietki systemowej, kiedy chcemy zmienić konfigurację. Daje to wrażenie, że cała zawartość dyskietki systemowej rezyduje w pamięci ROM.

Wadą tego rozwiązania jest umieszczenie kodu BIOS-u na twardym dysku (SCSI). Komputer nie może poprawnie funkcjonować bez przyłączonego i odpowiednio skonfigurowanego dysku twardego. W razie awarii czy odłączenia dysku zawsze jest możliwe wystartowanie komputera z oryginalnej dyskietki, nie można jednak wystartować systemu ze zwyczajnej dyskietki.


Rozdział z książki "Rozbudowa i naprawa komputerów PC". © 1999 Wydawnictwo Helion