�������� � �������� ��������

�������� ������� (� ����������� ������������ ���������� ������������ ����� ����� �������������, �� ������ ������, �����������, �� ������� �������� �������� ����������� � state machine, �������� ����������� ��� ������ ���������) ������������ ����� ����������, ������� ���������� ������ (���������� ���������), � ����� ����� ������ � �������. ����� ���������� ������ � �������� ���������, ��� ������� �� ��������, �������. �������� � �������������� ������� ���������� ������ ���������� ������������ ����������, ������������ � ������������ ������ � ������������� ����������� (������� 1971].
������ ��������� ������������� ������������ ����������� ��������� � ��������, �������� � ����� ���� ����������� � ����� ��������� � ����������� �������������� ������� � ��������, ���������� �������� ������ � � ������� ������������ ����������, �������� ��� �������������� ������� ������ �� ���������� ����������� [������/���������/������ 2000].
������ �������� ������� � ���, ��� �� ����������� ��������� ����� ������, �, � ����������� �� �������� ������ � ������ ����������� ���������, �������� �������� ������� � ���������� ���������. �������, � �� ���������� � �������� ���������� ���������, ����������� �������� ��� ���������� ���������. ��������� ��������� ������������ ����� ����, ������� �������� ������������� ���������� ���������� ���������� ���������� ��������, � ����� � ���������� ��������� ����� ����. �������� ����� ��������� ������������: ������� �������� �� � � � �� ��������, ��� ���������� ������� �� � � �. ������� �������� � ����� ������������ ��������������� ����� �������, ������������ ���� ���� ������. ����� ���� ���������� ��������������� [������/���������/������ 2000]. ������� ��������� ����� ��������������� ��� ��������� ������������� ��������� ���������.
����-����� (���. 10.5) �������� ������� �������� ������������ ������ ��������� � ������������ ��� �������� ���������� � 60-� �����. ����� ��������, ������������� �� ���-������������ ���������� � �������� ������� ������ (� ����� ����� ��������� ���������� ��������), ����� ���� ������ ��� �������� ������� � ��������� � ���� ����-�����.
� �������� ��������� � ������������ ������ ���������� �������� ������, ���� ��������� ������ �������, ���� � ����� ��������� ����� (��������� ����) � ������� (������������ ��������� �����, ���������� � ����� � ��� �� �������). �������, ��� ��� �������� � ������, ���������� �����, ���������� ������������� ���������� � ���������� ������ �� �������� �����. ��� ��������, ������ �������������� ���������� ���������, ���� � ������ �� ������ ������� �������, � ����� ������ �������������� ����������� [������� 1971].
������������� � ��������� ������� ���������, ����������� ���� ����� ��������������� ��������� �������� ���������� �������� ����� �� ��-'�����. �������, ��� �� �������� ���������� ����� ������� ������� ������������. ����� ������� ������ ������ ����������� � �������� �������� �������. ��������� ����� ����� ��������� � ���������� ���������� �������� ������������ � ������ ���������, � ���� ��������� ���������� ������������ (���. 10.6), �� ��� ���������� �������� ���������� ���������� �����-���� �����������, ������� �� �������� ����� ���������� ����������� ����-�����, � ������� ��������� � ������� ���������� �������� ����� ������������ ��� ���� ���������.

���. 10.5. ����-����� ��������

������ ������ ��� ����������� ����-����� ��������� �������� ������ ������, ���� � �� ����� ���������� ���� ����� �� ������ � ��� ����������, ����� ������� ������������ ������ � ������ ���������, � ��� ����� � � ������ "�����" � ����� ������ ���������� ����. � [���� 2000) ���������� ������� ������ ������� ��� ��������� ������� ����������.
��������� �������� ����� ������� ����������� �������� (�������� ������������ ���������� ��������� �������� ������) ����� ���������� ����������� ����-�����. ������� ��� ��������� ������������� ������������ ��������� �� ��������� ������ � ����� ��������� ����������������� � ����������, �� ���-���� ������ �� ��� ���� ���������� ������������� � ���� ��������� �������� �����������.

���. 10.6. ������������� ������ � ����� ���������

� ������ �������, ��� ���� �������� ������� ���������� ������������ ������� ����������� ���������� � ��������� ������ ���������, ������� ����� ���� ������������ ����� ��������� ���������� ��������� ��� ������ ����� ����������. ����� �������� ������� ���������� � ����� ������������� �������: ����������� � �������������� ������� ����������-��������� � ������ ����� ����������-��������� ������ [������/ ���������/������ 2000 1, ���������� ������� ����������, ������� �������������� ���������������� (����/���� 2000] � ��. � ���������, ����� ������, ��� ����������� ���� �������� �������� ��������� ������ � ���� ��������� ����������.
��� �������� ������� � ���������� �������� ��������� � ��� ����������� (unrolled) ���������������� ������ ����. �������� ������������ ��������� �������� �������� ��� �������� ���� ������� 10.2. �������, ��� ������������� ��������� ������ �������� � ������ ������������� � �������� ��� ����������� � ���������� ����� ���������, � ���� � �������� ��������� ���������� �� �������, ��� ��������� �������� ������ ��� ����� �������, ��� �������� ��������� �������������� ���.
������� ������ ���� �������� ��������� �������, ��, ���������� ������������ ��� �����������, ����� ������������� ����� ��������� �� ����� ��� ����-����� �, ��������, ��������������� ���� ��������� �� ���� ���������. ������� ������������� �������� �������������� ��������� �������� �������� �������� �����������: ���� ���� ��������� �������� ��� ���� ����� �������� ��� ������ ��� �����, ������� ��������� ����������.
������� ���������� �������� ��������� ������ ���� �� ����������� ����� ���������������� ���������� �� ������ ��������� ���������������� �������� [������� 1982). ���� ����� ���������� ������� �� �����, �������� ������ �� �������� �������� ���������� ��������� ���������� ���������, � ������������ � ���� ����� ��������� ����������� �������� � ���������� ��������� � �������� ���������. �������� �������, ������� �� ��� ������������ ����������, �������� � ������� 10.4.

������ 10.4. �������� ������� �������� ����������� IDE/ATA ��� OS/2

VOID NEAR StartSM( NPACB npACB )
}
/* ------------------------------------------------ */
* �������� �������� ������������� ���*/
/* -------------------- */
/* ������� ����������� ��� ������� ��� / *
/* ------------------------------------------------ */
DISABLE
npACB->UseCount++;
iff npACB->UseCount == 1 )
{
do
{
ENABLE
do
{
npACB->Flags &= ~ACBF_WAITSTATE;
switch (npACB->State) {
case ACBS__START :
StartState(npACB);
break;
case ACBS_INTERRUPT:
InterruptState(npACB);
break;
case ACBS_DONE:
DoneState(npACB);
break;
case ACBS_SUSPEND:
SuspendState(npACB);
break;
case ACBS_RETRY:
RetryState(npACB);
break;
case ACBS_RESETCHECK:
ResetCheck(npACB);
break/case ACBS_ERROR:
ErrorState(npACB);
break;
while ( !(npACB->Flags & ACBF WAITSTATE) );
DISABLE
I
while ( � npACB->UseCount ) ;

�������� ������� �������� OS/2
�������� �� ��������, ������ 10.4 ��������� � ������������. ������! ������� startSM � ��� (Adapter Control Block � ���� ���������� ��������! ��� � OS/2 ���������� ���� ���������� ��������� ����������). ��� �������� ��������� �� ������� �������� IORB (Input/Output Request Block � ���� ������� �� ����/�����) � ��������� ���������� state, ������� ���������, � ���� ��������� ������ ��������� ��������� ������� ������� � �������. �� ���� ����� ��������� ������������, ����� ������� ������� �������. � ����� ��� �������, � ����������� �� ���������� ��������, ���������� ��������� ���������� �������� ���������� ��������� �, ��������, ����� ACB_WAITSTATE.
������� startSM (Start State Machine) ���������� ��� �� ������� �������� ��������, ��� � �� ����������� ����������. ������� ����� ������ � ���� ����� ������� � ����� ������ �� ���� ����� ���, ������������ ���� n���� >UseCount ��� �������� ����������, ����� �� ��������� �������������� ����� � ������� �� ����� ��������� ����� ����������. �������� ����� ��������, ��� ��������� ENABLEDISABLE (������ � ���������� ���������� �������� ������ � �������� ����������, �� �� ��� �������.
(� �������� ���������� �������� ������������ ������, ��� �� ������������� ����� ������� interruptstate, ���� �� ����� ���������� �������� ���� �������� ��� ��� ��������� � ���� ��������.
������ ����� �������� IDE/ATA ��� OS/2 ������� � ����������� �������� DDK (Driver Development Kit� ����� ������������ [���] ������������ ���������), ������� ����� ���� ������ �� ����� [www.ibm.com OS/2 DDK].

����������� ���� � ������� 10.3 ��� ������ ������ �� ����� �� ����� 10.4, ��, � ����������������, ����� ������������ ����� �������� ������� � �������� ���������� ��������� ������������ ���������� fdd->handier, � �������� ���������� �������� ���� ���������� � ��������� �� ������� �������������� ���������� ���������.