System Architecture
I/O Devices
Interface
시스템 소프트웨어가 그 운영을 제어할 수 있도록 한다.
모든 하드웨어 장치들은 특정한 상호 동작을 위한 인터페이스와 프로토콜을 가진다.
Internal structure
구현 세부 사항에 따라, 시스템에게 제공하는 장치에 대한 추상화를 정의하는 책임을 가진다.
Protocol: 표준 방식
while (STATUS == BUSY)
; // 장치가 바쁜 상태가 아닐 때까지 대기
데이터를 Data 레지스터에 쓰기
명령어를 COMMAND 레지스터에 쓰기
(그러면 장치가 명령어를 실행한다.)
while (STATUS == BUSY)
; // 요청을 처리하여 완료할 때까지 대기
- Polling
- 운영체제가 데이터 레지스터에 어떤 데이터를 전달
- 운영체제가 명령 레지스터에 명령어를 기록한다.
- 운영체제는 디바이스가 처리를 완료했는지를 확인하는 폴링 반복문을 돌면서 기다린다.
➡️ 되게 비효율적이고 불편하다.
- Polling : 반복적으로 장치의 상태 레지스터를 읽어서 명령의 수신 가능 여부 확인하는 것
- Programmed I/O : 데이터 전송에 메인 CPU가 관여하는 경우
Interrupts
위의 비효율개선을 위해, 인터럽트를 사용하여 CPU 오버헤드 줄일 것이다.
⇒ 운영 체제는 요청을 발행하고, 호출 프로세스를 일시 중지하고 다른 작업으로 컨텍스트 스위칭할 수 있다.
⇒ 장치가 작업을 완료하면 하드웨어 인터럽트를 발생시키고, 이는 CPU가 미리 정해진 인터럽트 서비스 루틴(ISR)으로 이동하게 된다.
사용률을 높이기 위해, 인터럽트를 활용하여 CPU 연산과 I/O를 중첩시키는 것
Direct Memory Access (DMA)
DMA를 통한 더 효율적인 데이터 이동
DMA 엔진은 CPU의 개입 없이 장치와 주 메모리 간의 전송을 조정할 수 있는 장치이다. 운영 체제는 DMA 엔진에 데이터가 메모리 어디에 있는지와 얼마나 많은 데이터를 복사할지를 지시하여 프로그래밍한다. DMA가 완료되면, DMA 컨트롤러가 인터럽트를 발생시킨다.
장치와 운영체제가 실제로 어떻게 정보를 서로 교환하는가.?
Methods of Device Interaction
방법 1. I/O 명령어
x86의 in 및 out 명령어 장치에 데이터를 보내기 위해, 호출자는 데이터가 들어 있는 레지스터와 장치를 지정하는 특정 포트를 지정한다. 일반적으로 특권 명령어
방법 2. Memory-mapped I
하드웨어는 장치의 레지스터들이 마치 메모리상에 존재하는 것처럼 만든다. 특정 레지스터에 접근하기 위해, 운영체제는 주소에 대한 읽기 또는 쓰기 명령어를 실행한다.
✅ 두 방법 모두 큰 장점이 있는 것은 아님,
메모리 맵의 경우 새로운 명령어가 필요 없기 때문에 좋긴함,그치만 둘다씀
Device Drivers
Hard Disk Drives (HDD)
플래터(Platter)
데이터가 영구적으로 저장되는 원형의 단단한 표면 디스크에는 하나 이상의 플래터가 있을 수 있으며, 각 플래터는 2개의 면을 가지고 있으며, 각각을 표면( surface)라고한다.
스핀들(Spindle)
모터에 연결되어 플래터를 일정한 속도로 회전시킨다. 회전 속도는 분당 회전수로 측정된다.
트랙(Track)
데이터는 각 표면에 동심원의 형태로 구성된 섹터들에 인코딩되어 저장된다
디스크 헤드 (Disk Head)
디스크의 읽기 및 쓰기 작업은 디스크 헤드에 의해 수행됩니다. 드라이브의 각 표면마다 하나의 디스크 헤드가 있다
디스크 암 (Disk Arm)
디스크 헤드는 하나의 디스크 암에 부착되어 있으며, 디스크 암은 표면을 가로질러 이동하여 원하는 트랙 위에 헤드를 위치시킨다.
I/O Time
$T_{I/O} = T_{seek}+T_{rotation}+T_{transfer}$
seek time : 디스크 암을 올바른 트랙으로 이동시키는 데 걸리는 시간
Rotational Delay : 원하는 섹터가 디스크 헤드 아래로 회전하는 데 걸리는 시간
Acceleration → Coasting → Deceleration →Setting time(about 0.5~2 ms)
Disk Scheduling
운영체제는 디스크에 발행되는 I/O의 순서를 결정한다. I/O 요청 집합이 주어지면, 디스크 스케줄러는 요처들을 검토하고 다음에 어떤 요청을 스케줄링할지 결정한다.
Request
98, 183, 37, 122, 14, 124, 65, 67 (디스크 헤드는 53에서 시작)
방법1 : FCFS (First-Come, First-Served)
요청이 들어온 순서대로 처리 Response : 98 → 183 → 37 → 122 → 14 → 124 → 65 → 67
해당 방법은 단순 BUT, 디스크 헤드의 이동 거리가 최적화되지 않아서 효율적이지않을 수 있다.
방법2 : SSTF (Shortest Seek Time First)
I/O 요청 대기열을 트랙별로 정렬하여, 디스크 헤드가 가장 가까운 트랙에 있는 요청을 먼저 처리한다.
문제점
- drive geometry는 호스트 OS에서 사용할 수 없다. 대신 OS는 블록의 배열로 보게 된다. 따라서, 가장 가까운 블록 우선인 NBF 방식사용
- Starvation
Response
65 → 67 → 37 → 14 → 98 → 122 → 124 → 183
방법3 : 엘레베이터 ( 또는 SCAN, C-SCAN )
- SCAN : 디스크의 트랙을 따라 앞뒤로 이동하며 요청을 순서대로 처리
- C-SCAN : 외부 트랙에서 내부 트랙으로만 이동하여 요청을 처리한 후, 다시 외부 트랙으로 이동하여 다시 시작한다.
문제점 : 디스크 회전 비용을 무시한다.
Response
- SCAN : 디스크 헤드가 트랙을 따라 앞뒤로 이동하며 요청을 처리 37 → 14 → 65 → 67 → 98 → 122 → 124 → 183
- C-SCAN : 디스크 헤드가 외부에서 내부로 이동하며 요청을 처리한 후, 다시 뢰부로 이동하여 재시작 65 → 67 → 98 → 122 → 124 → 183 → 14 → 37
방법4 : SPTF ( Shortest Positioning Time First )
현대 드라이브에서는 탐색(Seek)과 회전(Rotation)의 시간이 비슷하다. SPTF는 탐색 시간과 회전 시간을 모두 고려하여, 가장 짧은 위치 지정 시간(Positioning Time)을 우선으로 처리한다.
문제점
- 운영 체제에서 구현하기가 더 어렵다.
- 현대 시스템에서는 디스크가 여러 대기 중인 요청을 처리할 수 있으며, 자체적으로 정교한 내부 스케줄러를 가지고 있다.
방법5 : I/O 병합
연속적인 요청들을 하나의 두 블록 요청으로 병합
기다림으로써 새로운 그리고 "더 나은" 요청이 디스크에 도착할 수 있다.
Selecting a Disk-Scheduling Algorithm
- SSTF 는 일반적이다.
- SCAN과 C-SCAN은 디스크에 무거운 부하를 가하는 시스템에 더 나은 성능을 제공
- 성능은 요청의 수와 유형에 따라 달라진다.
- 디스크 서비스 요청은 파일 할당 방법에 의해 영향을 받을 수 있다.
- 디스크 스케줄링 알고리즘은 운영 체제의 별도 모듈로 작성되어야 하며, 필요 시 다른 알고리즘으로 교체할 수 있어야 한다.
Cache
소량의 메모리 (일반적으로 약 8MB 또는 16MB)
- 디스크에서 읽거나 디스크로 쓰여진 데이터를 저장합니다.
- 디스크 드라이브가 요청에 빠르게 응답할 수 있도록 도와줍니다.
[출처]
https://github.com/remzi-arpacidusseau/ostep-translations/blob/master/korean/README.md
ostep-translations/korean/README.md at master · remzi-arpacidusseau/ostep-translations
Various translations of OSTEP can be found here. Help the cause and contribute! - remzi-arpacidusseau/ostep-translations
github.com
해당 책을 기반으로 정리하였습니다.
'Computer Science' 카테고리의 다른 글
[OSTEP 운영체제 정리] - File system implementation (0) | 2024.06.24 |
---|---|
[OSTEP 운영체제 정리] - File and Directories (0) | 2024.06.24 |
[OSTEP 운영체제 정리] - Concurrency Problem (0) | 2024.06.24 |
[OSTEP 운영체제 정리] - semaphore (0) | 2024.06.23 |
[OSTEP 운영체제 정리] - Condition Variable (0) | 2024.06.23 |