부트 초기화시...

kkojiband의 이미지

bootsect.S 를 보면 중간에 track 당 sector 수를 구하는 부분이 있던데...

당췌 이해가 안되네요...--;

코드를 보니까 특별한게 없고 그냥 int 13h 를 이용해서 sector 를 읽어오는거던데...

이게 어떻게 track 당 sector 수를 알수있는거죠?

근데...track 당 sector 수는 왜 구하는거죠??

Necromancer의 이미지

Ralf Brown의 인터럽트 리스트나
BIOS Specification 문서(피닉스 홈피 뒤지면 있음) 보면 그거 나와 있습니다.
INT 13h/AH=08h를 사용하면 현재 사용중인 하드디스크의
Cylinder/Head/Sector 정보가 리턴됩니다.

또 요즘 돌아다니는 기가급 하드들은 이 정보가 다 짜가라는것도 아시죠.
예전 소프트웨어와의 호환성을 위해서 일부러 조작된 값을 보내주죠. 그리고
그 CHS로 액세스할경우 BIOS나 하드디스크 컨트롤러가 알아서 LBA로
바꿔버립니다.

Written By the Black Knight of Destruction

익명 사용자의 이미지

왜 필요한 것인가? 공식을 열거해봅니다.


밑에서 "섹터번호" 는 1부터 카운트되는 값이고 
나머지는 0부터 카운트 되는 값입니다.
즉, 섹터번호는 0번은 없다고 간주하셔도 이해하는데 지장없습니다.

여기서 트랙은 cylinder라고도 불리워집니다. (보통은 실린더라고 부름)

1. Sector / Cylinder / head 를 논리적 상대섹터로 변환하는 공식
  - 논리적섹터번호 = (헤드번호 * 트랙당섹터수) + (트랙번호 * 트랙당섹터수*총헤드수)

2. 논리적 상대섹터를 Sector / Cylinder / Head로 바꾸는 공식
    논리적 상대섹터를 편의상 LBA라고 칭할께요.
  - 섹터번호 = (LBA % 트랙당섹터수) + 1
  - 트랙번호 = LBA / 트랙당섹터수 / 총헤드수
  - 헤드번호 = LBA / 트랙당섹터수 % 총헤드수

다음과 같은 공식은 적어도 부트로더 만들어 본사람은 알고 있는 
기본상식의 공식입니다. 
예전에 만들어보다가 정리해둔거 다시 떠올리게 되는군요.

파일이 저장될때 데이터의 저장순서는 보통은 다음과 같습니다.
하지만 반드시 그러한 것은 아니며 인터리브방식은 2개이상씩 섹터를 
건너뛰며 접근합니다.

만약 섹터 1~63 / 트랙 0 ~ 1024 / 헤드 0 ~ 15 인경우
설명의 편의상 섹터는 S 트랙은 C 헤드는 H로 표시하겠습니다.

S1~63 > H0~15 > C0~1024

이런순입니다.

charsyam의 이미지

예전에는 대부분 헤드, 실린더, 트랙, 이런걸로 하드디스크에 접근을

했는데, 요새는 전부 LBA 를 통해서 접근한다고 보시면 됩니다.

그래서 헤드, 실린더, 이런 정보가 거의 고정되어 있죠.

그럼 고운 하루되시길...

=========================
CharSyam ^^ --- 고운 하루
=========================

mushim의 이미지

Quote:
1. Sector / Cylinder / head 를 논리적 상대섹터로 변환하는 공식
- 논리적섹터번호 = (헤드번호 * 트랙당섹터수) + (트랙번호 * 트랙당섹터수*총헤드수)

약간 오타가 있는 것 같습니다.

논리적섹터번호 = (헤드번호 * 트랙당섹터수) + (트랙번호 * 트랙당섹터수*총헤드수) + (섹터번호 -1)

(섹터번호 -1) 을 더하는 것이 빠져있네요.

익명 사용자의 이미지

mushim wrote:
Quote:
1. Sector / Cylinder / head 를 논리적 상대섹터로 변환하는 공식
- 논리적섹터번호 = (헤드번호 * 트랙당섹터수) + (트랙번호 * 트랙당섹터수*총헤드수)

약간 오타가 있는 것 같습니다.

논리적섹터번호 = (헤드번호 * 트랙당섹터수) + (트랙번호 * 트랙당섹터수*총헤드수) + (섹터번호 -1)

(섹터번호 -1) 을 더하는 것이 빠져있네요.

예리한 지적이십니다.
글 적으면서 누락되었군요.
지적 고맙습니다.

댓글 달기

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