본문 바로가기
👨‍💻Computer Science/운영체제[OS]

[운영체제] 11장 Implementing File Systems

by 코푸는 개발자 2021. 6. 29.
728x90

-> 내부에서는 어떤 과정들이 일어나는지 배움(개발자 측면)

 

2가지 관점으로 생각함

  • On-disk structure – 어떻게 메모리에 파일이 저장되는지 나타내는 구조(여기가 주임)
  • In-memory structure – 컴퓨터가 켜졌을 때 실행되는 파일을 나타내는 구조

 

On-disk structure

  • Master Boot Record - 하드디스크 하나가 있으면 부팅을 하는 메인디스크의 섹터 0에 master boot record라는 것이 들어가 있고 여기에 boot load(운영체제 소프트웨어를 메모리에 올려두는 것)라는 것이 존재함 -> 어떠한 boot record를 실행할 것인지 확인함, 어떤 파티션을 active시킬 것인지 결정을 함 -> 메모리에 올려놓고 사용함

-loader -> 프로그램을 메모리에 올려놓는 것

파티션 별로 다른 OS를 설치하여 사용할 수 있음

-Boot Record -> 프로그램이 메모리에 저장되는 곳

  • boot block(각 파티션에 가장위에 위치함) – 운영체제가 깔려있는 곳
  • super block(파티션의 파일시스템에 대한 전반적인 정보를 담고 있음, 윈도우에서는 부트 섹션이라고 함, 윈도우에선 마스터 파일 프레임이라고 함) – 파일시스템에 메타데이터를 포함한 여러 가지 설정데이터가 들어가 있음(type, # blocks(1개 block이 4KB임, read, write할 때 사용하는 단위) - block이 하드디스크에 몇 개가 있는지 표현함 – 총 데이터양을 4KB로 나눠줌, etc.)
  • bitmaps – 어떠한 디스크 block이 사용되고 있는 지나타냄(free space를 관리함)
  • i-nodes – 파일의 구조, 메타데이터를 저장하고 있는 block임(파일이 생성될 때마다 생성됨)
  • root dir – 파일시스템을 만들면 가장상위 단에 만들어지는 디렉토리 무조건 하나씩 생성됨.
  • files & directories(data block) - 실제로 데이터가 파일의 형태로 저장되는 공간임

 

>>여기에 나와 있는 단어들은 유닉스 기준임

>>하드디스크 구조는 이런 식으로 block이 나뉘어서 구성이 되어있다.

 

파일시스템은 On-disk structure, In-memory structure(read, write를 할 때 어떻게 지원을 해줄지에 대한 구조임)로 구성되어 있음.

프로세스에서는 명령어만 주어짐 -> 처리는 실제로 운영체제가 함 -> 운영체제에는 system-wide open-file table를 관리를 하고 프로세스에서는 프로세스 별로 자기가 오픈하는 파일의 파일 descriptor라는 것을 관리를 해서 테이블 엔트리에서 요청한 파일을 system-wide open-file table에서 하나만 가리키도록 되어있음. -> 누가 어떤 것을 요청했는지만 알려줌

-> 초록색들은 캐시메모리임 -> 원래는 디스크에 있는 것임(디스크에서 데이터를 불러오는 일은 오래 걸리는 작업이기 때문에 디스크에서 자주 쓰이는 것을 미리 메모리에 올려서 사용하는 것 -> 성능이 훨씬 빨라짐) -> boot block, super block, bitmaps을 저장해 두었다가 캐시로 사용함

in-memory partition table -> boot block, super block, bitmaps에서 자주 사용하는 것을 모아둔 캐시메모리

directory cache -> 디렉토리에 대한 데이터 저장

buffer cache -> 일반파일에 대한 데이터 내용저장

>>위에 두 가지는 데이터에 대한 캐시인데 데이터에 대한 내용이 파일에 있는 내용이냐 아니면 디렉토리에 있는 내용인지 구분이 되어 캐시메모리에 저장이 됨.

>>캐시메모리를 사용한다면 데이터를 불러오는데 시간이 많이 단축됨.(자주 사용하는 데이터를 주로 저장함)

 

 

Virtual File Systems

요즘 운영체제는 파일시스템의 종류가 많음 -> 이러한 파일시스템은 서로 호환이 되지 않음.

Virtual File Systems - > 호환되지 않는 파일시스템을 위해 등장

 

Virtual File Systems(VFS) - 공통적인 부분을 묶어 놓은 것

그 밑에 수많은 파일 시스템을 위치시킴.

-> 파일시스템을 대부분은 사용가능하게 해줌

각기 다른 파일시스템들에 호환을 위해 생겨남 -> 똑같은 명령어로 실행을 할 수 있다.

 

File System Internals

Directory Implementation -> 데이터 블록들이 어떻게 변화되고 관리가 되는지

 

 

Directory Implementation(3가지)

  • In the directory entry – 파일 이름과, 파일 정보를 한꺼번에 저장하고 있는 것
  • In the separate data structure – 전부 저장하긴 복잡하니 파일이름만 저장해두고 포인터를 두어 파일정보가 들어있는 디스크블록과 연결해 두는 것
  • hybrid approach – 파일에 대한 중요한 정보만 가지고 있는 방법(실제로 윈도우에서 사용)

 

File Control Block 구성

->파일에 대한 정보를 가지고 있는 Block(윈도우 기준, 유닉스 I-nodes)

사실 5가지 말고도 많은 정보가 들어가 있음

 

 

Allocation Methods(어떻게 관리를 하고 어떻게 배치를 할 것인가? ) -> 메모리 관리와 유사 -> 얼마나 어떻게 할당할지

  • Contiguous allocation – 연속적으로 block들을 저장함
  • Linked allocation – 데이터를 랜덤하게 사용, 포인터 관리 테이블을 두는 것
  • Indexed allocation

 

Contiguous Allocation예제

파일하나당 연속적인 블록으로 저장을 해둠(장단점이 공존함)

장점

>저장해야하는 정보 자체가 줄어 듦(처음 시작과 길이만 알면 불러올 수 있음)

>(기계적 장치인 하드디스크)연속적으로 배치되어 있기 때문에 read, write에 장점이 있음

ex. 디스크 조각모음을 통해 컴퓨터가 빨리지는 이유가 여기에 있음(연속적으로 합쳐주는 작업, SSD에는 조각모음이 필요 없음)

>기록하기 쉽다, 연속적 배치로 성능적으로 우수함(관리적인 측면에서 좋음)

단점

>외부단편화 문제가 발생할 수 있음(전제적으로 용량은 가능하지만 저장을 못함), 이용률에 단점이 있음 -> 앞에 저장된 파일이 시간에 따라 계속해서 커지게 되면 이후에 block들을 이동시켜 줘야하는 단점이 생김

 

 

Linked allocation > 데이터를 블록마다 랜덤하게 씀, 포인터 관리 테이블을 두는 것(포인터대로 따라가면서 읽음)

장점

>데이터를 자유롭게 저장가능

단점

>파일 중간에 데이터를 읽고 싶을 때 파일전체를 끝까지 따라 가야하기 때문에 시간이 걸림

>데이터를 sequential로 저장할 때보다 성능이 떨어짐

>신뢰도의 문제가 있음(파일시스템은 데이터가 지워지게 되면 아주 큰 문제가 발생함.) -> 하나의 섹터가 불량이 됨(bad sector) 그러면 뒤에 있는 데이터도 읽지 못하게 만들어버림.(섹터단위가 512byte)

 

 

Indexed allocation 파일이 어디에 있는지 인덱스(인덱스 블록을 만듦 -> 파일 컨트롤 블록에서 모두 저장을 하고 있음.)를 따로 관리해주는 것

>유닉스에서 이것을 I-nodes라고 함

>외부 단편화 문제는 해결되지만 인덱스 블록에 오버헤드가 많긴 함, 그러나 장점이 더 크기 때문에 이 방법을 사용함

 

 

유닉스 기준

direct block(기본적), single indirect(1024블록추가 가능), double indirect 순서로 초과하게 되면 저장이 된다.

>>앞에 블록을 초과하게 되면 뒤에 블록을 추가해서 저장이 됨.

 

 

 

/(슬래시)가 루트폴더임

bin - 폴더이름

a out이라는 파일을 불러오고 싶은 것임

가장 먼저 탐색을 하는 것이 /(슬래시)부분임. -> 디렉토리 테이블 안에 있는 정보를 탐색함.

-> 이 안에 bin이라는 폴더를 탐색해 들어감 -> 그 안에 디렉토리 11000을 파일 리스트가 나옴(옆에 블록의 번호가 나와 있음)

650번은 현재 block이 부족해서 추가적으로 single indirect block에서 불러오는 것임

이 위에 것들은 direct block에서 정보를 불러옴.

 

Free-Space Management bitmap block의 관리를 받음

->bit[i]1이 들어가 있으면 사용 중이지 않은 부분임

0이면 사용 중인 부분임을 나타냄

(주로사용 됨)

 

Linked Free Space List on Disk - Linked List를 통해서 사용 중인 것과 아닌 것을 구분해 주는 방식임 (최근에는 많이 사용하지 않음, 단점이 큼)

단점 중간에 포인터에 손상이 생기면 뒤에 있는 데이터들이 모두 날아감.

 

 

Efficiency and Performance(효율적 성능적 측면)

앞에서 설명함

 

 

Buffer(어떤 것을 임시로 저장해두는 공간) Cache

-> 동영상을 볼 때 버퍼링 걸리는 것 -> 동영상을 끊임없이 보려면 버퍼라는 공간에 데이터를 미리 넣어두어 원만한 재생을 하게 해주는 것

-> 데이터 RAM(주기억장치) 안에 위치해 있음 -> 하드디스크에 있는 것x

 

Buffer Cache

IO디바이스 컨트롤러(이 안에도 조그마한 버퍼가 존재함)를 거쳐 I/O 디바이스로 넘어감

 

 

Read-Ahead(미리)

-> 100번째 블록을 불러 올 때 인접해있는 99번과 101번을 같이 불러오는 것 -> 효율성이 올라감

 

 

블록사이즈에 따라서 trade-off를 나타내는 그래프

x데이터크기(블록의 크기)

y사용률(활용도 측면)

Disk block이 커지면 커질수록 데이터 rate이 급격하게 올라감 -> 하드디스크에서는 데이터를 읽어야 할 때 디스크헤더가 이동을 하면서 읽음 -> 읽을 때 한꺼번에 읽어야지 더 많은 데이터를 읽을 수 있음 -> 디스크 블록 크기가 커지면 더 많은 정보를 가지고 올 수 있기 때문에 data rate(속도) 측면에서 올라가게 됨.

Disk space 활용성(공간의 활용성 ) 측면에서는 데이터블록 사이즈가 커지게 되면 내부단편화가 커지게 됨. -> 공간 활용도는 떨어짐

>>적정한 수준에서 타협을 하는 것이 좋음.

 

Recovery 가장 중요한 이슈

 

Reliability

>Windows: scandisk

>UNIX: fsck

>>파일시스템의 이상을 지속적으로 확인함 -> 이상이 있으면 조치를 취함

 

 

Log Structured File Systems

Journaling file systems 파일 시스템을 신뢰성 있게 만들기 위함 -> 명령어가 들어오면 그 명령어에 대한 로그를 하드디스크에 남김. -> 정상적으로 동작하면 로그를 지움

하드디스크에서 문제가 발생하면 로그를 남겨서 이를 추적하는 시스템

 

 

Network File System (NFS) - PC 하드디스크에 있는 저장소가 다른 PC에 있는 하드디스크가 PC에 있는 것처럼 똑같이 동작을 하는 시스템

 

Network File System (NFS) 구조

-> 클라이언트와 서버가 구분되어 접근이 이루어짐.

 

728x90

댓글