운영체제

파일시스템 수정

소재훈 2021. 12. 5. 01:36

Cache-Update Policy  3가지

  1. write-through policy
    : 캐싱 된 내용이 고쳐질 때마다 원본의 내용도 고치는 것. 원본과 작업 물 간의 불일치문제는 해결되지만 오버헤드가 크다.
  2. write on close
    : 모든 작업을 작업본에서 수행하고, 작업이 끝났을 때 원본과 싱크를 맞춰주는 방법이다. 오버헤드가 작지만 작업도중 crash가 발생할 경우 작업의 내용이 모두 날아간다.
  3. delayed write
    : 일정시간마다 원본과 싱크를 시켜주는 방법이다.

오버헤드를 감수하더라도 자료의 일치성이 중요하다면 write through방법을 사용하고, 일반적으로는 delayed write방법을 사용한다.


Recovery 기능

데이터의 일부가 고쳐진 상태에서 System Crash가 발생하면 data inconsistency가 발생한다. 따라서 처음 시스템 부팅시에consistency를 체크한다.


Consistency Checking

옛날에는 파일시스템의 사이즈가 작아 fsck(file system check)를 몇 분 안에 수행했으나 요즘에는 사이즈가 커 몇시간이나 소요된다. consistency를 체크하는 방법들은 다음과 같다.

  1. all or nothing: 모두 다 고쳐지거나, 하나도 고쳐지지 않은 상태로 만드는 것. inconsistency한 상태를 막을 수 있지만 오버헤드가 커진다는 단점이 있다.
  2. journaling file system, log based file System: 로그를 만들어 원본을 고치는 방법을 사용해, crash가 발생했을 때 로그만 보고 inconsistency한 상태가 발생했다는 것을 확인하는 방법이다. 일반적으로는 메타데이터에서만 사용한다. ext3의 가장 중요한 확장이다.

ext4에서의 확장

ext3와의 가장 큰 차이점은 extent(확장)기능이 생겼다는 것이다.
최근의 파일 저장방식은 가능하면 연속적으로 저장하자는 추세이다. 파일이 연속적으로 있어야 접근속도가 빠르기 때문이다. 연속 저장시의 문제는 파일이 확장(extent)될 때마다 메모리에 공간을 미리 할당해주어야 한다는 것이다. 그때 메모리 사이즈를 결정하는 방법은 나중에 공부한다.


Virtual File System

원래 운영체제에서는 하나의 파일 시스템만 제공했으나 이제는 하나의 운영체제에서 여러 파일시스템을 제공할 수 있다. JFS, DOS, NTFS, ext2 FS 등의 파일시스템을 제공하면서 기능은 같더라도 다른 시스템 콜 호출 사용하는 문제가 있다. 이를 해결하기 위해서 interface layer라는 하나의 단일 인터페이스를 제공하고, 그것을 Virtual File System이라고 부른다. 정리하면, Virtual File System은 여러 파일 시스템을 동일한 인터페이스에서 사용할 수 있게끔 해주는 것이다.

요즘의 운영체제들은 일반 UFS와 똑 같은 semantic을 사용해서 다른 파일시스템을 사용할 수 있도록 하나의 layer를 만들어 처리해준다.


NFS(Network File System)


네트워크 파일 시스템은 독립된 컴퓨터 시스템들이 네트워크로 연결되어 있는 분산시스템이다. 서로 협력하며, 자원을 공유하는 것이 큰 목적이다. local file뿐만 아니라 remote파일도 동일한 semantic으로 사용할 수 있게 해준다.


Disk Cache(Buffer Cache)

캐시를 가상메모리를 관리하듯이 페이지 단위로 읽어 관리하기 때문에 Page Cache라고 부르기도 한다. 디스크에 있는 내용의 일부를 메인 메모리에 가져다 두고 사용하는 것을 말한다. 앞에서 말한 write through, write on close, delayed write 세가지 방법이 있다.


File System Mounting

클라이언트에서 서버의 파일을 사용하고 싶다면 Local File System에 가상 마운팅(Mounting)을 해야 한다. 모든 컴퓨터 시스템에는 기본적으로 Root File System, 소위 Boot Block이 존재해야 하고, 운영체제에 실행코드가 위치한다. 그 후 여러 종류의 파일 시스템을 Root File System중 하나에 덧붙이는데, 논리적으로 보았을 때 하나의 트리구조가 되고 그렇게 해서 만들어진 파일 시스템을 mounting이라고 한다. 데이터를 실제로 가져다 붙이는 것이 아니라 트리의 구조만 가져다 붙인다.


RPC/XDR

클라이언트에서 시스템 콜을 호출하면, 실제 호출은 클라이언트에서 이루어지는 것이 아니라 서버에서 이루어진다. VFS layer에서 유닉스 시스템 파일, 도스파일, remote에 있는 파일인지를 판단해, remote파일이라면 NFS쪽으로 보내주고, 자료를 XDR 포맷으로 변경해 RPC 방법을 사용해 서버에서 요청을 하게 된다. 서버에서는 클라이언트에서 해석해 주어진 포맷에 따라 reply 해주는 방법을 RPC/XDR이라고 한다.


File Type

파일 시스템마다 같은 파일이라도 extension을 붙이는 방법이 여러가지가 있다. 파일 타입을 보고 파일이 무슨 종류 인지 알 수 있다. 파일 시스템 내부에서는 큰 의미를 가지지 않는다.


Protection

Physical damage는 무언가 고장이 나는 것을 의미하고, improper access는 사용할 수 없는 사용자가 파일에 접근하는 것을 의미한다. UNIX File System에서는 파일들을 사용할 수 있는 access Type으로 r, w, x세가지 형태로 나누고, user, group, other로 사용자별로 다른 권한을 줄 수 있다.


Memory-Mapped File

파일을 사용할 때, 메모리에 해당 파일이 존재한다고 생각하고, 커다란 한 데이터를 메모리 접근하듯이 사용하는 방법을 Memory Mapped File이라고 한다.