기타/운영체제

[운영체제]Persistence

stonesy 2022. 5. 23. 19:21
728x90

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: 붙였다가 떼었다가 할 수 있다.

CPU와 Memory는 Memory Bus로 연결되어 데이터의 전달이 빠르다.

 

 

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에 접근하기 위한 통신규약

  1. idle check: device가 사용가능한지 확인
  2. data: data를 싣는다.
  3. command: command를 보낸다.
  4. 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)

728x90

'기타 > 운영체제' 카테고리의 다른 글

[운영체제]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