제 3 장 운영체제와 입출력 방식 Section 1 입출력 기능 Section 2 입출력 방식 Section 3 입출력 버퍼링
장치 관리자: Section 1 입출력 기능 데이터 입출력을 위한 모든 컴퓨터의 입출력 장치를 제어. 입출력장치의 할당(allocation), 분리(isolation), 공유(sharing) 기법을 관리, 입출력 장치와 시스템과의 인터페이스 기능을 제공 그림 3-1(a) 장치 관리자
장치 관리자의 기능 1. 블록단위 전송기능 ● 주변장치와 기억장치간의 블록단위 전송기능 ● 주변장치와 인터페이스를 통한 Section 1 입출력 기능 장치 관리자의 기능 ● 주변장치와 기억장치간의 블록단위 전송기능 ● 주변장치와 인터페이스를 통한 논리적, 물리적 특성의 일치 기능 ● 자원의 공유기능 1. 블록단위 전송기능 ● 에러의 발견 및 교정기능 ● 컴퓨터 본체와 주변장치간의 인터페이스 담당기능 ● 일반 사용자나 프로그래머가 하드웨어적인 부분을 신경 쓰지 않고 입출력 할 수 있는 기능
2. 논리적, 물리적 특성의 일치 기능 코드를 사용하므로 이러한 코드를 일치 컴퓨터 본체간에 불 일치되는 속도차이를 일치 Section 1 입출력 기능 2. 논리적, 물리적 특성의 일치 기능 ● 코드의 일치 : 각 장치간에 서로 다른 형식의 코드를 사용하므로 이러한 코드를 일치 ● 속도 차이의 일치 : 저속인 주변장치 속도와 고속인 컴퓨터 본체간에 불 일치되는 속도차이를 일치 ● 블록 크기의 일치 : 운영체제 수준에서 취급하는 물리적인 블록의 크기와 사용자 수준에서 취급하는 논리적인 블록의 크기를 일치 ● 입출력 명령의 일치 : 일반 사용자가 사용하는 논리적 입출력 명령을 운영체제의 파일 시스템이 담당하는 물리적인 명령 으로 사상 ● 가상 입출력 장치의 구현 : 버퍼링, 스풀링, 디스크 캐시 개념을 이용하여 컴퓨터 본체와 주변장치간의 효율적인 입출력이 가능
2. 논리적, 물리적 특성의 일치 기능 본체(주 기억 장치)와 주변장치의 특성비교 Section 1 입출력 기능 구분 그림3-1(b) 논리적 특성과 물리적 특성간의 일치기능 본체(주 기억 장치)와 주변장치의 특성비교 구분 주 기억 장치 주변 장치 ∙ 장치 구성 ∙ 동작 속도 ∙ 데이터 구성단위 ∙ 에러 발생률 ∙ 입출력 명령 ∙ 전자적인 장치 ∙ 매우 고속 ∙ 워드 단위 ∙ 낮음 ∙ 물리적 입출력 명령 ∙ 전기 기계적인 장치 ∙ 매우 저속 ∙ 문자 단위 ∙ 높음 ∙ 논리적 입출력 명령
3. 자원의 공유 기능 ● 여러 프로세스간에 자원을 할당하고 회수하는 등 자원관리를 담당. Section 1 입출력 기능 3. 자원의 공유 기능 ● 여러 프로세스간에 자원을 할당하고 회수하는 등 자원관리를 담당. ● 멀티플렉싱에 의해 한 대의 입출력 채널을 서로간에 공유. ● 보조기억 장치들은 스풀링 개념에 의해 다수의 프로세스들 의해 공유 ● 다중 프로그래밍이나 다중처리를 위해서도 CPU나 주기억 장치 등은 여러 프로세스에 의해서 공유
컴퓨터 입출력 방식 1. 직접 입출력 인터럽트 방식 입출력 입출력 채널(I/O channel) 1) 폴링 방식 직접 입출력 Section 1 입출력 기능 컴퓨터 입출력 방식 ● 직접 입출력 : 폴링 방식 입출력. 인터럽트 방식 입출력 ● 간접 입출력 : 직접 기억 장치 액세스(DMA) 입출력 채널(I/O channel) 1. 직접 입출력 1) 폴링 방식 직접 입출력 ● CPU가 프로그램 수행 중 입출력 명령을 만나면, 직접 CPU가 나서서 입출력을 실행하는 방법. ● 입출력 연산의 종료시점을 결정하고 주 기억 장치와 장치 제어기 간의 데이터 전송을 CPU가 책임지는 방법. ● 입출력장치가 연산을 종료하는 시점을 결정하기 위해 장치 구동기 소프트웨어가 장치 제어기 상태 레지스터를 끊임없이 폴링(polling)
1. 직접 입출력 1) 폴링 방식 직접 입출력 데이터 입력 시 Section 2 입출력 기능 그림 3-2(a) 폴링 방식의 직접 입출력(read)
1. 직접 입출력 1) 폴링 방식 직접 입출력 데이터 입력 수행 단계 ① 응용 프로세스가 읽기 read() 연산을 요청. Section 2 입출력 기능 1. 직접 입출력 1) 폴링 방식 직접 입출력 데이터 입력 수행 단계 ① 응용 프로세스가 읽기 read() 연산을 요청. ② 장치 구동기는 장치가 쉬고 있는지를 결정하기 위해서 상태 레지스터를 검사. 만약 장치가 바쁘면 장치 구동기는 장치가 유휴상태(idle status)가 되기를 기다림. ③ 장치 구동기는 읽기 read() 명령을 장치 제어기의 명령 레지스터에 저장하여 장치를 시작시킴. ④ 장치 구동기는 장치가 읽기 연산을 완료하기를 기다리는 동안 반복적으로 상태 레지스터를 검사. =>polling ⑤ 장치 구동기는 장치 제어기 데이터 레지스터의 내용을 사용자 프로세스 공간으로 복사.
1. 직접 입출력 1) 폴링 방식 직접 입출력 데이터 출력 시 Section 2 입출력 기능 그림 3-2(b) 폴링 방식의 직접 입출력(write)
1. 직접 입출력 1) 폴링 방식 직접 입출력 데이터 출력 수행 단계 ① 응용 프로세스가 쓰기 write() 연산을 요청. Section 2 입출력 기능 1. 직접 입출력 1) 폴링 방식 직접 입출력 데이터 출력 수행 단계 ① 응용 프로세스가 쓰기 write() 연산을 요청. ② 장치 구동기는 장치가 쉬고 있는지를 결정하기 위해서 상태 레지스터를 검사. 만약 장치가 바쁘면 장치 구동기는 장치가 유휴상태(idle status)가 되기를 기다림. ③ 장치 구동기는 사용자 기억장치 공간에서 장치 제어기의 데이터 레지스터로 데이터를 복사. ④ 장치 구동기는 쓰기 write() 명령을 제어기 명령레지스터에 저장하여 장치를 시작시킴. ⑤ 장치 구동기는 장치가 그의 연산을 완료하기를 기다리는 동안 반복적으로 상태 레지스터를 검사. =>polling
1. 직접 입출력 2) 인터럽트 방식 직접 입출력 ● 인터럽트를 컴퓨터 하드웨어에 도입하는 이유: Section 2 입출력 기능 1. 직접 입출력 2) 인터럽트 방식 직접 입출력 ● 인터럽트를 컴퓨터 하드웨어에 도입하는 이유: 장치 구동기 소프트웨어가 제어기 상태 레지스터를 계속 polling 할 필요성을 제거, 연산이 완료되었을 때 장치제어기가 자동으로 장치 관리자에게 완료사실을 통보 . ● 인터럽트를 이용한 입출력에서 장치관리자 4가지 기능 - 장치 구동기의 연산 초기화 - 장치상태 테이블(device status table) 관리 - 인터럽트 처리기(interrupt handler) 관리 - 장치 처리기(device handler) 관리
1. 직접 입출력 2) 인터럽트 방식 직접 입출력 데이터 입력 시 Section 2 입출력 기능 그림 3-3 인터럽트 방식의 간접 입출력(read)
2) 인터럽트 방식 간접 입출력 데이터 입력 수행 단계 ① 응용 프로세스가 읽기 read() 연산을 요청. Section 2 입출력 기능 2) 인터럽트 방식 간접 입출력 데이터 입력 수행 단계 ① 응용 프로세스가 읽기 read() 연산을 요청. ② 장치 구동기는 상태 레지스터를 검사. 만약 장치가 바쁘면 장치 구동기는 장치가 유휴상태가 되기를 기다림. ③ 장치 구동기는 읽기 read() 명령을 장치 제어기의 명령 레지스터에 저장하여 장치를 시작시킴. ④ 장치 구동기는 연산 초기화가 종료할 때 장치 구동기가 시작시킨 연산과 관련된 정보를 장치 상태 테이블(device status table)에 저장. 장치 관리자는 프로세스 관리자의 스케줄러를 호출하여 스케줄링 된 다른 프로세스에 CPU를 사용하게 함. 그런 다음 장치관리자는 종료. ⑤ 입력연산을 종료하면 CPU에 인터럽트를 걸어 인터럽트 처리기 실행. ⑥ 인터럽트 처리기는 어떤 장치가 인터럽트를 걸었는지 결정하고 해당 장치의 장치 처리기로 분기. ⑦ 장치 처리기는 장치 상태 테이블에서 보류된 입출력 상태정보를 추출. ⑧ 장치 처리기는 제어기의 데이터 레지스터내용을 사용자 프로세스 공간으로 복사. ⑨ 장치 처리기는 응용 프로세스에게 제어를 반환.
2. 간접 입출력 1) DMA(direct memory access) 디스크 제어기에 의한 DMA 전송과정 Section 2 입출력 기능 2. 간접 입출력 1) DMA(direct memory access) 디스크 제어기에 의한 DMA 전송과정 ● 디스크제어기가 입출력 장치로부터 자신의 버퍼에 모든 블록을 읽음. ● DMA에 의해 지정된 주소의 주기억장치에 최초 바이트나 워드가 복사됨 ● DMA의 기억장치 주소는 증가하고, 전송된 바이트수 만큼 카운터는 감소 ● DMA카운터가 0이 될 때 까지 반복. ● 카운터가 0이 되면 디스크제어기가 인터럽트를 발생시켜 CPU에 완료사실을 보고.
Section 2 입출력 기능 2. 간접 입출력 DMA에 의한 데이터 입출력 예 그림 3-5 DMA에 의한 입출력 예
2. 간접 입출력 DMA에 의한 데이터 입출력 수행 단계 ① 프로그램 수행도중 CPU가 입출력 명령을 만남. Section 2 입출력 기능 2. 간접 입출력 DMA에 의한 데이터 입출력 수행 단계 ① 프로그램 수행도중 CPU가 입출력 명령을 만남. ② CPU는 DMA에게 입출력 명령(기억장치내의 데이터의 위치, 개수, I/O 명령의 종류 등이 전달). ③ CPU와 독립적으로 DMA는 기억장치의 데이터를 직접 입출력. 이때, CPU는 입출력 명령을 내린 후 다른 프로그램을 수행. ④ 주기억 장치와 주변장치 사이에 실제의 데이터 전송. ⑤ DMA는 입출력 완료 시 CPU에게 인터럽트로 완료사실을 보고.
2. 간접 입출력 1) DMA(direct memory access) 직접 입출력과의 차이 Section 2 입출력 기능 2. 간접 입출력 1) DMA(direct memory access) 직접 입출력과의 차이 DMA에서는 CPU 레지스터를 이용하지 않고, CPU의 사이클을 훔쳐(cycle steal) 입출력을 수행한다는 점. 그림 3-6 사이클 스틸의 개념
2. 간접 입출력 2) 입출력 채널 ● 가장 완벽한 입출력 방식. ● 입출력은 독립된 입출력 프로세서인 채널이 대신하고, Section 2 입출력 기능 2. 간접 입출력 2) 입출력 채널 ● 가장 완벽한 입출력 방식. ● 입출력은 독립된 입출력 프로세서인 채널이 대신하고, 입출력을 수행하는 동안 CPU는 다른 프로그램을 실행. ● CPU의 효율을 향상시킬 수 있고, 다중 프로그래밍이 가능해 짐. ● PPU(peripheral processing units) 또는 채널 그 자체가 하나의 CPU와 비슷한 성능을 가지는 프로세서.. CPU와 기억장치를 공유. 범용 레지스터는 없고 명령어 주소 레지스터, 데이터 카운터 등 내부에 몇 개의 레지스터를 포함. ● 한 컴퓨터 시스템에는 최대 8대의 채널을 둘 수 있고, 채널당 최대 8대의 주변장치들을 연결가능.
2. 간접 입출력 2) 입출력 채널 입출력 채널의 종류 ● 선택(selector) 채널 Section 2 입출력 기능 2. 간접 입출력 2) 입출력 채널 입출력 채널의 종류 ● 선택(selector) 채널 한 순간에 하나의 주변 장치만을 선택하여 연결하여 처리하고 주로 디스크나 드럼과 같이 고속인 장치들을 연결. ● 멀티플렉서(multiplexer) 채널 일시에 여러 장치들을 연결하여 처리하고 주로 터미널, 프린터 같은 저속의 장치들을 연결. ● 블록 멀티플렉서(block multiplexer) 채널 주로 블록단위로 입출력 하는 테이프 같은 장치와 연결하여 처리하고,다수의 주변장치들을 멀티플렉싱하며 동시에 처리.
Section 2 입출력 기능 2. 간접 입출력 2) 입출력 채널 그림 3-7 채널의 종류와 연결방법
2. 간접 입출력 2) 입출력 채널 채널의 구조 ● 채널 명령어 : CCW(channel command word) Section 2 입출력 기능 2. 간접 입출력 2) 입출력 채널 채널의 구조 ● 채널 명령어 : CCW(channel command word) 명령 코드 : 데이터 전송 명령(read, write등), 장치 제어 명령 (page skip, rewind등), 분기 명령(go to 등) 데이터 주소 : 입출력이 수행될 데이터의 기억장치내의 위치 표시. 플래그 비트 : 특수한 용도. 카운트 : 데이터의 개수. 그림 3-8 채널명령어의 구조
2. 간접 입출력 2) 입출력 채널 ● 채널 상태 워드 : CSW(channel statue word) Section 2 입출력 기능 2. 간접 입출력 2) 입출력 채널 ● 채널 상태 워드 : CSW(channel statue word) 보호키 : 채널을 보호하기 위한 보호 키. CCW의 주소 : 다음에 수행될 명령어의 주소. 상태 필드 : 채널의 상태(수행 중, 입출력의 종료, 입출력 에러발생 등). 잔여 카운트 필드 : 아직 수행되지 않는 CCW의 수. 그림 3-9 CSW의 구조
1. 버퍼링의 개요 버퍼링 버퍼를 이용하는 이유 ● 만약 CPU가 문자나 데이터 하나 하나를 읽을 때 마다 Section 3 입출력 버퍼링 1. 버퍼링의 개요 버퍼링 ● 한 작업의 계산과 함께 입출력을 동시에 수행하는 방법. ● 데이터를 입력한 후, CPU가 이를 연산하려고 하는 순간, 입력 장치는 바로 다음 입력을 시작. ● CPU와 입력 장치는 동시에 동작되며, 양쪽의 속도가 비슷하 다면 버퍼이용이 효율적. 버퍼를 이용하는 이유 ● 만약 CPU가 문자나 데이터 하나 하나를 읽을 때 마다 채널에게 I/O 명령을 행한다면 매우 복잡하고 많은 작업량 이 필요함. ● 따라서 버퍼를 사용하여 문자나 데이터를 미리 읽어 온 후, 필요할 때 마다 사용하게 한다면 훨씬 효율적.
1. 버퍼링의 개요 버퍼링의 종류 ● 단일 버퍼링: 한 개의 버퍼를 이용하는 경우 Section 3 입출력 버퍼링 1. 버퍼링의 개요 버퍼링의 종류 ● 단일 버퍼링: 한 개의 버퍼를 이용하는 경우 ● 이중 버퍼링: 두 개의 버퍼를 이용하는 경우 ● 환형 버퍼링(다중 버퍼링): 많은 버퍼들이 원형을 이루며 대기하고 있는 경우 ● CPU가 평균적으로 입출력 장치보다 속도가 아주 빠르면, 버퍼는 항상 비어 있기 때문에 버퍼링을 사용할 필요가 없음. ● CPU는 입출력 장치보다 속도가 빠르기 때문에 프로그램의 실행속도는 CPU의 속도에 의해서가 아니라, 입출력 장치의 속도에 의하여 제한. ● 결과적으로 버퍼링은 충분하지는 않지만 어느 정도 도움이 될 수 있음.
Section 3 입출력 버퍼링 1. 버퍼링의 개요 그림2-10 하드웨어 버퍼링의 개요
2. 단일 버퍼링 ● 한 개의 버퍼를 사용하는 경우로 CPU는 채널이 버퍼를 채울 동안 기다리거나 다른 프로그램을 실행. Section 3 입출력 버퍼링 2. 단일 버퍼링 ● 한 개의 버퍼를 사용하는 경우로 CPU는 채널이 버퍼를 채울 동안 기다리거나 다른 프로그램을 실행. ● CPU는 버퍼가 채워져 있을 때만 버퍼의 데이터를 비울 수 있고, 채널은 버퍼가 비어있을 때만 버퍼에 데이터를 채울 수 있음. ● 빠른 CPU와 늦은 I/O 장치의 속도를 보완하여 항상 바쁘게 하 고자 하는 것으로, 한 레코드가 읽혀 CPU가 그것에 대한 연산을 시작함과 동시에 채널은 I/O 장치로부터 다음에 필요한 레코드를 미리 읽어서 주기억 장치에 저장하는 일련의 과정. ● 주기억 장치의 일부를 버퍼로 사용. ● CPU와 I/O 장치간의 속도 차이를 어느 정도 극복. ● 버퍼가 채워지거나 비워지는 동안 CPU는 다른 일을 할 수 없는 경우 발생
2. 단일 버퍼링 단일 버퍼링에서 데이터 입출력 예 Section 3 입출력 버퍼링 그림 3-11 단일 버퍼링에서 데이터 입출력 예
2. 단일 버퍼링 단일 버퍼링에서 데이터 입출력 단계 ① CPU는 버퍼에 출력 데이터를 채움 Section 3 입출력 버퍼링 2. 단일 버퍼링 단일 버퍼링에서 데이터 입출력 단계 ① CPU는 버퍼에 출력 데이터를 채움 이때, 채널은 버퍼가 채워질 때 까지 기다림. ② 버퍼가 다 채워지면 채널에게 명령하고, CPU는 기다리거나 다른 일을 수행. ③ 채널은 CPU와 독립적으로 버퍼를 비움 ④ 채널은 버퍼를 다 비운 후에 CPU에 보고.
3. 이중 버퍼링 ● 두 개의 버퍼를 이용하여 단일 버퍼링의 단점을 보완하고 입출력과 CPU의 처리 성능을 높이는 방법. Section 3 입출력 버퍼링 3. 이중 버퍼링 ● 두 개의 버퍼를 이용하여 단일 버퍼링의 단점을 보완하고 입출력과 CPU의 처리 성능을 높이는 방법. ● CPU는 더 이상 입출력에 관여하지 않고, 다른 버퍼를 채우 거나 또 다른 일을 할 수 있으므로 CPU의 효율이 증대. ● 두 개의 버퍼를 사용하므로 입출력 작업과 처리 작업이 동시에 진행될 수 있으나 기억장치의 낭비가 있을 수 있음. ● 채널이 데이터를 첫 번째 버퍼에 저장하는 동안에 CPU는 두 번째 버퍼에 있는 데이터를 처리하고, 이 데이터의 처리가 끝나면, 첫 번째 버퍼의 데이터를 처리. ● 1개의 버퍼를 사용할 때보다 수행 시간이 적게 걸림. ● 한 버퍼를 채우는 CPU 쪽의 속도와 비우는 채널 쪽의 속도가 비슷하다면, 한 버퍼를 채우는 동안 다른 버퍼를 비울 수 있으므로 최적의 성능 얻음. ● 둘 중에 한쪽의 속도가 빠르다면 항상 버퍼는 비어 있거나 꽉 차있음.
Section 3 입출력 버퍼링 3. 이중 버퍼링 이중 버퍼링에서 데이터 입출력 예 그림 3-12 이중 버퍼링의 예
3. 이중 버퍼링 이중 버퍼링에서 데이터 입출력 단계 ① CPU가 버퍼1을 채움. Section 3 입출력 버퍼링 3. 이중 버퍼링 이중 버퍼링에서 데이터 입출력 단계 ① CPU가 버퍼1을 채움. ② 다 채우면 CPU는 채널에게 입출력을 명령. ③ 동시에 CPU는 곧바로 버퍼2를 채움. ④ 채널은 버퍼1을 비움. ⑤ 채널은 버퍼1를 다 비운 사실을 CPU에게 인터럽트를 걸어 보고. ⑥ CPU는 다시 버퍼1를 채우고 채널에 입출력을 명령하면 채널은 버퍼1를 비움.
4. 환형 버퍼링 ● 환형 큐를 사용하여 여러 개의 버퍼를 원형으로 구성한 입출력 방식. Section 3 입출력 버퍼링 4. 환형 버퍼링 ● 환형 큐를 사용하여 여러 개의 버퍼를 원형으로 구성한 입출력 방식. ● CPU와 채널은 동시에 자신의 일을 독립적으로 수행. ● 환형 버퍼링은 여러 개의 버퍼를 사용하므로 기억장치 낭비요인 버퍼의 수가 성능을 좌우하는 중요한 요소. ● 버퍼의 수가 많아지면 : 기억장치의 낭비. ● 버퍼의 수가 적으면 : 버퍼를 기다리는 프로세스의 수가 많아짐.
Section 3 입출력 버퍼링 4. 환형 버퍼링 환형 버퍼링에서 데이터 입출력 예 그림 3-11 환형 버퍼링의 예
4. 환형 버퍼링 버퍼의 수 결정 ● 버퍼를 사용하는 프로세스가 계산 위주 Section 3 입출력 버퍼링 4. 환형 버퍼링 버퍼의 수 결정 ● 버퍼를 사용하는 프로세스가 계산 위주 (compute-Bound, CPU 바운드)인가 IO 위주 (IO-bound, 채널 바운드)인가를 조사하여 결정. ● CPU 바운드: CPU에 의한 연산이 많고 입출력 회수가 적어 버퍼 사용비율이 적은 연산 위주의 프로세스 ● 채널 바운드: CPU에 의한 연산이 적고 입출력 회수가 많아 버퍼 사용비율이 많은 입출력 위주의 프로세스 환형 버퍼링은 버퍼 사용을 극대화하기 위해 CPU 바운드 프로세스와 채널 바운드 프로세스를 적당하게 혼합한 CPU 스케줄링이 필요. 버퍼의 용량을 고려하여 다중 프로그래밍의 정도를 조절함으로써 시스템의 성능을 높일 수 있도록 함.
Section 3 입출력 버퍼링 5. 스풀링(SPOOLing) 스풀링 개요 ● 디스크의 일부를 스풀 (simultaneous peripheral operation on-line): 공간이라고 부르는 매우 큰 버퍼처럼 사용하는 방식 ● 미리 입력 장치로부터 디스크로 레코드나 블록을 읽어 들이고, 출력 장치로 레코드나 블록을 출력 직접 출력하기 보다는 디스크상에 출력 파일로 저장하여 나중에 출력할 수 있도록 함. ● 디스크를 스풀 공간으로 사용 이유: 입출력장치와 CPU의 속도차 해소
Section 3 입출력 버퍼링 5. 스풀링(SPOOLing) 스풀링 개요 그림 3-14 스풀링의 개념
5. 스풀링(SPOOLing) 버퍼링과 스풀링의 차이점 버퍼링 스풀링 ∙하드웨어적 구현 ∙한 작업에 대한 입출력과 계산 Section 3 입출력 버퍼링 5. 스풀링(SPOOLing) 버퍼링과 스풀링의 차이점 버퍼링 스풀링 ∙하드웨어적 구현 ∙한 작업에 대한 입출력과 계산 중복 기능 ∙스택 또는 큐 방식 입출력 수행 ∙단일 사용자 ∙버퍼의 위치는 주기억 장치 ∙소프트웨어적 구현 ∙여러 작업에 대한 입출력과 계산 중복 가능 ∙큐 방식 입출력 수행 ∙다중 사용자 ∙스풀의 위치는 디스크
1. 폴링과 인터럽트의 비교 폴링 ● CPU가 각각의 주변장치들을 연속적으로 순환하며 Section 4 입출력과 인터럽트 1. 폴링과 인터럽트의 비교 폴링 ● CPU가 각각의 주변장치들을 연속적으로 순환하며 인터럽트 요구가 있는가, 없는가를 수시로 체크하는 방법으로 주변장치의 상태를 보존할 필요가 없음. ● 다수의 터미널을 운영하는 대화형 시스템에서는 폴링 방법 사용 ● 프로그램 제어하의 직접 입출력 방식에서는 폴링 방식으로 운영하여 CPU가 직접 입 출력하는 대표적인 예. ● CPU가 주변장치를 연속하여 감시하는 폴링 방식에 의하여 입출력 이 수행되므로, CPU의 시간이 낭비되고 CPU의 처리 효율이 낮아짐. 그림 3-15 폴링 방법
1. 폴링과 인터럽트의 비교 인터럽트 ● 인터럽트는 단순히 주변장치에서 CPU로 들어오는 보고만을 취하는 방법으로 CPU는 Section 4 입출력과 인터럽트 1. 폴링과 인터럽트의 비교 인터럽트 ● 인터럽트는 단순히 주변장치에서 CPU로 들어오는 보고만을 취하는 방법으로 CPU는 주변장치의 현재 상태를 스택이나 장치 상태 테이블에 보존. ● 폴링과는 반대로 CPU가 각 주변장치 상태를 일일이 파악하지 않고 입출력 요구가 있을 때만 CPU가 개입. ● 인터럽트가 발생하면 CPU의 상태를 저장하고, 인터럽트서비스 루틴에 의해 이를 처리하게 한 후 인터럽트가 완료되면 상태를 복구. ● 주변장치가 데이터 전송을 위한 준비가 되면 CPU에게 인터럽트를 요구. ● CPU가 인터럽트를 감지하면 수행 중이던 작업을 중지하고 데이터 전송을 처리하기 위하여 인터럽트 서비스 루틴으로 분기하여 데이터 전송을 수행.
Section 4 입출력과 인터럽트 2. 인터럽트 구조 및 처리 인터럽트 처리과정 그림 3-16 인터럽트 처리과정
2. 인터럽트 구조 및 처리 인터럽트 단계별 처리 내용 (1) 중앙처리 장치가 프로그램을 실행하는 도중 인터럽트가 발생 Section 4 입출력과 인터럽트 2. 인터럽트 구조 및 처리 인터럽트 단계별 처리 내용 (1) 중앙처리 장치가 프로그램을 실행하는 도중 인터럽트가 발생 (2) 운영 체제의 커널은 현재까지의 프로그램수행 상태에 관한 모든 정보를 주기억 장치의 일정 구역에 저장(인터럽트 처리). (3) 인터럽트 벡터에서 서비스 루틴의 주소를 찾아, 해당 인터럽트에 대처하기 위한 인터럽트 서비스 루틴으로 제어를 이동시켜서 인터럽트를 해결(인터럽트 서비스). (4) 인터럽트 서비스 루틴의 수행이 완료되면,인터럽트가 발생했던 최초의 지점으로 복귀하여 (1)에서 저장해 놓았던 상태정보를 복구 (5) 중단된 시점부터 나머지 프로그램을 계속 수행.
3. 인터럽트의 종류 1) 입출력 인터럽트 입출력 도중 에러 등이 발생하였을 경우 CPU에 대하여 요청하는 인터럽트. Section 4 입출력과 인터럽트 3. 인터럽트의 종류 ● 입출력(I/O) 인터럽트 ● 외부(external) 인터럽트 ● 수퍼바이져 호출(SVC:supervisor call) ● 프로그램 검사(program check) 인터럽트 ● 기계 검사(machine check) 인터럽트 ● 재시작(restart) 인터럽트 1) 입출력 인터럽트 ● 해당 입출력 하드웨어가 주어진 입출력 동작을 완료하였거나, 입출력 도중 에러 등이 발생하였을 경우 CPU에 대하여 요청하는 인터럽트. ● 불법 입출력 명령이나 채널에게 지시하는 입출력 시작(SIO), 입출력테스트(TIO), 입출력 정지(HIO)등도 포함.
3. 인터럽트의 종류 2) 외부 인터럽트 3) 슈퍼바이져 호출(SVC) 프로그램의 외적인 상황에서 일어나며, 프로그램과 Section 4 입출력과 인터럽트 3. 인터럽트의 종류 2) 외부 인터럽트 ● CPU의 하드웨어 신호에 의해서 발생하고 프로그램의 외적인 상황에서 일어나며, 프로그램과 비 동기적인 인터럽트로서, 입출력 장치, 타이밍 장치, 전원 등 외부적인 요인으로 발생하는 인터럽트. ● 시스템의 타이머에서 프로세스들의 CPU 사용 시간이 만료된 경우,조작자가 콘솔상에서 인터럽트키(INT)를 누른 경우, 다중 처리 시스템에서 다른 CPU로부터 신호가 도착한 경우 등. 3) 슈퍼바이져 호출(SVC) ● 소프트웨어 인터럽트라고도 하며, 프로그램 명령어 상에서 신호가 발생하고, 명령어의 수행에 의해 발생하는 인터럽트로서 특수한 호출 명령으로 프로그래머에 의해 프로그램상의 원하는 위치에서 인터럽트를 발생. ● 사용자 프로그램이 수행되는 과정에서 입출력 수행, 기억장치 할당,조작자의 개입 요구 등을 위해 실행중의 프로그램이 SVC 명령을 수행하는 경우에 발생.
3. 인터럽트의 종류 4) 프로그램 검사 인터럽트 5) 기계 검사 인터럽트 6) 재 시작 인터럽트 Section 4 입출력과 인터럽트 3. 인터럽트의 종류 4) 프로그램 검사 인터럽트 ● CPU의 하드웨어 신호에 의하여 발생하고, 프로그램 자체내 에서 발생하는 문제들에 의해 일어나며, 프로그램과 동기적인 인터럽트로서, 내부 인터럽트라고도 한다. 이것은 프로그램상 의 불법적인 명령이나, 데이터의 잘못사용으로 발생하는 인터럽트. =트랩(trap). ● 0으로 나누는 경우나, 보호된 기억장소의 침범, 불법적인 명령 어의 수행, 스택의 오버플로우, 언더플로우 같은 에러가 발생할 때. 5) 기계 검사 인터럽트 ● 컴퓨터 자체내의 기계적인 장애나 에러로 인하여 발생. 6) 재 시작 인터럽트 ● 조작가가 콘솔상에서 재 시작 버튼이나 CTRL+ALT+DEL키를 누른 경우 발생.
4. 트랩 트랩(trap): 현재 수행되는 명령어 이상이 있고 프로그램의 일정 지점에서 발생 Section 4 입출력과 인터럽트 4. 트랩 트랩(trap): 현재 수행되는 명령어 이상이 있고 프로그램의 일정 지점에서 발생 ● 프로세스가 사용자모드에 있고 특권명령어를 요구하는 연산을 수행하기를 원하면 프로세스는 트랩(trap) 명령어를 호출. ● CPU를 감독자 모드로 전환하고 신뢰된 코드를 수행하기 시작. 트랩의 원인 ● 부 정확한 데이터로 인해 명령어가 정확하게 실행될 수 없게 만들 때 (연산 오버플로우, 0으로 나누기 등) ● 보호 장치에 의해 보호되거나 금지된 동작을 실행하려고 시도할 때 (기억장치 보호 구역 침범, 사용자 모드에서 특권 명령의 실행 등) ● 실행할 명령이 없는 경우(할당되지 않는 동작 코드, 기억장치 범위를 벗어난 주소, 사용되고 있는 컴퓨터 환경에 없는 옵션형 장치들에 대한 명령 등)