[Computer Science]/[운영체제(OS)]

[운영체제(OS)] 11-3) 저장 장치 관리, 스왑 공간 관리

극꼼 2023. 3. 31. 10:21
반응형


<오류 감지 및 수정>

: 메모리, 네트워킹 및 저장장치를 포함한 많은 컴퓨팅 영역에서 필수적입니다. 메모리 시스템은 패리티 비트를 사용해 특정 오류를 오랫동안 감지했습니다.

* parity : 고정 길이 워드의 값을 계산, 저장, 비교하기 위해 나머지 연산을 수행하는 체크섬(중복 검사)의 한 형태입니다. 

 

각 바이트에 1로 설정된 비트 수가 짝수이면 패리티 = 0, 홀수이면 패리티 = 1 입니다. 바이트의 비트 중 하나가 손상되어 패리티 값이 바뀔 경우의 모든 단일 비트 오류는 메모리 시스템이 감지합니다. 이중 비트 오류는 감지되지 않을 수 있는데, 순환 중복 검사(CRC)는 이러한 다중 비트 오류를 해시 함수를 사용하여 감지합니다.

 

오류 수정 코드(ECC)는 문제 감지와 보정을 함께 합니다. 복구 가능한 오류를 소프트 오류, ECC가 수정할 수 없는 오류를 하드 오류라 합니다.  컨트롤러는 섹터/페이지를 읽고 쓸 때마다 ECC 처리를 자동으로 수행합니다.

* 컨트롤러가 섹터/페이지를 쓸 때 -> ECC는 기록중인 데이터의 모든 바이트에서 계산된 값으로 기록

* 컨트롤러가 섹터/페이지를 읽을 때 -> ECC가 다시 계산하고, 기존 값과 비교


<저장 장치 관리>

1. 드라이브 포매팅(formatting)

  • 저수준 포매팅 : 새로운 저장장치는 자료를 저장하기 전에 컨트롤러가 읽고 쓸 수 있게 섹터들로 나눠져 있어야 합니다. NVM 페이지를 초기화하고 FTL을 생성하는 과정을 저수준 포매팅, 물리적 포매팅이라 부릅니다. 저수준 포매팅은 각 저장장치의 위치마다 특별한 자료구조로 장치를 채웁니다.

운영체제는 자체 데이터 구조를 장치에 기록해야 하며, 3가지 단계로 구성되어 있습니다.

1) 파티션 : 장치(물리적 디스크)를 하나 이상의 블록 또는 페이지 그룹으로 파티션(여러 개의 논리적 디스크) 합니다. 운영체제는 각 파티션을 별도의 장치로 취급할 수 있습니다. 파티션의 정보는 저장장치의 고정된 위치에 고정된 형식으로 기록됩니다.

 

2) 볼륨 생성 및 관리 : 파일 시스템이 파티션 내에 직접 배치될 때는 이 단계가 암시적으로 적용되지만, 다른 경우 볼륨 생성 및 관리가 명시적으로 행해집니다. 두번째 단계가 이루어져야 해당 볼륨을 마운트하여 사용할 수 있습니다.

* 마운트 : 디스크와 같은 물리적 장치를 특정 디렉토리에 연결시키는 것. 

* 볼륨 : 마운트 가능한 모든 파일 시스템

 

3) 논리적 포매팅 : 운영체제는 초기 파일 시스템 자료구조를 장치에 저장합니다. 이런 자료구조에는 가용 공간과 할당된 공간의 맵과 초기의 빈 디렉터리 등이 포함됩니다. 파티션의 정보에는 부팅 가능한 파일 시스템(운영체제 포함)이 있는지도 포함되어 있는데, 부팅 가능으로 표시된 파티션은 파일 시스템의 루트를 설정하는 데 사용됩니다. 

 

  • 클러스터 : 효율성을 높이기 위해 파일 시스템이 블록을 더 큰 단위로 묶은 것.
  • raw 디스크 : 파일 시스템 자료구조 없이 파티션을 대용량 순차 배열처럼 사용할 수 있게 하는 장치로, 스왑 공간용으로 사용될 수 있음. 

 

2. 부트 블록

: 지정된 논리적 주소에 위치한 부트 스트랩 로더를 실행하여 보조저장장치에 고정된 위치에 있는 부트 블록에 부트 스트랩 프로그램을 로드하여 실행합니다.

* 부트 스트랩 로더 : 실행할 초기 프로그램.

* 부트 디스크 : 시스템 디스크라고도 하며, 부트 파티션이 있는 장치입니다.

 

3. 손상된 블록

디스크는 움직이는 부품이 있고, 정밀하므로 고장나기 쉬운데, 손상된 블록들은 디스크와 컨트롤러에 따라 다양한 방법으로 처리됩니다. 

  • 수동 처리 : 구형 IDE 컨트롤러를 가진 디스크는 손상된 블록을 수동으로 처리합니다. 디스크 포맷 중 디스크를 스캔하여 손상된 블록을 사용 불가로 표시합니다. 정상적인 연상 중 손상된다면 리눅스의 badblocks 와 같은 프로그램을 실행시켜 손상된 블록을 찾아냅니다. 손상된 블록 데이터는 일반적으로 잃어버리게 됩니다.
  • 섹터 예비(sector sparing) : 섹터 포워딩이라고도 불립니다. 저수준 포매팅은 예비 섹터를 남겨놓고, 손상된 섹터를 컨트롤러가 예비 섹터와 교체시킵니다.
  • 섹터 밀어내기(sector slipping) : 결함이 생긴 섹터부터 시작해서, 예비 섹터가 있는 곳까지 모든 섹터를 재매핑합니다. 17번 블록에 결함이 생겼고 예비 섹터가 202번에 있다면 201번 섹터는 202로 복사하고, 200번은 201로, ..., 17번은 18번 섹터로 복사합니다.

<스왑 공간 관리>

* 스왑 : 사용 가능 물리 메모리가 매우 작을 때 사용 가능 메모리를 만들기 위해 사용 빈도가 적은 프로세스를 메모리에서 스왑 공간으로 이동시킵니다. 가상 메모리는 보조저장장치를 메인 메모리의 확장된 공간으로 사용하는데, 스와핑에 걸리는 시간이 메모리 성능을 좌우합니다.

 

스왑 공간이 바닥날 경우 프로세스들을 중단시켜야 하고, 최악의 경우 시스템 전체 crash가 날 수 있기 때문에 스왑 공간은 넉넉하게 잡는 것이 좋습니다. (하지만 너무 커지면 파일을 위한 공간이 부족해짐) 몇몇 운영체제는 권장하는 스왑 공간 크기가 있습니다.

 

스오나 공간은 일반 파일 시스템이 차지하는 공간에 만들 수 있고, 별도의 raw 파티션을 만들어 사용할 수 있습니다. raw 파티션 방식은 디스크 파티션을 나누는 과정에서 고정된 크기로 스왑 공간을 만드는데, 스왑 공간을 늘리려면 파티션 작업을 다시 하거나, 다른 곳에 새로운 스왑 공간을 추가해야 합니다. 

 

 

반응형