CS 공부

파일 시스템 본문

CS공부/운영체제

파일 시스템

kluiop1 2021. 7. 16. 01:47

파일이란

컴퓨터는 정보들을 자기 디스크, 자기 테이프, 광 디스크와 같은 다양한 저장 매체에 저장할 수 있다.

운영체제는 저장장치의 물리적 특성을 추상화하여 논리적 저장을 하는데 이러한 저장 단위가 파일이다.

 

파일 시스템이란

- 컴퓨터 시스템의 운영체제와 모든 사용자의 데이터와 프로그램의 온라인 저장과 접근을 위한 기법을 제공한다.

- 정보 자료를 저장하는 실제적인 파일들의 집합체이다.

- 시스템 내의 모든 파일에 관한 정보를 제공하는 디렉토리 구조이다.

 

특징

- 커널 영역에서 동작

- 파일 CRUD 기능을 원활히 수행하기 위한 목적

- 계층적 디렉터리 구조를 가짐

- 디스크 파티션 별로 하나씩 둘 수 있음

 

역할

- 파일 관리

- 보조 저장소 관리

- 파일 무결성 메커니즘

- 접근 방법 제공

 

개발 목적

- 하드디스크와 메인 메모리 속도차를 줄이기 위함

- 파일 관리

- 하드디스크 용량 효율적 이용

 

구조

메타 영역 : 데이터 영역에 기록된 파일의 이름, 위치, 크기, 시간정보, 삭제유무 등의 파일 정보

데이터 영역 : 파일의 데이터

 

접근 방법

접근 방법이란

파일에 접근하여 데이터를 읽는 방법

 

순차접근

- 가장 간단한 방법으로 파일의 정보가 레코드 순서대로 차례차례 처리된다.

- 현재 위치를 가리키는 포인터에서 읽기/쓰기 시스템 콜이 발생한 경우 포인터를 앞으로 보내면서 읽거나/쓴다. 뒤로 - 돌아가기 위해서는 지정한 offset 만큼 되감기를 하여야 한다.

- 테이프 모델에 기반을 두고 있다.

 

 

직접 접근

- 직접 접근 또는 상대 접근 특별한 순서 없이 빠르게 레코드를 읽고 쓸 수 있다.

- 디스크 모델에 기반을 두며 이는 무작위 파일 블록에 대한 임의 접근(Random Access)를 허용하기 때문이다.

- 직접 접근의 경우 읽기나 쓰기의 순서에 제약을 가하지 않는다.

- 직접 접근을 위해 파일은 번호를 갖는 일련의 블록 또는 레코드로 간주된다.

- 대규모 정보를 즉각적으로 접근하는 데 유용하여 데이터베이스에 이용된다.

 

색인 접근

- 파일에서 레코드를 찾기 위해서 먼저 이 색은부터 찾아 그에 대응하는 포인터를 얻는다. 그런 다음 그 포인터를 사용하여 파일에 직접 접근하여 원하는 레코드를 찾는다.

 

디렉토리와 디스크 구조

통상 수천 수만 수십억 개의 파일을 하드디스크, 광학 디스크,반도체 디스크를 포함한 임의 접근장치에 저장하는 방법

매우 많으므로 체계적으로 구성을 갖추어야 한다. 그래서 디렉터리의 사용을 수반한다.

 

볼륨(disk)

- 파일 시스템을 포함하고 있는 임의의 개체

- 각 볼륨을 논리적인 가상 디스크로 취급될 수 있다.

- 하나 이상의 운영체제를 저장하고 부팅, 실행시킬 수 있다.

- 섹터들의 집합으로 연속공간이 아니어도 볼륨으로 볼 수 있다.

 

파티션

- 연속된 저장 공간을 하나 이상의 연속되고 독립적인 영역으로 나누어서 사용할 수 있도록 정의한 규약

 

디렉토리

여러 개의 파일과 다른 파일의 디렉토리의 집합

 

디렉토리 기능

파일 찾기 : 특정 파일에 해당하는 항목을 찾기 위해 탐색이 가능해야 한다. 특정 패턴과 일치하는 이름을 갖는 모든 파일을 찾을 수 있어야 한다.

파일 생성 : 새로운 파일들을 생성하여 디렉터리에 추가한다.

파일 삭제 : 디렉터리에서 파일 제거

디렉터리 나열 : 존재하는 파일들을 나열하고 내용을 보여준다.

파일의 재명명 : 이름 바꾸기

파일 시스템의 순회(Traverse) : 파일 시스템의 모든 디렉터리를 순회하면서 모든 파일들을 액세스할 필요가 있다. 전체 파일 시스템을 주기적으로 백업할 때.

 

1단계 디렉토리

- 가장 간단한 구조의 디렉터리

- 모든 파일이 디렉터리 밑에 존재하기 떄문에 지원하기 쉽고 이해하기도 쉽다.

- 파일이 많아지거나 다수의 사용자가 사용할 경우 심각한 제약이 따른다.

- 각 파일들은 서로 유일한 이름을 가진다. 서로 다른 사용자라 하더라도 같은 이름을 사용할 수 없다.

 

2단계 디렉토리

- 사용자들에게 개별적인 디렉터리를 만들어 준다.

- 이 구조는 한 사용자를 다른 사용자로부터 효과적으로 격리시킨다. 하지만 어떤 작업을 협력적으로 진행하길 원해서 다른 사용자의 파일에 접근해야 하는 경우에는 단점이 된다.

- UFD(User File Directory) : 자신만의 사용자 파일 디렉터리, 비슷한 구조를 가지고 있지만 오직 한 사용자만의 파일을 저장한다

- MFD(Master File Directory) : 사용자의 이름이나 계정 번호로 색인되어 있고, 각 엔트리는 사용 자의 UFD를 가리킨다.

 

트리 구조 디렉터리

- 사용자들이 자신의 서브디렉터리(Sub-directory)를 만들어서 파일을 구성할 수 있게 된다. 트리 구조는 하나의 루트 디렉터리를 가지며 시스템의 모든 파일은 고유한 경로 이름을 가진다.

- 효율적인 탐색

- 그룹화 기능

- 트리 구조 디렉터리 시스템에서 사용자는 자신의 파일뿐만 아니라 다른 사용자의 파일에도 접근할 수 있다.

 

비순환 그래프 디렉터리

- 사이클이 없는 그래프는 디렉터리들이 서브디렉터리와 파일들을 공유할 수 있도록 허용한다.

- 트리 구조의 디렉터리를 자연스럽게 일반화한 방식이다.

- 절대경로명/상대경로명을 이용하여 링크 라고 불리는 새로운 디렉터리 항목을 만들 수 있다.

- 단순한 트리 구조보다는 융통성이 있는 대신에 더 복잡하다.

- 파일을 삭제할 때 대상이 없는 포인터(dandling pointer) 를 남긴다.

- 참조되는 파일에 참조 계수를 두어 계산한다. 참조 계수가 0이 되면 현재 파일을 참조하는 링크가 존재하지 않으므로 파일을 삭제할 수 있다

 

일반 그래프 디렉터리

 

 

- 디렉터리에서 순환이 허용되는 겨우 무한 루프에 빠질수도 있다. 따라서 순환이 발생하지 않도록 하위 디렉터리가 아닌 파일에 대한 링크만 허용하거나 가비지 컬렉션을 이용하여 전체 파일 시스템을 순회하고, 접근 가능한 모든 것을 표시한다.

- 디렉토리를 순회할 때 링크가 있으면 우회하여 순환을 피할 수도 있다.

 

파일 시스템 마운팅

 

- 파일이 사용되기 전에 열리는 것 처럼 프로세스들이 파일 시스템을 사용하기 전에는 먼저 마운트해야 한다.

- 마운트 되지 않은 파일 시스템은 마운트 지점 (Mount poing)에서 마운트된다.

- 디바이스 이름과 마운트 포인트 위치를 전달하여 마운트한다.

- 시스템은 기능을 명확하게 하기 위해 Semantics를 부여한다. (정책)

- 시스템 파일 디렉토리에는 마운트가 불가하다.

- 마운트 된 이후에는 마운트 된 파일 시스템만 접근하게 한다.

 

 

 

참조

https://noep.github.io/2016/02/23/10th-filesystem/

https://blog.naver.com/PostView.nhn?isHttpsRedirect=true&blogId=yeop9657&logNo=220733054673&parentCategoryNo=&categoryNo=128&viewDate=&isShowPopularPosts=true&from=search  

 

'CS공부 > 운영체제' 카테고리의 다른 글

가상 메모리  (0) 2021.08.08
주기억 장치 관리 전략(페이지 반입, 배치, 교체 전략)  (0) 2021.07.16
세그먼테이션  (0) 2021.07.16
메모리  (0) 2021.07.15
페이징(외부 단편화, 내부 단편화, TLB)  (0) 2021.07.15