이것은 아주 좋은 질문 (당신이 아는 것보다 더 나은)이며, 많은 것을 배울가 . 많이.
나는 그것을 짧게하려고 노력할 것이다. 운영 체제 소프트웨어와 하드웨어 사이의 추상화 수준의 역할 :
Software
.
/|\
| communicates with
\|/
'
Operating System
.
/|\
| communicates with
\|/
'
Hardware
OS가 드라이버 (널리 사용되는 용어)라는 프로그램을 통해 하드웨어와 통신하고, OS가 시스템 호출 절차를 통해 소프트웨어와 통신 (그다지 널리 사용되지 않는 용어)를 호출합니다.
기본적으로 시스템 호출을하면 프로그램을 종료하고 운영 체제 코드를 입력하게됩니다. 프로그래머가 리소스와 통신 할 수있는 유일한 방법은 시스템 호출입니다. 이제
내가 거기 중지,하지만 당신은 또한 말했다 : '나에게
, 기계 코드가 보다 낮은 수준에서 운영 체제를 실행해야한다는 것 때문에, 나는 할 수 OS가 컴파일 된 응용 프로그램과 하드웨어 사이의 중개자 역할을 수행하는 방법을 이해해야합니다.
몇 가지 기본 사항을 이해하면 까다 롭지 만 간단합니다.
먼저 모든 코드는 CPU에서 실행중인 기계 코드입니다. 코드가 다른 코드보다 높거나 낮지는 않습니다 (권한있는 커널 모드에서만 실행할 수있는 일부 명령 제외). 따라서 문제는 CPU가 사용자에게 제어권을 넘겨 주더라도 OS를 어떻게 제어 할 수 있습니까?
코드가 CPU에서 실행되는 경우 이라는 개념이 있습니다. 이 신호는 현재 실행중인 코드를 중단시키고 인터럽트 핸들러이라고하는 다른 코드로 전환되도록하는 신호를 CPU로 보냅니다.
인터럽트의 예로는 키보드, 마우스 및 가장 중요한 시계가 있습니다.
시계 인터럽트가 정기적으로 발생하면 운영 체제의 시계 인터럽트 처리기가 실행됩니다. 이 클럭 인터럽트 처리기 내에서 현재 실행중인 코드를 검사하는 운영 체제 코드는 다음에 실행할 코드를 결정합니다. 이것은 더 많은 운영 체제 코드 또는 더 많은 사용자 코드 일 수 있습니다.
시계가 항상가 똑딱, 운영 체제 때문에 항상은 CPU에서 실행하려면이주기적인 기회를 얻을 수 있기 때문에, 동일한 세트를 사용하여 실행되는 경우에도, 컴퓨터 내에서 모든 것을 조율 할 수있다 정상적인 프로그램처럼 CPU 명령.
컴파일 된 응용 프로그램은 다른 컴퓨터 코드의 기능을 포함하는 DLL (Windows의 경우 kernel32.dll과 같은 운영 체제)에 대한 함수 호출 만 수행합니다. 그 다른 기계 코드는 하드웨어와 함께 작동하도록 특별히 작성되었으므로 사용자가하지 않아도됩니다. –
약간 접선이고 질문에 대한 답변이 아니지만 언어와 OS의 경계에 관심이 있다면 프로세스의 여러 단계 중 일부에서 약간의 경외감/두려움/혐오감을 줄 것입니다. 궁금해 ...// http://stackoverflow.com/a/2444508/211160 – HostileFork