블링블링 범블링

[OS 23장] 파일 관리 - 파일 할당 본문

Technology/오퍼레이팅 시스템

[OS 23장] 파일 관리 - 파일 할당

뻠스키 2018. 4. 17. 17:58


 

앞선 장들에서는 운영체제가 하는 역할 중 가장 중요하다고 볼 수 있는 프로세스 관리와 메모리 관리에 대해서 배웠다하지만 이외에도 운영체제는 다양한 일을 한다고 알고 있다그 중에서 파일 할당에 대한 것을 알아보겠다.


컴퓨터 시스템 자원에서 가장 중요한 부분은 CPU이다. CPU를 어느 프로세스에 나누어 줄 것인가가 프로세스 관리를 하는 역할이다그 다음 중요한 자원이 메인 메모리인 주기억장치이다메인 메모리에 대해 페이징이나 가상 메모리와 같은 방법을 사용하는 것이 메인 메모리 관리를 하는 역할에 속했다다음으로 중요하다고 할 수 있는 컴퓨터 시스템 자원으로는 하드 디스크와 같은 보조기억장치라고 할 수 있다보조기억장치는 파일 시스템을 관리하는 역할을 수행한다.


대표적인 보조기억장치는 하드 디스크이다하드 디스크는 트랙(track)과 트랙을 자른 섹터(sector)로 이루어져 있다또한 같은 거리에 존재하는 트랙들의 집합을 실린더(cylinder)라고 한다일반적으로 Sector size는 512bytes인데 크기가 너무 작으므로 Sector들을 여러 개 모아놓은 것은 Block이라고 한다하드 디스크는 이러한 Block들을 단위로 읽고 쓰기를 진행한다디스크는 처음에 free block인 비어있는 block으로 구성되게 된다그런데 Block 단위로 디스크가 돌아가기 때문에 파일에 Block을 할당할 때 free block이 생기게 된다. Block 안의 크기를 다 못 채우고 파일이 저장되는 것이다그러면 Block에서 남는 공간이 발생하게 된다메모리 관리에서 했던 내부 단편화와 비슷한 현상이라고 할 수 있다이렇게 되면 공간이 낭비되므로 효율이 안 좋게 된다그런데 그렇다고 해서 Block의 크기를 줄이게 되면 디스크에서 읽고 쓰는 과정이 매우 오래 걸리게 될 것이다하나의 파일을 읽는데 더 많은 Block을 읽어야하기 때문에 속도가 떨어지게 되는 것이다어떻게 하면 free block을 잘 할당할 것인지속도를 감소시키지 않게 할 것인지를 따지면서 파일을 할당하는 것이 중요하다.


크게 파일 할당에는 3가지 방법이 있다연속 할당연결 할당색인 할당이다.


연속 할당은 각 파일에 대해 디스크 상의 연속된 블록을 할당하는 방법이다하드 디스크에 block들이 나열되어 있는데 여기에 연속된 순서대로 파일을 저장하는 것이다이렇게 되면 디스크가 읽어 들어갈 때 이동 경로를 최소화할 수 있다는 장점이 있다빠른 I/O의 성능을 가질 수 있는 것이다순서적으로 읽을 수도 있고 특정 부분을 바로 읽을 수도 있게 한다동영상이나 음악, VOD 와 같이 크기가 큰데 실시간인 자료들에 적합하다고 할 수 있다하지만 단점도 존재한다특정 파일이 삭제되면 중간에 빈 공간인 hole이 생성되게 된다계속해서 파일의 생성과 삭제를 반복하면 곳곳에 흩어지는 hole들이 생성되게 된다이는 외부 단편화가 생긴 것으로 생각할 수 있다그러면 디스크의 공간 낭비가 매우 심하게 될 것이다또한 연속되게 파일을 할당하면 중간에 파일의 크기를 계속 증가시킬 수 없다뒤의 block에는 다른 파일이 공간을 차지하고 있으니 크기 조절이 불가능하게 된다.



연결 할당은 파일을 linked list의 형태로 저장을 하는 것을 말한다파일은 각자 디랙토리를 가지고 있는데 여기에는 어떤 block에 할당되어 있는지를 기억한다디렉토리에 제일 처음 저장되는 block을 가리키게 되고 각 block은 포인터를 저장을 위한 4바이트 이상을 가지고 있어서 다음 block을 지칭하게 된다새로운 파일이 만들어진다고 생각을 하면 비어있는 임의의 block을 첫 block으로 지정하고 파일이 커지면 다른 block을 할당 받고 포인터를 이용해 연결을 하면 된다이런 방법을 사용하면 외부 단편화를 없앨 수 있다임의의 자리에 넣고 포인터로 연결만 하면 되기 때문에 딱 block에 맞는 사이즈만 맞추어 넣으면 되기 때문이다하지만 단점도 존재한다연결 할당을 하게 되면 각각 순서대로 포인터로 연결되어 있기 때문에 순서대로 읽는 것 밖에 할 수 없다중간에 있는 자료만 읽고 싶어도 포인터를 따라 가지 않으면 읽을 수 없기 때문이다또한 포인터 저장을 위해 4바이트 이상을 손실시켜야 되고 만약 포인터가 끊어지면 이하 접근이 불가하기 때문에 낮은 신뢰성을 가진다그리고 포인터를 따라가는 과정을 거쳐야 하므로 속도 면에서 느릴 수 있다.



색인 할당은 파일 당 인덱스 block을 사용하여 파일을 할당하는 방법이다인덱스 block은 각 파일에 할당된 포인터를 저장하는 모음이다연결 할당과 같은 방식으로 할당을 하지만 인덱스 block을 둔다는 점에서 다르게 된다인덱스 block에 각 포인터에 대한 정보를 저장하게 되면 연속 할당의 장점인 순서적으로 읽을 수도 있고 특정 부분을 바로 읽을 수도 있게 한다또한 연결 할당의 장점인 외부 단편화도 없어지는 효과를 가지게 된다하지만 인덱스 블록에 할당에 따른 저장 공간의 손실이 발생할 수 있다.





Comments