[ DESKRIPTOR SEGMENTU ]                    

     Tak tady se nachází takové povídání o deskriptorech. Jazyková lekce z
     angličtiny - co je to DESCRIPTion? Ano, správně, je to POPIS. A to je
     vlastně  význam  deskriptorů  -  popisují  určitou  oblast  paměti...
     Popisují  segmenty.  Když jsem říkal, že neexistují segmenty, jaké je
     znáte,  měl jsem na mysli tohle. Něco jako segment tu je, ale může to
     začínat kdekoliv a může to mít délku jinou než 64 kB. A tyhle všechny
     informace jsou nacpány v deskriptoru. Teď jde jenom o to, jak...

     Deskriptor  je  osmibajtová  datová  struktura.  Existují  tyto  typy
     deskriptorů:

     -  segmentové  deskriptory  -  tyto  deskriptory  definují velikost a
     umístění datového nebo kódového segmentu v paměti. Existují dva druhy
     - Code Segment Descriptor a Data Segment Descriptor.

     -  deskriptory  systémových  datových  segmentů  -  tyto  deskriptory
     definují   velikost   a   umístění   systémových   datových  struktur
     používaných pro řízení multitaskingu. Existují dva druhy - Task State
     Segment Descriptor a Local Descriptor Table Descriptor.

     - deskriptory předávání řízení - tyto deskriptory definují mechanismy
     předávání  řízení  mezi  code  segmenty  a  úlohami  a  vstupní  body
     procedur. Existují čtyři druhy - Call Gate, Task Gate, Interrupt Gate
     a Trap Gate.


     Nakreslená struktura deskriptoru segmentu vypadá asi takhle:


       +-15--14--13--12--11--10--9---8-+-7-+-6-+-5-+-4-+-3---2---1---0-+
     7 |        BASE (bity 31-24)      | G | D | 0 | U | LIMIT (19-16) | 6
       +---+-------+---+---+---+---+---+---+---+---+---+---------------+
     5 | P |  DPL  | S | E |D/W|C/R| A |         BASE (bity 23-16)     | 4
       +---+-------+---+---+---+---+---+-------------------------------+
     3 |                        BASE (bity 15-0)                       | 2
       +---------------------------------------------------------------+
     1 |                       LIMIT (bity 15-0)                       | 0
       +---------------------------------------------------------------+

     BASE             Bázová adresa segmentu (na které adrese bude
                      vlastně 'segment' začínat)
     LIMIT            Velikost segmentu (doporučuju okamžitě kouknout
                      na bit G - Granular!!)

     [Velikosti  bázové  adresy a limitu (velikosti) segmentu jsou popsány
     trochu dál v tomhle článku]


     --------------------------------------------------------------------
     Bit    Jméno      Popis
     --------------------------------------------------------------------
      G   Granular    0 - velikost segmentu je rovna poli LIMIT.
                      1 - velikost segmentu je rovna LIMIT * 4096

      D   Default     0 - segment je 16bitový
                      1 - segment je 32bitový

      U   User        Volné pro libovolné použití
     --------------------------------------------------------------------
      P   Present     0 - segment určený deskriptorem není ve fyzické
                          paměti.
                      1 - segment je ve fyzické paměti určen poli BASE
                          a LIMIT.

     DPL  Descriptor  Úroveň privilegií nutná k jakékoli operaci se
          Privilege   segmentem popsaným v deskriptoru (0-3). Označuje
          Level       se DPL.


      S   Segment     0 - deskriptor nepopisuje segment paměti
          Descriptor  1 - deskriptor popisuje code nebo data segment
     --------------------------------------------------------------------
                   (Pouze pro deskriptor datového segmentu)

      E   Executable  0 - deskriptor popisuje data segment

      D   Expansion   0 - segment roste nahoru (data), offset ≤ limit
          Direction   1 - segment roste dolů (stack), offset > limit

      W   Writeable   0 - do segmentu nelze zapisovat
                      1 - do segmentu je možné zapisovat
     --------------------------------------------------------------------
                   (Pouze pro deskriptor kódového segmentu)

      E   Executable  1 - deskriptor popisuje code segment

      C   Conforming  0 - do kódu lze skočit jen s privilegii DPL
                      1 - do kódu lze skočit s privilegii nejméně DPL

      R   Readable    0 - ze segmentu nelze číst
                      1 - ze segmentu je možné číst
     --------------------------------------------------------------------
      A   Accessed    0 - se segmentem nebylo operováno
                      1 - selektor segmentu byl použit
    ----------------------------------------------------------------------


            výheň