본문 바로가기
Computer Science/Operating System

[Operating System] File System (1) (파일 시스템)

by __K.Jun__ 2024. 8. 25.

File Concept

File : 데이터 또는 프로그램을 포함하는 연속적인 논리 주소 공간

 

File Attribute (File Metadata)

- Name : 사람이 읽을 수 있는 형태로 유지된 유일한 정보

- Type : 여러 유형을 제공하는 시스템을 위해 필요

- Location : 파일이 존재하는 장치와 그 장치 내의 위치에 대한 포인터

- Size : 파일의 현재 크기(바이트, 워드 혹은 블록들로 나타낸다.)

- Protection : 누가 읽기, 쓰기, 실행 등을 할 수 있는가를 제어

- Time, date, and user identification : 생성, 최근 변경, 최근 사용 등을 유지하고, 이들 자료는 보호, 보안 및 사용자 감시를 위해 사용된다.

 

File Operation

- Create : 파일 생성

- Write : 파일 쓰기

- Read : 파일 읽기

- Repositioning within file - file seek : 파일 안에서의 위치 재설정 - 파일 탐색

- Delete : 파일 삭제

- Truncate : 파일 절단 (파일의 내용은 지우고 다만 그 파일의 속성은 그대로 남기기)

- Open : 파일 열기 (디스크 -> 메모리로 파일 메타데이터를 복사)

- Close : 파일 닫기

 

Directories

유저 관점에서는 관련된 파일들끼리 조직화하는 구조화된 방식, 파일 시스템 관점에서는 파일의 특정 데이터가 어디에 있는지에 대한 세부사항을 대신하기 위한 인터페이스 역할

- 상대 경로 : 현재 directory를 기준으로 하는 경로

- 절대 경로 : root directory를 기준으로 하는 경로

 

A Directory Entry

  디렉토리는 파일의 메타데이터와 같은 정보들을 디렉토리 엔트리로 포함하는데, 그 정보들은 디스크에 저장되어있고, OS는 메모리에서 최근에 접근된 파일에 대한 디렉토리 엔트리를 캐시에 저장한다. 캐시 데이터가 디스크의 원본 데이터와 다르면 파일을 잃을 수 있다.

 

Directory Structure

 

  UNIX 환경에서 디렉토리 엔트리들은 Search 오버헤드를 낮추기 위해 파일의 이름만 포함하고 있으며 이들은 파일의 메타데이터를 포함하는 각각의 inode를 가리킨다. 그리고 이 inode들은 또 File의 실제 데이터들을 포함하는 각각의 블럭을 가리킨다.

 

Directory 구현 방법

- Linear List : 간단하지만 Search 오버헤드가 있음

- Hash Table

1. Linear List : Hash table 추가 공간 오버헤드

2. Seach 오버헤드 감소

3. 충돌 발생가능

 

Operation Performed on Directory

- Search for a file

- Create a file

- Delete a file

- List a directory

- Rename a file

- Traverse the file system

 

 

- Single-Level Directory

  파일 이름이 충돌이 발생할 수 있고, 그룹을 만들 수 없다.

 

- Two-Level Directory

    사용자 간 이름 충돌이 발생할 수 있지만 여전히 그룹을 만들 수 없다.

 

- Tree-Structured Directories

  서브디렉토리로 그룹을 만들 수 있고, root 디렉토리와 현재 디렉토리가 존재할 수 있기 때문에 상대 경로, 절대 경로 또한 존재 가능하다.

  삭제 시 디렉토리가 empty한지 아닌지 체크해야 한다. empty 검사가 없다면 편할 수는 있지만 위험이 따른다.

 

- Acyclic-Graph Directories

  서로 다른 디렉토리에서 같은 파일을 공유할 수 있다.

  이 경우 방문한 노드를 두 번 방문할 수 있는 traverse 문제와, 공유 중인 파일이 삭제 될 경우 Delete 문제가 발생할 수 있다.

  UNIX 환경에서는 공유되는 파일/디렉토리에 대한 link를 만들어 준다.

  Symbolic Link : 위 그림과 같이 Kang 밑에 있는 디렉토리 엔트리를 Jung도 가지려고 한다면, root 부터 X까지의 경로를 jung에 등록해주는 식으로, 실제 디렉토리 엔트리를 갖는 것이 아닌 경로만 참조할 수 있는 Link를 가지게 한다.

  Hard Link : 실제 디렉토리 엔트리를 갖게 하고, 그 디렉토리 엔트리에 0이 되면 삭제되게 하는 Reference Count를 갖게 한다. 이는 일관성 문제가 발생할 수 있다. 

 

- General Graph Directory

  사이클이 존재할 수 있는 구조이다. 사이클 때문에 Reference Count가 0으로 떨어지지 않을 수 있다. 그럴 때에는 garbage collection으로 접근될 수 없는 노드를 마킹해서 지워버리는데, 그런 노드를 Searching 하는 데 오버헤드가 발생할 수 있다.

  사이클을 허용하지 않는다면 사이클 탐지 알고리즘을 사용해야 한다.

 

Protection

파일 접근 권한 제어

접근 권한 제어 행렬 사용은 메모리 공간을 너무 많이 차지하기 때문에 Unix 환경은 다음과 같은 방식으로 파일 접근을 제어한다.

r : 읽기 권한

w : 쓰기 권한

x : 실행 권한

user : 사용자

group : 사용자가 속한 그룹

others : 사용자가 속한 그룹 외

 

File-System Structure

  파일 시스템은 보통 디스크에 계층적으로 구성되어있다. 매번 디스크에 있는 파일에 접근하는 것은 I/O 오버헤드가 크다.

  - open() 시스템콜 : 파일을 시퀀스 단위로 매번 읽어내는 I/O 오버헤드를 줄이기 위해 구체적인 파일의 메타데이터를 디스크에서 메모리로 로드하는 시스템콜이다.

  - Open-file table : 메모리에 로드된 파일의 메타데이터를 저장하는 테이블

  - File descriptor : open-file table 에서의 파일의 인덱스, 디렉토리 서치는 오버헤드가 있기 때문에 이를 사용한다.

 

Mounting

USB 플래시 메모리와 같은 저장장치의 root 디렉토리를 디스크의 특정 디렉토리와 연결시키는 것

728x90