2010-08-07 4 views
1

Im проектирование RTOS, которое использует приоритетный планировщик с приоритетом. Что будет содержать ПХД? Ive только был в состоянии придумать с этими элементамиКакой блок управления процессом для ОСРВ?

1) PID 2) Приоритет 3) Программа счетчик 4) Статус регистрирует 5) Некоторые флаги

Должен ли я также включать в себя срок? Или любой другой поля

+0

Большой блок байтов, обозначенный для использования в будущем. Указатели на предыдущую/следующую печатную плату. – dbasnett

ответ

0

Это несколько зависит от архитектуры, для которой вы это пишете.

Вам нужны все регистры [1], а не только регистры состояния.

Указатель стека. Возможно, размер стека.

маска прерывания состояние

Если ваша операционная система поддерживает с плавающей точкой и ваш процессор имеет блок с плавающей запятой, не забудьте сохранить эти регистры также.

[1] Если вы не пишете это для чего-то вроде ARM, у которого есть несколько банков регистров. В этом случае вам нужно сохранить банк, используемый при нормальной работе.

0

Полный набор регистров часто сохраняется в стеке потока, что означает, что для хранения счетчика программ, регистров статуса и любых других регистров, которые необходимо переключать по контексту, может быть все, что вам нужно.

Вот реальный пример УТС/PCB от RTOS я открытым кодом несколько месяцев назад (Atomthreads):

typedef struct atom_tcb 
{ 
    /* Thread's current stack pointer */ 
    POINTER sp_save_ptr; 

    /* Thread priority (0-255) */ 
    uint8_t priority; 

    /* Thread entry point and parameter */ 
    void (*entry_point)(uint32_t); 
    uint32_t entry_param; 

    /* Queue pointers */ 
    struct atom_tcb *prev_tcb; /* Previous TCB in doubly-linked TCB list */ 
    struct atom_tcb *next_tcb; /* Next TCB in doubly-linked list */ 

    /* Suspension data */ 
    uint8_t suspended;   /* TRUE if task is currently suspended */ 
    uint8_t suspend_wake_status; /* Status returned to woken suspend calls */ 
    ATOM_TIMER *suspend_timo_cb; /* Callback registered for suspension timeouts */ 

} ATOM_TCB; 

Помимо указателя стека, ключевые элементы, которые я должен был следующим:

  • Приоритет
  • связный список указателей: Чтобы управлять потоками в очередь готовых для простой очереди-ба sed или очереди обработки потоков, ожидающих на определенном семафоре и т. д.
  • Состояние приостановки: для обработки таких действий, как ожидающие действия на семафоре. Они используются для регистрации функции обратного вызова, которая будет вызываться, если время ожидания приостановки (которое может быть обработчиком тайм-аута в библиотеке очереди, например) и передать коды статуса обратно в пробужденную нить.

Это не единственный способ сделать это. Вы обнаружите, что ваши собственные конкретные требования становятся ясными, когда вы указываете дизайн RTOS и реализуете различные примитивы ОС (семафоры, очереди и т. Д.).