2012-10-10 4 views
20

프로그램을 컴파일하면 컴퓨터가 "이해할 수있는"기계 코드로 변환됩니다. 키보드에서 입력을받는 것과 같은 일을하기 위해이 머신 코드가 운영 체제와 어떻게 상호 작용합니까? 내 컴퓨터 코드는 운영 체제보다 낮은 수준에서 실행되어야하므로 OS가 컴파일 된 응용 프로그램과 하드웨어 간의 중개자 역할을 수행 할 수있는 방법을 이해할 수 없습니다.컴파일 된 프로그램이 OS와 어떻게 상호 작용합니까?

PS : 난 그냥 C++ 프로그래밍을 시작하고 내가 운영 체제는 프로그램이 낮은 수준의 서비스에 대한 액세스를 얻기 위해 호출 할 수 있습니다 system calls 제공하는 방법 CIN 및 COUT 작업

+1

컴파일 된 응용 프로그램은 다른 컴퓨터 코드의 기능을 포함하는 DLL (Windows의 경우 kernel32.dll과 같은 운영 체제)에 대한 함수 호출 만 수행합니다. 그 다른 기계 코드는 하드웨어와 함께 작동하도록 특별히 작성되었으므로 사용자가하지 않아도됩니다. –

+1

약간 접선이고 질문에 대한 답변이 아니지만 언어와 OS의 경계에 관심이 있다면 프로세스의 여러 단계 중 일부에서 약간의 경외감/두려움/혐오감을 줄 것입니다. 궁금해 ...// http://stackoverflow.com/a/2444508/211160 – HostileFork

답변

23

이것은 아주 좋은 질문 (당신이 아는 것보다 더 나은)이며, 많은 것을 배울가 . 많이.

나는 그것을 짧게하려고 노력할 것이다. 운영 체제 소프트웨어와 하드웨어 사이의 추상화 수준의 역할 :

Software 
     . 
     /|\  
     | communicates with 
     \|/ 
     ' 
Operating System 
     . 
     /|\  
     | communicates with 
     \|/ 
     ' 
    Hardware 

OS가 드라이버 (널리 사용되는 용어)라는 프로그램을 통해 하드웨어와 통신하고, OS가 시스템 호출 절차를 통해 소프트웨어와 통신 (그다지 널리 사용되지 않는 용어)를 호출합니다.

기본적으로 시스템 호출을하면 프로그램을 종료하고 운영 체제 코드를 입력하게됩니다. 프로그래머가 리소스와 통신 할 수있는 유일한 방법은 시스템 호출입니다. 이제


내가 거기 중지,하지만 당신은 또한 말했다 : '나에게

, 기계 코드가 보다 낮은 수준에서 운영 체제를 실행해야한다는 것 때문에, 나는 할 수 OS가 컴파일 된 응용 프로그램과 하드웨어 사이의 중개자 역할을 수행하는 방법을 이해해야합니다.

몇 가지 기본 사항을 이해하면 까다 롭지 만 간단합니다.

먼저 모든 코드는 CPU에서 실행중인 기계 코드입니다. 코드가 다른 코드보다 높거나 낮지는 않습니다 (권한있는 커널 모드에서만 실행할 수있는 일부 명령 제외). 따라서 문제는 CPU가 사용자에게 제어권을 넘겨 주더라도 OS를 어떻게 제어 할 수 있습니까?

코드가 CPU에서 실행되는 경우 이라는 개념이 있습니다. 이 신호는 현재 실행중인 코드를 중단시키고 인터럽트 핸들러이라고하는 다른 코드로 전환되도록하는 신호를 CPU로 보냅니다.

인터럽트의 예로는 키보드, 마우스 및 가장 중요한 시계가 있습니다.

시계 인터럽트가 정기적으로 발생하면 운영 체제의 시계 인터럽트 처리기가 실행됩니다. 이 클럭 인터럽트 처리기 내에서 현재 실행중인 코드를 검사하는 운영 체제 코드는 다음에 실행할 코드를 결정합니다. 이것은 더 많은 운영 체제 코드 또는 더 많은 사용자 코드 일 수 있습니다.

시계가 항상가 똑딱, 운영 체제 때문에 항상은 CPU에서 실행하려면이주기적인 기회를 얻을 수 있기 때문에, 동일한 세트를 사용하여 실행되는 경우에도, 컴퓨터 내에서 모든 것을 조율 할 수있다 정상적인 프로그램처럼 CPU 명령.

+1

아주 간단한 방법으로 그것을 설명하는 훌륭한 직업. –

+2

CPU는 여러 모드 (커널 및 사용자)로 실행될 수 있으며 OS 코드는 상위 권한 커널 모드로 실행됩니다. – OrangeDog

+0

고맙습니다. 아주 좋은 답변이었습니다. 시스템 호출이 응용 프로그램 코드의 실행을 중지시키는 인터럽트와 같고 스위치가 OS 코드와 함께 (즉 실행을 시작하여) 있다고 말하는 것이 맞습니까? – mahela007

5

이해하려고 노력하고 있습니다.

시스템 호출은 외부 프로그램을 실행하는 데 사용한 적이있는 system() 함수와 다릅니다.

시스템 호출은 힙 메모리를 요청, 네트워크를 통해 통신, 액세스 파일과 같은 일을하는 데 사용되는 등

관련 문제