1. A dialogue on Persistence
2. I/O Devices
3. Hard Disk Drives
4. Interlude: Files and Directories
5. File System Implemention
2. I/O Devices
2-1. System Architecture
Computer system focusing on Bus
computer system은 어떻게 생겼을까? computer system focusing on bus, bus를 중심으로 computer system을 설명해보자.
※bus: 컴퓨터의 각 component들을 연결하는 일종의 통로의 역할이다.
1.hierachical structure: bus는 계층구조로 설명가능하다.
-memory bus: 빠르지만, 비싸고, 커버할 수 있는 영역이 작다.
-I/O bus: memory bus에 비해 느리지만, 상대적으로 저렴하고 커버할 수 있는 영역이 넓다. pluggable하다.
→pluggable: 붙였다가 떼었다가 할 수 있다.
2.현대 시스템(Modern system)
-특별한 연결: 특정 device들간의 고속연결
ex)CPU와 memory의 굉장히 빠른 연결 존재한다.(예: QPI)
ex)CPU와 graphic card간의 빠른 직접 연결이 존재한다.
-I/O를 전담하는 특별한 chip들을 많이 도입하였다.
ex)cpu는 I/O chip에게 간단하게 요청하면 되고, I/O chip이 복잡한 작업을 처리하면 된다.
2-2. Canonical Device
devices
device는 어떻게 생겼을까? 일반적으로 다음과 같은 2개의 part로 나눌 수 있다
Interface parts: 장치에 접근하기 위한 접근 통로
registers들이 존재: 상태를 나타내는 레지스터, 명령을 주는 레지스터, 데이터를 담는 레지스터들이 존재한다.
Internals parts: 내부
logic, controller, 특별한 chip들이 존재한다. device에서 동작하는 software들을 firmware라고 한다.
memory부분이 internals에 존재한다. I/O 데이터를 담아놓는 buffer공간으로 사용된다.
2-3. The Canonical Protocol
Protocol
devices에 접근하기 위한 통신규약
- idle check: device가 사용가능한지 확인
- data: data를 싣는다.
- command: command를 보낸다.
- finish check: 작업이 다 끝났는지 확인한다.
이 프토토콜을 구현하는 기법을 3가지로 구분할 수 있다.
3 mechanism: PIO(Programmed I/O), Interrupt, DMA
2-4. Lowering CPU overhead with Interrupt
1.PIO방식
위 4가지 단계를 cpu에서 모두 처리하는 것이다.
참고적으로, 준비상태인지 확인하는 과정을 polling이라고 한다.
*Interrupt vs Polling
polling: idle한지 여부를 cpu가 직접 check하는 것이다.(PIO 방식)
Interrupt: 사건의 발생을 OS에게 알리는 메커니즘으로, 주로 하드웨어적인 사건을 말한다.
→Device가 idle한지, 작업을 하고 있는지 여부를 device가 CPU에게 알려준다.
→sleep 상태로 들어가. cpu를 반납해 다른 유용한 작업을 할 수 있도록 한다.
왼. Polling | 오. Interrupt |
-R1→R2→R1상태 -R1, R2 모두 running상태이지만, R2상태에서는 단순히 상태 확인만 진행된다. |
-Running→Sleep→Running -Running상태에서 Disk에 요청을 하면 요청 스레드는 Sleep 상태로 들어간다. 이때, Disk의 작업이 끝나면 CPU에 Interrupt를 보내고, 요청 스레드는 Ready상태로 들어간다. 현재 수행 중인 thread의 작업이 끝나면 요청 스레드가 다시 running된다. |
*Polling과 Interrup의 장단점, Tradeoff
Polling의 장점: Context switch가 발생하지 않는다.
→장치가 느리면 context switch가 큰 부담은 아니다. 하지만 장치가 빠르면 context switch가 다소 overhead로 작용한다.
Polling의 단점: overlapping이 되지 않는다. 즉, 병렬처리가 되지 않는다.
Interrupt의 장점: overlapping
→Interrupt는 cpu가 다른 작업을 하면서 동시에 I/O는 다른 작업을 할 수 있다. polling은 overlapping이 되지 않는다. 즉, polling은 병렬처리가 덜 되는 단점이 있다.
Interrupt의 단점: OS가 할일이 많아진다.
→Interrupt를 처리할 수 있는 매커니즘을 OS내부에 가지고 있어야 한다.(Interrupt table, Interrupt handler)
→sleep을 처리할 수 있는 매커니즘이 필요하다. Polling시에는 context switch가 발생하지 않는다.
2-5. More Efficient Data Management with DMA
2.DMA(Direct Memory Access)
Interrupt를 사용하면 굳이 polling을 할 필요가 없다. DMA까지 도입하면 실제 device로 data를 보내는 작업조차 cpu가 할 필요가 없다.
#비교
-PIO 방식: cpu가 모든 작업을 처리
→걱정: cpu에 비해서 device가 무척 느리다.
-dma를 통해서 data copy를 cpu에서 처리하는 것이 아니라 DMA controller라고 부르는 chip에서 처리함으로써 overlapping을 향상시킬 수 있다.
둘다 Interrupt를 사용하는 예제이다.
1번 Thread가 data를 복사하고 I/O요청을 보내고 Interrpt를 통해 깨어나는 형태이다. 이때, data copy부분은 cpu에서 담당하고 있음을 볼 수 있다.
이 경우는 disk로 data를 보내는 작업을 DMA에 요청한다. 따라서 cpu가 더욱 일찍이 sleep 상태로 들어갈 수 있다.
2-6. Methods of Device Interation
디바이스의 주소에 어떻게 접근하는가?
1. Direct I/O
메모리를 위한 주소공간과 I/O를 위한 주소공간이 따로 존재한다.
별도의 I/O 명령어를 사용한다.
2. Memory-mapped I/O
메모리를 위한 주소공간은 전체 하나밖에 없지만, 일부분은 메모리를 위한 주소공간으로 사용되고, I/O를 위한 주소공간이 따로 존재한다.
2가지 방식에 상관없이 device에 접근하는 명령어는 특권명령어(Privileged instruction)가 된다.
즉, kernel mode에서 동작하면 잘 동작하지만, user mode에서는 protection fault가 발생한다.
kernel에서는 주로 Device driver라고 불리는 Component가 접근한다.
2-7. Fitting into the OS: The Device Driver
Device driver
-커널 내부에 있는 장치를 추상화시키는 소프트웨어이다.
-보통 두개의 층으로 되어있다.
1.실제 device를 제어하는 층이다. Interrupt와 DMA도 처리한다.
2.OS와 interface를 제공한다.→open,read,write,close 등...(device도 일종의 파일로 관리된다.)
*device driver는 크게 2가지로 다시 구분할 수 있다.
-character driver(문자 장치를 위한 driver)
ex)terminal
사용자가 직접 접근한다.
-block driver(블록 장치를 위한 driver)
ex)disk
file system을 통해서 장치에 접근한다.
2-8. Case Study: A simple IDE Disk Driver(Optional)
*Device Driver의 간단한 예
a simple IDE disk controller
-IDE라고 불리는 disk controller는 direct I/O 를 사용한다.
-4개의 register를 사용한다.
control, command block, command or status, data port, error 등
driver: interface
character driver: open, read, write, close, intr,...
마치 파일처럼 open, read, write, close, intr를 모두 제공해야 한다.
block driver: open, close, intr, rw→file system을 통해서 접근
rw: read와 write를 모음
리눅스에서 Device Driver를 만들 때 동적으로 올리고 내릴 수 있다.(insmod, rmmode)
'기타 > 운영체제' 카테고리의 다른 글
[운영체제]Advanced File System (0) | 2022.06.04 |
---|---|
[운영체제]Paging (0) | 2022.06.03 |
[운영체제]Memory Virtualization (0) | 2022.05.23 |
[운영체제]File System (0) | 2022.05.23 |
[운영체제]Hard Disk Drives (0) | 2022.05.23 |