PCI에 달린 램드라이브하고 비슷한 모듈은 무엇일까요?

Fe.head의 이미지

일명 PCI 슬롯에 달린 램드라이브의 모듈을 포팅하고 있는데요.

[대충 Linux 커널 드라이버 내용 설명하자면 디스크 드라이버 구조체를 쓰고 (struct gendisk 맞나?) 그리고.. init, clanup, open, close, ioctl 함수를 가지고 있습니다.]

Linux --> Free Bsd 5.1 버전으로 하고 있습니다.

www.kr.freebsd.org 에 있는 kld 문서을 보면 char 디바이스 프로그램하고 proc 디바이스 프로그램 정도가 나와있더군요..

이정도의 내용으로는 드라이버 포팅을 못할것 같은데요..

무엇을 봐야할지 모르겠습니다. atapi-cd.c 파일을 봤는데.. 비슷한점이 보이더군요.. 하지만.. 잘 모르겠습니다.

bsd 커널 소스중 어느것이 비슷할까요? (아마도 램드라이브가 가장 비슷할것 같은데....)

커널 소스파일명좀 가르켜 주세요..

PS) 그리고 Linux소스중 spin_lock 을 대처할 bsd 커널 함수는 무엇인가요?( 뮤텍스 인가요?)

hb_kim의 이미지

FreeBSD 의 블록 디바이스 드라이버 하나를 정해서 불필요한 기능을 전부 빼고, 필요한 부분만 수정하시면 될것 같습니다. dev/ida/ 에 있는 드라이버가 블록 디바이스 드라이버중 비교적 간단하게 보이더군요. 간단하다고는 하지만 포팅하기 위해선 리눅스와 BSD 를 다 알아야 하므로 머리가 꽤 아프시겠죠.

ATAPI-CD 는 이 경우에는 조금 부적절한데, read-only 인데다가 SCSI 인터페이스 관련 코드가 있기 때문에 불필요한 부분이 더 많아 보이는군요.

혹 회사 관련된 업무가 아니라면 kldp.net 에 프로젝트를 등록하고 오픈소스로 개발하면 재미있지 않을까요?

spinlock 대용으로 뮤텍스 쓰는것 맞는듯합니다. spl***() 과 splx() 등으로 사용한 드라이버도 있지만 기왕이면 각각의 디바이스 인스턴스에 lock을 하는것이 성능개선에 도움이 되겠죠.

sangwoo의 이미지

참고로.. FreeBSD 버전 5에는 블록 디바이스라는 개념이 사라졌습니다.
확실히는 모르겠지만, 아마도 vm과 버퍼 캐시의 통합 덕분인 듯 합니다.

http://www.freebsd.org/doc/en_US.ISO8859-1/books/arch-handbook/driverbasics-block.html

그리고 커널의 synchronization을 위해서는, 5.X에서는 mutex(9)를 사용합니다.
spinlock은 mtx_lock_spin() 이 아닐까 싶네요~
커널 프로그래밍에 대해서는 아직 아는것이 거의 없지만.. da(4)를 지원하도록
만드는 것이 옳은 방향이 아닐까 싶습니다. 몇몇 스커지 디스크들이나, umass(4)
등이 지원하는 플래시 디스크들은 모두 /dev/da0 과 같은 식으로 나타나더군요.

----
Let's shut up and code.

Fe.head의 이미지

답변 감사합니다.. hb_kim 님. 그리고 sangwoo 님..

hb_kim wrote:
혹 회사 관련된 업무가 아니라면 kldp.net 에 프로젝트를 등록하고 오픈소스로 개발하면 재미있지 않을까요?

회사 업무이기 때문에 힘들것 같습니다.. ㅠㅡㅠ..

sangwoo wrote:

참고로.. FreeBSD 버전 5에는 블록 디바이스라는 개념이 사라졌습니다.
확실히는 모르겠지만, 아마도 vm과 버퍼 캐시의 통합 덕분인 듯 합니다.

http://www.freebsd.org/doc/en_US.ISO8859-1/books/arch-handbook/driverbasics-block.html

그리고 커널의 synchronization을 위해서는, 5.X에서는 mutex(9)를 사용합니다.
spinlock은 mtx_lock_spin() 이 아닐까 싶네요~
커널 프로그래밍에 대해서는 아직 아는것이 거의 없지만.. da(4)를 지원하도록
만드는 것이 옳은 방향이 아닐까 싶습니다. 몇몇 스커지 디스크들이나, umass(4)
등이 지원하는 플래시 디스크들은 모두 /dev/da0 과 같은 식으로 나타나더군요.

아구. 이말씀은 잘 모르겠네요.. da라..
PCI에 달린 램디스크는 말 그대로 거의 하드 디스크 대용으로 초고속의 파일 입출력을 위해 쓸것인데.. 이것도 da에 해당 되는지?

근데.. 블록 디바이스가 사라졌다면 어떤 소스를 참고 해야 하나요?
(현재 집에 있어서.. 내일부터나 확인이 가능할것 같습니다.)

고작 블로킹 하나, 고작 25점 중에 1점, 고작 부활동
"만약 그 순간이 온다면 그때가 네가 배구에 빠지는 순간이야"

hb_kim의 이미지

OS 에서 블록 디바이스 개념이 어떻게 없어질수가 있나요? :shock:

단지 버퍼 캐시를 우회해서 직접 액세스 하지 못하도록 alias 를 없앴다는 이야기라고 생각되는군요.

sys/dev/ 에 가서 'grep strategy -r *' 해서 나오는 것들은 다 블록 디바이스 드라이버라고 보시면 됩니다.

da 는 SCSI direct access 디바이스인데, 이렇게 구현하시려면 SCSI 프로토콜을 어느 정도 아셔야 됩니다. 즉 블록 액세스 -> SCSI 명령으로 변환 -> SCSI 명령 decoding -> 메모리 카드 액세스의 순서를 거쳐야 되는데, 이중 SCSI 명령 decoding 과 메모리 카드 액세스를 드라이버에서 구현하셔야 됩니다. 굳이 이렇게 할 필요는 없겠지만, 커널 프로그래밍을 자유자재로 하면서 SCSI 프로토콜도 이해하고 있다면 경력에 엄청난 도움이 되시겠죠.

umass 가 da 로 보이는것은 USB mass storage 가 USB 전송 프로토콜위에 SBP2 를 이용해서 SCSI 논리 프로토콜을 구현하기 때문에 그렇습니다. 이 경우와는 상관이 없겠죠.

md 를 기본으로 포팅하기를 권해드리기도 꺼림찍한것은, md 는 로컬 메모리를 대상으로 한다는 가정하에 작성되었기 때문에 많은 레이어를 (특히 버퍼 캐시) 스킵하고 vnode 인터페이스를 직접 구현하고 있습니다. 따라서 로컬 메모리보다 느린 액세스 시간을 갖는 메모리 카드에 직접 적용하기에는 부적절하겠죠.

메모리 카드가 어떤식으로 동작하는지 궁금하군요.

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.