본문 바로가기

학교공부/운영체제

Implementing File Systems

파일시스템은 크게 두개있다

 

파일은 전원꺼져도 남아있다 on disk structure

메모리가 어떻게 파일을 변경하고 저장할 것인가 in memory structure

 

 


On-disk structure

 

하드디스크 섹터 0에는 Master Boot Record가 저장되어있ek.

거기안에 boot loader가 있다. 부팅시에 커널을 메모리에 올려놓는 역할

 

딱 처음에 포맷하면 오른쪽과 같은 형태로 포맷된다

boot block : 부팅에 필요한것을 저장하는 block, os kernel같은거 저장

super block : file system 전체에 대한 정보, 파일 시스템 전체 크기 생성 시간 등등

disk block : os가 disk를 다루는 단위 보통 4kb다. 

bitmaps : disk block이 사용중인지 아닌지를 관리하는 파일 disk block 개수만큼이 크기다.

i-nodes : file에 대한 정보. owner 크기 속성 등등 얘도 4kb인듯

root dir : 포맷하고 나면 처음 생기는 폴더?

files: directories : root dir 아래 파일들이 쌓인다.

 

만약 메모장에 a 치고 저장해서 파일하나를 만들었다고 생각하자.

그럼 일단 파일 정보에 대한 i-node(file control block)를 하나 만든다. 

그 파일에 대한 file control block 이랑 disk block하나는 할당해야되니까 적어도 disk에서 8kb는 차지한다.

 

 

 

 

 

 

data는 크게 directory 와  regular file로 구분된다.

Directory Implement

크게 3가지 방법이 있다.

 

 

1. 파일에 대한 정보를 전부 다 넣어서 저장한다.

2. file에 대한 이름만 저장해놓고 이 file에 대한 정보를 저장한 pointer만 저장하는 방법

3. 반반 섞어서 중요한것만 저장하고 나머지는 pointer로 찾는다.

 

 

 

 


In-Memory structure

process가 os불러서 disk에 file을 쓰거나 읽는다. 

 

 


Virtual File Systems

 

 

file system 종류 겁나많다. 파일에 접근할 때 사용하는 file system에 알맞게 변화해준다. 통역자 역할

 

 

 

 

 

Allocation Methods


disk block을 할당하는 여러가지 방법

 

  • Contiguous allocation
  • Linked allocation
  • Indexed allocation

 

 

Contiguous allocation

 

연속적으로 배치한다. 

장점 : start length만 있으면 file 접근가능 간단하다, 연속적으로 한방에 읽어서 성능이 우수하다.

단점 : fragmentation, file 크기 변경에 불리하다 뒤에 자리없으면 아예 새로운공간에 할당하는 등 암튼 안좋음

따라서 CD 같은 경우 연속할당하기에 좋다.

 

 

 

Linked allocation

각 블록에 다음거 가르키는 포인터 저장한다.

장점 : disk utilization 좋아짐(외부단편화 해결). 파일 크기 변경에 용의하다, 시작위치만 알면 파일전체 읽을 수 있다

단점 : 파일에 임의 접근,direct access이 불가능 맨끝 파일 읽고 싶어도 처음부터 읽어야한다. 신뢰성이 좋지 않다 중간에 bad sector가 발생하면 그냥 파일 전체 못읽음.

 

 

 

Indexed allocation

 

 

linked allocation을 향상된 방법 index block을 따로 만들어서 모든 block address를 저장한다. 

장점 : random access 가능, 외부단편화 없음, 여러개 나눠서 저장하는 방식으로 신뢰도 향상가능

단점 : 여러개 table 다 날라가면 어쨋든 파일 날라감

 

 

이 파일의 index를 file control block에 같이 저장한다.

그래서 unix에서는 file control block을 i node라고 부른다.

 

근데 위에서 i node는 4KB라고 했는데 만약 파일이 400MB라면 대충 생각해도 index만 1024Byte의 크기다. index가 적으면 그냥 inode에 넣으면 되는데 크기가 커지면 못넣는다.

따라서 이중 삼중으로 indirect하게 저장한다.  

 

현재 unix에서는 combined scheme를 이용해서 index block을 관리한다.

i-node에 총 15pointers가 있다.

처음 12pointer는 direct block (48KB data는 directly access 가능)

1pointer는 single indirect 

1pointer는 double indirect 

1pointer는 triple indirect 

 

 

예제


만약 /bin/a.out을 실행시킨다고 생각해보자

먼저 root에 대한 i-node를 찾아간다.(0번째 disk block에 있다고 가정) 

찾은 i-node에서 index를 찾아 root directory로 접근한다.

directory는 파일이름 + 파일에 대한 i-node 주소 형태로 되어있다(. 인 경우 자기자신이니까 주소가 0이다).

i-node에서 찾은 bin의 i-node주소가 100이니까 또 거기가서 directory 주소 찾고 해당 directory에서 a.out찾는다.

a.out의 i-node에서 data 쭉 읽고 만약 indirect만나면 또 거기의 i-node에서 쭉 읽는다.

 

 

 

Diskblock size


HDD 기준으로 Disk Block size가 커질수록 한번에 많이 읽으니까 Data rate가 올라감.

하지만 internal fragmentation이 더 많이 생겨서 Disk space utilization는 줄어듬

 

   

 

File consistency


Cache에서만 변경하다가 crash 나는 경우 File inconsistency 상태가 되면 문제가 될수 있음.

이와 같은 문제를 해결하기위해 Journaling file system 방법을 쓴다.

 

hdd에 있는 journal에 write 명령에 대한 log를 남긴다. 정상적으로 실행됐으면 log에 명령어 지운다.

만약 껐다 켰는데 log가 비워있으면 consistent 뭔가 명령어가 남아있으면 inconsistent state다.

 

 

 

 

File Mounting


다른 file system을 현재의 file system에 연결하는 것.

CD 나 USb 등등 

linux는 루트 디렉토리로 시작함.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

운영체제 요약  (0) 2020.06.21
Secondary-Storage Architecture  (0) 2020.06.12
Virtual Memory Management-2  (0) 2020.06.01
Virtual Memory Management  (0) 2020.05.29
Memory Management Strategies - 3  (0) 2020.05.25