Search
🤖

파일시스템

File

basic concept

연관된 데이터를 모아 이름을 붙인 것.
비휘발성의 보조기억장치에 저장
운영체제는 다양한 저장 장치를 file 이라는 동일한 논리적 단위로 볼 수 있게 해줌.
가능한 Operation
create, read, write, reposition (lseek), delete, open, close 등
reposition은 이어보기를 하고 싶을 때, 보고 있던 row를 옮겨주는 것이다.
open operation의 경우 파일 내용 전체를 메모리에 올리는 것이 아니라 메타데이터만 올리는 것을 의미한다.
아래 file의 opeation에서 자세히 다룬다.

File attribute (혹은 파일의 metadata)

파일 자체의 내용이 아니라 파일을 관리하기 위한 각종 정보들
접근 권한(읽기, 쓰기, 실행), 시간(생성, 변경, 사용), 소유자 등

File System

운영체제에서 파일을 관리하는 부분
파일 및 파일의 메타데이터, 디렉토리 정보 등을 관리
파일의 저장방법 제공
파일 보호 등

Directory

파일의 메타데이터 중 일부를 보관하고 있는 일종의 특별한 파일
그 디렉토리에 속한 파일 이름 및 파일 attribute들
가능한 operation
search for a file, create a file, delete a file
list a directory, rename a file, traverse the file system(전체 탐색)

Partition

= Logical Disk.
하나의 디스크 안에 여러 파티션들 두는 게 일반적
여러개의 물리적인 디스크를 하나의 파티션을 구성하기도 함
디스크를 파티션으로 구성한 뒤 각각의 파티션에 file system을 깔거나 swapping 등의 용도로 활용할 수 있음.

File의 Operation

Open

open() operation은 메모리에 파일의 메타데이터를 올려놓는 명령어이다.

open file table

현재 open 된 파일들의 메타데이터 보관소 (in memory)
디스크의 메타데이터보다 몇 가지 정보가 추가
open 한 프로세스의 수
File offset : 파일 어느 위치 접근 중인지 표시 (별도 테이블 필요)
File descriptor (file handle, file control block)
Open file table에 대한 위치 정보 (프로세스 별)
사용자 어플리케이션에서 파일을 다루기 위한 추상객체 정도로 생각하면 좋다.
open(”/a/b”)의 사례
fd는 file descriptor의 약자이다.
1.
사용자 프로세스가 파일 디렉토리(”a/b”)를 가지고 open을 요청함
2.
이를 위하여 drectory path를 search
루트 디렉토리의 위치는 OS가 알고있음. (open 불필요)
루트 디렉토리 “/”를 read하고 그 안에서 파일 “a”의 위치 획득
파일 “a”를 open한 후 read하여 그 안에서 파일 “b”의 메타데이터 획득
directory path의 search에 너무 많은 시간 소요되기 때문에, read와 write를 따로 둠
3.
b의 메타 데이터를 사용자 프로세스 PCB 블럭의 fd 테이블에 삽입하고, 사용자 프로세스에게 해당 file descriptor을 리턴함.
4.
사용자 process가 fd를 바탕으로 read를 요청함
5.
PCB의 fd 테이블을 확인하여 해당 파일의 주소로 이동하고, 읽기 연산를 통해 데이터를 읽어옴
6.
읽어온 데이터를 OS의 버퍼 캐시 영역에 적어놓고 copy하여 read를 요청한 사용자 프로세스에게 돌려줌 (다른 프로세스가 동일한 fd의 데이터를 요청하면 버퍼 캐시를 확인하여 있으면 버퍼 캐시의 내용을 넘김)

파일 보호

각 파일에 대해 누구에게 어떤 유형의 접근(read/write/execution)을 허락할 것인가?
Access Control 방법
1.
Access control Matrix 운용
2.
Grouping
a.
전체 유저를 owner, group, public 세 그룹으로 구분
b.
각 파일에 대해 세 그룹의 접근 권한(rwx)을 3비트씩 표시
c.
UNIX에서 채택한 방식
3.
Password
파일마다 password를 두는 방법 (디렉토리 파일에 두는 방법도 가능)
모든 접근 권한에 대해 하나의 password : all-or-nothing
접근 권한별 password: 암기 문제, 관리 문제

파일 마운팅

서로 다른 물리적디스크들이 하나의 파티션을 구성하기 위해 쓰는 기법.
1번 디스크의 특정 디렉토리로 가면, 3번 디스크에 루트로 이동시키는 방식이다.

파일 접근 방식

순차 접근

카세트 테이프를 사용하는 방식처럼 접근
읽거나 쓰면 offset은 자동적으로 증가

직접 접근

LP 레코드 판과 같이 접근하도록 함
파일을 구성하는 레코드를 임의의 순서로 접근할 수 있음 (random access)

디스크에 파일을 저장하는 방식 - 이론편

Contiguous Allocation

연속 할당. 하나의 파일 크기에 대해 연속적으로 할당한다.
장점
Fast I/O
한번의 seek/rotation으로 많은 바이트를 transfer할 수 있다.
Realtime file 용 or 또는 이미 run 중이던 process의 swap area용으로 사용한다 (공간 효율성보다 시간 효율성이 중요할 때)
Direct Access (=random access) 가능
단점
외부 조각(external fragmentation)이 발생한다.
file grow가 어렵다 → 파일의 크기가 커지기 힘들다.
grow를 위해 hole을 크게 할당하면 내부 조각이 발생할 수 있다. 균형을 찾아야한다.

Linked Allocation

파일의 시작위치만 디렉토리가 가지고 있고, 다음 파일 위치는 해당 위치에서 알고 있는 방식이다.
장점
외부 조각이 발생하지 않음
단점
직접 접근(random access)가 불가능함.
Reliablity 문제
만약 bad sector (고장난 일부 하드 공간)가 있어 pointer가 유실되면 그 뒷부분 전체를 잃게 됨
pointer를 위한 공간이 block의 일부가 되어 많은 공간 효율성을 덜어뜨림
섹터당 512 바이트 인데 pointer를 위해 4바이트를 써야한다.

변형 - FAT

File-allocation table(FAT) 파일 시스템
포인터를 별도의 위치에 보관화여 reliability와 공간 효율성 문제 해결

Indexed Allocation

첫번째 블록을 인덱스 블록으로 삼아, 해당 파일의 내용들에 대한 주소만을 담고 있는 방식
장점
외부조각이 발생하지 않음
직접 접근도 가능함
단점
Small file의 경우 공간 낭비 (실제로 많은 파일들이 small)
Too Large File의 경우 하나의 block으로 index를 저장하기에 부족하다.
해결방안
linked scheme
multi-level index

디스크에 파일을 저장하는 방식 - UNIX, Windows

Unix 파일 시스템의 중요 개념

boot block
부팅에 필요한 정보(bootstrap loader)
0번지에 저장하는 것으로 약속되어 있다.
Super block
파일 시스템에 관한 총체적인 정보를 담고 있다.
ex. 어디까지가 Inode list인가?
Inode
위에선 디렉토리에서 메타데이터를 담고 있다고 했지만, 유닉스 파일시스템에선 해당 메타정보를 Inode라는 곳에 모아서 관리한다.
파일 이름을 제외한 파일의 모든 메타 데이터를 저장
Data block
파일의 실제 내용을 보관

FAT File System

윈도우즈 계열에서 사용하는 방식
FAT(File-allocation table)이라는 별도의 자료공간을 둔다. 부팅시 FAT도 메모리에 올려놓고, 다음 주소 번지가 어디있는지만 표기한다. 실제 데이터는 디렉토리에서 보관한다.
Linked Allocation이지만 디스크 직접 접근이 가능하다. 이는 FAT을 메모리에 올려놓고 검색하는 덕분! bad sector가 발생해도 위치정보는 FAT이 가지고 있기 때문에 문제가 없다.

레퍼런스