Podstawy systemów operacyjnych i systemów grafiki komputerowej.
System operacyjny (SO). Przeznaczenie, budowa i podstawowe funkcje. Podział zadań SO pomiędzy sprzęt i oprogramowanie.
System operacyjny jest programem, który działa jako pośrednik między użytkownikiem komputera a sprzętem komputerowym. Zadaniem systemu operacyjnego jest tworzenie środowiska, w którym użytkownik może wykonywać programy w wygodny i wydajny sposób.
Budowa systemu operacyjnego:
Przyjęto podział na trzy główne elementy budowy systemu operacyjnego:
jądro systemu wykonywujące w/w zadania
powłoka - specjalny program komunikujący użytkownika z systemem operacyjnym
system plików - sposób zapisu struktury danych na nośniku.
Jądro systemu operacyjnego (ang. kernel) - to jego podstawowa część, która jest odpowiedzialna za wszystkie jego zadania.
Powłoka systemowa - (ang. shell) to program komputerowy pełniący rolę pośrednika pomiędzy systemem operacyjnym lub aplikacjami a użytkownikiem, przyjmując jego polecenia i "wyprowadzając" wyniki działania programów. Owo pośrednictwo nie jest obowiązkowe (programy mogą chcieć być bardziej "samodzielne"). Wyróżniamy powłoki tekstowe np.:
bash - Bourne Again Shell (znów powłoka Bourne'a)
ksh - Korn Shell
command.com - procesor poleceń systemu DOS
oraz graficzne, takie jak np.:
finder - powłoka systemu Mac OS
explorer - powłoka systemu Microsoft Windows.
Powłoka często sama zawiera podstawowe polecenia, gdy jednak wydane przez użytkownika polecenie nie jest wbudowane, uruchamiany jest program zewnętrzny. Po zalogowaniu użytkownik znajduje się w linii poleceń i może wydawać polecenia systemowi. Zachęca go do tego tzw, znak zachęty (shell prompt). Zwykle znak '>', '$' lub '#'.
System plików - metoda przedstawienia logicznej struktury danych (pliki, katalogi/foldery) na fizycznym medium, zwanym też nośnikiem danych (w postaci ciągu zer i jedynek).
STRUKTURY SYSTEMÓW OPERACYJNYCH
Struktura monolityczna - system operacyjny traktowany jako zbiór procedur, przy czym każda z nich może wywoływać drugą; poszczególne procedury muszą mieć bardzo dobre złącza (ang. interface). W celu stworzenia konkretnej wersji systemu operacyjnego należy skompilować odpowiedni zbiór procedur.
Struktura warstwowa - system zbudowany jest z kilku poziomów, co zapewnia jego modularność. Każdy poziom składa się ze zbioru procedur i danych, które mogą być wywoływane z poziomu wyższego. Poziom najniższy - sprzęt, najwyższy - interface z użytkownikiem. W każdym systemie operacyjnym poziomy mogą być różne.
W systemach operacyjnych o strukturze warstwowej wyodrębniona jest część realizująca najbardziej podstawowe funkcje systemu operacyjnego, tzw. jądro systemu lub warstwa wewnętrzna. Pozostała część systemu to warstwa zewnętrzna. Podział taki nie jest jednoznacznie określony dla wszystkich systemów.
W jądrze systemu implementuje się wszystkie funkcje, które muszą być traktowane w sposób uprzywilejowany. Jądro odpowiada m.in. za: obsługę przerwań, przydział procesora, operacje wej/wyj. Ponadto w jądrze systemu są implementowane mechanizmy, które tworzą wspomnianą już maszynę wirtualną.
Warstwa zewnętrzna obejmuje procesy użytkowników (można przyjąć, że są to po prostu programy) i moduły systemu operacyjnego nienależące do jądra systemu. Jednym z procesów warstwy zewnętrznej jest POWŁOKA (ang. shell). Powłoka jest jedyną widoczną częścią maszyny wirtualnej.
Funkcje systemowe (ang. system calls) stanowią maszynę wirtualną, ich wywołania są poleceniami dla jądra systemu, np. zainicjowanie nowego procesu, otwarcie pliku. Funkcje systemowe dzielą się na: funkcje systemowe dotyczące procesów i funkcje systemowe dotyczące sytemu plików. Zwykłe polecenia użytkowników są poleceniami dla programu powłoki.
3. Struktura klient - serwer - model związany z rozproszonymi systemami operacyjnymi. Rozróżniamy sieciowe i rozproszone systemy operacyjne - w systemach sieciowych klient/użytkownik musi znać adres pliku, z którym chce pracować, który chce wywoływać, w systemach rozproszonych użytkownik pracuje jak na własnym pececie. Podstawową zasadą działania w tej strukturze jest przesyłanie maksymalnej ilości kodu na wyższe poziomy, pozostawiając minimalne jądro.
Zadania systemu operacyjnego:
zarządzanie zasobami komputera, m.in.: procesorem (a dokładniej czasem procesora), pamięcią, urządzeniami peryferyjnymi oraz przydzielanie zasobów procesom,
koordynacja pracy w/w urządzeń poprzez obsługę przerwań oraz odpowiednie na nie reagowanie,
ochrona danych i pamięci - tak aby jeden proces, w wyniku błędu lub zamierzonego działania nie mógł zniszczyć lub pozyskać danych innego procesu,
automatyzacja najczęściej wykonywanych funkcji
ukrywanie skomplikowania sprzętu komputerowego przez tworzenie abstrakcji, np.
zbiory zapisanych klastrów na dysku widziane są jako pliki o symbolicznych nazwach
abstrakcja równoległości wykonywania programów
jednolity sposób dostępu do urządzeń
System operacyjny jest ładowany do pamięci na początku pracy komputera. Program ten ma bardzo specyficzny charakter: w przeciwieństwie do programów użytkowych (aplikacji) nie korzysta z żadnych gotowych funkcji, tylko sam je udostępnia, a więc od niego zależą rzeczywiste możliwości wykorzystania sprzętu komputerowego.
Procesy w systemie komputerowym: Pojęcie procesu, proces a program, podobieństwa i różnice procesów i wątków. Wyższy i niższy poziom planowania procesów w SO (planowanie długo- i krótkoterminowe) - pojęcie i zasady ogólne. Rola i przykłady kolejek w systemie operacyjnym. Blokada procesów; sytuacje sprzyjające blokadom i sposoby zapobiegania; przykłady blokady.
Pojęcie procesu, proces a program:
Proces: mówiąc nieformalnie, proces jest wykonywanym programem. Wykonanie procesu musi przebiegać w sposób sekwencyjny. Oznacza to, że w dowolnej chwili na zamówienie danego procesu może być wykonywany, co najwyżej jeden rozkaz kodu programu. Podkreślamy, że sam program nie jest procesem.
Program jest obiektem pasywnym, tak jak zawartość pliku na dysku. Proces zaś jest obiektem aktywnym, z licznikiem rozkazów określających następny rozkaz do wykonania i ze zbiorem przydzielonych mu zasobów. Procesy możemy wyświetlić za pomocą polecenia ps. Każdy proces otrzymuje unikatowy numer, tzw. PID (ID Procesu). Dzięki temu proces jest odróżnialny od innych.
Chociaż dwa procesy mogą być związane z jednym programem, będą one zawsze traktowane jako dwie oddzielne sekwencje wykonania. Na przykład wielu użytkowników może korzystać z działania kopii programu pocztowego lub jeden użytkownik może zapoczątkować pracę wielu kopii edytora. W każdym z tych przypadków mamy do czynienia z osobnymi procesami, które - niezależnie od równoważności sekcji tekstu - będą się różniły sekcjami danych.
Proces składa się z:
kodu programu (sekcji tekstu)
odpowiedniego ustawienia licznika rozkazów
zawartości rejestrów procesora
stosu procesu z danymi tymczasowymi (parametrami procedur, adresami powrotnymi)
sekcji danych ze zmiennymi globalnymi
Podobieństwa i różnice procesów i wątków.
Wątek (ang. thread), nazywany niekiedy procesem lekkim (ang. lightweight process - LWP), jest podstawową jednostką wykorzystania procesora
Wątek:
Jednostka, dla której system przydziela czas procesora,
Kontekst wątku składa się z: licznika rozkazów, stanu rejestrów, stosu (ale nie sterty!),
Każdy proces ma co najmniej jeden wątek
Podobieństwa wątków i procesów:
mogą znajdować się w jednym z kilku stanów: gotowości, zablokowania, aktywności lub kończenia.
użytkują wspólnie jednostkę centralną i w danej chwili tylko jeden wątek/proces jest aktywny (wykonywany).
Wykonanie wątku w procesie przebiega sekwencyjnie, a każdy wątek ma własny stos i licznik rozkazów.
mogą tworzyć wątki/procesy potomne i mogą blokować się do czasu zakończenia wywołań systemowych.
Jeśli jeden wątek.proces jest zablokowany, to może działać inny wątek/proces.
Związek pomiędzy procesami a wątkami:
Proces nie wykonuje kodu, proces jest obiektem dostarczającym wątkowi przestrzeni adresowej,
Kod zawarty w przestrzeni adresowej procesu jest wykonywany przez wątek,
Pierwszy wątek procesu tworzony jest implicite przez system operacyjny, każdy następny musi być utworzony explicite,
Wszystkie wątki tego samego procesu dzielą wirtualną przestrzeń adresową i mają dostęp do tych samych zmiennych globalnych i zasobów systemowych.
Wyższy i niższy poziom planowania procesów w SO (planowanie długo- i krótkoterminowe) - pojęcie i zasady ogólne:
Proces wędruje między różnymi kolejkami przez cały czas swego istnienia. W celu planowania działań system operacyjny musi w jakiś sposób wybierać procesy z tych kolejek. Selekcji dokonuje odpowiedni proces systemowy zwany planistą (programem szeregującym; ang. scheduler).
W systemie wsadowym często występuje więcej procesów niż można by ich natychmiast wykonać. Procesy te są przechowywane w urządzeniach pamięci masowej (zazwyczaj na dyskach), gdzie oczekują na późniejsze wykonanie.
Planista długoterminowy (ang. long-term scheduler), nazywany też plani-stązadań (ang.job scheduler), wybiera procesy z tej puli i ładuje je do pamięci w celu wykonania.
Planista krótkoterminowy (ang. short-term scheduler), czyli planista przydziału procesora (ang. CPU scheduler), wybiera jeden proces spośród procesów gotowych do wykonania i przydziela mu procesor.
Podstawową różnicą między obydwoma planistami jest częstość ich uaktywnień.
Planista krótkoterminowy musi bardzo często wybierać nowy proces dla procesora. Proces może działać zaledwie kilka milisekund, a potem przejść w stan oczekiwania, wydawszy zamówienie na operację wejścia--wyjścia. Często planista krótkoterminowy podejmuje działanie co najmniej raz na każde 100 ms. Ze względu na krótkie odcinki czasu między kolejnymi wykonaniami planista krótkoterminowy musi być bardzo szybki. Jeśli decyzja o wykonaniu procesu przez 100 ms zabiera 10 ms, to 10/(100 + 10) = 9% pracy procesora jest zużywane (marnowane) na samo zaplanowanie działania.
Natomiast planista długoterminowy działa o wiele rzadziej. Między utworzeniem nowych procesów w systemie mogą upływać minuty. Planista długoterminowy nadzoruje stopień wieloprogramowości, tj. liczbę procesów w pamięci. Jeśli stopień wieloprogramowości jest stabilny, to średnia liczba utworzonych procesów musi się równać średniej liczbie procesów usuwanych z systemu. Toteż planista długoterminowy może być wywoływany tylko wtedy, gdy jakiś proces opuszcza system. Wskutek dłuższych przerw między wykonaniami planista długoterminowy może mieć więcej czasu na rozstrzyganie, który proces należy wybrać do wykonania.
Planowanie długoterminowe polega na wyborze procesów do wykonania i załadowaniu ich do pamięci. Stosowane jest przede wszystkim w systemach wsadowych do nadzorowania stopnia wieloprogramowości. W systemach wielozadaniowych (z podziałem czasu) w zasadzie nie jest stosowane.
Planowanie krótkoterminowe polega na wyborze jednego procesu z kolejki procesów gotowych do wykonania i przydzieleniu mu dostępu do procesora. Ten typ planowania dominuje w systemach z podziałem czasu, takich jak Unix, Linux, Windows NT.
Blokada procesów; sytuacje sprzyjające blokadom i sposoby zapobiegania; przykład blokady:
W środowisku wieloprogramowym kilka procesów może rywalizować o skończoną liczbę zasobów. Proces zamawia zasoby i jeśli nie są one dostępne w danym czasie, wchodzi w stan oczekiwania. Może się zdarzyć, że oczekujące procesy nigdy już nie zmienią swego stanu, ponieważ zamawiane przez nie zasoby są przetrzymywane przez inne procesy. Sytuację taką nazywa się blokadą (zakleszczeniem) (ang. deadlock).
O zjawisku blokady (zakleszczeniu) mówimy, gdy w zbiorze procesów każdy proces oczekuje na zdarzenie, które może być spowodowane tylko przez inny proces z tego zbioru (zdarzenia, z którymi mamy najczęściej do czynienia to przydział i zwalnianie zasobów).
Do blokady (zakleszczeń) może dochodzić wtedy, kiedy w systemie zachodzą jednocześnie cztery warunki:
Wzajemne wykluczanie: Przynajmniej jeden zasób musi być niepodzielny; to znaczy, że zasobu tego może używać w danym czasie tylko jeden proces. Jeśli inny proces zamawia dany zasób, to musi być opóźniany do czasu, aż zasób zostanie zwolniony.
Przetrzymywanie i oczekiwanie: Musi istnieć proces, któremu przydzielono co najmniej jeden zasób i który oczekuje na przydział dodatkowego zasobu, przetrzymywanego właśnie przez inny proces.
Brak wywłaszczeń: Zasoby nie podlegają wywłaszczaniu, co oznacza, że zasób może zostać zwolniony tylko z inicjatywy przetrzymującego go procesu, po zakończeniu pracy tego procesu.
Czekanie cykliczne: Musi istnieć zbiór {Po, P1,..., Pn} czekających procesów, takich że P0 czeka, na zasób przetrzymywany przez proces P1,P1 czeka na zasób przetrzymywany przez proces P2..., Pn - i czeka na zasób przetrzymywany przez proces Pn a Pn czeka na zasób przetrzymywany przez proces P0..
Metody postępowania z zakleszczeniami.
można stosować protokół gwarantujący że system nigdy nie wejdzie w stan zakleszczenia-aby zapewnić że zakleszczenie nigdy się nie pojawi system może stosować metody zapobiegawcze lub schemat unikania zakleszczeń przez zapobieganie zakleszczenia rozumie się zbiór metod zapewniających że co najmniej jeden z warunków koniecznych do wystąpienia zakleszczenia nie będzie spełniony. Metody te zapobiegają zakleszczeniu przez nakładanie ograniczeń na sposób zamawiania zasobów.
Pozwala się systemowi na zakleszczenia a potem podejmuje się działania zmierzające do ich usunięcia.- jeżeli system nie korzysta z algorytmu zapobiegania zakleszczeniu ani z algorytmu ich unikania to zakleszczenie może się pojawić. W takich warunkach system powinien umożliwiać wykonanie algorytmu, który sprawdzi czy doszło do zakleszczenia, oraz algorytmu likwidowania zakleszczenia.
Można też zlekceważyć ten problem zupełnie uważając, że zakleszczenia nigdy się nie pojawiają w systemie. Takie rozwiązania stosuje się w większości systemów m.in. w systemie UNIX. Unikanie zakleszczeń wymaga, aby system operacyjny dysponował dodatkowymi informacjami o zasobach, które proces będzie zamawiał i używał podczas swojego działania. Proces może wtedy rozstrzygać dla każdego zamówienia, czy proces powinien zaczekać, czy nie. Każde zamówienie wymaga, aby system podejmując decyzję o tym czy można je realizować czy też należy je odłożyć wziął pod uwagę dostępne zasoby, zasoby w danej chwili przydzielane do procesów i oraz przyszłe zamówienia i zwolnienia zasobów w odniesieniu do każdego procesu.
Pamięć wirtualna. Cel zastosowania, niezbędne wyposażenie sprzętowe i ogólny algorytm działania.
Pamięć wirtualna, wirtualna przestrzeń adresowa (angielskie virtual memory, virtual address space), zbiór jednolicie adresowanych elementów pamięci oddawany do użytku w programach przez systemy pamięci wirtualnej. Pamięć wirtualna może przekraczać rozmiary fizycznej pamięci operacyjnej, gdyż jest implementowana z użyciem pamięci zewnętrznej (dyskowej), z zastosowaniem sprzętowego stronicowania i algorytmów stronicowania na żądanie, zastępowania stron i stronicowania wstępnego.
Czas działania programów wykonywanych w systemach pamięci wirtualnej może zależeć od programowego sposobu organizacji danych oraz zmieniać się od wykonania do wykonania, toteż pamięci wirtualnej nie stosuje się w systemach czasu rzeczywistego.
Poza tymi wyjątkami pamięć wirtualna jest wielkim udogodnieniem programowania, gdyż zdejmuje z osób programujących ostre ograniczenia na ilość dostępnej pamięci i uwalnia je od niejednolitego zarządzania pamięciami fizycznymi w aplikacjach.
Pamięć wirtualna jest najczęściej implementowana w formie stronicowania na żądanie (ang. demand paging). Można ją także zrealizować w systemie segmentacji.
Metody rzutowania w przestrzeni 3D, podstawowe operacje.
.
Rysunek 1Punkt w przestrzenii trójwymiarowej
Do opisu punktu w przestrzeni należy użyć trzech współrzędnych P(x,y,z). Oznaczenie osi w modelu 3D jest sprawą umowną, jednak zapominając na chwilę o trzecim wymiarze, od razu widać, iż najbardziej naturalne będzie opisanie ekranu monitora osiami X i Y. Gdy uzmysłowimy sobie ten fakt oczywistym staje się zastosowanie osi Z do określenia odległości między obserwatorem (powierzchnią ekranu) a obiektem w przestrzeni 3D. Dodatkowo należy zwrócić uwagę, że można zastosować dwa typy układu współrzędnych, w jednym współrzędne z będą rosły w głąb monitora, natomiast w innym podejściu będą przybierały coraz to mniejsze wartości. Pierwszy typ układu nazywany jest często lewoskrętnym i jego będziemy używać. Poniżej podane są postaci macierzy opisujących odpowiednie operacje w przestrzenie 3D.
Macierzowe równania opisujące operacje obrotów.
Macierz rotacji wokół osi X:
Macierz rotacji wokół osi Y:
Macierz rotacji wokół osi Z:
Metody reprezentacji krzywych, powierzchni i reprezentacji brył.
Modele barw.
Model barw HSV:
Model ten nawiązuje do sposobu widzenia przez człowieka, gdzie wszelkie barwy to światło pochodzące z oświetlenia. Model ten często jest określany jako model barw dla artystów. Wszystkie barwy wywodzą się z konkretnego światła bieli. Model praktycznego zastosowania raczej nie ma poza twórcami artystami. (Zajrzyj też do: Transformacja modeli HSV i RGB).
Symbole w nazwie modelu to pierwsze litery nazw angielskich dla składowych opisu barwy. Model jest rozpatrywany jako stożek o podstawie okrągłej. Wymiary stożka opisuje składowa S (Saturation) oraz składowa V (Value) równoważna nazwie B (Brightness).
Bryłę stożka rozpatruje się dla danych S,V. Dla innych S,V stożek będzie miał inne proporcje kształtu. Ogólne przyporządkowanie częstotliwości fal świetlnych jest analogiczne jak w modelach HLS lub HSI, to znaczy: centrum barwy czerwonej odpowiada kąt 0 stopni lub 360 stopni. Centrum barwy zielonej odpowiada kąt 120 stopni. Centrum barwy niebieskiej odpowiada kąt 240 stopni. Inne barwy pośrednie dla składowej Hue są liniowo odpowiednio rozłożone.
Składowa Value lub Brightness reprezentuje sobą poziom bieli, z której wywodzi się barwa. Parametr S=Saturation dotyczy proporcji składnika chromatycznego w całości barwy. Aby wyznaczyć intensywność składnika chromatycznego barwy wystarczy zatem wyznaczyć wartość: S*V. Dlatego, że składnik chromatyczny jest zawsze maksymalny w bieli, z której wywodzi się barwa. Z właściwości o maksymalnym składniku chromatycznym wynika, że nasycenie jest wtedy równe wartościowo intensywności tego składnika. Stąd proporcja intensywności składnika chromatycznego w barwie jest wyrażona przez S w granicach tego co jest możliwe, a więc składnik chromatyczny jaki jest możliwy to właśnie =S*V.
W granicy, wartość Saturation=0 oznacza, że nasycenie barwy wynosi zero i wtedy Hue nie jest określone, i wtedy mamy dany jakiś poziom bieli odpowiedni dla Value (lub Brightness), oraz stożek przeradza się w odcinek.
Model barw RGB:
RGB - jeden z modeli przestrzeni barw, składający się z zestawu trzech podstawowych barw będących barwami prostymi. Jest stosowany powszechnie w technice, np. w urządzeniach wyświetlających. Jest to model wynikający z właściwości odbiorczych ludzkiego oka, w którym wrażenie widzenia dowolnego koloru można wywołać przez zmieszanie w ustalonych proporcjach jedynie trzech wybranych wiązek światła o odpowiedniej częstotliwości fali elektromagnetycznej.
Zatem z połączenia barw RGB możemy otrzymać dowolne barwy pochodne, np. z połączenia barwy zielonej i czerwonej otrzymujemy barwę żółtą.
Skrót RGB powstał jako złożenie pierwszych liter angielskich nazw kolorów R - red (czerwony), G - green (zielony), B - blue (niebieski), z których model ten się składa. Zapis koloru jako RGB często stosuje się w informatyce (np. palety barw w plikach graficznych, w plikach html). Najczęściej stosowany jest 24-bitowy zapis kolorów, w którym każda z barw jest zapisana przy pomocy składowych, które przyjmują wartość z zakresu 0-255.
Ukierunkowany jest na sprzęt tworzący barwę w wyniku emisji światła: monitory, skanery, cyfrowe aparaty fotograficzne.
Jest on zwykle prezentowany jako fragment przestrzeni trzywymiarowej ograniczonej sześcianem o jednostkowym boku - jak na ilustracji (z dokładnością do permutacji współrzędnych).
Pojęciu barwy czarnej odpowiada punkt (0,0,0) to znaczy zerowa intensywność wszystkich składowych. Natomiast punkt (1,1,1) reprezentuje sobą biel. Odcinek (przekątna) od punktu (0,0,0) do punktu (1,1,1) reprezentuje sobą poziomy szarości od czerni do bieli. Inne punkty, ogólnie a*(r,g,b) jako wektory ze startem w punkcie (0,0,0), teoretycznie reprezentują różne nasilenie barwy, mówi się o różnej intensywności barwy i oczywiście w granicach jednostkowego sześcianu (o intensywności barw piszemy dalej). Model RGB definiuje w sposób jawny co to jest intensywność ale dla indywidualnych składowych R,G,B. Mianowicie wartości składowych RGB opisują intensywność indywidualnie danej barwy podstawowej jako liczba z przedziału od 0 do 1 i nie uzależniają tej wartości od dwu pozostałych składowych. Mówi się, że składowe RGB są ortogonalne, niezależne od siebie. Wartość składowej =0 oznacza zero intensywności barwy podstawowej. Wartość =1 oznacza pełną maksymalną intensywność.
Punkt postaci: (w,w,w) gdzie w=max(r,g,b). wyznacza sobą poziom bieli, w którym zawarte są wszystkie składowe punktu (r,g,b) lub ogólniej wszystkie ewentualne barwy składnikowe. Natomiast miejsce k=min(r,g,b), to znaczy punkt(k,k,k) przyjmuje się jako minimalny poziom jasności. Nazywa się go składnikiem niechromatycznym. Punkt (k,k,k) jest jednocześnie takim miejscem, z którego "wystające części" składowych odpowiadają barwie nazywanej składnikiem chromatycznym, co w języku potocznym niektórzy nazywają jako wrażenie inne niż czarno-białe albo jak niektórzy wolą "czystą barwą".
Model barw CMY:
Ukierunkowany jest na sprzęt drukujący: drukarki, maszyny drukarskie. Wrażenie barwy uzyskuje się dzięki światłu odbitemu od zadrukowanego podłoża. Pigment farb/atramentów pochłania określone długości fali, a odbija pozostałe. Dlatego farby druku C, M, Y nazywa się subtraktywnymi.
(c,m,y)=(1,1,1)-(r,g,b)
Składowe koloru powstałe z takiej różnicy nazwano literami: CMY, ponieważ z analizy tego modelu w naturalny sposób wynikają przyjęte barwy podstawowe i są one lokalizowane na osi długości fal mniej więcej pomiędzy barwami podstawowymi z modelu RGB. Są czasem nazywane barwami "subtraktywnymi" (z ang. subtract, odejmować). Ich nazwy własne to: Cyjan, Magenta i Yellow. Stąd współrzędne nazywają się CMY. Kolor Cyjan leży gdzieś pomiędzy niebieskim a zielonym, kolor Magenta (fiolet, okolice purpury) ma trochę czerwonego i niebieskiego, a kolor Yellow (żółty) leży pomiędzy zielenią a czerwienią.
Model barw CMYK:
Częściej od CMY stosowany jest CMYK, czyli model nie trzy, lecz czterokolorowy model z kolorem czarnym dodanym dodatkowo do "kolorowych" barw. Używa się go w poligrafii i ogólnie wszędzie tam, gdzie mamy do czynienia z farbami. Kolor czarny jest dodany dlatego, że trudno jest wytworzyć takie barwniki, które dadzą się wymieszać do idealnej czerni (choć "teoretycznie" nie powinno być problemu).
Model CMYK tym jeszcze różni się od RGB, że tworzenie barw farbami opiera się na absorpcji (farby pochłaniają "lubiane" przez siebie składowe światła białego, odbijając do nas resztę składowych, czyli to, co widzimy), podczas gdy plamki świetlne monitorów emitują kolory, jakie wynikają z ich właściwości fizykochemicznych.
Aby poprawić kolorystykę druku do atramentów C, M, Y dołączono atrament czarny K (blacK), który zastępuje (całkowicie lub częściowo) tą część atramentów C, M, Y, które w barwie CMY tworzą neutralną szarość.
Maksymalnie można więc dodać:
Kmx = {c, m, y}min
Podstawy systemów operacyjnych i systemów grafiki komputerowej
10
C = (1,0,0)
M = (0,1,0)
Y = (0,0,1)
R = (0,1,1)
G = (1,0,1)
B = (1,1,0)
czarna = (1,1,1)
biała = (0,0,0)
neutralna 50% szarość = (0.5, 0.5, 0.5)
0
1
1
1
Y
M
C
Barwa piksela = (c,m,y)