입출력 채널
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
입출력 채널은 컴퓨터 시스템에서 CPU와 주변 장치 간의 데이터 전송을 관리하는 하드웨어 구성 요소이다. IBM 709 메인프레임에서 처음 사용되었으며, 이후 다양한 형태로 발전해 왔다. 채널은 멀티플렉서, 셀렉터, 블록 멀티플렉서 등 여러 종류가 있으며, 각기 다른 방식으로 여러 장치와의 동시 입출력을 지원한다. 채널 프로그램은 채널 명령 단어(CCW)로 구성되며, CPU는 이 채널 프로그램을 실행하여 I/O 작업을 수행한다. 채널 I/O는 부팅 과정에도 사용되며, 초기 부트스트랩 로더를 메모리에 로드하는 데 기여한다.
더 읽어볼만한 페이지
- 메인프레임 - IBM 1401
IBM 1401은 1959년에 출시된 가변 단어 길이 십진법 컴퓨터로, IBM 1400 시리즈의 첫 제품으로서 소규모 기업과 대형 컴퓨터 주변 장치 컨트롤러로 사용되었으며 펀치 카드 장비와 진공관을 대체하며 성공하여 1만 대 이상 판매되었고 세계 여러 나라에 도입된 최초의 컴퓨터 중 하나로 현재 컴퓨터 역사 박물관에 두 대가 복원되어 작동 중이다. - 메인프레임 - 옐브루스
옐브루스는 러시아 MCST에서 설계 및 제조한 마이크로프로세서 시리즈로, 메인프레임 컴퓨터에서 시작하여 VLIW 아키텍처를 거쳐 SPARC 아키텍처 기반 프로세서까지 다양한 모델이 출시되었다. - 글로벌세계대백과를 인용한 문서/{{{분류 - 공 (악기)
공은 금속으로 제작된 타악기로, 다양한 문화권에서 의식, 신호, 음악 연주 등에 사용되며, 형태와 용도에 따라 여러 종류로 나뉜다. - 글로벌세계대백과를 인용한 문서/{{{분류 - 국무회의
국무회의는 대한민국 대통령을 의장으로, 예산, 법률안, 외교, 군사 등 국정 현안을 심의하는 중요한 기관이며, 대통령, 국무총리, 국무위원으로 구성되고, 정례회의는 매주 1회, 임시회의는 필요에 따라 소집된다. - 글로벌세계대백과를 인용한 문서/{{{분류2 - 공 (악기)
공은 금속으로 제작된 타악기로, 다양한 문화권에서 의식, 신호, 음악 연주 등에 사용되며, 형태와 용도에 따라 여러 종류로 나뉜다. - 글로벌세계대백과를 인용한 문서/{{{분류2 - 국무회의
국무회의는 대한민국 대통령을 의장으로, 예산, 법률안, 외교, 군사 등 국정 현안을 심의하는 중요한 기관이며, 대통령, 국무총리, 국무위원으로 구성되고, 정례회의는 매주 1회, 임시회의는 필요에 따라 소집된다.
| 입출력 채널 | |
|---|---|
| 개요 | |
| 유형 | 컴퓨터 하드웨어 |
| 기능 | 주변 장치와 주기억 장치 간의 데이터 전송 관리 CPU의 데이터 처리 부담 경감 |
| 다른 이름 | I/O 프로세서 I/O 컨트롤러 |
| 역사 | |
| 초기 시스템 | CPU가 모든 I/O 작업을 직접 처리 CPU 효율성 저하 |
| 채널 I/O의 도입 | CPU가 I/O 작업으로부터 독립 시스템 전체 성능 향상 |
| 작동 방식 | |
| CPU의 역할 | 채널 프로그램 시작 및 감독 |
| 채널의 역할 | 데이터 전송 작업 처리 CPU에 인터럽트 신호 전송 |
| 데이터 전송 방식 | 바이트 단위 블록 단위 |
| 주요 기능 | |
| 데이터 전송 | 주변 장치와 주기억 장치 간의 데이터 이동 |
| 오류 처리 | 데이터 전송 중 오류 감지 및 복구 |
| 인터럽트 처리 | I/O 작업 완료 또는 오류 발생 시 CPU에 알림 |
| 구성 요소 | |
| 채널 제어 장치 | 채널과 주변 장치 간의 인터페이스 관리 |
| 채널 어댑터 | 다양한 유형의 주변 장치 연결 지원 |
| 채널 프로그램 | I/O 작업의 실행 순서 및 데이터 전송 방식 정의 |
| 유형 | |
| 바이트 멀티플렉서 채널 | 저속 장치를 효율적으로 처리하기 위해 설계됨 |
| 블록 멀티플렉서 채널 | 고속 장치에 최적화되어 고속 데이터 전송 지원 |
| 선택자 채널 | 한 번에 하나의 장치만 처리할 수 있지만 높은 대역폭 제공 |
| 장점 | |
| CPU 효율성 향상 | I/O 작업을 채널이 처리하여 CPU 부담 감소 |
| 시스템 성능 향상 | CPU와 I/O 장치가 동시에 작업 가능 |
| 유연성 | 다양한 유형의 주변 장치 지원 |
| 활용 분야 | |
| 메인프레임 컴퓨터 | 대용량 데이터 처리 및 I/O 작업 관리 |
| 서버 | 네트워크 스토리지 및 데이터베이스 시스템 |
| 고성능 컴퓨팅 | 과학 연구 및 엔지니어링 시뮬레이션 |
2. 역사
IBM 709[19] 진공관 메인프레임에서 처음 사용되었으며, 1957년의 모델 766 데이터 싱크로나이저(Model 766 Data Synchronizer)가 최초의 채널 컨트롤러이다.[2] 트랜지스터 형태의 후계자 IBM 7090[20]은 2개 이상의 채널(7607)과 하나의 채널 멀티플렉서(7606)을 갖추고 있었으며 최대 8개의 채널을 제어할 수 있었다.[3] 7090과 7094는 7909를 사용하여 최대 8개의 8비트 채널을 가질 수도 있었다.
IBM System/360 및 System/370 컴퓨터 제품군은 모든 모델에서 채널 I/O를 제공했다. 하위 모델인 System/360 모델 50 이하 및 System/370 모델 158 이하에서는 CPU의 마이크로코드로 채널이 구현되었으며, CPU 자체는 "CPU 모드" 또는 "채널 모드" 중 하나로 작동하며, 채널 모드는 CPU 모드에서 사이클을 '가로챘다'. 더 큰 IBM System/360 및 System/370 컴퓨터의 경우 채널은 여전히 부피가 크고 비싼 별도의 구성 요소였다. 예를 들어 IBM 2860 선택기 채널(단일 상자에 1~3개의 선택기 채널), IBM 2870 바이트 멀티플렉서 채널(단일 멀티플렉서 채널 및 선택적으로 단일 상자에 하나의 선택기 서브채널), IBM 2880 블록 멀티플렉서 채널(단일 상자에 1~2개의 블록 멀티플렉서 채널)이 있다. 303x 프로세서 복합체에서 채널은 CPU와 동일한 캐비닛에 있는 독립적인 채널 디렉터로 구현되었으며, 각 채널 디렉터는 채널 그룹을 구현했다.([4])
훨씬 나중에 채널은 일반적으로 "채널 프로세서"라고 하는 CPU와 동일한 상자에 있는 온보드 프로세서로 구현되었으며, 일반적으로 RISC 프로세서였지만, IBM의 CMOS 메인프레임에서와 같이 특수 마이크로코드가 있는 System/390 마이크로 프로세서일 수도 있었다.
Amdahl Corporation의 System/370 호환 채널의 하드웨어 구현은 상당히 달랐다. "C-Unit"이라고 하는 단일 내부 장치는 모든 지원 채널에 동일한 하드웨어를 사용하여 최대 16개의 채널을 지원했다. 최대 32개의 전체 채널을 지원하는 두 개의 내부 "C-Unit"이 가능했다. 각 "C-Unit"은 일반적으로 "시프팅 채널 상태 프로세서"(일종의 배럴 프로세서)라고 하는 프로세스를 독립적으로 수행했으며, 특수 유한 상태 기계 (FSM)를 구현했다. 각 CPU 사이클, 470V/6 및 /5에서는 32 나노초마다, 470V/7 및 /8에서는 26 나노초마다 "C-unit"은 우선순위 순서의 다음 채널의 전체 상태와 해당 ''I/O 채널 인 태그''를 읽었다. 해당 채널의 ''마지막 상태''와 해당 ''인 태그''에 의해 정의된 필요한 작업이 수행되었다. 즉, 메인 스토리지에서 데이터를 읽거나 썼고, 채널 프로그램의 프로그램 제어 인터럽트 플래그에 의해 그러한 인터럽트가 지정된 경우 운영 체제 프로그램이 인터럽트되었으며, "C-Unit"은 마지막으로 해당 채널의 다음 상태를 저장하고 해당 ''I/O 채널 아웃 태그''를 설정한 다음 다음 낮은 우선순위 채널로 넘어갔다. 일부 경우 선점이 가능했다. 이 FSM에 의해 에뮬레이션된 모든 채널에 대해 충분한 FIFO 스토리지가 "C-Unit" 내에 제공되었다. 채널은 유지 관리 콘솔 명령을 사용하여 선택기, 바이트 멀티플렉서 또는 블록 멀티플렉서 채널을 고객의 선택에 따라 쉽게 재구성할 수 있었으며, 상당한 제한은 없었다. "2 바이트 인터페이스"도 "데이터 인/데이터 아웃" 및 기타 고성능 IBM 채널 옵션과 마찬가지로 지원되었다. 내장된 채널 간 어댑터도 제공되었으며, Amdahl에서는 CCA라고 불렸지만, IBM에서는 CTC 또는 CTCA라고 불렸다. 진정한 게임 체인저였으며, 이는 IBM이 유사한 채널 기능과 유연성을 제공하기 위해 메인프레임을 재설계하도록 강요했다. IBM의 초기 대응은 "채널 모드"로만 작동하는 축소된 모델 158을 모델 303x 채널 장치로 포함하는 것이었다. Amdahl "C-unit"에서는 일부 IBM 모델에서와 같이 바이트 멀티플렉서를 위해 채널 0과 4를 예약하지 않고 모든 채널이 모든 유형, 선택기, 바이트 멀티플렉서 또는 블록 멀티플렉서가 될 수 있었다.
가장 초기의 상업용 비 IBM 채널 시스템 중 일부는 UNIVAC 490, CDC 1604, Burroughs B5000, UNIVAC 1107 및 GE 635에서 사용되었다. 그 이후로 채널 컨트롤러는 대부분의 메인프레임 설계의 표준 부분이 되었으며, 메인프레임이 더 작고 빠르며 개인용 컴퓨터와 네트워크 컴퓨팅보다 우위를 점하는 주요 장점이다.
1965년 CDC 6600 슈퍼컴퓨터는 이 역할을 위해 10개의 논리적으로 독립적인 컴퓨터, 즉 주변 프로세서(PP)와 12개의 간단한 I/O 채널을 사용했다. PP는 CDC의 첫 번째 개인용 컴퓨터인 12비트 CDC 160 및 160A의 수정된 버전이었다. 운영 체제는 처음에 PP0에 상주하고 실행되었다. 채널은 메모리에 직접 액세스할 수 없었으며 인터럽트를 발생시킬 수 없었다. PP의 소프트웨어는 채널과 A 레지스터 또는 PP 메모리 간에 데이터를 전송하기 위해 동기 명령을 사용했다.
1981년에 도입된 SCSI는 IBM 블록 멀티플렉서 채널과 동등한 저가 채널로,[5] 현재 파이버 채널 프로토콜 및 직렬 연결 SCSI의 형태로 널리 사용되고 있다.
최신 컴퓨터는 PCI 직접 메모리 액세스 (DMA) 장치와 같은 버스 마스터링 주변 장치의 형태로 채널을 가질 수 있다. 이러한 장치의 논리는 원래 채널 컨트롤러와 동일하며, 즉 메인 CPU에서 전송, 인터럽트 및 컨텍스트 전환을 오프로드하는 것이다.
채널 컨트롤러는 예를 들어 NeXT 컴퓨터에서 사용되는 여러 채널을 갖춘 단일 칩 설계만큼 작게 만들어졌다.
2. 1. 초기 역사
IBM 709[19] 진공관 메인프레임에서 처음 사용되었으며, 1957년의 모델 766 데이터 싱크로나이저(Model 766 Data Synchronizer)가 최초의 채널 컨트롤러이다.[2] 트랜지스터 형태의 후계자 IBM 7090[20]은 2개 이상의 채널(7607)과 하나의 채널 멀티플렉서(7606)을 갖추고 있었으며 최대 8개의 채널을 제어할 수 있었다.[3] 7090과 7094는 7909를 사용하여 최대 8개의 8비트 채널을 가질 수도 있었다.2. 2. 발전 과정
IBM System/360 및 System/370 컴퓨터 제품군은 모든 모델에서 채널 입출력을 제공했다.[4] 초기에는 별도의 하드웨어 구성 요소였으나,[4] 이후 CPU와 같은 상자에 있는 온보드 프로세서로 구현되었다.[4] System/360의 소형 기종에서는 CPU 내의 마이크로 코드로 채널을 구현하여 CPU 자체가 'CPU 모드'와 '채널 모드'의 두 가지 모드로 작동했다.암달은 System/370 호환 기종에서 더욱 유연한 채널 입출력 구현을 제공하여 IBM의 설계 변경을 유도하기도 했다.[4] "C-Unit"이라고 불리는 단일 내부 유닛으로 최대 16개의 채널을 지원했으며, 최대 2개까지 탑재 가능하여 총 32개까지의 채널을 제어할 수 있었다. C-Unit은 특수한 유한 상태 기계 (FSM)처럼 작동하여 프로세스를 각각 독립적으로 실행하는 "채널 상태 시프트(shifting channel state)" 방식을 사용했다. IBM 2860/2870/2880의 에뮬레이션이 가능했으며, 제어 탁에서 명령을 발행하여 에뮬레이션 방식을 변경할 수 있어 IBM의 설계보다 유연했다.
IBM 외에도 UNIVAC, CDC, Burroughs, GE, 하니웰 등 여러 메인프레임 제조업체들이 채널 입출력을 채택했다.[2][3] 1965년 CDC 6600 슈퍼컴퓨터는 10개의 "주변 프로세서" (''peripheral processor'', ''PP'')를 갖추고 있었는데, 이는 CDC 160A의 개량판이었다. 이후, 채널 컨트롤러는 대부분의 메인프레임에서 채택되었다.
채널 컨트롤러는 단일 칩으로 여러 채널을 조작하는 것도 만들어졌으며, NeXT 컴퓨터에서도 사용되었다. 그러나 최근 컴퓨터의 성능 향상으로 인해 작은 머신에서는 사용되지 않게 되었고, 버스 마스터링 주변 장치로 계승되었다. PCI의 DMA 장치 등이 그 예시이다.
3. 채널의 종류
채널은 지원되는 동시 입출력 기능의 수와 유형에 따라 다르다. IBM 용어로 '''멀티플렉서 채널'''(multiplexer channel)은 수많은 동시 인터리빙 저속 명령어(concurrent interleaved slow-speed operation)들을 지원하며 명령어 각각이 한 번에 하나의 장치로부터 한 바이트를 전송한다. '''셀렉터 채널'''(selector channel)은 하나의 고속 명령(high-speed operation)을 지원하며, 한 번에 하나의 데이터 블록을 전송한다. '''블록 멀티플렉서'''(block multiplexer)는 수많은 동시 고속 명령을 지원한다.
채널은 지원하는 동시 입출력 작업의 수와 유형에 따라 다릅니다. IBM 용어에서, '''멀티플렉서 채널'''은 여러 개의 동시 인터리브된 저속 작업을 지원하며, 각 작업은 한 번에 한 바이트씩 장치에서 전송한다. '''셀렉터 채널'''은 한 번에 데이터 블록을 전송하는 하나의 고속 작업을 지원합니다. '''블록 멀티플렉서'''는 여러 개의 논리적으로 동시 채널 프로그램을 지원하지만, 한 번에 하나의 고속 데이터 전송만 지원합니다.
채널은 주변 장치를 스토리지 버퍼와 연결하는 방식에서도 다를 수 있습니다. UNIVAC 용어에서 채널은 한 번에 하나의 버퍼와 장치가 활성화된 '''내부 지정 색인'''(ISI)이거나, 장치가 사용할 버퍼를 선택하는 '''외부 지정 색인'''(ESI)일 수 있습니다.
3. 1. 멀티플렉서 채널 (Multiplexer Channel)
멀티플렉서 채널은 여러 개의 동시 인터리빙 저속 명령어들을 지원하는데, 각 명령어는 한 번에 하나의 장치로부터 한 바이트를 전송한다. IBM 용어에서, 멀티플렉서 채널은 여러 개의 동시 인터리브된 저속 작업을 지원하며, 각 작업은 한 번에 한 바이트씩 장치에서 전송한다.3. 2. 셀렉터 채널 (Selector Channel)
셀렉터 채널은 하나의 고속 입출력 작업을 처리한다. 한 번에 하나의 데이터 블록을 전송한다.3. 3. 블록 멀티플렉서 채널 (Block Multiplexer Channel)
블록 멀티플렉서는 여러 개의 고속 입출력 명령을 동시에 지원할 수 있지만, 한 번에 하나의 데이터 블록 전송만 가능하다.4. 채널 프로그램
채널 프로그램은 채널이 실행하는 일련의 채널 명령 단어(CCW)로 구성된다.[6] 운영 체제는 SSCH(시작 서브 채널) 명령을 사용하여 I/O 채널 서브시스템에 채널 프로그램 실행을 시작하라고 신호를 보낸다.[6] 그러면 중앙 처리 장치(CPU)는 인터럽트가 발생할 때까지 비 I/O 명령을 자유롭게 진행할 수 있다.[6] 채널 작업이 완료되면 채널은 I/O 인터럽트를 사용하여 중앙 프로세서를 인터럽트한다.[6]
IBM System/370 확장 아키텍처 및 후속 제품은 이전 SIO(''시작 I/O'') 및 SIOF(''시작 I/O 빠른 해제'') 기계 명령(System/360 및 초기 System/370)을 SSCH(''시작 서브 채널'') 명령(ESA/370 및 후속 제품)으로 대체했다.[6]
채널 I/O는 입력/출력에서 상당한 경제성을 제공한다. 예를 들어, IBM의 Linux on IBM Z에서 DASD의 전체 트랙을 포맷하는 데 하나의 채널 프로그램(따라서 하나의 I/O 명령)만 필요하지만 여러 개의 채널 명령 단어(블록당 하나)가 필요하다.[6] 프로그램은 "전용" I/O 프로세서에 의해 실행되는 반면, "응용" 프로세서(CPU)는 다른 작업을 자유롭게 수행할 수 있다.[6]
채널 명령어(channel command word, CCW)란 채널에 연결된 장치의 입출력 조작("read"나 "seek" 등)을 지시하는 명령어이다.
CCW에 의해 채널 프로그램이 구성된다. 채널 프로그램은 OS나 어떤 독립적인 소프트웨어(진단 프로그램 등)가 작성한다. CPU가 상기한 기계어 명령어를 실행하면, 독립적인 입출력 처리 유닛에 신호가 전송되어, 그 장치가 요구된 I/O에 책임을 진다. 시스템의 메인 CPU는 그 동안 다른 작업을 할 수 있다. I/O 조작 처리 중에 OS에 통지해야 할 사상이 발생하면, 입출력 프로세서는 CPU에 인터럽트를 전송하여 OS에 그 후의 처리를 맡긴다.
IBM 메인프레임의 초기 기종에서는, 채널은 1개의 주변 장치와 1대1로 대응했다. 그 후, RISC 프로세서를 채널 프로세서로 사용하게 되어, 모든 채널을 1개의 채널 프로세서로 처리하게 되었다.
채널 I/O에서는 입출력을 상당히 간략화할 수 있다. 예를 들어, Linux/390에서는, DASD(Direct Access Storage Device, 직접 접근 기억 장치)의 트랙 전체의 포맷을 1개의 채널 프로그램(즉 1회의 I/O 명령)만으로 실행할 수 있다. 그 동안, 메인 CPU는 다른 작업이 가능하다.
CCW(채널 명령어, channel command word)는, 채널 프로세서 전용의 명령어 집합이며, 채널 프로세서는 일종의 유한 상태 기계이다. 채널에 연결된 장치에 대해 "read", "write", "sense" 와 같은 I/O 조작을 수행한다. 일반적으로, 채널 I/O를 채용한 아키텍처에서는, 모든 주변 기기는 채널에 연결되어, 입출력은 모두 CCW를 사용하여 수행된다.
4. 1. 채널 명령 단어 (CCW, Channel Command Word)
채널 명령 단어(Channel Command Word, CCW)는 명령어로서, 유한 상태 기계(FSM)인 특수 I/O 채널 프로세서에 대한 명령어이다. 이는 채널에 연결된 장치에서 "읽기", "쓰기", "감지"와 같은 I/O 작업을 시작하는 데 사용된다. 채널 I/O를 구현하는 시스템 아키텍처에서는 일반적으로 모든 장치가 채널로 연결되므로 ''모든'' I/O에 CCW를 사용해야 한다.CCW는 운영 체제, I/O 서브루틴, 유틸리티 프로그램 또는 독립 실행형 소프트웨어(테스트 및 진단 프로그램 등)에 의해 ''채널 프로그램''으로 구성된다. "상태 수정자" 채널 플래그와 "채널 내 전송" CCW를 사용하여 이러한 채널 프로그램 내에서 제한적인 "분기" 기능, 즉 동적으로 프로그래밍 가능한 기능을 사용할 수 있다.
채널 명령어(channel command word, CCW)란 채널에 연결된 장치의 입출력 조작("read"나 "seek" 등)을 지시하는 명령어이다.
CCW에 의해 채널 프로그램이 구성된다. 채널 프로그램은 OS나 어떤 독립적인 소프트웨어(진단 프로그램 등)가 작성한다. CPU가 상기한 기계어 명령어를 실행하면, 독립적인 입출력 처리 유닛에 신호가 전송되어, 그 장치가 요구된 I/O에 책임을 진다. 시스템의 메인 CPU는 그 동안 다른 작업을 할 수 있다. I/O 조작 처리 중에 OS에 통지해야 할 사상이 발생하면, 입출력 프로세서는 CPU에 인터럽트를 전송하여 OS에 그 후의 처리를 맡긴다.
IBM 메인프레임의 초기 기종에서는, 채널은 1개의 주변 장치와 1대1로 대응했다. 그 후, RISC 프로세서를 채널 프로세서로 사용하게 되어, 모든 채널을 1개의 채널 프로세서로 처리하게 되었다.
채널 I/O에서는 입출력을 상당히 간략화할 수 있다. 예를 들어, Linux/390에서는, DASD(Direct Access Storage Device, 직접 접근 기억 장치)의 트랙 전체의 포맷을 1개의 채널 프로그램(즉 1회의 I/O 명령)만으로 실행할 수 있다. 그 동안, 메인 CPU는 다른 작업이 가능하다.
CCW(채널 명령어, channel command word)는, 채널 프로세서 전용의 명령어 집합이며, 채널 프로세서는 일종의 유한 상태 기계이다. 채널에 연결된 장치에 대해 "read", "write", "sense" 와 같은 I/O 조작을 수행한다. 일반적으로, 채널 I/O를 채용한 아키텍처에서는, 모든 주변 기기는 채널에 연결되어, 입출력은 모두 CCW를 사용하여 수행된다.
4. 2. 체이닝 (Chaining)
IBM CCW는 체이닝을 통해 채널 프로그램을 형성한다.[7] CCW 내의 비트는 기억 장치 상의 다음 위치에 있는 데이터가 동일한 채널 프로그램을 구성하는 CCW인지 여부를 나타낸다.[7] 채널 프로그램은 예외 발생, 채널 내 전송(TIC) CCW 실행, 또는 체이닝이 표시되지 않은 CCW 실행 등의 사건이 발생할 때까지 순차적으로 실행된다.[7]체이닝에는 '''명령 체이닝'''과 '''데이터 체이닝'''이 있다.[7] 명령 체이닝은 채널에 다음 CCW가 새로운 명령을 포함하고 있음을 알려준다.[7] 데이터 체이닝은 다음 CCW가 동일한 명령에 대한 추가 데이터의 주소를 포함하고 있음을 나타내며, 예를 들어 하나의 레코드의 일부를 스토리지의 여러 데이터 영역에서 쓰거나 읽을 수 있게 해준다(수집 쓰기 및 분산 읽기).[7]
4. 3. 자체 수정 채널 프로그램 (Self-modifying channel programs)
채널 프로그램은 읽어 들인 데이터를 기반으로 실행 중에 자체 작동 방식을 수정할 수 있다.[8] 예를 들어 자체 수정은 OS/360 ISAM에서 광범위하게 사용된다.[8] 채널 프로그램을 실행하는 동안 읽어들인 데이터를 기반으로 채널 프로그램 자체를 재작성할 수도 있다.[15] 이 기법은 널리 사용되며, OS/360의 ISAM 등에서 사용되었다.[15]4. 4. 채널 프로그램 예시
다음은 기록된 키로 식별되는 디스크 레코드를 읽는 채널 프로그램 예시이다.[9] 레코드가 포함된 트랙과 원하는 키 값은 알려져 있거나, 알려져 있지 않을 수 있다. 장치 제어 장치는 요청된 레코드를 찾기 위해 트랙을 검색한다.레코드가 포함된 트랙과 키 값이 알려진 경우:```
SEEK <실린더/헤드 번호>
SEARCH KEY EQUAL <키 값>
TIC *-8 일치하지 않으면 다시 검색
READ DATA <버퍼>
```
TIC(채널 내 전송)는 일치하는 키가 있는 레코드(또는 트랙의 끝)가 발견될 때까지 채널 프로그램이 SEARCH 명령으로 분기하도록 한다. 일치하는 키가 있는 레코드가 발견되면 DASD 컨트롤러는 채널 상태에 상태 수정자를 포함하여 채널이 TIC CCW를 건너뛰도록 한다. 따라서 채널 프로그램은 분기하지 않으며 채널은 READ 명령을 실행한다.[9]
블록된 레코드의 경우:```
SEEK <실린더/헤드 번호>
SEARCH KEY HIGH OR EQUAL <키 값>
TIC *-8 높거나 같지 않으면 다시 검색
READ DATA <버퍼>
```
''블록된'' 레코드(블록당 둘 이상의 레코드)의 경우, ''기록된 키''는 해당 블록 내에서 가장 높은 키와 동일해야 하며(그리고 레코드는 키 시퀀스에 있어야 함) 위와 같은 채널 프로그램이 사용된다.[9]
데이터 세트가 트랙 또는 실린더로 할당되고 요청된 레코드를 찾지 못하면, 채널 프로그램은 "레코드를 찾을 수 없음" 상태를 반환하며 종료된다. 경우에 따라 시스템 소프트웨어는 애플리케이션 프로그램을 중단하지 않고 트랙 또는 실린더 번호를 업데이트하고 I/O 작업을 ''다시 실행''할 수 있다.[9]
레코드가 포함된 트랙과 키 값을 알 수 없는 경우:```
SEEK
SEARCH KEY EQUAL
TIC *-8
READ DATA
```
TIC (채널 내 전송)는 일치하는 키를 가진 레코드가 발견될 때까지 (또는 트랙의 끝에 도달할 때까지) 직전의 SEARCH 명령으로 분기하는 CCW이다. 키가 일치하는 레코드를 찾으면 분기하지 않고 다음 READ 명령을 실행하게 된다.[16]
5. 가상 기억 장치와 채널 프로그램
대부분의 시스템에서 채널은 실제 주소를 사용하는 반면, 채널 프로그램은 가상 주소를 사용한다.[10][17] 운영 체제는 채널 프로그램을 실행하기 전에 입출력 슈퍼바이저(IOS)를 통해 가상 주소를 실제 주소로 변환해야 한다.[10] 입출력 연산에 사용될 데이터를 포함하는 페이지는 실제 메모리에 고정(페이지 고정)된다.[10][17] 채널 프로그램은 복사되며, I/O 연산이 시작되기 전에 모든 가상 주소는 실제 주소로 대체된다. 연산이 완료되면 페이지는 고정 해제된다.[10]
페이지 고정 및 고정 해제는 CPU 비용이 많이 드는 프로세스이므로, CPU 비용을 줄이기 위해 장기 페이지 고정이 사용되는 경우가 있다.[10] 이 경우, 각 I/O 연산 주변에서 고정하고 해제하는 대신 응용 프로그램의 수명 동안 가상 메모리가 페이지 고정된다. 장기 페이지 고정을 사용할 수 있는 프로그램의 예로는 Db2가 있다.[10]
장기 페이지 고정의 대안은 모든 데이터 버퍼를 포함하여 전체 응용 프로그램을 기본 기억 장치의 "선호" 영역으로 이동하는 것이다. 이는 MVS/370에서 z/OS 운영 체제를 통해 특별한 SYSEVENT를 통해 수행되며, 여기서 응용 프로그램은 먼저 "선호하지 않는" 영역에서 스왑 및 페이지 외부 저장소로 스왑 '''아웃'''되고, "선호" 영역으로 스왑 '''인'''된다(SYSEVENT TRANSWAP). 그 후, 응용 프로그램은 다른 특별한 SYSEVENT(SYSEVENT DONTSWAP)에 의해 "스왑 불가"로 표시될 수 있다. 이러한 응용 프로그램이 정상적으로 또는 비정상적으로 종료될 때마다, 운영 체제는 이미 수행하지 않은 경우 응용 프로그램을 대신하여 또 다른 특별한 SYSEVENT를 암묵적으로 발행한다(SYSEVENT OKSWAP).[10]
6. 채널 입출력을 이용한 부팅
시스템 부트스트랩(IPL) 과정은 채널에 의해 수행된다.[11] CPU는 암시적 시작 입출력(SIO) 명령어, 위치 0의 암시적 채널 주소 워드(CAW), 그리고 위치 0에 있는 읽기 IPL의 연산 코드를 가진 암시적 채널 명령 워드(CCW)를 통해 이 과정을 부분적으로 시뮬레이션한다.[11]
암시적 읽기 IPL CCW는 선택된 IPL 장치의 첫 번째 블록을 위치 0의 24바이트 데이터 영역으로 읽고, 채널은 CCW인 두 번째 및 세 번째 이중 워드로 계속된다. 이 채널 프로그램은 시스템 로딩 소프트웨어의 첫 번째 부분을 메인 스토리지의 다른 위치에 로드한다. 첫 번째 이중 워드에는 IPL 종료 시 가져올 때 CPU가 위치 8의 CCW에 의해 읽힌 IPL 텍스트(부트스트랩 로더)를 실행하게 하는 PSW가 포함되어 있다.[11] IPL 텍스트는 운영 체제의 Nucleus를 찾아 로드하고 제어를 전송하며, Nucleus는 필요한 초기화를 수행하거나 시작한 다음 정상적인 OS 작업을 시작한다.
이 IPL 개념은 장치 독립적이다. 카드 덱, 자기 테이프 또는 직접 접근 저장 장치(DASD) (예: 디스크, 드럼)에서 IPL이 가능하다. CPU가 시뮬레이션하는 읽기 IPL(X'02') 명령어는 카드 리더에서는 읽기 EBCDIC 선택 스태커 1 읽기 명령이고 테이프 매체에서는 읽기 명령(본질적으로 순차 접근 방식)이지만, DASD에서는 특별한 읽기-IPL 명령이다.
DASD 컨트롤러는 X'02' 명령을 수락하고 실린더 X'0000' 헤드 X'0000'으로 검색하고 인덱스 지점(즉, 트랙 디스크립터 레코드(R0) 바로 뒤)으로 건너뛴 다음 읽기 IPL 명령을 읽기 데이터(X'06') 명령인 것처럼 처리한다. DASD에서 IPL 텍스트는 실린더 X'0000', 트랙 X'0000', 레코드 X'01'(24바이트)과 실린더 X'0000', 트랙 X'0000', 레코드 X'02'(상당히 크며, 3,000바이트보다 약간 더 큼)에 포함되어 있다. VTOC는 항상 실린더 X'0000', 트랙 X'0000', 블록 X'03'에 위치한다.
채널 I/O 방식 시스템에서는 부트의 첫 번째 단계에서 작은 채널 프로그램을 메모리에 로드하는 처리가 수행되며, 해당 채널 프로그램을 실행하여 부트 프로그램을 주 기억 장치에 로드한다. 해당 채널 프로그램이 완료되면 CPU에 인터럽트가 전송되고, 로드된 부트 프로그램이 실행된다.
참조
[1]
서적
Datapro Reports on Data Communications
McGraw-Hili
April 1990
[2]
웹사이트
IBM Archives: 709 Data Processing System
http://www-03.ibm.co[...]
03.ibm.com
2003-01-23
[3]
웹사이트
IBM Archives: 7090 Data Processing System (continued)
http://www-03.ibm.co[...]
03.ibm.com
1958-12-30
[4]
서적
A Guide to the IBM 3033 Processor Complex, Attached Processor Complex, and Multiprocessor Complex of System/370
https://bitsavers.or[...]
IBM
1979-04
[5]
간행물
SCSI Forum
Technology Forums
1986-10
[6]
문서
IBM System/370 Extended Architecture Principles of Operation, SA22-7085-0
http://bitsavers.org[...]
[7]
서적
Student Text: Introduction to IBM System/360 Architecture
http://www.bitsavers[...]
IBM Corporation
[8]
논문
Penetrating an Operating System: a Study of VM/370 Integrity
[9]
서적
IBM System/360 Component Descriptions: 2314 Direct Access Storage Facility and 2844 Auxiliary Storage Control
http://www.bitsavers[...]
IBM Corporation
[10]
서적
OS/VS2 MVS Overview
http://www.bitsavers[...]
[11]
문서
See System/370 Principles of Operation, GA22–7000–4, pp 54—55, Initial Program Loading; System/370 Extended Architecture is quite similar, although XA utilizes an "implied" Start Subchannel (SSCH) instead of an "implied" Start I/O.
[12]
웹사이트
709 Data Processing System
http://www-03.ibm.co[...]
IBM
2012-03-20
[13]
웹사이트
7090 Data Processing System
http://www-03.ibm.co[...]
IBM
2012-03-20
[14]
서적
Student Text: Introduction to IBM System/360 Architecture
http://www.bitsavers[...]
IBM Corporation
[15]
논문
Penetrating an Operating System: a Study of VM/370 Integrity
2012-03-06
[16]
서적
IBM System/360 Component Descriptions: 2314 Direct Access Storage Facility and 2844 Auxiliary Storage Control
http://www.bitsavers[...]
IBM Corporation
[17]
서적
OS/VS2 MVS Overview
http://www.bitsavers[...]
[18]
문서
채널, 《글로벌 세계 대백과》
[19]
웹인용
IBM Archives: 709 Data Processing System
http://www-03.ibm.co[...]
03.ibm.com
2014-01-22
[20]
웹인용
IBM Archives: 7090 Data Processing System (continued)
http://www-03.ibm.co[...]
03.ibm.com
2014-01-22
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com