OS 9. File System

skh951225·2023년 3월 3일
0

KOCW 운영체제

목록 보기
9/10

출처 : KOCW 운영체제-반효경
( )

file

 관련된 정보들의 모음에 이름을 부여한 것이다. 일반적으로 비휘발성 보조기억장치에 저장한다. 운영체제는 disk1, disk2 .. 를 서로 다른 file이라는 논리적인 단위로 볼 수 있게 해준다. 여기서의 file 은 device special file이라고 부르며 일반적인 file과 약간다르다. file에 정의되는 연산은 create/delete(생성/삭제), read/write(읽기/쓰기), open/close(read/write를 하기위해서 open해야하고 끝나면 close, meta data를 메모리에 올리는 것이 open), reposition(lseek, 파일을 어디까지 읽었는지 표시하는 포인터를 reposition)

 파일의 내용 이외에 파일을 관리하는데 필요한 각종 정보들을 file attribute(metadata)라고한다. metadata에는 파일 이름, 유형, 저장위치, 파일사이즈, 접근권한(rwx), 시간(생성,변경,사용), 소유자 등 이 있다.

 운영체제에서 파일을 관리하는 소프트웨어 부분을 file system이라고 한다. file system은 파일 및 파일의 메타데이터, 디렉토리 정보 등을 관리한다. 보통의 file system은 디렉토리를 두어 루트로 부터 계층적으로 파일을 저장하게 된다. 파일 보호와 같은 것 또한 관리한다.

directory & logical disk

 디렉토리는 파일의 메타데이터 중 일부를 보관하고 있는 일종의 파일이다. 디렉토리의 내용은 속한 파일의 메타데이터 일부를 담고있고 디렉토리 역시 파일이기때문에 메타데이터를 가진다. 디렉토리에 정의되는 연산은 search/create/delete/rename a file, list a directory, traverse the file system(file system 전체를 탐색) 이 있다.

 결국 파일 시스템은 DISK에 저장되게 되는데 disk에는 physical disk 와 logical disk가 있다. physical disk는 실제 disk를 말하며 logical disk는 disk를 나누어 partition을 구성하거나 여러개의 disk를 합쳐 구성할 수도 있다. disk를 나누어 구성하는 것이 일반적이다. 디스크를 partition으로 구성한 뒤 각각의 파티션에 file system을 깔거나 swapping 등 다른 용도로 사용할 수 있다.

open("/a/b/c")

 read/write를 할때 매번 디스크에 있는 메타데이터를 확인해야하는 어려움이 발생할 수 있다. 이것을 좀더 빠르게 하기위해 open이 필요한 것이다. open("/a/b/c")을 하게되면 a,b,c의 메타데이터를 순차적으로 접근하며 커널 메모리 영역의 open file talbe에 저장한다. 이open file table은 system wide하게 하나만 가지고 있다. 그리고 파일 어느 위치에 접근중인지(file offset,별도의 테이블 필요)에 대한것은 프로세스마다 별도로 가지며 open file table에 저장된다. 각 프로세스마다 open한 파일에 대한 메타데이터 포인터를 가지고 있는 일종의 배열이 정의되어 있다. 이것은 프로세스의 pcb에 저장되며 file descriptor(file handle, file control block)이라고한다. open의 결과 fd를 가리키는 포인터를 반환하게 된다.

 read 명령어를 실행하게되면 cpu가 운영체제에게 넘어가 fd(pcb)->metadata(open file table)->content(disk) 의 과정으로 disk에 접근하여 file의 내용을 커널 메모리 영역에 저장하고 그 내용의 복사본을 process에게 넘겨주게된다. 이때 커널 메모리 영역에 저장하는 것을 buffer caching 이라고한다. 만약 나를 포함한 다른 프로세스가 같은 파일의 같은 위치를 읽으려고 할때 disk에 접근하지않고 운영체제에 있는 내용을 읽을 수 있어 속도가 빠르다. buffer cache는 page replacement 알고리즘과 달리 관리가 전적오르 운영체제에 의해 관리되기때문에 LRU,LFU와 같은 알고리즘을 사용할 수 있다.

file protection

 각 파일에 대해 누구에게 어떤 유형의 권한(rwx)을 줄지를 결정하는 것이 필요하다.

 각 파일별, 각 사용자 별로 권한을 access control matrix를 통해 저장할 수 있다. 하지만 이런 식으로 저장하게 되면 파일은 여러개 존재하는데 파일별로 특정사용자에게만 권한이 있을때 행렬은 sparse matrix가 되고 공간이 낭비되게 된다. 대안으로 linked list로 저장할 수 있는데 파일을 주체로 저장하게 되면 acess contol list라고하며 사용자를 주체로 하게되면 capability list라고한다. 필요에 따라 둘중 하나의 방식을 사용하면 된다. 하지만 이러한 방식은 부자적인 overhead가 크다.

 그래서 일반적인 운영체제에서는 grouping 이라는 방법을 통해 접근권한을 관리하고 있다. user를 owner,group,public으로 나누고 각 파일에 세 그룹의 접근 권한(rwx)를 3비트씩으로 표시한다.(eg. rwxr--r-- , unix)

 password를 파일/디렉토리마다 두는 방법도 생각해 볼 수 있다. 파일마다 접근권한마다 password를 두어야해서 암기나 관리 부분에서 문제가 될 수 있다.

access

 파일 시스템의 디렉토리를 다른 파일 시스템의 루트 디렉토리와 연결하는 방법을 mounting이라고 한다. mounting을 하게되면 특정 디렉토리의 접근으로 다른 파티션에 있는 file system으로의 접근이 가능해 진다.

 파일을 접근하는 방식은 순차접근(sequential access), 직접접근(direct access, random access)이 있다. 순차접근은 카세트 테이프를 사용하는 방식처럼 접근하는 방식이고 직접접근은 파일을 구성하는 레코드를 임의의 순서로 접근할 수 있는 방식을 말한다. 매체에 따라 직접접근이 되는 매체, 안되는 매체가 있다. 아무리 직접접근이 되는 매체라도 관리에 따라 순차접근만 되는 경우도 있다.

0개의 댓글