공부/운영체제2011. 7. 13. 22:35


I/O hardware

Port : 연결지점. 대개 register.
Bus: 선들과 커뮤니케이션 프로토콜. Data bus, Address bus
Controller : port, bus, 장치 제어

Daisy chain
장치들이 서로 직렬로 연결되어 있는 구조.

I/O Registers

I/O port는 보통 4개의 레지스터로 구성되어 있다. 
1) status register : 현재 명령이 처리되었는지, data-in register에서 읽을 수 있는지, 장치에 문제가 있는지 등이 저장된다.
2) control register : host에 의해 씌여진 명령어가 들어있다.
3) data-in register : host가 읽는 register
4) data-out register : host가 쓰는 register

I/O와 Memory 컨트롤

1) memory-mapped I/O

memory랑 I/O가 Data bus, Address bus, control bus를 공유한다.
그래서 같은 명령어로 접근할 수 있다.
2) Isolated I/O
Data bus와 Address bus를 공유하지만 Control bus는 공유하지 않는다.
그래서 서로 다른 명령어를 사용한다.
3) Data Channel
Data bus, Address bus, Control bus를 다 따로 쓴다.
I/O 전용 프로세서가 있다.

Isolated I/O는 두개의 주소공간을 사용한다.(메모리 주소공간, I/O주소공간)
I/O-mapped I/O라고도 한다.

memory mapped i/o는 주소공간에서 주소공간에서 특정위치를 가지고 있다.
I/O를 읽고 쓰는 건지 메모리를 읽고 쓰는건지 control이 가능해야 한다.

PC는 i/o mapped i/o랑 memory-mapped i/o를 모두 사용한다.
그래픽 컨트롤러는 기본 제어 명령을 위한 i/o ports가 있고 화면 정보를 위한 memory-mapped 영역을 가지고 있다.
memory-mapped는 pointer가 잘못된 주소를 가졌을 때 문제가 발생하기 쉽다. protected memory로 보호해야 한다.

두가지 종류의 I/O

1) Polling (programmed I/O)

CPU가 I/O를 직접 제어한다.
CPU는 I/O모듈이 명령을 완료하길 기다린다.
busy waiting(polling)
루프돌면서 state 레지스터의 busy bit가 clear될 때까지 기다리는 것.
과정
host가 write bit을 set하고 data-out register에 byte 쓰고 command-ready bit을 set한다. controller는 command-ready bit을 보고 busy bit을 셋하고 command register를 읽고 write명령을 알게된다. data-out 레지스터에서 byte를 읽고 장치에 입출력처리를 한다. controller는 status register의 command-ready bit을 clear하고, error bit도 clear해서 I/O가 완료되었음을 알린다. 그리고 busy bit을 clear한다.

2) Interrupts(Interrupt-Driven I/O)

cpu가 read command를 알린다.
I/O 모듈은 데이터를 얻는다. 그동안 CPU는 다른 일을 하고 있고
I/O는 CPU에게 인터럽트를 날린다.
CPU는 데이터를 요청한다.
I/O 모듈은 데이터를 전송한다.

Direct Memory Access(DMA)

interrupt driven과 programmed i/o는 활발한 cpu 사용을 요구한다. cpu가 이러한 일 하기에는 아깝고 해서
DMA가 일을 대신해준다.
I/O 장치와 메모리 사이에서 CPU를 거치지 않고 데이터를 전송해준다.

State Transition
응용프로그램 I/O 요청 -> OS는 그 프로그램을 block 상태에 놓는다. -> DMA에게 맡기고 CPU는 다른 프로그램을 실행한다. DMA가 그 일을 완료했으면 CPU에게 인터럽트를 보내고 OS는 다시 그 중지된 프로그램을 runnable한 상태로 바꾼다.

DMA가 메모리 버스를 쓰고 있더라도 CPU는 캐시를 통해 데이터를 읽을 수 있다.

Application I/O Interface
운영체제가 여러 i/O 장치들을 표준화된 동일한 방식으로 다루게 하는 기술들과 인터페이스들을 살펴보자.

I/O system calls은 장치에 사용될 수 있는 기능들을 캡슐화한 것임.
Device-driver는 i/O controller간의 차이를 못느끼게 해준다.

Device는 다음과 같은 차원에서 생각할 수 있다.
1) Character-stream과 block(byte단위로 전송하냐 block 단위로 전송하냐)
2) Sequential or random-access
3) Synchronous or asynchronous(장치의 데이터 전송시간이 예측가능하냐 아니냐)
4) Sharable or dedicated (여러 프로세스나 쓰레드에 의해 동시에 사용될 수 있나 없나)
5) Speed of operation (일초에 몇 바이트냐, 몇 기가바이트냐)
6) Read-write, read only, or write only

Network devices

Block, character device가 아니다. 예외.
socket 인터페이스 사용.

Clocks and Timers

시간 장치.
현재시간, 경과시간, x명령이 y시간에 발생하도록 하는 타이머 지정 함수 제공
programmable interval timer
특정 시간동안 기다렸다가 인터럽트를 발생시키는 것.
한번, 또는 주기적으로 발생하도록 할 수 있다.
disk I/O subsystem에서는 이것을 dirty bit cache buffers를 disk로 옮길 때 주기적으로 사용한다.
network subsystem이 너무 느리게 진행되는 명령을 취소하는데 사용된다.

Kernel I/O subsystem
I/O를 위해 커널에서 제공하는 서비스들

Scheduling

한 장치에 여러 request가 들어올 때 O/S에서 스케줄링. 보통 FIFO를 하나, 시스템 효율을 위해 바꿀 수도 있다.

Buffering
3가지 목적

device speed dismatch
모뎀에서 데이터를 하드디스크로 보낼 때, 둘이 속도차이가 크기 때문에 모뎀에서 버퍼에 쓰고 일정양이 모이면 하드가 읽어간다. 하드가 읽어가는 게 금방 끝나는게 아니라서 double buffering을 쓴다. buffer가 두개라 모뎀이 한 buffer를 채우면 하드가 그걸 읽고 하드가 읽는 동안 모뎀은 두번째 버퍼를 채운다.

transfer size mismatch
전송 단위가 다를때 버퍼에서 쪼개거나, 합쳐서 단위를 맞춰준다.
컴퓨터 네트워킹에서 긴메시지가 패킷으로 쪼개지고, 쪼개진게 다시 합쳐지는 과정이 버퍼에서 일어난다.

copy semantics
disk에 저장되는 데이터가 어플리케이션에서 시스템콜이 호출될 때의 데이터와 같도록 보장해주는것.
어플리케이션의 버퍼가 write 시스템콜이 호출된 뒤 바뀌더라도 디스크에는 바뀌기 전 버퍼의 데이터가 저장되도록 보장해준다. 어플리케이션의 버퍼를 커널 버퍼로 복사해줌으로써 가능해진다.

caching
데이터의 복사본을 빠른 메모리에 유지하고 있기
성능향상

Spooling
프린터같은 장치를 위해 output을 유지시켜주는 버퍼이다. 프린터는 한번에 한작업밖에 할 수 없기 때문에 운영체제가 여러 프로그램에서 요청한 output을 file로 만들어 큐에다가 저장하고 있다가 printer에게 한번에 하나씩 복사한다. 유저나 관리자가 큐를 볼 수있고, 작업을 제거하거나, 중지시킬 수 있다.

Error Handling
운영체제는 장치의 일시적인 문제로 작동이 안될 때 처리할 수 있는 방법을 제공한다.

 

'공부 > 운영체제' 카테고리의 다른 글

Mass-storage structure  (0) 2011.07.13
File System Implementation  (0) 2011.07.13
File System  (0) 2011.07.13
Virtual Memory  (0) 2011.07.13
8장 Memory-management strategies  (0) 2011.07.10


Posted by skyjumps