> For the complete documentation index, see [llms.txt](https://real-dev.gitbook.io/real-library/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://real-dev.gitbook.io/real-library/os_with_joonion/23-.-io.md).

# 23강. 스토리지와 IO

### Mass Storage

* 크고 휘발성이 없는 메모리. 주로 HDD, SDD, 마그네틱 테이프, 광학 디스크, 클라우드 스토리지가 있다.
* HDD를 사용하기 위해선 HDD Scheduling이 필요하다. 목표는 \*\*탐색 시간의 최소화. \*\*
  * FIFO. 당연히 최적은 아니다.
  * Scan. 굳이 찾지 말고 계속 arm이 돌면서 offset을 찾아내는 방식
  * C-Scan - 스캔을 하는데 한 방향으로만 돌리는 방식. 물리적, 기계적으로 유리하다. 실린더를 일종의 순환 리스트로 다루는 방식
* `Boot Block` : 컴퓨터를 킬 때, Bootstrap Loader를 저장해두는 공간

<br>

#### RAID: Redundant Arrays of Independent Disks

* 디스크 종합 테크닉을 다양하게 변경을 병렬적으로 처리하며 읽기,쓰기의 신뢰성을 향상시킨다.
* 중복된 데이터를 저장하는 테크닉
* 디스크의 갯수가 증가할 수록 Bad Sector가 발생할 가능성이 점진적으로 증가한다. 때문에 중요한 데이터를 싱글 디스크에 한번만 써서 저장할 수 없다. 때문에 복제를 통해 데이터의 복구 가능성을 향상시킨다.

<br>

### I/O

* 컴퓨팅 입장에서 많은 자원의 할당이 일어나는 부분은 사용자 제어보다도 IO처리가 많은 부분을 차지한다.
* OS가 하는 일은 IO를 접근과 IO기기를 관리하는 부분을 차지한다.

<br>

#### IO의 종류

* Polling : 계속 대기중인 IO
* Interrupt: 하드웨어, 소프트웨어 인터럽트로 나뉘고 하드웨어적인 인터럽트는 별도의 라인을 통해 인터럽트를 전달하고 감지하며, 소프트웨어적인 인터럽트는 발생 시 ISR(Interrupt service routine) 으로 제어권을 넘겨 인터럽트 벡터 테이블을 통해 제어하게 한다.
* DMA (Direct Memory Access): 프로그램 IO를 제외하고 하드웨어로 바로 꽂아버리는 방식

<br>

### File System

* 스토리지에 데이터를 작성하는 방식. 대부분의 경우 사용자가 제어하지 않고 운영체제가 핸들링하지만, RDBMS와 같은 섬세한 프로그램의 경우 파일의 제어권을 운영체제가 아닌 DBMS가 가지게 한다.

#### Access Method

* sequencail : 순차적으로 쭉 읽는 방식. 마그네틱 테이프와 같은 방식
* random access: 랜덤 액세스… 진짜 랜덤하게 아무데나 읽는 방식은 아니고 접근을 원하는 특정 위치에 딱 접근하는 방식. 당연하게도 순차적 접근보다 효율적이다.

<br>
