SW Engineering/OS Concept

54_디스크 관리(Disk Management)

SungWookKang 2015. 7. 16. 14:22
반응형

54_디스크 관리(Disk Management)

 

운영체제는 디스크 관리 기능 일부를 담당한다. 포맷을 통한 섹터의 관리, 컴퓨터 시작을 위한 부트 블록 관리, 디스크의 손상된 블록 등을 관리 한다.

 

[디스크 포맷(Disk Format)]

디스크는 자료를 저장하기 전에 섹터들로 나누어져 있어야 한다. 이 과정을 저수준 포맷팅(low level formatting) 또는 물리적 포맷팅 이라 한다.

 

저수준 포맷팅은 섹터를 구분하기 위해 디스크를 적절한 자료구조로 채우는 것이며 자료 구조는 보통 헤더, 자료 영역(보통 512 바이트), 트레일러로 구분 된다. 헤더와 트레일러는 수정 코드(ECC, Error Correcting Code)와 같은 정보를 가지고 있다.

 

 

디스크 제어기가 섹터에 자료를 쓸 때 자료 값으로부터 ECC를 구해서 같이 기록한다. 나중에 이 섹터가 읽혀질 때 자료로부터 ECC가 다시 계산되고 이것이 저장되었던 ECC값과 비교하여 서로 다르면 섹터에 문제가 발생한 것이다. ECC는 1~2개의 비트만 잘못 되었을 때 이를 교정할 수 있는 오류 수정 코드 이다. ECC처리는 대부분 섹터를 읽고 쓸 때 제어기에 의해 자동으로 이루어 진다.

 

포맷을 진행 할 때 디스크의 섹터 크기를 크게 하면 트랙 당 섹터수가 줄어들고 헤더와 트레일러가 차지하는 공간이 자료가 차지하는 공간에 비해 상대적으로 줄어들게 되어 디스크 공간 이용 효율성이 올라가게 된다.

 

디스크에 파일을 저장하기 위해서 운영체제는 디스크에 운영체제의 자료 구조를 기록할 필요가 있으며 두 단계로 이루어 진다.

  1. 디스크를 여러 실린더들로 이루어지는 파티션을 만든다. 운영체제는 각 파티션을 각각 별도의 디스크 드라이브처럼 취급한다.
  2. 논리적 포맷팅은 파일 시스템을 만드는 것이다. 이 단계는 운영체제가 파일 시스템 자료 구조를 디스크에 저장하는 일이다.

 

 

[부트 블록 (Boot Block)]

컴퓨터를 부팅 할 때 시스템을 시작 시키는 프로그램이 요구되며 부트스트랩 프로그램은 운영체제가 어디에 저장되어 있는지 알아내고 그것을 메모리에 올려놓고 시작 시킨다.

 

대부분 시스템들은 ROM에 부트스트랩 프로그램을 저장한다. 하지만 ROM의 경우 부트스트랩을 교체하기 위해 하드웨어 칩을 교체해야 하기 때문에 ROM에는 부트스트랩 프로그램 본체를 디스크로부터 적재하는 일만 하는 아주 작은 부트스트랩 적재기(bootstrap loader) 프로그램만 저장한다. 부트스트랩 프로그램 본체는 쉽게 변경이 가능하고 본 디스크의 고정된 위치인 "부트 블록"에 저장한다. 부트 파티션을 가지고 있는 디스크는 부트 디스크 또는 시스템 디스크라 한다.

 

ROM 내의 부트스트랩 적재기가 하는 일은 디스크 제어기에게 부트스트랩 프로그램을 메모리에 올리도록 지시하고 그 프로그램의 수행을 시작 한다. 부트스트랩 프로그램 본체는 디스크 내 임의의 장소에 저장되어 있는 운영체제 커널을 찾아내고 그것을 시작시키는 일까지 하게 된다.

 

 

Windows의 부트코드는 하드 디스크에 첫 번째 섹터에 저장된다.(master boot record 또는 MBR 영역이라고 함) 일단 시스템이 부트 파티션을 찾으면 첫 번째 섹터부터 읽고 여러 시스템과 서비스들을 적재하는 등의 부트 프로세스의 남은 일을 재개 한다.

 

 

[손상된 블록 (Bad Block)]

디스크는 움직이는 부품들로 구성되어 있기 때문에 언제든지 오류가 발생할 가능성이 있다. 손상된 블록들은 디스크와 제어기에 따라 다양한 방법으로 처리될 수 있다.

 

 

Microsoft의 format명령은 논리적 포맷을 하는데 손상된 블록이 있는지 검사하여 손상된 블록을 발견하면 그 블록을 더 이상 사용하지 못하도록 FAT 테이블에 표시해 놓는다.

서버에 사용되는 디스크(SCSI)등은 제어기가 손상된 디스크 블록 리스트를 유지 한다. 리스트는 공장에서 저수준 포맷하는 동안 초기화되고 저수준 포맷팅은 운영체제가 볼 수 없는 예비 섹터를 남겨놓아 손상된 섹터와 교체할 수 있다. 이 방법을 섹터 옴기기(forwarding)혹은 섹터 남기기(sparing)로 알려져 있다.

 

예비 섹터를 관리하는 다른 방법으로 일부 제어기는 섹터 밀어내기(sector slipping)에 의해 손상 섹터를 처리할 수 있도록 한다. 블록이 손상되면 자료가 유실되기 때문에 이를 완전히 자동으로 처리할 수 는 없다. 소프트 에러(soft error)들은 손상된 블록 자료를 복사하고 그 블록을 예비 블록으로 하거나 밀어내기를 하여 처리 한다.

 

하드 에러(hard error)는 복구가 되지 않으며 자료를 잃게 되어 손상된 블록의 내용을 다른 백업 디스크에서 가져와서 복구하는 등 사람의 개입을 필요로 한다.

 

 

[참고자료]

Operating System Concepts / 홍릉과학출판사

 

반응형