파일이란?
파일은 관련이 있는 일련의 정보들의 집합 논리적인 단위입니다.
파일의 기능으로는 create, read, write, reposition(lseek), delete, open, close 등이 있습니다.
Reposition
파일을 읽거나 쓸 때는 해당 파일에서 어디까지 읽거나 썼는지를 가리키는 포인터를 계속 수정하게 되는데, 특정 위치에서부터 읽거나 쓰고 싶을 때는 reposition을 통해 포인터를 옮깁니다.
Open
파일을 읽거나 쓰기 위해서는 먼저 open을 해야하는데, 이때는 디스크에서 메모리로 파일의 메타데이터를 올리는 역할을 합니다.
파일의 Metadata
어떤 파일에 저장된 내용이 아닌, 파일을 관리하기 위한 각종 정보입니다. 파일 이름, 유형, 저장된 위치, 파일 사이즈, 접근 권한, 시간, 소유자 등을 포함합니다.
파일 시스템이란?
이러한 파일을 운영체제가 관리하는 부분입니다. 파일 및 파일의 메타데이터, 디렉토리 정보 등을 관리하고, 파일의 저장 방법을 결정하고, 파일을 보호하는 역할을 합니다.
디렉토리란?
일반적으로 폴더로 익숙한 디렉토리는, 파일의 메타데이터 중 일부를 보관하는 일종의 파일입니다. 하나의 디렉토리는 다른 디렉토리를 가지고 있을 수 있고, 이를 통해 계층적 구조를 만듭니다.
Open()을 수행하는 과정
메모리의 커널 영역에는 프로세스마다 구분하여 정보를 저장하는 PCB에, 각 프로세스가 오픈한 파일들의 메타데이터 포인터를 저장하는 배열이 있고, 이 포인터는 커널에서 전역적으로 관리하는 Open file table에 있는 파일의 메타데이터를 가립니다. Open File Table에는 디스크로부터 읽어온 파일의 메타데이터를 저장합니다. 그리고 PCB에 저장하는 Oepn file table도 있습니다. 여러 프로세스가 하나의 파일에 접근할 수 있지만, 각 프로세스가 읽고 있는 위치는 다른 수 있기 때문에 이러한 포인터들은 PCB에 저장합니다.
open() 명령을 수행하면, 루트 디렉토리부터 계층적으로 디렉토리를 탐색해갑니다. 이때 탐색한 티렉토리의 메타데이터를 Open file table에 저장합니다. 그리고 파일을 찾아내면 지정한 만큼 파일을 읽어 우선적으로 커널영역에 저장는데, 이것을 버퍼 캐싱이라고 합니다. 그리고 이 값을 다시 사용자 메모리영역에서 open()명령을 call한 프로세스에 올립니다. 이후 어떤 프로세스가 정확히 같은 곳을 읽고자할 때, 이 캐시에 있다면 디스크를 읽지 않고 바로 이 값을 읽습니다.
Memory관리의 페이징 기법에서는 Page fault가 발생했을 때만 운영체제에게 주도권이 넘어감으로 LRU를 사용할 수 없었지만, 파일을 읽을 때는 무조건 운영체제로 주도권이 넘어감으로 LRU나 LFU알고리즘을 사용해서 캐싱합니다.
그리고 open() 명령의 반환값으로 File Descriptor가 반환됩니다. 이는 위의 PCB에 저장된 파일의 메타데이터을 가리키는 포인터 배열의 인덱스입니다. 이 값을 통해서 다음번에 빠르게 해당 메타데이터에 접근할 수 있습니다.
참조
반효경 [운영체제] 24. File Systems 1
설명이 없습니다.
core.ewha.ac.kr
'Computer Science > Operating System' 카테고리의 다른 글
[운영체제] Page Fault를 줄이기 위한 운영체제의 노력 (0) | 2023.03.29 |
---|---|
[운영체제] Memory Management - Segmentation (0) | 2023.03.28 |
[운영체제] Memory Management - Paging (0) | 2023.02.16 |
[운영체제] Memory Management 1 (0) | 2023.02.15 |
[운영체제] 데드락 (Deadlock) (0) | 2023.02.14 |