# I/O Hardware
# Device Drivers
# Colision
# I/O Hardware
CPU, Memory, HardDisk, Network card, ...
<Bus>
- System Bus, I/O Bus,
- Address Bus, Data Bus, Control Bus
- ISA, PCI, EISA, SCSI ...
> I/O Device
- Controller, logic
- Register set
> I/O Device 내부의 Registers
- Status Register : 장치의 상태를 보여주는 Register
- Control Register : 장치의 동작을 결정하는 Register
- Data Register : 입출력할 데이터를 잠시 보관하는 Register
- Instruction Register ...
> I/O Device의 Register에 접근하는 두가지 방법
- Memory-Mapped I/O : 별도의 I/O address space를 갖지 않고, Physical address space의 일부를 할당하여 사용
* register를 access 하기위해 load/store 명령어를 사용 (모토롤라...),
- Port-Mapped I/O : 메모리의 주소와는 다른 방식의 주소를 할당하여 사용
* register를 access 하기위해 in/out 명령어를 사용 (Intel processor...),
> Device Control
- device control = device의 register들을 프로그래밍
- OS는 I/O Bus의 address line에 특정 register의 address를 보낸 후 read/write같은 명령을 보내 수행하게 함
# I/O Devices의 분류
: unix OS는 굉장히 단순화 시키려고 노력하였으며 이런 환경에서 I/O Devices를 특성에따라 모델을 나누게 됨
- Character Devices : 입출력을 Character 단위로 수행. mouse, terminal, ...
- Block Devices : 입출력을 block이라는 임의의 단위로 수행. Disk Drive, Flash Drive, ...
- Network Devices : NIC, ...
> Character Devies
* ex.
<Mouse driver의 역할 요약>
- Mouse Interrupt 발생 시, Mouse의 Data Register에서 값을 읽어오는 역할
- interrupt를 Event로 바꾸어 주는 역할
<Keyboard Driver의 역할>
- 키보드로부터 들오오는 각 캐릭터들을 Line buffer에게 순서대로 저장
- End-of-Line Character가 들어오면 전체 Line Buffer에 있는 데이터를 OS에게 전달
> Block Devices
- spindle
- arm assembly, arm, read-write head
- Track : 한 디스크 표면에서 스핀들로부터의 거리가 동일한 환형의 저장 공간
- cylinder : 여러장의 디스크를 수직으로 쌓여있는 동일한 반지름의 Track들의 집합
* cylinder 단위의 데이터 접근이 중요한 이유 (왜 cylinder라는 개념이 있는건가?)
: Arm Assembly가 고정된 상태에서 여러 platter에 걸쳐있는 한, 실린더의 트랙들을 동시에 읽을 수 있기 때문
- sector : 각각의 track을 분할하는 디스크 read/write 단위의 영역
> Disk Operation
* Sector : 디스크를 읽을 때 data transfer가 일어나는 최소 unit.
Sector에 접근하기 : cylinder number, track number in the cylinder, sector number in the cylinder
1. read/write head 선택
2. "seek", arm assembly를 해당 cylinder로 이동. (Move heads to the correct track)
* seek time : arm을 목표한 지점(해당 cyliner)까지 이동하는데 걸리는 시간
3. 해당 sector가 돌아올때까지 기다림 (spindle의 회전수에 비례, RPM-Rotation Per Minute)
* Rotational Delay : 디스크가 회전하여 목표한 지점(해당 섹터)이 head에 도착하는 시간
> Disk Performance
- seek time : 0-50 ms (avg 10-20 ms)
- rotational delay : 0-16ms
- typical drive spins at 3600-5400 RPM
> Flash Drive
- NAND flash memory : RAM과 Access pattern이 굉장히 다름. data tranper가 bytes단위가 아닌 block 단위로 일어남
- Page : Read/Write를 수행할 때 대상이되는 Data block. 2KB, 4KB, 8KB
* Page의 일부분은 Data를 저장하는 공간과 Spare Area라는 패리티, 에러처리 등 부수적인 정보 등을 저장하는 공간으로 나뉨
- Block : 64 pages, 128 pages
* Flash Memory > Blocks in a Flash Memory > pages in a Block > Spare areas in a page
* Flash Operations
- read : 하나의 페이지를 통째로 읽어옴
- write/program : flash의 해당 영역을 굽기
- erase : block 지우기. flash는 rom이므로 rewrite할 수 없음. 우선 지우고 다시 써야함.
<특성, 제약사항>
* Erase-before-write : NAND Flash 메모리는 데이터의 덮어쓰기가 불가능 하기 때문에 먼저 Erase로 초기화 한 후 write 해야 함.
* Worn-out : Erase 가능한 횟수가 제한적임
* Wear-leveling : NAND Flash의 한 영역에 Erase가 집중되어 worn-out이 발생하는 것을 막기위해 전체 영역을 고루 사용하도록 조절하는 기술
* read/write의 단위는 page, erase의 단위는 block
- Flash Memory를 Storage로 사용해 file system 구성하려면, Erase-before-write라는 제약조건 때문에
반드시 Log Structure Architecture가 필요함
> Page단위로 write를 수행하다가 Erase를 수행할 때, 단위가 block으로 page보다 크므로 지우려는 page 외에도 다른 page의 데이터가 모두 지워짐
> 로그를 남겨 관리를 해야함. page remapping after update.
=> Log-structured file system
# Device Drivers
: I/O Devices의 Control. 다른 프로그램들이 어떤 하드웨어 디바이스를 잘 사용할 수 있게 컨트롤 해주는 컴퓨터 프로그램
- 하드웨어 적인 측면을 관리하며, 기능을 사용자에게 추상화 시켜 사용하기 편하게 도와주는 역할을 함
- Application과 Device, OS와 Device 사이에 위치하며, User들이 Device를 사용하기위해 함수들을 제공
* SW System의 구성
- 정적인 구성요소 : structure(process)
- 동적인 구성요소 : behavior(program)
- Device Drives의 요소
정적 구성요소 : Device Drives를 User Program이 사용하기 위해 호출하는 APIs, Operations...
동적 구성요소 : Interrupt Service Routin.
=> 즉, Device Drives는 라이브러리이며 어떤 구성요소는 Interrupt에 의해 호출되며, 어떤 구성요소는 User Programs에 의해 호출됨
- UNIX 계열의 Device Drivers
* Unix
- 시스템의 단순화, portability 높이기.
- portability를 높이기
: machine dependent 한 부분을 정형화 시켜서 정리해야 함
: micro processor에 micro architecture specipy한 부분(MMU, context)이나, Memory layout, system bus architecture, Device관련 부분 들
* Unix Device Drivers의 대표적인 5가지 함수
- Open : 디바이스를 initialization. OS관점에서 레지스터와 디바이스 드라이버가 필요한 데이터 스트럭쳐를 잡아주는 역할 등
- Close : release
- read/write
- I/O CTL : I/O Contol
* Type of Unix/Linux Device
- Character Devices : data transfer unit이 캐릭터 단위. 시퀀셜 엑세스에 사용
일반적으로 사람과 상호작용 하므로 보통 slow device.
- Block Devices : 데이터 트랜스퍼 유닛이 블럭단위. 랜덤 엑세스에 사용
* block buffer cache : Large scale의 볼륨을 단위로 high speed가 필요함. 캐시로 CPU에 비해 상대적으로 속도가 느린 block device의 성능을 보완한 것.
- Network Devices
> File System의 역할
1. 디스크에에 있는 데이터를 읽거나 쓸 쑤 있는 여러 기능을 제공
2. File이나 Device 같은 시스템에 존재하는 자원에게 Name Space(simbolic name)를 제공(Unix/Linux에서는 path와 같은 형태..)
> Device File : 일종의 스페셜 파일을 생성하여 파일과 디바이스를 연결시키기
- 일반 데이터 파일로 관리
- /dev 밑에 file의 형태로 존재
- 하나의 디바이스에 여러 이름의 파일을 붙일 수 있음
ex. /dev/psaux, /deb/psmouse = serial mouse
* File의 데이터
- Real Data
- Metadata : file의 특성을 표현하는 부가적인 데이터
: 생성일, 수정일, 엑세스 권한 등
- Device File의 metadata
- Device Type : block, charactor
- Major Number : 어떤 타입의 디바이스인지 나타내는 필드. tty,
- Minor Number : 대상이 되는 디바이스를 구별하기 위해 디바이스 드라이버에게로 보내는 argument. (Kernel don't care)
'System > Etc.' 카테고리의 다른 글
[OS 기초] File System 2 - Disk Scheduling (0) | 2015.11.06 |
---|---|
[OS 기초] File System (0) | 2015.11.05 |
[OS 기초] Demand paging 3 - Trashing, Working Set (0) | 2015.11.04 |
[OS 기초] Demanding Paging 2 - Virtual Memory Management (0) | 2015.11.03 |
[OS 기초] Demanding Paging (0) | 2015.11.03 |