|
2 / 2 / 0
Регистрация: 27.06.2008
Сообщений: 29
|
||||||
Планировщик процессов06.05.2009, 18:08. Показов 9199. Ответов 35
Метки нет (Все метки)
Написал планировщик процессов, но препод считает, что он написан коряво через одно место. Требует, что бы я убрал запрет/разрешение прерываний и процедур процессов. Но если это сделать, то программа повисает.
Как переделать мой планировщик, что бы он был написан не через *опу?))) Собственно задание: Написать простейший планировщик двух процессов, используя принудительное переключение и циклическую очередь.
0
|
||||||
| 06.05.2009, 18:08 | |
|
Ответы с готовыми решениями:
35
Простейший планировщик процессов [Оптимизация] Планировщик процессов Планировщик процессов |
|
2 / 2 / 0
Регистрация: 27.06.2008
Сообщений: 29
|
|||
| 11.05.2009, 12:06 [ТС] | |||
|
Evg
Собственно в теории и терминологии я полный ламер)))
Собственно поэтому во втором случае и нужны скобки.
0
|
|||
|
|
|||
| 11.05.2009, 12:18 | |||
|
И скажи, как и чем твою прогу скомпилять и запустить? Попробую по мелочи поэкспериментировать - А чем пацак отличается от чатланина? - Ты что, студент, зелёный от оранжевого отличить не можешь? Так и у тебя. Какая в пень разница, массив или не массив? Или это чисто требование синтаксиса ассемблера и не более того?
0
|
|||
|
2 / 2 / 0
Регистрация: 27.06.2008
Сообщений: 29
|
|||
| 11.05.2009, 15:07 [ТС] | |||
http://www.laryushkin.nm.ru/tasm.zip
0
|
|||
|
2 / 2 / 0
Регистрация: 27.06.2008
Сообщений: 29
|
|
| 11.05.2009, 19:15 [ТС] | |
|
Заходим в TD(Турбо Дебагер). От туда заходим в DOS SHELL.
Набираем: tasm <имя программы> tlink <имя программы> <имя программы> Программа запускается. Но программа должна быть сохранена с расширением asm. (Проще всего набрать в блокноте и сохранить с .asm)
0
|
|
|
|
||||||
| 11.05.2009, 19:44 | ||||||
|
Хм... у меня и твой вариант из 1-го поста не работает
Добавлено через 5 минут 22 секунды Для проверки влепил в начало Main код
Что вообще надо написать, чтобы хоть что-то хоть где-то на экране отобразилось?
0
|
||||||
|
2 / 2 / 0
Регистрация: 27.06.2008
Сообщений: 29
|
|
| 11.05.2009, 23:28 [ТС] | |
|
А вы из Дос шела запускали?
Turbo Debugger/File/DOS shell И оттудова линковать прогу, сохранённую с расширением asm. Должно выводить в самой нижней строке экрана буквы латинского алфавита. Файл в приложении.
0
|
|
|
2 / 2 / 0
Регистрация: 27.06.2008
Сообщений: 29
|
|
| 12.05.2009, 15:04 [ТС] | |
|
Заходим в папку tasm. Заходим в TD. Заходим в меню. Файл. DOS shell. и оттудова линкуем.
Из командной строки ничего не работает, так как расчитано вроде бы на чистую MS DOS.
0
|
|
|
2 / 2 / 0
Регистрация: 27.06.2008
Сообщений: 29
|
|
| 12.05.2009, 19:03 [ТС] | |
|
В сообщении 23 я прикрепил файл. Внутри паки есть все средства для линкования и Турбо Дебаггер. Кликаем по TD. Далее кликаем по File. Из Меню выбираем DOS shell. Появляется консоль на весь экран, и в ней необходимо сначала получить объектный файл(Набрать: tasm имя_проги), затем ехешник(Набрать: tkink имя_проги). Ну а потом в ней же запустить прогу, набрав её имя.
P.S. На всякий случай прикрепил изображение)))
0
|
|
|
|
||||||
| 12.05.2009, 20:58 | ||||||
|
Всё. Заработало.
Я так понимаю, что если что-то там зависнет, то это намертво и всё надо будет пускать по-новой? Добавлено через 5 минут 30 секунд Вопрос. В начало Main влепил код, кодорый содрал из Proc1
Добавлено через 2 минуты 27 секунд Последний вопрос снимаю. Сначала в ES надо загнать B800 Добавлено через 53 минуты 34 секунды Убрал cli и sti из Proc1. Похоже на то, что в первый раз в обработчик прерываний из Main залетели нормально. Настроились на первый процесс и на него ушли. После чего болтаемся в первом процессе и при этом больше в обработчик прерываний не залетаем. Если вернуть операцию sti, то всё отрабатывает нормально. Вывод такой - после обработки прерываний мы находимся в состоянии, при котором прерывания запрещены. Не может ли такой косяк быть следствием того, что в настоящий обработчик прерывания мы попадаем через jmp и при этом что-то где-то коряво восстанавливается при выходе из стандартного обработчика? И зачем нужно уходить на стандартный обработчик? ТОлько для того, чтобы вернуться в нужный нам процесс? Так может возврат самому написать?
1
|
||||||
|
2 / 2 / 0
Регистрация: 27.06.2008
Сообщений: 29
|
||||||
| 12.05.2009, 21:23 [ТС] | ||||||
|
Если делать возврат через iret, то во-первых, ничего не изменится(будет виснуть), во-вторых, по мнению препода это будет через одно место.
Выходит процедура обработки прерывания действительно запрещает прерывания при переходе на процесс. Если убрать cli из процедур, то всё будет работать нормально, но вот как обойтись без sti?
0
|
||||||
|
|
||||||
| 12.05.2009, 22:17 | ||||||
|
Чтобы понять, как обойтись без Sti, надо понять, почему после выхода из обработчика прерываний, сами прерывания остаются запрещёнными. Ты уверен в том, что подсунув через push 3 значения в стек, переключившись на стек и уйдя через jmp на стандартный обработчик прерываний, мы из него выйдем нормально?
И ещё, пока рыл в гугле, где-то встретил фразу про то, что надо перехватывать на прерывание 8, а 1c. Это было в самом начале поисков, пока я ещё не особо понимал, что такое прерывание 8. Если не ошибаюсь, вопрос там был такой, что кто-то пишет оболочку а-ля norton commander и ему нужно отображать в углу время. Есть соображения по этому поводу? Добавлено через 16 минут 50 секунд Проверил вариант без переключения стеков. Т.е. болтается процесс в цикле и при этом дёргаем обработчик прерываний. Возврат через jmp на стандартный обработчик работает нормально, прерывания при этом не блокируются. Значит косяк в манипуляциях со стеком Добавлено через 8 минут 37 секунд Когда мы делаем pushf, то среди флагов нет ли флага, означающего запрет прерывания? Добавлено через 6 минут 22 секунды http://sasm.narod.ru/apps/eflags/main.htm Флаг состояния содержит бит IF, отвечающий за разрешение прерываний. Находясь в обработчике он уже взведён в 0 (т.е. прерывания запрещены). Поэтому перед тем, как сделать pushf нам этот бит надо взвести в 1 (чтобы при восстановлении из обработчика всё стало нормально) Добавлено через 3 минуты 26 секунд В-общем заработало. Вместо pushf надо (в двух местах)
2
|
||||||
|
2 / 2 / 0
Регистрация: 27.06.2008
Сообщений: 29
|
|
| 13.05.2009, 15:48 [ТС] | |
|
Огромное спасибо!
![]() Я даже и подумать не мог, что дело всё было во флагах.
0
|
|
|
|
||
| 13.05.2009, 18:03 | ||
Сообщение было отмечено как решение
РешениеВначала я налепил отладочных печатей в разные места, благодаря которым понял, что из обработчика прерываний мы ушли в процесс, сам процесс работал, т.к. вывалилась печать, но второй раз в обработчик мы не попали. Из этого сделал вывод, что было заблокировано прерывание (пост #32) Дальше у меня возникло подозрение на предмет того, а правильно ли мы восстанавливаемся из обработчика. Я убрал все махинации со стеком и при начальном старте сразу же запускал один из процессов. Отладочная печать мне показала, что в обработчик по таймеру мы попадаем нормально. Отсюда следовало, что косяк был именно в махинациях со стеком. Из всех операций хоть как-то прерывания могло затронуть только работа с флагами. Порыл в гугле, увидел, что среди флагов есть бит запрета прерываний. Дальше всё стало очевидно (пост #34)
3
|
||
| 13.05.2009, 18:03 | |
|
Нахождение среди выполняющихся процессов имён процессов с наименьшим значением BasePriority
Нахождение среди выполняющихся процессов имён процессов, у которых значения параметра WorkingSet одинаковы Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман.
Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
|
|
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
|
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
|
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ
Основная суть и тезисы по измерениям:
0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема.
Объект не может перемещаться в 0D.
1D (Первое измерение):. . .
|
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek
ВВЕДЕНИЕ
Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
|