Oto wątpliwość, na którą natknąłem się podczas wykonywania zadania domowego w systemie operacyjnym - wydaje się jednak, że jest bardziej oparte na koncepcji niż na prostym pytaniu o kodowanie, więc IMHO nie sądzę, aby znacznik zadania domowego był do tego odpowiedni.
W schemacie czystego stronicowania na żądanie dla wielu procesów uruchomionych w tym samym czasie, biorąc pod uwagę stałą ilość pamięci RAM i pamięci Swap, co dzieje się w następujących 2 przypadkach w przestrzeni wymiany, gdy
Proces napotyka błąd strony i nie ma wolnych ramek w pamięci RAM, dlatego wymaga zapisania jednej ze stron z fragmentu ramek jądra do zamiany (dla uproszczenia nie rozważam kopiowania -pisz w przypadku). Oczywiście, gdzie w przestrzeni wymiany miałaby być zapisana ta ramka i jakie struktury danych należy w tym celu zaktualizować?
Kiedy proces musi przejść do konkretnej strony, gdzie wygląda on w pamięci Swap i skąd miałby wiedzieć, czy ta konkretna strona w ogóle jest obecna w Swap?
Jak możesz sobie wyobrazić, mam trudności ze zrozumieniem, w jaki sposób zarządzać przestrzenią wymiany podczas czystego schematu zarządzania popytem i jakie struktury danych byłyby niezbędne. Byłoby wspaniale, gdybyś mógł odwołać się do jakichkolwiek linków w swojej odpowiedzi (szukałem w „Koncepcjach systemu operacyjnego - 8 edycja autorstwa Silberschatz, nie mogłem znaleźć jednoznacznej odpowiedzi na moje pytanie).
Odpowiedzi:
Aby odpowiedzieć na to pytanie, odwiedzę jakieś wstępne zrozumienie. Stronicowania na żądanie nie można osiągnąć bez wsparcia sprzętowego. Wszystkie współczesne architektury komputerów obsługują stronicowanie, jednak wiele z nich ma różne szczegóły implementacji.
Procesory x86 wykorzystać to, co nazywa się stół stronę śledzić wirtualnych przestrzeni adresowych i stronie odwzorowań, jak również bity o funkcjonalnościami dostępu oraz, bardziej odpowiednie, czy ta strona jest jeszcze obecny w pamięci fizycznej. Naruszenie powoduje błędy strony, które są zatrzymywane przez system operacyjny.
Aby uzyskać więcej informacji na ten temat, zobacz ten artykuł .
Aby odpowiedzieć na pytanie o zamianę stron, musimy najpierw odwiedzić pytanie, w jaki sposób system operacyjny śledzi, które strony są używane przez jaki proces i jak są one przydzielane. Istnieje wiele różnych struktur danych, które można do tego wykorzystać. Płaska tablica bitów oznaczająca, czy ramka jest przydzielona, czy nie, jest jednym ze sposobów. Połączone listy lub stosy to kolejne. Przy czystym stronicowaniu na żądanie przydzielone strony nie są tak naprawdę oznaczane jako obecne, gdy są przydzielane. Powoduje to, że żaden fizyczny taran nie jest odkładany na proces, dopóki on do niego nie napisze. Gdy to zrobi, sprzęt zgłasza błąd, który pułapkuje system operacyjny, a następnie system operacyjny używa algorytmu wymiany, jeśli nie ma dostępnych fizycznych stron do przypisania do już przydzielonej strony wirtualnej.
Aby uzyskać więcej informacji na temat alokacji ramek strony, zobacz tutaj . Tam zobaczysz ogólny przegląd niektórych odpowiednich struktur danych.
Po wdrożeniu odpowiedniego algorytmu przydzielania stron należy wybrać inny sposób przydzielania miejsca na dysku do zamiany. Na przykład system Windows w przeszłości używał płaskiego pliku w systemie plików do zamiany stron. Wyobrażam sobie, że dla każdego węzła w strukturze danych, który śledzi przydzielone strony, przypisany jest wskaźnik do przesunięcia w pliku, wskazujący pozycję strony na dysku. Uniksowe systemy operacyjne tradycyjnie używają oddzielnych partycji do zamiany stron, co jest prawdopodobnie szybsze, ponieważ nie ma warstwy systemu plików.
Możliwe jest także oddzielenie struktur danych algorytmu wymiany od struktur algorytmu alokacji, jednak oba są ze sobą powiązane, więc prawdopodobnie nie jest to często wykonywane.
Mam nadzieję, że to odpowiada na twoje pytanie pomimo względnej zwięzłości, z jaką go potraktowałem. Odkryłem, że najlepszym sposobem na poznanie systemów operacyjnych jest zanurzenie się w niekiedy nieprzyjemnych szczegółach architektonicznych, które można znaleźć na stronach takich jak wiki.osdev.org i www.osdever.net, które w szczególności zajmują się tworzeniem hobby OS i zapewniają doskonałe samouczki na takich szczegółach.
źródło