Цитата(Denisvak @ Aug 21 2007, 21:47)

применять какую либо готовую ОС не вижу смысла для подобной задачи...да просто хочется самому понять принцып.
Возьмите документацию и исходники какой-нибудь готовой ОС и попробуйте разобраться по ним - это будет продуктивнее, чем если кто-то будет пытаться изложить здесь всю теорию своими словами, к тому же будете иметь пример реализации перед глазами. Вот
тут перечислены некоторые небольшие ОС, с которых можно начать изучение.
Кратко примерно так: существует понятие "контекст задачи" - это содержимое всех регистров (включая указатель стека) на момент прерывания задачи. Каждая задача имеет свой собственный стек, где она размещает локальные переменные, адреса возвратов и т.д. При переключении задач контекст текущей задачи сохраняется на ее стеке, указатель стека переключается на стек следующей задачи и контекст восстанавливается из стека в регистры.
Поскольку переключение контекста обычно происходит в одной и той же точке - в процедуре смены контекста, то значение счетчика команд сохранять не нужно - оно уже автоматически сохранено на стеке текущего процесса при вызове этой функции.
P.S. А насчет применять готовую - весь вопрос в потраченном времени. Ведь ничто не мешает хорошо разобраться как работает готовое и применить его, если подходит. Плюсов три:
1) Вы сэкономите время на написании с нуля.
2) В готовом ошибки ищут все, кто пользует это готовое, а в вашем коде вы будете искать их водиночку.
3) Те, кто писали готовое имеют несколько больший опыт и могли учесть в своей реализации нюансы, о которых вы и не догадываетесь, но которые в неподходящий момент вам вылезут боком.