Mass Storage Structure
Mass Storage란
Mass Storage: 비휘발성, 세컨더리 스토리지라고 불리고 HDD, SSD가 여기에 해당한다.
HDD 스케줄링
- seek time(헤드가 특정 섹터를 찾아가는데 걸리는 시간)을 최소화
- bandwidth(시간당 한 번에 전송할 수 있는 용량)을 최대화
FIFO 스케줄링
가장 기본적인 스케줄링으로 선입선출 구조를 따르며, 효율적이지는 않다.
SCAN 스케줄링
양방향으로 탐색하는 방법. 즉, 왕복으로 탐색하는 방법.
C-SCAN 스케줄링
SCAN 방식을 개선한 방법으로 단방향으로만 탐색한다. 끝까지 탐색을 마치면 다시 처음으로 돌아가는데 그때는 데이터를 탐색하지 않는다.
부트 블록
- 부트스트랩 프로그램: 각각의 장치에 이르는 시스템의 모든 구성요소를 초기화해준 후 운영체제를 실행시켜주는 역할을 하는 프로그램.
- 부트스트랩 프로그램은 ROM의 특정 위치에 위치한 부트 블록에 저장된다.
- 이 부트 블록에 있는 코드는 디스크 컨트롤러가 부트 블록을 메모리에 적재한 후, 적재된 코드를 실행한다.
RAID
RAID(Redundant Array of Inexpensive Disks): 여러 개의 디스크를 하나의 디스크처럼 사용하는 것이다. 이렇게 하면 비용이 절감되고, 여러 개에 분산해서 저장하는 것으로 신뢰성 향상과 성능 향상의 효과를 낼 수 있다.
RAID에 대한 자세한 설명은 다음 링크를 참조하면 될 것 같다.
IO 시스템
- 컴퓨터의 대부분의 작업은 IO이다. 따라서 IO를 관리하는 것은 시스템의 핵심이라고 할 수 있다.
- OS가 하는 일은 결국 IO 디바이스를 관리하는 역할.
Memory-Mapped IO
- 프로세서는 컨트롤러에 내리는 명령을 어떻게 전달할까?
- 컨트롤러는 여러 개의 레지스터를 이용하여 데이터와 컨트롤 시그널을 제어한다. => data-in, data-out, status, control
- Memory mapped I/O: 메모리에 매핑되어 있는 프로세스 주소에 명령을 주면 컨트롤 레지스터를 다룰 수 있게 된다.
IO 타입
- polling: 레지스터에 정보가 왔는지를 계속해서 주기적으로 확인해주는 방법.
- interrupt: 인터럽트가 디텍션 되면 CPU에서 ISR에게 제어권을 넘겨서 인터럽트를 제어한다.
- DMA: CPU의 도움없이 데이터를 직접 메모리로 전송하는 입출력 방식. 대용량의 데이터를 전달할 때 사용한다.
Blocking IO vs Non-blocking IO vs Async
- Blocking I/O
IO 작업이 완료되기 전에는 다른 작업을 수행하지 못한다.
스레드가 실행 상태에서 대기 상태로 이동한다.
- Non-blacking I/O
IO 작업의 완료 여부와는 무관하게 즉시 응답을 해준다. 즉, IO가 완료되기 전에도 다른 작업을 할 수 있다.
대기 상태로 가지 않고 바로 리턴해준다.
다른 작업들을 수행하다가 중간중간 시스템 콜을 보내 IO가 완료되었는지 확인한다.
- Asynchronous
IO 작업이 완료되기 전에도 다른 작업을 할 수 있다.
Non-blocking IO와의 가장 큰 차이점은 IO처리가 백그라운드에서 실행되다가, 완료되면 커널이 유저 프로세스에게 인터럽트를 걸어주는 방식이라는 것이다.
※ blocking과 synchronous의 차이
blocking & non-blocking은 제어권을 넘겨주냐 아니냐의 개념이고, synchronous & asynchronous는 호출하는 함수가 신경을 쓰냐 안 쓰냐(polling)의 개념이라고 할 수 있다.
파일 시스템 인터페이스
파일 시스템: 데이터와 프로그램에 저장과 접근에 대한 메커니즘을 제공하는 시스템으로 크게 파일과 디렉토리로 구성되어 있다.
접근 방법
- sequential access
데이터에 연속적으로 접근해야 한다.
- direct access
데이터의 특정 부분에 랜덤하게 접근할 수 있다.
현대의 대부분의 접근 방식은 direct access로 이루어져 있다.
디렉토리 구조
- Single Level Directory
- Two Level Directory
- Tree Structured Directories
- Acyclic Graph Directories
파일 시스템 구현
Allocation Method
- 프로세스에게 메모리를 어떻게 할당할 것인가 중요한 문제인만큼 파일에게 공간을 어떻게 할당할 것인지도 중요한 문제가 된다.
- 마찬가지로 공간을 최대한 활용하면서 빠른 접근이 가능한 할당 방법을 선택해야 한다.
Contiguous Allocation
- 각각의 파일이 필요한 블록만큼을 연속적으로 할당한다.
- 파일을 연속적으로 할당하기 때문에 외부 단편화 문제가 생길 수 있고, 그로 인한 컴팩션이 생기게 된다.
Linked Allocation
- 연속적 할당 문제를 해결하기 위한 방법.
- 파일을 블락 단위로 쪼개고 링크드 리스트로 연결한다.
- 쪼갠 블락들은 저장장치 여러 곳에 산재되어 있다.
- 따라서 찾고 싶은 블락이 있다면 파일의 첫번째 블락부터 차례차례 탐색을 해야한다.
- FAT(File Allocation Table): 파일 탐색을 위해서는 파일의 처음 블락부터 시작해야 하는 Linked Allocation의 단점을 보완하기 위해서 블락에 다음 블락의 인덱스를 기록하는 테이블.
Indexed Allocation
- 다음 블락을 가리키는 포인터가 여기저기 흩어져 있는 Linked Allocation의 문제를 FAT없이 구현한 방법.
- 모든 포인터들을 하나의 인덱스 블락에 모아놓는 방법.
- 흔히 디지털 포렌식이라 부르는 데이터 복구 방법도 이러한 메커니즘을 이용한다.
Free Space Management
- 파일 시스템에서도 남아있는 free space를 관리하는 것이 중요하다.
- 메모리처럼 Linked List를 통해 관리한다.
'CS 지식 > 운영체제' 카테고리의 다른 글
운영체제 Ch10 - 가상 메모리 (0) | 2022.01.06 |
---|---|
운영체제 Ch9 - 메인 메모리 (0) | 2022.01.05 |
운영체제 Ch8 - 데드락 (0) | 2022.01.03 |
운영체제 Ch7 - 동기화 문제의 예시 (0) | 2021.12.13 |
운영체제 Ch6 - 프로세스 동기화(2) (0) | 2021.12.12 |