09 OS - 입출력 시스템과 디스크관리
09 OS - 입출력 시스템과 디스크관리
01. 입출력 시스템 관리
1. 입출력 시스템/입출력 모듈/입출력장치
- 입출력 장치 (I/O Device)
- 가장 말단의 실제 물리적 장치
- 사용자와 실제로 데이터를 주고받는 대상
- 키보드, 마우스, 프린터, 디스크, 네트워크 카드
- 데이터를 물리적으로 입력받거나 출력하는 하드웨어
- 입출력 모듈 (I/O Module)
- CPU ↔ I/O 장치 사이의 중계자
- 하드웨어이면서, 디바이스 컨트롤러(controller)가 이 역할을 수행
- 느린 장치 ↔ 빠른 CPU 간 속도 차이, 포맷 차이 해결
- CPU 대신 장치와 직접 통신 / 데이터 버퍼링 / 인터럽트 요청 / 제어 신호 변환
- CPU ↔ (입출력 모듈) ↔ 디스크, 프린터 등
- 입출력 시스템 (I/O System)
- 운영체제(OS) 내의 소프트웨어 계층
- 입출력 요청 처리 전반을 관리
- 커널 안의 서브시스템: 입출력 서브시스템 (I/O Subsystem)
- 응용프로세스의 입출력 호출 관리 (read(), write() 등) / 장치 드라이버 호출
- 버퍼링, 캐싱, 스풀링 등 고급 I/O 기능 처리 / 장치 독립성 보장
2. 흐름
- 유저가 파일을 저장하려고 할 때:
1 2 3 4 5
응용프로그램이 write() 시스템콜 → OS의 입출력 시스템(I/O subsystem)이 요청 처리 → 적절한 장치 드라이버 호출 → 입출력 모듈이 명령 전송 및 데이터 중계 → 실제 디스크(입출력 장치)에 데이터 기록
3. 프로세서 역할에 따른 입출력 방법
- 프로세서 제어입출력(프로그램 제어 입출력, 인터럽트 기반 입출력)
항목 | 프로그램 제어 입출력 (Polling) | 인터럽트 기반 입출력 |
---|---|---|
통신 방식 | CPU가 반복 확인 (Polling) | 장치가 인터럽트 발생 |
CPU 개입 | 지속적으로 장치 상태 확인 | 필요할 때만 응답 |
효율성 | CPU 낭비 큼 (Busy-Waiting) | CPU 효율적 (비동기 처리) |
복잡성 | 구현 쉬움 | 인터럽트 핸들링 필요 (복잡) |
응답 시간 | 빠름 (바로 감지 가능) | 장치가 늦게 인터럽트 보내면 지연될 수 있음 |
사용 예시 | 임베디드, 단순 키 입력, 센서 읽기 | 키보드, 마우스, NIC, 디스크 등 |
- 흐름
- CPU가: “이 데이터를 디스크에 저장해줘”라고 OS에게 요청
- OS는 디스크 드라이버를 통해 디스크 컨트롤러에 요청 전송
- 디스크는:
- 플래터 회전 중인지 확인
- 트랙/섹터 위치에 읽기/쓰기 헤드가 도달했는지 확인
- 버퍼가 비어 있는지 확인
- 이 조건이 충족되면: 디스크 컨트롤러가 “준비됨” 상태 플래그 설정
- CPU에서 확인
- 인터럽트 기반 입출력 : 인터럽트를 발생시켜 CPU에게 알림
- 프로그램 제어 입출력 : CPU가 디스크 컨트롤러의 상태 레지스터를 계속 확인함 → 폴링(Polling)
- 최종적으로 CPU가 메모리 / 디스크에 입력을 진행함.
- DMA(Direct Memory Access) 입출력
- CPU를 거치지 않고 입출력 장치 ↔ 메모리 간에 직접 데이터 전송이 가능하도록 설계된 하드웨어 장치
- 즉, DMA 컨트롤러와 협력해서 데이터 전송을 자동으로 처리할 수 있는 장치
- CPU가 직접 데이터를 읽거나 쓰지 않고, DMA 컨트롤러가 입출력 장치와 메모리 사이에서 직접 데이터 전송을 수행.
- CPU는 DMA에게 작업을 요청(명령)하고, 전송이 끝나면 DMA가 CPU에게 인터럽트로 완료를 알리는 역할.
- 흐름
- CPU가 DMA 컨트롤러에 입출력 작업과 메모리 주소, 데이터 크기를 설정
- DMA 컨트롤러가 입출력 장치와 직접 데이터 전송 시작
- 입출력 장치는 DMA 컨트롤러와 통신하며 데이터를 전송 또는 수신
- 데이터 전송 완료 시 DMA 컨트롤러가 CPU에 인터럽트 발생 알림
- CPU는 후속 작업 수행
- 입출력 채널
- 입출력 채널은 컴퓨터 시스템에서 입출력 장치와 메모리 사이의 데이터 전송을 전담하는 독립적인 하드웨어 장치.
- 일종의 작은 입출력 전용 프로세서를 의미함.
구분 입출력 채널 DMA 기능 입출력 전체 작업 제어 (명령 처리 포함) 데이터 전송만 수행 독립성 독립적인 입출력 프로세서 수준 하드웨어 데이터 전송 장치 명령 처리 가능 불가능 (명령어 처리 안 함) 복잡한 입출력 지원 여러 장치 및 복잡한 작업 가능 단순한 데이터 이동 중심 - 흐름
- CPU가 입출력 채널에 입출력 명령 전송
- 입출력 채널이 장치와 직접 통신하며 입출력 작업 수행
- 작업 완료 시 CPU에 인터럽트 신호 전달
- CPU는 후속 처리 진행
- 종류
채널 종류 특징 동작 방식 용도 및 대상 장치 셀렉터 채널 - 한 번에 한 개 장치와 전용 통신 - 한 장치 독점 연결 및 처리 - 고속, 대용량 입출력 장치 (예: 디스크) 멀티플렉서 채널 - 여러 장치를 동시에 관리 - 시간 분할 방식으로 다수 장치 처리 - 저속 다수 입출력 장치 (예: 키보드, 프린터) 블록 멀티플렉서 채널 - 셀렉터와 멀티플렉서 장점 결합 - 대용량은 독점, 소량은 시간 분할 - 혼합 환경(고속 + 저속 장치 혼재)
4. 커널 입출력 서브시스템
- 커널 입출력 서브시스템(I/O Subsystem in Kernel)은 운영체제 커널 내부에서 입출력을 효율적으로 관리하고 추상화하는 계층
- 하드웨어 장치와 사용자 프로그램 사이에서 중재자 역할을 하며, 여러 가지 성능, 보안, 안정성을 보장하는 구조로 구성
- 입출력 관련 서비스
기능명 | 설명 | 목적 / 효과 | 예시 |
---|---|---|---|
I/O 스케줄링 | 다수의 I/O 요청 중 처리 순서를 결정 | 디스크 헤드 이동 최소화, 처리 효율성 향상 | FCFS, SSTF, SCAN, C-SCAN |
버퍼링 (Buffering) | I/O 시 데이터를 RAM에 임시 저장하여 CPU와 장치 간 속도차 보완 | CPU가 기다리지 않고 작업 가능 (비동기 처리) | 네트워크 송수신 버퍼, 키보드 입력 버퍼 |
캐싱 (Caching) | 자주 사용하는 데이터를 메모리에 저장하여 빠르게 접근 | 속도 향상, 장치 접근 횟수 감소 | 페이지 캐시, 디스크 블록 캐시 |
스풀링 (Spooling) | I/O 요청을 디스크에 저장해두고 순차적으로 장치에 전달 | 느린 장치 사용 시 사용자 대기 시간 감소 | 프린터 출력 대기열 |
오류 처리 | 입출력 중 발생하는 오류를 감지하고 복구 또는 무시 | 시스템 안정성 유지, 데이터 보호 | 패리티 검사, 재시도, 오류 로그 기록 |
자료 관리 | 저장 장치 내 데이터의 구조 및 메타데이터 관리 | 파일 시스템, 데이터 위치 추적, 보안 | FAT, NTFS, ext4 등 |
02. 디스크의 구조와 스케줄링
1. HDD/SSD
비교 항목 | HDD | SSD |
---|---|---|
동작 방식 | 자기 디스크 회전 + 기계식 헤드 | 전자 회로 기반 플래시 메모리 |
속도 | 느림 (물리적 제한) | 빠름 (랜덤 액세스 강점) |
내구성 | 충격에 약함 | 상대적으로 강함 |
수명 | 오랫동안 사용 가능 (쓰기 제한 적음) | 쓰기 횟수 제한 있음 |
가격 | GB당 저렴 | 상대적으로 비쌈 |
2. 전체 흐름
- 사용자 프로세스가 read() 요청
- 파일 시스템 → 블록 I/O 계층 → I/O 큐 등록
- 디스크 스케줄러가 큐를 정렬해서 최적 순서 결정
- 디바이스 드라이버가 디스크 컨트롤러에 명령 전달
- 디스크 컨트롤러가 DMA 명령 발행
- DMA 엔진이 디스크에서 메모리로 직접 데이터 전송
- CPU는 인터럽트로 완료 통보 받음 → 사용자에게 결과 전달
3. 디스크
- 디스크 플래터(Platter): 금속 재질의 원반으로, 자성을 띠는 물질로 코팅되어 있음
- 읽기/쓰기 헤드(Head): 플래터 위를 움직이며 데이터를 자성 형태로 기록하거나 읽음
- 회전: 디스크는 고속으로 회전하며, 헤드는 트랙 위를 따라 이동함
- 자기적 저장:
- 0 또는 1을 표현하기 위해 플래터에 자성을 다르게 인가
- 예: N극 → 0, S극 → 1 (추상적 표현)
4. 디스크 스케줄링 알고리즘
알고리즘명 | 간단 설명 | 특징 및 장점 |
---|---|---|
선입선처리 (FCFS) | 요청이 도착한 순서대로 처리하는 방식으로, 별도의 최적화 없이 단순히 큐에 쌓인 순서대로 I/O 작업을 수행함 | 구현이 매우 간단하며 공정성을 보장하지만, 비효율적일 수 있음 |
최소 탐색 시간 우선 (SSTF) | 현재 헤드 위치에서 가장 가까운 디스크 요청을 우선 처리하여 헤드 이동 거리를 최소화함으로써 평균 대기 시간을 줄임 | 헤드 이동 거리가 적어져 성능 향상 가능하지만, 특정 요청이 무한정 지연될 위험 있음 |
스캔 (SCAN) | 헤드가 한 방향으로 끝까지 이동하면서 그 방향의 모든 요청을 처리하고, 다시 반대 방향으로 이동하며 요청을 처리함 | 헤드 이동이 균등하게 분배되어 스타베이션(기아 현상)을 줄임 |
순환 스캔 (C-SCAN) | 스캔과 유사하지만 헤드가 한 방향으로만 이동하고 끝에 도달하면 빠르게 처음 위치로 돌아가 다시 한 방향으로 이동하며 처리함 | 요청에 대해 공평한 서비스 제공하고, 반응 시간 예측이 쉬움 |
룩 (LOOK) | 스캔과 유사하지만 헤드가 디스크 끝까지 가지 않고 마지막 요청 위치까지만 이동하여 불필요한 이동을 줄임 | 헤드 이동 최적화로 효율성 증가 |
최소 지연시간 우선 | 요청들 중 가장 빨리 완료될 수 있는 요청을 우선 처리해 전체 응답 시간을 최적화하려는 전략 | 응답 시간을 단축할 수 있으나, 구현이 복잡하고 특정 요청이 지연될 수 있음 |
최소 위치 설정 시간 우선 | 헤드 이동 시간과 디스크 회전 시간을 모두 고려해 가장 빠르게 처리 가능한 요청을 선택하는 복합 최적화 방식 | 실제 하드웨어 특성을 반영해 최적의 성능을 내도록 설계됨 |
03. RAID
1. RAID
- 운영체제로 여러대의 물리적 디스크를 하나의 논리적 디스크로 인식하는 기술
- 데이터 보호 (중복 저장으로 장애 대비), 성능 향상 (병렬 처리로 속도 개선)
2. RAID 계층
RAID 레벨 | 구성 방식 | 데이터 저장 방식 | 장점 | 단점 | 최소 디스크 수 |
---|---|---|---|---|---|
RAID 0 | 스트라이핑 (분산 저장) | 데이터를 여러 디스크에 나누어 저장 | 읽기/쓰기 속도 향상, 구현 단순 | 데이터 중복 없음, 하나라도 고장 시 전체 데이터 손실 | 2 |
RAID 1 | 미러링 (복제) | 동일 데이터를 두 개 이상의 디스크에 복제 | 높은 데이터 안정성, 빠른 복구 가능 | 저장 용량 효율 50%, 비용 증가 | 2 |
RAID 2 | 비트 수준 스트라이핑 + ECC | 비트 단위 분산 저장, 해밍코드 등 ECC 사용 | 뛰어난 오류 검출 및 복구 능력 | 복잡하고 비효율적, 현재 거의 사용 안 함 | 다수 |
RAID 3 | 바이트 수준 스트라이핑 + 단일 패리티 | 바이트 단위 분산 저장, 패리티 1개 디스크에 집중 | 연속 데이터 전송 속도 높음 | 단일 패리티 디스크가 병목 발생 가능 | 3 이상 |
RAID 4 | 블록 수준 스트라이핑 + 단일 패리티 | 블록 단위 분산 저장, 패리티 1개 디스크에 집중 | 읽기 성능 우수 | 쓰기 시 패리티 업데이트로 성능 저하 | 3 이상 |
RAID 5 | 블록 수준 스트라이핑 + 분산 패리티 | 블록 단위 분산 저장, 패리티도 여러 디스크에 분산 | 장애 허용, 용량과 안정성의 균형 | 쓰기 성능 저하, 최소 3개 디스크 필요 | 3 이상 |
RAID 6 | 블록 수준 스트라이핑 + 이중 분산 패리티 | RAID 5에 추가 패리티 1개 더 분산 | 2개 디스크 장애 허용, 높은 안정성 | RAID 5보다 더 큰 쓰기 성능 저하, 최소 4개 디스크 필요 | 4 이상 |
RAID 0+1 | 스트라이핑 후 미러링 | RAID 0 스트라이핑한 두 세트를 미러링 | 성능과 안정성 모두 우수 | 디스크 4개 이상 필요, 비용 높음 | 4 |
RAID 10 | 미러링 후 스트라이핑 | RAID 1 미러링한 세트를 RAID 0으로 스트라이핑 | RAID 0+1과 유사하지만 장애 허용 범위가 더 넓음 | 디스크 4개 이상 필요, 비용 높음 | 4 |
- 스트라이핑(Stripping): 데이터를 여러 디스크에 나누어 저장해 속도를 높임
- 미러링(Mirroring): 같은 데이터를 두 개 이상의 디스크에 복제해 데이터 안전성 확보
- 패리티(Parity): 오류 검출/복구용 데이터, 장애 시 복원에 사용됨
This post is licensed under CC BY 4.0 by the author.