Lista pytań i odpowiedzi

Informacje dodatkowe

Na prośbę jednego ze studentów, zamieszczam link do tutoriala jak stworzyć i używać biblioteki.

Pytania i odpowiedzi

  1. Czy w przypadku błędu alokacji pamięci przez malloc można wywołać funkcję systemową exit() czy lepiej zwrócić kod błędu / ustawić zmienną errno na ENOMEM?
    Dopuszczalne są oba typy zachowań - trzeba tylko pamiętać o ich poprawności.
  2. W opisie funkcji select_page powiedziane jest, że jej argumentem jest lista ramek, lecz typ argumentu page* sugeruje raczej listą stron. Czy struktura page ma więc reprezentować w rzeczywistości ramki w pamięci operacyjnej?
    Strony sprowadzone do pamięci fizycznej są ramkami. Ramki usunięte z pamięci fizycznej są w pamięci wirtualnej stronami.
  3. Funkcja page_sim_end() ma najprawdopodobniej błędnie ustawiony typ zwracanej wartości na void podczas gdy w dalszej części powiedziane jest, że zwraca ona liczbę całkowitą.
  4. Czy pamięć dla wątków jest rozłączna (każdy z nich posiada własną tablicę stron i pełnić rolę procesów w symulacji), czy mają one dostęp do całej pamięci wirtualnej?.
    Mają dostęp do całej pamięci. Wątki nie symulują procesów.
  5. Czy dyskowy plik wymiany można na dzień dobry utworzyć w rozmiarze addr_space_size * page_size?
    Można.
  6. Czy dyskowy plik wymiany należy dynamicznie powiększać w miarę, jak użytkownik wykonuje odwołania do nowych stron?
    Nie trzeba, ale można.
  7. Czy 'pamięć wirtualna' ma być jakoś zainicjowana(np. zerami)?
    Nie musi.
  8. Czy możliwa jest sytuacja, że użytkownik będzie chciał odczytać bajt, którego nigdy wcześniej nie zapisał?
    Taka sytuacja jest możliwa.
  9. Czy 'pamięć operacyjna' ma być na dzień dobry całkowicie pusta (w sensie, że pierwsze żądanie odczytu/zapisu przez użytkownika zawsze powoduje ładowanie strony z dysku) czy można wsadzić tam jakieś strony(np. kolejne począwszy od zera)?
    Wybór optymalnego rozwiązana pozostawiam rozwiązującym.
  10. Czy dostęp do pamięci ma tylko jeden wątek?
    Nie.
  11. Jaki ma być stan biblioteki po zwróceniu kodu błędu?
    Intuicyjne, jednorazowe zwrócenie kodu błędu nie powinno powodować przejścia biblioteki w stan "dalej nieużywalna biblioteka".
  12. Czy można przyjąć, że błąd zwracany przez naszą funkcję oznacza, że bibliotekę trzeba na przykład na nowo zainicjalizować?
    Raczej nie. Zwrócenie błędu to informacja dla programu używającego bibliotekę, że wywołanie pewnej jej funkcji z jakichś powodów się nie powiodło.
  13. Czy można tworzyć oddzielny plik dla każdej strony?
    Nie można. Plik dyskowy to odpowiednik pamięci fizycznej. Rzadko się zdaża, żeby mieć np. 4 miliony kości RAM po 1KB
  14. Jak bardzo powinniśmy się martwić złożonością rozwiązania (szczególnie w kontekście implementacji strategii LFU)?
    Rozsądnie. Nie jest to najistotniejsza część zadania.
  15. Czy adresy działają tak, jak na wykładzie?
    Tak.
  16. Czy możemy założyć, że adresy są w porządku (nie wyskakują poza pamięć, są poprawne itd.)?
    Nie.
  17. Czy można założyć, że parametry funkcji page_sim_init (unsigned page_size, unsigned mem_size, unsigned addr_space_size, unsigned max_concurrent_operations) są potęgami dwójki.?
    Tak.
  18. Czy można korzystać ze wszystkich funkcjonalności aio?
    Tak.
  19. Jakiego rodzaju błędy mogą powodować przejście biblioteki w stan nieużywalności?
    Te błędy, po wystąpieniu których niemożliwe jest dalsze działanie biblioteki.
  20. Chciałbym się zapytać czy mogę przyjąć, że w przypadku próby odczytania bajtu, który nigdy nie został zapisany, zostanie zwrócona "jakaś" wartość?
    Tak. Można również zwrócić błąd (np. Error - Memory Not Initialized - EMEMINIT).
  21. Czy mogę założyć, że program będzie się zachowywał w sposób nieokreślony, jeśli przekazany adres będzie niepoprawny?
    Nie, co wynika z odpowiedzi na pytanie #11, pytanie #16 i pytanie #19.
  22. Czy można rozszerzać interfejs strategii?
    Tak.
  23. Wszystkim żyłoby się prościej gdyby funkcja select_pages przyjmowała dodatkowy argument, na przykład liczbę stron.
    Przyjmijmy, select_page może wystąpić w jednym z dwóch wariantów
  24. Czy po wysłaniu ostatecznego rozwiązania można przestać przeglądać FAQ i nie przejmować się późniejszymi pytaniami?
    Proszę ustalić z wykładowcą termin zamknięcia FAQ. Wszystkie zadania będą sprawdzane wg. tych samych kryteriów.
  25. Co dokładnie rozumiemy przez rozpoczęcie odwołania do strony?
    Wywołania page_sim_get/set dla strony.
  26. Czy należy samodzielnie zdefiniować własną wartość errno dla błędu inicjalizacji biblioteki czy lepiej użyć tych zdefiniowanych w errno.h?
    Można skorzystać z kodów błędów zdefiniowanych w errno.h lub zdefiniować własne, lub korzytać z obu rozwiązań jednocześnie.
  27. Czy można założyć że page_sim_end() zostanie wywołane po zakończeniu wszystkich page_sim_get/set-ów?
    Nie.
  28. Czy można jakoś oszacować liczbę odwołań do pojedynczej strony w trakcie działania biblioteki?
    Z pewnością będzie to mniej niż 231.
  29. Czy funkcja select_page może przyjmować inną listę argumentów? (Patrz pytanie #23)
    Przyjmijmy, select_page może mieć dowolną listę argumentów. Uwaga! w mocy pozostaje wymaganie, żeby przekazać w jakiś sposób aktualną listę ramek.
  30. Kiedy wykonywana jest operacja dziennika numer 3?
    Operacja dziennika wykonania numer 3 wykonywana jest, gdy uda się zapisać stronę na dysk.
  31. Jaką przyjąć politykę zliczania użyć strony dla algorytmu LFU?
    Można zliczać użycia strony od momentu załadowania strony do pamięci fizycznej, lub od momentu zainicjalizowania biblioteki. Należy w pliku README opisać, jaką przyjęło się politykę zliczania.
  32. W jaki sposób należy używać skryptu submit żeby zachować żądaną strukturę katalogu z rozwiązaniem?
    Proszę najpierw zarchiwizować rozwiązanie w jakiś typowy sposób (np narzędziem tar).
ostatnia aktualizacja: 17 stycznia 2011 r.