🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.asm
Article #153

Re: przełączanie

#153
From: Wiktor S.
Date: Mon, 06 Mar 2006 09:38
46 lines
3259 bytes
>> Oznacza to napisanie własnego mini-systemu operacyjnego, tylko że
>> kolega Michał nie powiedział, co to jest za środowisko DOSopodobne.
>> DOS czy tylko "podobne"? To może mieć duże znaczenie.

> Dziekuje wszystkim za pomysly, na pewno z nich skorzystam. System w
> zasadzie moge wybrac sam, choc profgram ma dzialac nawet na 386, i byl
> wolny (w sensie free). Poniewaz nie programowalem w Linuxie zbyt
> wiele, zwlaszcza w ASMie, wiec sklaniam sie ku FreeDOS'owi, gdyz DOSa
> i jego przerwania (zwlaszcza 21h :) ) dosc dobrze znam.

No to pora na uczenie się linuksowego 80h :-)

> Program bedzie obliczeniowy, wraz z prezentacja wynikow obliczen
> graficznie (zwykla VGA, ewentualnie jakis tryb VESA), i do tego sa mi
> potrzebne watki - jeden bedzie liczyc, drugi wyswietlac, a trzeci
> "interaktowac" z uzytkownikiem, gdyz liczenie i wyswietlanie maja byc
> niezalezne od wprowadzania nowych danych.

W takim razie można zrobić przełączanie na zegarze (niech będzie nawet 
"software'owe", czyli ręcznie): na zegarze przełączamy do kolejnego zadania 
(czyli trzy przełączają się w kółko).

Wątek interfejsu powinien sprawdzać, czy np. naciśnięto klawisz - jeśli nie, 
od razu niech się przełączy do następnego zadania.

Wątek wyświetlający niech wyświetli co tam ma, jak skończy - następne 
zadanie.

Wątek liczący sam z siebie nie będzie oddawał procesora, zostanie 
wywłaszczony dopiero na zegarze.

W ten sposób liczenie dostaje prawie cały czas procesora, a jednocześnie 18 
razy na sekundę będzie sprawdzane, czy użytkownik czegoś nie nacisnął, a 
ekran zostanie odświeżony (można też zrobić rysowanie np. co sekundę, jeśli 
tyle to za często).

Co do samego przełączania...

załóżmy, że jesteśmy w przerwaniu. Trzeba by zapisać wszystkie rejestry i 
flagi (najlepiej 32-bitowe, nawet w trybie rzeczywistym) do struktury 
bieżącego zadania. CS:(E)IP pobierz z adresu powrotu z przerwania. Wczytaj 
teraz rejestry ze struktury nowego zadania, zamieszaj na stosie (stosy też 
oddzielne) aby powrót był do nowego zadania, i zrób IRET.

-- 
Azarien
Technical Details
Message-ID: <dugvuf$qr1$1@news.onet.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!newsfeed.pionier.net.pl!newsfeed.silweb.pl!news.onet.pl!not-for-mail
References: <tiui02p9irebn6563c4us550otj6g97tbc@4ax.com> <duc2dg$f0t$1@nemesis.news.tpi.pl> <dudaju$tet$1@news.onet.pl> <due9p6$ikg$1@nemesis.news.tpi.pl> <dueesd$3q9$1@news.onet.pl> <qtjm02hvpfao2plfct27pgho42bk5a4h67@4ax.com>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!newsfeed.pionier.net.pl!newsfeed.silweb.pl!news.onet.pl!not-for-mail
From: "Wiktor S." <wswiktorSP@Mpoczta.fm>
Newsgroups: pl.comp.lang.asm
Subject: Re: przełączanie
Date: Mon, 6 Mar 2006 10:38:19 +0100
Organization: Onet.pl
Lines: 48
Message-ID: <dugvuf$qr1$1@news.onet.pl>
References: <tiui02p9irebn6563c4us550otj6g97tbc@4ax.com> <duc2dg$f0t$1@nemesis.news.tpi.pl> <dudaju$tet$1@news.onet.pl> <due9p6$ikg$1@nemesis.news.tpi.pl> <dueesd$3q9$1@news.onet.pl> <qtjm02hvpfao2plfct27pgho42bk5a4h67@4ax.com>
NNTP-Posting-Host: 155.168.wmc.com.pl
Mime-Version: 1.0
X-Trace: news.onet.pl 1141637903 27489 87.250.168.155 (6 Mar 2006 09:38:23 GMT)
X-Complaints-To: usenet@news.onet.pl
NNTP-Posting-Date: Mon, 6 Mar 2006 09:38:23 +0000 (UTC)
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2670
X-Sender: 63e3folRCjcGWUjNfLSN0w==
X-Newsreader: Microsoft Outlook Express 6.00.2900.2670
X-Priority: 3
X-MSMail-Priority: Normal
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit