A20 line enable...??

kkojiband의 이미지

드뎌 성공했습니다...-_-;;;

쫌전에 이것저것 계속 만지다가 어느 순간 갑자기 되더군요...

근데 소스를 자세히 보니까 예전에 안되던거랑 거의 차이가 없어서 예전껄로 부팅을 해보니까 그것도 되더군요...-_-;;;

정말 vmware 자체의 문제였는지...음...

암튼 이제라도되서 정말 다행이에요...도와주신 분들 감사드립니다...T.T

이제부터 제대로된 부트 코드를 만들어봐야죠...^^

그래서 질문 하나 또 할께요...!

리눅스나 존파인씨 부트 코드를 보면 보호 모드 들어가기 전에 꼭 A20 line 을 활성화시켜주더군요...

이 목적이 1M 바로 위의 64kb 를 사용하는걸로 알고 있는데,

어차피 보호모드 들어가면 이건 필요가 없을텐데 제가 지금까지 본 부트 코드들 모두가 이걸 해주더라구요...

그 high memory 가 꼭 필요해서 A20 line 을 활성화시키는건가요? 아님 다른 이유라도??

익명 사용자의 이미지

A20 라인을 안 켜면 20비트 이상의 주소에 접근할 때 wrap-around가 일어납니다(우리말로 무엇이라고 하면 될지...). 그러니까 음식 접시를 랩으로 한바퀴 감싸면 끝이 처음 시작한 지점과 만나듯이, 0x100000의 배수되는 번지들이 모두 0번지로 취급되는 현상이죠. 마찬가지로 0x100001의 배수 번지는 전부 1번지가 되고 맙니다.

[한가지 부탁을 드리자면, 제목을 내용과 부합하게 정해주셨으면 좋겠습니다. 성공의 기쁨은 잘 알겠습니다만, 어쨌든 여기는 질문란이니까요...]

vacancy의 이미지

어디서 얼핏 본건데요 ..
( 뉴스그룹이었던것 같기도 한데 .. )

A20 line을 enable해주지 않으면 ..
메모리를 메가 단위로 쪼갰을 때 ..
홀수번째 블럭만인가 짝수번째 블럭만인가 ..
한쪽만 쓸수 있다고 하는 것 같더군요 ..

alt.os.development 쪽에 가보시면 ..
관련 자료를 얻으실 수 있을것 같습니다 ..

kkojiband의 이미지

제가 방금 실험을 해봤는데요...

A20 line 을 enabe 시키지 않은 상태에서,

80087h 번지에 있는 주소를 1Mb 씩 증가시키면서 값을 비교해보니까요,

80087h 과 180087만 같고 나머진 다 그냥 0이더라구요...

저도 책에서 위의 님들께서 말씀해주신 것들을 봤는데요,

제가 실험해본 이건 대체 왜 이런걸까요...-_-;

뭐든 한번에 되는게 없어서 정말 답답하네요...-_-;

이제 졸업이다...사랑하는 SKKULUG 후배들아 안녕~

익명 사용자의 이미지

kkojiband wrote:
제가 방금 실험을 해봤는데요...

A20 line 을 enabe 시키지 않은 상태에서,

80087h 번지에 있는 주소를 1Mb 씩 증가시키면서 값을 비교해보니까요,

80087h 과 180087만 같고 나머진 다 그냥 0이더라구요...

저도 책에서 위의 님들께서 말씀해주신 것들을 봤는데요,

제가 실험해본 이건 대체 왜 이런걸까요...-_-;

뭐든 한번에 되는게 없어서 정말 답답하네요...-_-;

저 역시 20번째 bit line이 동일한 주소를 가르키도록 되어 있고
그 이상은 상관 없는것으로 알고 있습니다.

실험 해보지는 않았지만 A20이 disable 되어 있다면
100000h 와 1100000h 가 아마도 같지 않을까라는 생각이 드는군요.

익명 사용자의 이미지

앗, vacancy님 말씀을 듣고 보니 그 말씀이 맞네요. 8)

A20 라인을 활성화하지 않으면 2의 21승째 되는 주소 라인(A20은 A0부터 시작해서 21번째 라인이므로)이 무조건 0으로 고정이 되어 버립니다. 그러니까 처음 1MB(0-1MB 영역), 하나 건너 뛰어서 1MB(2-3MB 영역), ... 이렇게 홀수번째 1MB 영역들만 접근 가능하게 되지요(2N-(2N+1)영역, N은 0과 자연수).

Quote:
80087h 과 180087만 같고 나머진 다 그냥 0이더라구요...

값을 읽기만 해서 비교하는 것은 의미가 없고, 값을 썼을 때 메모리 상의 wrap-around 지점도 함께 변하는지 알아보면 됩니다.
vacancy의 이미지

참고로 이를 이용해서
메모리 protection을 구현하면 어떻겠냐는 의견도
어디선가 본 것 같습니다.
보호해야 할 부분을 짝수번째 1MB Block에 넣고
유저 모드로 갈 때 A20 line을 disable하는 방식으로요.

근데 이것이 가능한지, 유용한지에 대해서는 잘 모르겠네요.
관심 있으신 분들께선 참고하시면 좋을듯도 합니다.

댓글 달기

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