본문 바로가기

KNU_study/운영체제

운영체제(11) Device Management

728x90
반응형

이 단원은 device driver, polling와 I/O interrupt 그리고 DMA를 확실히 알고 넘어가자 !
 

 

1. Input/Output Devices

 
<OS Basics : I/O>
input, output device에 관하여.. 

각각 device에 컴퓨터가 붙어있다. 서로간 통신 신호를 계속 보낸다.

 
<Operational Parameters for I/O>
(1) 데이터 세분성 : Byte vs Block
    일부 장치는 한 번에 단일 바이트(ex, 키보드)를 제공한다. 
    전체 블록(ex, 디스크나 네트워크 등)을 제공하는 기업도 존재한다. 
(2) 액세스 패턴 : Sequentail vs Random
    일부 장치는 순자척으로 액세스해야 한다. (ex, tape)
    다른 장치는 임의로 액세스할 수 있다. (ex, 디스크, CD 등)
    -> 전송을 시작하기 위한 고정 오버헤드 : 지속적인 모니터링이 필요한 장치 존재, ~~
(3) 전송 매커니즘 : Programmed IO and DMA
 
<The goal of the Subsystem>
목표 : 다양한 device가 존재함에도 불고하고, 균일한 인터페이스를 제공하는 것. 
device driver(장치를 제어하는 코드)가 표준 인터페이스를 구현하므로, 아래 코드는 다양한 장치에서 작동함.

FILE fd = fopen("/dev/something", "rw");
for (int i=0; i<10; i++){
	fprintf(fd, "Count %d/n", i);
]
close(fd);

 
<I/O Device notifying the OS>
(1) OS는 I/O 디바이스가 언제 작업을 완료하는지, I/O 작업에 언제 오류가 발생하는지를 알아야 한다.
(2) I/O interrupt : service가 필요할 때마다 장치는 인터럽트를 생성한다. 
    -> 예측할 수 없는 event들을 잘 처리한다. But, 상대적으로 높은 오버헤드를 인터럽트한다. 
(3) Polling : OS가 장치별 상태 레지스터를 주기적으로 확인한다. 
    -> 낮은 오버헤드를 가진다. But, 예측할 수 없는 I/O 작업인 경우 polling에 많은 사이클이 낭비될 수 있다. 
(4) 실제 I/O device는 폴링과 인터럽트를 모두 결합한다. 
ppt p.18,p.19 그림 참고
참고 사이트 : https://jaebworld.tistory.com/27, https://peterleeeeee.github.io/Intro-OS(2)/ 

 
 

2. Standard Interfaces to Devices

 
<Block Devices>
블록 장치 : disk drives, tape drives, DVD-ROM 등이 있다. 
-> 데이터 블록에 접근한다. 
-> 명령어에는 open(), read(), write(), seek()가 포함된다. 
-> 물리적 I/O 또는 파일 시스템을 액세스한다. 메모리가 매핑된 파일도 액세스 가능하다. 
 
<Character Devices>
문자 장치 : 키보드, 마우스, 직렬 포트(serial ports), some USB 등이 있다. 
-> 한 번에 하나의 문자
-> 명령어에는 get(), put()이 포함된다. 
-> 맨 위에 계층화된 라이브러리에서 줄 편집을 허용한다. (?)
 
<Network Devices>
네트워크 장치 : Ethernet, Wireless, 블루투스 등이 있다. 
-> 자체 인터페이스를 가질 수 있을 정도로 블록/문자 장치와 다르다. 
-> Unix 및 Windows에는 소켓 인터페이스가 포함되어 있다. 
 
 

3. How does the processor actually talk to the device?

 

(1) CPU가 컨트롤러 상호작용함 : 읽고 쓰는 레지스터 집합 등등 포함
(2) connection과 bus의 복잡성에 관계없이, 프로세서는 레지스터에 2가지 방식으로 접근한다.  
    -> I/O instructions : in/out 명령어
    -> Memory mapped I/O : load/store 명령어. 레지스터, 메모리가 물리적 주소 공간에 나타난다. 
 
<Example : Memory-Mapped Display Controller>
control 레지스터 및 디스플레이 메모리를 물리적 주소 공간에 매핑하는 hardware maps.
메모리(Frame buffer라고도 함)를 표시하기 위해 쓰기만 하면, 화면의 이미지가 변한다. 

이해가 안 가니 시험 직전에 다시 열심히 들여다보자..

 
 

4. Transferring Data to/from Controller

 

(1) device driver는 주소 X의 buffer(버퍼)로 disk data를 전송하라는 메세지를 받는다. 
(2) device driver는 disk controller에게 C bytes를 [디스크]에서 [주소 X의 버퍼]로 전송하라고 명령한다. 
(3) disk controller는 DMA 전송을 시작한다.
(4) disk controller는 각각의 byte들을 DMA controller에게 보낸다. 
(5) DMA controller는 byte들을 버퍼  X에게 전송한다. (memory address를 증가하고, C는 0이 될 때까지 감소)
(6) C가 0이 되면, DMA는 CPU를 인터럽트하여 전송 완료 신호를 보낸다. 

DMA란 무엇인가

 
<Programmed I/O>
각 byte는 프로세서 in/out 또는 load/store를 통해 전송된다.
-> 장점 : 간단한 하드웨어, 프로그래밍이 쉽다.
-> 단점 : 데이터 크기에 비례하여 프로세서 주기를 소비한다. 
 
<Direct Memory Access>
메모리 버스에 대한 controller 접근 권한을 준다.
데이터 블록을 메모리로 직접 전송하거나 전송받도록 요청한다.  
 
 

5. Device Drivers

 
<Device Driver>
디바이스를 제어하기 위한 커널의 일부분 !!
device hardware와 직접 상호작용하는 커널의 device-specific code(장치별 코드)
-> standard internal interface(표준 내부 인터페이스)를 지원한다. 
-> 동일한 커널 I/O 시스템이 다른 장치 드라이버와 쉽게 상호작용할 수 있다. 
-> ioctl() system call로 지원되는 특수 장치별 구성이다. 
-> Kernel's view : 커널은 정의된 모델의 프레임워크 내에서 수용될 수 있는 한 광범위하게 사용 가능.
    User's view : 사용자는 세부 정보 없이도 장치의 입출력을 위한 코드 작성 가능
 
<Two pieces of device driver>
(1) Top half : [system call]에서 [call path(호출 경로)]로 액세스한다. 
    -> open(), close(), read(), write(), ioctl(), strategy()와 같은 표준 cross-device call을 구현한다. 
    -> 장치 드라이버에 대한 커널의 인터페이스이다. 
    -> 상위 절반은 장치에 대한 I/O를 시작하며, 완료될 때까지 스레드를 sleep 모드로 전환할 수 있다. 
(2) Bottom half : 인터럽트 루틴으로 실행한다. -> input를 가져오거나 output의 다음 블록을 전송한다. 
    -> I/O가 완료되면 절전 스레드를 깨울 수 있다. 

 
<System call Interface>
응용 프로그램에서 사용할 수 있는 기능이다. 
몇 개의 인터페이스에 모든 device 및 file을 추상화한다. 
인터페이스를 가능한 한 유사하게 만든다. (ex, Block vs character, Sequential vs direct access)
장치 드라이버가 기능을 구현한다. (API function 하나당 진입점 1개)

open() // 장치를 열기 위한 명령어
close() // 장치를 닫는 명령어
ioctl() // 장치에 대해 다양한 제어 명령을 수행
read() // 장치로부터 데이터를 읽어오는 명령어
write() // 장치에 데이터를 쓰는 명령어
strategy() // 블록 단위의 데이터 전송을 관리하는 명령어
// strategy 명령어는 대용량 데이터를 디스크에 읽거나 쓸 때 사용됨. 
select() // 비동기적인 I/O 다중처리를 지원하기 위한 명령어
stop() // 장치의 동작을 중지시키는 명령어

 
<Device-kernel Interface>
드라이버는 커널의 주요 부분과 다르다. 
-> 커널은 특정 기능을 호출하고, 드라이버는 이를 구현한다. 
-> 드라이버는 [장치 할당, 리소스 할당, Scheduling 등]을 위해 커널 함수를 사용한다. 
 
 

6. Buffering

 
<buffering>
입출력 성능을 개선하기 위해 버퍼링을 사용한다. 
버퍼링의 느린 속도를 개선하는 방법은 아래의 두 가지가 있다.
-> CPU는 (하나의 입출력 작업이 완료될 때까지 기다리지 않고) 여러 작업을 버퍼에 저장해서
    입출력 장치가 버퍼로부터 작업을 처리한다. 
-> CPU는 입출력 장치의 속도와 관계없이 연산을 처리한다. 
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=jk130694&logNo=220677902462 
 
<Single buffering>
가장 간단한 형태의 버퍼링이다. 
데이퍼를 단일 버퍼에 순차적으로 저장, 송신자가 버퍼에 데이터를 쓰면 수신자는 해당 버퍼에서 읽어온다.
-> 송수신이 번갈아 이루어지지 않고, 한 번에 하나의 작업만 처리할 수 있다. 
-> 데이터의 입출력이 동기적으로 이루어지는 경우에 사용될 수 있다. 
-> 단점 : 단일 버퍼를 사용하기 때문에 버퍼 오버플로우나 언더플로우 발생 가능. 

 
<double buffering>
송신자와 수신자 간의 비동기적인 데이터 처리를 지원하기 위해 사용된다. 
송신자는 한 버퍼에서 데이터를 쓰고, 수신자는 다른 버퍼에서 데이터를 읽어 온다. 
-> 동시에 데이터를 전송 및 처리할 수 있다. 지연을 최소화, 처리 성능 향상 가능.
-> 단점 : 두 개의 버퍼를 사용하므로 메모리 사용량이 증가한다. 

 
<circular buffering>
고정된 크기의 버퍼를 사용하면서 순환적으로 데이터를 저장한다. 
버퍼가 마지막 위치에 도달하면, 다시 처음 위치로 돌아가 데이퍼를 덮어 씌운다. 
-> 최신 데이터를 유지하면서, 버퍼의 일정 크기를 유지할 수 있다. 
-> 송수신 간의 속도 차이가 존재하는 상황에서 유용하다. 

 
 

7. Disk Organization

 
파일 시스템을 통해 데이터를 디스크에 저장하는 방식을 말한다. 
파일 시스템은 파일과 디렉토리를 구조화하여 관리하고, 이들을 디스크에 효율적으로 저장, 접근하게 한다.
주요한 디스크 구정 방식으로는 윗 본문에서 언급한 파일 allocation, 파일 access 방식이 있다. 

 
 

8. Disk Optimizations 

 
디스크 최적화는 디스크의 성능과 효율성을 향상시키기 위해 수행된다. 
주요한 최적화 기법으로는 디스크 스케줄링, 파일 시스템 압출 및 디스크 조각화 해제 등이 있다.
 
<Disk scheduling>
디스크에 동시에 발생하는 입출력 요청들을 효율적으로 관리하기 위해 사용된다. 
디스크 헤드의 이동을 최소화하고, 디스크의 처릴량을 극대화하기 위해 입출력 작업을 조율하는 알고리즘
(1) SSFT(Shortest seek time first) : 디스크 헤드가 현재 위치에서 가장 가까운 요청으로 이동하는 방식.
(2) SCAN : 디스크 헤드가 디스크의 한쪽 끝에서 다른 쪽 끝까지 이동하며 요청을 처리하는 방식. 
    -> 한쪽 끝에 도달하면 방향을 반대로 전환하여 반대 방향의 요청을 처리한다. 
(3) LOOK : SCAN과 유사하지만, 무조건 끝을 찍지는 않고 마지막 애까지 도달하면 바로 유턴하여 요청 처리.
(4) C-SCAN : SCAN의 개선된 버전으로, 끝에 도달하면 즉시 유턴하지 않고, 다시 출발점에서 순방향 처리.
(4) C-LOOK : 마지막 애까지 도달하면(끝 찍을 필요 X), 다시 출발점에서 순방향 요청 처리. 
 
<Optimizing Seek time>
-> Transfer time : 디스크 표면에서 메모리로 비트를 복사하는 시간
-> Disk latency time : R/W 헤드 아래에서 적잘한 섹터가 회전할 때까지 대기하는 회전 지연
-> Disk seek time : R/W 헤드가 대상 트랙/실린더로 이동하는 동안 지연
-> Access time = seek + latency + transfer
예시는 아래와 같다. Request : 23, 87, 36, 93, 66

SCAN은 끝을 찍고 유턴하느라 '99'가 더 생성되었다.

 
 
 
** 보조 저장 장치 : Volume directory, 각 파일의 외부 파일 설명자, 파일 내용 등이 포함된다. 
** 블록 관리 : 블록을 파일에 할당한다. 사용 가능한 블록을 추적한다.

728x90
반응형