5

Paging tworzy złudzenie, że każdy proces ma nieskończoną pamięć RAM, przenosząc strony na iz dysku. Więc jeśli mamy nieskończoną pamięć (w jakiejś hipotetycznej sytuacji), czy nadal potrzebujemy stronicowania? Jeśli tak, to dlaczego? Zmierzyłem się z tym pytaniem w wywiadzie.Jeśli mamy nieskończoną pamięć, czy nadal potrzebujemy wywoływania?

+0

IMO nadal będziemy wymagać stronicowania w celu zamiany. A mówiąc "nieskończona pamięć", czy włączyłeś także pamięć RAM? – exexzian

Odpowiedz

3

To jest pytanie filozoficzne, tak oto odpowiedź filozoficzną :)

Sztuką w tej kwestii jest, aby uczynić założenia dotyczące pamięci nieskończonej. Można powiedzieć "nie, nie trzeba używać stronicowania, ALE". A następnie:

Pamięć nieskończona musi być dostępna w dopuszczalnym czasie dostępu do pamięci. Jeśli tak nie jest (ponieważ nieskończoność zajmuje dużo miejsca, a pamięć znajduje się dalej od procesora), nie ma żadnej różnicy między nią a dyskiem, oba nie spełniają wymaganej pamięci, co jest tym, czego buforowanie poprzez strony próbuje rozwiązać.

Weźmy na przykład Amazonkę S3, która ze względów praktycznych jest nieskończona. Jeśli możesz polegać na S3, aby spełnić wszystkie twoje wymagania dotyczące pamięci w tym sensie, że gdy potrzebujesz czegoś, co zostało pobrane w czasie x możesz je pobrać z S3, nie musisz niczego przeglądać ani nawet trzymać w pamięci "lokalnej". Po prostu pobierz go z S3, kiedy tylko go potrzebujesz, tyle razy, ile go potrzebujesz. (Oczywiście miałoby to inne konsekwencje, takie jak koszt i sieć, ale zignorujmy to teraz).

Oczywiście zawsze można powiedzieć, że optymalnie chcesz mieć dostęp do pamięci, aby jak najszybciej, a „dość szybko” jest prawdopodobnie wolniej niż „najszybszy”, więc lokalny dostęp do pamięci nie daje lepszą wydajność itd

I na koniec, gdybym miał wyobrazić sobie pamięć, która jest nieskończona i ma taki sam czas dostępu, bez względu na to, jak "daleko" jest jednostka pamięci od jednostki pobierającej, musiałbym wyobrazić sobie sferę, w której jednostka przetwarzania jest pośrodku , więc nie można twierdzić, że jedna jednostka pamięci jest wolniejsza od drugiej z powodu odległości. W przeciwnym razie można by powiedzieć, że wywoływanie będzie odbywać się wewnętrznie w pamięci, dzięki czemu dostęp będzie szybszy dla jednostek pamięci, które są najczęściej używane (lub dowolnego innego algorytmu, którego użyjesz).

7

Zakładając, że "nieskończona pamięć" oznacza nieskończoną dostępną losowo pamięć lub pamięć RAM, nadal będziemy potrzebować stronicowania. Mimo że stronicowanie często wiąże się z możliwością zamiany stron na pamięć RAM na twardy dysk w celu oszczędzania pamięci, jest to tylko jeden aspekt stronicowania. Oto kilka innych powodów, dla których warto wywoływać:

  • Bezpieczeństwo. Paging to metoda wymuszania bezpieczeństwa systemu operacyjnego i ochrony pamięci poprzez zapewnienie, że procesy nie mogą uzyskać dostępu do pamięci innego procesu i nie mogą modyfikować rezydentnego jądra.
  • Wielozadaniowość. Pomoce przywoławcze w wielozadaniowości poprzez wirtualizację przestrzeni pamięci, czyli adres 0xFOO w procesie A może być czymś zupełnie innym niż 0xFOO w procesie B
  • Przydzielanie pamięci. Pomoce przywoławcze w alokacji pamięci przez zmniejszenie fragmentacji i zapewnienie pamięci RAM są przydzielane tylko przy dostępie. Oznacza to, że chociaż proces wymaga, przypuszczam, 100 MB ciągłej pamięci RAM, to nie musi być ciągła fizycznie. Dodatkowo, gdy program zażąda 100MB miejsca, system operacyjny poinformuje program, że można bezpiecznie korzystać z tego 100MB miejsca, ale nie zostanie on faktycznie przydzielony, dopóki program nie użyje tej przestrzeni w pełni.

Bez wątpienia ten drugi nie byłby całkowicie konieczny, gdybyśmy mieli nieskończoną pamięć RAM; zawsze dobrą praktyką jest bycie podatnym na zranienie nawet wtedy, gdy nie jesteśmy ograniczeni zasobami. Pokazuje również użycie stronicowania, które czasami nie jest brane pod uwagę.