[Computer Science]/[운영체제(OS)]

[운영체제(OS)] 15-2) 파일 공유 - 가상, 원격 파일 시스템

극꼼 2023. 5. 3. 09:22
반응형


<파일 공유>

운영체제가 여러 사용자를 수용하면 파일 공유, 네이밍, 보호가 중요해집니다. 디렉토리 구조가 사용자의 파일 공유를 허용하면 시스템은 파일 공유를 중재해야 합니다. 이를 구현하기 위해 시스템은 파일과 디렉토리에 대해 더 많은 속성을 가져야 하며, 소유자(owner, user)와 그룹(group)이 이와 같습니다. 사용자가 파일 연산을 요구할 때 사용자 ID를 소유자, 그룹 속성과 비교한 후 요구된 연산을 허가하든지 거부합니다. 


<가상 파일 시스템>

:Virtual File System. 실제 파일 시스템에 관계없이 공통된 인터페이스로 파일 시스템에 접근하도록 하는 계층입니다.

파일 시스템 구현은 아래 이미지와 같이 3가지 주요한 계층으로 구성됩니다.

1) 파일 시스템 인터페이스 : open(), read(), write(), close() 호출과 파일 디스크립터에 기반을 두고 있습니다.

2) 가상 파일 시스템 : 두 가지 주요한 기능을 제공합니다.

  1. NFS는 가상 파일 시스템 인터페이스(이하 VFS 인터페이스)를 명확하게 정의하여 파일 시스템의 일반적인 연산을 구현과 분리합니다.
  2. VFS는 네트워크에 속한 모든 파일을 동일한 형태의 파일 객체(vnode)로 표현해주는 기능을 제공합니다. vnode는 네트워크 전체에서 유일한 파일에 대한 수치 지정자(designator)를 포함하고 있습니다. 

VFS는 원격 파일과 로컬 파일을 구분하고, 로컬 파일들을 파일 시스템 유형에 따라 더 세부적으로 구분합니다. VFS는 특정 파일 시스템의 명령을 활성화하여 파일 시스템 유형에 따른 로컬 요청을 처리하고, 원격 요청에 대해서는 NFS 프로토콜 프로시저를 호출합니다. 파일 핸들은 관련 vnode들로부터 구성되며, 이 프로시저에 매개변수로 전달됩니다.

3) 파일 시스템 유형이나 원격 파일 시스템 프로토콜을 구현하는 계층


다음은 Linux VFS에서의 4가지 기본 객체 유형입니다.

  • Inode object : 각 파일
  • File object : 오픈 파일
  • Superblock object : 전체 파일 시스템
  • Dentry object : 각 디렉토리 엔트리

위의 네가지 각각의 객체 유형에 대해 VFS는 구현 가능한 연산의 집합을 정의하고, 객체 유형들에 해당하는 모든 오브젝트는 대응되는 함수 테이블을 가집니다. 함수 테이블 리스트는 실제 구현된 연산에 대한 처리 함수의 주소를 관리합니다. 


<원격 파일 시스템>

파일 공유 방법에는 다음과 같은 것들이 있습니다.

  • ftp와 같은 프로그램을 통해 기계 간 파일을 직접 전송
  • 로컬 기계에서 원격 디렉토리에 접근할 수 있는 분산 파일 시스템(DFS)
  • WWW(World Wide Web) : 원격 파일에 접근하기 위해 브라우저가 필요하고, 파일 전송을 위해서는 별도의 연산이 필요

1. 클라이언트 서버 모델(The Client-Server Model)

: 파일을 가지고 있는 컴퓨터를 서버, 파일에 접근하길 원하는 컴퓨터를 클라이언트라 합니다. 서버는 볼륨이나 디렉토리 수준에서 사용 가능한 파일을 명시하고, 클라이언트는 네트워크 이름이나 IP 주소같은 식별자로 확인할 수 있지만 해킹(spoofing, imitation)될 가능성이 있습니다. 따라서 암호화된 키를 통해 모안 인증을 하는 방법이 필요합니다. 이 또한 키 값을 가로챌 수 있는 등의 많은 문제가 있을 수 있습니다.

 

원격 파일 시스템이 마운트되면 파일 연상 요청은 사용자를 대신하여 DFS 프로토콜을 통해 네트워크를 거쳐 서버로 보내집니다. 서버는 사용자가 요청 파일의 접근 권한을 가지고 있는지 결정하기 위해 표준 접근 검사를 적용합니다. 

 

2. 분산 정보 시스템(Distributed Information Systems)

: 클라이언트-서버 서비스를 쉽게 관리하기 위해 생겨난 개념입니다. 원격 컴퓨팅을 위해 필요한 정보에 단일화된 접근을 제공합니다. 

  • 도메인 네임 시스템(DNS)은 전체 인터넷의 호스트 이름을 네트워크 주소로 변환하는 서비스를 제공합니다.
  • Microsoft의 common Internet file system(CIES) : 서버가 요청도니 파일 시스템에 접근을 허용할지를 결정하기 위해 네트워크 로그인을 사용하며, 네트워크 로그인은 사용자 인증정보와 함께 네트워크 정보를 사용하여 생성합니다. 이와 같은 방법을 위해서는 클라이언트, 서버 사이에 사용자 이름이 일치해야 합니다. 
  • 경량 디렉토리 접근 프로토콜(LDAP. Light-weight directory-access protocol) : 하나의 분산 LDAP 디렉토리를 이용하면 한 조직 내의 모든 사용자와 모든 컴퓨터에 대한 자원 정보를 저장할 수 있습니다.

3. 고장 모드(Failure Modes)

: 원격 파일 시스템은 많은 오류 가능성을 가지고 있는데, 이를 복구하기 위해 클라이언트와 서버가 상태 정보를 유지할 수 있습니다. 서버와 클라이언트가 현재의 활동, 열린 파일을 알고 있다면 무리없이 복구가 가능합니다.

무상태(stateless) : 파일 시스템이 원격으로 마운트되고 파일이 이전에 열리지 않으면 읽기나 쓰기가 발생하지 않은 것으로 간주. 이는 NFS를 견고하고 구현하기 쉽게 만들지만 안전하지 않아, 이후 상태(stateful)를 가지도록 만들어지게 됩니다.


<일관성(Consistency Semantics)>

: 파일 공유를 지원하는 파일 시스템을 평가하는 데 있어 중요한 요소입니다. 한 사용자에 의한 데이터 변경이 언제 다른 사용자에 의해 관찰될지를 지정합니다. 

* 열기, 닫기 연산 사이의 일련의 접근은 하나의 파일 세션.

 

1) UNIX의 일관성

  • 열린 파일에 대한 한 사용자의 쓰기는 동일 파일을 연 다른 사용자들에게 즉시 보임
  • 사용자들은 파일에 대한 현재 위치 포인트를 공유하는 공유 모드가 있어, 한 사용자에 의한 포인터의 전진은 공유하고 있는 모든 사용자들에 영향을 미침

2) OpenAFS의 일관성

  • 열린 파일에 대한 한 사용자의 쓰기는 동시에 동일 파일을 연 다른 사용자들에게 바로 보이지 않음
  • 일단 파일이 닫히면, 파일들에 대한 변경들은 그 후 시작되는 세션에서만 보이며, 이미 열린 파일의 인스턴스들은 이러한 변경을 반영하지 않음

3) 불변 공유 파일의 일관성

  • 하나의 파일이 파일 생성자에 의해 공유된다고 선언하면 더능 변경되지 않음
  • 불변 파일은 두 속성을 가지고 있는데, 파일 명이 재사용될 수 없고, 파일 내용도 변경할 수 없다는 것 -> 불변 파일의 이름은 파일이 가변 정보가 아닌 고정 내용을 가짐을 나타냄

<NFS>

: 네트워크 파일 시스템. 널리 쓰이는 잘 구현된 클라이언트 서버 네트워크 파일 시스템의 좋은 예시입니다. 

 

NFS는 서로 연결된 워크스테이션의 집합을 독립적인 파일 시스템을 가진 독립적인 기계들의 집합으로 간주합니다. NFS의 목적은 이들 파일 시스템들 사이에서 일정 수준의 공유를 투명하게 허용하는 것입니다. 공유는 클라이언트-서버 관계를 기반으로 하며, 한 시스템은 동시에 클라이언트와 서버가 될 수 있습니다. 공유는 임의의 한 쌍의 기계 사이에서 허용됩니다.

 

NFS 의 설계 목표 중 하나는 서로 다른 기계, 운영체제, 네트워크 구조로 구성된 환경에서 작동하는 것이며, 파일 공유를 비롯한 다른 부가기능을 제공합니다. 하지만 서비스 자체의 보안 문제와 공유 파일의 보안 문제가 발생할 소지가 있기 때문에 제한적인 용도로 사용됩니다. 서버와 클라이언트가 신뢰를 가지고 구축해야 합니다.

 

  • 마운트 프로토콜 : 서비스와 클라이언트 사이의 초기 논리적 연결을 생성하기 위해 사용됩니다. 마운트 명령 -> 적절한 RPC로 매핑 -> 지정된 서버 기계상에서 수행되는 마운트 서버로 전달
    • 서버는 export list를 유지하며, 이 리스트에는 마운트 가능한 클라이언트 기계 이름과 파일 시스템이 있습니다.
    • 서버는 또한 클라이언트 시스템의 리스트와 각 시스템에 현재 마운트된 디렉토리를 유지하는데, 서버에 고장이 발생했다는 것은 모든 클라이언트에게 알려주는 등의 관리 목적을 위해 이 리스트를 사용합니다.
  • NFS 프로토콜 : 원격 파일 연산을 위한 원격 프로시저 호출의 집합을 제공합니다.
    •  이 프로시저는 다음과 같은 연산을 지원합니다.
      1. 디렉토리 내의 파일 검색
      2. 디렉토리 항목 집함의 읽기
      3. 링크와 디렉토리들의 조작
      4. 파일 속성의 접근
      5. 파일 읽기와 쓰기
    • 프로시저는 원격으로 마운트된 디렉토리에 대한 파일 핸들이 구축되어야 호출할 수 있습니다.
    • NFS 서비스의 주요 특징은 무상태성입니다. 서버는 하나의 접근과 다른 접근 사이에 클라이언트에 대한 정보를 유지하지 않습니다. 
    • 하나의 NFS 쓰기 프로시저 호출은 원자성(atomic)이 보장되며, 같은 파일에 대한 다른 쓰기 호출과 혼합되지 않습니다.

NFS는 가상 파일 시스템을 통해 운영체제로 통합됩니다. 위 이미지(15.8)는 이러한 NFS 구조를 다이어그램으로 그린 것입니다. 

클라이언트는 정규 시스템 콜을 통해 연산을 시작 -> 운영체제 층은 이 호출을 적절한 vnode에 대한 VFS 연산으로 매핑 -> VFS 계층은 이 파일을 원격 파일로 인식하고 적절한 NFS 프로시저를 실행 -> 하나의 RPC 호출이 원격 서버 내의 NFS 서비스 계층에 대해 행해짐 -> 이 호출은 원격 시스템 상의 VFS 계층으로 다시 들어감 -> 원격 시스템은 적절한 파일 시스템 연산을 실행 -> 결과를 반환

 

  • 경로 이름 변환 : /user/local/dirl/file.txt와 같은 파일의 경로 이름을 파싱하는 것으로, user, local, dirl3개의 디렉토리 엔트리로 나뉩니다. 경로 이름 변환은 이렇게 경로를 구성요소 이름으로 분리하고, 구성요소 이름과 디렉토리 vnode의 모든 쌍에 대한 별도의 NFS lookup 호출을 실행하는데, 마운트 포인트를 넘어가면 모든 구성요소 룩업은 서버에 대해 별도의 RPC를 유발합니다.
  • 원격 연산 : 파일의 open(), close()를 제외한 파일 연산은 대응되는 RPC 프로토콜이 거의 있기 때문에 RPC로 직접 변환될 수 있습니다.  

 

반응형