⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 segment.h

📁 The main purpose of this project is to add a new scheduling algorithm to GeekOS and to implement a s
💻 H
字号:
/* * General data structures and routines for segmentation * Copyright (c) 2001, David H. Hovemeyer <daveho@cs.umd.edu> * $Revision: 1.13 $ *  * This is free software.  You are permitted to use, * redistribute, and modify it as specified in the file "COPYING". *//* * Source: _Protected Mode Software Architecture_ by Tom Shanley, * ISBN 020155447X. */#ifndef GEEKOS_SEGMENT_H#define GEEKOS_SEGMENT_H#include <geekos/ktypes.h>struct TSS;#if __TINYC__#define PACKED#else#define PACKED __attribute__((packed))#endif/* * The general format of a segment descriptor. */struct Segment_Descriptor {    ushort_t sizeLow        PACKED ;    uint_t baseLow     : 24 PACKED ;    uint_t type        : 4  PACKED ;    uint_t system      : 1  PACKED ;    uint_t dpl         : 2  PACKED ;    uint_t present     : 1  PACKED ;    uint_t sizeHigh    : 4  PACKED ;    uint_t avail       : 1  PACKED ;    uint_t reserved    : 1  PACKED ;  /* set to zero */    uint_t dbBit       : 1  PACKED ;    uint_t granularity : 1  PACKED ;    uchar_t baseHigh        PACKED ;};/** * Construct a segment selector. * @param rpl requestor privilege level; should be KERNEL_PRIVILEGE *    for kernel segments and USER_PRIVILEGE for user segments * @param segmentIsInGDT true if the referenced segment descriptor *    is defined in the GDT, false if it is defined in the LDT * @param index index of the segment descriptor * @return the segment selector */static __inline__ ushort_t Selector(int rpl, bool segmentIsInGDT, int index){    ushort_t selector = 0;    selector = (rpl & 0x3) | ((segmentIsInGDT ? 0 : 1) << 2) | ((index & 0x1FFF) << 3);    return selector;}/* * Routines to initialize segment descriptors. * Code and data segments must start on a page-aligned address * and are sized in pages. */void Init_Null_Segment_Descriptor(struct Segment_Descriptor* desc);void Init_Code_Segment_Descriptor(    struct Segment_Descriptor* desc,    ulong_t baseAddr,    ulong_t numPages,    int privilegeLevel);void Init_Data_Segment_Descriptor(    struct Segment_Descriptor* desc,    ulong_t baseAddr,    ulong_t numPages,    int privilegeLevel);void Init_TSS_Descriptor(struct Segment_Descriptor* desc, struct TSS* theTSS);void Init_LDT_Descriptor(    struct Segment_Descriptor* desc,    struct Segment_Descriptor theLDT[],    int numEntries);#endif  /* GEEKOS_SEGMENT_H */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -