2013-04-08 17 views
7

Po pierwsze, weź jeden system procesorowy z wieloma procesami działającymi w trybie pseudo-równoległym. Kiedy proces wywoła błąd strony, spowoduje to, że procesor przestanie wykonywać wszystkie programy, dopóki strona nie zostanie załadowana z dysku?Czy podczas stronicowania pamięci można uruchamiać inne procesy?

Jeśli tak, czy to zmienia się w systemie wielordzeniowym lub wieloprocesorowym, czy też inne procesy mogą kontynuować odczytywanie i zapisywanie w pamięci podczas obsługi strony?

Dzięki!

+0

To jest bardzo zależne od systemu operacyjnego pytanie. Określ, o którym systemie operacyjnym i wersji mówisz. – Gray

+0

Miałem na myśli Linux, ale jeśli działa on inaczej w różnych systemach operacyjnych, byłbym zainteresowany usłyszeniem o różnicach. – drpepper

+0

@Gray: Teoretycznie być może, ale ta zdolność sięga połowy ubiegłego wieku. Na przykład. IBM OS/360. – MSalters

Odpowiedz

6

Po pierwsze, planowanie nie działa dla procesów, ale dla wątków. Błąd strony powoduje tylko zawieszenie wątku powodującego usterkę (w systemach Linux i Windows). Wątek został wyrejestrowany, a procesor może wykonać inną pracę.

Na poziomie sprzętu służącego do łączenia z systemem operacyjnym i tak nie ma synchronicznego IO. Nie istnieje (przynajmniej w przypadku nowoczesnego sprzętu). System operacyjny nie siedzi w ciasnej pętli, czekając, aż sprzęt zasygnalizuje zakończenie IO. Zamiast tego wątek jest planowany do czasu zakończenia operacji wejścia/wyjścia (lub wskazania odpowiedniego uchwytu oczekiwania).

+3

Twój model systemu operacyjnego sprawdza się w przypadku nowoczesnych dysków twardych korzystających z DMA. Ale historycznie IDE korzystał z PIO, zaprogramowanego wejścia/wyjścia, które wymagało stałej uwagi systemu operacyjnego do czasu zakończenia IO. I na poziomie sprzętu tak naprawdę nie ma ** asynchronicznego ** IO. Sterownik szyny DMA lub PIC-e wykonuje całą synchroniczną IO, a jego asynchroniczne zgłoszenie zostanie przekazane procesorowi. Nadal korzyści, ponieważ jest to prosty dedykowany kontroler, który jest związany, a nie cały procesor. – MSalters

+0

Dobre punkty. Przeformułowałem trochę, żeby wyostrzyć odpowiedź. – usr

1

Tak, to wcale nie jest problem. Nikt przy zdrowych zmysłach nie tworzy wieloprocesowego systemu operacyjnego, który nie jest w stanie uruchomić wielu procesów, ani nie będzie arbitralnie blokował procesu A, ponieważ B czeka na dysku I/O.

+0

Jesteś tego pewien? Wiem, że kilka lat temu wybór na dysku IO powiedziałbym, że wszystko było gotowe. To sugeruje, że jądro Linuksa może nie być w stanie zaplanować żądania dysku IO w tle. A może działałoby z SSA, ale nie z SATA. – Gray

+0

Przeglądanie operacji wejścia/wyjścia doprowadziło mnie do artykułów Wikipedii dotyczących asynchronicznych operacji we/wy i DMA, które potwierdzają to, co opisujesz. – drpepper

+0

@Gray: A więc? Jądro Linuksa przechowuje listę procesów _runnable_. Wydanie dysku I/O może zdjąć jeden proces z tej listy, ale pytanie sugeruje, że cała lista uruchomionych procesów jest wyczyszczona. To zupełnie bezcelowe. Asynchroniczne I/O i DMA nie mają z tym nic wspólnego. Jeden proces może nawet oczekiwać, aby ktoś włożył CD-ROM, bez wpływu na inne procesy. Po prostu pomyśl o 'crond', który nie zostaje zatrzymany przy każdym I/O. – MSalters

Powiązane problemy