Programing

소프트웨어 / 코드는 실제로 하드웨어와 어떻게 통신합니까?

lottogame 2020. 11. 22. 18:50
반응형

소프트웨어 / 코드는 실제로 하드웨어와 어떻게 통신합니까?


내 질문은 :

Windows / Linux에서 "종료"버튼을 누르면 컴퓨터가 종료됩니다 . "종료"명령이 실제로 컴퓨터를 물리적으로 종료하는 방법은 무엇입니까?

내 요점을 명확히하기 위해 :

우리가 공을 차면 공과 다리가 물리적으로 접촉하여 공이 움직이기 때문에 소프트웨어와 하드웨어 사이의 물리적 연결은 어떻게 이루어 집니까? 평문의 코드는 어떻게 컴퓨터가하는 일을하게 만들까요?


대답은 상당히 복잡하고 전기 시스템 및 회로 (KVL, KCL), 이진 숫자 및 부울 논리의 기본 사항을 이해해야하지만 프로세스를 높은 수준에서 설명 할 수 있습니다. 코드 (일반 텍스트 단어로 표시됨)가 컴파일됩니다. , 조립되어 궁극적으로 각각 저전압과 고전압을 나타내는 0과 1의 조합으로 변환됩니다.

재료 및 회로에 전압이 가해지면 이러한 전압은 전구에 전류를 공급하는 회로를 닫거나 (점등을 유발하는) DC 모터에 전류를 공급하여 CD를 열 수있는 등 물리적 특성을 변경할 수 있습니다. DVD / Bluray / (?) 드라이브.

이제 회로를 닫고 부저에 전류를 전달하여 소리를 낼 수있는 가상의 1 비트 CPU를 상상해보십시오. 이 1 비트 CPU에는 0과 1의 두 가지 값을 가질 수있는 단일 입력이 있습니다.

이 간단한 CPU는 매우 간단한 어셈블리 언어를 가지고 : ON그리고 OFF, 우리는 몇 가지 더 멋진 추상화를 제공하는 멋진 프로그래밍 언어가 있습니다 cpu.turnOn, cpu.turnOff.

내 프로그램을 cpu.turnOn;작성하여 컴파일하고 어셈블하면 실행할 준비가되었습니다. CPU에서 프로그램을 실행하면 부저가 켜집니다.

현실 세계에서 컴퓨터는 더 복잡한 시스템으로 구성됩니다. 단일 1 비트 CPU 대신 복잡한 명령어 세트와 수많은 장치가있는 64 비트 CPU가 있습니다.

복잡한 시스템이 상호 작용할 수 있도록하기 위해 이러한 시스템은 추상화 계층으로 구성됩니다.

가장 낮은 층은 전압, 회로 및 실리콘 또는 실제 '물리적 하드웨어'라고 생각할 수있는 것입니다. 하드웨어와 함께 일반적으로 하드웨어의 세부 사항과 상호 작용하도록 설계된 '마이크로 컨트롤러'또는 특수 처리 장치가 있습니다. 광 디스크 드라이브를 상상해보십시오. 마이크로 컨트롤러는 드라이브 베이를 꺼내고, 모터를 시작하고, 레이저를 정렬하고, 디스크에서 데이터를 스트리밍 할 수 있습니다.

마이크로 컨트롤러가 실행하는 소프트웨어를 펌웨어라고합니다. 하드웨어 기능을 제어하는 ​​특수 운영 체제이며 API도 포함 할 수 있습니다. 가상의 1 비트 CPU 예에서 프로그램은 펌웨어이고 cpu.turnOn, cpu.turnOffAPI가됩니다.

컴퓨터가 많은 하드웨어 구성 요소 (그래픽, 스토리지, 통신, I / o)로 구성되어있는 경우 컴퓨터는 많은 특수 펌웨어로 구성됩니다. 해당 하드웨어를 사용하는 데 유용한 모든 작업을 수행하려면 일반적인 방식으로 키보드를 처리하거나 마우스, 터치 패드 및 트랙볼이 서로 다른 상호 작용에도 불구하고 모두 동일하게 작동 할 수 있도록하는 또 다른 추상화 계층이 필요합니다. 여기에서 운영 체제가 제공됩니다. OS는 관련 장치 그룹을 관리하는 API를 제공하고 하드웨어 공급 업체가 OS 명령과 마이크로 컨트롤러가 이해하는 명령 간의 변환을 제공하는 후크를 제공합니다. Windows 땅에서 이것은driver.

운영 체제 및 드라이버 위의 다음 추상화 계층은 사용자가 실제 작업 (또는 포트 나이트 플레이)에 사용하는 애플리케이션입니다. 이러한 프로그램은 무수히 많은 언어, SDK 및 툴킷으로 작성되었으며 이것이 StackOverflow가 존재하는 이유입니다. 이러한 언어는 OS가로드 및 관리하고 컴퓨터에 의해 실행되는 실행 코드로 컴파일됩니다.

이 모든 것을 shutdown명령으로 통합 : 명령 정수기는 시스템 전원을 관리하는 OS 레벨 API를 사용합니다. 이 API는 OS의 나머지 부분에 알림을 보내 메모리 버퍼를 정상적으로 플러시하고, 애플리케이션 상태를 저장하고, 통신 채널을 종료하고, 다양한 하드웨어 시스템의 전원을 끄는 등의 작업을 처리합니다 (또는 저전력 소비 모드로 전환 될 가능성이 높음). 또한 전원 드라이버 (ACPI?)를 사용하여 컴퓨터 전원 관리 하위 시스템과 인터페이스합니다. 이 서브 시스템은 셧다운 명령을 내리고 컴퓨터 전원 공급 장치에 신호를 보내 회로를 차단하고 더 이상 대부분의 구성 요소에 전원을 공급하지 않습니다.


소프트웨어가 하드웨어와 비교할 때 다른 생물이라고 생각한다면 어떤 설명도 만족할 수 없습니다. 소프트웨어를 일련의 전하처럼 생각하십시오. 작성하는 모든 코드는 RAM 또는 디스크에 일련의 전하로 저장됩니다. 그래서 당신은 텍스트를 쓰는 것이 아니라 전하의 순서입니다. 비디오 카드는 입력하는 내용을 이해하는 데 도움이되도록 모니터에 영어로 내용을 표시합니다. 어떤면에서 아마도 진정으로 컴퓨터에서하는 일은 물리적 인 것입니다.


글쎄, 셧다운은 실제로 물리적 인 것이 아니며 컴퓨터의 모든 회로는 물리적으로 전원 플러그를 뽑을 때까지 완전히 꺼지지 않습니다.

이 소프트웨어는 BIOS APM (Advanced Power Management) 인터페이스를 사용하여 컴퓨터의 전원 회로를 제어합니다.

컴퓨터가 꺼져 있어도 물리적으로 스위치를 당기지 않고도 컴퓨터의 네트워크 카드에서 나오는 Wake on LAN 신호 의해 여전히 켤 수 있습니다.


소프트웨어는 하드 드라이브 나 플로피 디스크의 자기 도메인 또는 컴퓨터 칩의 저전압 및 고전압으로 하드웨어에 저장됩니다. 키보드로 입력 할 때 각 문자는 0과 1의 전기적 시리즈로 변환 된 다음 RAM이라는 컴퓨터 칩에 저전압 및 고전압으로 저장됩니다. RAM의 저전압 및 고전압은 나중에 디스크 헤드에서 전압으로 다시 읽을 수 있도록 하드 드라이브 또는 플로피 디스크의 자기 도메인으로 변환되거나 나중에 다시 읽을 수 있도록 비 휘발성 컴퓨터 칩에 저전압 및 고전압으로 저장됩니다. . 저전압과 고전압은 키보드 문자에 의해 생성 된 전기 0과 1을 나타냅니다.


공을 차는 다리가 좋은 예입니다. 기계에서도 비슷합니다. CPU는 시스템의 다른 모든 부분에 연결되지만 물리적 배선 인 신경계와 달리 모든 신경이 한 번에 연결되어 CPU는 시스템의 나머지 부분과 영구적으로 연결되지 않습니다. 전화를 거는 것과 유사하게 필요에 따라 원하는 부분에 연결합니다. 모든 전화기에는 연결이 있지만 한 번에 몇 개만 연결됩니다.

CPU는 소프트웨어 프로그램 인 명령을 실행하여 작동합니다. CPU가 시스템의 일부에 전화를 걸도록 지시하는 명령 코드가 있습니다. 각 부분에는 번호가 있고 CPU에는 번호를 누르라는 명령이 있습니다. CPU가 해당 번호로 전화를 걸면 해당 부분에 메시지를 보냅니다. 메시지는 단순히 데이터입니다. 1 비트에서 임의의 크기 블록까지. 그러면 해당 위치의 하드웨어가 인코딩 된 메시지에 대해 작동합니다.

이렇게하면 CPU는 동일한 메커니즘을 사용하여 하드웨어를 제어 할 수 있습니다. 각 장치에 대해 변경되는 유일한 것은 CPU가 전화를 걸어야하는 번호와 CPU가 장치에 보내는 데이터입니다. 세부 사항은 CPU가 실행중인 소프트웨어에 저장됩니다.

따라서 컴퓨터를 끄기 위해 CPU는 전원 관리 장치의 번호로 전화를 걸어 적절한 전원 상태로 들어가라는 명령을 보냅니다. 하드웨어가 응답하고 PSU가 마더 보드로의 주 전원 전송을 중지합니다.

softare를 작성할 때 이러한 모든 세부 사항을 직접 알 필요는 없습니다. 일반적으로 바로 사용할 수있는 코드로 미리 패키지되어 있으므로 소프트웨어는 "종료"라고 말하면됩니다. 위에 설명 된대로 종료를 수행하기 위해 기성 코드 (일반적으로 BIOS에서)가 실행됩니다.


PC 프로그램과 외부의 실제 세계 사이에는 여러 인터페이스가 있습니다.

일부는 CPU에 연결됩니다. 이러한 예로는 포트 및 하드웨어 인터럽트 (IRQ)가 있습니다. 이를 통해 (호스트 프로그램 요청에 의해) 소량의 데이터를 보내고 하드웨어 트리거를 기반으로 함수 (인터럽트 핸들러)를 호출 할 수 있습니다.

CPU를 우회하는 대량의 데이터를 전송하기위한 더 빠른 인터페이스가 있습니다. 이를 DMA (직접 메모리 액세스)라고합니다. 이들은 데이터를 디스크, 네트워크, 디스플레이 어댑터 등에 전송하는 데 사용됩니다.

포트 IO (OP 코드 IN 및 OUT)의 경우 소프트웨어가 개시 자입니다. IRQ의 경우 하드웨어가 먼저 말하여 소프트웨어 응답을 트리거합니다.

Only device drivers are allowed to do all these. If you try doing it from the application, OS will smash it at instant. Applications connect to this world thru APIs presented by device drivers. Many of the APIs are standardalized, so you can replace actual device without having to interact differently (a printer, disk, keyboard, mouse, CRROM, ATX power supply switch in your example).


Let's compare the physical and the software solutions.

When you push the button, you are actually sending a 5 volt signal to the power supply unit. This 5 volts of power never actually switches off (even when you think your computer is off). You need this 5 volts for when you push the button to turn the computer on - at which point another 5 volts is sent in to the power supply unit to tell it to switch back on.

So in actual fact, your physical button press is converted into an electronic signal in order for the power supply to do something.

When you think of things in these terms you suddenly realise that the computer doesn't need to turn its electronic signal into a physical button-push to turn off the power - that's something they've added to benefit humans (i.e. if you thought there was a tiny motor that pushed a secret internal "off" button - it doesn't exist).

So all the software needs to do is instruct an electronic signal, which triggers the power supply to enter 5 volt standby mode.


Actually, your plain text of codes does not make the computer shutdown directly. It calls a procedure of the underlying operating system. The operating system in turn invokes the ACPI/APM on your main board. This will then make the computer shut down.

How the little 1's and 0's interact with the circuits of your hardware is quite a complex subject which you could read at least one book about to completely understand it...


If in case you are looking for how in general any device is made to perform its action, the device comes with firmwares stored in ROM / CHIP of the control board. The control board is used to control the device through electric signals.

Above the firmware, you will have drivers/service provider. The application will use these service providers/drivers to communicate or instruct the device to perform some action.

Click here to know more on how-firmwares-communicate-to-the-electronic-devices-to-perform-its-operations?


I have pondered the same question for quiet sometime now and come to realize that there are in fact a connection from software(fantasy) world to hardware(real) world.

Think of something as simple as circuits and switches, then think of something more abstract like an adder or ALU. Over time abstraction built on itself and gets complex in the next rom. Then comes the microcode, Opcodes, machine language then finally assembly and C. After that came BIOS, OS, drivers and GUI and hold and behold came your beloved "Shut down" button.


Its simple:The codes/software we write are electric signals represented by 0's(OFF's) and 1's(ON's) on the actual CPU.From that point think of currents and motors.

참고URL : https://stackoverflow.com/questions/3043048/how-does-software-code-actually-communicate-with-hardware

반응형