I/O Devices
CPU Execution and I/O
CPU execution은 CPU burst + I/O burst로 이루어진다.
I/O burst 동안에는 instruction 수행이 중단이 되고 I/O 작업이 처리가 된다.
CPU burst는 대부분 처리 시간이 짧고 I/O burst는 처리 시간이 길다.
따라서 사용자의 체감 시간은 대부분 I/O burst가 차지한다.
때문에 I/O burst의 처리 시간을 줄여야 한다.
I/O Device의 유형
대부분의 컴퓨터에는 많은 종류의 I/O device들이 존재한다.
I/O device에는 다음과 같은 유형이 있다.
- character devices
- read/write가 byte 단위(character 단위)로 이루어진다.
- 예 : 마우스, 키보드, 터미널 등
- block devices
- read/write가 block 단위로 이루어짐
- 한 번에 대량의 data (block)이 transfer 된다.
- block의 크기는 I/O 장치마다 다르다.
- 예 : disk drive, flash drive 등
- network devices
- packet 단위로 전송이 이루어진다.
- packet은 연속적으로 흘러가는 bytes의 stream 이다.
- 예 : NIC(network interface card), ethernet card 등
- clock and timer
Character Device
Mouse
Xerox PARC에 처음으로 roller ball mouse가 사용되었다.
1984년 apple machintosh가 나오면서 대중화가 되었다.
windows 3.1 부터 마우스의 장치가 GUI(Graphical User INterface)의 대표적인 장치로 사용되기 시작했다.
과거에는 roller ball 이 들어가는 마우스였지만, 지금은 optical mouse(광학 마우스)가 사용된다.
광학 마우스에는 카메라가 들어있어서 초당 1500-7080 개의 이미지를 촬영한다.
카메라는 laser 와 CMOS sensor로 이루어져있다.
촬영된 이미지는 DSP(Distal Signal Processor)를 통해 처리된다.
DSP는 움직임(좌표의 차이)을 계산한다.
이 좌표를 CPU에 전달을 하면 마우스가 움직인다.
마우스에서 일어나는 계산/처리의 흐름은 다음과 같다.
- sensor(CMOS) : data 측정
- mouse controller(DSP) : 좌표 측정/계산
- communication link (cable/wireless) : 계산된 값을 전달
- data interface (serial, PS/2, USB)
- device driver
- application
Terminal
Terminal = keyboard + display로 구성되어 있다.
키보드와 디스플레이는 기계적으로 붙어있지만, 실제로는 독립적으로 작동한다.
요즘의 터미널은 키보드와 디스플레이가 분리되어서 사용된다.
I/O 작업은 register를 통해서 이루어진다.
- keyboard data/status register
- KBDR (keyboard data register)
- KBSR (keyboard status register)
- display data/status register
- DDR (display data register)
- DSR(display status register)
키보드의 작동
키보드의 입력은 character 단위로 이루어진다.
입력된 character는 ASCII code를 통해서 CPU에 전달된다.
초당 10-1800 character 이고, 단위는 Baud rate을 주로 사용한다.
키보드의 키가 눌리면 키의 ASCII code 값이 KBDR에 저장이 된다.
동시에 키보드 하드웨어에서는 ready bit을 0으로 설정한다.
키보드는 interrupt를 발생시키고 키보드의 동작을 disable 시킨다.
CPU는 interrupt를 받으면 interrupt handler가 ISR(interrupt service routine)을 호출한다.
KBDR는 값을 가져가고, KBSR을 1로 바꾼다.
키보드를 enable 한다.
키가 눌리면 키보드가 disable 된다.
그리고 CPU가 해당 키를 처리할 때 까지 사용자가 다른 키를 눌러도 무시된다.
그러나 character 전달속도는 사람 기준에서 빠르기 때문에 실제로 컴퓨터가 키보드 입력을 놓치는 경우는 없다.
디스플레이의 작동
CPU에서 DDR에 출력될 데이터를 넣는다.
DSR의 read bit을 1로 설정한다.
디스플레이 장치에서 DSR의 ready bit을 0으로 바꾼다.
DDR의 값을 읽어서 화면에 뿌린다.
Block Device
하드디스크는 다음과 같이 이루어져있다.
- platter
- 자기 디스크
- spindle에 끼워져 있어서 rotation을 해서 platter의 읽고자 하는 위치가 head에 위치된다.
- read-write head
- platter의 자기 정보를 읽는다.
정보를 읽기 위해서 2 종류의 움직임이 있다.
- seek : head가 원점에서 떨어진 정도로 움직인다.
- rotate : platter를 회전시켜서 읽고자 하는 위치가 head로 오도록 한다.
따라서 disk를 읽는 시간 = seek time + rotational delay + transfer latency 가 된다.
Network Interface
Network interface의 예시는 다음과 같다.
- UART : 직렬통신, 속도가 느리다.
- RS-232 : 직렬통신 프로토콜
- USB
- ethernet
Layering (Protocol Stack)
network I/O는 다른 종류의 I/O 보다 훨씬 복잡하다.
복잡한 network protocol들이 여러 processing 계층을 이루고 있다.
Clock and Timer
character, block, network I/O 보다는 덜 중요하지만, 컴퓨터와 운영체제가 동작하는데에는 필수적이다.
다음과 같은 정보를 제공한다.
- current time (현재시간)
- elapsed time (경과시간)
- Y시간에서 operation X를 trigger 하기 위한 타이머를 set
- 프로세스나 커널 안에서의 작업을 위해서 특정 시점을 지정한다.
관련된 API들은 표준화가 잘 되어있지 않다.
운영체제마다 제공하는 timer API가 다르다.
UNIX Time Value
- calendar time
- 1970년 1월 1일을 0으로 본다.
- 현재 시각 정보를 알려준다.
- process time
- 프로세스가 실제 CPU를 사용한 시간을 알려준다.
- CPU time = User CPU time + System CPU time
- User CPU time : user mode에서 사용한 CPU time
- System CPU time : kernel mode에서 사용한 CPU time
UNIX는 alarm()이라는 system call을 제공한다.
alarm()에서의 단위는 second 이다.
더 많은 기능을 위해서는 ioctl이라는 low level 함수를 사용해야 한다.
Linux
UNIX에서의 calendar time의 개념을 Jiffies로 제공한다.
Linux는 부팅 시 jiffies를 0으로 초기화하고, 10ms에 한번씩 timer interrupt를 설정한다.
interrupt가 발생할 때마다 jeffies를 증가시킨다.
특정시점의 jiffies 값을 읽으면 부팅된 시점으로부터 경과된 시간까지를 알 수 있다.
'Computer Science > Operating System' 카테고리의 다른 글
File System, File (0) | 2021.06.20 |
---|---|
I/O Register, Device Driver (0) | 2021.06.20 |
성능에 미치는 요인들 (0) | 2021.06.20 |
Memory Optimization (0) | 2021.06.20 |
Memory Allocation and Trashing (0) | 2021.06.20 |
댓글