[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: mint-aware HD driver



>Hello,
>
>I was thinking about the problems with interrupt driven HD drivers,
>that cause mint not to block while doing disk access.
>One problem is that we would need a kind of semaphore for the dma hardware
>as it has to be locked against duplicate accesses at the same time.

All you need is the driver in two parts, the lower part being an interrupt
based hardware driver (one for each I/O bus device, ie floppy, ACSI and
SCSI) which picks up requests (which included a pointer to a buffer) from a
queue and passes back "done" messages. The upper determines the device,
places a request on the queue, puts the process on the I/O pending queue and
returns. At each context switch interrupt the status of the pending I/O
buffers is checked to see if any are ready. Any buffers which are ready are
copied into the process' address space (if necessary) and the process is put
on the end of the run queue.

How's that?

>As we have already one variable to do this, namely _flock, one could
>use this in all kind of software that accesses the dma hardware; or is
>it better to introduce a new semaphore, maybe separate ones for acsi and
>scsi? But then all existing software for HD would have to be changed to use
>it correctly.

Methinks this will have to be done anyway, the current ones busy idle as far
as I can tell.

>What do you think about it?
>
>Regards,
>Ulrich
>
>+---------------+----------------------------+-------------------------+
>| Ulrich Kuehn  | Internet:                  | Do they know that they  |
>| Cand.Math.Inf | kuhnu@math.uni-muenster.de | cannot eat their money? |
>+---------------+----------------------------+-------------------------+

Steve

-- 
---------------------------------------------------------------------------
Computer Systems Administrator, Dept. of Earth Sciences, Oxford University.
E-Mail: steve@uk.ac.ox.earth (JANET) steve@earth.ox.ac.uk (Internet).
Tel:- Oxford (0865) 282110 (UK) or +44 865 282110 (International).