Przejdź do zawartości

Wielowątkowość/Procesy

Z Wikibooks, biblioteki wolnych podręczników.

System operacyjny to naprawdę świetne narzędzie, ale nie zawsze tak było. Jeszcze nie dawno ( w czasach MS-DOS'a) nadal korzystało się z systemów, które pozwalały na korzystanie z jednego programu na raz. Oczywiście istniały również potężne systemy komputerowe, gdzie jednocześnie korzystało z nich wielu użytkowników i wtedy wykonywanie jednego programu na raz nie byłoby najmądrzejszym z pomysłów. Trzeba więc poprawić nieco nasze stwierdzenie - wielowątkowy system operacyjny to naprawdę świetne narzędzie.

Jednak jego świetność wynika jeszcze z jednego faktu - zapewnia programiście świetną dozę abstrakcji do wykorzystania od zaraz! Zamiast wczytywać dane z dysku bit po bicie udostępnia do wykorzystania pliki ( to są już tak oczywiste sprawy, że w wielu momentach zapominamy o tym co znajduje się pod tą warstwą abstrakcji), z gotowymi mechanizmami dostępu, jak na przykład linuksowa funkcja open. Następnie mamy wszystkie urządzenia peryferyjne, z którymi możemy się bardzo wygodnie komunikować za sprawą systemu operacyjnego.

Najważniejszą jednak abstrakcją, z punktu widzenia tej książki, jaką otrzymujemy są procesy. Na potrzeby tego podręcznika za proces będziemy, przynajmniej na razie, przyjmować taką definicję :

Dla kogoś zupełnie początkującego może się to wydawać dość dziwne, że nawet w jednoprocesorowym systemie można mówić o współbieżności. Przecież w takim wypadku tylko jeden proces może być wykonywany w jednym czasie.

Najpierw trzeba by się zastanowić na samą budową procesora, czyli zejść o jeden poziom abstrakcji niżej. Na poziomie logicznej budowy procesora powinien się on składać z rejestru(rejestrów) - być może znanego- AC, czyli akumulatora oraz ALSU tzn. Arithmetic-Logic-Shifting Unit po polsku jednostki arytmetyczno-logiczno-przesuwającej, za jej pomocą odbywają się wszystkie operacje na liczbach wykonywane przez komputer. Dobrze, ale to nie wszystko, co znajdziemy we współczesnych procesorach, dodatkowo mamy tam FPU, które jeszcze nie dawno było po prostu osobnym procesorem służącym do operacji na liczbach zmiennoprzecinkowych (stąd nazwa Floating Point Unit) po polsku nazywany czasem koprocesorem. Czyli na jednej płytce krzemowej nie większej niż 3cm na 3cm tak na prawdę znajdują się dwa procesory, jeden do operacji na liczbach całkowitych a drugi do operacji na liczbach rzeczywistych.

Teraz możemy wrócić do wyższego poziomu abstrakcji. W pamięci nadal mamy to, że procesor w systemie operacyjnym jest również zasobem, ale takim, który służy do przetwarzania danych, a dane mogą być różnego typu. I ze względu na ten typ system operacyjny może przy wykorzystaniu jednego procesora jednocześnie prowadzić obliczenia. Pod warunkiem, że jeden proces w tym samym kwancie czasu będzie wykonywać kod operujący na floatach, natomiast drugi będzie działać na intach.

Ale to tylko jedna z możliwości jakie mogą się pojawić przy przetwarzaniu współbieżnym. Zastanówmy się nad takim przypadkiem - mamy proces, który po wykonywaniu jakichś obliczeń ( czyli znajduje się "na procesorze") będzie potrzebować dostępu do dysku, jak wiadomo dostęp do pamięci dyskowej jest znacznie wolniejszy od dostępu do pamięci RAM, więc w czasie wykonywania tego żądania równie dobrze jakiś inny proces mógłby wykonywać swoje obliczenia. W takim przypadku mamy do czynienia z pseudowspółbieżnością,w momencie, w którym proces prosi o dostęp do dysku następuje przerwanie sprzętowe związane z obsługą tego żądania, ponadto w określonych przez twórców systemu operacyjnego momentach (na przykład po upłynięciu jakieś arbitralnej wielkości czasu) następują przerwania systemowe, które również służą do wywłaszczenia procesu, dzięki czemu nie dochodzi do sytuacji, w której pewien proces jest "zagłodzony" i nie może wykonywać swojego kodu. W tym momencie możemy podać pewną, skrótową definicję czym jest przetwarzanie współbieżne :

Należy pamiętać, że śledzenie działania programu współbieżnego jest bardzo trudne, dlatego zapobieganie takim sytuacjom jak na przykład zagłodzenie procesu jest bardzo trudne. Z tego powodu powstał pewien model pamięciowy, który ułatwia obsługę współbieżności.