개발하는 삶
[운영체제] 디스크 본문
Logical Disk ( = Partition)
- 운영체제가 보는 디스크는 논리적 디스크임
- 하나의 물리적 디스크 안에 여러 파티션을 두는게 일반적임
- 여러개의 물리적 디스크를 하나의 파티션으로 구성하기도 함
ex. c드라이브/d드라이브 나누기 - 물리적 디스크를 파티션으로 구성한 뒤 각각의 파티션에 file system을 깔거나
- swapping 등 다른 용도로 사용할 수 있음
- swapping 등 다른 용도로 사용할 수 있음
디스크
- 파일 요청사항 등을 전달.
- 실행파일 전달시작 -> 가상메모리 생성(디스크 스왑영역에 전달됨) -> 메모리로 전달성공
- 디바이스 컨트롤러
- 하드웨어
- 디스크를 관리하는 작은 CPU. 보통 이 컨트롤러가 CPU에게 전달해주는 역할을 함.
- 디스크 스케줄링
- 어떻게 효율적으로 탐색시간이 짧은것부터 디스크들을 액세스할것인가 고민함
- 탐색시간/회전지연/전송시간
- 한계 : 탐색시간이 긴 디스크는 오래걸릴수있음
- 한계 해결: 디스크 스케줄링 SCAN
- 디스크의 한쪽 끝에서 다른쪽 끝으로 이동, 또 디스크의 반대쪽 끝으로
이동/반복해 길목에 있는 모든 요청을 처리한다
- 디스크의 한쪽 끝에서 다른쪽 끝으로 이동, 또 디스크의 반대쪽 끝으로
디스크 스케줄링
- 컴퓨터는 그때마다의 상황에 맞게 데이터를 저장하기 때문에,
- 여기저기 저장되있는 데이터를 상황에 맞게 접근할 것인지 고민해야 한다
- 탐색시간을 최소화 하는 것이 목표
Access time의 구성
- 탐색시간 : read/write 헤드를 데이터가 저장되있는 트랙 위치로(명령문을 처리하기 위해) 이동시키는데 걸리는 시간
- 회전 지연시간 : 헤드가 원하는 섹터에 도달하기까지 걸리는 시간
- 전송 시간 : 헤드가 찾은 데이터를 디스크로부터 사용자의 버퍼로 보내지는 데 걸리는 시간
Disk bandwidth
- 단위 시간 당 전송된 바이트 수
Disk Structure
- logical block : 디스크의 외부에서 보는 디스크 단위 정보 저장 공간들. 주소를 가진 1차원 배열처럼 취급.
- Sector : logical block이 물리적인 디스크에 매핑된 위치
디스크 스케줄링 종류
FCFS
- 가장 먼저 들어온 것을 먼저 처리하는 방식
SSTF
- queue에 들어온 것중에 디스크의 현재 위치를 기준으로 가장 가까운 것부터 처리함
- 문제점 : 한쪽만 빨리되서 멀리있는건 너무 오래걸리는 기아현상 발생
SCAN
- 디스크의 한쪽 끝에서 다른쪽 끝으로 이동하는 식으로 반복(역방향도 순회). 가는길목마다 모든 요청을 처리함
- 문제점 : 실린더 위치에 다라 대기시간이 다르다
C-SCAN
- 헤드가 한쪽 끝에서 다른쪽 끝으로 이동하여 가는길목마다 모든 요청을 처리함
- 다른쪽 끝에 도달하면 곧바로 출발점으로 다시 이동
- SCAN 보다 균일한 대기시간을 보장함
N-SCAN
- SCAN의 변형 알고리즘
- 진행 중 새롭게 발생된 요청은 서비스하지 않고, 다음진행시에(반대방향으로 갈 때) 처리
LOOK, C-LOOK
- SCAN, C-SCAN 을 보완한 스케줄링
- 끝단에 요청이 없어도 무조건 끝단까지 도달하는 특징을 없앰
- 불필요한 헤드 이동시간은 제거했으나, 끝단으로 가야할지 판단에 있어 오버헤드 발생
- LOOK : SCAN을 보완한 스케줄링
- C-LOOK : C-SCAN을 보완한 스케줄링
디스크 관리
physical formatting
- 디스크 컨트롤러가 읽고 쓸 수 있도록, 디스크를 sector들로 나누는 과정
- 각 섹터는 헤더 + 실제데이터(보통 512bytes) + 트레일러 로 구성
- sector에 접근하기 위한 정보+error correcting code 로 구성
Partitioning
- 디스크를 하나 이상의 실린더 그룹으로 나누는 과정
Logical formatting
- 이미 만들어진 partition에 파일 시스템을 만드는 것
Booting
- ROM에 있는 small bootstrap loader의 실행
Swap-Space 관리
Swap-space
- 가상 메모리 시스템에서는 디스크를 연장 공간으로 사용
- 파일 시스템 내부에 둘 수 있으나, 별도 파티션 사용이 일반적
- 공간 효율성 < 속도 효율성 우선
- 일반 파일보다 훨씬 짧은 시간만 존재하고 자주 참고됨
RAID
- 여러개의 디스크를 묶어서 사용
- 사용목적
- 디스크 처리속도 향상 : 여러디스크에서 block의 내용을 분산저장 (병렬성)
- 신뢰성 향상 : 동일 정보를 여러디스크에 중복 저장
Free-Space ManageMent (디스크 자유공간 관리)
- 자유 공간은 bit map / bit vector 으로써 구현됨
- 빈 파일 찾기
- 각각 블록에 0과 1로 번호를 매김. (0: 파일 사용안함, 1: 파일 사용중)
방식 세가지
- Counting 제외하고 모두 연속적인 빈 공간을 찾기에 효율적이지 않음
- Counting 은 연속적인 블록을 찾기 좋음.
UNIX 파일시스템
UNIX 파일시스템의 구조
컴퓨터의 대부분의 파일시스템에 해당
super 블록
- 파일시스템의 총체적 레이아웃 정보 보관
- 블록의 크기, inode의 수, data block의 수, free block list의 head
i-node 블록
- 메타데이터 보관 (실제 데이터 블록의 위치 정보 포함)
data 블록
- 실제 데이터 보관
FAT 파일 시스템
- 윈도우즈 계열에서 보통 사용
- boot block
- FAT : 파일의 메타데이터 일부를 저장. 나머지 정보는 디렉토리에 가지고 있음
- 테이블 전체를 메모리에 올려놓음
- 연결 할당의 단점을 모두 극복함. 다음 블럭의 위치도 별도로 관리.
- Root directory : 파일 이름 등 저장
- Date block
Ext2 파일시스템
블록의 그룹화
- 메타데이터와 실제데이터를 인접하게 배치하여, 디스크 탐색 시간을 감소시킴
수퍼블록의 중복저장
- 수퍼블록을 그룹마다 중복저장하여 디스크 오류에 대비함
수퍼블록
- 파일시스템에 대한 제어 정보
- 아이노드/가용 아이노드 수, 데이터블록/가용 데이터블록 수
- 그룹 당 블록 수, 시간 정보
- block bitmap 을 통해 블록이 사용중인지 파악함
그룹 디스크립터
- 블록 그룹에 대한 제어 정보
- 블록/아이노드 비트맵의 위치
- 비어있는 블록/아이노드의 갯수
- 아이노드 테이블의 위치
비트맵
- 블록 비트맵 : 사용중인 데이터블록과 빈 데이터블록의 표시. (한 비트가 한 블록의 상태를 표시)
- 아이노드 비트맵 : 사용중인 아이노드와 빈 아이노드의 표시. (한 비트가 한 아이노드의 상태를 표시)
- 아이노드 테이블 : 실제 아이노드의 저장 위치
Ext4 파일시스템
- EXt2 + 저널링
- 갑작스럽게 전원 공급이 중단되면?
- 파일시스템 일관성 훼손 발생
- 저널링으로 문제 해결 (5~30초 단위로 버퍼캐시에서 수정된 내용을 저널영역에 기록)
- ex. 이미지가 로딩될때, 로딩되는 과정을 관찰하지 않고,
- 저널링으로 미리 변경될 파일 이미지를 보여주는 것
Ex4의 저널링 (메타데이터 저널링 모드)
- Ex4의 디폴트 옵션 저널링 (메타데이터만 저널링)
- 저널링 주기가 도래하면 데이터를 파일시스템에 저장 후, 메타데이터를 저널영역에 기록
- 체크 포인팅 주기가 도래하면 메타데이터를 파일시스템에 반영
- 크래쉬 발생 시, 파일시스템 자체가 깨어지는 것 방지 (일부 데이터 훼손 가능)
Ex4의 저널링 (데이터 저널링 모드)
- 메타데이터와 일반데이터를 모두 저널링
- 저널링 주기가 도래하면, 데이터와 메타데이터를 저널영역에 기록
- 체크 포인팅 주기가 도래하면 데이터, 메타데이터를 파일시스템에 반영
- 크래쉬 발생 시, 데이터 자체의 복구 보장
LRFU 알고리즘
- 최근에 참조된 것일수록 블록의 가치를 높게 평가함
- LRU가 최근 참조 성향만 고려하고, LFU는 참조횟수만 고려하는 데 비해 LRFU는 두가지 다 고려함
- 객체의 참조 가능성을 계산할 시,
- 해당 객체의 과거의 모든 블록의 빈도와 최신성을 보고, 교체 대상을 선정할 수 있도록 함
'CS > 운영체제' 카테고리의 다른 글
[운영체제] 파일 시스템 (0) | 2022.08.01 |
---|---|
[운영체제] 메모리 관리 (0) | 2022.07.12 |
[운영체제] 동기화 (0) | 2022.07.07 |
[운영체제] CPU (0) | 2022.07.05 |
[운영체제] 프로세스 (0) | 2022.06.27 |