2012-11-19 5 views
3

현재 운영 체제 과정에 대한 나의 프로젝트는 기본 파일 시스템을 설계하고 구현하는 것입니다. 필자는 파일 시스템에 관한 책에서 챕터를 읽었지만 어디서부터 시작해야할 지 모르겠습니다. 필요한 구조 (파일 제어 블록, 시스템 전반의 열린 파일 테이블, 프로세스 별 열린 파일 테이블, r + w 버퍼, 디렉터리 구조) 및 필요한 작업 (열기, 읽기, 쓰기, 삭제, 생성, 닫기).파일 시스템 구현의 기본 내용

내부에 파일 시스템을 구현하기 위해 10MB의 '드라이브'가 제공되었습니다. 자원 또는 직접 답변에 대한 도움을 주시면 대단히 감사하겠습니다.

편집 : 여기에 할당 당신은 매우 광범위한 질문을했습니다 https://www.dropbox.com/s/971ec21u3yn62wz/Laboratory%20Project%204_5%20Creating%20a%20File%20System.pdf

+0

이것은 '진짜 질문'이 아닙니다. 그것은 단순히 '질문이 아닙니다'입니다. 나는 libfuse를 제안 할 것이지만, 그것이 당신이 무엇인지 확신 할 수 없다. – sehe

+1

미안하지만 내가 진짜 질문을 제기하지 않은 이유는 정확히 내가 무엇을 찾고 있는지 모르기 때문이다. 나는이 포럼에서 제기 된 것과 같은 비슷한 문제를 보았지만 응답은 대개 API를 제공하는 libfuse와 같은 링크입니다. 이 파일 시스템을 구현하기 위해 커다란 파일을 받았지만 의사 코드 및 프로그램 구조를 구할 때는 어디서부터 시작해야할지 모르겠습니다. – user1837165

+0

어떻게 파일 시스템을 구동할까요? 누가 액세스 및 저장 개체를 요청합니까? POSIX를 준수해야합니까? 커널 모드로되어 있습니까? – sehe

답변

6

에 대한 링크입니다. 그리고 실제 파일 시스템을 구현해야하는지는 확실하지 않지만 이제는 prof가 정의한 작업 집합을 구현해야하는 것처럼 보입니다.

당신은 쓰기 :

내가 필요한 구조 (파일 제어 블록, 시스템 전체의 열린 파일 테이블, 프로세스 당 열린 파일 테이블, R + w 버퍼, 디렉토리 구조)

의 일부를 알고

나는 당신이 잘못된 것에 집중하고있는 것처럼 보입니다. 이들은 실제 운영 체제가 파일 시스템에 효율적으로 액세스 할 수 있도록 지원하는 메모리 내장 구조입니다.

  • 파일 제어 블록 - 단일 사용자를 지원하기 위해이 필요하지 않습니다
  • 당 -이 버전은 매우 간단한
  • 시스템 전체의 열린 파일 테이블가 될 수있다 - 프로세스 열려있는 파일 테이블 - 당신은 하나만 필요하고 그것은 매우 간단 수 있습니다.
  • r + w 버퍼 - 이것은 성능 향상이며, 할당에 의해 엄격히 요구되지는 않으며 원하는 경우 나중에 추가 할 수 있습니다.
  • 디렉토리 구조 - 이제 당신은 뭔가 있습니다.

디스크 구조를 참조하여 할당의 언급 "디렉토리 구조"를 읽었습니다. 그리고 그게 아마도 당신이 집중해야 할 것입니다. 큰 저장 공간이 주어지며 작은 조각을 나눠 줄 필요가 있습니다. 따라서 저장소 할당자를 작성해야합니다. 어려운 부분은 실제로 디스크상의 구조를 설계하는 것입니다. 어떤 블록이 무료인지 추적해야합니다. 파일을 삭제할 수 있으므로 구멍이 생길 수 있습니다. 두 가지 간단한 접근법은 비트 맵 또는 연속적인 여유 공간 목록을 사용하는 것입니다. 어떤 방법을 선택하든 코드를 선택하면 코드의 일부가됩니다.

또한 이름을 추적하는 구조가 필요합니다. 사용자가 파일을 만들 때 이름을 지정합니다. 나중에 파일을 열려면 동일한 이름을 지정하십시오. 이를 지원하려면 디스크 구조가 필요합니다. 다른 메타 데이터도 있습니다. 마지막으로 수정 한 날짜 (구체적으로이 값이 필요함), 파일 크기, 데이터 위치입니다. 할당자를 사용하여 메타 데이터를 저장할 공간을 확보 할 수 있습니다.

파일 시스템을로드하는 데 필요한 구성 정보와 포인터를 저장하기 위해 저장소 시작 부분 (또는 그 근처)에 고정 블록을 갖는 것이 일반적입니다.

Unix 파일 시스템 개념에 대한 좋은 개요를 보려면 Marshall Kirk McKusick과 George V. Neville-Neil (8 장 로컬 파일 시스템)의 "FreeBSD 운영 체제 설계 및 구현"을 권장 할 수 있습니다. 구체적

http://www.amazon.com/Design-Implementation-FreeBSD-Operating-System/dp/0201702452

이러한 서브 챕터 :

  • 8.8. 로컬 파일 저장소
  • 8.3. 명명 번호
  • 8.9. 버클리 고속 파일 시스템

이렇게하면 저장소 할당 및 명명에 대해 별도로 생각하는 데 도움이됩니다.

과제 페이지에는 훌륭한 참고 자료가 포함되어 있습니다. 나는 저자가 기꺼이 온라인에 게시 한 Practical File System Design을 살펴볼 기회를 가졌습니다.

  • 제 4 장 BFS의 데이터 구조
  • 제 6 장 할당 정책

플러스 어쩌면 : 내가 특별히이 장 추천 할 수

  • 부록 A를 파일 시스템 생성 키트

아마도 당신이 문제가 될지 모르겠습니다. g는 프로젝트가 크고 압도적 인 것처럼 보입니다. 정말 작은 부분으로 분해하는 데 도움이됩니다. 여전히 길을 잃은 경우 가장 잘 이해하는 부분을 구현하여 시작하십시오.

과제의 세부 사항으로 돌아가 보겠습니다. 이들 파일 시스템의 제약을 언급 : 디스크에

  • 파일이 될 수까지
  • 크기 바이트 16384 에 할당 단위 또는 블록이 각 512 바이트 있습니다.
  • 귀하의 총 저장 영역은 당신이 취급하고 몇 모서리를 잘라 수 있도록 무엇을 제한하기 때문에 이러한 맥락에서

제약이 간호원 좋은, 아니 나쁜 MB 2-10이다.

그래도 문제가 해결되지 않으면 소스 코드를 FAT와 같은 간단한 파일 시스템으로 읽을 수 있습니다. (더 이상 설명하지 않는 것이 과제의 핵심입니다.

http://www.pjrc.com/tech/8051/ide/fat32.html

은 (또한 위키 백과를 체크 아웃 : 여기 FAT의 꽤 보조 기능의 설명이다.

http://ultra-embedded.com/?fat_filelib

소스 코드는 약 5K 라인입니다 :)

여기 임베디드 애플리케이션을위한 FAT의 C 구현에 대한 링크입니다.

행운을 빈다.