운영 체제 드라이버와 BIOS 드라이버

운영 체제 드라이버와 BIOS 드라이버

저는 몇 가지 기본 운영 체제 수업, 비디오 시리즈 등을 겪었고 OS 드라이버와 BIOS 드라이버에 관해 이 질문이 있습니다. 기본 OS는 각 하드웨어의 메모리 주소를 어떻게 알 수 있습니까? OS는 모든 컴퓨터에서 기본적으로 어떻게 작동합니까? 모두가 알고 있는 표준 장치 메모리 레이아웃이 있습니까? 아니면 OS가 BIOS 장치 드라이버를 가리키도록 IVT를 리디렉션합니까? 이 주제에 대한 읽을거리를 알려주세요.

답변1

기본 OS는 각 하드웨어의 메모리 주소를 어떻게 알 수 있습니까? OS는 모든 컴퓨터에서 기본적으로 어떻게 작동합니까?

CPU는 실행할 첫 번째 주소만 알고 있습니다. CPU가 부트스트랩하려면 BIOS/펌웨어가 이 주소에 "응답"해야 합니다.

그리고 메모리와 I/O(x86에는 메모리와 I/O라는 두 개의 공간이 있다는 것을 아시기 바랍니다. 그렇죠?)에는 많은 표준이 있었습니다.

최초의 PC 시대

메모리에는 BIOS DATA AREA라는 준공식 영역이 있었습니다. 여기에는 COM 및 LPT 포트 수, 플로피 드라이브 컨트롤러, 기본 I/O 주소 등에 대한 정보가 포함되어 있습니다. OS도 BIOS 호출을 사용했습니다(문서화인터럽트) 하드웨어에 액세스합니다. 마더보드 공급업체하드코딩된BIOS에 대한 주소입니다. 일부 장치에는 I/O 주소가 공식적으로 문서화되어 있었습니다.

ISA와 같은 확장 카드에는 확장 카드 BIOS를 제외하고는 감지할 수 있는 도구가 없습니다. 시스템 BIOS는 메모리에서 특수 패턴을 검색하여 확장 카드 BIOS를 찾아 실행합니다. 카드 BIOS는 네트워크 부팅 등을 활성화하기 위해 BIOS 기능을 "섀도우"하기 위한 인터럽트 벡터로 자체적으로 설치될 수 있습니다.

BLASTER많은 경우 점퍼로 카드를 구성하고 소프트웨어에 정보( 사운드 블래스터 매개변수 등을 위한 env 변수 등) 를 제공하는 것은 사용자의 책임이었습니다 .

PnP 시대

PnP는 하드웨어 감지에 대한 사양 팩입니다. ISA PNP, COM PORT PNP, LPT PNP 등이 있었습니다. 사양에는 어떤 장치가 연결되어 있는지 확인하고 장치가 어떻게 작동해야 하는지 확인하기 위해 소프트웨어가 수행해야 하는 작업이 설명되어 있습니다. PCI와 같은 일부 버스에는 PNP 기능이 내장되어 있습니다. 소프트웨어는 PCI의 모든 카드를 열거하고 필요한 리소스, 공급업체 및 클래스(드라이버 찾기) 등에 대해 질문한 다음 구성할 수 있습니다. USB에 대해서도 열거가 가능합니다.

이 경우 "소프트웨어"는 PNPBIOS 또는 PNP 지원 OS일 수 있습니다. 따라서 BIOS는 해당 사양을 사용하여 부팅 장치 및 PCI 호스트 브리지(PCI 버스의 "루트")를 찾고 이 정보를 메모리의 특수 테이블에 저장하고(PNPBIOS 사양에 따라) OS는 이를 읽고 PCI 및 USB 기능을 사용하여 열거하고 장치를 활성화합니다(PCI 및 USB 프로토콜이 문서화되어 있습니다).

ACPI 시대

ACPI 테이블은 마더보드 공급업체에 의해 채워지고 펌웨어에 저장됩니다(최신 펌웨어는아니다"BIOS이지만 에뮬레이트할 수 있습니다).

DSDT라는 특수 테이블은 특수 노트북 버튼, 노트북 배터리, 팬, PCI-Express 루트 콤플렉스 등을 포함한 모든 시스템 장치를 설명합니다.

장치는 AML이라는 언어로 설명되며 OS에는 해당 인터프리터가 있어야 합니다. DSDT는 "밝기 변경"과 같은 작업을 수행하기 위해 메모리, IO 및 "메서드"(AML에도 작성됨)를 설명할 수 있습니다.

ACPI는 엄청난 사양입니다. OS는 DSDT를 사용하여 내부 "장치 트리"를 채우고 "PCI-Express 루트 콤플렉스" 또는 루트 USB에 액세스하면 PCI-Express 및 USB 프로토콜을 사용하여 추가 열거 및 구성을 수행합니다. 카드는 메모리를 지원한다고 보고할 수 있습니다. 범위 A와 B, OS는 "B"를 사용하도록 구성합니다.

답변2

대부분의 운영 체제는 메모리 관리자, 입력 출력, 파일 시스템 관리자 등과 같은 다양한 구성 요소로 구성됩니다. 몇 년 전 모놀리식 운영 체제에서는 모든 것이 함께 구축되었습니다. 대부분의 최신 운영 체제에는 다양한 구성 요소를 내부 및 외부로 동적으로 변경하는 방법이 있습니다. 일부 운영 체제, 마이크로 커널에는 파일 시스템과 같은 대부분의 추가 구성 요소가 부분적으로 추가되는 운영 체제에 대한 기본 관리 기능만 있습니다.

최신 운영 체제도 네트워크 스택용 OSI 모델과 유사한 일련의 계층으로 구축됩니다(참조:https://en.wikipedia.org/wiki/OSI_model) 실행 중인 실제 하드웨어로부터 최대한의 독립성을 제공하기 위해.

따라서 운영 체제는 기본적으로 구체적인 하드웨어 특정 모듈이 연결되는 추상 기계입니다. 하드웨어 특정 모듈이 운영 체제에 제공하는 제어, 데이터 및 서비스를 설명하는 다소 추상적인 기계 설명인 인터페이스 사양이 있습니다.

따라서 특정 장치 드라이버 스택의 설치 프로그램은 구체적이고 구체적인 하드웨어 요구 사항과 장치에 대한 인터페이스를 알고 있지만 운영 체제는 이러한 구체적인 하드웨어 요구 사항을 알지 못합니다. 운영 체제는 모든 형편없는 장치 관련 항목을 장치 드라이버 스택에 위임합니다.

실제 장치 통신을 수행하는 기능은 일반적으로 일련의 레이어로 구성되기 때문에 "스택"이라는 단어를 사용합니다. 특정 장치에 사용되는 드라이버 파일 세트를 표시하는 대부분의 장치에서 Windows 장치 관리자를 통해 이를 확인할 수 있습니다. 여기에 이미지 설명을 입력하세요

따라서 실제로 여러 공급업체에서 제공하는 다양한 소프트웨어 구성 요소가 있습니다.

따라서 운영 체제가 하드웨어에 대한 세부 정보를 알고 싶어하면 장치 드라이버에 해당 세부 정보를 요청합니다.

OS는 플랫폼을 구성하는 특정 하드웨어 공급업체가 운영 체제가 구체적이고 특정 하드웨어에서 작동하는 데 필요한 드라이버 스택을 제공하기 때문에 다양한 하드웨어 플랫폼에서 즉시 작동합니다.

운영 체제마다 해당 운영 체제에서 사용하도록 설계된 장치 드라이버에 대한 인터페이스 사양이 다릅니다. 따라서 Linux의 경우 Linux 드라이버 인터페이스를 제공하는 Linux 운영 체제 호환 드라이버가 있어야 합니다. Windows의 경우 Windows 인터페이스 드라이버가 있어야 합니다.

드라이버 스택이 있기 때문에 동일한 하드웨어를 사용하는 한 스택의 일부 소프트웨어 구성 요소는 서로 다른 운영 체제 간에 동일할 수 있습니다. 하드웨어 장치와 직접 통신하는 계층 부분은 동일할 수 있지만 스택의 상위 수준, 즉 실제 운영 체제에 인터페이스해야 하는 부분은 서로 다릅니다. 운영 체제마다 장치 드라이버 인터페이스가 다르기 때문입니다.

운영 체제에 관한 수많은 책이 있으며 다양한 운영 체제에 대한 수많은 오픈 소스 프로젝트가 있습니다.

이 토론을 살펴보세요https://www.quora.com/What-is-the-best-book-on-operating-systems

다음과 같은 무료 온라인 도서가 많이 있습니다.http://pages.cs.wisc.edu/~remzi/OSTEP/

오픈 소스 운영 체제에 대한 이 github 페이지를 살펴보세요.https://github.com/showcases/open-source-operating-systems

답변3

최신 PC에서 각 하드웨어 부분은 요청 시 자체에 대한 몇 가지 기본 정보를 보고합니다. 예를 들어, 많은 주변 장치가PCI 버스. OS가 어떤 주변 장치가 PCI 버스에 연결되어 있는지 알고 싶을 때 모든 주변 장치에 설명을 보내도록 요청하는 명령을 버스에 보냅니다. 이것은 ... 불리운다열거하다(장치가) 버스에 있습니다. 이 설명에서는 숫자 코드를 사용하여 각 장치 모델을 식별합니다.PCI ID. OS는 특정 PCI ID를 가진 장치가 있음을 확인하면 해당 PCI ID에 대한 드라이버를 로드하려고 시도합니다. OS에 드라이버가 없으면 다운로드를 시도하거나 알 수 없는 장치가 있음을 사용자에게 보고할 수 있습니다.

예를 들어 Linux에서는 명령을 실행하여 lspciPCI 장치를 나열할 수 있습니다. 여기에는 다양한 종류의 정보를 표시하는 다양한 옵션이 있습니다. 궁금하신 경우 조금만 플레이해 보세요. Linux가 PCI 장치용 드라이버를 로드하는 데 사용하는 메커니즘을 설명합니다.이 답변. 그것은 단지 하나의 예일 뿐입니다. 다른 PC 운영 체제에도 동일한 작업을 수행하는 메커니즘이 있지만 해당 메커니즘은 완전히 다를 수 있습니다.

OS는 PCI 버스가 있다는 것을 어떻게 알 수 있으며 버스에 액세스하는 방법은 무엇입니까? PC 아키텍처용으로 빌드하면 하드 코딩된 것 같습니다. "PC 아키텍처"는 "x86 CPU"보다 더 구체적입니다. x86 CPU 주위에 다른 버스 세트를 배치할 수는 있지만 (현대) PC라고 부르지는 않습니다.

다양한 시스템 아키텍처에는 존재하는 드라이버를 열거하는 방법이 있을 수도 있고 없을 수도 있습니다. 예를 들어 1990년대 중반까지의 PC에는 이런 방식이 없었다. PCI 버스 이전에는ISA 버스. ISA 버스에서 특정 주소에 장치가 있는지 알고 싶으면 해당 장치에 명령을 보냅니다. 이해한다는 답변을 얻으면 좋습니다. 명령으로 인해 컴퓨터가 잠기거나 완전히 다른 주변 장치가 있어서 의도하지 않은 효과가 발생하는 경우에는 어렵습니다. 1908년대 PC에서 OS는 구성된 장치에 대해 BIOS에 물었습니다(그러나 BIOS는 모든 장치를 나열하지 않았고 BIOS가 알고 있는 장치 유형만 나열했습니다). 확장 카드를 설치한 사용자는 이를 제공해야 했습니다. BIOS 또는 OS 구성에서 구성 세부 정보를 확인하세요. BIOS에는 키보드와 화면을 위한 몇 가지 기본 드라이버와 이러한 드라이버를 호출하는 DOS와 같은 운영 체제가 포함되어 있습니다. 다른 OS(또는 애플리케이션)는 하드웨어에 직접 액세스할 수 있습니다(특히 BIOS 드라이버가 느리고 제한되었기 때문에 디스플레이를 위해).

오늘날에도 대부분의 임베디드 시스템에는 내장 주변 장치를 열거할 수 있는 방법이 없습니다. 많은 장치(특히 ARM 기반 및 그뿐만 아니라)는 주변 장치를 다음과 같은 데이터 구조로 설명합니다.장치 트리. 이 데이터 구조는 ROM이나 플래시 메모리에 저장되며부트로더(BIOS와 동일)은 데이터를 운영 체제에 전달합니다. 이렇게 하면 OS가 특정 장치 세트용으로 구축될 필요가 없으며 OS가 시작될 때 이 정보를 읽습니다.

관련 정보