그래서 프로그래머가 컴퓨터의 장치와 정확히 대화하는 방식에 혼란 스럽습니다. 지금은 큰 아이디어를 말하는 것이 아닙니다. 다른 프로그램에서 기능을 사용할 수 있도록 하드웨어 위에 장치 드라이버가 있다는 것을 알고 있습니다.
그러나 일반적으로 누가 운전자와 정확하게 대화합니까? 프로그래머가 응용 프로그램을 작성하여 드라이버에서 함수를 호출해야합니까? 또는 프로그래머가 운영 체제를 통해 함수를 호출 한 다음 드라이버 호출을 처리합니까?
그래서 프로그래머가 컴퓨터의 장치와 정확히 대화하는 방식에 혼란 스럽습니다. 지금은 큰 아이디어를 말하는 것이 아닙니다. 다른 프로그램에서 기능을 사용할 수 있도록 하드웨어 위에 장치 드라이버가 있다는 것을 알고 있습니다.
그러나 일반적으로 누가 운전자와 정확하게 대화합니까? 프로그래머가 응용 프로그램을 작성하여 드라이버에서 함수를 호출해야합니까? 또는 프로그래머가 운영 체제를 통해 함수를 호출 한 다음 드라이버 호출을 처리합니까?
답변:
운영 체제가 관련된 경우 프로그램은 최소한 직접적으로 장치 드라이버와 통신하지 않습니다. 프로그램은 자신에게 알려지지 않은 추상화에 대해 이야기하고 결국 결국 하나 이상의 추상화 계층을 통해 장치 드라이버와 대화하게됩니다.
현대 운영 체제의 복잡성을 건너 뛰고 45 년 전에 개발 된 마이크로 컴퓨터 운영 체제 인 CP / M을 예로 사용하겠습니다 . CP / M은 3 개의 레이어가있는 레이어 케이크입니다.
프로그램. 최상위 계층은 계산 및 I / O를 수행하여 유용한 기능 (워드 처리, Space Invader 재생)을 수행 하는 프로그램 입니다. 어떤 시점에서 프로그램은 사용자가 볼 수 있도록 문자 'A'를 표시하려고한다고 가정 해 봅시다. CP / M은 콘솔 이라고하는 추상화를 제공하며 , 여기서 프로그램과 상호 작용하는 사용자가 찾아야합니다. 문자를 보내는 일반적인 방법은 몇 가지 조립 지침이 있습니다.
LD C,2 ; Load 2 into register C
LD E,65 ; Load the ASCII code for 'A' into register E
CALL 5 ; Call CP/M's routine for getting things done
(당신이 그들에 익숙하지 않은 경우, 레지스터는 프로세서에 살고 변수로 생각 될 수있다.) 우리는 어떤 마법 번호를 얻을 것이다 2
및 5
분에 대해 모두. 여기서의 모든 테이크 아웃은 콘솔이 있고 콘솔에 쓸 수있는 방법이 있다는 것입니다. 그 이상의 것을 알거나 신경 쓰지 않습니다. 이는 CP / M이 I / O에 사용하는 두 가지 추상화 중 첫 번째입니다.
BDOS . 5
프로그램이 호출 한 주소 는 다음 계층의 기본 디스크 운영 체제 또는 BDOS 의 진입 점입니다 . BDOS는 식당 메뉴에서 번호로 주문하는 것과 같이 번호가 매겨진 기능의 전체 래프트를 제공 합니다. C
함수 번호 ( 2
콘솔 출력의 경우)가있는 E
레지스터와 전송할 문자가있는 레지스터를 로드하여 콘솔 출력을 원한다고 알려줍니다 . 콘솔 출력은 매우 간단한 작업이며 BDOS는 다음 계층을 호출하는 것 외에는 실제로 많은 작업을 수행 할 필요가 없습니다.
BIOS. BIOS 또는 기본 입 / 출력 시스템 은 모든 하드웨어 별 코드가있는 계층입니다. 현대 시스템에서 이는 일련의 장치 드라이버로 간주됩니다. BDOS와 마찬가지로 BIOS는 BDOS가 비즈니스를 수행하는 데 사용하는 매우 원시적 인 표준 작업 집합을 요구합니다 . 이러한 작업 중 하나를CONOUT
프로그램이 요청한 문자를 하드웨어가 무엇이든간에 두 개의 레이어를 작성하도록 요청합니다. (PC와 달리 상황은 균질하지 않았습니다. 모든 사람의 시스템은 다른 방식으로 작업을 수행했습니다.) 콘솔 출력은 BDOS에 대한 간단한 통과이지만 디스크에 파일을 작성하는 것과 같이 더 복잡한 작업을 수행하려면 많은 것이 필요할 수 있습니다. BIOS는 미디어를 조작하기 위해 호출합니다. 다시 말하지만, BIOS에는 표준 추상 인터페이스가 있기 때문에 BDOS는 항상 원하는 것을 얻는 방법을 알고 있으며 BIOS가 어떻게 하는지를 신경 쓰지 않습니다.
왜 하나가 아닌 두 개의 추상화 (프로그램 -BDOS 및 BDOS-BIOS)가 있는지 궁금 할 것입니다. 대답은 CP / M과 BDOS가 컴퓨터 제조업체에 바이너리 형태로 제공 될 수 있다는 것입니다. 하드웨어 용 장치 드라이버를 사용하여 사용자 지정 BIOS를 작성하고이 두 가지를 함께 묶어 시스템의 OS로 제공합니다. BDOS는 한 조직에서 유지 관리하고 사용자 프로그램에 항상 알려진 양이므로 매우 다양한 (시간 동안) 다양한 하드웨어에서 동일한 응용 프로그램을 실행할 수 있기 때문에 이는 큰 문제였습니다. 그렇기 때문에 운영 체제가 존재하며 하드웨어를 직접 뒤틀는 프로그램 만 작성 하지는 않습니다 .
여기서 설명한 모든 내용은 최신 운영 체제에도 적용됩니다. 예를 들어 유닉스는 모든 것을 파일로 추상화합니다. 이 프로그램을 시스템 호출의 동일한 세트 (제공 open()
, write()
, close()
그것은 디스크 드라이브 또는 직렬 포트인지 의사 소통 등). 일련의 결정과 추상화는 훨씬 더 복잡하지만 결국에는 작업을 수행하기 위해 최하위 계층에서 어떤 장치 드라이버 코드를 실행해야하는지 결정하는 결과가 나옵니다.
call 5
여기. 하지 않을까요 rst 8
(가 목적지 주소에서 메모리의 3 바이트를 희생하지만 것이이 호출 할 때마다 다른 이름으로 저장 ...) 훨씬 더 효과적?
RST
데이터 버스에 단일 바이트 명령 (보통 )을 넣을 수있는 인터럽트 모드가 하나뿐입니다 . 확실하게 말할 수는 없지만 모든 장치의 요구 사항과 DDT (브레이크 포인트를 발생시키는 데 사용됨) 및 BDOS에 들어가기 위해 하나를 사용하는 데 필요한 슬롯이 충분하지 않은 것 같습니다 .
여러 가지 가능성이 있습니다.