2022. 9. 19. 01:27ㆍ개발 관련 책 읽기/리눅스 커널 내부구조
파일시스템
메모리 관리 기법은 주 기억 장치를 관리하는 소프트웨어이고, 파일시스템은 보조 기억 장치라고 불리는 저장 장치를 관리하는 소프트웨어이다. 주 기억장치는 RAM과 같은 장치 보조 기억 장치는 주로 하드 디스크와 같은 장치가 사용된다.
메모리 관리 기법과 파일시스템은 모두 한정된 자원(기억장치)를 효율적으로 사용하기 위해 고안된 기법이므로 내부/외부 단편화를 최소화하기위해 노력한다.
그러면 파일시스템과 메모리 관리 기법의 차이점은 무엇일까?
본질적으로 본다면 차이점이 미비하고 파일시스템은 '이름'이라는 특성을 제외하곤 둘다 같은 형식이다.
파일시스템은 유저에게 이름이라는 속성으로 접근되는 추상적인 객체인 파일 이라는 개념을 제공함으로써 영속적인 객체의 저장을 지원하는 소프트웨어인 것이다. 조금 다르게 표현하자면 '이름'을 입력으로 받아 해당 데이터를 리턴해주는 소프트웨어가 파일시스템이다. 파일시스템은 이러한기능을 제공하기 위해 하드 디스크에 메타 데이터와 사용자 데이터를 저장한다. 메타 데이터는 파일의 속성 정보나 데이터 블록 인덱스 정보 등이 해당되며, 사용자 데이터는 사용자가 실제 기록하려 했던 내용이 해당된다.
디스크 구조와 블록 관리 기법
파일시스템이 저장 공간의 기본 접근 단위인 디스크 블록에 대해서 알아보자.
디스크는 원판(plotter),팔(arm)그리고 헤드(head)로 구성된다.원판에 원 모양의 트랙(track)들이 존재하며, 모든 원판에서 같은 위치를 갖는 트랙들의 집합을 실린더라고 한다. 트랙은 다시 몇 개의 섹터로 구분된다. 섹터는 디스크에서 데이터를 읽거나 기록할 때 기본 단위가 되며,일반적으로 섹터의 크기는 512byte이다. 한편 헤드는 각 원판의 읽기/쓰기가 가능한 면마다 하나씩 존재하게 된다.
디스크에서 데이터를 접근하는 데 걸리는 시간은 탐색시간(seek time),회전 지연 시간(rotational latency),그리고 데이터 전송 시간(Transmission Time)이라는 세가지로 구성된다.
탐색 시간이란 헤드를 요청한 데이터가 존재하는 트랙 위치까지 이동하는 데 걸리는 시간이다.
회전 시간은 요청한 섹터가 헤드 아래로 위치될 때까지 디스크 원판을 회전시키는 데 걸리는 시간이다.
데이터 전송 시간은 헤드가 섹터의 내용을 읽거나 또는 기록하는데 걸리는 시간이다.
위의 그림과 같이 파일시스템은 디스크를 논리적인 디스크 블록들의 집합으로 본다.
디스크 블록의 크기는 일반적으로 페이지 프레임의 크기와 같다(일반적 시스템에서 page frame 4KB)
사실 파일시스템 성능의 최대 병목 요소는 디스크 I/O이다. 만약 디스크 블록의 크기가 4KB이고 섹터 크기가 512Byte라면, 결국 하나의 디스크 블록에 8개의 섹터가 대응되게 된다.(212/29 = 23 =8)
따라서 파일 시스템이 하나의 디스크 블록을 읽어 달라고 요청하면 8개의 섹터 내용이 읽혀지게 된다.
디스크 블록의 번호를 이에 대응되는 섹터들로 매핑 시키는 일은 디스크 디바이스 드라이버 또는 디스크 컨트롤러가 담당한다.
디스크 블록 할당 방법에는 크게 연속 할당과 불연속 할당 두 가지 방법이 있다.
연속 할당이란 파일에게 연속된 디스크 블록을 할당하는 기법이다. 불연속은 반대 개념이다.
파일 시스템을 설계할 때 연속 할당 방법만을 사용하는 경우는 거의 없다.왜냐하면 연속 할당 방법에는 파일의 크기가 변하게 될시에 문제가 생기게 된다. 파일의 크기가 커지면 디스크 블록이 더 필요한데
연속적으로 할당할 블록이 없다면 더 넓은 곳으로 복사로 인한 오버헤드가 더 커지기 때문이다.
불연속 할당 방법은 같은 파일에 속한 디스크 블록들을 연속적으로 저장하지 않는다.
하지만 불연속 할당 방법에서는 파일에 속한 디스크 블록들이 어디에 위치하고 있는지에 대한 정보를 기억해 둬야한다.이를 위한 방법으로 블렉체인 기법,인덱스 블록 기법,FAT기법 등이 있다.
블록체인 기법은 같은 파일에 속한 디스크 블록들을 체인으로(링크드 리스트 방식)연결해 놓는 방법이다
특정 파일에 속한 첫 번째 디스크 블록에 가면 포인터를 이용해 다음 블록의 위치를 찾아 갈 수 있다. 단점은 중간의 한 블록이 유실된 경우 나머지 데이터까지 모두 잃게 된다는 단점이 존재한다.
인덱스 블록 기법은 블록들에 대한 위치 정보들을 기록한 인덱스 블록을 따로 사용하는 방법이다. 단점은 만약 인덱스 블록이 유실되면 파일의 데이터 전체가 소실되는 문제가 있다.또한 인덱스 블록을 위한 별도의 메모리가 필요하며,파일이 커져 인덱스 블록이 가득 찰 경우 이를 해결하는 방법이 필요하다
FAT기법은 같은 파일에 속해 있는 블록들의 위치를 FAT이라는 자료구조에 기록해 놓는 방법이다.
이 방법은 파일시스템이 관리하는 공간 내에 전역적으로 존재하는 FAT 구조를 사용하여 파일에 속해있는 데이터를 찾아가는 방법이다. 즉, 인덱스 블록 기법은 파일마다 인덱스 블록이 필요한데, FAT 기법에서는 파일시스템 전체적으로 하나의 FAT이 존재하는 것이다.
FAT 구조에서 FF는 파일의 끝(EOF)을 의미하며 0은 free상태를 나타낸다. 위의 그림에서 보자면 1번 블록을 읽으면 다음 데이터 블록인 '5'번을 가리키고 있으며, 5번 위치에 가보면 '6번' 블록을,6번 위치에 가보면 '9'번 블록을 9번 위치에 가보면 파일의 끝을 나타내는 FF가 기록되어 있다.
FAT구조의 유실은 파일시스템의 내의 모든 파일이 소실된다는 문제가 있다. 따라서 요즘 대부분의 FAT구조 파일시스템은 FAT 내용을 중복하여 관리한다. 리눅스에서 주로 사용되는 파일시스템은 Ext2,Ext3는 인덱스 블록 기법과 유사한 기법을 사용한다. 그것이 바로 inode이다
'개발 관련 책 읽기 > 리눅스 커널 내부구조' 카테고리의 다른 글
Chapter 5 - 파일 시스템(3) (0) | 2022.09.19 |
---|---|
Chapter 5 - 파일 시스템(2) (0) | 2022.09.19 |
Chapter 4 - 메모리 관리(3) (1) | 2022.09.19 |
Chapter 4 - 메모리 관리 (2) (0) | 2022.09.19 |
Chapter 4 - 메모리 관리(1) (0) | 2022.09.19 |