With each descriptor, there is a type field which is used to distinguish between the different descriptor formats. This field also specifies the intended use of a segment. For example, the allowable types for data segments are:
and for code segments:
The type field, therefore, ensures that segments are only used in ways for which they are intended. For example:
So far this discussion applies to segment level checking. When paging is enabled, there is also checking done at the page level. Pages may be of two types:
Segment protection is evaluated first, then page protection is checked. It is possible to have a large segment which is both readable and writable and to have pages within it which are only readable. At the page level, the execute-only attribute does not exist.