안녕하세요? 허니입니다. 파일 시스템에 대해 어느정도 익숙하신 분들이라면 파일시스템의 내부 구조가 궁금하실 거라 생각합니다. 이번에는 파일시스템을 더 자세하게 즉, 내부 구조에 대해 포스팅을 하겠습니다. 학생이나 연구원분들에게 많은 도움이 될 것이라고 생각하며 언제든지 질문은 환영입니다.
오늘의 주제
파일시스템의 내부구조
boot block |
file system descriptor |
file descriptor |
data block |
디스크의 구조
파일의 read/write 경로
read/write 하기 위한 정보
파일 시스템의 내부구조
파일 시스템은 다음과 같은 여러개의 물리적인 분할 영역(partition)으로 구성되어있다.각각의 partition을 보다 상세히 살펴보자.
부트블록(boot block)
boot라는 것은 컴퓨터를 켤 때 컴퓨터가 동작할 수 있도록 하는 준비 작업을 말한다. 바로 컴퓨터가 부팅 될 때 시스템에 OS를 설치하기 위해서 필요한 정보들이 저장되어 있는 디스크 영역이 부트블록이다. 다시 말해 OS가 디스크를 포함한 시스템을 제어하기 위해 필요로 하게 되는 정보들이 저장되어 있는 블록인 것이다.
파일시스템 설명자(file system descriptor)
파일 시스템 설명자에는 파일의 크기, 파일의 개수, 디스크의 특성, 디스크블록이 먼지 등에 의해 손상했는 지의 여부 등이 판단되는 bad 블록 등의 내용이 담겨져 있다.
파일 설명자(file descriptors)
파일은 컴퓨터를 껐다 켜도 남아있게 마련이다. 그것은 파일이 이미 디스크에 블록단위로 저장되어 있기 때문이다. 그렇기 때문에 파일이 어떤 블록에 저장되어 있는지를 알려주는 정보가 있어야 하는데 그러한 정보는 바로 file descriptor에 저장되어 있는 것이다. 앞서 설명한 Meta data도 file descriptor에 기록되어 있다.
데이터블록(data block)
데이터 블럭은 찾고자하는 실제 데이터들이 저장되어 있는 블록인 것이다. 데이타들을 찾기 위한 가장 밀접한 정보들은 파일설명자에 저장되어 있기 때문에 데이터 블록과 거리상으로 밀접해야 한다. 그러나 디스크의 용량이 자꾸 커져감에 따라 하나하나의 파일설명자블록과 데이터 블록이 멀어져가게 되었다. 그렇기에 최근에는 파일설명자의 정보를 디스크를 구성하고 있는 실린더 곳곳에 분산시켜 놓게 되었다.
디스크의 구조
디스크는 트랙이라고 불리는 동심원에 자료를 저장하는데 이 동심원은 자기적으로 만들어진 것이기 때문에 눈으로 볼 수는 없다. 또한 하나의 트랙은 여러 개의 섹터로 나뉜다. 이러한 트랙들의 수직적 집합을 바로 실린더라고 한다. 데이터들은 트랙에 비트 형태로 저장되는데 디스크의 기억용량은 한 면 당 트랙의 수, 비트의 밀도, 기록 가능한 면의 수 등에 의해 결정된다. 한 면 당 트랙의 수는 디스크의 물리적 크기, 자료를 기록하는 기술 등에 따라 다르다.
그림 58 디스크의 구조
자료를 읽고 쓰기 위해서는 읽기/쓰기 헤드가 원하는 자료가 위치하고 있는 트랙 위에 위치해야 한다. 읽기/쓰기 arm이 원하는 자료의 위치를 찾아내면 디스크를 읽기/쓰기 헤드밑에서 회전하게 함으로써 필요한 자료에 접근할 수 있다. 보통 여러 개의 flat이 있을 경우에는 여러 개의 접근 arm을 사용하게 되는 것이다.
그림 59 하드 디스크의 Arm
파일을 read/write 하는데 어떤 경로로 이뤄질까?
파일을 read/write 하기 위해서는 open이라는 과정을 거치게 된다. 컴퓨터 시스템에게 파일을 사용하겠다는 통보가 이뤄지는 단계로 파일이름을 확인하고 그 파일에 접근가능한지를 판단하고 파일설명자를 할당하게 된다. read/write를 하게 될 파일이 실제 존재한다는 것은 디렉토리를 살펴봄으로 확인이 가능하다. 파일의 존재와 접근여부를 확인한 후 리턴하여 실제 파일을 open 하게 되는 것이다.
read/write 어떤 정보들을 통해 실행될까.
read/write의 실행 정보를 살펴보기에 앞서 read/write 명령어가 어떤 수행을 하는지 잠깐 살펴보자. read란 명령이 떨어지면 버퍼캐쉬에 있는 내용을 사용자 버퍼로 읽어오는 동작이 이뤄지고 write라는 명령은 버퍼에 내용을 버퍼캐쉬에 쓰는 동작을 한다. 실제로 어떤 한 파일에 대한 read를 실행하게 되면 다음과 같은 정보들이 참조되어 처리되게 된다.
- read (파일설명자, 버퍼, 길이, 내부주소)
각각의 의미를 알아보면 다음과 같다.
정보 |
의미 |
파일 디스크립터 |
파일이 저장되어 있는 디스크블록에 관한 정보 제공 |
버퍼 |
디스크로부터 읽어 들어올 주소 |
길이 |
읽으려는 바이트 수 |
내부주소 |
파일의 현재위치, 파일 포인터가 내부주소를 가르킴 |
예를 들어 read( fd, buf1, 100, 35)이면 100바이트를 buf1에 35로부터 읽어오기를 의미한다. 여기에서 read의 역할은 파일을 읽고 파일포인터를 옮기는 것이다. 이와 같이 write( fd, buf4, 300, 20) 이라고 명령되면 buf4의 20으로부터 300바이트 쓰기가 실행되는 것이다.
보다 상세히....프로세스와 연결시켜....
1) read가 명령되면 먼저 파일 설명자를 체크하게 된다.
파일 설명자를 체크하고 파일의 현재위치를 알아내게 되면 먼저 그 파일이 버퍼 캐쉬에 저장되어 있는지를 확인한다.
2) 버퍼캐쉬 확인
만약 버퍼캐쉬에 찾고자하는 파일이 있으면 그 내용을 그대로 read하면 된다. 그러나 버퍼캐쉬에 찾고자하는 파일이 없을 경우 다음과 같은 일이 진행된다.
3)파일 설명자를 통해 알아낸 파일의 현재 위치로부터 주어진 길이까지 해당되는 물리적 디스크블록을 찾는다.
그러나 여기서 한가지 문제에 부딪히게 되는 것이다. 바로 파일은 연속적으로 존재하지만 이 파일이 디스크상으로 저장될 때는 블록단위로 쪼개져 이곳 저곳에 흩어져 저장되어 있는 것이다. 그렇기에 논리적인 파일 offset을 물리적인 디스크 블록으로 매핑해야 하는 과정이 필요하다.
4) 디스크에 블록으로 저장된 파일의 위치는 찾는 작업이 끝나면 디스크 I/O을 통해 장치구동기(Device driver)를 호출하게 된다.
5) 장치구동기(Device driver)는 커널로부터 read에 관한 요구사항을 받아 디스크 컨트롤러에게 다음과 같은 명령을 한다. (read/write,실린더 번호, 블록번호) 몇 번 실린더에 몇 번 블록을 리드 혹은 라이트해라.
6) 디스크컨트롤러에게 명령이 전해졌다고 해서 바로 작업이 수행되는 것은 아니다.
서론에서 공부한 프로세스라이프사이클에 따라 sleep 상태로 들어가게 되는 것이다. sleep 상태로 들어가는 이유는 호출한 장치구동기(Device driver)가 서비스를 제공하기 위한 해당 조건이 만족될 때를 기다리기 위해서이다.
이러한 명령을 받은 디스크 컨트롤러는 다음과 같은 과정을 거친다.
1.해당파일을 찾고 2.DMA (direct memory access) 메모리에 접근해 입력/출력을 버퍼캐쉬를 통해 처리하고 3.인터럽터를 건다.
인터럽트를 수행하는 프로세스는 해당 서비스 루틴을 wake up 시키고 버퍼에 저장되어 있는 내용을 카피해 리턴하게 되는 것이다. read/write 한가지를 수행하기 위해서도 컴퓨터 시스템 내부적으로는 이와 같이 복잡한 과정들을 거치게 되는 것이다.
그림 60 Read/Write의 수행과정
잠깐, 상식! 장치구동기(Device driver) 란... |
요점정리
파일 시스템의 내부구조
1) 부트블록(boot block)
2) 파일시스템 설명자(file system descriptor)
3) 파일 설명자(file descriptors)
4) 데이터블록(data block)
디스크의 구조
디스크는 트랙이라고 불리는 동심원에 자료를 저장하고 하나의 트랙은 여러 개의 섹터로 나뉜다. 이러한 트랙들의 집합을 바로 실린더라고 한다.
이러한 실린더의 집합을 디스크라고 한다.
read/write의 실행정보: read (파일설명자, 버퍼, 길이, 내부주소)
퀴즈
퀴즈1) 파일 시스템의 내부구조중 파일 설명자(file descriptors)의 역할은 무엇인가?
퀴즈2) 파일을 read/write 하기 위해서는 open이라는 과정을 거치게 된다. open을 통해 어떤 일들이 수행되나?
퀴즈3) read( fd, buf1, 100, 35)이라는 명령문이 의미하는 것은 무엇인가?
퀴즈4) read가 명령되면 먼저 파일 설명자를 체크하고 명령을 수행하기 앞서 버퍼캐쉬 확인하게 된다. 그 이유는 무엇인가?
퀴즈5) 디스크컨트롤러에게 명령이 전해졌다고 해서 바로 작업이 수행되는 것은 아니라 우선 sleep 상태로 들어가게 된다. 그 이유는 무엇인가?
정답1) 파일설명자는 파일이 어떤 블록에 저장되어 있는가 하는 정보를 알려주는 역할을 한다.
정답2) open은 컴퓨터 시스템에게 파일을 사용하겠다는 통보가 이뤄지는 단계로 파일이름을 확인하고 그 파일에 접근가능한지를 판단하고 파일설명자를 할당하게 된다.
정답3) 100바이트를 buf1의 35로부터 읽어오기를 의미한다.
정답4) 만약 버퍼캐쉬에 찾고자하는 파일이 있으면 그 내용을 그대로 read하면 되기 때문에 명령문 수행에 앞서 버퍼캐쉬를 확인하는 것이다.
정답5) sieep 상태로 들어가는 이유는 호출한 장치구동기(Device driver)가 서비스를 제공하기 위한 해당 조건이 만족될 때를 기다리기 위해서이다.
목 차 |
운영체제 메모리 관련해서 알아야 할 개념은 어떤것이 있나요? (TLB, Locality, Working Set, Overlay) |
운영체제 디스크 공간 할당(Disk Space Allocation) 알고리즘과 효과적 알고리즘의 판단 기준은? |
'Past Material' 카테고리의 다른 글
운영체제 파일시스템에서 접근 시간, 디스크 스케줄링을 위한 알고리즘, I/O 시스템이란? (0) | 2019.05.13 |
---|---|
운영체제 디스크 공간 할당(Disk Space Allocation) 알고리즘과 효과적 알고리즘의 판단 기준은? (0) | 2019.05.13 |
운영체제 파일시스템(File System)에 대해서 (0) | 2019.05.13 |
운영체제 Page replacement (페이지 대체) 알고리즘이란? (0) | 2019.05.13 |
운영체제 메모리 관련해서 알아야 할 개념은? (TLB, Locality, Working Set, Overlay) (0) | 2019.05.13 |