윈도우처럼 32비트 보호모드에서는 어떤 그래픽처리를?

jyj9782의 이미지

그래픽카드는 도스시절에는요

보면.. 그래픽 바이오스를 위한 공간이 있었잖아요
리얼모드에서 16비트..

윈도우같은 32비트 보호모드의 운영체제에서는..

이 바이오스에 아무리 조작해도..그래픽카드에 안나타나자나요 ?

그럼 어떤 메모리를 사용해서 어떻게 처리를 하는지..

대략적인 이해를 구합니다..

(_ _)/ 적절하지 않아보이지만.. 질문이.. 여기 밖에 달리..

프로그래밍에 대해서 애기해주셔더 좋고요

Necromancer의 이미지

비디오카드 메모리주소는 0xa0000-0xbffff입니다.

비디오카드마다, 각각의 모드별로 이들 메모리주소를 다 쓰는게 아니라 일부만
쓰므로 영역을 확인하시고,
이 주소공간을 적당히 세그먼트로 잡은 다음 해당 셀렉터를 이용해서
접근하면 됩니다. (어떻게 접근하든 간에 주소변환후 나타나는 물리주소가
이 주소 범위여야 합니다.)

그리고 BIOS 호출은 별다른 보호모드 인터페이스가 없는 이상은 직접 못하고
리얼모드 전환후 해야 하는 좀 복잡한 절차가 필요하죠.

---

윈도우 등등의 OS에서 돌아가는 프로그램이라면 그나마 이 접근도 block되어
있지요. 이때는 해당 OS의 API를 사용하는 수밖에 없습니다. (윈도우라면
win32api가 되겠죠.) API 없다면 OS에 해당 자원을 직접 접근할수 있도록 요청을
해서 직접 잡고 제어하는 방법도 있습니다.(리눅스의 X서버가 이런 유형에 속합니다.)

Written By the Black Knight of Destruction

jyj9782의 이미지

재질문드릴꼐요..
비디오카드속의 메모리 범위를 나타내는건가요..
바이오스를 통해서 그 메모리에 접근해서 쓰는것인가요? 도스에서보면.. 1:1 로 맵핑하는주소가 있잖아요..그건 안쓰여지자나요.. 아.. .제가 질문한 의도는.. 윈도우에 한정되는 시각으로 질문드린건아니고요 ^^ 운영체제레벨의 사고방식에서 질문드린거에요.. 그러니까 보호모드가 리얼모드상태로 전환된 상태에서 바이오스호출로 메모리를 처리해야한다는거구뇽.. 윈도우 커널이 이런 인터페이스를 구현하고 있고요 ? 맞나요.. 조금만더 보충해주세요.. 이해되도록..

힘내세요.

Necromancer의 이미지

보호모드 OS하에서는 아래와 같이 작동합니다.

1. 프로그램이 API를 호출한다.
2.OS는 호출된 API를 받아서 해석한다.
3. 해석된 API 정보를 알맞은 드라이버한테 넘긴다.
4. 드라이버가 API에 대응되는 작업을 한다.

따라서 사용자 프로그램의 그래픽 처리는 API만 신경쓰면 끝입니다.
예전 도스시절처럼 저수준 I/O나 특정 메모리 영역을 직접 접근하는 것까지는
내려가지는 않을 뿐만 아니라 만일 이걸 시도하면 OS에 의해 블록 당하고 kill 됩니다.

(프로그램이 블록당하는 매커니즘은 보호모드 동작원리를 보면 알 수 있습니다.)

Written By the Black Knight of Destruction

jyj9782의 이미지

흑기사님 답변주셔서 감사합니다. ^^

힘내세요.

방준영의 이미지

요즘 그래픽 카드들은 거의 대부분 PCI 기반이므로 PCI BIOS에 있는 설정 정보를 읽어와서 카드를 조작합니다. 따라서 리얼 모드-보호 모드 전환은 필요하지 않고, 당연히 셀렉터도 쓰지 않습니다.

그리고 요즘 카드들은 오래된 VGA처럼 0xA0000-0xBFFFF에만 접근이 가능한 것이 아니라, 비디오 메모리를 메인 메모리의 임의의 주소 공간에 맵할 수 있도록 되어 있습니다(프레임버퍼). 윈도의 경우 그래픽 드라이버가 커널 모드에서 돌아가기 때문에 사용자 프로그램에서는 프레임버퍼에 접근할 수 없고, Win32 API중에도 프레임버퍼에 바로 접근할 수 있게 해주는 함수는 없습니다. Undocumented Windows 2000 Secrets이란 책에 보면 커널 주소 공간에 어떻게 접근할 수 있는지 개념과 예제가 나와 있으므로 비디오 카드와 메모리를 직접 조작하고 싶으시다면 책을 읽어 보시는 것이 도움이 될 것입니다. 그리고 MSDN 가면 비디오 카드 드라이버 API에 대한 정보가 자세히 나와 있고, WinDDK를 구하시면 안에 예제 드라이버 소스 코드도 들어 있습니다.

댓글 달기

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