파일 시스템의 파일 할당 방법, 파일시스템의 기초 등에 대해 학습한다.
스토리지 에다가 데이터를 저장하는 방법은 말 안함.
접근하는 방법은 순차 접근, 직접 접근
Unix와 FAT 파일시스템의 구조와 파일을 관리하는 방법에 대해 알아본다.
Unix
리눅스 파일 시스템이나 안드로이드 스마트폰이나 제일 많이 사용하는 파일 시스템은 est4나 근간이 되는 파일시스템이 ㅣunix 파일 시스템이다.
2) FAT 파일시스템
: 이게 발전을 해서 근간이 된다.
디스크를 파티션을 나누게 되면 논리적인 디스크가 만들어지고 운영체제가 관리하게 된다. 여기다가 파일 시스템을 설치하거나 스와핑 용도로 사용하게 된다. 파일 시스템으로 사용할 때는 맨 앞 블록을 부트 블록으로 사용한다.
블록 2개로 구성되는 파일은, 첫번째 블록이랑 두번째 블록이랑 연결되어서 들어간다.
디렉토리라는 파일은 그 밑에 있는 파일들의 메타 데이터를 내용으로 한다.
장점: fast I/O 가 가능하다
특히 하드디스크 같은 매체는 대부분의 접근시간이 HEAD가 이동하는 시간이다. 실제로 데이터를 읽고 쓰는건 별로 상관이 없다. 어떤 파일을 통째로 읽고 싶다면 한번 이동읋 해서 많은 양의 데이터를 한꺼번에 가져올 수 있다. 길이가 6인 파일이 있으면 19번 까지 seek를 하면 한번에 많은 양의 데이터를 한꺼번에 가져와서 읽고 쓸 수 있다 =>, 빠른 i/o
연속 할당은 파일 시스템 용도 말고, 프로세스의 swap area로도 쓴다. swap area는 파일을 저장하는게 아니라 프로세스의 주소공간의 일부로 물리적 메모리에서 쫓아내고 나중에 다시 읽고, 이런다.
지금까지 3가지 방법은 이론적인거고,
실제 파일시스템에서 어떤 할당 방법을 어떻게 쓰고, 어떻게 변형해서 쓰는지 말해보자 ~
이제 비어있는 블록을 관리해보자 !
(디렉토리 구현)
디렉토리: 디렉토리 밑 파일의 메타데이터를 관리하는 특별한 파일
디렉토리 파일을 어떻게 저장할 것이냐?
1) linear list
2)
파일 입출력 하는 방법 중
1) buffer cache : read/ wirte 를 이 시스템 콜 을 이용해서 파일을 접근하는 법
2) memory-mapped i/o : 를 이용해서 파일에 접근하는 법 : 파일에 접근할 때 원래는 파일을 오픈하고, read wirte 시스템 콜을 이용하는데, 이거는 파일의 일정 부분을 프로세스의 메모리 영역에 맵핑 시켜놓고 쓰는 거다. 맵핑 해놓으면 그 다음부터는 메모리에다가 읽고 쓰는 것. 메모리에다가 변수를 잡아가지고 데이터를 읽고 쓰는 것처럼 , 파일에다가 읽고 쓰는 효과가 나게 한다.
좀 더 정확하게 설명을 해보겠다.
코드 부분 )
당장 사용되지 않는 것이 SWAP AREA에 내려와잇지 않고, 코드 자체가 파일 시스템의 파일 형태로 저장되어있기 때문에 프로그램을 실행시켜서 프로그램이 메모리 주소공간을 만들 때 데이터 스택 같은 부분은 만들어져서 메모리에 올라가고, 당장 사용안되면 SWAP AREA에 내려가는데 코드 부분은 실행파일에 이미 존재하기 때문에, 지금 사용안되면 지우면 된다. 나중에 필요해지면 파일 시스템에서 물리적 메모리로 올리면 된다. 실행 파일에 해당하는 부분이 메모리 맵드 I/O를 쓰는 대표적 방법이다. 우리가 코딩하면서 메모리 맵드를 쓰는게 아니고, 프로그램을 실행시킬 때 로더라는 소프트 웨어가 사용하는 메모리 맵드다. 이 프로그램의 실행 파일을 프로그램의 주소공간 일부에다가 맵핑을 하는 것이다. 이 부분은 메모리의 주소공간이기도 하지만 파일의 일부 영역에 맵핑되어 있기 때문에 코드 부분이 없어서 PAGE DEFAULT가 날 때, 코드가 맵핑되어있는 실행 파일에서 해당해서 메모리에 올려서 사용한다.
사실은 데이터 파일도) 프로그램이 실행되는 도중에 파일을 읽어서 사용하겠따는 요청을 하면, 데이터 파일도 프로그램을 사용하는 방법이 두개가 있다. 1) Read-write 시스템콜 2) 메모리 맵드 i/o 이 파일을 프로그램 b가 사용하겠다~ 내가 사용하겠다는 시스템콜을 한다. 내 주소공간의 일부를 이 파일하고 맵핑을 시켜놓는다. 이 프로그램의 주소 공간 일부가 물리적 메모리 어딘가와 맵핑 되어있다. 이건 사실 파일과 맵핑되어 있다. 이 상황에서 이 프로그램이 요 위치에 있는 데이터를 읽겠다. 자신의 메모리 영역을 읽는 것. 메모리 맵드 i/o인데 아직 메모리에 안올라와있으면 page fault를 내고, 파일의 내용을 메모리에다가 올려서 페이지 폴트 핸들링이 끝난다.
이 똑같은 파일에 대해서 read/write 시스템 콜을 사용하면 프로그램이 운영체제 시스템한테 시스템콜을 한다. 파일을 달라고, 운영체제는 그 파일이 버퍼 캐시에 올라와있찌 않기 때문에 그 내용을 읽어들여서 사용자의 주소공간에 카피를 해서 이제 프로그램을 사용할 수 있게 한다.
장점