I/O Hardware
I/O devices -> 모니터, 마우스 와 같이 입출력을 담당하는 장치
Common concepts
>Port – 포트번호와 연결
>Bus (daisy chain or shared direct access) - I/O 디바이스 끼리 연결을 도와줌
>Controller (host adapter) - I/O장치의 제어와 타이밍을 조절함
A Typical PC Bus Structure -> I/O 디바이스 구조
데이터를 주고받을 때 디바이스 안에 내장되어 있는 컨트롤러를 통해서 디바이스를 제어를 하고 PCI bus를 통해 전송함
Device Controller -> 디바이스 간의 통신을 도와줌
>I/O devices 구성요소
기계적인 요소
전기적인 요소 - > Device Controller라고 함
>The electronic component is the device controller
- 전기적인 요소를 Device Controller라고 함
>Controller’s tasks
들어오는 데이터를 디스크에 쓰는 역할을 하고 하드웨어적인 에러 컬렉션기능도 수행함
메인메모리를 사용하게끔 만들어줌
Direct I/O(메인메모리의 주소체계에 속하지 않는 주소체계인 I/O 포트 넘버를 사용하여 할당함 -> I/O 포트 넘버에 접근하기 위해서는 다른 방식이 필요함, 인텔프로세스에서 사용 중) -> I/O디바이스에서 데이터를 받아올 때 어떻게 해야할까?
-> 어떠한 주소를 가지고 데이터를 불러오게 해야함.
-> 표에 나와 있는 주소 값을 통해서 정보를 가지고 오는 동작을 진행할 수 있음.
Memory-Mapped I/O
->Direct I/O 방식과 반대되는 방식
->메인메모리의 주소체계와 I/O 디바이스의 주소체계를 하나로 통합해서 같이 사용하는 것
장점 : 하나로 통합해서 사용하기 때문에 주소 값 자체로 메인메모리 주소인지 I/O디바이스 주소인지 구분이 가능함 -> 일반적인 명령어를 사용하여 I/O디바이스에 접근이 가능함
I/O 디바이스 – I/O 디바이스에서 이벤트가 들어오면 Interrupt가 걸림
Polling vs. Interrupts
Polled I/O
-> I/O 디바이스에 변화가 있는지 지속적으로 감시를 하는 방식
-> CPU와 I/O 컨트롤러의 작업이 끝났는지 주기적으로 loop를 돌면서 전달을 반복하는 방시
-> 반복적으로 진행되기 때문에 상당히 비효율적임 -> 이에 따라 Interrupt이 나옴
-> 네트워크 장치에서 많이 사용
Interrupt-driven I/O
-> HW 컨트롤러가 자신의 상태가 바뀔 때마다 CPU에게 통보를 하는 방식
->Polling보다는 효율적임
단점
높은 처리량을 요구하는 I/O 장치에서는 오버헤드가 많아짐
>>키보드와, 마우스 같이 대기시간이 긴 장치에 대해서는 interrupt방식을 사용함
Interrupt-Driven I/O Cycle -> Interrupt 과정
앞에서 배움
Intel Pentium Processor Event-Vector Table
-> Interrupt 예제
Direct Memory Access(DMA)
-> 디스크가 데이터를 읽어서 메모리에 가져다 놓을 때 CPU가 계속해서 중재를 하게 되면 CPU가 하는 일이 많아지기 때문에 디스크 컨트롤러가 직접메모리에 올려놓는 방식
I/O 디바이스가 직접 메모리에 접근을 해서 데이터를 올려놓고 받아옴.
-> CPU의 개입 없이 주변장치에 데이터를 직접 전송할 수 있음(장점)
Interrupt 발생 횟수를 줄여주어 시스템 효율을 높여줌.
DMA 데이터 전송 과정
-> DMA 컨트롤러가 CPU memory bus를 통해서 CPU와 통신을 하고 있음.
DMA 컨트롤러는 PCI bus를 통해서 다른 I/O 장치와 통신할 수 있게 해줌
-> CPU가 명령을 DMA에게 주어서 수행하게 함
-> DMA가 CPU의 일을 대신해줌
DMA
DMA의 동작 모드
>Cycle stealing
- DMA 컨트롤러와 CPU가 동시에 bus를 사용하고자 할 때 속도가 빠른 CPU가 속도가 느린 DMA에게 bus 사용 우선순위를 주어서 빠른 입출력을 가능하게 하는 것
>Burst mode
- 전체 데이터 블록을 하나의 연속된 시퀀스로 전송을 하는 방식
- CPU로부터 전송 권한을 받아서 전송함 -> 블록 전송모드라고 말하기도 함
>>DMA는 각 디바이스가 I/O장치에 직접 접근을 가능하게 하는 것
Addressing in DMA -> DMA에서 사용하는 주소
-> Physical address 대부분 사용
-> Virtual address – 거의 사용x
Application I/O Interface
동일한 기기를 묶어서 동일하게 하드웨어기능을 수행 할 수 있게 명령어를 system call을 통해 내림. -> I/O 시스템 콜을 통해서 하드웨어를 제어함 -> 캡슐활 필요
-> 회사별로 구분이 없이 장치로만 인식해서 사용 가능하게 해줌
디바이스들을 분류할 수 있음 (읽어볼 것)
A Kernel I/O Structure -> 커널 입출력 구조(계층적 구조)
각각의 디바이스를 컨트롤러가 제어를 함
->여러 입출력 하드웨어들의 차이를 숨기고 간단한 표준 인터페이스로 제어를 가능하게 해서 상위의 커널 입출력 서브시스템에게 제공함. -> 입출력 서브시스템은 하드웨어와 독립적인 운영이 되어서 운영체제 개발자의 작업을 간단하게 해줌
ex. cin을 입력했을 때 모든 기종의 키보드로 입력이 가능한 이유
Block and Character Devices
Block Devices – 개별 장치 바이트 단위가 아닌 블록단위로 접근하는 장치, H/D, 대용량 저장장치 -> 명령어 – read, write, seek
Character Devices – 한 번에 한문자 씩 전송하는 장치
명령어 get, put을 통해 제어를 함
Network Devices -> 데이터를 패킷 단위로 받아옴
-> 패킷을 IP 프로토콜을 처리해 주어야함(운영체제에서 처리를 해서 운영 단으로 보내는 처리를 해야함)
Clocks and Timers
Clocks – 컴퓨터를 끄더라도 시간은 지속적으로 카운트되게 해주는 것(현재 시간 유지)
Timers – RR등에서 정해진 타임퀀텀만큼 지속적으로 인터럽트를 거는 것
Blocking(어떠한 것을 막는 것) and Nonblocking I/O
>Blocking I/O
-> 시스템 콜이 들어오면 커널은 I/O작업이 완료되기 전에는 응답을 하지 않는 것(다른 작업을 수행하지 못하게 하는 것, ex. cin)
-> I/O작업 수행이 완료되기 전까지는 권한을 커널이 가지고 있음
>Nonblocking I/O
-> 시스템 콜이 들어오면 커널이 I/O 작업을 하는 것과 무관하게 응답을 줌 -> 커널이 권한을 바로 유저 프로세스에게 넘김 -> 유저 프로세스는 I/O작업이 완료되기 전에도 다른 작업을 수행할 수 있음, 유저 프로세스가 중간 중간 시스템 콜을 보내서 I/O가 완료가 되었는지(커널에게 물어봄) 확인하는 과정이 있음
Kernel I/O Subsystem
-> 커널과 디바이스 드라이버 사이에 존재
-> I/O 디바이스 장치(느림)와 CPU(빠름) 간에 처리속도 동기를 맞춰주는 역할을 함
Sun Enterprise 6000 Device-Transfer Rates
-> 각 기기들 전송비율이 다름
Kernel I/O Subsystem
-> 성능을 높이기 위한 방법
>Caching – 앞에서 많이 배움
>Spooling – 버퍼(메인메모리에서 수행)와 유사, 파일로 저장을 해서 버퍼기능 수행, ex. printing(파일단위로 스케줄이 정리됨)
>Device reservation
Error Handling -> 에러 발생을 잘 처리해야함
Life Cycle of An I/O Request
-> 시스템 콜을 통해서 커널 모드로 들어가서 처리가 필요
-> 캐시메모리부터 확인(요청이 오면 우선적으로 수행)
Device-Functionality Progression
운영체제 위에서 프로그램을 구현하는 것이 좋음
-> 아래쪽으로 갈수록 코딩이 어려워짐
-> but 아래쪽에서 구현하는 것이 빠름
-> 아래쪽이 비용(시간)이 많이 나옴
-> 추상화는 위로 갈수록 편해짐 -> 그러나 아래로 갈수록 추상화가 많아짐
-> read와 같은 명령을 application 단에서 구현한다면 세세한 작동들도 구현을 해주어야함 -> 이렇게 되면 더 번거로워진 것임 -> 아래에서 구현이 되어있지 않다면 위로 갈 수 록 번거로워짐 -> 알고리즘 소스코드는 하드웨어 단에 있어야 손쉽게 사용이 가능함 -> 어느 레벨 단에서 구현하는지가 중요한 아래 레벨에서 구현될수록 위에서 사용될 때 추상화정도가 높아짐
-> 위로 갈수록 수정에 대한 유연성이 높아짐
I/O Systems Layers
13장에서 가장 중요한 그림
프로그램에서 I/O를 요청하게 되면 -> Device-independent software를 통해서 디바이스 드라이브 요청을 보냄 -> Device drivers는 하드웨어로 컨트롤러에 의해서 보내게 됨 -> 하드웨어는 컨트롤러에 의해서 제어가 되어서 결과 값을 받아오게 되면 결과 값을 Interrupt handlers를 통해서 데이터를 주고 Interrupt handlers의한 결과는 Device driver를 통해서 올려 보내고 Device-independent software를 통해서 유저프로세스에게 I/O에 대한 응답을 줌
>>핵심내용
'👨💻Computer Science > 운영체제[OS]' 카테고리의 다른 글
[운영체제] 12장 Secondary-Storage Architecture (0) | 2021.06.29 |
---|---|
[운영체제] 11장 Implementing File Systems (0) | 2021.06.29 |
[운영체제] 10장 File System (0) | 2021.06.29 |
[운영체제] 9장 Virtual Memory Management (0) | 2021.06.29 |
[운영체제] 8장 Memory Management Strategies (0) | 2021.06.29 |
댓글