우보천리 개발
[OS] 파일 시스템 관리 본문
File
파일은 비휘발서 보조 기억장치에 저장이 된다.
파일은 의미있고 관련된 정보를 모은 논리적 단위라고 할 수 있다.
파일의 연산(시스템 콜)에는 Create, Delete, Read, Write, Reposition, Open, Close... 등이 있다.
파일의 속성은 파일 자체의 내용이 아닌 파일을 관리하기 위한 metadata가 들어있다.
Directory
파일을 관리하기 위해서 디렉터리를 사용할 수 있다.
OS의 파일 시스템은 파일을 디렉토리를 통해 계층적으로 저장하고 있다.
최상위 디렉터리를 루트라고 한다.
디렉터리도 일종의 파일이기 때문에 디렉터리는 디렉터리에 담겨 있는 대상과 관련된 정보를 갖고 있다.
File Protection
파일은 여러 사용자 혹은 프로그램이 사용할 수 있기 때문에 파일 보호를 위해서는 누구 혹은 어떤 프로세스에게 어떠한 연산을
허용할 것인지에 대한 접근 권한이 중요하다.
접근 권한을 지정하기 위해서 다음과 같은 방식이 있다.
1. Access Control Matrix: 행렬을 통해서 어떤 사용자가 어떤 파일에 대해 어떤 권한이 있는지 저장한다.
하지만 모든 파일과, 각각의 사용자에 대해 전부 기록해야하기 때문에 공간의 낭비가 크다.
보완하기 위해서 링크 리스트로 파일 혹은 사용자 중심으로 구현할 수 있다.
2. Grouping: Owner, Group, Public 3개의 부분으로 나누어 각각 rwx 3비트씩 표현한다.
즉 9개의 비트만 있으면 하나의 파일에 대한 접근 권한을 설정할 수 있다.
3. Password: 가장 단순한 방법이다. 모든 파일에 대해 비밀번호를 설정하는 것이다.
하지만 모든 파일에 대한 암호 암기, 관리 문제 등 효율이 매우 떨어진다고 할 수 있다.
Partitioning & Mounting
파티셔닝은 저장 장치를 논리적인 영역으로 구분하는 것이다. 즉 하나의 물리 디스크 안에 여러개의 공간으로 나누어서 각각 사용하는 것이다.
마운팅은 하나의 저장 장치의 파일 시스템에서 다른 저장 장치의 파일 시스템을 접근할 수 있도록 하는 것이다.
File Allocation
OS가 디스크에 읽고 쓸 때 block 단위로 읽고 쓴다.
파일을 디스크에 할당 하는 방법은 크게
- 연속할당 2. 불연속할당이 있다.
1. Contiguous Allocation(연속할당): 연속할당은 말 그대로 파일을 연속적인 블록으로 할당하는 것이다.
그렇기 때문에 빠른 I/O 작업 또는 Swap Area 등 실시간 파일 시스템에 유리하다.
하지만 연속적으로 할당해야하기 때문에 단편화가 발생할 수 있고 비어있는 블록이 있더라고 제대로 활용할 수 없는 단점이 있다.
또한 파일의 크기는 커질 수 있지만 연속적으로 할당하기 위해서 미리 공간을 예약해놓는다면 비효율적이다.
즉 공간의 효율성 보다 시간의 효율성이 중요한 경우에 유리하다.
2. Linked Allocation(연결할당): 연결할당은 각 블록에 다음 블록의 주소를 포함하는 방식이다. 즉 파일의 시작 위치를 갖고 다음 파일의 위치를 알아내는 방식이다. 연결 리스트로 관리되기 때문에 블록이 연속적으로 할당되어 있지 않아도 되는 장점이 있다. 그렇기 때문에 연속할당에서 발생하던 단편화 문제가 발생하지 않는다.
하지만 연결 리스트 형태로 관리되기 때문에 중간 지점에서의 포인터 유실이 일어날 경우 다음 블록으로 갈 수 없고
직접 접근이 불가능하고 순차적으로 탐색해야된다는 단점이 있다.
연결할당 방식을 효율적으로 변경한 방식이 FAT 파일 시스템 방식이다.
3. Indexed Allocation(색인할당): 직접 접근이 가능한 방식이다. 이 방식은 블록안에 특정 파일이 어느 블록(인덱스)에 들어있는지에 대한 정보를 담고 있다. 그렇기 때문에 역시 외부 조각이 발생하지 않는다.
하지만 파일이 아주 작은 경우에도 블록을 두개(하나는 인덱스를 담은 블록, 하나는 데이터블록)이 필요하다.
'Computer Science > 운영체제' 카테고리의 다른 글
[OS] 메모리관리 - 가상메모리, 페이지 교체 (0) | 2023.06.06 |
---|---|
[OS] 메모리관리 - 불연속메모리 할당, 페이징 (0) | 2023.06.01 |
[OS] 메모리관리 - 연속메모리 할당 (0) | 2023.05.30 |
[OS] DeadLock (0) | 2023.05.25 |
[OS] 스케줄링 알고리즘 (0) | 2023.05.17 |