Linux File System 교육적 목적의 개발...

codeart의 이미지

리눅스 파일 시스템을 개발하려고 합니다.
파일시스템의 목적은 멀티미디어 용으로 제작하는 것인데...
거창한 것은 아니고 학부생들 프로젝트에 이용할 것인데...
제가 파일시스템을 만들고 학부생들이 응용프로그램을 만들 것이고요...

지금은 작은 파일시스템(msdos, minix)의 소스를 읽고 그리고 리눅스 파일
시스템이라는 책을 보고 있습니다.

그런데 파일시스템을 만드려면 어떤 것이 필요한지 모르겠습니다.
블럭 디바이스 드라이버 + 파일시스템 드라이버 + 파일 시스템
이라고 어설프게 생각하고 있는데...
이게 맞는 지요...

개발자 가이드 같은 참고 자료같은 것이 있다면 알려주시면 좋겠습니다.

버퍼 캐시를 쓰지 않을 것이고요 순차적인 리드 속도만 증가가 목표고요.

너무 무식해서 질문이 허접하게 들릴 수도 있겠습니다만...

비판적인 답글이든 용기를 복돋는 답변이든...

답글을 기다리겠습니다.

나름대로 오픈소스로 전향할 생각은 하고 있는데... 결과가 어떨지.. ^^

hb_kim의 이미지

* 버퍼캐시를 안쓰고 어떻게 파일시스템을 만들수 있나요?
* 시퀀셜 억세스 속도를 빠르게 하는게 목적이라고 하셨는데, 현재 파일시스템에서 시퀀셜 억세스 속도가 느린지요?

제가 경험한 바로는 아무리 단순한 디자인의 파일시스템이라 하더라도, 시퀀셜 액세스는 거의 최적 성능에 가깝게 구현되어 있습니다. 버퍼캐시에 저장되어 있는 indirect 포인터가 LRU 알고리듬에 의해 overwrite 되지만 않으면 실제 데이터 블록만 미디어에서 가져오면 되기 때문입니다. LRU 알고리듬에 의해 overwrite 되었다는 이야기는 그만큼 자주 사용하지 않는다는 의미이므로 메타데이터 액세스가 파일시스템 성능에 별 영향을 주지 않습니다.

파일시스템 개발자 참고 서류는 별달리 없는것으로 알고 있으며(웹에 있는 백서들 이외에는), 기본적인 OS 지식과, 자료구조 지식, 수학적 재능이 있으면 개발이 가능합니다. 그외에도 블록디바이스 (주로 디스크나 시디롬등이 되겠죠)와 그 드라이버가 대략 어떤 양상으로 동작하는지 이해하고 있으면 좋겠죠.

파일시스템 개발 겉보기보다 어렵습니다. 학교 프로젝트로 하긴 무리인듯 합니다. 데이터 integrity/성능 검증등의 테스트도 굉장히 시간/노동 집약적일 뿐만 아니라, 문제가 발생했을때 디버깅도 힘듭니다. inode 자료구조 설계와 block allocation 방식 설계부터 시작해서 모든것을 다하려면 (사람*시간)이 무척 많이 걸릴것입니다.

IMHO, 해결책을 제시하는것보다는 문제를 찾는것이 더 어렵다고 봅니다. 과연 어떤 문제가 기존의 파일시스템에 있는지 부터 연구해서, 많이 사용되고 있는 파일시스템에 있는 문제를 해결한 패치를 만들어 가지를 쳐나가는것이 쉽지 않을까 생각합니다. 나중에 오픈소스화하기도 좋겠구요.

Tony의 이미지

냠.. 한때 파일시스템하던 사람으로써... 말씀드리자면 별로 안어렵습니다.
리눅스파일시스템이라는책 그거하나 레퍼런스로 두고 대충 개발하시면
될듯... 블럭디바이스 드라이버는 그냥 있는거 쓰면 되구요. ide든 scsi든
transparent하게... 4M block size같은걸 지원하려면 디바이스드라이버도
짜셔야할지도 모르겠네요... 파일시스템 드라이버는 짜셔야겠죠... 그냥
쉽게 ext2같은거 가져다 걷어내고 만드시면 될것같습니다.

주변에 divx나 mpeg2용 스트리밍 서버용 파일시스템 만들던사람이 있었는데
(대충 비슷한 용도라고 보고) 버퍼캐쉬없이 순차적으로 읽어서 던지고 쓰고
하는 파일시스템 만드는데 한명이서 3달정도가 걸리던데요. 대충 그정도 예상하시면
될것같습니다.

ps. 멀티미디어용이라면 2.4대에선 한때 유행이라 gpl로 만들어진 파일시스템들이
있었는데요 검색을 해보시면 비슷한용도를 찾아서 수정하는선에서 끝날 수 있으리라
생각됩니다.

codeart의 이미지

^^
정말 자료 찾기가 힘들군요...

미래를 수정할 수 있는 때는 현재이다.

mindengine의 이미지

버퍼 캐시 안쓰고도 화일 시스템을 만들수가 있습니다.

버퍼 캐시가 완전히 없어지는 것은 아니고 , 메타 데이타를 저장하기 위해
약간은 필요하긴 한데 데이타는 버퍼 캐시를 쓰지 않고 논리적 캐싱만을 합니다,

이러한 화일 시스템은 일반적인 것으로는 썬 마이크로 시스템에서 10여년 전부터 사용한 것으로 사실 화일 시스템 보다는 버추얼 메모리에 가까운 내용입니다.

그 다음으로는 이러한 vm을 그대로 사용한 netbsd에서 unified buffer cache같은 개념으로 구현한 것이 있습니다.

만약 시간이 급하시다면 이들 문서를 모두 읽고 검토하기가 어려울 것이나 시간이 조금 있으시다면 C. Cranor의 UVM 을 읽어 보시면 큰 도움이 될지도 모릅니다. (약 280쪽 분량중 70쪽 정도가 ) 다른 구현을 위해서는 Vahalia를 읽어 보세요. 썬의 화일 시스템에 대한 구현도 바할리아에 나와 있습니다. 그리고 Cranor는 책의 내용보다는 참고 문헌이 더 중요합니다.

도움이 되었으면 합니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.