- toc {:toc}
Basic Concept
-
OS는 저장된 정보에 대해 동일한 logical view를 제공한다.
- 저장장치의 물리적 특징을 축약한다.
-
File : Logical storage unit (저장 장치에 저장하는 단위)
- 사용자와 프로그램이 데이터를 저장하고 재사용할 수 있다.
- Nonvolatile
- 프로그램(source, objects)과 데이터(numeric, character, binary)를 나타낸다.
-
File → 확장자에 의해 내용 정의된다.
File Attributes
Attribute | Description |
---|---|
name | 사람이 읽을 수 있는 형태 이름 |
identifier | 시스템이 구분할 수 있는 속성 |
type | 파일 타입 |
location | 장치의 파일 위치 |
size | 현재 파일 사이즈 |
protection | 누가 읽고 쓰고 실행할 수 있는지 |
timestamps and user identification | monitoring, 보안에 대한 데이터 |
File Operations
-
Create
-
Open
-
Write - write pointer 위치에서 write
-
Read - read pointer 위치에서 read
-
Reposition within a file
-
Delete
-
Truncate : 파일 내용은 지우고 속성은 유지
-
Create, Open 제외한 모든 operation은 open을 먼저 진행해 file discripter를 얻어야 한다.
- OS → open-file table을 유지 (열려 있는 파일 추적 목적)
- open count : 파일이 몇번 열렸는지 저장
File Locking
-
파일에 대해 접근 얻지 못하도록 파일을 잠그는 것
-
reader-writer lock과 비슷하다.
-
Shared lock : reader lock과 비슷 → 여러 프로세스들이 동시에 lock 획득 가능
-
Exclusive lock : writer lock과 비슷 → 한 번에 한 프로세스만 획득 가능
-
Mandatory : OS가 locking 통합적으로 보장
-
Advisory : 개발자(사용주체)가 lock을 적절하게 직접 설정
- int flock(int fd, int operation);
- int fcntl(int fd, int cmd, …);
File Types
-
파일 시스템의 이해를 위한 type
- device, directory, symbolic link
-
OS, runtime library
- executable, dll, source code, object code
-
프로그램
- jpg, mpg, avi, mp3, …
-
인코딩 파일 타입
- 윈도우는 이름 안에 타입이 있다.
- .com, .exe, .bat, .dll, .jpg, …
- 유닉스는 파일 내용 안에 있다.
- 윈도우는 이름 안에 타입이 있다.
Access Methods
- Sequential access (순차 접근) : 다음 내용을 읽고 쓴다.
- Direct access : number에 해당하는 부분을 직접 접근 (순서에 상관없이 빠르게 읽고 쓸 수 있다.)
- Index access : 책의 목차처럼 사용해 접근
Directory Structure
-
모든 파일에 대한 정보를 포함한 노드들의 집합
- 디렉토리 구조와 파일 모두 디스크에 위치
-
Efficiency(효율성) : 빠르게 파일을 위치시키기 위해 사용
-
Naming(명칭) : 사용자의 편의성을 위해
- 서로 다른 사용자의 경우 다양한 파일에 대해 같은 이름을 가질 수 있다.
- 같은 파일에 대해 다양한 이름을 가질 수 있다.
-
Grouping : 파일 logical grouping
Single-Level Directory
- 모든 파일이 한 폴더에 들어가 있는 경우
- Naming problem(서로 유일한 이름 갖는다.), Grouping problem(나눌 수 없다.) 발생.
Two-Level Directory
- 사용자 각각의 폴더가 다르게 분리한다.
- Path name : user_name/file_name
- 효율적 탐색
- Grouping은 할 수 없다.
Tree-Structured Directory
- 가장 흔한 directory 구조
- Root directory를 갖는다.
- 모든 파일이 고유한 경로를 갖는다.
Acyclic-Graph Directory
- 상위 디렉토리가 하위 디렉토리와 파일을 공유할 수 있도록 허용한다.
- 파일이 두 가지 다른 이름을 가질 수 있다.
- 하지만 순환 구조가 생기면 안된다.
- 유닉스 = Symbolic link, Pointer
General Graph Directory
- 디렉토리와 파일에서 순환 구조가 발생해도 된다.
- Reference count가 0이 되지 않는다.
- ⇒ root에서 해당 파일로 가능 경로가 없어도 reference count = 1이 된다. (순환 구조에서)
- ⇒ 접근 가능하려면 0이어야 하는데, 이를 확인할 수 없다.
- ⇒ Garbage collection을 사용하여 접근할 수 없으면 삭제한다.
Protection
- 파일 제작자/소유자 ⇒ 누구에 의해 실행되었는지 알아야 한다.
- 접근 권한 부여
Access List / Group in Unix
- 3가지 모드 : read (R), write (W), execute (X)
- chmod를 통해 해당 접근 권한을 부여할 수 있다.
Memory-Mapped Files
- Virtual address의 한 부분이 파일들과 논리적으로 연결될 수 있도록 허용한다.
- Disk Block을 Page와 연결한다.
void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset);
- addr = mmap() 이후 addr에 write를 할 경우 메모리에 써지는 것이 아닌 파일에 써지는 것
- Memory-mapped 상황에서 3번 frame에 write 과정
- Write 입력
- 3번 frame addr에 접근
- Page fault 발생
- Disk에서 해당 file 부분을 3번 physical memory에 올려준다.
- Page가 physical memory에 올려진 disk block에 접근해 작업한다.