Priv's Blog
10. 파일 관리 본문
1. 파일 시스템과 파일
1.1) 파일
저장 장치에 정보를 저장하기 위한 논리적 저장 단위.
이름이 붙은 정보의 집합체로서, 1 단위로 조작한다.
일반적으로 HDD, CD, 테이프 등의 2차 저장 장치에 저장된다.
메인 메모리에 존재할 수도 있다.
운영체제는 파일에 대해 다양한 연산들을 지원한다.
일반(정규) 파일
- 가장 일반적인 파일과 데이터를 포함하는 데 사용된다.
- 텍스트 또는 이진 형태이다.
디렉터리 파일
- 모든 유형의 파일에 액세스 할 수 있는 정보를 포함한다.
- 실제 데이터 파일은 포함하지 않는다.
특수 파일
- 시스템 장치를 정의한다.
- 프로세스로 생성한 임시 파일(파이프)이 이에 해당한다.
1.2) 파일 시스템
파일 자원을 관리하고, 파일 생성, 삭제, 수정 등 파일 접근과 제어에 대한 책임을 가지는 시스템 SW.
파일 시스템이 수행하는 역할들은 다음과 같다.
파일 관리
- 파일 저장, 참조, 공유, 보호 기능 제공
보조 기억 장소 관리
- 디스크 등에 파일 저장 공간 할당, 가용 공간 관리
파일 무결성 보장
- 파일에 저장된 정보가 손상되지 않도록 보호
접근 방법 제공
- 저장된 정보에 접근할 수 있는 방법 제공
1.3) 파일 시스템의 목적
다양한 형태의 저장 장치에 입출력을 지원한다.
데이터가 손상, 유실되지 않도록 보호한다.
처리율 향상을 위해 성능을 최적화한다.
1.4) 블록 (Block)
파일은 디스크에서 1개 이상의 블록에 저장한다.
블록은 메모리와 디스크 간의 전송 단위로서, 1개의 블록은 디스크에서 1개 이상의 섹터들로 구성된다.
논리적 파일의 가상 블록 번호(VBN: Virtual Block Number)는 물리적 파일의 논리 블록 번호(LBN: Logical Block Number)로 매핑된다.
논리 블록 번호(LBN)는 물리적 디스크 주소(트랙/실린더, 표면, 섹터)로 변환된다.
2. 파일을 관리하는 디렉터리 시스템
2.1) 디렉터리
디렉터리는 다른 파일들의 이름, 위치 정보 등을 담은 파일이다.
컴퓨터에 특정 파일을 저장하거나 찾기 위해서는 먼저 디스크 장치에 접근한다.
이후 디렉터리에 접근한 뒤, 저장된 서브 디렉터리 또는 파일 중에서 사용자가 요구한 파일을 탐색한다.
만약 파일이 서브 디렉터리 안에 있다면, 해당 서브 디렉터리에 접근한 뒤, 요구한 파일을 탐색한다.
즉, 디렉터리도 하나의 파일이다.
2.2) 디렉터리의 파일 정보
파일 이름, 형태, 위치, 크기
읽기/쓰기 현재 위치
보호를 위한 접근 제어 정보(읽기, 쓰기, 실행 가능 등)
현재 열린 파일을 사용하는 프로세스 수
생성, 수정 마지막 접근 시간
3. 파일의 디스크 할당
운영체제의 디스크 파일 관리를 위해서는 다음의 요소들을 상정해야 한다.
- 파일들을 어떻게 디스크 공간에 배치할 것인가?
- 디스크 공간은 어떻게 효율적으로 사용할 것인가?
- 파일들을 어떻게 빨리 액세스 하도록 만들 것인가?
3.1) 연속 할당 방법
각 파일을 디스크의 연속적인 블록들에 할당하는 방법이다.
파일 데이터를 순서대로 액세스 할 때 탐색 시간(Seek Time)을 최소화한다.
디렉터리의 각 파일 항목은 파일의 시작 블록과 길이를 표시한다.
연속 할당 방법은 순차 접근(Sequential Access)과 직접 접근(Direct Access, Random Access) 2가지 방법 모두 효율적으로 수행할 수 있다.
- 순차 접근: 파일에 접근할 때, 순차적으로 탐색해 접근한다.
- 직접 접근: 파일에 접근할 때, 접근하고자 하는 파일 위치를 계산해 바로 접근한다.
외부 단편화가 발생한다.
전체 디스크 공간을 합쳐보면 공간이 충분함에도 불구하고, 연속적이지 않다는 이유만으로 공간 낭비가 발생할 수 있다.
새로운 파일을 위해 연속적인 빈 공간을 찾아야 한다.
First-Fit, Best-Fit, Worst-Fit 등 배치 전략이 필요하다.
각 파일에 필요한 공간 크기 결정 문제가 발생한다.
할당된 공간보다 파일의 크기가 커지면 오류가 발생하므로, 더 큰 공간 할당하는 방법이 있다.
필요한 공간의 양을 사용하는 양보다 더 크게 추정하는 방법이 있다.
3.2) 연결 할당 방법
1개의 파일을 구성하는 디스크 블록들이 연결 리스트를 이룬다.
각 블록이 다음 블록에 대한 포인터를 지닌다.
디렉터리의 각 파일 항목은 파일의 시작 블록을 표시한다.
불연속 할당 방법이다.
외부 단편화가 발생하지 않는다.
파일 크기 변동이 자유롭다.
블록들은 디스크 내의 어느 곳에 흩어져도 주소 값을 기억하므로 문제가 발생하지 않는다.
(비어있는 블록이라면 어느 블록이든 할당 가능)
직접 접근(Direct Access)을 지원하지 않는다.
순차 접근 파일에만 효율적이다.
블록 내 포인터를 위한 공간을 따로 마련해야 한다.
각 파일에 순차(연속) 할당보다 더 많은 블록을 할당해야 한다.
포인터를 잃어버리거나 파괴되면 블록 접근이 불가능해지므로, 신뢰성 문제가 있다.
각 파일의 블록들이 흩어져 있기 때문에 디스크 탐색 시간(Seek Time)이 증가한다.
3.3) 파일 할당 테이블을 이용한 연결 할당 방법
파일 시스템에 FAT(File Allocation Table)를 두고, 이 테이블에 파일의 디스크 블록 주소(포인터)를 저장한다.
현재 블록 번호를 FAT의 인덱스로 사용하여 다음 블록의 위치를 결정한다.
마지막 블록을 위한 FAT 엔트리는 EOF(End-Of-File) 값을 저장한다.
디렉터리의 각 파일 항목은 FAT 내 1번째 블록 번호를 표시한다.
연결 할당 방법보다 디스크 탐색 시간이 단축된다.
접근 시간을 줄이려면 FAT를 디스크에 순차적으로 저장하고, 메인 메모리에 캐시 한다.
소용량 저장 매체에 효율적인 방식이다.
디스크 용량이 커서 블록 수가 많은 경우, 파일 할당 테이블이 커지므로 비효율적이다.
3.4) 인덱스 할당 방법
불연속적인 방법이다.
파일이 저장된 블록의 포인터들을 인덱스 블록(Index Block)이라는 1개의 장소에서 관리한다.
각 파일은 자신의 인덱스 블록을 지닌다.
디렉터리의 각 파일 항목은 인덱스 블록을 표시한다.
직접 접근(Direct Access)을 지원한다. (인덱스 블록이 메인 메모리 내에 있으면 직접 접근 가능)
외부 단편화가 없다.
파일이 작은 경우, 인덱스 블록 일부만 사용하므로 공간이 낭비된다. (인덱스 블록을 작게 하면 공간 낭비 최소화 가능)
파일이 큰 경우, 1개의 인덱스 블록에 블록 포인터들을 모두 저장할 수 없다.
이 경우 인덱스 블록을 여러 블록으로 나눠서 관리하면 된다.
인덱스 블록을 이중/삼중 간접 포인터를 사용해 여러 하위 계층을 표현한다.
3.5) 디스크 할당 방법의 성능 비교
연속 할당 방법
- 파일의 직접 접근을 지원한다.
- 작은 파일에 효율적이며, 평균 성능이 좋다.
연결 할당 방법
- 직접 접근을 지원하지 않는다.
- N번째 블록을 읽으려면 디스크를 N번 읽어야 한다.
인덱스 할당 방법
- 인덱스 블록이 메인 메모리 내에 있으면 직접 접근이 가능하다.
- 인덱스 구조, 파일 크기, 원하는 블록 위치 등에 따라 성능이 달라진다.
서로의 단점을 보안하기 위해 파일이 작으면 연속 할당을, 파일이 커지면 자동으로 인덱스 할당으로 변환하는 방법도 사용된다.
4. 디스크의 빈 공간 관리
4.1) 비트 맵을 이용한 방법
간편하고 디스크에 연속적인 빈 블록을 찾는데 효과적이다.
비트맵을 디스크 내의 블록들의 위치를 표현하는 '지도'로 사용한다.
비트 맵 전체를 메인 메모리에 보관하지 않으면 비효율적이다.
대형 컴퓨터보다는 마이크로 컴퓨터 환경에 더 적합하다.
4.2) 연결 리스트를 이용한 방법
빈 공간 리스트 탐색 시, 각 블록을 모두 읽어야 하므로 비효율적이다.
4.3) 인덱스 블록을 이용한 방법
1번째 인덱스 블록에 빈 블록 N개의 포인터를 저장한다.
이 중 N-1개는 실제로 비어 있고, 마지막 1개는 다른 빈 블록 N개의 주소를 포함하는 다음 인덱스 블록의 주소이다. (연결 리스트)
비어 있는 블록 주소 여러 개를 쉽게 찾을 수 있게 한다.
5. 파일 보호
5.1) 파일 보호의 필요성
컴퓨터 시스템은 다수의 사용자가 사용하므로, 정보를 저장한 파일은 물리적 손상이나 부적합한 액세스로부터 보호해야 한다.
5.2) 파일 보호 방법
- 파일 명명법 (File naming): 접근할 파일을 명명할 수 없는 사용자는 접근 대상에서 제외한다.
- 암호 (Password): 각 파일을 암호화하여 보호한다.
- 액세스 제어 (Access Control): 사용자에 따라 액세스 할 수 있는 파일, 디렉터리 리스트를 두어 사용자 신원에 따라 서로 다른 액세스 권한을 부여한다.
- 엑세스 그룹 (Access Group): 파일에 그룹별 제어 비트를 둔다.
- 사용자 권한 지정 (User Permission): 사용자가 게정을 받을 때부터, 특정 디렉터리 및 파일만 액세스 할 수 있도록 시스템 관리자가 허락한다.
수고하셨습니다!
'Dev. Study Note > OS Introduction' 카테고리의 다른 글
9. 입출력 시스템과 디스크 관리 (0) | 2021.11.29 |
---|---|
8. 가상 메모리 (0) | 2021.11.29 |
7. 메모리 관리 (0) | 2021.11.12 |
6. 프로세스 스케줄링 (0) | 2021.11.04 |
5. 교착 상태와 기아 상태 (0) | 2021.10.16 |