2014-12-18 2 views
5

다른 OS에는 다른 기능이 있지만 궁극적으로는 같은 목적을 가지고 있거나 다른 OS에 다른 시스템 프로그래밍 언어 (Windows와 UNIX의 차이점)가 있다고 말할 수 있습니다.C 라이브러리의 구현은 OS에 의존합니까?

예를 들어, C 라이브러리는 함수의 구현으로 구성되어 있으므로 구현시 동일한 기능을 구현하기 위해 OS에 따라 고유 한 함수를 호출해야합니다. 이 올바른지? Cygwin에서 특별히 Windows 용으로 작성된 C 프로그램과 gcc, 특히 Linux 용으로 컴파일 된 라이브러리가 사용됩니까? 나 맞아? 그렇지 않다면 왜 그렇습니까?

+0

이 질문은 정확해야 할만큼 정확하지는 않지만 실제로 표현하는 방법을 모르겠습니다. 친절히, 나를 용서해주십시오. – PalashV

+0

'printf()'또는'malloc()'과 같은 표준 함수 나'CreateThread()'와 같은 함수에 대해 묻고 있습니까? – dhein

+0

라이브러리는'printf()'등과 같은 함수를 포함하고 있으며 이러한 함수의 구현을 위해 시스템 호출이 필요합니다. – PalashV

답변

4

예. 맞습니다. 다른 OS에는 동일한 기능을하는 다른 기능이 있습니다. 예를 들어, Windows에서는 CreateThread()을 호출하여 스레드를 만들고, Linux에서는 pthread_create()을 호출합니다.

C 런타임에 대해서는 모든 OS가이를 구현하지만 다르게 적용합니다. Windows에서 fopen()CreateFile()을 호출하는 래퍼이고 fopen()open()의 래퍼입니다.

Cygwin 및 기타는 Windows에서 Linux 전용 기능을 구현하기 위해 라이브러리를 추가합니다. 예를 들어, cygwin은 에 대해 수행 한 것처럼 CreateThread()을 랩핑하여 Windows에서 pthread_create()을 구현합니다.

+0

고마워, 이런 식으로해야한다고 생각했지만 OS에 대해 거의 알지 못했다. – PalashV

+0

"리눅스에서 fopen()은 원시 함수입니다"You 're wrong. open()이라고 했니? – edmz

+0

@black 제 잘못,'open()'을 잊어 버렸습니다. – ElderBug

1

그래, 알았다. 내가 더할 수있는 것은별로 없다.

그러나 내가 아는 한 OS가 라이브러리를 제공하고 있으며 이제 막 연결됩니다. 이유는 시스템 특정 구현을 개발하는 프로그래머가 자신의 시스템을 가장 잘 알고 있기 때문입니다. fopen()을 구현하는 것은 단지 하드 디스크에 해당 항목에 대한 차선을 요구하는 것이 아닙니다. (아마 아실 것입니다)

File descriptor로 작업하는 다른 구현의 많은 상황을 존경해야합니다. 그리고 아마도 당신은 generell의 행동을 위해 필요하지 않은 운영 체제의 특정 기능에서 일어나는 일에 의존해야합니다. 그러나 귀하의 환경에서 이것은 모든 것을 계속 실행합니다.

그 이유는 C 표준이 표준 라이브러리의 소스 코드를 변경한다고해서 자명 한 함수가 여전히 동일한 동작 (사용자를 위해 인용을 시도했지만 미안합니다) 인 경우에도 정의되지 않은 동작을 초래합니다.

그럼 모든 최적화 작업이 있습니다. generell 구현이있을 수 있지만 대부분 OS 전체가 구현에 기반하고 있기 때문에 모든 OS는 자신의 사례에 대해 최선을 다하는 데 관심이 있습니다.

(아마 유일한 내가 다른 이름을 수 있기하지만 OS 개발에 그 깊은 아니에요)

1

라이브러리 함수의 두 가지 유형이 있음을 알아 두셔야합니다 : 유틸리티 및 시스템 래퍼. 휴대용 라이브러리를 만들려는 공급 업체라고 가정 해 봅시다.

sprintf 및 atoi와 같은 유틸리티 기능은 OS 시스템 서비스가 필요 없기 때문에 모든 구현에서 동일하게 적용됩니다.

일반적으로 라이브러리에는 추상화 레이어가 있습니다.

void * getBytesFromOS (unsigned int count) ; 

과 같은 기능을 메모리 페이지에 할당 할 수 있습니다. 다양한 시스템에 대해 서로 다른 구현이 가능합니다.이러한 인터페이스를 사용하는 malloc 함수는 운영 체제에서 99 % 동일 할 수 있습니다.

2

예.

ElderBug's answer에 추가하려면 다양한 유형의 시스템 호출에 대한 래퍼 역할을하는 C 라이브러리가 시스템마다 다릅니다. 다음과 같은 시스템 호출 (NYU's Operating Systems, Lecture #4)은 프로세스를 사용자 모드에서 수퍼바이저/커널 모드로 전환합니다.

주 사용자 모드 (포장기)와 커널 모드 (OS '구현)을 구별의 목적, from the lecture:

중요한 OS 목적은 간단한 절차 호출 의미가 관찰된다는 것이다 사용자 프로세스 관점. 복잡성은 커널 내부에 숨겨져 있지만, 사용자 시스템에보다 추상적 인, 즉보다 단순한 가상 머신을 제공하는 운영 체제의 또 다른 예입니다. 아시다시피

enter image description here

, 이러한 샘플 호출은 Windows 및 Linux와 같은 다른 운영 체제에서 유사하지 않은,하지만 C 래퍼 함수의 이름은 미리 컴파일 된 언어 자체 --otherwise 있습니다 시스템마다 다를 수 있습니다.

희망 하시겠습니까?