�ǥХ����ɥ饤�ФȤϡ�


I/O����ؤ�̿�᡼I/O���ɥ쥹���֤ȥ��ꥢ�ɥ쥹����

����ƥ�x86��CPU��I/O���ɥ쥹���֤���ꥢ�ɥ쥹���֤��̤˻��äƤ��ޤ����� I/O ���ɥ쥹���֤���� CPU �Ͼ����ɤǤ�����ȥ�����68K��CPU�� I/O���ɥ쥹���֤Ȥ������̤ʥ��ɥ쥹���֤���äƤ��ޤ��� I/O�Υϡ��ɥ������������Ʊ���褦�ˡ������������ơ�ư���褦�� �߷פ���Ƥ���Τǡ����̵꤬������Ǥ������ꥢ�ɥ쥹���֤�I/O ���ɥ� �����֤��̤˻���ɬ�פϤ���ޤ��󡣤�������x86��Ĺ����ˤ�����Ť�����Ȥ� �ߴ������ݤäƤ������ᡢ������֥�̿���IN/OUT̿���Ѿ����� I/O���ɥ쥹���֤�ɬ�פȤ��ޤ�����

���ɥ쥹���֤ˤĤ���

���۵�������Ѥ���OS���¥���򤽤Τޤ����Ѥ���OS���ˤ�ä� �ǥХ����ؤΥ�������ˡ���Ѥ�äƤ��ޤ���
  1. OS�Υ����ͥ��桼���ץ��������¥������ (�ʤ�����ʪ���������)���ư��뤫�� ����ȤⲾ�ۥ�����־��ư��뤫���Ȥ�������
  2. I/O�Υϡ��ɥ����������Υ����ͥ��桼���ץ��������� �ɤΤ褦�˸����뤫���Ȥ�������
�����λ�������ǥХ�����I/O�ΰ㤤�򸫤Ƹ��ޤ��礦�� �ޣ��ϥ��ɥ쥹���֤ˤĤ��ơ����ۥ��ɥ쥹��ʪ�����ɥ쥹���Х����ɥ쥹�� �ط��򼨤��Ƥ��ޤ���
��1:���ۥ��ɥ쥹��ʪ�����ɥ쥹���Х����ɥ쥹�δط�

ʪ�����ɥ쥹�򤽤Τޤޥ����ͥ��ץ������Υ��ɥ쥹�� ���Ѥ���OS��¥��ɥ쥹OS�ȸƤӤޤ��礦���ޤ�ľ��ʪ�����ɥ쥹����Ѥ��ʤ��� ��������˲��ۥ��ɥ쥹��Ȥ�OS���ۥ��ɥ쥹OS�ȸƤӤޤ��礦�� ���̤ˤ�ʪ�����ɥ쥹���֤ϼ¥����I/O�ǥХ��������ĥ쥸��������꤫�� ������֤��鹽������Ƥ��ޤ�����Ԥζ��֤ϡ�PCI�Ȥ�VMEbus�Ȥ����ޤ��ޤ� �Х����֤�����ޤ����Ǥ�����ʪ�����ɥ쥹����ޤ���б����� �ǥХ����Υ쥸��������꤬��ޤ�ޤ���I/O�Х��������ʤˤ�ŤʤäƤ��� ���Ϥ����ʣ�����б��ˤʤ�ޤ����������Ǥϰ��Ū�˷�ޤ��ΤȤ��� �ä�ʤ�ޤ��� �¥��ɥ쥹OS�ξ��ϥץ������Υ��ɥ쥹�����Τޤ�ʪ�����ɥ쥹�ʤΤ� �б�����Х����ɥ쥹����ޤ�ޤ��������⡢����ʪ�����ɥ쥹�ȥХ����ɥ쥹�� Ʊ���ͤ��б�������ȥХ����ɥ쥹�ؤΥ��������Ϥ��ΥХ����֤���ˤ��� �ǥХ����Υ��ɥ쥹�򤽤Τޤ�Ϳ��������ǡ����ΥǥХ����ؤΥ��������� ��ǽ�ˤʤ�ޤ������Τ褦�˥ϡ��ɥ������������Ƥ���OS�ȷ׻������ȹ礻�� �ɤ��������ޤ����㤨�С��ǥХ����Υ���ȥ����륹�ơ������쥸����(CSR)�ؤ� ���������Ϥ���CSR�ΥХ����ɥ쥹���狼��С���ñ�˥����������Ǥ��ޤ��� �¥��ɥ쥹OS��I/O��Ԥʤ���Ǥ����������Ǵ�ñ��OS�ȸ����ޤ����������� �¥��ɥ쥹OS�����Ѵ�����¦�̤���äƤ��ޤ�������ϥ桼���Τ���äȤ��� �ְ㤤�������ƥ����ߤ��˲��˷Ҥ��äƤ��ޤ��ȸ������Ǥ���������򤱤� ��ˡ�Σ��Ĥ����ۥ��ɥ쥹OS�κ��ѤǤ����桼���ץ������Υߥ���ľ�� �����ƥ����ߡ��˲��˷Ҥ���ʤ��褦�ˡ�OS��ǽ��¸�����ץ������� �ǡ����򥫡��ͥ���֤Ȥ��ƥ桼���ץ������β��۶��֤����ڤ�Υ���ޤ��� �Ǥ�����ǥХ��������뵡ǽ�򥫡��ͥ���֤��֤��ơ��桼���ˤ� ľ�ܤ���������ޤ��󡥤����ǡ��桼���ץ������ϡ��ǥХ����ɥ饤�Ф� ��Ȥ���ꤷ���ǥХ����ɥ饤�Ф��ºݤ˥ǥХ����˥���������Ԥʤ��ޤ��� ����ǥХ����˴ؤ������Ƥκ�ȤϤ������ѤΥǥХ����ɥ饤�Ф��̤��� �Ԥʤ����Ȥˤʤ�ޤ���

�׻�����ΥХ������ˤĤ���

�ޣ��򸫤褦��
��2:�׻����ȥХ�(1)

CPU�ϥᥤ������I/O���郎��³�����Х��Υ����ץ��ȥ����ƥ�Х��� �𤷤ƷҤ��äƤ��ޤ���I/O�Х��ȥ����ƥ�Х����ڤ�Υ����ͳ�ϥ��ԡ��ɤ� �㤤������Ƥ��ޤ���I/O��Ʊ�������ƥ�Х��ˤ���ȡ� CPU����ǽ�����夷��CPU�ȥ���֤Υ��ԡ��ɤ����夷�Ƥ� �٤�I/O�����äƥܥȥ�ͥå��ˤʤ�ޤ������ԡ��ɤˤ�볬�ع�¤��Ȥ뤳�Ȥ� �׻����Υ����ƥ���ǽ����夵���ޤ���������������ϥǥХ����Υ���������ˡ�� �����ʣ���ˤ����ޤ����ᥤ�����Τ褦��ľ�ܥ桼���ץ�����फ�鸫����ΤǤ� �ʤ����Х������ץ��Ȥ��������̤��Ƹ����뤳�Ȥˤʤ�ޤ��� ���äơ�I/O�Х���ˤ��� �ǥ�������VME/CAMAC�ʤɥǥХ�������³����ˡ�ǰۤʤä��������򤷤ޤ��� �礭��ʬ����ȡ� �����ΥǥХ����ؤΥ��󥿡��ե������μ���ˡ�����Ѥ���Ū�ˤ�� ��ޤä���ޤ���

�ޣ��Ͽޣ��Ȱ�äƺǶ�η׻����ΥХ�����ˡ�򼨤��Ƥ��ޤ���
��3:�׻����ȥХ�(2)

CPU�ȥ���ϥ֥�å��ˤ�äƷ�Ф졢�����ƥ�Х��Τ褦�� �Х�����Ѥ��ޤ��󡣤���Ϥޤ��ޤ����夹��CPU�ȥ���֤Υ��ԡ��ɤ� ����˸��夵������ˡ�Ǥ����ܡ��ɾ�˥Х���������ȥ饤���Ĺ���� ���ղ�ϩ����ΥΥ������ǥ��ԡ��ɤθ��夬˾��ޤ��󡣤����ǡ��Х��� ���ꥳ����å׾�˻��ä���ơ��֥�å��Ȥ��ƣ��ĤΥ��åפ˺ܤ���ΤǤ��� �Х�����³������ˡ�Ϥ����������ꡢ�������С������å��ʤɤ� ��®�ʥХ�����ˡ�Σ��ĤǤ������Υ������С������å��򣱤ĤΥ��å׾�� �ܤ��Ƥ��ޤ��Ф����ΤǤ����ޣ���CompactPCI����ˤ��ޤ�����

�ޣ�������ʣ���˸����ޤ��������RISC/UNIX�����ƥफ��VME�Х���
��4:�׻����ȥХ�(3)

�𤷤�CAMAC����³������Ǥ��������ƥ�Х����VME�Х������ץ��� ����ޤ�����������VME���졼�Ȥ˸����ä����̤�I/O�Х��������졢 VME�Х��Υޥ�������ȥ�����Ȥʤ륫���ɤ˷Ҥ���ޤ��� �����ˤ�VME�Х������ꡢ���Ĥ�VME�⥸�塼��Ȥ���CAMAC�� ����ȥ����餬����ޤ������Υ⥸�塼�뤫��CAMAC�Υ��졼�Ȥ˸����ä� ��������̤ʥ����֥뤬�Ф��졢CAMAC���졼�ȥ���ȥ������ ��³����ޤ�������ϣ��Ĥ���Ǥ�������³����ˡ�Ϥ��ޤ��ޤǤ��� �桼���ץ������Ϥ����������Υϡ��ɥ����������˽��ä� �񤤤Ƥ����ΤǤϡ����������ʤ��ϡ��ɥ�������������٤� ��ľ����ʤ��Ƥ�����ޤ��󡣼�ʬ�������� �ǥХ��������ˡ�˽��椷�ƥץ�����ߥ󥰤����������եȥ������� ��֤����Х��ι���ˡ�ˤϰ�¸���������ʤ����ʤɡ���ä� ����Ū�˥��եȥ���������������ˡ�Ϥʤ�����

�ǥХ����Υ�������ˡ�ˤĤ���

�ϡ��ɥ�������OS�ʤɤ˰�¸���ʤ����եȥ���������������ˡ�Ȥ��� �����˻פ��⤫�٤뤳�Ȥϴ���Ū�ʥǥХ������򤪤��ʤ��ؿ��� ��������ϡ��ɥ�������OS�ʤɤ���桼���ץ��������ڤ�Υ�����ȤǤ��롣 �ޤ����ǥХ�������OS�Υ����ͥ�˥ǥХ����ɥ饤�ФȤ����Ȥ߹��ߡ� �桼���ץ�������OS���󶡤��륷���ƥॳ��������Ѥ��뤳�Ȥ� ����������ݤ��뤳�ȤǤ��롣 �ޣ��ϥǥХ���������ݲ�������ˡ�򤤤��Ĥ������Ƥ��ޤ��� C���������ˤ��Ƥ��ޤ���
��5:�ǥХ������ˡ

�桼���ؿ���I/O��OS�ˤ��㤤���ä�����ˡ(��)�ˤĤ��ƤϤ���� �������ޤ��������KEKɸ���CAMAC�ؿ��Σ��ĤǤ���CAM_Open�� CAMAC�ν������Ԥʤ��桼���Ѥδؿ��Ǥ�����ö�����Ƥ٤С� CAMAC�ؿ��Ǥ��ޤ��ޤ�CAMAC����ǽ�ˤʤ�ޤ���CAMAC�ؿ��� N, A, F��CAMAC���������CAMAC�⥸�塼������뤳�Ȥǥǡ����� �ɤ߽񤭤Ǥ��ޤ����ɤΤ褦��OS���ɤΤ褦�ʥϡ��ɥ������� ���ä���Ƥ⤳���δؿ��ˤ�äƤ����ΰ㤤���äǤ��ޤ��� ��������Ѥ������Ǥ����Ʊ���ˡ��㤤��ۼ����뤿���;�פ� �ץ�����ॳ���ɤ��ɲä��뤳�Ȥǥ����С��إåɤ����䤷�¹� ��ǽ�Ȥ������Ǥ������ˤʤ�ޤ��� ���ϥ桼���ؿ���I/O��OS�ˤ��㤤���ä�����ˡ(��)�򸫤Ƥ��������� ���δؿ���KEKɸ���VME�ؿ��Σ��ĤǤ������δؿ�����ٸƤ֤� VME�Х��������⥸�塼���ľ�ܡ�I/O����ǽ�ˤʤ�ޤ��� ���򼨤��ޤ������Υ����ͥ��𤵤ʤ���ˡ�򸫤Ƥ��������� vme_mapopen�ؿ���Ƥ֤Ȥ��륢�ɥ쥹���֤ä���ޤ��� VME���ɥ쥹���б�����׻�����Υ��ɥ쥹�Ǥ������ۥ��ɥ쥹OS�Ǥ� �桼���ץ������β��ۥ��ɥ쥹���֤ä���ޤ����ޤ������Ǥ� VME���ɥ쥹���桼���ץ������Υ��ɥ쥹���֤���ľ�ܸ����� �¥��ɥ쥹OS�ǤϤ��Υ��ɥ쥹�򤽤Τޤ޻Ȥ����Ȥ��Ǥ��ޤ��� �ɤ߹��ߤ�񤭹��ߤϿޤΤ褦�˴�ñ�ˤǤ��ޤ������ۥ��ɥ쥹OS�Ǥ� ���Τ褦�ʥǥХ�����������ˡ�ϴ�ñ���ưפˤǤ��������� OS�ؤ����������������ɻߤǤ��Ƥ���Τǡ��褯�Ѥ����ޤ��� �������������ߤ�DMA(�����쥯�ȥ��ꥢ������)�Τ褦�ʾ��� �����ͥ�ؿ��˰�¸������ʬ�������Ƥ��ޤ��Τǡ��嵭�Τ褦�ˤ� �����ޤ��󡣤����ǥ����ͥ��𤷤ƥǥХ����˥�������������ˡ�� ��Ƥ���ޤ����ޤκǸ��open�ؿ�������ޤ�������ϥ����ƥॳ����� ���ĤǤ����ǥХ����ե�����򥪡��ץ󤹤�Ȥ������ǡ� �ǥХ�������������ɬ�פʥե�����ǥ�����ץ���������� �����Ȥäơ��ǥХ������ɤ߽񤭤��ޤ���read/write�����ƥॳ����� ���Τ���Τ�ΤǤ����ǡ������Ǽ����Хåե����ɤ߽񤭤������ǡ����� ��������Х���ñ�̤ǻ��ꤹ�뤳�ȤǴ�ñ�ˤǤ��ޤ���

UNIX�����ƥ�����������

UNIX�����ͥ�ϥ桼���ץ������������䤽�μ¹ԥ������塼��󥰡� �����ƥॳ����ʥ����ƥ�ؿ��ˤΥ����ӥ����ϡ��ɥ����������ߤʤɤν������ ��˰����ơ��桼�����餳�������ʽ�����������Ƥ���ޤ����桼���ץ������� ����������ѤΥ����ƥॳ�����VME��CAMAC�������Ϥ�Ԥʤ��Τ�����Ū�������� ��ˡ�Ǥ���â���������Ϥ���ˡ�Ϥ���ʳ��ˤ⤢�ꡢ�ä�ľ�����������֤ˤ��� �����쥸������桼����٥���������Ȥ��׵�ˤ� ����Ū����������ˡ�ǤϤʤ��ޥå���������������ˡ���Ѥ��ޤ���
VME��CAMAC���Ф��Ʋ��餫������Ԥʤ��ˤϡ��ޤ�������ݲ����줿�ǥХ����� open�����ƥ�ؿ����Ѥ��ƥ����ץ󤹤롣��ݲ����줿�ǥХ����ϡ� �㤨�С�/dev/cc�Ȥ����褦�ʥǥХ����ե�����Ȥ���ɽ������ޤ��� ����Ϥ�������UNIX���̾�Υե������Ʊ���褦�˰����Ƥ��ޤ��� ���Υե�����ˤ�Major�ֹ椬ɬ���դ��ޤ��������ֹ椬�����ͥ����� �ǥХ����ɥ饤�Ф��б���������פ��ֹ�ˤʤ�ޤ��� �ºݤ����������ˤϥǡ������ɤ߹��ि���read�ؿ���ǡ����� �񤭹��ि���write�ؿ������̤ʥǡ����������Ϥ�Ȥ�ʤ�� �����˻��Ѥ���ioctl�ؿ����Ѥ��ޤ��������򽪤�����close�ؿ���ƤӤޤ��� �����δؿ��ϥ����ͥ�ΰ����˥ǥХ����ɥ饤�ФΥ����ɤΰ����Ȥ��� ��������Ƥ��ޤ��������δؿ����ƤӽФ����Ƚ����ϥ����ͥ�����ꤽ����� �ǥХ����ɥ饤�Ф��ƤӽФ���ޤ��� �ǥХ����ɥ饤�ФϤ����δؿ����б����륨��ȥ꡼�� ���äƤ��ޤ����㤨��CAMAC�ǥХ����ɥ饤�Фξ�硢open�����ƥ�ؿ����ƤФ�� �ȡ����Υ���ȥ꡼�Ǥ���ccopen���ƤФ�ޤ��� �桼���ץ�����ब�ɥ饤�Ф��Ϥ����� �ѥ�᡼����ǡ�����CAMAC�⥸�塼�뤫���ɤߤ������ǡ����䥹�ơ���������� �桼���ץ��������֤���ˡ�Ϥ����Ĥ��Ѱդ���Ƥ��ޤ��� �Ǥ��ñ����ˡ��ioctl�ؿ��� �Ȥ���ˡ�Ǥ���ioctl�ؿ��Υѥ�᡼����ؤ������ݥ��󥿤����Τޤޥɥ饤�Х���� �꡼ccioctl���Ϥ����Τǡ����Υݥ��󥿤˸����äƥѥ�᡼����ǡ����������Ϥ�� �ʤ��Ф褤�ΤǤ��� read�ؿ���write�ؿ������̤Υǡ����������Ϥ���Τ˸����Ƥ��ޤ����ޤ�DMA�� ���Ԥʤ��Τ�ɬ�פʤ����Ĥ��Υǡ�����¤�Υݥ��󥿤��Ѱդ��Ƥ����Τǡ� DMA����Ԥʤ�����ˤ������ǡ�ɬ�פ���ˡ�Ǥ��� �ǥХ����ɥ饤�Ф����������ˤ������Ѥ��뤳�Ȥ��Ǥ��ʤ��� ������˥桼���ץ�������ˤ���ǡ����򥫡��ͥ뤫�饳�ԡ�����ؿ�������Τ� �����ͥ��ΰ�ȥ桼���ץ������Υǡ����ΰ�֤Υǡ�����ư�˻Ȥ��ޤ��� DMA����ȼ���ǡ�����ư����ˡ�Ϥ����Ȥ������ۤʤä���ˡ�ǹԤʤ�ޤ��� �ܤ������̤ʾϤǰ����ޤ���
�ޥå���������������ˡ�����Ҥ�������ˡ�Ȱۤʤä�read�ؿ���write�ؿ���ioctl�ؿ� ���Ѥ��ޤ������äơ�mmap�ؿ���桼���ץ�����फ��ƤӽФ��ޤ��� ���δؿ��ϥǥХ����򥪡��ץ󤷤Ƥ��ΥǥХ������Ф���mmap�ؿ���ȯ�Ԥ���ȡ� ���ΥǥХ������� ���ɬ�פʥ��ɥ쥹���֤äƤ��ޤ����桼���ץ�������٥�Ǥ��Υ��ɥ쥹��C����� �ݥ��󥿤Ȥ����Ѥ���ľ�ܥǥХ����Υ���ȥ����륹�ơ������쥸�����ʤ� �򥢥��������뤳�Ȥ���ǽ�Ȥʤ�ޤ�����������������ˡ�Ǥ�DMA����Ԥʤ����ȤϤ� ���ޤ��� C������Ѥ����ޥå����������������ˡ�ˤĤ��ƴ�ñ�˿���ޤ���

�Х��ȥ�����������

�׻�������PCI, VMEbus�ʤɤΥХ��򰷤���硢�ǡ������ɤߤ����񤭹��ߤ� �����ƥǡ���������������褯���󤵤�ʤ���礬����ޤ�������� CPU�ΥХ��ȥ������ȥХ��ΥХ��ȥ������ΰ㤤�ˤ���Τǡ� ���줬����ǥ���������Ǥ�������ƥ�x86CPU�ϥ�ȥ륨��ǥ�����Ϥ� ��ȥ�����68kCPU�ϥӥå�����ǥ�����ϤǤ��� �㤨�С�16bit �ʾ�������ͤ� 8bit ñ�̤ǤɤΤ褦�� ����˳�Ǽ����뤫�Ȥ������Ȥ�ͤ��ޤ���x86 �Ϥ� CPU �Ǥϡ��Dz��̤��顢 ��Ǽ���졢68kCPU�Ǥϡ��Ǿ�̤����Ǽ����ޤ��� �ǡ�����0x123456AB��x86�ϤǤϡ�"AB 56 34 12" �ν�ˡ� 68k�� �Ǥ�"12 34 56 AB" �ν�˳�Ǽ����ޤ��� ���줾��ˡ����������äơ�x86 �ϤǤϡ��ӥåȿ��γ�ĥ�� �����Ƥ��ơ�68k �Ǥϡ����������٤�Ǥ��ޤ��� �ӥåȿ��γ�ĥ�Ȥϡ����� 16bit �Υǡ������Ǽ����Ȥ�������򸫱ۤ��ơ�64bit �� �ΰ���Ѱդ���xx yy 00 00 ... �Τ褦�ˡ�̤�����ΰ�� 0 �ˤ��Ƥ����ȡ� 32bit �Ǥ⡢64bit �Ǥ⡢Ʊ����Ƭ���ɥ쥹�ǥ��������Ǥ��ޤ��� �ޤ���Ʊ�������Ȥ��ơ��Ǿ�̥ӥåȤΰ��֤����꤬����ޤ���x86 �ϤǤϡ� 32bit �ξ�硢 bit31 ���Ǿ�̥ӥåȤǤ��������� CPU �Ǥ� bit0 �� �Ǿ�̥ӥåȤˤʤäƤ��ޤ���