[문과 코린이의 IT 기록장] 운영체제(OS) - Disk Management and Scheduling (Disk Structure, Disk Management, Disk Scheduling, Disk Scheduling Algorithm, Swap-Space Management, RAID)
1. Disk Structure
1) Logical Block
* 디스크의 외부(컴퓨터 host의 내부)에서 보는 디스크의 단위 정보 저장 공간 (disk 외부에서 관리하는 단위)
- 주소를 가진 1차원 배열처럼 들어가 있음.
* 요청은 배열의 몇 번째에 있는 원소를 달라는 식으로 요청을 함.
- 정보를 전송하는 최소 단위
2) Sector
* sector는 disk 내부에서 관리하는 단위
* sector에 데이터를 읽고 쓰는 것은 disk controller가 관리함.
* disk controller는 요청이 들어온 것에 대한 것을, 어떠한 트랙의 조각에 위치시킬 것인지를 결정한다.
- Logical Block이 물리적인 디스크(Physical disk)에 매핑된 위치
* Logical Block과 Sector는 매핑되어있음.
- Sector 0은 최외곽 실린더의 첫 트랙에 있는 첫번째 섹터이다
* physical disk의 sector 0번은, Logical disk 상에서도 0번에 위치함. (부팅과 관련된 정보 저장)
2. Disk Management
1) Physial Formatting (Low-level Formatting)
- 디스크를 컨트롤러가 읽고 쓸 수 있도록 sector들로 나누는 과정
* 공장에서 disk를 처음 만들 때, 그 disk를 disk controller가 읽고 쓸 수 있는 sector단위로 나눠놓는 과정을 formatting이라고 함
* 과거에는 dsik를 사면, 사용자가 일일이 formatting(포멧)을 해야 했음
* 그러나 최근에는 워낙 disk의 용량이 커서 formatting(포멧)에 엄청난 시간이 들기 때문에, 구매할 때 이미 해서 나오는 경우가 많음
- 각 sector는 header + 실제 data(보통 512bytes) + trailer로 구성
- header와 trailer는 sector number, ECC(Error-Correcting Code) 등의 정보가 저장되며 disk controller가 직접 접근 및 운영
* disk 외부에서, logical block에 해당하는 블록을 읽거나 쓰라고 요청을 하면, disk 내부의 sector에 그 내용을 씀
* header와 trailer에는 그 내용이 제대로 써있는지를 체크하는 ECC나, 주소 매핑을 위한 sector number 등을 부가적으로 저장을 함.
** ECC 함수 : 512byte 데이터 저장 + 데이터의 축약코드 저장 (hash함수 같은 것을 통해 축약된 코드)
** ECC값과 데이터로 만든 값과 비교해 같은지를 확인. bad sector가 나지 않는다면 그대로 실행. (에러 검출 가능)
* 즉, header와 trailer에는 disk controller가 데이터를 읽고/쓰고 할 때, 부가적인 정보를 저장함
2) Partitioning
- 디스크를 하나 이상의 실린더 그룹으로 나누는 과정
* 즉, sector 영역들을 묶어서 하나의 독립적인 disk(Logical disk)를 만드는 것
ex. disk 하나를 사서 C드라이브, D드라이브 등 나누는 것
- OS는 이것을 독립적 disk로 취급 (logical disk)
3) Logical Formatting
- 파일시스템을 만드는 것
* 즉, Partitioning이 끝난 후, 각각의 파티션을 swap area용도나 file system 용도로 사용할 수 있는데, 그 중 파티션에 file system을 설치하는 것을 logical formatting이라고 함.
- FAT, inode, free space 등의 구조 포함
4) Booting (부팅의 절차)
# 처음 메모리는 모두 다 비어있음 (프로그램, 운영체제 모두 X)
- ROM에 있는 'small boostrap loader'의 실행
* 메모리 영역 중, 전원이 나가도 내용이 유지되는 소량의 부분인 ROM이 있음. 이 부분에 부팅을 위한 아주 간단한 loader가 저장되어있음.
- sector 0(boot block)을 load하여 실행
* 컴퓨터 전원을 켜게 되면 cpu 제어권이 ROM의 주소를 가르키고, ROM에 있는 small boostrap loader라는 게 cpu에서 명령어로 실행됨. (HDD의 0번 sector에 있는 내용을 메모리에 올리고 실행하라)
- sector 0은 'full Boostrap loader program'
- OS를 디스크에서 load하여 실행
* boot block이 실행되고 나면, file system에서 운영체제 커널의 위치를 찾아서 메모리에 올리라고 지시
3. Disk Scheduling
1) Acceess time의 구성
a. Seek time
- 헤드를 해당 실린더(트랙)로 움직이는데 걸리는 시간
* 이 시간이 디스크 접근 시간에서 가장 큰 시간구성요소임. (기계장치 이동이기 때문)
b. Rotational tatency
- 헤드가 원하는 sector에 도달하기까지 걸리는 회전지연시간
c. Transfer time
- 실제 데이터를 읽고/쓰고 전송하는 시간
* 이 시간이 가장 적은 시간을 차지함.
* 고속의 입출력이 필요한 경우, 한번의 seek로 많은 양을 transfer하는 것이 이득임. (매번 적은 데이터들을 위해 seek하면 disk가 비효율적으로 돌아감)
2) Disk bandwidth
* disk의 성능을 나타내는 것
- 단위 시간 당 disk에서 전송된 바이트의 수
* 이것을 높이려면, 즉 disk가 효율적으로 동작하려면 seek time을 줄일 수 있도록 노력해야함.
3) Disk Scheduling
- seek time을 최소화하는 것이 목표
- seek time = seek distance
4. Disk Scheduling Algorithm
Question ) 큐에 다음과 같은 실린더 위치의 요청이 존재하는 경우, disk 헤드 53번에서 시작한 각 알고리즘의 수행 결과는? (실린더 위치는 0-199)
head start : 53
queue : 98, 183, 37, 122, 14, 124, 65, 67
* scheduling algorithm이 구현되는 곳이, 일반적으로 disk 내부가 아님.
* IO scheduiler는 disk보다는 운영체제쪽에 존재하기 때문에, 정확한 disk상의 위치는 파악할 수 없음
* 따라서 논리블록번호(logical block)을 보고 스케줄링을 하면, 어느 정도는 그 정보가 disk상의 sector에 맞아떨어짐. 그 방식으로 스케줄링을 함.
* 여기서는 실린더 번호로 구현하는 방법에 대해 이야기해보고자 함.
1) FCFS (First Come First Service)
- 먼저 들어온 순서대로 처리해주는 방법
- 단점 : 안쪽 트랙과 바깥쪽 트랙이 번갈아 요청하게 되면 디스크 헤더가 굉장히 많이 이동을 해야하는, 비효율성 발생
2) SSTF (Shortest Seek Time First)
- 현재 disk head 위치에서 제일 가까운 요청을 먼저 처리한다. (큐에 들어와있는것들 중)
- 단점 : starvation 문제 발생 가능 (큐에 다시 더 가까운 주소영역의 요청이 계속 들어올 경우, 헤드가 이동하지 못함)
3) SCAN (= 엘리베이터 스케줄링)
- disk arm이 디스크의 한쪽 끝에서 다른쪽 끝으로 이동하며 가는 길목에 있는 모든 요청을 처리한다.
* 사이에 큐에 들어온 것도 처리
- 다른 한쪽 끝에 도달하면, 역방향으로 이동하며 오는 길목에 있는 모든 요청을 처리하며 다시 반대쪽 끝으로 이동한다.
- 장점 : 디스크 헤드의 이동거리가 짧아지며, starvation 문제가 발생하지 않는다.
- 문제 : 실린더 위치에 따라 대기 시간이 다르다.
ex. 가운데 부분은, 기다리는 시간의 예상 기대치가, 가장자리 부분보다 상대적으로 짧다.
# 기본적으로 disk scheduling algorithm은 SCAN에 기반한 알고리즘들을 쓰고 있음. (공정성을 기반)
4) C-SCAN
- 헤드가 한쪽 끝에서 다른쪽 끝으로 이동하며 가는 길목에 있는 모든 요청을 처리한다.
* 사이에 큐에 들어온 것도 처리
- 다른쪽 끝에 도달했으면, 요청을 처리하지 않고 곧바로 출발점으로 다시 이동한다.
* 큐의 요청을 처리하지 않으면서 이동한다
- 장점 : SCAN보다 균일한 대기 시간을 제공한다.
5) Other Algorithms
(1) N-SCAN
- SCAN의 변형 알고리즘
- 일단 arm이 한 방향으로 움직이기 시작하면 그 시점 이후에 도착한 job은 되돌아올 때 service
* 즉, 큐에 미리 들어온 것은 지나가면서 처리하고, 지나가는 도중에 큐에 들어온 것은 다음에 처리하는 방식
* 큐에 들어온 요청들이 기다리는 시간의 분포가 좀 더 짧아지는 장점이 존재.
(2) Look and C-Look
- SCAN이나 C-SCAN은 헤드가 디스크 끝에서 끝으로 이동
- Look과 C-Look은 헤드가 진행중이다가 그 방향에 더 이상 기다리는 요청이 없으면, 헤드의 이동방향을 즉시 반대로 이동한다.
* SCAN하고 C-SCAN의 약간의 비효율적인 측면을 개선한 것.
* Look은 SCAN의 보완, C-Look은 C-SCAN의 보완
6) Disk-Scheduling Algorithm의 결정
- SCAN, C-SCAN 및 그 응용 알고리즘은 Look, C-Look 등이 일반적으로 디스크 입출력이 많은 시스템에서 효율적인 것으로 알려져 있다.
* 현대에서 많이 쓰는 알고리즘 (scan에 기반한 알고리즘)
- File의 할당 방법에 따라 디스크 요청은 영향을 받는다.
* 연속할당을 하는 경우에는, 연속된 실린더 위치에서 읽어갈 수 있는 알고리즘을 활용해 이동거리를 줄일 수 있음.
- disk scheduling algorithm은 필요한 경우, 다른 알고리즘으로 쉽게 교체할 수 있도록 OS와 별도의 모듈로 작성되는 것이 바람직하다.
* 커널의 내부 모듈과는 별도로 만들어, 필요할 때 다른 알고리즘으로 교체해서 쓸 수 있도록 하는 것이 바람직함. (파일 할당 등 여러 요소에 따라서도 알고리즘이 달라져야 하기 때문)
5. Swap-Space Management
1) Disk(보조기억장치)를 사용하는 두 가지 이유
* 메모리의 제약점 때문
- Memory는 휘발적인 성질을 가지고 있다.
: DRAM 메모리는 내용이 사라지는 휘발적인 특성을 가지고 있기 때문에, file system처럼 영속적으로 데이터를 유지해야 하는 메모리는 비휘발성의 디스크에 저장해야 한다.
- 프로그램 실행을 위한 메모리 공간이 부족하다. 즉 DRAM 메모리의 공간이 한정되어 있다.
: 현대의 컴퓨터는 multiprogramming degree와 같이, 여러 프로그램이 동시에 메모리에 올라가 실행되는 경우가 높아지면서, 메모리의 연장공간이 더욱 필요하게 됨. 그 연장공간으로서의 디스크를 사용하는, swap space(swap area)용도로 사용할 필요가 있다.
2) Swap-space 관리
* Physical Disk를 Partitioning해서 Logical disk를 만들 수 있음. 각각의 Logical disk는 운영체제가 독립적인 disk로 간주하게 됨
* 그러면 각각의 disk에다가, file system을 설치해서 사용할 수도, swap area형식으로 사용할수도 있음.
* file system에서는, 공간효율성을 높이는 방식을 사용하고 있음.
- Virtual Memory system에서는 디스크를 memory의 연장 공간으로 사용
- 파일시스템 내부에 둘 수도 있으나, 별도 partition 사용이 일반적
* swap area는 프로그램이 끝나면, 이 공간의 내용들이 사라짐.
* 물리적 메모리의 연장공간으로 쓰므로, 쫓겨날 때도 빠르게 나가야 함.
* 디스크를 접근하는 시간 중 대부분은 seek time인데, 이 시간을 줄여서 속도효율성을 높여야 함.
* 따라서, seek time을 줄이기 위해서 swap area에 데이터를 올리고 내리는 단위는 굉장히 큰 단위(512K) 등을 사용하는 것이 좋음.
* 공간효율성보다는 속도 효율성이 우선
* 일반 파일보다 훨씬 짧은 시간만 존재하고 자주 참조됨
* 따라서, block의 크기 및 저장 방식이 일반 파일 시스템과 다름
6. RAID (= Redundant Array of Independent Disks)
: 저렴한 여러개의 디스크를 묶어서 사용하는 것
* 간단한 원리만 설명
- RAID 사용 목적 (RAID 사용 장점)
1) 디스크 처리 속도 향상
- 여러 디스크에 block의 내용을 분산 저장
- 병렬적으로 읽어옴
* 여러 디스크에 동일한 데이터가 중복 저장이 되어있으면, host 컴퓨터에서 데이터를 읽어오라고 disk에 요청을 했을 때, 여러 disk에서 조금씩 읽어올 수 있음.
* 즉 분산저장 + 병렬적으로 읽어오기 때문에, 처리속도를 향상시킬 수 있다는 장점 존재
* 이러한 기법을, interleaving / striping이라고 함
2) 신뢰성(reliability) 향상
- 통일 정보를 여러 디스크에 중복 저장
- 하나의 디스크가 고장(failure)시 다른 디스크에서 읽어옴
* 이 용어를 Mirroring, Shadowing이라고 할 수 있음
* 이 기법은, a. 디스크에 내용을 통째로 다른 디스크에 중복 저장하는 단순 RAID방법도 있고, b. 중복저장의 정도를 낮게 해서 오류가 발생했는지를 판단하고 복구할 수 있을 정도만 하는 parity방법 (이는 공간효율성 향상 가능)이 있음.
* 유의사항 - 아직 공부하고 있는 문과생 코린이가, 정리해서 남겨놓은 정리 및 필기노트입니다. - 정확하지 않거나, 틀린 점이 있을 수 있으니, 유의해서 봐주시면 감사하겠습니다. - 혹시 잘못된 점을 발견하셨다면, 댓글로 친절하게 남겨주시면 감사하겠습니다 :) |