공부함

File System 본문

운영체제/이화여대 강의

File System

찌땀 2023. 12. 3. 09:30

https://core.ewha.ac.kr/publicview/C0101020140516150939191200?vmode=f

 

반효경 [운영체제] 24. File Systems 1

설명이 없습니다.

core.ewha.ac.kr

썸네일

 

File and File System

File

- A name Collection of related information : 이름을 갖고 관련 정보를 접근

- 파일은 휘발성이 아닌 비휘발성인 보조기억장치, 하드디스크 같은 곳에 저장한다.

- 데이터를 저장하는 목적으로만 파일을 사용하는 것이 아니라 장치들도 관리하기위해 파일이라는 이름을 사용한다.

- OS는 그런 저장장치를 서로 다른 파일로 관리한다. : device special file

Operations

create, delete, read, write, reposition(lseek), open, close

reposition이란?

파일을 읽을때 읽는 위치를 표시하는 포인터가 이동하면서 읽게 된다.

필요에 따라서는 위치 포인터가 아닌 다른 부분부터 뭔가 연산을 하고 싶을때 reposition(lseek)를 하게 된다.

open, close가 필요한 이유

인터페이스 상 정의에 따라 read,write를 하려면 open을 해야 한다.

read,write를 다 하면 파일을 close 해야 한다.

왜 open과 close가 따로 정의되어 있는가?

open의 역할은 메모리에 파일의 내용을 올리는 것이 아니라 파일의 메타데이터를 메모리에 올려놓는 것이다.

File attribute (메타데이터)

파일에는 파일 자체의 내용 말고 파일을 관리하기 위한 내용이 있다.

음악은 파일 자체의 내용이지만 파일의 이름, 유형, 디스크상에 저장된 위치, 파일 사이즈 등은 파일 자체의 내용하고는 상관이 없지만 같이 관리되어야 한다.

File System

운영체제에서 파일을 관리하는 SW 부분이다.

파일 자체의 내용도 관리해야하고, 메타데이터도 같이 저장하고 있어야 한다.

디렉토리를 두고 root 디렉토리부터 계층적으로 저장한다.

파일을 어떻게 저장하고 관리할지,

파일의 보호 등

Directory

대부분의 파일 시스템에서 디렉토리를 제공한다.

디렉토리도 하나의 파일이다.

파일의 메타데이터 중 일부를 보관하고 있는 일종의 특별한 파일이다.

즉 디렉토리의 내용 : 디렉토리의 속하는 파일 이름 및 파일 attribute, 즉 메타데이터

그리고 디렉토리의 메타데이터도 따로 있다.

디렉토리에 메타데이터를 몽땅 저장할 수도 있지만, 일부 메타데이터는 디렉토리에 직접 저장하고, 일부 메타데이터는 다른곳에 저장하기도 한다.

operation

search for a file, create a file, delete a file, list a directory, rename a file, traverse the file system

traverse the file system은 파일시스템 전체를 탐색하는 것이다.

Partition = 논리적인 disk

논리적인 디스크, 물리적인 디스크가 있다. 운영체제는 논리적인 디스크를 본다.

하드디스크를 나눠서 논리 디스크 C드라이브, D드라이브로 나눌 수 있다.

파티션에 File System을 설치할 수 있다.

또는 virtual memory의 swap area(backing store) 용도로 사용할 수 있다

즉 파티션은 파일 시스템 또는 스왑 에어리어로 사용할 수 있다.

open 연산

open 연산

파일의 메타데이터를 디스크에서 메인 메모리에 올리는 것이다.

메타데이터에는 파일의 위치도 포함되어 있다.

예를 들어 open("/a/b/c") 를 하면 c의 메타데이터를 디스크에서 메모리로 올린다. 

그러기 위해서는 c라는 파일의 메타데이터의 위치를 찾아야 한다. 

일반적으로 루트디렉토리인 a의 위치는 이미 알려져 있으므로 a 위치에서부터 계층적으로 찾아 나간다. 

오픈, 리드, 라이트 등은 모두 시스템 콜이다. 따라서 프로세스 A가 fd = open('/a/b")라는 시스탬 콜을 하면 CPU가 OS에게 넘어간다. 커널 영역에는 각 프로세스의 PCB와, 어떤 파일이 열려있는지 관리하는 Open file table이 있다. 

이것을 per-process file descriptor table이라 한다. 

OS가 루트 디렉토리의 메타데이터는 알고 있다. 이것을 메모리에 올린다 .

루트의 메타데이터를 통해 실제 루트의 위치를 알 수 있다. 

루트는 디렉토리 파일이므로 루트의 하위에 있는 파일들의 메타데이터를 갖고 있다. 

즉 루트디렉토리의 내용으로 가면 a의 메타데이터가 있다. 이걸 메모리에 올린다.

a의 내용으로 가면 a도 디렉토리 파일이므로 b의 메타데이터를 갖고 있다. 

이것을 찾아서 b의 메타데이터를 메모리에 올린다. 

프로세스가 오픈한 파일들에 대한 메타데이터 포인터를 갖고 있는 배열이 있다. 이것은 프로세스마다 관리하는 것이 아니고 OS가 통합해서 관리하는 것이라 system-wide open file table이라 한다. 

b의 메타데이터를 가리키는 포인터가 이 배열에서 몇번째 인덱스에 있는지가 open("/a/b")의 반환값이 된다. 

이 반환값을 알기 때문에 open 이후에는 다시 계층구조로 b의 위치를 찾는 과정 없이 read, write등을 할 수 있다. 

즉 반환값 fd를 사용해 read(fd)와 같이 코드를 작성한다. 

b의 메타데이터를 통해 b의 실제 위치를 파악해서 읽어온다. 특별한 조건이 없으므로 b의 시작위치부터 읽는다. 

읽은 내용은 프로세스 A에게 바로 주는 것이 아니다. OS가 먼저 자신의 메모리 공간에 읽어 놓는다. 

그리고 나서 프로세스에게 그 내용을 복사해서 전달한다. 

만약 이후에 동일한 파일의 동일한 위치를 read 요청하면, 실제 b의 내용까지 갈 필요 없이 이것을 주면 된다.

이것이 버퍼 캐싱이다. 다만 이 경우에는 캐시 내용이 있던 없던 일단 시스템 콜을 하면 OS에게 CPU가 넘어온다.

따라서 LRU, LFU등을 사용할 수 있다. (페이징에서와 달리, 페이징에서는 페이지폴트가 발생해야만 CPU가 OS에게 넘어감)

 

프로세스가 파일을 오픈해서 메타데이터를 메모리에 올리면 메타데이터에는 하나의 정보를 추가해야 한다.

프로세스가 파일의 어느 위치에 접근하는지를 나타내는 오프셋이다. 

그것은 프로세스마다 별도로 있는 것이다. 

 

File Protection

각 파일에 누구에게 어떤 유형의 접근 권한을 허락할 것인지 정해야 한다.

 

Access Control Matrix

사용자와 사용자가 갖는 권한을 행렬로 관리하는 것이다. 

하지만 이 방법은 행렬의 칸이 낭비된다.

유저1이 자신만 보려고 만든 파일1은 다른 유저들은 접근하지 못하는데 칸을 다 만들어야 하기 때문이다.

따라서 행렬 대신 링크드리스트를 사용할 수 있다. 

 

Access Control List

파일별로 어떤 유저에게 어떤 접근권한이 있는지, 이미지의 빨간색 

접근권한이 있는 유저들을 링크드리스트로 묶는다. 

Capablility

유저를 중심으로 접근권한이 있는 파일들으 링크드리스트로 묶는다. 

이미지의 파란색 

 

Grouping

일반적인 운영체제는 그루핑 방식을 사용한다

각각의 파일에 대해 사용자 그룹을 owner, group, public 세가지로 나눈다.

그리고 각 그룹에 대해 접근 권한을 3bit씩으로 표시한다.(rwx 읽기 쓰기 실행 권한 있으면 1 없으면 0 으로 3비트)

단 9bit로 모든 파일에 대한 모든 사용자의 접근권한을 나타낼 수 있어서 효율적이다. 

 

Password

파일마다 password를 두는 방법이다. 또는 디렉토리에 패스워드를 두고 디렉토리에 접근하려면 패스워드가 필요하게 할 수도 있다. 

접근 권한 (읽기 쓰기 실행) 별로 패스워드를 따로 둘 수도 있다 

이 방식은 암기 문제, 관리 문제가 있다. 

패스워드가 너무 많아서 일일히 암기하기가 힘들고, 적어 놓자니 도난당할 수 있다. 

 

File System의 마운팅 

물리적인 디스크를 파티셔닝을 통해서 여러개의 논리적인 디스크로 나눌 수 있다. 

각각의 논리적인 디스크에는 파일 시스템을 설치해서 사용할 수 있다.

만약에 논리 디스크의 파일 시스템에 접근해야 한다면 마운팅이라는 연산을 해야 한다. 

마운팅

루트 파일 시스템의 특정 디렉토리 이름에다가 다른 파티션에 있는 파일 시스템을 가져다가 마운트를 해줄수 있다. 

이렇게 마운트 된 디렉토리를 접근하면 다른 파티션의 루트 디렉토리를 접근하는 것과 같다. 

 

 Access Methods

파일을 접근하는 방법에 관해서 알아보자. 

 

순차 접근

- 카세트 테이프, 비디오 테이프 

- 읽거나 쓰면 offset은 자동적으로 증가  

직접 접근 (임의 접근)

- LP 레코드 판 

- 파일을 구성하는 레코드를 임의의 순서로 접근할 수 있음

 

 

 

 

 

 

 

'운영체제 > 이화여대 강의' 카테고리의 다른 글

Disk Management Scheduling  (1) 2023.12.03
File System Implementation  (0) 2023.12.03
Virtual Memory  (0) 2023.11.23
Memory Management  (0) 2023.11.17
DeadLock  (9) 2023.11.10